新闻加密货币NFT市场智能合约:挂单、报价、拍卖与版税

NFT市场智能合约:挂单、报价、拍卖与版税

作者: NFTENEX·

要点速览

  • NFT合约和市场合约承担不同职能,前者定义资产所有权,后者协调销售、费用路由和结算。
  • ERC-721挂单通常出售单个唯一代币,而ERC-1155挂单可以提供多个副本,需要在结算时进行部分成交处理和数量跟踪。
  • 托管式市场在挂单时将NFT锁定在合约中,而懒人挂单通过链下签名保留卖家托管权,但需要链上失效路径。
  • EIP-2981使版税信息可读,但并非普遍强制执行,这意味着实际创建者收入取决于各个市场的策略和结算逻辑。
  • 安全测试应验证合约在不安全条件下能够安全失败,涵盖重入攻击、重放攻击、过期订单、错误链签名和部分成交。
NFT市场智能合约:挂单、报价、拍卖与版税

NFT市场智能合约管理着挂单、报价、拍卖、结算、取消、费用路由、版税和管理控制等功能。虽然ERC-721或ERC-1155标准描述了资产本身,但遵循代币标准并不自动意味着构建出了一个安全的市场。

构建者应将市场合约与OpenSea市场评测中的费用和订单行为、NFT市场基础设施指南中的运营层面,以及NFT被动收入模型中的支付触发机制进行对比,因为合约事件是结算和支持工作流的数据来源。

NFT智能合约详解

NFT智能合约是部署在区块链上的代码,负责创建代币并管理所有权的记录和转移。在铸造时,合约将一个代币ID分配给一个所有者地址。当代币被出售或转移时,合约只有在验证发送者的权限和适用的转账规则后才会更新所有权记录。

合约通常记录代币的所有者、供应量、授权、转账历史和元数据引用。它不一定存储艺术品本身。正如Hedera对NFT智能合约的解释所述,代币ID和元数据用于标识资产,而智能合约逻辑负责铸造和所有权变更。重要的是,智能合约是可执行的计算机代码——它并不自动构成关于版权、退款或商业权利的法律协议。

NFT合约与市场合约的区别

NFT合约和市场合约承担不同的职能。NFT合约定义资产、创建代币ID、记录所有权,并执行授权和转账。市场合约协调交易:它验证挂单或报价、收取付款、转移NFT、路由费用,并关闭或取消订单。

这种分离至关重要,因为拥有有效的NFT并不意味着它已主动挂单,而签署市场订单在结算完成之前也不会改变所有权。买家应验证两个地址:集合合约标识NFT,而市场合约或授权方标识接收转账权限的软件。对于集成钱包、支持工具或索引器的团队来说,这一区别还决定了哪些事件被视为商品可用性、退款和履约的真实数据来源。

ERC-721和ERC-1155如何影响市场设计

ERC-721通常在每个代币ID代表一个独立拥有的物品时使用。它适用于独一无二的艺术品、独特的游戏资产、土地地块和需要逐一验证所有权的收藏品。ERC-1155可以表示同一代币ID的多个副本,适用于游戏消耗品、门票、版本或批量发行的物品。

代币标准改变了订单必须包含的内容。ERC-721挂单通常出售一个代币ID。ERC-1155挂单可能提供20个副本,而买家仅购买3个,因此市场需要更新剩余数量而不关闭整个订单。取消操作必须使剩余数量失效,结算事件必须表明有多少单位易手。

授权机制也有所不同。ERC-721的特定代币授权仅授权单个NFT,而操作员授权可能涵盖该集合中的所有代币。ERC-1155通常对钱包在合约下的全部余额使用操作员授权。市场为了便利可以要求更广泛的权限,但钱包提示应使该范围对用户可见,用户应了解如何撤销它。

托管式与懒人挂单式设计

托管式市场在卖家挂单时将NFT转移到市场合约中。这种方式使可用性验证变得简单,但卖家需支付更多Gas费用,且在挂单期间无法使用该资产。懒人挂单将NFT保留在卖家的钱包中,并记录一个包含代币、价格、链、到期时间、随机数和市场地址的链下签名。这降低了挂单成本并保留了托管权,但合约必须验证签名,卖家仍需一条链上路径来使其失效。

对于游戏市场,这一选择影响的不只是Gas费用。托管模式可防止物品在挂单期间被装备,而懒人挂单保留了玩家的资产,但要求游戏和市场处理在所有权变更时变得无法成交的挂单。这种运营差异也是团队在上线前应测试钱包转账、集合升级和挂单失效等边缘情况的原因,而非假设挂单模型会自动处理这些问题。

挂单和报价的生命周期

固定价格挂单应经历创建、验证、购买、结算和取消等状态。报价需要到期时间、随机数、链ID、授权方检查和取消功能。每个状态都应发出索引器可对账的事件。

报价还需要合约能可靠执行的支付模型。原生代币报价通常无法在之后没有新的签名交易的情况下从买家钱包中提取,而经授权的ERC-20代币(如WETH或USDC)可以在卖家接受时托管或转移。因此,订单记录应包含货币、金额、到期时间、随机数、买家、卖家、代币ID和取消状态——而不仅仅是标题价格。

拍卖结算需要自己的状态机。英式拍卖必须处理更高出价、退款、结束时间和最终结算调用者。荷式拍卖必须根据经过的时间计算当前价格并拒绝过时的购买。基于提取模式的退款余额比立即向每个被出价超过的竞标者发送资金更安全,因为退款回调失败不应冻结整个拍卖。短暂的结束时间延长也有助于减少最后时刻的抢拍行为。

从签名到结算的0.5 ETH NFT交易示例

考虑一个通过签名订单以0.5 ETH挂单的ERC-721 NFT。卖家将NFT保留在钱包中,但授权市场合约进行转移。签名挂单标识了集合合约、代币ID、卖家、价格、到期时间、随机数、链ID和市场地址。创建该签名时不会发生任何所有权变更。

当买家提交购买时,市场合约验证订单未过期或未取消、签名属于卖家、卖家仍拥有该NFT,且转账授权仍然有效。合约然后将订单标记为已成交,处理付款,将NFT路由给买家,并发出市场可用于更新商品页面的事件。

上述费用分配仅为示例说明,不代表任何特定市场的实际费用。

如果NFT转账失败,付款不应在所有权不变的情况下保持已完成状态。如果收款方无法接收ETH,最安全的应对方式取决于合约设计:交易可以回滚,或者金额可以记入可提取余额。这就是为什么支付路由、转账顺序、状态更新和重入保护必须一起测试,而不是作为孤立的功能选项。

版税和费用路由

版税信息可以遵循EIP-2981,而OpenZeppelin ERC-721和OpenZeppelin ERC-1155等合约库有助于实现标准资产行为。然而,市场执行仍需要明确的产品策略。

EIP-2981使版税信息可读,但并非普遍可执行。市场可以查询创建者地址和版税金额,但另一个平台可能选择不同的策略或完全忽略该结果。如果创建者收入至关重要,构建者应测试实际的转账路径、所选市场、聚合器行为和集合的执行逻辑,而不是将版税字段视为保证的付款。

安全测试

关键测试包括重入攻击、重放攻击、过期订单、错误链签名、管理员密钥泄露、暂停行为和部分成交。目标不是生成一份冗长的审计清单,而是证明市场在不安全的订单下能够安全失败。

最高价值的测试应模拟买家或卖家实际可能经历的失败场景。购买操作应拒绝已更改的价格,而非执行诱导式交易。签名订单应绑定到链ID和市场地址。已取消或已消费的随机数不应再次执行。对于结算代码,应在外部调用之前更新订单状态,并在支付和转账路径周围应用重入防护。

一位Polygon用户在针对特定网络的合约评测中评价Rarible时报告称,该网络体验缺乏自定义合约支持和元数据冻结功能,该评测采集于2026年8月11日。这并非市场合约不安全的证据,调查结果可能取决于网络和产品版本。尽管如此,它突出了一个有用的实现边界:在选定的确切链上测试合约覆盖率、元数据不可变性和升级行为。

结论

评估市场合约应基于其订单生命周期和失败行为。安全的合约路径在不依赖假设的情况下处理创建、过期、取消、结算、版税、索引和暂停行为。下一步的工程工作是订单生命周期测试。

常见问题解答

NFT智能合约中存储了哪些信息?

合约通常记录代币ID、所有权、余额、授权、转账规则、供应量和元数据URI。图像或视频通常单独存储,并通过元数据进行引用。

NFT合约是否也处理市场挂单?

不一定。NFT合约管理代币,而一个独立的市场合约通常管理挂单、报价、拍卖、支付、费用和结算。

市场能否在未经许可的情况下转移NFT?

它需要通过所有权、特定代币授权或NFT合约认可的操作员授权来获得许可。买家和卖家在签署前应检查已授权的转账方。

NFT版税字段是否保证付款?

否。版税标准可以传达接收方和金额,但实际付款取决于市场策略和结算路径。

免责声明:本文仅供研究和编辑比较之用。不构成财务、投资、法律或税务建议。NFT工具、市场、费用、链支持和实时可用性可能快速变化,请在做出任何涉及资金、资产或私钥的决策之前,在官方平台上核实当前状况。