如何用科學家的方法搶購NFT?
原文來源:Mirror
原文來源:Mirror
一級標題
原文來源:Mirror

原文來源:Mirror
NFT購買過程一級標題
一級標題
圖片描述

一級標題
NFT購買過程詳解
圖片描述
nonce: nonce,
gasLimit: '21000',
maxFeePerGas: '300',
maxPriorityFeePerGas: '10',
to: '0x198478f870d97d62d640368d111b979d7ca3c38f',
value: '176000000000000000',
data: '0xa0712d680000000000000000000000
000000000000000000000000000000000000000002'
gasLimit圖片描述
to NFT購買過程
nonce 1、點擊Mint按鈕
value 大家登陸項目網站,Chrome上連接自己的錢包,然後點擊mint按鈕。網頁上的JavaScript代碼基於項目的mint價格,合約地址等生成raw transaction數據,主要包含以下幾個關鍵字段
data– 交易可以消耗的Gas 的最大數量。單位gwei
Function: mint(uint256 tokenQuantity)
MethodID: 0xa0712d68
[0]: 00000000000000000000000000000
00000000000000000000000000000000002
maxPriorityFeePerGas– 接收地址(這裡是NFT的合約地址,交易將執行合約代碼)
maxFeePerGas– 用於跟踪賬戶已執行的交易總數
– 從轉賬ETH 的金額(以WEI 為單位,這裡為0.176 ETH購買NFT)
– 和合約交互,調度mint函數,mint數量2個
- 作為礦工小費包含的最大gas 數量
- 願意為交易支付的最大gas 數量
2、TX簽名
網頁代碼與Metamask交互,會彈出窗口讓你確認本次交易。點擊確認後,Metamask會使用你的錢包私鑰進行簽名,以確保這個交易是你本身授權的,後續以太坊網絡會進行校驗。
4、廣播TX到以太坊網絡
圖片描述

交易TX被發送到以太坊網絡的相鄰節點,然後再相互廣播到相鄰接點。這時你的交易就可以在etherscan.io上查看到,狀態是pending狀態。
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結果可以在etherscan.io上查看到。
一級標題
Life Cycle of an Ethereum Transaction
Transaction lifecycle on the Ethereum blockchain
The Influence Factors on Ethereum Transaction Fees
8、TX狀態同步
相關狀態返回本地,可以在Metamask上查詢到。
合約是如何被執行的
簡單說我們發送的交易會被轉換成一個Message對像傳入EVM,而EVM則會根據Message生成一個Contract對像以便後續執行。基於我們轉入的Data轉為合約的input調用mint函數。
詳細看EVM介紹參考如下文檔:
一級標題
預售只是針對特定用戶才能購買,公開銷售就是大家都可以搶購。
一級標題
這裡主要需要回答兩個技術問題:
1、如何限制特定錢包才能mint?
一級標題0x6fd053bff10512d743fa36c859e49351a4920df6

白名單現在普遍使用默克爾樹來實現,簡單來說將所有白名單錢包地址作為默克爾樹的葉子節點,生成一個Root hash。在合約中只需要存儲Root hash值,在調用mint函數時網頁的JS代碼基於錢包地址生成proof(地址的上級父節點hash),合約就可以校驗該地址是否屬於白名單。

一級標題
Using Merkle Trees for NFT Whitelists
一級標題
一級標題

一級標題
銷售狀態切換科學家如何搶購NFT。
圖片描述

科學家使用程序搶購NFT,就是使用各種手段使自己的交易TX可以先於別人被礦工打包,在售罄前完成NFT mint。同時科學家都是追求完美的,最完美的結果當然是自己的TX出現在第一個滿足公開銷售狀態的區塊裡,也就是
搶Block0
圖片描述
圖片描述
兩種場景下的Block0
科學家用的手段總結大概以下三點:
1)、直接看了上面的TX交互過程,科學家的選擇肯定直接通過程序和NFT的合約進行交互。
3、批量提交交易
一級標題
2)、通過在鏈上部署自己的合約,通過私有合約和NFT合約交互。雖然私有合約需要外部TX觸發,但合約可以批量化購買,特別適合不限制mint數量的NFT。 (現在越來越多的NFT限制調用方是合約)
合約mint
一級標題

神器Flashbots
一個合約搶購的例子,YOKAI公開發售後。科學家利用私有合約,一共搶購了mint750個。詳細見TX 。
一級標題
神器Flashbots
Flashbots詳解見偉總這篇精彩介紹和官方文檔
Flashbots:如何從沒有ETH的錢包取出資產或交互合約

使用Flashbots的有幾點好處:block=140209841)可以批量打包TX一起提交,可以自主控制打包TX的先後順序。 2)Flashbots提交的TX不會出現在Txpool,出現在鏈上之後才會被大家看到。這樣就提供了TX的隱秘性,所以很多DeFi量化交易平台宣傳自己接入Flashbots。 (個人認為這只是暫時的,隨著Flashbots廣泛使用,Flashbots提交的TX還是會被監控)
3)通過Flashbots mint失敗了不會被收Gas費

項目方發送的setStatus TX在14020982時在TXpool被監聽到
Flashbots打包一級標題

然後有科學家把setStatus TX和自己的mint tx一起用flashbots打包了,發送給礦工。這里科學家把setStatus TX放到了第一,雖然它Gas低,將自己的mint tx排在後面,最終tx在984塊入鏈。
燒區塊
一級標題錢包
簡單說就是一直不停的發tx,發得多mint成功的概率就大,撞大運還可能會擠進Block0。這個方案問題在於會很消耗Gas費,屬於有錢任性的玩法。燒區塊一般考慮開始時間,每次Tx間隔,發送次數,gas費用等,這個一般都是大家根據項目時間,監控pending tx,鏈上出塊速度等考慮。
一級標題
錢包
一級標題
如何防科學家
隨著科學家搶購的出現,越來越多的項目開始用各種辦法防科學家搶購,這些方法的本質都是限制科學家直接調用合約mint,讓項目方選定的人才能mint
1、只通過白名單方式發售
項目發售全部使用白名單機制,這樣項目方通過規則篩選出認為是真正欣賞項目的人。
2、公售採用驗資抽獎方式
一級標題

如NFT公售時,提前驗證錢包需要一定金額的ETH,然後通過系統抽獎給出中獎名單。但很多項目方為了省事不願意做一個1:1的抽獎系統,最後公售名單大幅超售,最後還是大家搶購。
3、在服務端簽名驗證mint
一級標題
一級標題
NFT未來如何發展
2、京東茅台搶購,京東平台進行賬戶認證、搶購公平性保證等
原文鏈接


