如何向HashPack发送交易签名?前端签名Topic交易时报错求助
解决HashConnect签名TopicMessageSubmitTransaction时的"seconds"未定义错误
错误原因
你遇到的TypeError: Cannot read properties of undefined (reading 'seconds'),本质是手动创建的TransactionId没有正确初始化时间戳字段。当HashConnectSigner执行签名操作时,会调用交易的freezeWith方法,此时需要读取交易ID的时间戳(seconds属性),但手动构造的TransactionId缺少这个值,导致报错。
修复方案
替换手动创建TransactionId的方式,改用官方提供的TransactionId.generate()方法,它会自动生成包含有效时间戳的交易ID。同时建议显式设置交易有效期,避免其他潜在问题。
修改后的代码:
const accountId = AccountId.fromString(你的账户ID); // 改用generate方法创建TransactionId,自动生成时间戳 const transactionId = TransactionId.generate(accountId); const transaction = new TopicMessageSubmitTransaction() .setTopicId(id) .setMessage(JSON.stringify(message)) .setTransactionId(transactionId) // 显式设置交易有效期(单位:秒,这里设为60秒) .setTransactionValidDuration(60); const signedTransaction = await transaction.signWithSigner(signer);
额外说明
TransactionId.generate()会基于当前时间生成符合要求的交易ID,确保时间戳字段(seconds)正确初始化。- 显式设置
TransactionValidDuration可以避免因默认有效期过短导致的交易失效问题,提升签名和提交的稳定性。
内容的提问来源于stack exchange,提问作者Pathorn Teng
相关产品推荐
相关产品推荐

