# 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 複製取出使用即可。<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)
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

4. 以上已經完成圖檔上傳,連結合約:
- 盲盒狀態:放上盲盒json連結
- <code>setBaseURI( https://gateway.pinata.cloud/ipfs/QmdPxNoEtWWS389QwHBue4tn879Cg5yF1t9YRVWSo5Bbmm , false)</code>
- 解盲盒:放上NFT json 資料夾,別忘了網址最後面要補 /
- <code>setBaseURI( https://gateway.pinata.cloud/ipfs/QmSz9Xx8nY3kQ7mwQAQJt957zu1HF4m3nBjYQfQofQZD5v/ , true)</code>