ERC721
ERC721
ERC721 是以太坊上用於非同質化代幣 NFT(Non-Fungible Token)的標準規範,讓每個代幣擁有獨一無二的Token ID。是 2018 年提出的以太坊改進提案(EIP-721),專為不可替代代幣設計。 每個NFT有唯一識別碼,不可分割且不可互換,例如藝術品或遊戲道具。
特點
非同質性:每個 ERC-721 代幣都有獨立的 tokenId,彼此不可 1:1 互換。
不可分割:ERC-721 代幣不能拆分,只能整個轉移(不像 ERC-20 可以有 0.1 顆之類的單位)。
Metadata:透過 tokenURI 等欄位連結到描述名稱、圖片、屬性的 JSON 資料,用來呈現 NFT 的內容。
運作流程
創作者呼叫智能合約的 mint 函式,合約會產生一個唯一的 tokenId(例如 #001、#002…)→ 將這個 tokenId 與持有者的錢包地址綁定,記錄在鏈上 → 指定一個 tokenURI 指向一個 JSON 檔案,這個 JSON 通常存在 IPFS(去中心化儲存)上,確保圖片和描述無法被竄改。合約內部會維護兩個帳本, tokenId → 持有者地址(誰擁有這個 NFT)以及 持有者地址 → 持有數量(某人擁有幾個 NFT) 任何人都可以呼叫 ownerOf(tokenId) 查詢某個 NFT 現在歸誰所有。
當 NFT 被買賣或轉贈時,呼叫 transferFrom 或 safeTransferFrom,合約會驗證呼叫者是否是擁有者或被授權者,如果是就會更新鏈上的 tokenId → 新持有者地址 紀錄,與ERC-20相同,ERC-721也有授權機制,例如如果你想在 OpenSea 上架 NFT,你不需要把 NFT 先轉給 OpenSea,而是呼叫 approve,授權 OpenSea 的合約地址可以代替你轉移這個 tokenId。 一旦在OpenSea成交,OpenSea 合約就會直接執行轉移。
ERC-721 Interface
1 | ownerOf(tokenId) //查詢某個 NFT 的擁有者 |
它解決了什麼問題
ERC-20屬於同質化也就是所有代幣都能 1 : 1 被互換,每個代幣之間都相等,沒辦法處理,數位藝術與收藏品的所有權證明,現實世界資產代幣化,以及去中心化的遊戲道具。與同質化代幣(如 ERC-20)不同,ERC-721 中每一個 token 代表一個獨特資產,例如一幅數位藝術、遊戲道具或門票。解決了 ERC-20 同質化代幣無法處理獨特資產的問題。
為什麼需要一個專門的標準來表示 NFT
需要專門的 NFT 標準(像 ERC‑721),是為了解決統一性問題,保證每個 NFT 都有基本功能,避免每個人都有創造自己的合約寫法,讓所有跟 NFT 有關的錢包、平台、合約可以直接識別與操作,同時也可以降低開發錯誤與安全風險。ERC721幫助設計者專心在NFT本身的設計上,而不是每次都從零設計 NFT 格式。
ERC721 與 ERC20 的根本差異是什麼?
ERC20 與 ERC721 的根本差異在於「同質性」,前者為同質化代幣每個 token 完全一樣可互換、可切割,後者為非同質化每個 token 獨一無二不可互換,不可切割。
為什麼 ERC721 的 token 不可以互換(non-fungible)?
非同質化代幣互相並不等價,無法直接互換。
ERC20 的 balanceOf 和 ERC721 的 balanceOf 回傳的意思一樣嗎?有什麼差別?
函式名稱一樣,回傳型別也都是 uint256 ,都是回傳有多少token,但意義不太相同
ERC-20 balanceOf 地址持有多少顆 token
ERC-721 balanceOf 該地址持有多少個 NFT
tokenId 是什麼?
tokenId 是 ERC-721 合約內每個 NFT 的識別碼,本質上是一個 uint256,用來區分同一個合約中所有不同的 NFT。
誰決定 tokenId 的編號規則?
由開發者自己決定,可以遞增也可以隨機,或是自己設計
ownerOf(tokenId) 查詢不存在的 tokenId 會發生什麼?
呼叫 ownerOf 查詢不存在的 tokenId 會被 revert
參考資料
https://www.gate.com/zh-tw/learn/glossary/erc721
https://blockcast.it/2018/04/07/erc721-erc20-ethereum-token-standard/
https://easonwang.gitbook.io/blockchain/smart/erc721-fan-li
https://docs.openzeppelin.com/contracts/3.x/api/token/erc721
https://www.gate.com/zh-tw/learn/glossary/erc721