转入Cardano自定义代币时,地址里为什么必须同时有ada?

接收Cardano自定义代币时地址里必须同时有ada,是因为Cardano账本要求每个地址都持有一个“最小ada余额”(min-ada-value),而只包含自定义代币、不含ada的输出无法被创建。随代币一起转入的那部分ada,据Cardano开发者文档的口径,归该地址的控制者所有;但如果接收地址不由发送者控制,发送者随代币附上的ada就不再属于发送者。这是账本设计的结果,不构成任何转账操作建议。

最小ada余额、同输出附带、地址需可花费
本文涉及的概念与核对环节。

原生代币与ada的分工

据Cardano开发者文档,原生代币(native tokens)由账本本身支持,不需要额外智能合约,账本内置了对多种资产所有权与转移的追踪。ada和原生代币都承载价值、都可作为支付和交易单位,但只有ada用于手续费和奖励,也只有原生代币可以被自定义创建。理解这一分工,是理解最小ada余额规则的前提:自定义代币可以自由创建和转移,但账本层面的空间与费用角色始终由ada承担。

最小ada余额规则怎么理解

文档明确,在地址之间转移多资产代币时,必须持有ada,因为每个地址都要满足最小ada余额。由此产生两条直接后果:其一,不可能创建只含自定义代币的输出;其二,一个输出中每种代币的数量不影响该输出的最小ada余额,但输出中包含的代币种类数量会增加最小ada余额,原因是每种代币的名称和策略ID(policy ID)都要占用输出中的额外空间。换句话说,地址里那部分ada不是手续费押金,而是账本为承载代币信息所要求的最低余额;代币种类越多,这笔最低余额越高。

随附ada到底归谁

发送自定义代币到某地址时,总是要在同一个输出中附带最小ada余额的ada。这部分ada的归属取决于地址由谁控制:如果接收地址并非发送者可花费的地址,随代币发送的ada就不再属于发送者。文档也提到,转账前用户可以选择通过链下沟通,协商由谁提供ada来覆盖转账交易输出中的最小ada余额。这一点说明随附ada的归属是交易双方可以事先约定的现实问题,而非账本自动返还给发送方。

取回随附ada的条件与案例口径

要取回某个输出O中与自定义代币一同存放的ada,用户必须要么花费该输出O并销毁其中存放的自定义代币,要么在同一笔交易中花费输出O和另一个输出O',把其中类型相同的自定义代币合并。文档给出的例子是:O中的(CryptoDoggiesPolicy, poodle, 1)可与O'中的(CryptoDoggiesPolicy, poodle, 3)合并,在合并交易产生的新输出中得到(CryptoDoggiesPolicy, poodle, 4)。文档还指出,把自定义代币拆分到比交易处理前更多的输出中,需要更多ada来覆盖最小ada余额,因为每个输出都必须提供一定ada。以上为开发者文档的口径,适用于Cardano原生代币的账本层转移,不涉及实时价格、费用数值或具体钱包操作。

原始资料

docs.cardano.org

上一篇 比特币钱包:同一助记词配不同口令,为什么每个口令都能开出一个钱包