比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > BNB價格 > Info

最流行的ERC721模板比較_ENU

Author:

Time:1900/1/1 0:00:00

除了最近的宏觀經濟事件導致市場略微看跌外,我認為我們可以確信我們仍處于NFT牛市的中間。

在這輪牛市中,每周都有數百個項目推出,其中大部分都是類似的智能合約。由于在這個領域幾乎所有的東西都是開源的,因此很容易實施被證明有效的解決方案。

然而,這導致項目復制粘貼當前流行的少數NFT智能合約模板,而沒有真正理解每個實施中存在的不同的優缺點。

為了在一定程度上消除這種混亂,有必要研究一下最流行的模板,檢查每種模板的優缺點,并嘗試得出一些關于不同類型項目的最佳合約的結論。

ERC721和ERC721Enumerable

NFT起源于EIP-721不可替代代幣標準提議。這個幾乎每個人都使用的提案的OG實現是由OpenZeppelin完成的。

ERC721提供的功能很快被證明是不夠的,許多項目開始采用ERC721Enumerable擴展。該擴展通過在合約中添加所有代幣ID的可枚舉性,以及檢查帳戶擁有的所有代幣ID的方法,來增強原始ERC721的功能。

然而,這就是我們開始遇到麻煩的地方。ERC721Enumerable的問題是,它做了很多不必要的事情,導致了gas成本的上升,給社區造成了數百萬美元的損失。

ERC721Enumerable可以優化讀取函數,但不利于寫入函數。

ERC721Enumerable使用了大量的冗余存儲,這不僅提高了代幣的鑄造成本,而且也提高了代幣的轉賬成本。

ERC721Enumerable.sol

美國珠寶及腕表品牌海瑞溫斯頓Harry Winston提交元宇宙商標申請:金色財經報道,根據專利律師 Mike Kondoudis 在推特上發布的信息,美國珠寶及腕表品牌海瑞溫斯頓Harry Winston已經提交了多項元宇宙商標申請,可能受此商標申請保護的產品和服務包括但不限于藝術品及其配件,以及可下載的計算機程序,包括眼鏡、服裝、頭飾、包、雨傘、錢包、皮帶、香水、鋼筆、個人收納包、珠寶、天文臺表、計時碼表、鐘表、手表和體育賽事計時設備。據悉,該公司或計劃在元宇宙中提供或銷售的相關虛擬產品或服務。[2022/12/28 22:12:28]

這些是狀態修改函數,在每次更新或轉賬發生時執行。

我們可以清楚地看到ERC721Enumerable不是一個理想的選擇,不應該再被大多數項目使用。

幸運的是,一些聰明的開發人員已經注意到了這些效率低下的問題,并設計了解決方案。

優化的ERC721Enumerable

建議大家閱讀整篇文章,熟悉解決方案,這個合約的基本前提是,它把優化的重心翻轉過來,把寫入函數的成本優化為讀取函數的成本。這很好,因為如果讀取函數在鏈下被調用,那么它們不會花費我們的錢。背后的基本原理ERC721Enumerable可以訪問以下三個函數:totalSupply、tokenByIndex和tokenofOwnerByIndex。

我們可以忍受這些函數的低效率和無限循環,因為它們幾乎總是在鏈下被調用。

這個實現首先用一個數組替換ERC721中的_balances和_owners映射。

優化的ERC721EnumerablebyChance

_mint函數更改為:

億萬富翁Mark Cuban:加密貨幣肯定有一席之地,缺少的是新的應用程序:金色財經報道,億萬富翁Mark Cuban在9月6日Vox Media舉行的2022 年年度代碼大會上表示,加密貨幣領域似乎已經失去了它的光澤和它曾經帶來的興奮。加密貨幣肯定有一席之地。缺少的是新的應用程序。就像在互聯網的早期,我們與互聯網一起航行。這一切都很無聊,對嗎?因為我們沒有看到任何新東西。而真正需要的是移動互聯網的出現,才能真正推動它向前發展。而我們現在的加密貨幣沒有這樣的機會,所以它有點無聊。DeFi和NFT可能引起會人們的一些小興趣。[2022/9/9 13:19:44]

偶然優化的ERC721

ERC721Enumerable中的視圖函數更改為:

tokenOfOwnerByIndex的循環是非常低效的,但這也無傷大雅,因為它幾乎總是在鏈下被調用,因此是免費的。

提醒一句

如上所述,上面的版本還刪除了_balances數組,從而減少了額外的存儲寫入操作。因此,balanceOf函數循環遍歷整個owners數組,以確定地址的余額。這又是一個非常低效的讀取操作,然而,與tokenOfOwnerByIndex相反,我可以想象有幾十種情況需要在鏈上檢查地址的余額。

例如,通過MetaMorphies,我們已經在開發NFT質押池,一個治理系統,其中以代幣所有權授予投票權,以及一個移動增強現實應用程序。這個復雜系統的各個部分將檢查鏈上的余額,所以它必須是高效的。

即使你不想掛載任何其他合約,如果你的mint函數允許一個地址在鑄幣之前檢查它所擁有的代幣數量,就應該小心。對于最初的幾位礦工來說,這可能是件好事,但對于第8756位礦工來說,這將是一場災難。

MATIC市值超過Dai排名加密貨幣總市值第14位:金色財經報道,Coingecko數據顯示,Polygon(MATIC)市值超過Dai排名加密貨幣總市值第14位。目前MATIC的市值為6,581,390,082美元。Dai的市值為6,404,230,850美元。[2022/9/9 13:19:41]

當涉及到高價值的操作時,盲目地復制粘貼代碼是不可取的。一個解決方案在其作者的案例中完美地工作并不意味著它將自動應用到我們項目的特殊需求。

代理和批準

Chance建議的另一個優化是預先批準OpenSea代理注冊合約,以轉移代幣,并允許基礎合約所有者在未來可以將任何其他合約掛載到基礎合約,并在isApprovedForAll中自動為其返回為true。

這個解決方案在很多方面都存在嚴重的問題:

如果OpenSea代理注冊表被破壞了怎么辦

如果已安裝的合約受到損害怎么辦

如果基礎合約的所有者決定采取行動,并從合約中拿走所有代幣,該怎么辦

如果基礎合約所有者的錢包被盜怎么辦

實施此模式后,如果發生上述任何一種情況,攻擊者就可以從每個所有者那里獲取所有的NFT。這只會導致更多的攻擊向量和信任假設,而節省20美元的批準交易成本,卻有損失數百萬美元價值的潛在風險。

優化是一件非常好的事情,但還有更高級的東西,這是區塊鏈和加密領域的基本前提:構建無需信任的系統。

ERC721A

另一個非常聰明,而且最近非常流行的解決方案是由ChiruLabs開發的ERC721A合約。讓我們看看在這個智能合約中發生了什么。

ERC721A的基本前提是能夠以鑄造單個NFT的成本鑄造多個NFT。讓我們看看都做了哪些優化,以及合約是如何工作的。

根據開發團隊的描述,第一個優化是去除ERC721Enumerable引入的冗余存儲,類似于Chance的做法。

灰度 CFO:公司會定期評估Staking業務的發展,作為探索Staking的一部分:金色財經報道,Grayscale首席財務官Edward McGee在接受采訪時表示,截至2022年8月,公司目前沒有的任何投資進行質押,盡管我們目前沒有在我們的任何投資工具中質押資產,但我們一直在積極探索質押適用的灰度產品的可能性。PoS 協議等創新技術可能具有變革性,但也存在必須仔細評估的風險。作為我們探索的一部分,我們的團隊已經確定了在灰度產品結構中質押數字資產的一些關鍵風險和不確定性領域。

最重大的風險之一是稅務處理和責任。被認為通過像我們的一種產品這樣的投資工具從數字資產的質押中獲得任何收益的投資者可能面臨重大的稅收影響。

還有一些技術和運營風險可能導致資產損失。目前,支持灰度產品的數字資產保存在一流的離線“冷”存儲中。為了在我們的產品中安全可靠地質押數字資產,我們可能會聘請機構級組織來幫助監控和減輕新的或正在出現的風險。因此,我們會定期評估 Staking 業務的發展,作為我們探索產品 Staking 的一部分。[2022/8/15 12:26:29]

第二,第三優化的是每個批次鑄幣請求更新一次所有者的余額和代幣所有權數據。

for循環被移除,因此ERC721A兌現了它的承諾,以鑄造單個NFT的成本鑄造多個NFT。

但這引發了多個問題:合約如何存儲代幣ID和所有權數據?如何確定代幣的所有權?如何代幣轉賬?

ERC721A存儲

ERC721A利用兩個結構和兩個映射來存儲所有權數據。

Frax Finance社區發布新治理提案,提議將從Basepool中獲得的CRV和CVX全數鎖定:7月5日消息,混合算法穩定幣協議Frax Finance社區發布新治理提案,該提案提議將從Frax Basepool中獲得的CRV和CVX獎勵全數鎖定,其中所有CVX將鎖定為vlCVX;至少5%的CRV鎖定為veCRV;剩余的CRV鎖定或交易為cvxCRV,其中cvxCRV可用作投票激勵,未用于激勵的cvx CRV將用于獲得收益。此舉旨在降低CRV與CVX的拋壓,同時可以繼續為FRAX流動性池以及Basepool提供激勵。[2022/7/5 1:52:22]

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和70gwei/gas的價格下,檢查所有權和轉移ID為330的單個代幣的成本高于鑄造350個代幣。這是因為_ownershipOf中的循環從330變為0,并且每個SLOAD操作都要消耗gas。

如果我們再次鑄造350代幣,但轉移代幣ID1而不是330,則數字看起來會有很大的不同。

ERC721A的gas估算

我們會阻止任何人從我們的合約中鑄造那么多代幣。假設我們限制最大的批量大小為10個。如果有人鑄造了10個代幣,然后試圖轉移ID為9的代幣,數字是這樣的:

ERC721A的gas估算

因此,根據正在轉賬的代幣ID,檢查其所有權,gas成本可能會有很大的差異。

對于許多考慮實施該合約的項目來說,這可能會破壞交易。一方面,如果你把批量的大小限制在一個小的數量,這可以節省很多錢且是有效的。我認為大多數集合都有一個有限的批量大小,假設是10個,所以對大多數人來說,這應該不是問題。

如果不限制批處理大小,就會歸結為你是否相信你自己的客戶在代幣轉賬之前對智能合約進行了深入的思考,以及是否對你的項目進行了篡改,即單個代幣轉賬會讓他們付出巨大的代價。

如果你打算將此合約安裝到任何類型的復雜生態系統中,還必須考慮_ownershipOf函數的潛在缺陷。正如我在上面所說的,許多合約(比如質押池)會檢查代幣的余額和所有權,所以如果在鏈上調用這些函數,我們的目標應該是使它們高效。

成本比較

最后,讓我們進行幾次測試,以直觀了解每種解決方案的潛在gas成本。下面我們從每個實現中創建1、3、5和10個代幣,各5次。Custom721A是我們的ERC721A實現,CustomEnumerable是優化后的ERC721Enumerable,OZEnumerable是OpenZeppelin版本。

鑄造一些代幣的結果

這些觀察結果與我們上面討論的一致。OpenZeppelin版本在任何地方都非常昂貴且效率低下。如果你只鑄造一個代幣,Custom721A和CustomEnumerable的成本大致相同,如果你鑄造多個代幣,則Custom721A的成本幾乎保持不變,并隨著CustomEnumerable的循環大小而增加。

現在讓我們從上面的假設場景中嘗試一下:我們鑄造350個代幣,然后隨機挑選20個代幣ID,然后檢查所有權并進行轉賬(ERC721A的已知弱點)。

鑄造和代幣轉賬的結果

這與我們之前討論的是一致的。檢查所有權的成本約為ERC721A的5倍,而代幣轉賬的成本約為4倍。

我們還可以清楚地看到,批量鑄造正是ERC721A真正的亮點所在。鑄造350個代幣只需要147美元,而對于CustomEnumerable來說,同樣的操作需要11倍以上的成本。但是,在一批鑄造350個代幣是非常不現實的。

結論:用一個ERC721來統治所有?

那么,你是不是正站在十字路口,使用哪個?我可以很自信地說,這要視情況而定。

本文最重要的一點應該是,當涉及到智能合約時,你必須了解導入到代碼庫中的所有內容的來龍去脈。請不要盲目地復制-粘貼代碼,即使它來自一個非常可靠的來源,因為他們的解決方案可能不適合你正在進行的項目的特定需求。

Source:https://medium.com/coinmonks/comparison-of-the-most-popular-erc721-templates-b3614353e31e

Tags:ABLEMERENUABLimmutable幣項目American Dreambitvenus交易所排名Sable Finance

BNB價格
「數字安全」揭秘NFT的脆弱性_區塊鏈

NFT具有存儲在區塊鏈上的唯一元數據代碼,是證明數字文件所有權的一種創造性方式,由此,眾多NFT成了具有價值潛力的獨一無二的數字資產。截止2021年底,NFT市場規模已經超過400億美元.

1900/1/1 0:00:00
DeFi 正成為了新的全球化加速器_EFI

學過歷史的人可能還記得中世紀歐洲的城邦。當時,商人的商隊帶著奢侈品和遠方的消息從一個城邦到另一個城邦。正是這種生活方式使這些商人有了流動和選擇的自由.

1900/1/1 0:00:00
各方爭搶的數字藏品賽道 隱藏著交易亂象_ENS

“小度宣布進軍數字藏品NFT賽道”“芒果TV即將上線數字藏品平臺”“天下秀與新浪微博達成戰略合作,建設微博唯一數字藏品發行平臺”......近期,我們總能看到這樣的新聞,感覺無形之中.

1900/1/1 0:00:00
2022元宇宙產業發展趨勢報告:元宇宙的四大特性

《2022元宇宙產業趨勢報告》,將元宇宙發展理論與產業實際發展狀況相結合,深度解讀元宇宙產業發展的形勢,并為元宇宙產業未來發展趨勢把脈,向元宇宙企業高管、領域專家、投資者等讀者提供專業參考.

1900/1/1 0:00:00
一文讀懂NFT前世今生和交易策略_NFT

NFT是怎么誕生的? 理解NFT,我們也從NFT是怎么誕生的說起。NFT的概念是由加密貓CryptoKitties的創始人兼CTODieterShirley在2017年正式提出的.

1900/1/1 0:00:00
Cointelegraph Research 報告分析了GameFi 2021年的豐收和2022年的趨勢_GAM

CointelegraphResearch的一份新報告分析了GameFi的2021年大豐收以及未來的發展趨勢.

1900/1/1 0:00:00
ads