原文標題:《Loot 分叉的集體漏洞——稀缺性有規律可循 | 鏈茶速遞》
撰文:iamthetorn
翻譯:思嘉
如果沒有修改智能合約中使用隨機性的方式,不要將 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 時有用武之地,