摘要:通過閱讀Loot 智能合約,可以輕易提前計算出整個Bag 的供應量,包括稀有度。如果沒有修改智能合約中使用隨機性的方式,不要將Loot 的代碼用於新項目。 Loot 的智能合約有一個設計限制(或者說是一個安全漏洞),影響著初始代幣分配的公平性。而那些使用Loot 代碼的新項目也存在這個漏洞…
通過閱讀Loot 智能合約,可以輕易提前計算出整個Bag 的供應量,包括稀有度。
如果沒有修改智能合約中使用隨機性的方式,不要將Loot 的代碼用於新項目。
Loot 的智能合約有一個設計限制(或者說是一個安全漏洞),影響著初始代幣分配的公平性。而那些使用Loot 代碼的新項目也存在這個漏洞。
本文不是要貶低Loot 或任何相關公司,而是意在:
-
通過減少信息不對稱,營造NFT 的公平競爭環境;
-
減少程序錯誤或設計模式的繼續擴散,以防將用戶置於風險中。
Loot 是一個由8000 個代幣組成的NFT 集合,稱為Bags。 97% 的NFT 可由公眾鑄造,除了Gas 費之外沒有其他費用。
智能合約包含隨機化和渲染層、邏輯層,允許它生成對應於任何代幣ID 的SVG。
每個Bag 有8 項屬性,每一項都在智能合約上隨機生成一個分值。分值越高,物品的名稱可變性越強,物品也就更加稀有。
那麼問題出在哪裡呢?
Bag 的內容是根據其代幣ID 確定的——這意味著在最初的代幣分配之前或分配期間的任何節點,只要通過閱讀智能合約,任何人都可以輕而易舉地提前計算出整個Bag 的供應量(包括稀有度量)。
由於claim() 函數將代幣ID 作為一個參數,所以很容易從收藏品中挑選出最稀有的物品,並趕在其他人之前立即將其鑄造完成。
如果合同代碼在最初發行時是公開的,就會使得Loot 和類似的項目很容易被遊戲化。
事實上,Loot 和其大多數模仿者都把使用Etherscan 作為他們的造幣UI,這要求源代碼在Etherscan 上經過驗證。
公司已經確認,以下項目的初始發行版對上述的造幣操作是開放的。 Loot、Bloot、More Loot、n、CHAR 0……
這是個非詳盡的列表,在寫這篇文章時,我還沒有發現任何其他對此開放的項目。
最令人担忧的是,这种游戏性会导致普通用户和内行或具有技术知识的用户之间产生的结果存在显著差距。
漏洞 1
More Loot 是Loot 的創造者dhof 發布的Loot 後續產品,截至本文寫作時僅發布幾個小時,從More Loot 的鏈上數據中就可以明顯地發現這一漏洞產生的影響。
上圖顯示了More Loot Bags 可供鑄幣與實際鑄幣之間的分佈差異。它包括目前該系列中超過130 萬個Bag 的「greatness 」分數。
如果鑄幣是隨機的,我們期望這些分佈是一致的。
恰恰相反,我們可以清楚地看到,雖然絕大多數的購買是「盲目的」,但有一小部分的交易是利用合同,只對最稀有的Bag 鑄幣。
自GitHub 上公佈了稀有度排名後,這種有針對性的鑄幣活動的頻率有所增加。
然而,即使在公開的Loot Discord 中分享了這些數據後的幾個小時,有針對性的鑄幣活動仍然只佔鑄幣活動的一小部分,這表明大多數用戶都被蒙在鼓裡。
有些人可能會用More Loot 來試試水,不會太認真對待,但仍應當考慮其實際影響。
比如用戶為More Loot 鑄幣支付了大約300 萬美元Gas 費。這些鑄幣中的絕大部分是盲目的。
隨著供應上限遠遠超過100 萬個代幣,成千上萬的「特殊」代幣湧入市場,普通持有人的轉售前景非常暗淡。
漏洞2:CHAR 0
CHAR 0 是最近另一個基於Loot 的項目,從UTC 9 月3 日13:47 到UTC 9 月4 日11:56,在分發9700 個代幣的過程中,預計花費70 萬美元的Gas 費。
作為這個項目的早期礦工,產出必要的數據來識別和獲得該系列中許多最稀有的代幣,對我來說非常容易。
為了演示,我只對一個小的收藏品進行鑄幣,但沒有什麼能阻止我迅速且隱蔽地獲得前1% 絕大所數的供應。
很明顯,像我這樣有動機獲取者可以從CHAR 0 的用戶群中提取巨大的價值,並對項目的結果產生相當大的影響。
可能的解決方案
我會把這一部分劃定在比較高層次的討論上,並留有一些後續解決空間。以下是解決上述問題的幾種不同方法。
盲投
Hashmasks 普及了盲投模式,在這種模式中創作者承諾為整個系列提供一個哈希值,在銷售結束時通過鏈上隨機性對系列順序進行洗牌。
這可以創造出公平、隨機的分配,即使是創作者也不能作弊。 Hashmasks 智能合約被BAYC 和其他一些項目成功採用。
可改變盲投策略與Loot 一起使用,同時保留所有Loot SVG 由智能合約生成的屬性。
鏈上RNG
可在運行時使用鏈上隨機性使每個鑄幣的結果隨機產生。
對這種方法必須格外小心,因為鏈上隨機性的來源可能會被他人以意想不到的方式利用。
最好的方法是利用VRF,如Chainlink 的VRF,但這對某些應用來說可能過於昂貴。
未驗證的合同
一個簡單的修復方法是在最初發佈時保持智能合約代碼的私密性。在以下情況下,這種方法合理:
-
創建者的聲譽受到威脅;
-
合同不接受付款。
雖然這可以說是一種改進,但我強烈建議不要採用這種方法。
與盲投不同,這種方法沒有保護措施防止NFT 創建者作弊。無論是通過分析鑄幣輸出還是通過字節碼反編譯,合約可能會受到逆向工程的影響。
即使合同創建者是值得信任的,然而也存在不好的先例,包括合同不接受付款,要求用戶與未經驗證的合同互動。
抗Sybil 投資
最後,我有一個建議想要呼籲:使用Mirror 的數據來嘗試抗Sybil 的公平分配。
這是一個具有前瞻性的方法,我相信在未來會變得越來越有趣。
最後…
這些方法中的每一種都有取捨,有些可能是最初的Loot 團隊所考慮的。
事實是,當前版本的Loot 智能合約擴散得越多,對用戶來說情況就越糟糕。
在問題得到解決之前,這個智能合約不應該重新進行使用,至少在沒有明確溝通的情況下,鑄幣是遊戲化的,而且分配目的不是為了公平或隨機。
結尾的呼籲
所有關於社區和公平分配的討論都在於,NFT 用戶應該得到更好的待遇。
他們應該有一個公平的競爭環境,他們應該得到精心設計的、不會坑害他們的代幣發行。
毋庸置疑,Loot 已經引發了一場革命,是NFT 持續發展的一個關鍵項目。
我想強調的是,即使是在試水,NFT 開發者也要對他們的用戶負責,這包括那些從其他項目中復制粘貼代碼的開發者。
不要再吹噓那個利用你的Loot 進行抄襲的傢伙通過看YouTube 在一天之內學會了智能合約。
讓我們為用戶提供更安全的NFT 空間,新型的和高價值的智能合約應該接受審查,或者至少由經驗豐富的智能合約開發者進行代碼審查。
眾所周知的問題應該公開進行討論,讓我們改進優秀做法,並廣泛分享,確保藝術家創作安全和富有意義的NFTs 時有用武之地。
撰文:iamthetorn 翻譯:思嘉