You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Hedera JS SDK解码Hedera测试网合约返回的结构体数组

在Hedera测试网解码合约返回的结构体数组

前提准备

  • 必须持有目标合约的完整ABI,重点包含要解码的结构体定义和get函数声明。比如你的Solidity合约代码片段可能如下:
struct MyStruct {
    uint256 id;
    string name;
    bool active;
}

function get() external view returns (MyStruct[] memory);

步骤1:发起合约调用获取返回字节

使用ContractCallQuery执行调用,拿到ABI编码后的返回字节数据:

const { Client, ContractCallQuery, AccountId, PrivateKey } = require("@hashgraph/sdk");

async function callGetFunction() {
    // 初始化Hedera测试网客户端
    const client = Client.forTestnet();
    client.setOperator(AccountId.fromString("你的账户ID"), PrivateKey.fromString("你的私钥"));

    // 构建合约调用查询
    const contractCall = new ContractCallQuery()
        .setContractId("合约地址X") // 替换为你的合约ID/地址
        .setGas(100000)
        .setFunction("get");

    // 执行查询并获取结果
    const response = await contractCall.execute(client);
    const resultBytes = response.bytes; // 提取ABI编码的返回字节

    // 后续解码逻辑写在这里
}

callGetFunction();

步骤2:解码结构体数组

Hedera合约调用的返回数据遵循以太坊ABI编码规范,直接用ethers.js的Interface工具解码即可:

安装依赖(未安装时执行)

npm install ethers

解码代码实现

const { ethers } = require("ethers");

// 传入包含结构体和get函数的合约ABI
const contractAbi = [
    "struct MyStruct { uint256 id; string name; bool active; }",
    "function get() external view returns (MyStruct[] memory)"
];

// 初始化ethers Interface实例
const iface = new ethers.Interface(contractAbi);

// 解码返回字节数据
const decodedData = iface.decodeFunctionResult("get", resultBytes);

// 遍历使用解码后的结构体数组
console.log("解码结果:", decodedData);
decodedData.forEach((item, idx) => {
    console.log(`第${idx+1}项:`);
    console.log(`id: ${item.id.toString()}`);
    console.log(`name: ${item.name}`);
    console.log(`active: ${item.active}`);
});

关键注意事项

  • ABI中的结构体字段顺序、类型必须和合约中的定义完全一致,否则会解码失败。
  • 若结构体包含嵌套结构体、多维数组等复杂类型,ABI也要同步包含对应完整定义。
  • 虽然ContractFunctionResult提供了getUint256、getString等单个字段的读取方法,但对于结构体数组,直接用ethers的Interface解码效率更高。

内容的提问来源于stack exchange,提问作者Tahlil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:56:06