BRC-20 为什么“收到的币不能直接转”:锁定与解锁两步 图 1
BRC-20 为什么“收到的币不能直接转”:锁定与解锁两步 · 图 1

BRC-20 为什么“收到的币不能直接转”:锁定与解锁两步

第一次转 BRC-20 的人常被提示“余额不足”或“需要先锁定”,明明钱包显示持有代币。这不是 bug,而是 BRC-20 转账协议规定的两步动作没有做完。本文解释这两步各自在链上做了什么。

代币状态靠铭文推定

比特币本身没有账户余额概念。BRC-20 的做法是把 deploy、mint、transfer 这些操作写成 JSON 铭文刻在聪上,索引器按规则读取全部铭文推演出每个地址的余额。钱包显示的持有量是索引器对历史铭文序列的计算结果,而不是某个字段里的数字——这是理解下面两步的前提。

BRC-20 为什么“收到的币不能直接转”:锁定与解锁两步 图 2
BRC-20 为什么“收到的币不能直接转”:锁定与解锁两步 · 图 2

第一步:transfer 铭文锁定

直接把一个带着 mint 铭文的聪发给对手方,对方的索引器无法从铭文里读到“转了多少、转给谁”。协议因此规定:转出前先刻一条 transfer 铭文,内容是一小段声明 tick 币种与 amt 数量的 JSON,把它刻在你持有余额的那条聪上。这一步的语义是把可用余额的一部分标记为可转余额——数量被声明了,但资产还没移动。钱包界面里的锁定按钮做的就是这个动作,它本身是一笔带 commit 与 reveal 的铭文交易,要按数据体积支付比特币交易费。

第二步:把聪发出去

锁定完成后,持有那条聪的 UTXO 被发送到对方地址,对方的索引器读到 transfer 铭文,把对应数量记到对方名下。若 transfer 铭文声明的数量与该聪携带的全部余额不一致,多余部分的处理依赖索引器与钱包的实现口径,主流钱包会拆出找零输出。整个流程在比特币层面只是两次普通交易,代币账本变化全部发生在索引器一侧。

钱包里的两种余额

多数钱包把 BRC-20 余额分成可用与可转两类:刚收到或刚 mint 的都是可用余额,锁定后才进入可转余额;把可转余额转回自己地址,相当于撤销锁定、让它重新变成可用。判断能不能转,看的永远是可转那一栏,而不是总额。

第三方代锁的风险

有些平台提供免费代锁定服务,意味着锁定铭文由别人的地址和交易发起。两个检查点:一是代锁铭文里的 tick 与 amt 是否与你预期一致,链上铭文发出后不可撤回;二是代锁方是否还能影响这笔 UTXO 的花费路径——用不熟悉的服务前,先小额试转一笔是成本低、信息量大的验证方式。

小结

两步各管一半:transfer 铭文管声明账目,发聪交易管资产移动,缺一不可,顺序不能反。看到余额不足先查可转栏,再看锁定交易是否已确认,多数卡壳出在这两处。

费用与等待的叠加

两步结构意味着两次确认等待、两笔手续费,费率高时锁定这一步的成本可能超过代币转账本身,这也是社区长期批评 BRC-20 体验的核心。实践上可以把两次操作都安排在费率低谷执行;若钱包支持合并锁定多笔余额,优先合并能摊薄基础成本。理解机制后再看这些技巧,会明白它们都是在为“账本靠铭文推定”这个底层设计买单。 还有一个容易被忽略的细节:锁定与发送之间存在时间窗口,窗口内那部分余额处于已声明未移动状态,若你在这期间又用同一批聪做别的操作,不同钱包的处理策略不同,稳妥习惯是锁定后等第一步完全确认再继续下一步,避免让并发操作互相踩脚。

风险提示:本文仅介绍铭文协议机制与防御性核验方法,不构成任何投资建议。使用第三方锁定或转账服务前请小额验证。