使用polkadot-js能否将签名与发送交易拆分到不同机器异步执行?
Polkadot-js 拆分签名与交易发送实现方案
你想要的将签名、发送交易拆分到不同机器执行的需求完全可以实现,这属于polkadot-js原生支持的离线签名典型场景,你的思路方向是对的,只需要调整下具体实现逻辑即可:
客户端(浏览器侧)签名逻辑
不要仅提取单独的签名值传输,signAsync 执行完成后交易实例本身已经包含完整的签名、nonce、交易有效期等必要信息,直接序列化后传输即可:
const transfer = api.tx.balances.transfer(BOB, 12345); // 完成签名,交易实例内部会写入签名、当前nonce、交易生命周期等参数 await transfer.signAsync(alice); // 序列化为十六进制字符串,可直接通过HTTP传输到服务端 const signedTxHex = transfer.toHex();
服务端发送交易逻辑
不需要自行实现mockSigner,直接将客户端传输过来的已签名交易反序列化后直接发送即可,无需二次签名:
// 接收客户端传来的signedTxHex const signedTx = api.tx(signedTxHex); // 直接广播交易到链上 const txHash = await signedTx.send();
注意事项
- 客户端和服务端对接的链配置必须完全一致,包括SS58地址前缀、runtime版本、交易版本等,否则会出现签名无效的问题
- 客户端签名时获取的账户nonce必须和链上当前账户的实际nonce匹配,重复nonce会导致交易被链拒绝
- 交易签名有有效期,默认是256个区块,需要在有效期内完成交易广播,过期后需要重新签名
内容的提问来源于stack exchange,提问作者Joey
相关产品推荐
相关产品推荐

