📘 文章核心摘要
以太坊ERC721 自 2018 年正式標準化以來,已成為數位資產所有權的基石。本文深入剖析 ERC721 的技術規範、與 ERC1155 的關鍵差異,並提供從合約設計到部署的實戰步驟。2026 年的 NFT 市場已從純藝術收藏轉向實體資產憑證、遊戲裝備與身份驗證,理解這套標準的底層邏輯,是進階開發者與投資人必備的技能。
⚡ 重點速覽
每個代幣 ID 獨一無二
不能部分轉移
資料直接儲存或 URI
錢包與市場廣泛支援
📑 章節導覽
什麼是 以太坊ERC721?—— NFT 的誕生與核心概念
以太坊ERC721 是由 Dieter Shirley 等人於 2018 年提出的代幣標準(EIP-721),正式奠定了不可替代代幣(NFT)的技術規範。與 ERC20 這類可互換代幣不同,每一個 ERC721 代幣都擁有唯一的 tokenId,無法等價交換。
理解 以太坊ERC721 的核心需掌握三個原則:
- 唯一性:每個 tokenId 僅對應一個持有人,且永遠不會重複。
- 不可分割性:無法像 ERC20 一樣分割成小數,只能整數單位持有。
- 元資料可擴充:透過
tokenURI指向鏈下 JSON 描述檔,讓藝術品、遊戲道具等能被詳細記錄。
截至 2026 年,以太坊ERC721 仍是 NFT 生態中最廣泛採用的標準,OpenSea、Blur 等頂級市場均原生支援。
以太坊ERC721 vs ERC1155:標準差異完整比較
ERC1155 由 Enjin 團隊於 2019 年提出,主打「多代幣管理」,允許在同一個合約中同時管理同質化與非同質化代幣。以下從設計哲學、Gas 效率、應用場景三個維度進行深度比對。
| 比較維度 | ERC721 | ERC1155 |
|---|---|---|
| 代幣唯一性 | 每個 tokenId 唯一 | 支援同質(fungible)與非同質 |
| 批次操作 | 需逐一呼叫轉移 | 一次轉移多種代幣 |
| Gas 效率 | 較高(逐筆紀錄) | 較低(合併狀態變更) |
| 合約數量 | 每種資產通常需要獨立合約 | 單合約管理多資產 |
| 典型應用 | 高價值藝術品、地契 | 遊戲道具、門票、碎片化資產 |
以太坊ERC721 的技術實現:介面與關鍵函式
根據 EIP-721 規範,合約必須實作 IERC721 介面,並可選擇性繼承 IERC721Metadata 與 IERC721Enumerable。OpenZeppelin 的 ERC721.sol 是業界最成熟的實作基礎。
| 函式 | 說明 | 權限 |
|---|---|---|
balanceOf(address owner) |
查詢持有人擁有的 NFT 數量 | 公開(view) |
ownerOf(uint256 tokenId) |
查詢特定 tokenId 的持有人 | 公開(view) |
safeTransferFrom(...) |
安全轉移,檢查接收者是否支援 ERC721 | 持有人或授權者 |
approve(address to, uint256 tokenId) |
授權單一代幣 | 持有人 |
setApprovalForAll(address operator, bool approved) |
批次授權 | 持有人 |
實作步驟:部署你的第一個 以太坊ERC721 NFT
本節以 Hardhat 與 OpenZeppelin 為工具,示範從零到部署的完整流程。假設你已具備 Node.js 與基本 Solidity 知識。
步驟 1:初始化專案
mkdir my-nft && cd my-nft
npm init -y
npm install --save-dev hardhat @openzeppelin/contracts
步驟 2:撰寫合約
// contracts/MyNFT.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract MyNFT is ERC721 {
uint256 private _nextTokenId;
constructor() ERC721("MyNFT", "MNFT") {}
function safeMint(address to) public {
uint256 tokenId = _nextTokenId;
_safeMint(to, tokenId);
_nextTokenId++;
}
}
步驟 3:編譯與部署
npx hardhat compile
npx hardhat run scripts/deploy.js --network sepolia
步驟 4:驗證合約上 Etherscan
npx hardhat verify --network sepolia <合約地址>
| 工具 | 優點 | 適合場景 |
|---|---|---|
| Hardhat | 調試方便、插件生態豐富 | 開發與測試 |
| Truffle | 較成熟的測試框架 | 遷移舊專案 |
| Foundry | 極快編譯、Solidity 原生測試 | 高效能部署 |
以太坊ERC721 的應用場景與市場現狀(2026)
2026 年的 NFT 市場已從 2021 年的泡沫期轉向實質應用。根據 DappRadar 數據,以太坊ERC721 仍佔整體 NFT 交易量的 68%,但新專案開始混合使用 ERC1155 以降低 Gas。
主要應用領域:
- 實體資產憑證:房地產、奢侈品、供應鏈溯源
- 數位身份:去中心化身分(DID)、會員證明
- 遊戲資產:高階稀有裝備(通常發行量極少)
- 金融 NFT:債權憑證、保險合約碎片化
值得注意的是,Layer 2 如 Arbitrum、Optimism 已成為 ERC721 部署的熱門選擇,交易成本僅為主網的 1/10。
安全性與最佳實踐
撰寫 以太坊ERC721 合約時,常見漏洞包括:
- 重入攻擊:在
_safeMint或safeTransferFrom中未使用 Checks-Effects-Interactions 模式。 - 整數溢位:早期 Solidity 版本未使用 SafeMath(0.8+ 已內建檢查)。
- 授權漏洞:未正確實作
setApprovalForAll導致惡意操作。
建議使用 OpenZeppelin 最新版合約庫,並通過 Slither 或 MythX 進行靜態分析。此外,務必在測試網完整驗證後再部署主網。
常見 FAQ
- Q: 以太坊ERC721 與 ERC721A 有何不同?
A: ERC721A 是 Azuki 團隊提出的優化版本,主要透過批次 mint 時只更新一次 owner 來節省 Gas,但犧牲了部分枚舉功能。 - Q: ERC721 代幣可以分割為小數嗎?
A: 不行,ERC721 的設計初衷就是不可分割。若要擁有部分所有權,需使用 ERC1155 或透過碎片化合約包裝。 - Q: 我該使用 IPFS 還是 Arweave 儲存元資料?
A: IPFS 結合 Pinata 或 Filecoin 是主流,但 Arweave 提供永久儲存,且一次付費。2026 年越來越多高價值 NFT 選擇 Arweave。 - Q: 如何確保我的 ERC721 合約不被濫鑄?
A: 加入白名單機制(Merkle Tree 驗證)或設定鑄造上限、速率限制(如 OpenZeppelin 的ERC721Pausable)。 - Q: ERC721 在 Layer 2 上與主網有哪些差異?
A: 基本介面相同,但跨鏈時需注意橋接合約的安全性。建議優先使用官方橋或經過審計的第三方橋。
結論:下一個 NFT 時代的起點
以太坊ERC721 不僅僅是技術標準,更是數位所有權的宣言。無論你正打算發行收藏品、遊戲道具,或是探索金融 NFT,理解 ERC721 與 ERC1155 的取捨,將直接影響你的專案成本與用戶體驗。
從現在開始,動手撰寫你的第一個 NFT 合約,並在 Sepolia 測試網上驗證所有功能。未來的網路經濟,所有權將回歸個人,而 ERC721 正是那把鑰匙。



