0

我浏览了官方文档,找到了一个关于如何使用 polkadot-js 进行转账的页面https://polkadot.js.org/docs/api/examples/promise/make-transfer

const transfer = api.tx.balances.transfer(BOB, 12345);
const hash = await transfer.signAndSend(alice);

我想知道我是否可以将signAndSend方法一分为二并在不同的机器上执行。就像在客户端机器中一样,在浏览器中计算签名。

const transfer = api.tx.balances.transfer(BOB, 12345);
const signature = await transfer.signAsync(alice);

然后在服务器端发送转账交易。

const mockSigner = createMockSigner(signature); // signature is computed from the client side and send to server over HTTP
const transfer = api.tx.balances.transfer(BOB, 12345);
const res = transfer.send({signer: mockSigner});

上面的例子行不通,我只是想表达我是否可以在不同的机器上签名和发送。

4

2 回答 2

1

在一台计算机上签署交易并从另一台计算机发送它绝对是可能的。

PolkadotJS 工具包含一种用于离线构建和签署交易的方法。你可以在这里找到源代码。请注意,在浏览器中构建交易仍然需要访问 polkadot 节点(endpoint代码中的)。

签名者 sendOffline 命令具有完全相同的 API,但不会广播交易。submit 和 sendOffline 必须连接到节点以获取当前元数据并构造有效事务。他们的 API 格式如下:

因此,您需要在浏览器中运行一个轻量级客户端,以便访问当前块信息或附加到浏览器之外的某个其他节点端点。

于 2021-11-16T19:33:31.220 回答
0

离线签到版: https ://gist.github.com/xcaptain/4d190232411dcf27441d9fadd7ff6988

网上签到版:

const transfer = api.tx.balances.transfer(BOB, 12345);
const signedExtrinsic = await transfer.signAsync(alice).toJSON();
await api.rpc.author.submitExtrinsic(signedExtrinsic);

不知道有什么区别,但它们都有效。

于 2021-11-21T17:14:17.767 回答