我们看到的赞助交易是如何构造出来的?交易者和赞助方分别做了哪些事情?
let txb = new TransactionBlock();
txb.moveCall({
....
})
...
在 ptb 中使用moveCall
确定自己的业务逻辑,
// 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"
}
交易者使用钱包对sponsoredTx.bytes
部分(交易内容)进行签名,得到第二份signature
。
{
"transactionBlockBytes": "AAACAAgBAAAAAAAAAAAg3BxkU0BsJQ4RRN5uwoslfmk2Ne57E18nxW7iR9sSvX0CAgABAQAAAQEDAAAAAAEBANwcZFNAbCUOEUTebsKLJX5pNjXuexNfJ8Vu4kfbEr19AZU7TYd8JXClrxtw7G4v5Azq7uV9D5mZrVTeeB/L/azj51gOAAAAAAAgAtz2AT9CIW7EGjomM2pZqriIJ1BeQrzYwVChoRo5wARAOlIlr4WCa3SLlNc1Y+1kjzkGKGaDkxSuJvNsqRuL3egDAAAAAAAAQKs8AAAAAAAA",
"signature": "AAdh6RyAm6KTyknuJvtC0F96rTu/hZ+APLOi0td9uwP1Rn43+fxcxWUkjLy788A+lHklcjYbv9cwGc7fzLnuwQqRknXirZobikj4ctjYPiQSPr/ndNIJHGSaxeTIJAWD0Q=="
}
此时
signedTx
和sponsoredTx
的bytes
内容一致,即交易内容一致。
此时浏览器钱包签名时唤起,可以看到其中的赞助交易信息。
client.executeTransactionBlock({
transactionBlock: signedTx.transactionBlockBytes,
signatures: [signedTx.signature, sponsoredTx.signature],
options: { showEffects: true, showEvents: true, showObjectChanges: true },
});
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!