使用near-api-js签名交易报错:schema缺失actions.actions类对象
解决near-api-js v0.45.1签名交易时的"Class Object is missing in schema: actions.actions"错误
你的问题出在手动构造的actions格式不符合near-api-js v0.45.1的schema要求,必须使用库内置的action构造函数生成正确的action对象,不能自己定义带enum字段的结构。
正确步骤:
- 先导入所需工具函数
const { transactions, utils } = nearAPI;
- 用
transactions.functionCall构造符合要求的action
// 构造functionCall类型的action const action = transactions.functionCall( "addMessage", // 调用的合约方法名 { text: "adsf" }, // 方法参数,直接传JSON对象即可,库会自动序列化 utils.format.parseNearAmount("0"), // 附加的NEAR存款,这里传0 utils.format.parseNearAmount("0.0000000000001") // 分配的gas,按需调整数值 ); // 把action放进数组(交易可以包含多个action) const actions = [action];
- 再用你原来的方式一或方式二签名交易即可
- 方式一:
const signedTransaction = await transactions.signTransaction( receiverId, nonce, actions, blockHash, signer, accountId, networkId );
- 方式二:
const transaction = transactions.createTransaction( signerId, publicKey, receiverId, nonce, actions, blockHash ); const signedTransaction = await transactions.signTransaction( transaction, accountId, networkId );
错误原因说明:
你手动编写的action对象存在两个问题:
- 额外添加了
enum字段,这不是near-api-js内部schema认可的结构 - gas、deposit用了原始的BN对象格式,args直接传字节数组,这些都不符合库的参数要求
使用官方构造函数会自动处理参数序列化、类型标记等细节,完全匹配schema验证规则。
内容的提问来源于stack exchange,提问作者Amit Tayade
相关产品推荐
相关产品推荐

