Hedera与Hashpack转账交易:非同时在场下获取买卖双方签名方案咨询
针对Hedera+Hashpack跨方离线签名转账的实现方案
核心思路
Hedera原生支持离线签名机制,这是解决买卖双方无法同时在场的核心——不需要双方实时在线,只要能安全传递待签名/已部分签名的交易字节流即可完成多签流程。
1. 利用Hashpack原生能力实现(推荐,无需额外开发工具)
Hashpack钱包本身支持导出/导入待签名交易,完全可以满足跨方签名需求,具体流程如下:
- 你的dapp通过Hedera SDK构造转账交易(Hbar或FT/NFT转账均可),设置好双方账户地址、转账金额、交易有效期(建议延长至5-10分钟,避免签名过程中过期),然后调用
transaction.toBytes()生成待签名的交易字节流。 - 将这个字节流通过加密渠道(比如生成加密二维码、加密文件传输)发送给任意一方(比如卖方)。
- 卖方打开Hashpack,通过「导入待签名交易」功能加载该字节流,完成签名后导出已部分签名的交易字节流。
- 把这个部分签名的交易字节流发送给买方,买方同样用Hashpack导入并完成签名,得到完全签名的交易文件。
- 最后你的dapp将完全签名的交易字节流反序列化(
Transaction.fromBytes()),提交到Hedera网络执行。
这种方案完全依赖Hashpack的原生功能,你只需要处理交易字节流的生成、传递和提交逻辑,不需要开发额外的签名工具。
2. 定制化签名流程(适合业务需求特殊场景)
如果Hashpack的导出/导入流程不符合你的dapp交互逻辑(比如需要嵌入dapp内完成签名流转),可以基于Hedera SDK和Hashpack的Wallet Connect接口自行开发:
- 用Hedera SDK创建转账交易,调用
transaction.setTransactionValidDuration()调整有效期,然后生成待签名交易字节流。 - 通过Hashpack的Wallet Connect连接到用户钱包,调用签名接口请求用户对该交易签名,获取签名后用
transaction.addSignature()将签名附加到交易上。 - 将带有部分签名的交易序列化后,通过你的dapp后端或加密渠道传递给另一方,重复签名步骤。
- 收集完双方签名后,提交交易到Hedera网络。
关键注意事项
- 交易有效期:默认120秒的有效期大概率不够跨方签名流转,一定要手动设置更长的有效期(比如5分钟以上)。
- 交易完整性:传递交易字节流时,建议附带交易哈希值,接收方可以通过
transaction.getTransactionHash()校验,防止交易参数被篡改。 - 签名顺序:Hedera对多签的顺序没有要求,任意一方先完成签名都可以。
内容的提问来源于stack exchange,提问作者EmmBee
相关产品推荐
相关产品推荐

