免責宣告:本文旨在傳遞更多市場資訊,不構成任何投資建議。文章僅代表作者觀點,不代表火星財經官方立場。
小編:記得關注哦
來源:iamcatcher
原文標題:《NFT 購買過程詳細分析以及科學家如何搶購 NFT》
本文基於自己近期的學習以及和群友討論總結,作為一個記錄,最後是自己對 NFT 行業現狀一點思考,剛接觸區塊鏈和以太坊程式設計難免有錯誤,歡迎大家指正和交流。
NFT 購買過程
簡單來說購買過程就是你的錢包和 NFT 合約進行互動,從你的錢包轉賬 0.176ETH 到合約,呼叫合約 mint 方法後,生成兩個 NFT 代幣,代幣轉移到你的錢包,你獲得這個 NFT。
關於 NFT 合約的內容可以參考以下文章:NFT 及 OpenSea 交易背後的技術分享—Mirror
NFT 購買過程詳解
將你從專案方的官方網站上點選 mint 按鈕,從瀏覽器到乙太網網路端到端互動過程詳細開啟:
NFT 購買過程
1、點選 Mint 按鈕
大家登陸專案網站,Chrome 上連線自己的錢包,然後點選 mint 按鈕。網頁上的 JavaScript 程式碼基於專案的 mint 價格,合約地址等生成 raw transaction 資料,主要包含以下幾個關鍵欄位
網頁程式碼與 Metamask 互動,會彈出視窗讓你確認本次交易。點選確認後,Metamask 會使用你的錢包私鑰進行簽名,以確保這個交易是你本身授權的,後續以太坊網路會進行校驗。
3、傳送 TX 到 node 驗證
交易 TX 被 Metamask 傳送到 Metamask 的以太坊 node(預設配置),node 對 TX 進行校驗,確保交易不被仿冒。
4、廣播 TX 到以太坊網路
交易 TX 被髮送到以太坊網路的相鄰節點,然後再相互廣播到相鄰接點。這時你的交易就可以在 etherscan.io 上檢視到,狀態是 pending 狀態。
5、礦工 node 接收到 TX
礦工 node 會將同步過來的 tx 都放到一個叫 Txpool/Mempool 地方,這個地方是很多事情的關鍵,需要展開來講一下:
Txpool 程式碼流程(借用以太坊原始碼分析之 txpool 的圖)
Txpool 的資料來源主要來自:
本地提交,也就是第三方應用透過呼叫本地以太坊節點的 RPC 服務所提交的交易;
遠端同步,是指透過廣播同步的形式,將其他以太坊節點的交易資料同步至本地節點;
Txpool 中分了 Queue 和 Pending 兩個佇列,首先新收到 TX 會基於規則判斷後先放到 Queue 這個佇列,然後再新增 Pending 佇列等待挖礦加入新增的塊。
主要規則如下:
1)優先處理 Gasprice 高的 TX
2)本地 TX 優先處理,過於遠端同步
3)每個節點會設定最低 Gasprice,低於這個值的遠端 TX 會被丟棄
Pending 中的 TX,被 Miner 模組獲取並驗證,用於挖礦;挖礦成功後寫進區塊並被廣播。Miner 取走交易是複製,Txpool 中的 TX 並不減少。TX 被寫進鏈後才從 Txpool 刪除。
Gas 過低的 TX,會被一直卡在 Txpool 得不到處理,需要可以提高 Gas 讓它被處理。
詳細程式碼分析可以參考死磕以太坊原始碼分析之 txpool
GasWar:發生熱門交易時,大家為了自己的 TX 可以被優先處理,爭相提升 Gas 費的場景
6、礦工出塊 TX 被打包
礦工選取 TX 後開始挖礦,再找到一個區塊的 Solution 後廣播到以太坊網路。
7、出塊被驗證
在其他礦工節點驗證後,該區塊正式上鍊,這事我們 TX 結果可以在 etherscan.io 上檢視到。
8、TX 狀態同步
相關狀態返回本地,可以在 Metamask 上查詢到。
參考文件:
Life Cycle of an Ethereum Transaction
Transaction lifecycle on the Ethereum blockchain
The Influence Factors on Ethereum Transaction Fees
合約是如何被執行的
簡單說我們傳送的交易會被轉換成一個 Message 物件傳入 EVM,而 EVM 則會根據 Message 生成一個 Contract 物件以便後續執行。基於我們轉入的 Data 轉為合約的 input 呼叫 mint 函式。
詳細看 EVM 介紹參考如下文件:
easy-evm
learnblockchain.cn
NFT 預售與公開銷售
預售只是針對特定使用者才能購買,公開銷售就是大家都可以搶購。
這裡主要需要回答兩個技術問題:
1、如何限制特定錢包才能 mint?
2、預售和公開銷售之間是如何狀態切換的?
白名單機制
白名單現在普遍使用默克爾樹來實現,簡單來說將所有白名單錢包地址作為默克爾樹的葉子節點,生成一個 Root hash。在合約中只需要儲存 Root hash 值,在呼叫 mint 函式時網頁的 JS 程式碼基於錢包地址生成 proof(地址的上級父節點 hash),合約就可以校驗該地址是否屬於白名單。
以 C01 的合約為例:
0x6fd053bff10512d743fa36c859e49351a4920df6
在預售和公開銷售時透過 SetRoot 更新 hash(C01 兩次銷售都採用白名單方式,公開銷售採取驗資抽獎的方式)
詳細原理和程式碼參考下面文章:Using Merkle Trees for NFT Whitelists
銷售狀態切換
常用兩種方式:
1)透過在合約判斷時間點,比如 2022-01-01 18:00 UTC 開始公開銷售
2)透過狀態判斷,及在合約設定狀態變數,比如以 XRC 的合約為例,判斷 Status.PublicSale 狀態,這個是呼叫合約中 SetStatus 進行設定。
科學家如何搶夠 NFT
科學家使用程式搶購 NFT,就是使用各種手段使自己的交易 TX 可以先於別人被礦工打包,在售罄前完成 NFT mint。同時科學家都是追求完美的,最完美的結果當然是自己的 TX 出現在第一個滿足公開銷售狀態的區塊裡,也就是搶 Block0。
兩種場景的 Block0 如下圖,同時做到 Block0 還可以避免後續大家搶購發生的 Gaswar,減少搶購成本。但現在越來越卷,Block0 也會發生 Gaswar,比如 XRC 公開銷售不到 200 個,進入 Block0 的科學家 TX 數>200,也有不少因為 Gas 給低了執行靠後沒有搶到。
兩種場景下的 Block0
科學家用的手段總結大概以下三點:
1、資訊獲取時延更低
類似金融量化交易,基金都是期望自己的伺服器和交易所通訊的時延更低。區塊鏈也是類似,比如 CEX 大家都會就近接入中心化交易所的伺服器。NFT mint 和 DeFi 的交易發生在以太坊網路中,大家追求的更快的以太坊 Node 或者接入大礦池的網路,更快監控到 Txpool 的 pending TX,獲取需要的資訊讓程式及時執行。
2、交易走的路徑更短
1)、直接看了上面的 TX 互動過程,科學家的選擇肯定直接透過程式和 NFT 的合約進行互動。
2)、透過在鏈上部署自己的合約,透過私有合約和 NFT 合約互動。雖然私有合約需要外部 TX 觸發,但合約可以批次化購買,特別適合不限制 mint 數量的 NFT。(現在越來越多的 NFT 限制呼叫方是合約)
3、批次提交交易
除了上面提到透過私有合約 mint 之外,如果專案限制了每個地址的 mint 個數,可以透過 Flashbots 打包多個 TX 一起提交。
合約 mint
一個合約搶購的例子,YOKAI 公開發售後。科學家利用私有合約,一共搶購了 mint750 個。詳細見 TX。
YOKAI 合約程式碼,沒有限制一個地址可以 mint 多少個,只限制一次 tx 只能 mint 2 個。所以被科學家包場了。
神器 Flashbots
Flashbots 詳解見偉總這篇精彩介紹和官方文件:Flashbots:如何從沒有 ETH 的錢包取出資產或互動合約—Mirror
使用 Flashbots 的有幾點好處:
1)可以批次打包 TX 一起提交,可以自主控制打包 TX 的先後順序。
2)Flashbots 提交的 TX 不會出現在 Txpool,出現在鏈上之後才會被大家看到。這樣就提供了 TX 的隱秘性,所以很多 DeFi 量化交易平臺宣傳自己接入 Flashbots。(個人認為這只是暫時的,隨著 Flashbots 廣泛使用,Flashbots 提交的 TX 還是會被監控)
3)透過 Flashbots mint 失敗了不會被收 Gas 費
Flashbots 搶購我們以冷兔 XRC 的公售為例:
易老闆發推說公售不會科學家公售,但結果是在 block=14020984 Block0 解決戰鬥,全部科學家包場。
專案方傳送的 setStatus TX 在 14020982 時在 TXpool 被監聽到
然後有科學家把 setStatus TX 和自己的 mint tx 一起用 flashbots 打包了,傳送給礦工。這裡科學家把 setStatus TX 放到了第一,雖然它 Gas 低,將自己的 mint tx 排在後面,最終 tx 在 984 塊入鏈。
Flashbots 打包查詢連結
燒區塊
簡單說就是一直不停的發 tx,發得多 mint 成功的機率就大,撞大運還可能會擠進 Block0。這個方案問題在於會很消耗 Gas 費,屬於有錢任性的玩法。燒區塊一般考慮開始時間,每次 Tx 間隔,傳送次數,gas 費用等,這個一般都是大家根據專案時間,監控 pending tx,鏈上出塊速度等考慮。
冷兔公售搶購時就有大量科學家使用燒區塊的方式搶購成功,可考察這個錢包
如何防科學家
隨著科學家搶購的出現,越來越多的專案開始用各種辦法防科學家搶購,這些方法的本質都是限制科學家直接呼叫合約 mint,讓專案方選定的人才能 mint
1、只通過白名單方式發售
專案發售全部使用白名單機制,這樣專案方透過規則篩選出認為是真正欣賞專案的人。
但有規則就有對策,等級+邀請人數,就出現了聊天機器人和工作室養號賣邀請人頭;創作藝術就出現淘寶找人代畫;現在發展到限時邀請進 Discord;讓大家猜謎做任務等各種玩法。
專案方是絞盡腦汁和刷白名單的工作室鬥智鬥勇,普通 NFT 玩家也被各種規則耍得團團轉。
2、公售採用驗資抽獎方式
如 NFT 公售時,提前驗證錢包需要一定金額的 ETH,然後透過系統抽獎給出中獎名單。但很多專案方為了省事不願意做一個 1:1 的抽獎系統,最後公售名單大幅超售,最後還是大家搶購。
3、在服務端簽名驗證 mint
類似最近火熱的 HAPE 的做法,公開的 NFT 合約限制只能一個私有的閉源的合約才能 mint。閉源合約後項目方後臺伺服器互動,這個方案從技術上來說還是走 web2 中心化思路和 web3 去中心化的理念好像有點衝突。
NFT 未來如何發展
肝過白名單人都覺得現在 NFT 行業很不健康,但 NFT 行業還在早期,有問題就有市場肯定會有人出來解決問題。
NFT 發售需要公開公證透明,個人覺得解決的思路還是可以借鑑現實生活的大家熟悉的兩個場景:
1、新股發售,交易所進行賬戶交易時長、驗資等門檻,然後搖號抽獎發售。
2、京東茅臺搶購,京東平臺進行賬戶認證、搶購公平性保證等
這兩個場景都是透過平臺的權威性來保證公平,但在 web3 應該會有基於區塊鏈合約的新方案來實現類似的功能,就像現在 DeFi 市場的各種交易協議,不久將來可能會出現 NFT 發售協議,提供一種公平公證透明的發售模式。具體怎麼做我還在學習思考中,也歡迎大家指導討論。
未來應該是 NFT 專案方接入一個 NFT 發射平臺,專案方更專注於藝術創作和路線圖的演進,投資者更專注於專案的內容和前景,而發射平臺透過技術解決現在 NFT 發售的各種問題。