如何在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
相关产品推荐
相关产品推荐

