Python SDK:赞助交易
通常,执行交易的账户支付 Gas 费用。可以通过赞助交易,让另一账户承担这些费用。
在处理复杂智能合约时,这可用于从中心账户管理费用。
如何赞助交易
Section titled “如何赞助交易”-
构建 a raw transaction for the sender, then wrap it in
FeePayerRawTransaction.raw_txn = await aptos.transaction.build(sender=alice.address,payload=TransactionPayload(payload),)fee_payer_txn = FeePayerRawTransaction(raw_txn, secondary_signers=[], fee_payer=sponsor.address) -
由发送方和费用支付方同时为该费用支付方交易签名。
alice_auth = fee_payer_txn.sign(alice.private_key)sponsor_auth = fee_payer_txn.sign(sponsor.private_key) -
将签名组合成
FeePayerAuthenticator并提交。authenticator = Authenticator(FeePayerAuthenticator(sender=alice_auth,secondary_signers=[],fee_payer=(sponsor.address, sponsor_auth),))txn_hash = await aptos.transaction.submit(SignedTransaction(raw_txn, authenticator)) -
等待交易执行。
result = await aptos.transaction.wait_for_transaction(txn_hash)
Python 赞助交易代码示例
Section titled “Python 赞助交易代码示例”import asyncio
from aptos_sdk.v2 import Account, Aptos, AptosConfig, Networkfrom aptos_sdk.v2.bcs import Serializerfrom aptos_sdk.v2.transactions import ( Authenticator, EntryFunction, FeePayerAuthenticator, FeePayerRawTransaction, SignedTransaction, TransactionArgument, TransactionPayload,)from aptos_sdk.v2.types import StructTag, TypeTag
async def main(): async with Aptos(AptosConfig(network=Network.DEVNET)) as aptos: alice = Account.generate() bob = Account.generate() sponsor = Account.generate()
await asyncio.gather( aptos.faucet.fund_account(alice.address, 100_000_000), aptos.faucet.fund_account(bob.address, 10_000_000), aptos.faucet.fund_account(sponsor.address, 100_000_000), )
payload = EntryFunction.natural( "0x1::coin", "transfer", [TypeTag(StructTag.from_str("0x1::aptos_coin::AptosCoin"))], [ TransactionArgument(bob.address, Serializer.struct), TransactionArgument(10_000, Serializer.u64), ], ) raw_txn = await aptos.transaction.build( sender=alice.address, payload=TransactionPayload(payload), ) fee_payer_txn = FeePayerRawTransaction( raw_txn, secondary_signers=[], fee_payer=sponsor.address )
alice_auth = fee_payer_txn.sign(alice.private_key) sponsor_auth = fee_payer_txn.sign(sponsor.private_key) authenticator = Authenticator( FeePayerAuthenticator( sender=alice_auth, secondary_signers=[], fee_payer=(sponsor.address, sponsor_auth), ) )
txn_hash = await aptos.transaction.submit(SignedTransaction(raw_txn, authenticator)) result = await aptos.transaction.wait_for_transaction(txn_hash) print(f"Success: {result['success']}") print(f"Gas used: {result['gas_used']}")
asyncio.run(main())