使用HashPack与Hedera JavaScript SDK签名交易时遇TypeError错误求助
问题与解决方案
问题描述
我尝试在前端对交易进行签名,然后将签名后的字节发送到后端执行交易,但签名环节一直失败。我已经将应用与HashConnect配对并获取了signer,但签名操作始终无法成功。当前代码如下:
const transactionId = new TransactionId(AccountId.fromString(accountId)); const transaction = new TopicMessageSubmitTransaction() .setTopicId(id) .setMessage(JSON.stringify(message)) .setTransactionId(transactionId); const signedTransaction = await transaction.signWithSigner(signer);
运行代码时抛出以下错误:
TopicMessageSubmitTransaction.js:293 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'seconds') at TopicMessageSubmitTransaction.freezeWith (TopicMessageSubmitTransaction.js:293:1) at HashConnectSigner.signTransaction (signer.ts:66:1) at TopicMessageSubmitTransaction.signWithSigner (Transaction.js:990:1) at postReply (Thread.js:133:1) at onSubmit (Thread.js:252:1) at HTMLUnknownElement.callCallback (react-dom.development.js:4164:1) at Object.invokeGuardedCallbackDev (react-dom.development.js:4213:1) at invokeGuardedCallback (react-dom.development.js:4277:1) at invokeGuardedCallbackAndCatchFirstError (react-dom.development.js:4291:1) at executeDispatch (react-dom.development.js:9041:1)
问题原因
报错核心是手动创建的TransactionId缺少有效时间戳(validStart)。当交易执行freezeWith操作时,需要读取TransactionId中validStart的seconds属性,但你只传入了AccountId,导致validStart为undefined,触发类型错误。
解决方法
方法一:自动生成合法交易ID
改用SDK的TransactionId.generate()方法创建包含有效时间戳的交易ID:
const transactionId = TransactionId.generate(AccountId.fromString(accountId)); const transaction = new TopicMessageSubmitTransaction() .setTopicId(id) .setMessage(JSON.stringify(message)) .setTransactionId(transactionId); const signedTransaction = await transaction.signWithSigner(signer);
方法二:省略手动设置交易ID
直接跳过setTransactionId调用,TopicMessageSubmitTransaction会在内部自动生成符合要求的交易ID:
const transaction = new TopicMessageSubmitTransaction() .setTopicId(id) .setMessage(JSON.stringify(message)); const signedTransaction = await transaction.signWithSigner(signer);
额外说明
Hedera交易ID必须包含账户ID和有效起始时间戳,这是交易合法性的必要条件。手动创建时忽略时间戳会导致后续签名、冻结流程因缺少必要字段失败,使用generate()方法可确保生成合规的交易ID,避免此类问题。
内容的提问来源于stack exchange,提问作者Pathorn Teng
相关产品推荐
相关产品推荐

