赞助交易
本节介绍如何使用 Aptos .NET SDK 执行赞助交易。
请务必先了解构建交易的基础知识。如不了解,请参阅以下指南。
基础交易 了解如何使用 Aptos .NET SDK 构建基础交易。
创建赞助交易
Section titled “创建赞助交易”-
配置 AptosClient
通过添加
Aptos命名空间并实例化AptosClient来配置 Aptos 客户端。你可以使用Networks提供的预定义配置,也可以自行配置。using Aptos;class Program{static void Main(string[] args){var config = new AptosConfig(Aptos.Networks.Mainnet);var client = new AptosClient(config);}} -
配置账户
创建赞助交易时,必须有赞助者和用户。在本例中:
- **用户:**向接收者发送 APT 的账户。
- 赞助者:支付交易Gas 费用的账户。
using Aptos;class Program{static void Main(string[] args){var config = new AptosConfig(Aptos.Networks.Devnet);var client = new AptosClient(config);// 1. Create accounts and fund it them.var user = Account.Generate();var recipient = Account.Generate();var sponsor = Account.Generate();await client.Faucet.FundAccount(user.Address, 100_000_000);await client.Faucet.FundAccount(sponsor.Address, 100_000_000);}} -
构建交易
现在可以使用
AptosClient构建交易。必须在交易中启用withFeePayer标志,才能启用赞助交易。using Aptos;class Program{static void Main(string[] args){...// 2. Build the transactionvar transaction = await client.Transaction.Build(sender: account,data: new GenerateEntryFunctionPayloadData(function: "0x1::aptos_account::transfer_coins",typeArguments: ["0x1::aptos_coin::AptosCoin"],functionArguments: [account.Address, "100000"]),// It's important to set this flag to true to enable sponsored transactionswithFeePayer: true);}} -
使用两个账户签名交易
让用户和赞助者都签署交易。这可确保赞助者同意支付交易费用,用户同意执行交易。使用赞助者签名时,应改用
SignAsFeePayer方法。using Aptos;class Program{static void Main(string[] args){...// 3. Sign the transaction with the uservar userSignature = client.Transaction.SignTransaction(transaction);// 4. Sign the transaction with the sponsorvar feePayerSignature = client.Transaction.SignAsFeePayer(feePayer, transaction);}} -
提交交易
用户和赞助者都签名后,即可将交易提交到区块链。
AptosClient可用于提交交易。using Aptos;class Program{static void Main(string[] args){...// 5. Submit the transactionvar submitTransactionData = new SubmitTransactionData(transaction, userSignature, feePayerSignature);var submittedTransaction = await client.Transaction.SubmitTransaction(submitTransactionData);}} -
等待交易执行
交易提交后,需要先完成处理,才能提交到区块链。
AptosClient可用于等待交易被处理和执行。using Aptos;class Program{static void Main(string[] args){...// 6. Wait for the transaction to be processedvar transactionResult = await client.Transaction.WaitForTransaction(submittedTransaction.Hash);}} -
打印余额
交易提交到区块链后,可打印用户和接收者的余额。
using Aptos;class Program{static void Main(string[] args){...// 7. Print balancesvar userBalance = await client.Account.GetCoinBalance(user.Address);var feePayerBalance = await client.Account.GetCoinBalance(feePayer.Address);var recipientBalance = await client.Account.GetCoinBalance(recipient.Address);Console.WriteLine($"User {user.Address} has {userBalance?.Amount ?? 0} APT");Console.WriteLine($"FeePayer {feePayer.Address} has {feePayerBalance?.Amount ?? 0} APT");Console.WriteLine($"Recipient {recipient.Address} has {recipientBalance?.Amount ?? 0} APT");}}结果应如下所示:
Terminal window User 0xffd89f1e2fef8c67cfb1b99d58ea799281f1d1a0a178db49c3eacab2fe7c0735 has 99900000 APTFeePayer 0x842ca7d995255ee73186a6793d6bde7c983c528be7b1a25e1614f4eddb744d4c has 99900100 APTRecipient 0x823010a52a589ef528d14ebee4a4af56a00f0ae8afba135c9268581a960e21d7 has 100000 APT用户向接收者发送了 0.001 APT,因此用户剩余 0.999 APT。赞助者支付了交易的 Gas 费用,因此赞助者剩余 0.999001 APT。