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

如何在TypeScript中正确Borsh序列化参数调用Aurora合约

问题:通过NEAR账户调用Aurora测试网合约的inc()方法时Borsh序列化失败

背景

我在Aurora测试网部署了如下Solidity合约:

pragma solidity >=0.6.12 <0.9.0;

contract Counter {
  uint256 value;

  function print() public view returns (uint256) {
    return value;
  }

  function inc() public {
    value = value + 1;
  }
}

我的需求是通过NEAR账户,与部署在NEAR测试网的aurora合约交互,进而调用上述Counter合约的inc()方法。

尝试的实现步骤

我使用borsh-js对调用参数进行Borsh序列化,定义的schema如下:

const functionCallArgsV2 = {
    struct: {
      contract: "string",
      value: "u8",
      input: { array: { type: "u8" } },
    },
  };

const schema = {
    enum: [
      {
        struct: {
          FunctionCallArgsV2: functionCallArgsV2,
        },
      },
    ],
  };

为简化场景,我尝试序列化以下参数并发起调用:

const address = "0x202ef3618820deadca5017cc585d489c585cc2e3";
const input = "0x371303c0"; // inc方法的calldata
const value = 0;

const inputBase64 = Buffer.from(input, "hex").toString("base64");
const inputEncoded = Buffer.from(inputBase64, "base64");
const data = {
    FunctionCallArgsV2: {
      contract: contractEncoded,
      value: value,
      input: inputEncoded,
    },
  };

const dataEncoded = borsh.serialize(schemaZ, data);

const functionCallResponse = await account.functionCall({
    contractId: AURORA,
    methodName: "call",
    args: dataEncoded,
  });

遇到的错误

交易执行后返回如下错误:

{
  "ActionError": {
    "index": 0,
    "kind": {
      "FunctionCallError": {
        "ExecutionError": "Smart contract panicked: ERR_BORSH_DESERIALIZE"
      }
    }
  }
}

提问

请问如何正确完成Borsh序列化,成功调用目标合约的inc()方法?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:45:56