什麼是 ERC-721?
ERC-721 是 Ethereum 的代幣標準,用於建立和管理非同質化代幣(NFT)。每個 ERC-721 代幣都有專屬的代幣 ID,可與同一智能合約管理的其他代幣區分開來。官方ERC-721 規範定義了標準規則,用於追蹤所有權、轉移代幣,以及授予其他地址管理 NFT 的權限。
ERC-721 被歸類為最終版 Ethereum Request for Comments 標準。建立此標準的原因是,可互換代幣標準無法準確代表必須逐一識別和追蹤的資產。ERC-721 代幣可代表數位收藏品、遊戲道具、會員資格憑證、虛擬財產、活動門票、金融部位、類似網域名稱的資產,或與實體物品相關的紀錄。此標準定義區塊鏈上的所有權與轉移行為,但不會自動確立著作權、法律所有權、真偽、金融價值,或對外部資產的權利。ERC 代表什麼?
ERC 是 Ethereum Request for Comments 的縮寫。ERC 描述應用程式和智能合約可遵循的技術標準,以提升 Ethereum 生態系統內的互通性。ERC-721 是指派給非同質化代幣標準的識別編號。這個編號不代表代幣的供應量、價格、區塊鏈地址或發行日期。實作 ERC-721 的合約可以加入選用擴充功能和自訂函式,只要其必要行為仍符合此標準即可。為什麼要建立 ERC-721?
可互換資產可以互相替代,因為同一資產的每個單位通常具有相同用途。非同質化資產必須分開追蹤,因為每個單位的特性、歷史、稀有度、權利或價值都可能不同。ERC-721 為錢包和應用程式提供一套共通方法,用來識別每個獨特代幣的持有者。它也將轉移、核准、操作者權限,以及與所有權相關的事件紀錄標準化。若沒有共通標準,每個 NFT 合約都可能需要不同的整合方式。共通函式讓通用型錢包、區塊鏈瀏覽器、索引器、遊戲、借貸協議和其他加密貨幣應用程式能與多種 NFT 收藏品互動。ERC-721 的運作方式
ERC-721 智能合約會儲存或計算每個有效代幣 ID 對應的持有者。合約也會追蹤每個地址在該收藏品中持有的 NFT 數量。經授權的轉移發生時,合約會移除傳送者的所有權,並將該代幣 ID 指派給接收者。合約會發出標準化的
什麼是代幣 ID?
代幣 ID 是一個無號整數,用於在 ERC-721 合約中唯一識別一個 NFT。同一個代幣 ID 可以同時存在於多個不同合約中,但不代表相同資產。因此,NFT 必須由區塊鏈網路、合約地址和代幣 ID 三者共同識別。例如,一個合約中的代幣 ID 50,與另一個合約中的代幣 ID 50 毫無關聯。代幣 ID 不必從 0 開始,也不必依簡單順序遞增。收藏品可以使用連續 ID、隨機指派的 ID、編碼識別碼,或合約支援的其他系統。應用程式應查詢合約,而不是假設某個範圍內的每個數字都代表現存 NFT。ERC-721 為何具有非同質性?
每個 ERC-721 代幣都會在區塊鏈上作為個別物件追蹤。同一收藏品中的兩個 NFT,可能具有不同的中繼資料、歷史、屬性、稀有度和市場價值。擁有一個代幣 ID,不代表持有者也擁有其他代幣 ID。標準 ERC-721 代幣會以完整代幣的形式轉移,而非以小數數量轉移。若要取得分割後的經濟所有權,必須使用 ERC-721 核心標準以外的獨立智能合約或代幣結構。稱兩個 NFT 為非同質化代幣,不代表它們的視覺內容一定不同,因為不同代幣 ID 可能指向相似或相同的中繼資料。ERC-721 核心函式
核心標準包含用於查詢所有權、轉移 NFT 和管理轉移權限的函式。必要函式包括
balanceOf 函式
ownerOf 函式
transferFrom 函式
透過
safeTransferFrom 函式
ERC-721 包含兩種版本的
接收者是智能合約時,NFT 合約會呼叫接收者的
什麼是 ERC-721 接收者?
ERC-721 接收者是實作
相容的接收者會傳回預期的選擇器,通常表示為
目前的 ERC-721 實作文件包含接收者介面,以及供需要接收 NFT 的合約使用的基本接收者工具。
接收者在記錄存入資產或授予權益前,應確認觸發回呼的 NFT 合約。ERC-721 核准
ERC-721 核准讓 NFT 持有者在不立即轉移所有權的情況下,委派轉移權限。代幣專屬核准適用於單一代幣 ID。操作者核准適用於某地址在該合約中持有的所有 NFT。核准會記錄在鏈上,只要仍有效,就可以在不取得持有者另一個簽章的情況下使用。使用者應將 NFT 核准請求視為敏感的金融權限。核准不受信任的地址,可能讓獲核准方轉移有價值的 NFT。approve 函式
getApproved 函式
應用程式若要確認某帳戶能否轉移 NFT,也必須檢查
setApprovalForAll 函式
isApprovedForAll 函式
此函式會傳回
ERC-721 事件
ERC-721 定義了
Transfer 事件
Approval 與 ApprovalForAll 事件
ERC-165 介面偵測
每個符合規範的 ERC-721 合約都必須支援 ERC-165 介面偵測。ERC-165 標準定義了
ERC-721 核心介面 ID 為
符合規範的合約在被詢問是否支援此識別碼時,應傳回
ERC-721 中繼資料
ERC-721 包含選用的中繼資料擴充功能。此擴充功能加入
其 ERC-165 介面 ID 為
tokenURI 的運作方式
中繼資料更新事件
ERC-721 本身未提供適用於每次中繼資料變更的標準化事件。選用的 ERC-4906 中繼資料更新擴充功能加入了
ERC-4906 介面 ID 為
ERC-721 列舉功能
選用的列舉擴充功能可讓使用者透過鏈上函式查詢 NFT 供應量與持有清單。其介面 ID 為
此擴充功能加入
鏈下應用程式也可以透過索引
鑄造 ERC-721 代幣
鑄造會建立新的有效代幣 ID,並將其指派給第一位持有者。ERC-721 核心標準未定義哪些人可以鑄造,也未規定如何提出鑄造請求。收藏品可以開放公開鑄造、限制只有授權角色能鑄造、要求付款、使用允許名單,或在部署時建立所有 NFT。鑄造通常會發出一個從零地址開始的
銷毀 ERC-721 代幣
銷毀會將 NFT 從有效所有權紀錄中移除。ERC-721 核心介面不要求提供公開銷毀函式。收藏品可以允許持有者、已核准操作者、管理員或協議邏輯銷毀代幣。銷毀通常會發出一個轉移至零地址的
ERC-721 版稅
創作者版稅不屬於 ERC-721 核心標準的一部分。選用的 ERC-2981 NFT 版稅標準提供一種方法,可回報銷售價格對應的版稅接收者和建議金額。
ERC-2981 會傳達版稅資訊,但不會強制每次轉移或每個應用程式都支付版稅。若實作支援,收藏品可以設定預設版稅或個別代幣的版稅。如果合約授予管理員相關權限,版稅接收者和費率可能會變更。使用者不應假設每次 ERC-721 轉移都包含可強制執行的創作者付款。ERC-721 與 ERC-20 的差異
ERC-20 用於可互換代幣餘額,ERC-721 則用於可個別識別的 NFT。ERC-20 帳戶可以持有可分割數量的單一代幣。ERC-721 帳戶持有不同的代幣 ID。ERC-721 的
ERC-721 與 ERC-1155 的差異
ERC-721 透過單一 NFT 收藏品合約,代表個別持有的代幣 ID。ERC-1155 多代幣標準允許一個合約管理多個代幣 ID,並為各 ID 記錄不同的數量餘額。
ERC-1155 代幣 ID 可以代表可互換、半同質化或獨特資產。一個地址可以持有同一 ERC-1155 代幣 ID 的多個單位。依照標準模型,一個有效的 ERC-721 代幣 ID 只有一位持有者。ERC-1155 也支援標準化批次轉移,而 ERC-721 通常一次處理一個 NFT。應採用哪一種標準,取決於專案的所有權和庫存管理需求。ERC-721 的應用場景
數位藝術收藏品可以使用 ERC-721 代幣記錄個別作品的所有權。區塊鏈遊戲可以使用 NFT 代表角色、土地、裝備或其他獨特道具。會員制度可以使用 NFT 代表存取權或社群身分。金融應用程式可以將獨特的債務部位、保單、流動性部位或債權代幣化。活動系統可以發行具有個別識別碼且轉移規則受控的門票。專案可以將 NFT 與實體產品連結,但智能合約本身無法驗證實體物品的持有狀態或法律所有權。ERC-721 代幣也可以代表憑證,但不應將敏感個人資料公開儲存在公開區塊鏈上。NFT 所有權與著作權
擁有 ERC-721 代幣代表區塊鏈合約將該代幣 ID 的持有者記錄為某個地址。這不會自動轉移相關藝術品或媒體的著作權。著作權和商業使用權取決於創作者的授權、銷售協議和適用法律。專案可能授予廣泛商業權利、有限的個人使用權,或不授予任何額外智慧財產權。中繼資料也可能指向代幣發行者無權使用的內容。買家應檢視專案的法律條款,而不是假設持有代幣就能取得所有可能的權利。ERC-721 核准的風險
惡意核准請求是 NFT 持有者面臨的主要安全風險之一。網路釣魚應用程式可能在要求
安全轉移與重入風險
安全 NFT 轉移在接收者是智能合約時,會呼叫外部程式碼。在第一個操作完全結束前,接收者可能回呼原始應用程式。這種行為可能在鑄造、銷售、借貸、質押、託管或提領合約中造成重入漏洞。官方 Solidity 安全指引建議,在預期邏輯允許的情況下,先完成檢查和重要狀態變更,再進行外部互動。
開發者也應考量跨函式重入,因為惡意接收者可能呼叫另一個已公開的函式。應以惡意合約測試接收者回呼,而不是將其視為簡單通知。中繼資料安全風險
NFT 顯示的內容可能依賴區塊鏈以外的資料。外部伺服器可能停止運作、變更回應或移除檔案。購買後,可變 URI 可能指向不同內容。中繼資料可能包含誤導性描述、抄襲的藝術品、隱藏外部連結或不安全的檔案格式。去中心化儲存可提升持續保存能力,但內容仍取決於持續可用性和識別碼是否正確。完全鏈上中繼資料可降低對外部託管的依賴,但可能增加部署和更新成本。合約真偽風險
任何人都可以部署名稱、代號、圖片或代幣 ID 看似熟悉的 ERC-721 合約。介面相容不代表收藏品是真品。使用者應透過專案的可信來源,確認區塊鏈網路和完整合約地址。已驗證的原始碼發布可顯示程式碼與合約的對應關係,但不保證商業行為誠信或經濟設計安全。也應檢查代幣歷史、創作者聲明、管理員權限和中繼資料控制權。可升級的 ERC-721 合約
ERC-721 合約可能使用代理合約,讓部署後仍可變更其邏輯。升級可以修復錯誤或加入功能。升級也可能變更鑄造、轉移、核准、中繼資料、版稅、暫停或銷毀行為。升級權限遭到入侵時,攻擊者可能安裝會影響 NFT 所有權的惡意邏輯。使用者應確認升級權由誰控制、需要多少簽章,以及是否設有時間鎖。即使某收藏品被描述為去中心化,仍可能包含權限強大的管理員角色。開發者如何實作 ERC-721
除非有必要採用自訂設計,否則開發者應使用經審查且持續維護的實作。目前的 ERC-721 開發指南介紹核心實作,以及中繼資料、列舉、銷毀、暫停、版稅、投票和其他用途的選用擴充功能。
鑄造權限應符合收藏品已公布的供應量規則。轉移和核准應拒絕未授權呼叫者和無效地址。若代幣可能直接發行至智能合約,應使用安全鑄造。開發者應測試惡意接收者、重入、無效代幣 ID、核准清除、操作者權限、銷毀和介面偵測。管理功能應採用清楚的存取控制,並發出有用的事件。如何評估 ERC-721 NFT
第一步是確認網路、合約地址和代幣 ID。第二步是確認合約支援 ERC-721 核心介面。第三步是檢查目前持有者和轉移歷史。第四步是檢視代幣專屬和全收藏品核准。第五步是確認中繼資料和連結媒體的儲存方式。第六步是確認鑄造、銷毀、暫停、凍結和升級權限由誰掌握。第七步是確認供應量和稀有度宣稱是否能在鏈上驗證。第八步是檢視稽核和原始碼,但不要將其視為保證。第九步是了解 NFT 附帶哪些法律或商業權利。第十步是在承擔有價值資產的風險前,先以低價值交易測試不熟悉的合約。ERC-721 轉移範例
假設 Alice 在某 ERC-721 收藏品中持有代幣 ID 101。合約的
她的錢包會呼叫
合約會更新所有權紀錄,並呼叫接收者的
如果接收者傳回正確的選擇器,轉移就會完成,NFT 合約也會發出
常見的 ERC-721 錯誤
常見錯誤之一,是以為收藏品名稱能唯一識別 NFT。另一個錯誤是未檢查操作者地址,就授予全收藏品的操作者存取權。第三個錯誤是認為將錢包中斷連線就能移除鏈上核准。第四個錯誤是使用
常見問題
ERC-721 代表什麼?
ERC-721 是 Ethereum 標準,用於定義非同質化代幣的所有權、轉移、核准和介面規則。ERC-721 和 NFT 是同一回事嗎?
ERC-721 是 NFT 技術標準,而 NFT 是更廣泛的通稱,也包括依其他標準建立的代幣。ERC-721 是可互換的嗎?
不是,每個有效的 ERC-721 代幣 ID 都會個別追蹤,並可能具有不同屬性和價值。ERC-721 介面 ID 是什麼?
ERC-721 核心介面 ID 為
如何識別 ERC-721 NFT?
NFT 必須由區塊鏈網路、智能合約地址和代幣 ID 共同識別。balanceOf 會傳回什麼?
它會傳回某地址在一個 ERC-721 合約中持有的 NFT 數量。ownerOf 會傳回什麼?
它會傳回有效代幣 ID 目前持有者的地址。transferFrom 和 safeTransferFrom 有什麼不同?
ERC-721 NFT 可以傳送至智能合約嗎?
可以,但通常應使用安全轉移,要求接收者確認其能夠接收 NFT。approve 有什麼作用?
它會授予一個地址轉移某個特定 NFT 的權限。setApprovalForAll 有什麼作用?
它會授權操作者管理持有者在該 ERC-721 合約中持有的所有 NFT。操作者核准會自動到期嗎?
不會。標準操作者核准會持續有效,直到持有者撤銷,或自訂合約邏輯改變其效力。NFT 轉移時會清除代幣專屬核准嗎?
會,NFT 轉移時會清除代幣專屬核准。ERC-721 是否要求提供中繼資料?
不要求。中繼資料介面是選用功能,但大多數 NFT 收藏品都有實作。ERC-721 中繼資料可以變更嗎?
可以,除非合約和儲存系統提供可驗證的不可變性保證,否則中繼資料可能變更。每個 ERC-721 合約都有 totalSupply 嗎?
沒有,
ERC-721 有定義鑄造方式嗎?
此標準透過所有權事件識別鑄造行為,但不要求特定的公開鑄造函式或供應量政策。ERC-721 有定義銷毀方式嗎?
沒有,銷毀函式為選用功能,取決於個別實作。ERC-721 會強制收取版稅嗎?
不會。版稅需要另外的邏輯或標準,而且版稅資訊不會自動強制付款。持有 ERC-721 代幣會取得著作權嗎?
不會,智慧財產權取決於適用授權和法律協議。ERC-721 合約可以升級嗎?
有些合約可以透過代理系統升級,有些則在部署後不可變更。ERC-721 NFT 可以分割嗎?
分割所有權需要獨立合約或代幣機制,因為 ERC-721 核心代幣是以完整單位持有。ERC-721 核准可能被用來竊取 NFT 嗎?
可能,惡意獲核准地址可以轉移其權限涵蓋的 NFT。符合 ERC-721 標準能證明真偽嗎?
不能。任何人都可以部署相容合約,因此必須另外驗證收藏品地址和發行者。ERC-721 的主要優點是什麼?
其主要優點是將所有權和轉移行為標準化,讓許多加密貨幣應用程式能與獨特的代幣化資產互動。結論
ERC-721 是 Ethereum 用來代表可個別識別之非同質化代幣的主要標準。它定義了共通的所有權查詢、轉移、核准、操作者權限、事件和介面偵測規則。每個 NFT 都由其區塊鏈網路、合約地址和代幣 ID 唯一識別。核心介面 ID 為
您可能也喜歡
WhatsMiner M30S++
Web3 網域
Web3 專案
熱門
目前熱門備受市場關注的加密貨幣
最高成交量
按交易量計算交易量最大的加密貨幣

