新聞加密貨幣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 保留在賣家的錢包中,並記錄一個包含代幣、價格、鏈、到期時間、nonce 和市場地址的鏈下簽名。這降低了掛單成本並保留了保管權,但合約必須驗證簽名,且賣家仍需一個鏈上途徑來使其失效。

對於遊戲市場,這個選擇影響的不僅是 gas 成本。託管可能導致物品在掛單期間無法裝備,而延遲掛單保留了玩家的資產,但要求遊戲和市場處理在所有權變更時變得無法成交的掛單。這種營運上的差異也是團隊應在上线前測試錢包轉移、收藏升級和掛單失效等邊緣情境的原因,而非假設掛單模型會自動處理這些情況。

掛單與報價生命週期

固定價格掛單應經歷建立、驗證、購買、結算和取消等狀態。報價需要到期時間、nonce、鏈 ID、授權方檢查和取消功能。每個狀態都應發出索引器可核對的事件。

報價還需要合約能夠可靠執行的支付模型。原生代幣報價通常無法在之後不經新簽名交易就從買家錢包中提取,而已授權的 ERC-20 代幣(如 WETH 或 USDC)則可在賣家接受時進行託管或轉移。因此,訂單記錄應包含貨幣、金額、到期時間、nonce、買家、賣家、代幣 ID 和取消狀態——而非僅儲存標題價格。

拍賣結算需要自己的狀態機。英式拍賣必須處理更高的出價、退款、截止時間和最終結算呼叫者。荷式拍賣必須根據經過的時間計算當前價格,並拒絕過時的購買。基於提取的退款餘額比立即向每個被超越的出價者發送資金更安全,因為退款回調失敗不應凍結整個拍賣。短暫的結束時間延長也有助於減少最後時刻的搶標行為。

從簽名到結算的一筆 0.5 ETH NFT 銷售

考慮一個通過簽名訂單以 0.5 ETH 掛單的 ERC-721 NFT。賣家將 NFT 保留在錢包中,但授權市場合約進行轉移。簽名掛單標識了收藏合約、代幣 ID、賣家、價格、到期時間、nonce、鏈 ID 和市場地址。建立簽名時不會發生所有權變更。

當買家提交購買時,市場合約會驗證訂單未過期或未被取消、簽名屬於賣家、賣家仍擁有該 NFT,且轉移授權仍然有效。然後合約將訂單標記為已成交、處理付款、將 NFT 路由給買家,並發出市場可用於更新商品頁面的事件。

上述費用分配僅為示例,並非任何特定市場的實際費用聲明。

如果 NFT 轉移失敗,付款不應保持已完成狀態而所有權卻未變更。如果收款方無法接收 ETH,最安全的回應取決於合約設計:交易可以回滾,或金額可以計入可提取餘額。這就是為什麼支付路由、轉移順序、狀態更新和重入保護必須一起測試,而非作為孤立的功能選項。

版稅與費用路由

版稅資訊可以遵循 EIP-2981,而合約庫如 OpenZeppelin ERC-721 和 OpenZeppelin ERC-1155 有助於實現標準資產行為。然而,市場執行仍需要明確的產品政策。

EIP-2981 使版稅資訊可讀,但並非普遍可強制執行。市場可以查詢創作者地址和版稅金額,但其他平台可能選擇不同的政策或完全忽略結果。如果創作者收入至關重要,開發者應測試實際的轉移路徑、所選市場、聚合器行為和收藏品的執行邏輯,而非將版稅欄位視為保證付款。

安全測試

關鍵測試包括重入、重放攻擊、過期訂單、錯誤鏈簽名、管理員密鑰洩露、暫停行為和部分成交。目標不是產生冗長的審計清單,而是證明市場在不安全的訂單下會安全關閉。

最高價值的測試應模擬買家或賣家實際可能經歷的失敗情況。購買應拒絕已更改的價格,而非執行誘餌替換。簽名訂單應綁定到鏈 ID 和市場地址。已取消或已消耗的 nonce 不應再次執行。對於結算程式碼,應在外部調用之前更新訂單狀態,並在支付和轉移路徑周圍應用重入防護。

一名 Polygon 使用者在評論 Rarible 時報告,該網路體驗缺乏自訂合約支援和元資料凍結功能,詳見這篇特定網路合約評測,採集於 2026 年 8 月 11 日。這不是市場合約不安全的證據,且調查結果可能取決於網路和產品版本。儘管如此,它凸顯了一個有用的實作邊界:在選定上線的確切鏈上測試合約覆蓋範圍、元資料不可變性和升級行為。

結論

市場合約應根據其訂單生命週期和失敗行為來評估。一個安全的合約路徑能在不依賴假設的情況下處理建立、到期、取消、結算、版稅、索引和暫停行為。下一步工程工作是訂單生命週期測試。

常見問題

NFT 智能合約中儲存了哪些資訊?

合約通常記錄代幣 ID、所有權、餘額、授權、轉移規則、供應量和元資料 URI。圖像或影片通常分開儲存,並通過元資料進行引用。

NFT 合約也處理市場掛單嗎?

不一定。NFT 合約管理代幣,而獨立的市場合約通常管理掛單、報價、拍賣、支付、費用和結算。

市場可以在未經授權的情況下轉移 NFT 嗎?

它需要通過所有權、代幣特定授權或 NFT 合約認可的操作者授權來獲得權限。買家和賣家應在簽名前檢查已授權的支出方。

NFT 版稅欄位能保證付款嗎?

不能。版稅標準可以傳達收款方和金額,但實際付款取決於市場政策和結算路徑。

免責聲明:本文僅供研究和編輯比較之用。不構成財務、投資、法律或稅務建議。NFT 工具、市場、費用、鏈支援和即時可用性可能快速變化,請在做出任何涉及資金、資產或私鑰的決定之前,在官方平台上核實當前狀況。