昨天我們成功把NFT部署上測試鏈Goerli
了,不過有許多東西都還沒設定完成,導致NFT不但顯示不出來也沒有名字或數量限制等,今天讓我們回到Remix來coding吧!
首先當然要先分析一下這個鐵人賽專屬NFT的規則是什麼
好了,分析完需求之後讓我們直接回到Remix開始Coding吧!
首先我們先來設定總數30枚以及每人只能鑄造一枚的數值
將這兩個定值新增在constructor()
上方:
有了這兩個定值後,讓我們移到下面的safeMint()鑄造函式
在鑄造的時間用檢查的方式來判斷用戶使否可以互動
先看一下目前鑄造的函式是如何運作的:
了解之後
我們在tokenID
+1前插入兩行require需求
檢查是否符合資格否則出現後方的訊息
完成!
記得把safeMint()
函式尾處的onlyOwner
移除
否則只有合約的擁有者才能跟這個函式互動喔~
另外我們將總數量暫時設定成2,方便等等的測試
最終應該會長這樣
一樣Compile編譯完,部署到測試鏈Goerli
這邊有個小技巧,可以先把舊的合約移除以免待會搞混
然後跟safeMint()函式互動,鑄造NFT
成功!
但是究竟我們的總數量2枚以及每人一個到底有沒有起作用呢
讓我們回到Remix的頁面再鑄造一次,看看可不可行
有!被拒絕了
成功跳出"Sorry, You can only mint this NFT one per wallet."
字樣
讓我們用其他錢包地址鑄造看看是否可行
成功跳出簽署合約~ 進行鑄造後
我們回到OpenSea測試網查看
也成功! 而且代幣編號變成了1
也就是已經鑄造了兩枚代幣#0跟#1 到達規定值
所以現在應該不管哪個錢包地址都無法鑄造了!
讓我們回去試試
成功顯示"Sorry, This NFT has been fully minted."
!
我們今天成功將NFT設定了總數,以及一人只能鑄造一枚代幣的規則。不過認真想的話這其中好像還有一些問題欸?! 如果同一個人一直填入不同人的錢包是不是也可以快速的把NFT鑄造完呢? 明天讓我們來修復這個問題!
<上一篇> [Day 25] 建造鐵人賽專屬NFT!(二)把寫好的合約部屬上測試鏈Goerli!竟然還有測試用OpenSea?!
<下一篇> [Day 27] 建造鐵人賽專屬NFT!(四)強化每人只能鑄造一枚NFT的邏輯與實作