Aptos交易参数传递:Object与Option类型序列化问题
解决Aptos Python应用中的Object与Option参数序列化问题
核心思路
不要手动用Serialize.map处理参数,而是利用Aptos Python SDK的TransactionArgument结合对应TypeTag,让SDK自动完成符合BCS规范的序列化,避免手动构造格式出错。
1. 0x1::object::Object<T>类型参数序列化
Object类型本质是包裹地址的结构体,只需传递Object的地址字符串,并指定对应的TypeTag即可,SDK会自动将其序列化为Explorer中显示的{"inner": "0x..."}格式。
示例代码:
from aptos_sdk.transactions import TransactionArgument, TypeTag, StructTag # 替换为你的CollectionOffer Object地址 collection_offer_addr = "0x..." collection_offer_arg = TransactionArgument( collection_offer_addr, TypeTag(StructTag.from_str("0x1::object::Object<0x...::collection_offer::CollectionOffer>")) ) # 替换为你的Token Object地址 token_addr = "0x..." token_arg = TransactionArgument( token_addr, TypeTag(StructTag.from_str("0x1::object::Object<0x4::token::Token>")) )
2. 0x1::option::Option<T>类型参数序列化
Option类型分两种情况处理:
- 空Option(对应Explorer中的
{"vec": []}):直接传递None并指定对应的Option类型Tag; - 有值的Option:传递对应的值(如Listing Object地址)并指定类型Tag,SDK会自动包装为
Option::Some格式。
示例代码:
# 空Option示例(对应无Listing的场景) empty_listing_option_arg = TransactionArgument( None, TypeTag(StructTag.from_str("0x1::option::Option<0x1::object::Object<0x...::listing::Listing>>")) ) # 有值Option示例(如果需要传递Listing) listing_addr = "0x..." some_listing_option_arg = TransactionArgument( listing_addr, TypeTag(StructTag.from_str("0x1::option::Option<0x1::object::Object<0x...::listing::Listing>>")) )
完整Payload构造示例
结合上述参数,构造sell_instantly_token_v2<T0>的完整交易负载:
from aptos_sdk.transactions import EntryFunction # 替换为实际的模块地址 module = "0x...::your_module" function = "sell_instantly_token_v2" # 替换为T0对应的实际类型(比如0x1::aptos_coin::AptosCoin) type_args = [TypeTag(StructTag.from_str("0x1::aptos_coin::AptosCoin"))] # 签名者参数(替换为你的签名者地址) signer_arg = TransactionArgument("0x...", TypeTag(StructTag.from_str("0x1::signer::Signer"))) # 构造完整payload payload = EntryFunction.natural( module, function, type_args, [signer_arg, collection_offer_arg, token_arg, empty_listing_option_arg] )
错误原因说明
之前用Serialize.map手动序列化出错,是因为没有遵循Aptos BCS序列化的规范。SDK的TransactionArgument会根据指定的TypeTag自动处理结构体、Option等复杂类型的序列化逻辑,无需手动构造字典格式。
内容的提问来源于stack exchange,提问作者kringeKitty
相关产品推荐
相关产品推荐

