每条 UTXO 都要锁一笔最低 ADA
比特币的未花费输出可以只有很小一枚,Cardano 不行。在 Cardano 上,每一条 UTxO(未花费交易输出)都必须装够一笔最低数量的 ADA,数量随这条输出占的存储大小而变。官方账本规范把这个要求叫 min-ada-value:它不是手续费,也不是罚款,而是一笔被锁在输出里的押金——只要这条输出没被花掉,这笔 ADA 就一直躺在里面,花掉时又随之消失。对普通用户,最直观的体感是:钱包里莫名其妙有一笔钱动不了,或者给一堆小代币空投之后,账户里凭空多了几条被锁住的 ADA。
公式:条目大小乘以一个每词单价
账本规范给出的计算方式是 min-ada-value 等于 utxoEntrySize(这条输出折算出的存储词数)乘以协议参数 coinsPerUTxOWord。条目大小由几部分拼成:一个不含资产载荷的固定底座(规范在 Alonzo era 文档里给出的常数),加上代币包(token bundle)序列化后的词数,再加上可选的datum哈希空间——带datum的输出要多算十个词。折算下来,早期只装 ADA 的空输出对应的地板是一百万 lovelace,也就是一枚 ADA;一旦输出里塞进多资产,条目变大,被锁的最低 ADA 也跟着水涨船高。

为什么设计成按大小收押金
Cardano 沿用的是 UTXO 模型:节点的负担取决于未花费输出集合有多大,每一条输出都是所有全节点必须记着的账。如果允许无限多的极小输出存在,任何人都能制造海量垃圾条目,把全网的状态永久撑大。按大小锁定一笔押金,等于让制造状态的人预付存储成本:条目越大,锁得越多;不想被锁太多,就把输出做小、把资产合并。这套思路与 NEAR 的存储押金、Sui 的存储基金属于同一家族——用押金对冲状态膨胀,只是 Cardano 的选择是把押金直接锁进输出本体,随输出花费而自动转移或退回,不存在一个可以主动退还押金的系统账户。
会踩到的三个具体边界
第一,多资产输出是押金重灾区。一个代币包里的政策ID、资产名、数量都要计入条目大小,空投几十种小代币到同一个地址,可能锁住数枚乃至更多 ADA;卡多侧钱包因此普遍提供合并(consolidation)功能,把碎 UTxO 拼大、减少条目数。第二,参数会随治理调整。coinsPerUTxOWord 是协议参数,历史上就改过,正文给出的历史常数是规范文档在对应 era 里的记载,不代表当前链上数值;核对当前值应当以账本协议参数查询为准。第三,发送方算错会直接失败。交易构建时如果输出装不满最低 ADA,提交阶段就会被拒绝,报的是余额不足或低于最小值一类的校验错误,而不是扣费放行。
和账户模型的对照
账户模型(以太坊、Solana 等)里,余额是账户上的一个数字,多一个收款人只是多一行账户状态;UTXO 模型里,钱是一条条独立记录,多一笔输出就多一条全网要记的账。min-ada-value 是后者为这个结构性差异打的补丁:与其让垃圾输出免费占资源,不如明码标价。理解了这一点,就能解释 Cardano 钱包里许多看似别扭的行为——为什么清 dust 要先补 ADA、为什么代币越多锁的币越多、为什么大空投项目常常给收件人预置一笔不小的最低 ADA。这些都是模型层的规则,不是某个钱包或交易所的私人政策。
交易所提币里的隐藏一笔
托管侧同样被这套规则塑形。交易所往链上给用户提 ADA 时,每条输出都得自带最低锁定额;很多平台把这部分讲成”链上锁仓”或干脆不解释。读懂 min-ada-value 后,你可以区分两件事:钱没有丢,只是按协议规则被锁在输出里随资产转移;以及为什么代币空投有时要求收件账户先有足够的 ADA 余额——装不下最低押金的小额输出,钱包会直接报余额不足。
风险提示:本文为机制说明,不构成投资建议;协议参数数值会随治理调整,涉及具体金额时请以 Cardano 官方账本规范与链上协议参数为准。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。