# KTOne NFT發行筆記 ## 合約 ### 專案目標: * 使用 ERC721psi 建立 NFT專案 * 共計發行 10 張NFT,並上傳到 IPFS * 利用 Merkle tree 驗證白單機制 * 盲盒機制 ### 重點條列: - ERC721psi - github: https://github.com/estarriolvetch/ERC721Psi - 由於無法使用 import 引入,所以先使用 <code><i>npm install --save-dev erc721psi</i></code>,再直接到 node_module 資料夾中將合約 Code 複製取出使用即可。![](https://i.imgur.com/DQcPhyq.png)<br/> - 設定盲盒圖片 / onlyOwner - 利用 <code><i>isetBaseURI(_newBaseURI,>setBaseURI(_newBaseURI, _activeReveal)</i></code> - newBaseURI *(string)* = 請填入 ipfs://[盲盒圖片的json CID] - activeReveal *(bool)* = 由於尚未解盲盒,此參數留空 或是輸入 false - 解盲盒 / onlyOwner - 利用 <code><i>setBaseURI(_newBaseURI, _activeReveal)</i></code> - newBaseURI *(string)* = 請填入 ipfs://[盲盒圖片的json CID]/ 【!!注意上方的連結,因為是資料夾概念,結尾需要 / 】 - activeReveal *(bool)* = true 【解盲】 - 白單設定 / onlyOwner - 利用 <code><i>setMerkleRoot(bytes32 _merkleRoot)</i></code> 可以將線下白名單產生的 Merkle Root 放上。 - 白單Mint - 利用 <code><i>whitelistMint(_proof, quantity) </i></code> - proof (bytes32[]):傳入線下產生的 merkel proof 陣列 - quantity (uint256): 傳入 mint 數量 - 開放公售 / onlyOwner - <code><i>togglePublic()</i></code> - 管理者Mint / onlyOwner - <code><i>ownerMint(to, quantity)</i></code> - to (address) : 給予的地址 - quantity (uint256) : NFT數量 - 管理者專屬的功能(後門)?無需白單或是公開銷售可直接 mint ,可以直接空投到錢包(這裡一樣要付 $Eth 唷!) ## 圖片 1. 製作盲盒圖 + NFT全部的圖(目前此專案測試10張) 3. 上傳圖片至pinata - 盲盒圖片獨立放置:比較不會提早洩漏 真正NFT圖片URI - NFT圖片放入資料夾後,傳上整個 Folder - 上傳後會看到主目錄下的 盲盒圖(我取名KTOneUnpack.gif)以及 NFT 的資料夾(我取名KTOneNFTs - 資料夾的命名可隨意命名,但是NFT圖檔上傳前需要用序號命名 0.jpg ~ 9.jpg)![](https://i.imgur.com/m6FzJC3.png) 3. 製作 json 檔案,主要提供 opensea / looksrare 解析使用 - 盲盒 json 範例: <pre><code>{ "name": "KTOne盲盒", "description": "KryptoCamp#4@Group1 NFT", "image": "https://gateway.pinata.cloud/ipfs/QmQb3fSHX6gFLKyGFSm6jjtwdxv34Svi33PFdQmgyAfNoY" }</code></pre> - 圖檔 json(此部分集中到同一資料夾中) - ERC721psi 預設讀取沒有讀副檔名.json,所以要移除副檔名,若是加副檔名,需要改合約code讀取 - 0: <pre><code>{ "name": "KTOne #0動物", "description": "KryptoCamp#4@Group1 NFT", "image": "https://gateway.pinata.cloud/ipfs/Qmbuo8223tSt5bN7rZdqmz9fkVqadLWfeSsqaqK9bvjpQ9/0.jpg" }</code></pre> - 1: <pre><code>{ "name": "KTOne #1動物", "description": "KryptoCamp#4@Group1 NFT", "image": "https://gateway.pinata.cloud/ipfs/Qmbuo8223tSt5bN7rZdqmz9fkVqadLWfeSsqaqK9bvjpQ9/1.jpg" }</code></pre> 4. 完成以上步驟,將 盲盒 json 以及 圖檔 json 資料夾傳上 Pinata ![](https://i.imgur.com/7PhPmD2.png) 4. 以上已經完成圖檔上傳,連結合約: - 盲盒狀態:放上盲盒json連結 - <code>setBaseURI( https://gateway.pinata.cloud/ipfs/QmdPxNoEtWWS389QwHBue4tn879Cg5yF1t9YRVWSo5Bbmm , false)</code> - 解盲盒:放上NFT json 資料夾,別忘了網址最後面要補 / - <code>setBaseURI( https://gateway.pinata.cloud/ipfs/QmSz9Xx8nY3kQ7mwQAQJt957zu1HF4m3nBjYQfQofQZD5v/ , true)</code>