# Yolo cat 文章 ![](https://hackmd.io/_uploads/BkICot52t.png) ## 事發經過 1/9 當天 藝人陳零九本來預計將在下午1330公開發售的,「 YOLO Cat Club」的系列 NFT 卻在1329分時全數鑄造完,幣圈社群頓時炸鍋。 ~~各種傳聞懷疑,可能有人事先取得合約地址 內線交易的疑慮 甚至是科學家撰寫智能合約來搶NFT的傳聞~~ 對此陳零九及其技術合作方團隊 FOMO Dog Club 有在當天晚上的八點鐘,一同在 IG 直播說明整個事件的始末,以及主要的補償措施 https://www.instagram.com/tv/CYgnUQVBV2c/?utm_source=ig_web_copy_link 首先,關於為什麼在發售時間前就可以進行買賣,項目工程師的說明: > 之所以會在開賣時間前就鑄造完畢,是因為他原本就是準備在接近拍賣時間(13:30)時釋出合約,但剛好這次以太坊出塊時間較快,所以才會導致在開買時間(13:30)前,就於官網釋出合約連結。 至於退還 gas fee 的補償措施,項目方將全數退還「4,394 筆」沒有鑄造成功的交易,一共 70,060 美元的 gas fee,此外還將抽出三位用戶,免費空投 YOLO Cat 作為補償。 此事件算是暫時告一個段落 而之後知名的區塊鏈科學家社群 AlphaShark 的創辦人也有在 Medium 上發文解釋這次事件的原因 https://medium.com/@b1995/yolo-cat-%E5%BE%A9%E7%9B%A4-1-956565334642 ~~經過這幾次相關的NFT事件(Yolo cat, murmur cat)~~ 區塊鏈核心始終不變,從以前的Fomo3D到如今的NFT Adidas mint,周杰倫 nft闢謠,到這幾天的yolo cat/murmur cat, 我們可能沒有搶到熱門的NFT,但沒有得到也可以學到,我們可以從中學習到什麼呢? ~~首先,有越來越多的科學家及相關社群開始展露頭角(雖然相關社群的NFT地板價早就被炒的非常高) 而從社群討論的話題來看,有些人可能會有以下的疑惑 **1. 有人事先取得合約地址?** **2. 內線交易的疑慮?** **3. 手速再快也比不上機器人搶?**~~ > 合約即條文 > 鏈上資訊會告訴我們答案 但其實這些疑惑都可以靠學習看懂合約的基礎來解決 下面會講解如何找到NFT的合約,包含合約上架時間,觀看鑄造的機制以及機器人搶NFT的原理 * 如何找到合約 * 如何知道合約上架時間 ## 如何找到合約? 首先我們要先到 opensea 上找到 Yolo Cat 的項目 https://opensea.io/collection/yolo-cat-club09 1. 點擊其中一個NFT 2. 找到左側 Detail,其中有一個 Contract Address,點擊他 3. 會看到在 Etherscan 上的 Contract ~~![](https://hackmd.io/_uploads/S1HCptcht.png)~~ ~~![](https://hackmd.io/_uploads/Bkwg0KqnF.png)~~ ![](https://hackmd.io/_uploads/SyFfCtqnF.png) ## 如何知道合約上架時間? 可以點擊 Contract Creator: 中 txn 的網址,會有此筆交易的詳細內容 ![](https://hackmd.io/_uploads/rk_cCY5nF.png) 可以看到 timestamp 是 `Jan-09-2022 04:37:34 AM +UTC)`` ![](https://hackmd.io/_uploads/r16CCKqnK.png) 從這邊可以得知這個合約是在公開發售約一個小時前上架的 看到這裡的確可能會有人事先取得合約地址進行偷跑的動作 但在這份合約當中其實有做一個狀態判斷,這部份我們可以看 公開發售時間點的 block `13969455` 在 Etherscan 上 搜尋 `13969455` ![](https://hackmd.io/_uploads/ry5Ngc5nY.png) 可以看到這個 block 的詳細資訊 ![](https://hackmd.io/_uploads/ByXBeccnt.png) 點擊 129 transcations ![](https://hackmd.io/_uploads/rykqg9c3Y.png) 可以找到這筆交易 filp Sale Active (這邊貌似拼錯單字?) https://etherscan.io/txs?block=13969455&ps=100&p=1 ![](https://hackmd.io/_uploads/SJPYZq9ht.png) > 這個動作的意思才是真正開賣,只要在這個動作前的鑄造行為都會失敗,可以從合約的 transactions 觀察 ![](https://hackmd.io/_uploads/HJNM7qq3F.png) 選擇 4912 ![](https://hackmd.io/_uploads/HkeIX5q3t.png) 直接看倒數第二頁的交易記錄,可以看到在 filp Sale Active 前都是 fail 的 ![](https://hackmd.io/_uploads/r1_cm5cnt.png) 從這些數據來看如果想偷跑,其實是會失敗的 ## 內線交易的疑慮? 這部份我們可以從兩個方向著手 1. 第一隻鑄造出來的 NFT 的 ID 2. 智能合約當中的鑄造方法是否有特殊寫法 首先 1 我們可以看 filp Sale Active 完的第一筆交易,他的 id 是 10,而下一筆是11 ![](https://hackmd.io/_uploads/BkoLNc52K.png) ![](https://hackmd.io/_uploads/HJa_Eqc3K.png) 從這個規律推斷他前面還有九隻,剛好跟白名單的數量相符 **接下來是第二點,也是本篇的重點XD** 看合約網址:https://etherscan.io/address/0x7169887b559f625a81144eee8ac784d1d8b4920f#code 點擊 Write Contract 可以找到鑄造方法,關鍵字搜尋 Mint 就可以看到 ![](https://hackmd.io/_uploads/rkVTKq9hY.png) 關鍵字是 MintYoloCat 可以找到兩個方法 `mintYoloCats` `auctionMintYoloCat` 第一個方法,的確有判斷狀態,如果有人偷跑是會挖失敗 ![](https://hackmd.io/_uploads/rk9wcc5hY.png) ![](https://hackmd.io/_uploads/SJn-5552F.png) 簡單講解一下上面兩張圖,首先 `require` 是一個判斷法 符合判斷才會繼續往下執行,否則就會拒絕交易 而跟下面的方法比對,可以看到 `auctionMintYoloCat` 有判斷執行的時間一定要超過`auctionStartTime` 否則就會拒絕執行,但類似的方法 `mintYoloCats` 卻少了這個判斷 所以才有出塊時間不一致的問題。這裡的寫法的確需要好好檢視 同時也證明上線前的測試還有程式碼 review 非常重要,一行千金阿 因為很重要,所以貼三次 `require(block.timestamp >= auctionStartTime, 'Auction not start');` `require(block.timestamp >= auctionStartTime, 'Auction not start');` `require(block.timestamp >= auctionStartTime, 'Auction not start');` 至於上面兩個方法裡面的判斷式大家都可以參考,目前我們是沒有在這些判斷式裡面看到內定名單的感覺 ~~## 手速再快也比不上機器人搶? 基本上機器人在這方面可以超越人類的就是兩件事 1. 暴力查詢提前找到合約 2. 產生多個智能合約代替人頭,突破每人鑄造數量的限制 ~~其他部分我們已經用上面的篇幅解釋,如何去防範了 只要合約有好好撰寫好好測試,可以防止類似的情況發生 關於如何找到合約的話 可以根據類似關鍵字`Yolo Cat`, `Yolo Dog` 搜尋開賣時間範圍附近的部屬合約方法等 但機器人可能會遇到很多問題,像是現在 Opensea 上有很多假項目 所以公開發售也不例外,Yolo Cat 這次很多假項目 也有機器人跑的快反而搶到假項目XD 而代替人頭的部份還指望各位社群大大指教~~ ~~ ## 總結 身處在幣圈這一個資訊量爆炸的爆炸中心(好饒口XD) 多懂一點,就是一種保護自己的方式 能獨立思考,鑒別爆炸的資訊量 哪些對自己有益,哪些對自己有害 不隨之起舞,不一頭熱 因為永遠都有下一個賺錢的機會 我們能做的,就是在那個時間點到來時,把自己準備好