You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:53:18