ERC-1996 可冻结代币:给转账装一道公证人关卡 图 1
ERC-1996 可冻结代币:给转账装一道公证人关卡 · 图 1

ERC-1996 可冻结代币:给转账装一道公证人关卡

场外交易里最经典的两难是”谁先动手”:买家先付款,卖家可能不发货;卖家先交货,买家可能不付款。常见解法是把资产放进托管合约,但托管意味着双方都要信任那个合约的编写者和管理员。ERC-1996 在 2019 年 4 月 10 日提出过一条不需要资金真正搬家的问题解法:Holdable Token。资产始终躺在付款人自己的地址上,只是有一部分被”挂起”了——不能转走,但也还没交给任何人。按 ercs 仓库记录,这份提案状态为 Stagnant,它给 ERC-20 加了一整层带公证人的挂起状态机。

五要素与一笔挂起的生命周期

一笔 hold 由五个要素定义:付款人、收款人、公证人、金额上限、到期时间。holdholdFrom 创建后,付款人账上对应额度即被冻结:不能转让,但仍属于付款人——提案用 balanceOnHold 单列冻结额,用 netBalanceOf 回答”可自由动用的余额还有多少”,另设 totalSupplyOnHold 查询全网挂起总额。此后三种结局:公证人调用 executeHold 划转,挂起转为完成;公证人释放,或到期后任何人释放,资金原路解冻;期限到了没人处理,任何人可释放,不必再找公证人。挂起状态可用 retrieveHoldData 完整读回(起止方、公证人、金额、到期、状态),状态枚举覆盖 Ordered、Executed、ReleasedByNotary、ReleasedByPayee、ReleasedOnExpiration 等分支。支持部分执行:executeHold 指定小于冻结额的数量时,划走指定部分,剩余解冻回付款人。还有 renewHold 可延长一筆挂起的期限,配套 HoldCreatedHoldExecutedHoldReleasedHoldRenewed 事件全程留痕。

ERC-1996 可冻结代币:给转账装一道公证人关卡 图 2
ERC-1996 可冻结代币:给转账装一道公证人关卡 · 图 2

与托管、授权的差异

和托管合约相比,hold 的资金从未离开付款人地址,托管合约被攻破、运营方卷款这两类尾部风险被结构上排除;付款人在挂起期间还能自由动用未冻结的部分。和 approve 授权相比,区别在方向:授权是允许对方主动来取,挂起是自己先把一笔钱圈起来、等公证人裁决执行或释放,且带自动过期。风险则集中到公证人一个角色上:公证人私钥被盗,可能被诱导提前 executeHold 划走资金;所以提案同时提供 authorizeHoldOperator 之类的委托操作接口,实务里公证人通常是经过审计的多签或争议仲裁合约,而不是某个人的热钱包。

事件取证在 hold 模型里的用法值得单列,因为它决定这套机制能否被第三方审计。一笔挂起从生到死最多经过四类事件:HoldCreated 记载发起者与参数,HoldExecuted 记载实际划转数额(部分执行时它与创建时的上限分离,两个数字都留在链上),HoldReleased 区分公证人释放、收款方释放与到期释放三种来源,HoldRenewed 记录期限修改。审计者不需要信任任何看板:用发起地址过滤事件,重建该地址全部挂起的状态机,再用 retrieveHoldData 对最终态做一次点查,事件流与状态一致则账目成立。反过来说,若产品页显示的”冻结中”在代币合约事件里找不到对应的 HoldCreated,那些资金实际从未进入任何密码学锁,只是平台账本上的一行状态位——这是冻结类宣传里最常见也最值钱的一处验伪点,检查成本不过一次事件查询。

对 NFT 交易场景的启示

ERC-1996 本体针对 ERC-20,但”NFT 交易货款挂起”正是这类机制最常见的现实用途:买家先冻结等额的稳定币,卖方确认 NFT 已划转后,公证人执行挂起完成付款;任一方违约,到期自动解冻,资金不会被对方无限拖住。评估此类产品时逐条看:挂起是否真发生在代币合约层(在代币合约里查 balanceOnHold,而不是网站显示的”冻结中”);公证人地址是谁、是否多签、能否更换;执行与释放是否都有事件;到期释放是否任何人可触发而无需公证人签字。四问都有肯定答案,这套机制的”谁也不信只信代码”才成立;若冻结只是交易所在自己账本上标的一行字,那它本质仍是中心化撮合,链上安全性无从谈起。本文为机制说明,不构成任何投资建议。