ERC-721
概述
本指南將逐步說明如何在 Kaia 上建立和部署 ERC-721 相容的代幣。 由於 Kaia 的 Ethereum 兼容性,在 Kaia 上建立可替代代幣的步驟與在 Ethereum 上的步驟相似,而且它使用 ERC721 標準。
為了遵循標準,您將部署分別實作下列 ERC721 和 ERC165 介面的契約:
interface ERC721 /* is ERC165 */ { event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);= event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); function balanceOf(address _owner) external view returns (uint256); function ownerOf(uint256 _tokenId) external view returns (address); function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable; function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; function transferFrom(address _from, address _to, uint256 _tokenId) external payable; function approve(address _approved, uint256 _tokenId) external payable; function setApprovalForAll(address _operator, bool _approved) external; function getApproved(uint256 _tokenId) external view returns (address); function isApprovedForAll(address _owner, address _operator) external view returns (bool);}interface ERC165 { function supportsInterface(bytes4 interfaceID) external view returns (bool);}
- Transfer 事件:代用幣的所有權從一個位址變更到另一個位址時發佈。
- Approval 事件:當一個位址被核准傳輸特定的 token 時發出。
- ApprovalForAll 事件:所有者批准或撤銷操作員管理其所有代幣的批准時發佈。
- balanceOf:回傳特定位址所擁有的 NFT(不可偽造代幣)數量的方法。
- ownerOf:返回特定 token 擁有者位址的方法。 每個 ERC721 令牌都是唯一的,由 ID 表示。 此功能允許使 用者或應用程式根據代用幣的唯一 ID 確定代用幣的擁有者。
- safeTransferFrom (without data):安全地將特定代幣的所有權從一個位址轉移到另一個位址的方法。 此功能會檢查收件人是否為智慧型契約。 如果是,則必須實作特定函式 (onERC721Received) 以接受傳輸。
- transferFrom:將代用幣的所有權從一個位址轉移到另一個位址的方法。 它一般用於寄件者已獲准傳送代用幣時。
- approve:批准地址傳輸特定代幣的方法。 這允許授權轉讓,即擁有者可以允許另一方代表他們轉讓代幣。
- getApproved:用來取得特定 token 的核准位址的方法。
- setApprovalForAll:方法允許一個或多個代幣的所有者批准或撤銷操作者管理其所有代幣的批准。
- isApprovedForAll:檢查操作員是否獲准管理所有者的所有代幣的方法。
- safeTransferFrom (with data):方法與 safeTransferFrom (without data) 相似,但多了一個資料參數。 如果接收者是智慧型契約,此額外資料可用於在傳輸過程中傳遞其他資訊。 此函式也會檢查接收者是否為智慧型契約,以及是否實作 onERC721Received 函式。
開始使用
在本節中,您將使用 Remix Online IDE 建立並部署您的 ERC721 代幣合約。 為了方便和安全起見,我們會使用 OpenZeppelin ERC-721 契約來建立我們的代幣。 有了 OpenZeppelin,我們不需要寫整個 ERC-721 介面。 相反地,我們可以匯入 函式庫合約並使用其功能。
步驟 1:將檔案新增至 Filebase & IPFS
我們需要寄存我們的 NFT 繪圖和元資料檔案;為此,我們會使用 IPFS - 一個點對點檔案儲存和分享的分散式系統。 與 IPFS 通訊協定接觸有多種方法。 您可以在自己的系統上設定和操作 IPFS,或者 Filebase 一個更簡單的解決方案。
Filebase 是 IPFS 上 web3 分散式儲存的橋梁。 它透過管理底層基礎架構,簡化您對 IPFS 的存取。
在本指南中,我們將使用 Filebase 在 IPFS 上託管我們的 NFT 繪圖和元資料。
步驟:
- 登入您的 Filebase 控制面板。
- 如果您沒有 IPFS 儲存桶,請按一下 Create Bucket,建立一個 IPFS 儲存桶。
- 選取 ** 上傳** 按鈕,上傳您的 NFT 圖檔,如您的水桶儀表板所示。
- 按一下 ** 檔案** 標籤中的檔案名稱,然後複製 (分享按鈕) NFT 藝術品的 IPFS URL。
- 使用 Filebase 將 Metadata JSON 檔案新增至 IPFS。
建立一個名為 kairos.json
的 JSON 檔案,在 image 欄位中取代您的 IPFS URL,然後儲存。 儲存後,將 JSON 檔案上傳至 IPFS,與上一步類似。
{ "name": "Kairos NFT", "description": "gkaia frens! gazuaaaaa!!!", "image": "https://disastrous-turquoise-parakeet.myfilebase.com/ipfs/QmRvQc4wZCp6NF7dFL4ywiWTG7FSH3KKGUAkXGgsdYfcKi"}
上傳後,按一下檔案索引標籤中的檔案名稱,並複製 IPFS URL。 它看起來一定很像下面這個:
https://disastrous-turquoise-parakeet.myfilebase.com/ipfs/QmY1LZF8JHo2r3h4X5VzLLXtJujqnBFGTyo2aqR9joXnt8
儲存此 IPFS URL。 在下一節中,我們將需要這個來鑄造我們的 NFT。
步驟 2:建立 ERC721 代幣合約
開放式合約精靈
- 開啟 OpenZeppelin Contract Wizard
- 選擇 ER721。
- 提供標記的 ** 名稱** 和 ** 代號**。 例如:分別為 Kairos 和 KS。
- 在 Base URI 欄位中,將其設定為空
- 在功能部分,勾選 Mintable、Burnable、URIStorage 功能,以允許 - 特權帳戶 (onlyOwner) 可以鑄造、燒錄代用幣,並允許我們更新個別代用幣 ID 的代用幣 URI。
- 按一下 Copy 圖示,複製代碼以便在下一節的 Remix 上使用。
重新混音
- 在 Remix 中,導覽到 ** 檔案總管**,並在 contracts 資料夾中建立一個名為
Kairos.sol
的新檔案。 - 導覽到 Solidity Compiler 索引標籤,然後按一下 Compile Kairos.sol 以編譯代幣合約。
- 導覽到 ** 部署與執行交易** 索引標籤
- 選取 Environment > Injected Provider > MetaMask。
- 在 合約下拉式中,選擇您的合約。 例如,Kairos。
- 在 Deploy 欄位中,提供 initialOwner 的建構器參數。
- 按一下 ** 部署**
步驟 3:與 ERC721 代幣合約互動
現在前往 Remix 中的 Deployed Contracts 區段,並展開已部署的合約。 您會看到一堆功能。 展開 safeMint 函式,並新增下列詳細資訊:
- 在至欄位中加入您的錢包地址。
- 在 tokenId 欄位輸入任何大數值。 我們建議使用 '1',因為它代表鑄造的第一枚代幣。
- 對於 uri 欄位,請輸入您在 Adding files to IPFS 章節中產生的 JSON 檔案的 URI。
- 點選 交易,確認 MetaMask 的交易。 這可能需要幾分鐘,但您總是可以透過 Kaiascan 之類的區塊瀏覽器來確認交易是否已執行。
現在您可以在 Kaia Kairos Testnet 上使用 NFT。
您可以輸入之前使用的位址或代號 ID,檢查其他詳細資訊,例如 balanceOf、name、symbol、ownerOf 或 tokenURI。
步驟 4:檢視 Metamask 上的 NFT
- 開啟 MetaMask
- 導覽到 NFT 標籤,在您的錢包首頁上,您應該會看到自動偵測到的 NFT。
要顯示您的 NFT,最簡單的方法是開啟 NFT 自動偵測功能,您可以在「安全與隱私」下的「設定」中切換。