为什么铭文没有 approve:UTXO 整体移交与 ERC-721 授权模型的区别 图 1
为什么铭文没有 approve:UTXO 整体移交与 ERC-721 授权模型的区别 · 图 1

从以太坊市场转来接触铭文的人,常会问同一个问题:挂单卖出后去哪里取消授权?这个提问本身预设了一个在铭文世界里不存在的东西——approve。本篇把两种账本模型放在一起,说清这个差异从哪来,以及它把风险挪到了哪里。

先拆 ERC-721 的交易结构。以太坊上的 NFT 由合约记账,所有权是合约状态表里的一个映射。要完成一次转手,实际操作的人未必是持有人自己:ERC-721 标准内置了授权接口,getApproved 与 setApprovalForAll 两个查询、加上 approve 与 setApprovalForAll 两个写操作,允许持有人指定某个外部地址——通常是市场合约——有权代表自己执行 transferFrom。于是一笔挂单卖出的真实流程是:你先发一笔 approve 交易,把“可以搬走这只 NFT”的许可永久写进合约;买家成交时,市场合约调用 transferFrom 把 NFT 划走。关键在“永久”:授权是一种挂账状态,不随挂单撤销自动消失,链上一直有效,直到你显式 revoke 或者合约逻辑到期。这就是“取消挂单不等于取消授权”的技术根源:撤掉的是市场数据库里的订单记录,链上那份许可纹丝不动。

比特币铭文是另一套表示法。聪的编号附着在 UTXO 上,持有铭文等于持有某个具体 UTXO。没有合约维护所有权表,也就没有“授予某地址搬运权”这回事——转铭文只有一个动作:发起一笔比特币交易,把承载铭文的那个 UTXO 整个花掉,输出指向新地址。Ordinals 手册在收藏章节的描述正是如此:发送铭文就是发送承载它的聪。整个状态里不存在“别人拿到许可但还没动手”的中间层,要么交易上链、所有权已转移,要么什么都没发生。市场撮合在这个模型里只能靠别的形式:托管、PSBT 配对或第三方担保,而不是链上授权。

两种模型于是把风险放在了完全不同的环节。ERC-721 一侧,风险窗口在授权挂账期间:任何获得你签名的恶意者(或者你批错的对象)都可以替你把 NFT 搬走,防御手段是定期清理授权、按需最小授权。UTXO 一侧,没有授权可被滥用,风险改住在“选择与签名”里:下一次普通转账把铭文 UTXO 误当零钱、偏移不为零时找零切走铭文、PSBT 盲签把输出签错地址。手册那一串关于 sat-control、核对 output、offset 为零、留足邮资的叮嘱,全部服务于这个环节。

由此也能看清一个常被混用的词:“托管”。以太坊市场里托管常常就是 approve 给合约;比特币铭文里托管通常意味着把 UTXO 暂时转移到受控脚本或多方地址,交易真实发生、之后再转回。名字相同,链上痕迹完全不同——前者可以只存在状态变更里,后者每一步都是真实的币流动。

把两种路径按时间线并排放,差异更直观。以太坊世界挂出一只 NFT 卖单,完整链路通常是:发一笔 approve 交易(链上授权开始挂账)→ 市场数据库记录你的挂单 → 成交时市场调用 transferFrom(所有权真实移动)→ 撤单时别忘了再发一笔 revoke(链上授权销账)。四个环节里,链上只留下两到三笔交易,中间的“挂着没动”的授权状态,就是风险栖身的缝隙。铭文世界的挂单没有链上动作可发:要么把 UTXO 移进托管或双人脚本(一笔真实交易,资产已离开你的钱包),要么根本不移动、等买方出价后以 PSBT 配对成交(交易签名上链那一刻所有权才动);所谓“撤单”,在两种形态里分别对应“把托管资产取回”和“不签这笔交易”,都不存在悬空许可。路线没有高下:一条把风险摊在授权状态里,一条把风险集中在签名与托管环节,识别自己站在哪条线上,防御清单就自动出来了。

给读者的行动清单很短:在以太坊世界,把“撤销授权”当作挂单流程的固定收尾动作;在铭文世界,把功课挪到发送前的 UTXO 核对与签名检查上。两套模型没有谁绝对安全,只有风险住在哪里、你该在哪个门口装锁的区别。本文为机制说明,不构成任何投资建议。

为什么铭文没有 approve:UTXO 整体移交与 ERC-721 授权模型的区别 图 2
为什么铭文没有 approve:UTXO 整体移交与 ERC-721 授权模型的区别 · 图 2