除了最近的宏觀經濟事件導致市場略微看跌外,我認為我們可以確信我們仍處于 NFT 牛市的中間。
在這輪牛市中,每周都有數百個項目推出,其中大部分都是類似的智能合約。由于在這個領域幾乎所有的東西都是開源的,因此很容易實施被證明有效的解決方案。
然而,這導致項目復制粘貼當前流行的少數NFT智能合約模板,而沒有真正理解每個實施中存在的不同的優缺點。
為了在一定程度上消除這種混亂,有必要研究一下最流行的模板,檢查每種模板的優缺點,并嘗試得出一些關于不同類型項目的最佳合約的結論。
NFT起源于EIP-721不可替代代幣標準提議。這個幾乎每個人都使用的提案的OG實現是由OpenZeppelin完成的。
ERC721提供的功能很快被證明是不夠的,許多項目開始采用ERC721Enumerable擴展。該擴展通過在合約中添加所有代幣ID的可枚舉性,以及檢查帳戶擁有的所有代幣ID的方法,來增強原始ERC721的功能。
然而,這就是我們開始遇到麻煩的地方。ERC721Enumerable的問題是,它做了很多不必要的事情,導致了gas成本的上升,給社區造成了數百萬美元的損失。
ERC721Enumerable可以優化讀取函數,但不利于寫入函數。
ERC721Enumerable使用了大量的冗余存儲,這不僅提高了代幣的鑄造成本,而且也提高了代幣的轉賬成本。
ERC721Enumerable.sol
美國將撤銷對SBF的非法競選捐款指控:金色財經報道,美國檢察官Damian Williams周三在給法院的一封信中寫道,根據對巴哈馬的條約義務,美國政府不打算就競選捐款指控對FTX創始人Sam Bankman-Fried(SBF)進行審判。SBF在去年10月份的庭審中面臨13項競選資金捐獻指控,SBF曾對五項指控的有效性提出異議,辯稱這些指控不屬于引渡協議的一部分,而引渡協議為他在12月返回美國鋪平了道路。政府將這些指控從去年10月份的審判中分離出來,基本上將案件一分為二。[2023/7/27 16:01:31]
這些是狀態修改函數,在每次更新或轉賬發生時執行。
我們可以清楚地看到ERC721Enumerable不是一個理想的選擇,不應該再被大多數項目使用。
幸運的是,一些聰明的開發人員已經注意到了這些效率低下的問題,并設計了解決方案。
建議大家閱讀整篇文章,熟悉解決方案,這個合約的基本前提是,它把優化的重心翻轉過來,把寫入函數的成本優化為讀取函數的成本。這很好,因為如果讀取函數在鏈下被調用 ,那么它們不會花費我們的錢。背后的基本原理ERC721Enumerable可以訪問以下三個函數:totalSupply、tokenByIndex和tokenofOwnerByIndex。
我們可以忍受這些函數的低效率和無限循環,因為它們幾乎總是在鏈下被調用。
這個實現首先用一個數組替換ERC721中的_balances和_owners映射。
優化的 ERC721Enumerable by Chance
_mint函數更改為:
Azuki創始人:Elementals會顯現出區別于Azuki的獨特品質:7月10日消息,Azuki創始人ZAGABOND.ETH再次發推談及了Azuki原始系列與Elementals系列之間的區別。ZAGABOND.ETH表示,根據原始系列來開發Elementals的traits具有一定的挑戰性,但在我們看來,在尊重原始設計的同時引入新的內容也很重要。乍一看,這兩個系列可能看起來有些相似,但隨著我們對Elementals系列的深入挖掘,我有充分的信心,它的獨特品質將會顯現而出。請記住,藝術只是token的外包裝。[2023/7/10 10:45:33]
偶然優化的 ERC721
ERC721Enumerable中的視圖函數更改為:
tokenOfOwnerByIndex的循環是非常低效的,但這也無傷大雅,因為它幾乎總是在鏈下被調用,因此是免費的。
如上所述,上面的版本還刪除了_balances數組,從而減少了額外的存儲寫入操作。因此,balanceOf函數循環遍歷整個owners數組,以確定地址的余額。這又是一個非常低效的讀取操作,然而,與tokenOfOwnerByIndex相反,我可以想象有幾十種情況需要在鏈上檢查地址的余額。
例如,通過MetaMorphies,我們已經在開發NFT質押池,一個治理系統,其中以代幣所有權授予投票權,以及一個移動增強現實應用程序。這個復雜系統的各個部分將檢查鏈上的余額,所以它必須是高效的。
即使你不想掛載任何其他合約,如果你的mint函數允許一個地址在鑄幣之前檢查它所擁有的代幣數量,就應該小心。對于最初的幾位礦工來說,這可能是件好事,但對于第8756位礦工來說,這將是一場災難。
Kraken稱其與國稅局斗爭以保護客戶免受身份盜竊和其他潛在傷害:金色財經報道,Kraken一位公司代表表示,我們與美國國稅局進行了斗爭,因為他們尋求有關美國客戶的侵入性和不必要的信息。如果這些信息被美國國稅局泄露,將使Kraken的客戶面臨身份盜竊和其他傷害,而這正是Kraken所避免的。Kraken特別表示,美國國稅局(IRS)的要求可能會暴露用戶的IP地址和銀行的詳細信息,以及用戶的凈資產、就業數據和財富來源。
雖然Kraken被迫提交在某些時期以某些門檻進行交易的用戶的身份信息,但法院拒絕了其要求Kraken透露其他KYC/AML數據的要求,包括就業信息、凈資產或財富來源。
盡管Kraken在保護用戶數據隱私方面取得了部分成功,但Kraken必須交出一些與在2016年1月1日至2020年12月31日的一年內至少交易了價值2萬美元的加密貨幣的用戶有關的身份信息。該公司還必須提供某些鏈上數據。[2023/7/4 22:17:25]
當涉及到高價值的操作時,盲目地復制粘貼代碼是不可取的。一個解決方案在其作者的案例中完美地工作并不意味著它將自動應用到我們項目的特殊需求。
Chance建議的另一個優化是預先批準OpenSea代理注冊合約,以轉移代幣,并允許基礎合約所有者在未來可以將任何其他合約掛載到基礎合約,并在isApprovedForAll中自動為其返回為true。
這個解決方案在很多方面都存在嚴重的問題:
如果Open Sea代理注冊表被破壞了怎么辦
如果已安裝的合約受到損害怎么辦
如果基礎合約的所有者決定采取行動,并從合約中拿走所有代幣,該怎么辦
如果基礎合約所有者的錢包被盜怎么辦
實施此模式后,如果發生上述任何一種情況,攻擊者就可以從每個所有者那里獲取所有的NFT。這只會導致更多的攻擊向量和信任假設,而節省20美元的批準交易成本,卻有損失數百萬美元價值的潛在風險。
Alpaca Finance擬停用Fantom上的治理金庫,將所有ALPACA橋接回BNB Chain:6月2日消息,杠桿挖礦平臺 Alpaca Finance 發推表示,由于 MultiChain 存在持續問題,將停用 Fantom 上的治理金庫,且今后 Fantom 鏈上的收入將分配給 BNB Chain 上的 xALPACA 持有者。其中 Alpaca Finance 將升級 Fantom 的治理合約,允許管理員提取鎖定的 ALPACA,然后將所有 ALPACA 橋接回 BNB Chain,并進行 Merkle 分發,使用戶可以在 BNB Chain 上領取他們的 ALPACA。此項操作將在周末開始,并且 ALPACA 代幣將在下周初可供認領。[2023/6/2 11:54:35]
優化是一件非常好的事情,但還有更高級的東西,這是區塊鏈和加密領域的基本前提:構建無需信任的系統。
另一個非常聰明,而且最近非常流行的解決方案是由Chiru Labs開發的ERC721A合約。讓我們看看在這個智能合約中發生了什么。
ERC721A的基本前提是能夠以鑄造單個 NFT的成本鑄造多個 NFT。讓我們看看都做了哪些優化,以及合約是如何工作的。
根據開發團隊的描述,第一個優化是去除ERC721Enumerable引入的冗余存儲,類似于Chance的做法。
第二,第三優化的是每個批次鑄幣請求更新一次所有者的余額和代幣所有權數據。
for循環被移除,因此ERC721A兌現了它的承諾,以鑄造單個 NFT的成本鑄造多個 NFT。
但這引發了多個問題:合約如何存儲代幣ID和所有權數據?如何確定代幣的所有權?如何代幣轉賬?
BitMEX創始人持有超500萬美元LOOKS代幣,為該項目最大個人持有者:2月8日消息,據Lookonchain監測,BitMEX創始人Arthur Hayes為LOOKS代幣最大的個人持有者,目前持有約1700萬枚LOOKS(價值約514萬美元)。據悉,Arthur Hayes在2022年8月24日至11月3日期間,花費1786枚ETH購買了1068萬枚LOOKS,均價為0.258美元。此外,Arthur Hayes還在2022年6月從FTX取出482萬枚LOOKS。[2023/2/8 11:54:59]
ERC721A利用兩個結構和兩個映射來存儲所有權數據。
ERC721A 結構
看這些名字,就可以了解其用途。TokenOwnership使用單個存儲槽來存儲關于代幣所有權的一些信息,AddressData使用單個存儲槽來存儲關于鑄幣人地址的信息。
ERC721A所采用的方法乍一看似乎是反直覺的,所以讓我們來看看在不同操作期間如何寫入和讀取存儲以達到合約的正確狀態。
假設我們是從合約中創建的第一個地址,并且我們鑄造了10個代幣。在這種情況下,會發生以下情況:
圖 1:ERC721A 中的 Mint 操作
在我們的批處理中,第一個ID是0,因此合約為了代幣ID和時間戳而使用批處理大小和tokenownership結構來配置AddressData結構。其余代幣ID的數據為空。那么我們如何確定所有權呢?這不是問題嗎?
要理解為什么不是,讓我們看看合約如何確定代幣的所有權。
圖 2:在 ERC721A 上調用 ownerOf()
讓我們假設這個操作遵循上一個鑄造10個代幣的操作。我們感興趣的是代幣ID為3的所有者,因此我們調用ownerOf(3)。ownerOf(3)]處的槽是空的,所以函數移動到前面的ID。直到找到一個具有所有權地址的代幣為止。
但是如果我將代幣ID為0的轉移到另一個地址會發生什么呢?我的所有代幣都帶有空數據嗎?在這種情況下,如何確定所有權?讓我們看看_transfer函數內部發生了什么。
圖 3:ERC721A 中的 _transfer()
當代幣轉賬時,代碼檢查下一個代幣是否設置了所有者,如果沒有,就將from地址設置為所有者。我們知道,代幣ID是在造幣時按升序分配的,因此如果一個地址鑄造了多個代幣,如果所有權數據沒有初始化,它也必須擁有下一個代幣。
當檢查ERC721A合約時,我的第一個想法是它確實為批量鑄造保持了低成本,但它在ownershipOf中有一個討厭的循環,并且每次發生代幣轉移時它都會調用ownershipOf。這似乎是一種可以反咬用戶一口的東西。
ERC721A 中的 _ownershipOf
這確實是一個合理的擔憂。為了說明這些成本會增加多少,讓我們想象一個不現實的場景,在一個交易中鑄造350個代幣,然后檢查代幣ID為330的所有權并進行轉賬。(getOwner函數是一個簡單的函數,它調用ownerOf,然后將一些內容寫入存儲,以說明任何寫入函數調用的成本)。
ERC721A 的gas估算
在2708美元/ETH和70 gwei/gas的價格下,檢查所有權和轉移ID為 330 的單個代幣的成本高于鑄造 350 個代幣。這是因為_ownershipOf中的循環從330變為0,并且每個SLOAD操作都要消耗gas。
如果我們再次鑄造350代幣,但轉移代幣ID 1 而不是 330,則數字看起來會有很大的不同。
我們會阻止任何人從我們的合約中鑄造那么多代幣。假設我們限制最大的批量大小為10個。如果有人鑄造了10個代幣,然后試圖轉移ID為9的代幣,數字是這樣的:
因此,根據正在轉賬的代幣ID,檢查其所有權,gas成本可能會有很大的差異。
對于許多考慮實施該合約的項目來說,這可能會破壞交易。一方面,如果你把批量的大小限制在一個小的數量,這可以節省很多錢且是有效的。我認為大多數集合都有一個有限的批量大小,假設是10個,所以對大多數人來說,這應該不是問題。
如果不限制批處理大小,就會歸結為你是否相信你自己的客戶在代幣轉賬之前對智能合約進行了深入的思考,以及是否對你的項目進行了篡改,即單個代幣轉賬會讓他們付出巨大的代價。
如果你打算將此合約安裝到任何類型的復雜生態系統中,還必須考慮_ownershipOf函數的潛在缺陷。正如我在上面所說的,許多合約(比如質押池)會檢查代幣的余額和所有權,所以如果在鏈上調用這些函數,我們的目標應該是使它們高效。
最后,讓我們進行幾次測試,以直觀了解每種解決方案的潛在gas成本。下面我們從每個實現中創建1、3、5和10個代幣,各5次。Custom721A是我們的ERC721A實現,CustomEnumerable是優化后的ERC721Enumerable, OZEnumerable是Open Zeppelin版本。
鑄造一些代幣的結果
這些觀察結果與我們上面討論的一致。Open Zeppelin 版本在任何地方都非常昂貴且效率低下。如果你只鑄造一個代幣,Custom721A和CustomEnumerable的成本大致相同,如果你鑄造多個代幣,則Custom721A的成本幾乎保持不變,并隨著CustomEnumerable的循環大小而增加。
現在讓我們從上面的假設場景中嘗試一下:我們鑄造350個代幣,然后隨機挑選20個代幣ID,然后檢查所有權并進行轉賬(ERC721A的已知弱點)。
鑄造和代幣轉賬的結果
這與我們之前討論的是一致的。檢查所有權的成本約為ERC721A的5倍,而代幣轉賬的成本約為4倍。
我們還可以清楚地看到,批量鑄造正是ERC721A真正的亮點所在。鑄造350個代幣只需要147美元,而對于CustomEnumerable來說,同樣的操作需要11倍以上的成本。但是,在一批鑄造350個代幣是非常不現實的。
那么,你是不是正站在十字路口,使用哪個?我可以很自信地說,這要視情況而定。
本文最重要的一點應該是,當涉及到智能合約時,你必須了解導入到代碼庫中的所有內容的來龍去脈。請不要盲目地復制-粘貼代碼,即使它來自一個非常可靠的來源,因為他們的解決方案可能不適合你正在進行的項目的特定需求。
Source:https://medium.com/coinmonks/comparison-of-the-most-popular-erc721-templates-b3614353e31e
1.探索以太坊擴容之路:哪個方案才是未來?無論你是不是區塊鏈技術方面的專家,只要你待在Crypto的世界里夠久。以太坊擴容,layer2,Rollup這些詞語對于你來說都不會陌生.
1900/1/1 0:00:00音樂行業正經歷著一場變革,而NFT則處于這場變革的最前沿,該領域融資捷報頻傳:2021年6月,音樂版權NFT平臺Opulous宣布獲得650萬美元融資;8月.
1900/1/1 0:00:00“2022元宇宙系列報告”第一輯:立方知造局重磅推出《元宇宙技術圖譜》: 數十份深度研究報告 頭部企業高管、專家一對一深度訪談 探底元宇宙六大核心技術 網羅全球1062家入局企業解密下一個二十年.
1900/1/1 0:00:00NFT 把每個人都變成一塊廣告牌,并與其現有的社交網絡結合。星球日報編者按:在 web2 的世界里,我們已經看到了品牌經濟的新模式:從通過給用戶投喂他們沉迷的內容增加廣告播發量,到通過 KOL.
1900/1/1 0:00:00原文標題:《Common pitfalls for Web3 founders》當創始人和團隊在辦公時間來到我們的辦公室時,他們通常會就非常特定于他們項目的主題征求我們的建議.
1900/1/1 0:00:002021年是數字人民幣試點快速推進的一年,在冬奧會順利應用之后,數字人民幣的試點將進一步擴大。今年兩會期間,數字人民幣再一次成為熱點話題,多位兩會代表針對數字人民幣提出建議,其中“立法”成為輿論.
1900/1/1 0:00:00