ERC-2981版税能强制支付吗? 图 1
ERC-2981版税能强制支付吗? · 图 1

ERC-2981解决的是“市场怎样询问某个NFT建议支付多少版税”,不是“协议怎样强制所有转售付款”。标准提供统一royaltyInfo接口,实际转账仍由成交市场或结算合约执行。

royaltyInfo的输入输出

市场调用royaltyInfo(tokenId, salePrice),合约返回receiver和royaltyAmount。salePrice使用什么计价单位,royaltyAmount就必须使用同一单位;若成交价以wei表示,返回金额也是该结算资产的最小单位。

常见固定比例实现可概念化为:royaltyAmount = salePrice × feeNumerator ÷ feeDenominator。具体分母和舍入由实现决定,集成方不能假定永远是10000基点。

标准明确不做什么

能力ERC-2981是否提供
查询接收方与金额
自动从买家扣款
强制所有市场调用
指定支付币种不单独指定,跟随salePrice单位
证明该次成交已付款

因此,合约supportsInterface返回ERC-2981接口ID,只能说明支持查询。市场若忽略返回值,或者采用零版税政策,标准本身不会让NFT转移回滚。

动态版税为何仍可兼容

实现可以按tokenId返回不同receiver,也可基于可预测变量让比例随成交次数或其他状态变化,只要对给定salePrice返回相应金额,并遵守标准要求的单位关系。动态规则不应直接依赖block.timestamp等可能被操纵或不可预测的变量。市场每次成交都应实时查询,不能永久缓存首次结果。

可升级NFT还可能更换实现或版税管理员。分析页面应记录查询区块和合约代码,避免把今天的receiver当永久承诺。

市场结算的正确顺序

先确认NFT合约与tokenId;用ERC-165检测接口;以真实salePrice调用royaltyInfo;检查receiver非零且金额不超过业务允许范围;在成交结算中转账并记录支付事件。若不支付,应向用户明确说明市场政策,而不是显示“支持ERC-2981”造成误导。

创作者还需要什么证据

royaltyInfo只能证明合约建议。核对收入应查看市场结算交易中是否真的有对应资产转给receiver,并考虑批量成交、费用拆分和链下订单。聚合器可能在另一合约集中结算,不能只搜索NFT Transfer事件。

接口查询失败时市场应怎样处理

市场先通过ERC-165检查合约是否声明ERC-2981,再调用royaltyInfo(tokenId, salePrice)。返回receiver与royaltyAmount只是本次售价下的支付建议;amount使用与salePrice相同的计价单位,标准不规定固定代币,也不要求比例永远不变。调用失败或返回异常地址时,市场应按公开策略拒绝、忽略或人工审核,不能把任意回调结果直接转账。

可升级版税要防治理滥用

创作者可能需要变更收款地址,但管理员若能在成交前瞬时把比例改到极高,会给买卖双方带来风险。合约可设置比例上限、时间锁和事件,市场则在签单时固定可接受的最大版税与接收者条件。链下订单签名也应明确售价是含版税还是另付,避免结算双方理解不同。

接口探测流程见ERC-165,批量NFT转移见ERC-1155,代理升级与版税管理员风险可参考ERC-1967