# We are What We Eat 為什麼會發生超賣 ## 事件內容 [We are What We Eat](https://www.tatlerasia.com/dining/journeys/we-are-what-we-eat-seed-nfts-presale?fbclid=IwAR1tgZ0xCJFSPIdAle5sFayF78f-PCz3nZbpEfzcC1MSveUyVLaVJ0oXN7Y) 1/10 11:00 優先釋出的 200 個 Seed NFTs 在 2 分鐘內全數鑄造完成 🚀 反應熱烈,因此項目方與三位創作者:黃心健、江振誠及張逸軍宣布明天(1/11)11:00 將啟動第二波活動 Public Sale。 但第二波活動卻發生**超賣**和**提前購買**的問題,那我們就往下看為什麼會發生吧。 ## 應對 1. 項目方放棄現有合約,之前透過官方渠道順利鑄造 Seed NFT 的買家,會重新空投原購買量的 Seed NFT 到你的錢包。 2. 在 OpenSea 二級市場買到「非官方 Seed NFT」的買家,EchoX 會直接空投新合約的 Seed NFT 至買家錢包,但請於1/12 6pm(UTC+8)前 Email:service@echox.io 回報。需附上 1. 錢包地址 2. 你的 OpenSea NFT 連結。 --- #### 項目方:[EchoX](https://www.echox.app/) 是虛實整合的策展專家,提供NFT管理工具及線上策展顧問。 --- ## 先找出合約的 Mint Function https://etherscan.io/address/0x52afa21bb061bb8a434102802c3d1625a86e9870#writeContract  * 首先我們到合約的 "Write Contract" 找哪一個是 mint function * 這裡只有 `presale` 需要傳送 ETH,所以它就是 mint function * 因此我們到 "Code" 裡面去看  `presale` 的功能為購買 NFT,這裡有兩個限制 : 1. 規定的時間後才能購買 2. 不能超過最大發行數量 這裡目前還看不太出問題,接著我們來看一下合約要如何**更新**和**設定**。 --- ## 合約如何更新和設定 https://etherscan.io/address/0x52afa21bb061bb8a434102802c3d1625a86e9870#writeContract  `setActivity` * 設定 NFT 價格、開賣時間、最大發行量等等... --- ## 第一波活動的合約設定 https://etherscan.io/tx/0x719ab9537f6d210f6308f22a0adf7ab78cbce11d93c0526b8f391a754162b2e4    * 從 etherscan 的活動紀錄我們可以明顯看出 * 第一次的設定是在 Jan-07-2022 10:54:28 AM +UTC (台北時間要 +8 小時) `setActivity` 設定內容為 : 1. **活動 ID(activityID) :** 3 1. **價格(charges.price) :** 0.095 ETH 1. **時間(period) :** 1672272000 (Thursday, December 29, 2022 12:00:00 AM GMT) 1. **最大發行數量(maxCirculation) :** 200 --- ## 第一波購買 第一波活動設定完成後就可以等人購買了,這裡 NFT 最大發行數量設定為 200 個,和 [官網](https://www.facebook.com/TheEchoXio/) 宣布的一樣,這裡沒甚麼問題。 但**時間**的設定會有點問題,因為 1672272000 的時間是 2022/12/29,這樣等同於沒有限制,但因為沒人發現,所以第一波沒有人提前購買。  **售出** 2022-01-10 11:17:52 - 2022-01-10 11:21:09 (台北時間) 得到 19 eth,共賣出 200 個(每個 NFT 定價 0.095 ETH) --- ## 第二波活動的合約設定 https://etherscan.io/tx/0xf1a55b20727cbf7ee53bf18425e3cd64987337cc0239ed6e3a2982622c6eae03    * 從 etherscan 的活動紀錄我們可以明顯看出 * 第二次的設定是在 Jan-11-2022 02:24:32 AM +UTC (台北時間要 +8 小時) `setActivity` 設定內容為 : 1. **活動 ID(activityID) :** 3 1. **價格(charges.price) :** 0.095 ETH 1. **時間(period) :** 1672272000 (Thursday, December 29, 2022 12:00:00 AM GMT) 1. **最大發行數量(maxCirculation) :** 250 --- ## 第二波購買 第二次的設定只有最大發行量有更動,這也是為什麼會發生**超賣**和**提前購買**的問題了,但這個部分需要從程式碼去解析。 **售出** 2022-01-11 10:25:32 - 2022-01-11 10:30:55 (台北時間) 得到 23.75 eth,共賣出 250個(每個 NFT 定價 0.095 ETH) --- ## 為什麼可以偷跑  **錯誤 :** 時間的判斷方式有問題,上面的寫法會變成只有開關的功能,因為合約的設定是在購買之前。 **改善 :** 改成 block.timestamp >= activity.period 會比較好,因為區塊時間會一直往前走,超過設定的時間就可以開始購買,然後時間要設定正確。 第 1 波開啟時間 : 1641783600 (January 10, 2022 11:00:00 AM GMT+08:00) 第 2 波開啟時間 : 1641870000 (January 11, 2022 11:00:00 AM GMT+08:00) ## 為什麼會超賣  1/10、1/11 的活動都是透過 `setActivity` 去更新和設定,每次執行都會把**當前售出數量**歸零,所以 1/11 的活動就又變成可以買 250 個 NFT 了 --- ## 參考資料 https://mirror.xyz/0x0b399FD0a7F694774EC7Df64aD431714cE8129a6/dxvRnNajnBLNY5GLngsljmWkPtLKSwqLUvlPnbTkTtY ---
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up