什麼是 ERC-721 介面?
ERC-721 介面是一組標準化智能合約函式與事件,用於在 Ethereum 及相容的區塊鏈網路上表示與轉移非同質化代幣。非同質化代幣(NFT)代表具有唯一識別資訊的代幣,而非可互換的相同單位數量。官方的ERC-721 規格定義錢包、應用程式、智能合約與區塊鏈工具如何查詢 NFT 所有權並執行標準化轉帳。
此介面不會決定 NFT 代表什麼、價值多少,也不會判斷其連結內容是否真實。它提供通用技術語言,讓不同加密貨幣應用程式都能使用相同方式與 NFT 合約互動。ERC-721 標準已在 Ethereum Improvement Proposal 流程中達到 Final 狀態,至今仍是獨特區塊鏈資產的主要標準之一。ERC-721 可用於數位收藏品、遊戲道具、會員憑證、虛擬土地、活動票券、類似網域的資產、金融部位與代幣化紀錄。介面為什麼重要?
智能合約介面會說明相容軟體預期合約提供哪些外部函式與事件。若沒有共用介面,每個 NFT 專案都可能採用不同的函式名稱與轉帳規則。如此一來,錢包與去中心化應用程式就必須為每個系列撰寫自訂程式碼。ERC-721 介面讓軟體可以呼叫
ERC-721 代幣為何具有非同質性?
每個 ERC-721 代幣都有一個稱為 token ID 的唯一無號整數。代幣由其所在的區塊鏈網路、合約地址與 token ID 組合而完整識別。某個合約中的 token ID 100,與另一個合約中的 token ID 100 毫無關聯。標準不要求 token ID 從 0 開始、依序增加,或遵循可預測的模式。應用程式應將每個 token ID 視為不透明識別碼,而非猜測哪些 ID 存在。依核心 ERC-721 所有權模型,每個有效 token ID 同一時間只有一位持有人。NFT 可以作為一個完整代幣轉移;分割所有權則需要使用基本介面以外的獨立合約或代幣結構。ERC-721 核心介面 ID
ERC-721 核心介面透過 ERC-165 以
相容合約在以此識別碼呼叫
ERC-165 介面偵測標準會對介面所含函式選擇器執行 XOR,計算介面識別碼。
ERC-165 讓應用程式能在嘗試互動前,詢問合約宣稱支援哪些標準化介面。回傳肯定結果有助於確認相容性,但無法單獨證明所有函式都已正確實作。處理有價資產時,應用程式可能還需要進行程式碼審查、測試與交易模擬。ERC-721 核心函式
必要的 ERC-721 介面包含所有權查詢、轉帳與核准管理函式。主要函式包括
balanceOf 函式
ownerOf 函式
transferFrom 函式
透過
safeTransferFrom 函式
ERC-721 定義兩種多載版本的
若接收者是智能合約,轉帳流程會呼叫該合約的
什麼是 IERC721Receiver?
其必要函式為
成功的接收者會回傳其函式選擇器,通常表示為
目前的ERC-721 實作說明文件提供接收者介面,以及供需要接收安全轉帳的合約使用的基本持有者工具。
接收者在使用回呼更新重要帳務前,應先驗證呼叫者是哪個 NFT 合約。ERC-721 接收者回呼風險
安全轉帳至合約時,會對該接收者執行外部呼叫。接收者可以在原始交易結束前執行其他程式碼。若傳送方應用程式尚未完成內部狀態更新,就可能形成重入途徑。惡意接收者可能在回呼期間嘗試呼叫原始合約中的其他函式。Solidity 的智能合約安全指南建議,只要預期設計允許,就應在外部互動前完成檢查與重要狀態更新。
開發者應使用惡意接收者合約測試安全 NFT 轉帳,而非假設回呼沒有危險。approve 函式
以零地址呼叫
getApproved 函式
判斷其他地址是否可以轉移代幣時,應用程式也應檢查
setApprovalForAll 函式
isApprovedForAll 函式
ERC-721 事件
ERC-721 核心介面定義
Transfer 事件
Approval 事件
ApprovalForAll 事件
ERC-721 選用中繼資料介面
中繼資料擴充功能加入
其 ERC-165 介面 ID 為
tokenURI 的運作方式
目前的ERC-721 開發指南指出,控制鏈下中繼資料儲存位置的一方可以變更其內容。
擁有代幣不會自動確保外部圖片或檔案永久可用。ERC-721 選用 Enumerable 介面
Enumerable 擴充功能可讓應用程式透過鏈上查詢尋找 token ID。其 ERC-165 介面 ID 為
它加入
許多應用程式會改用鏈下索引,根據
鑄造與銷毀
ERC-721 核心介面不要求提供公開鑄造函式。每個專案都會自行決定鑄造是開放、受限、排程、設有上限,還是永久停用。標準也不要求提供公開銷毀函式。銷毀會依合約實作,從有效所有權紀錄中移除代幣。使用者應確認誰可以鑄造或銷毀 NFT,以及管理員是否能影響其他帳戶持有的代幣。符合轉帳介面標準不代表代幣供應量固定。ERC-721 介面與 ERC-721 實作
介面定義相容性所需的外部行為。實作則包含實際的儲存、授權、轉帳、鑄造、中繼資料與管理邏輯。兩個合約可以支援相同的 ERC-721 介面,內部設計卻大不相同。其中一種實作可能不可變;另一種則可能透過可升級代理合約運作。其中一種可能供應量固定;另一種則允許管理員無限鑄造。其中一種可能將中繼資料儲存在鏈上;另一種則指向可變更的伺服器。使用者應檢視實際實作,而非將介面支援視為完整的安全評估。ERC-721 與 ERC-20
ERC-20 表示同質化餘額,ERC-721 則表示各自具有識別資訊的代幣。ERC-20 帳戶可以持有 250 個單位等可分割數量。ERC-721 帳戶持有的是不同 token ID 的數量。ERC-721 的
ERC-721 與 ERC-1155
ERC-721 著重於各自具備識別資訊的非同質化代幣。ERC-1155 允許單一合約管理多個 token ID,包括同質化、半同質化與非同質化資產。ERC-1155 帳戶可以持有同一 token ID 的多個單位。ERC-721 token ID 只有一位持有人,不會為每個帳戶記錄該代幣的數量餘額。最合適的標準取決於資產模型、轉帳模式、批次操作需求與應用程式要求。版稅與 ERC-721 介面
ERC-721 核心介面未定義創作者版稅。獨立的版稅介面可以提供建議的收款對象與金額。版稅資訊不會自動強制所有轉帳系統支付版稅。宣稱有版稅的系列應說明資訊如何計算,以及是否可以變更。使用者不應假設 ERC-721 NFT 一定包含永久或可強制執行的版稅權利。ERC-721 核准權限的安全風險
核准詐騙是 NFT 持有者面臨的重大風險之一。惡意網站可能要求呼叫
不安全轉帳風險
因此,向合約轉帳時通常優先使用
中繼資料與真偽風險
任何人都可以部署採用熟悉系列名稱或符號的 ERC-721 合約。合約地址是識別系列最重要的技術資訊。中繼資料也可能包含誤導性名稱、抄襲作品、不安全的外部連結或無法取得的檔案。由專案管理員控制的 token URI 日後可能會指向不同內容。鏈上所有權本身無法驗證創作者身分或智慧財產權。使用者應透過權威來源確認系列地址與專案資訊。可升級合約風險
ERC-721 實作可能透過可升級代理合約運作。獲授權的管理員可能在使用者取得 NFT 後,變更轉帳規則、中繼資料邏輯、鑄造權限或其他行為。升級可以修補錯誤,但也會帶來治理與金鑰遭入侵的風險。使用者應檢查升級權限、時間鎖、多重簽章控制與管理員角色。ERC-721 介面支援狀態不會揭露實作中的所有特權函式。開發者應如何實作 ERC-721
開發者應優先採用經審查且積極維護的實作,而非在沒有充分理由的情況下重新撰寫敏感的所有權邏輯。目前的OpenZeppelin ERC-721 API提供核心、中繼資料、enumerable、暫停、可銷毀、版稅、投票與接收者相關元件。
鑄造權限應依系列公開說明的供應量政策加以限制。若 NFT 可能直接鑄造至智能合約,應考慮使用安全鑄造。應將接收者回呼視為可能觸發重入行為的外部呼叫。測試應涵蓋所有權、核准、操作者權限、安全接收者、惡意接收者、銷毀、無效 token ID 與未經授權的轉帳。開發者也應測試介面偵測是否為所有已實作的擴充功能回傳正確值。應用程式如何偵測 ERC-721 支援
應用程式可以使用核心 ERC-721 介面 ID 呼叫
若回傳值為
ERC-721 轉帳範例
假設 Alice 在某個 ERC-721 合約中持有 token ID 42。該合約的
她的錢包會呼叫
合約會更新所有權,並呼叫接收者的
若接收者回傳正確選擇器,轉帳就會完成,並發出
常見的 ERC-721 介面錯誤
常見錯誤之一,是以為系列名稱可以唯一識別 NFT 合約。另一個錯誤是將
第三個錯誤是在傳送至未知智能合約時使用
常見問題
什麼是 ERC-721 介面?
ERC-721 介面是一組標準化函式與事件,用於追蹤非同質化代幣的所有權、核准與轉帳。ERC-721 介面 ID 是什麼?
ERC-721 核心介面 ID 為
ERC-721 合約的 balanceOf 會回傳什麼?
它會回傳某地址在該合約中持有的不同 NFT 數量。ownerOf 的功能是什麼?
它會回傳有效 token ID 目前的持有人。transferFrom 與 safeTransferFrom 有什麼差異?
什麼是 onERC721Received?
這是智能合約透過安全轉帳接收 NFT 時,用來確認能夠接收 NFT 的回呼函式。安全 NFT 轉帳可能失敗嗎?
可能。若授權檢查失敗,或接收合約未回傳預期的回呼選擇器,轉帳就會失敗。approve 有什麼作用?
它會授權一個地址轉移某個特定 NFT。setApprovalForAll 有什麼作用?
它會授予操作者管理呼叫者在該 ERC-721 合約中所有 NFT 的權限。操作者核准會自動到期嗎?
不會。標準的系列層級核准會持續有效,直到持有人撤銷,或合約套用額外自訂規則為止。轉移 NFT 時會清除該代幣的個別核准嗎?
會。一般 ERC-721 實作會在轉帳期間清除該代幣相關的核准。ERC-721 是否要求提供中繼資料?
不要求。中繼資料介面為選用功能,但多數 NFT 系列都有實作。ERC-721 中繼資料介面 ID 是什麼?
中繼資料擴充功能使用的介面 ID 為
ERC-721 Enumerable 介面 ID 是什麼?
Enumerable 擴充功能使用的介面 ID 為
所有 ERC-721 合約都支援 totalSupply 嗎?
不支援。
ERC-721 是否要求提供鑄造函式?
不要求。核心介面未定義使用者或管理員如何鑄造 NFT。ERC-721 是否要求提供銷毀函式?
不要求。銷毀屬於實作功能,而非核心必要函式。ERC-721 會強制執行版稅嗎?
不會。版稅不屬於 ERC-721 核心介面,必須透過獨立邏輯或標準實作。ERC-721 中繼資料可以變更嗎?
可以。除非實作提供更強的不變性保證,否則標準允許變更 token URI。符合 ERC-721 標準能證明 NFT 真實嗎?
不能。任何人都能部署相容合約,因此使用者必須另外驗證合約地址與發行者。結論
ERC-721 介面為 Ethereum 相容應用程式中的非同質化代幣,提供共通的所有權、核准、轉帳與事件規則。其核心介面 ID 為
您可能也喜歡
WhatsMiner M30S++
Web3 網域
Web3 專案
熱門
目前熱門備受市場關注的加密貨幣
最高成交量
按交易量計算交易量最大的加密貨幣

