NFT 也能“用完即焚”吗:ERC-2135 与 ERC-4400 两种消耗接口对比 图 1
NFT 也能“用完即焚”吗:ERC-2135 与 ERC-4400 两种消耗接口对比 · 图 1

NFT 也能“用完即焚”吗:ERC-2135 与 ERC-4400 两种消耗接口对比

门票、优惠券、抽奖码这类 NFT 有一个共同点:它们注定要被“用掉”。问题是怎么在链上表达“用掉”这件事。以太坊改进提案里先后出现了两个答案:2019 年提出的 ERC-2135 与 2021 年提出的 ERC-4400。两者如今都是 Final(最终)状态的 ERC 标准,但设计的语义完全不同——一个动的是资产本身,一个动的只是资产旁边挂着的“使用者”标签。

ERC-2135:核销资产本身

ERC-2135 的标题就叫 Consumable Interface,灵感正是演唱会门票:持票人进场那一刻,票被核销。它定义了一个与 ERC-721 不冲突的通用接口,核心是两个函数:

  • consume(address _consumer, uint256 _assetId, uint256 _amount, bytes calldata _data):对指定资产执行一次消耗,消耗成功与否由返回值和合约逻辑决定;_consumer 不必是发起交易的那个地址,允许票务方代核销。
  • isConsumable(address _consumer, uint256 _assetId, uint256 _amount):查询该资产此刻是否还能被消耗。

合规合约必须通过 ERC-165 声明接口标识 0xdd691946。在这套模型里,“消耗”可以是销毁代币、登记已使用状态,或按数量部分扣减,具体由合约实现,标准只统一了询问和触发的动作。

ERC-4400:只移交“使用者”角色

ERC-4400 走的是另一条路。它观察到很多项目早就在合约里自定义了 operatorcontributor 这类使用角色——比如元宇宙地块的持有人授权一家服务商去搭建场景,但地块本身不转移。于是它把“谁是当前使用者”标准化成一个可读字段:

  • 每枚 NFT 有一个 consumer(使用者)地址,可通过 getConsumer 查询;
  • 使用者变更时发出 ConsumerChanged 事件,零地址表示当前没有使用者;
  • 当发生转账(所有权易主)时,之前的 consumer 自动被清空,防止旧使用者在新持有人接手后仍保有使用权。

它的接口标识是 0x953c8dfa,依附并扩展 ERC-721。在这套模型里,代币从头到尾没有被销毁、也没有被扣减,“消耗”只是使用权的移交与登记。

关键差异对照

  • 资产状态:2135 会改变资产本身的存在或可用数量;4400 完全不触碰资产,只更新角色字段。
  • 所有权:两者都不强制转移所有权,但 4400 明确规定所有权转移会重置使用者。
  • 适用对象:2135 面向一次性核销(门票、兑换券);4400 面向“东西还是你的,但让别人用”(租赁、代运营、质押保留权益)。
  • 核验入口:2135 用 isConsumable 和消耗结果;4400 读 getConsumer 并回看 ConsumerChanged 事件。

用户侧要注意的坑

第一,别把“使用者”读成“持有人”。看到某个地址是 consumer,只说明它被授予了使用权,ownerOf 的答案才算所有权。第二,用完即焚不等于消失无痕:核销或销毁之后链上历史仍在,合约实现方式决定你还能不能证明自己曾经持有。第三,两套接口都是可选扩展,绝大多数 NFT 合约并不实现它们——先用 ERC-165 探测,再决定按哪套语义理解交互,比凭页面文案猜要可靠得多。

一次典型交互的完整时序

以租赁场景把两套接口放在一起走一遍。假设你持有一枚会员 NFT,想租给另一位用户一周。走 ERC-4400 路线:你把 consumer 设置为对方地址,发出 ConsumerChanged 事件;对方在期限内以使用者身份进入应用;到期后你(或合约定时逻辑)把 consumer 置回零地址,若期间代币被你卖给了第三人,转账本身就会自动清空这个字段,无需额外操作。走 ERC-2135 路线:合约通常不存在“租期”概念,它只回答“这张票还能不能用、谁来核销”,兑换或入场那一刻调用 consume,之后 isConsumable 返回 false,合约内部可以销毁代币或标记已用。

把时序摊开能看清两者的成本结构差异:4400 的每次授权与回收都是链上交易,租期内至少两笔;2135 的核销只在资产生命周期终点发生一次。这也是为什么租赁类产品更愿意在 4400 或更复杂的租赁标准上搭建,而票务系统大多只实现 2135 式的单一动作。

常见误读与对应的事实

误读一:“实现了消耗接口,我的 NFT 就不会被复制滥用。”接口只统一了核销动作,防止复制靠的是合约状态唯一性,与是否实现 2135 无关。误读二:“有 consumer 说明这个地址有权出售该 NFT。”使用者不是所有者,任何市场核验都应回到 ownerOf 与授权记录。误读三:“两套标准互相冲突,合约只能选一个。”它们作用对象不同,理论上可以共存——一枚代币可以既有可移交的使用者角色,又支持最终核销。

本文只做接口机制对比,不构成投资建议;消耗、核销类资产一旦使用即失去转手可能,请按自身使用场景审慎决策。