Sui 构造一笔赞助交易

  • sycute
  • 更新于 2024-04-25 22:30
  • 阅读 979

我们看到的赞助交易是如何构造出来的?交易者和赞助方分别做了哪些事情?

1. 声明调用的合约

let txb = new TransactionBlock();
txb.moveCall({
    ....
})
...

在 ptb 中使用moveCall确定自己的业务逻辑,

2. 赞助方签名

// keypair = new Ed25519Keypair();
// const address = keypair.getPublicKey().toSuiAddress();
payment = {
  objectId: coin.coinObjectId,
  version: coin.version,
  digest: coin.digest,
};

txb.setSender(sender); // 真实交易者
txb.setGasOwner(address); // 赞助者
txb.setGasPayment(payment);

// 赞助方使用自己的私钥对交易进行签名
return keypair.signTransactionBlock(await tx.build({ client }));

赞助人的私钥对交易进行签名,最终得到以下结构:

{
  "signature": "ABGWh2i8iJOLLxNUckS6AKKh5NT+Qzt3SaC3+/SV84r9RkecJlEEZ9AbyER7g4zq1U+5bKeXoGX5+quhb3LzRAmy9pq2I6M+S9N76FCsPwJQD7wgt9NLYKdvcMsoCm5gTg==",
  "bytes": "AAACAAgBAAAAAAAAAAAg3BxkU0BsJQ4RRN5uwoslfmk2Ne57E18nxW7iR9sSvX0CAgABAQAAAQEDAAAAAAEBANwcZFNAbCUOEUTebsKLJX5pNjXuexNfJ8Vu4kfbEr19AZU7TYd8JXClrxtw7G4v5Azq7uV9D5mZrVTeeB/L/azj51gOAAAAAAAgAtz2AT9CIW7EGjomM2pZqriIJ1BeQrzYwVChoRo5wARAOlIlr4WCa3SLlNc1Y+1kjzkGKGaDkxSuJvNsqRuL3egDAAAAAAAAQKs8AAAAAAAA"
}

3. 真实交易者签名

交易者使用钱包对sponsoredTx.bytes部分(交易内容)进行签名,得到第二份signature

{
  "transactionBlockBytes": "AAACAAgBAAAAAAAAAAAg3BxkU0BsJQ4RRN5uwoslfmk2Ne57E18nxW7iR9sSvX0CAgABAQAAAQEDAAAAAAEBANwcZFNAbCUOEUTebsKLJX5pNjXuexNfJ8Vu4kfbEr19AZU7TYd8JXClrxtw7G4v5Azq7uV9D5mZrVTeeB/L/azj51gOAAAAAAAgAtz2AT9CIW7EGjomM2pZqriIJ1BeQrzYwVChoRo5wARAOlIlr4WCa3SLlNc1Y+1kjzkGKGaDkxSuJvNsqRuL3egDAAAAAAAAQKs8AAAAAAAA",
  "signature": "AAdh6RyAm6KTyknuJvtC0F96rTu/hZ+APLOi0td9uwP1Rn43+fxcxWUkjLy788A+lHklcjYbv9cwGc7fzLnuwQqRknXirZobikj4ctjYPiQSPr/ndNIJHGSaxeTIJAWD0Q=="
}

此时signedTxsponsoredTxbytes内容一致,即交易内容一致。

此时浏览器钱包签名时唤起,可以看到其中的赞助交易信息。

wallet_signtx

4. 提交给网络执行

client.executeTransactionBlock({
  transactionBlock: signedTx.transactionBlockBytes,
  signatures: [signedTx.signature, sponsoredTx.signature],
  options: { showEffects: true, showEvents: true, showObjectChanges: true },
});

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
sycute
sycute
0x80d6...FdC9
电报联系 @luosanzhang