內容概要
如果你是WEB3加密界的新手,面對眾多概念無從入手,那么歡迎你,來對地方了!!
本文圍繞標準?ERC721協議,描述了Mint、?safeMint、?transfer等是如何實現資產管理的,并通過解讀代碼來了解它的安全性設計和以太坊數據上鏈成本構成。
目錄大綱
1.所謂NFT資產是什么?
2.Mint和safeMint的差別
3.交易時會發生什么?有哪些細節設計
4.NFT哪些數據也存儲在鏈上?
5.以太坊上存儲有多貴?
面向對象
Web3新手,有無技術背景均可:
研發——可無障礙閱讀,理解精美的合約設計
非研發——可能讀不懂列舉的代碼,但能體會標準協議的設計思路
1.所謂NFT資產是什么?
在opensea上,可看到每個NFT都有個唯一的編號。
比如azuki系列中第4132號,在頁面的Details欄目可以看到其合約地址,ID編號,部署所在公鏈等信息,而Properties欄目則是其設定的具備各種屬性,對應的稀有度。
1.1資產在標準ERC721協議里是什么?
美聯儲古爾斯比:尚未對下一步利率行動做出決定:金色財經報道,芝加哥聯儲主席古爾斯比表示,有關美國通脹放緩的數據是個“好消息”,但現在尚未決定是否應在下次政策會議上支持暫停加息。“對于9月份的利率行動,我還沒有下定決心,”他周一說。“我們迄今還走在一條黃金路徑上,它將通往勝利,目前看這種可能性是肯定存在的”。古爾斯比指的是在不觸發衰退的情況下,通脹可以達到美聯儲目標。今年有貨幣政策投票權的古爾斯比表示,對于政策利率是否具有限制性,美聯儲必須“見機行事”。他說“在下次會議之前,我們將獲得幾個主要數據點,但看起來我們取得了很好的平衡。”[2023/7/31 16:09:37]
而咱們回顧到源代碼,會發現程序記錄了全局性的兩個字典類型的變量,通過?_owners中用數字映射地址的方式記錄每一個ID?當前對應的所有者,同時也附帶用_balances?記錄了當前所有者總計持有的NFT數量
并且由于ERC721創新性的賦予了一個ID對應地址的變量?_owners,從而與ERC20僅_balances?進行地址與余額的管理,區分出了FT與NFT的差別。
2.Mint和safeMint的差別
2.1?Mint是如何進行的
Mint?意思為鑄造,即每個NFT的創造過程,例如之前的愛死機NFT?當奈飛的NFT忘記了web2的業務安全
幣安鏈Layer2明星應用MEKE已開啟公測:據官方消息,幣安鏈Layer2明星應用MEKE已于7月31日15:00開啟公測,MEKE是一款由美國團隊創建的鏈上衍生品交易平臺,是早期就部署在幣安鏈二層網絡OpBNB的項目。MEKE有著交易處理能力強,及近似中心化永續合約交易的體驗感。參與MEKE公測可獲得MEKE空投,同時還有可能獲得opBNB空投。[2023/7/31 16:09:07]
Mint?獲取到該NFT的資產證明。
從源代碼中可以看到,Mint?主要是進行了安全判斷:
判斷1:確保轉入的不是0x00地址
判斷2:確保此交易所操作的NFTID是不存在的
最終代碼執行的操作是:
操作1:將轉入地址的_balances?所持有總數加1
操作2:將對應?NFTID?的所有者修改為轉入的地址
操作3:完成交易則發出emit?事件,可以讓鏈下監聽到這次交易的數據
中間有_beforeTokenTransfer和_afterTokenTransfer屬于虛函數,作為標準,是讓項目方可以再不修改標準協議的情況下增加一些特定的邏輯代碼用的。
2.2為何safeMint更安全
Aztec宣布將推出混合型zkRollup網絡,計劃2024年初之前上線公共測試網:5月4日消息,Aztec宣布將推出一個混合型zkRollup網絡,該網絡將繼續沿用Aztec的名字,其特點為可以在一種環境內執行公共和隱私的智能合約,這將有助于擴展開發者在該鏈上的設計選擇。
Aztec還表示,團隊目前正在完成基本合約部署,預計將在2023年第三季度之前建立本地測試網,而用戶和網絡利益相關者有望在2024年初之前訪問成熟的公共測試網。[2023/5/4 14:43:12]
safeMint意為安全的鑄造,從代碼實現中可以看到他本身也是調用了MInt但是他額外增加了_checkOnERC721Received的判斷,這點是屬于ERC165的標準,相當于在完成轉入操作后,則判斷對方地址,是否是黑洞地址是防止轉入對象為合約地址時候,其合約沒有預設置好轉出的函數,導致資產在內無法被轉走,從而造成永久損失。
2.3ERC165是如何防止資產轉入黑洞的?
設計初衷可見:https://eips.ethereum.org/EIPS/eip-165
是讓合約接口標準化的提案,在編程語法中interface是接口的意思,在其中定義的函數可以不實現僅僅放上函數名字相關參數,在程序復雜的時候,相當于目錄一般告訴別人我都有什么功能。
Spartan Capital前合伙人預測FTX后續:機構投資者失去信心,項目融資困難:11月18日消息,Spartan Capital 前合伙人 Jason Choi 昨日在推特上分享了對 FTX 后續的悲觀預測。他認為,FTX 的用戶將很難贖回資產,機構投資者將在未來幾年失去信心,加密監管也將更為嚴厲。項目融資因此非常難,將有更多項目倒閉或者發生 Rug pull。
此外,加密行業將出現大規模并購和整合,幣安將占據更多的市場份額;至少 50% 在 2021 年后進入加密領域的人才會流失。[2022/11/18 13:21:10]
但是接口的寫法各有千秋,名字定義參數類型,甚至是否存在都有不同,
所以此提案最終形成了ERC165標準,規范了接口的識別規則。
使用流程是:
STEP1?判斷是否存在?supportsInterface?函數,并且其符合165標準
STEP?2通過?supportsInterface?函數,判斷是否具有轉出NFT的函數
3.交易時會發生什么?有哪些細節?
標準協議設計有兩種轉移方式,transfer?和?transferFrom,作用于兩種場景:
transfer轉移:由用戶調用,將本消息發送的錢包所持有的NFTID轉移到指定地址
三箭資本清算人可能會強制創始人提供更多信息:金色財經消息,三箭資本(Three Arrows Capital)清算人的律師Adam Goldberg在破產聽證會上代表清算人表示,Three Arrows Capital創始人Zhu Su和Kyle Davies迄今為止就該基金的資產提供了“相當有選擇性且零碎的信息”。Adam Goldberg表示,如果沒有進一步的合作,將嘗試在破產法官協助下迫使創始人提供更多信息。(彭博社)[2022/7/29 2:45:08]
transferFrom從轉移:用某機構調用,需要用戶先授權某地址,讓其有權可轉移。
類比一下:
transfer?就是現金交易,從自己口袋里拿錢支付
transferFrom?就是掃碼扣款,由店家申請扣款,受制于用戶是否開通小額代扣權限
接下來咱們從代碼來看看,其中可能有會意想不到的細節。
3.1?transfer?是如何進行的
他會檢測當前交易的?from?方是否是此NFTID的持有者,并且限制該NFT轉入0x00地址。其次進行?from?轉出地址和?to?轉入地址的余額刷新,修改?_balances全局變量并且重新設置_owners此NFTID的所有者地址修改為to。
這里有個防護的細節會先執行_approve(address(0),tokenId);?清空歷史授權,如果沒有這一步,則資產完成了轉移,但是其NFTID的轉移授權依舊在,細思極恐:
3.2transferFrom是如何進行的
這里的交易本質調用的是_safeTransfer所以他的核心邏輯是require部分,
這的一大細節是:_msgSender()?這是openzepplin的標準庫Context.sol中的方法。
其實就是獲取當前交易的發送者地址,但這里使用了封裝版本,而不是直接使用msg.sender
是考慮到,可能存在一種交易類型“元交易”,即交易的付費gas方和交易發起方不相同的情況。
所以一些處于中間環節的,類似library的合約需要考慮這種特殊情況。
其余部分判斷是確定是否有授權記錄,易于理解,不作贅述
4.還有哪些數據可擴展存儲在鏈上?
交易的環節也看完后,其實很多新同學也頓感奇怪,原來我買的NFT只有一個ID的歸屬地址指向了我,從而達成了唯一性。那就算如此,稀有度信息放在哪里?我的NFT圖像本身在那里?
這就是涉及到ERC721的元數據拓展IERC721Metadata.sol
要放什么都可以,但是項目方往往在鏈上只存儲最基礎的ID+IPFS的地址。
咱們可以通過之前Etherscan教程方法來看看一些項目數據有什么?
Azuki上合約地址是:0xed5af388653567af2f388e6224dc7c4b3241c544
通過ReadContract可以查閱到,其元數據只存放了ipfs上的指向地址
而近期興起的Metaverse項目元宇宙土地sandbox和****Decentraland,以及去年火熱的****AxieInfinity,基本鏈上存儲元數據也只是ID+網址。
像mirror那些是專門設計低費用可進行高存儲,一個塊常規都是30M起步,大約是以太坊的1000倍。
5.以太坊上存儲有多貴?
這里是本文稍難的地方。咱們從源碼來分析鏈上存儲的成本構成以及金額換算
成本產生將有2個方面,按執行流程來看
用戶發起一筆交易,將要寫鏈上數據作為參數傳入,其大小是一筆成本
交易執行合約代碼,依據修改和使用,EVM計算消耗的gas成本。
5.1交易發起的成本
咱們可以核對下以太坊黃皮書,里對交易數據大小所消耗gas有清晰的定義
可以看到交易所附帶的參數的價格:
每筆交易都有21000GAS需要支付
為交易的每個非零字節數據或代碼支付68GAS
為交易的每個零字節數據或代碼支付4GAS
所以如果是再?Mint?的時候,登記上若干NFT屬性信息,交易的data部分會將abc等字符轉成2個十六進制表示,而每個字符為一個八位二進制,等于一個byte。所以可以約等于將data的長度除以2作為byte數。
而1kb的數據,如果都是非0的有信息量的文本信息,則等于增加是68*1000=6.8W的gas消耗。按20gwei的gas價格和2000的eth兌換美元價格,可以估算出,每上鏈1kb數據在交易發起端就要:
20*(21000+68000)*1e9/1e18*2000=?3.5美金
5.2合約存儲的成本
由于交易發起后,還有智能合約上存儲的邏輯,咱們從以太坊go源代碼中,來分析具體的消費量,代碼具體在函數內,太長了不全粘來:
func?gasSStore(evm*EVM,contract*Contract,stack*Stack,mem*Memory,memorySizeuint64)(uint64,error)
歷史上GAS消耗的估算有經過若干迭代,如果是Petersburg或者Constantinople未激活的話,則不按下面邏輯進行計算
gas消耗計算,依賴3個種數據的管理形式
從零值地址到非零值,每個存儲槽需消耗2Wgas
從非零值地址到零值地址,每個存儲槽需消耗5Kgas,但會有獎勵1.5Wgas退回
從非零到非零,每個存儲槽需消耗200gas
注意,上述每一個存儲槽算32byte,1kb存儲則是32個存儲槽。Mint?的過程是新增存儲,所以如果新增1kb的數據存儲在鏈上代價將是64Wgas,換算成金額則是:
20*(640000)*1e9/1e18*2000=?25美金
真可謂寸土寸金!
近日,比特幣一路暴跌,至6月19日跌破1.8萬美元關口,這是2020年12月以來比特幣的最低點,虛擬貨幣交易炒作風險再度成為輿論焦點.
1900/1/1 0:00:00CelsiusNetwork作為一個金融技術平臺,以一種挑戰傳統銀行模式的經濟模式進行運作,提供計息儲蓄賬戶和借貸以及數字資產和法定資產支付.
1900/1/1 0:00:00進入6月以來,加密貨幣市場的暴跌進一步確定了熊市的到來。但不同加密公司有著不同的應對之道,有的決定大舉擴張,有的只能裁員收縮應對,正如老話所言:潮水退了才知道誰在裸泳。人無遠慮,必有近憂.
1900/1/1 0:00:00有人天生為王,有人自帶光環,但無人能夠完美一生。Web3無疑是2022年少數幾個還能維持光鮮亮麗的“詞”.
1900/1/1 0:00:006月17日消息,加密借貸平臺Celsius的流動性問題導致其170萬客戶無法贖回資產,這將增加美國對該行業的監管壓力,該行業在今年的其他危機中已經處于守勢.
1900/1/1 0:00:00熊市正在破壞整個加密領域。價格嚴重下跌。主要的行業參與者正在祭壇上被焚燒祭天。加密推特上的市場情緒也感覺像是在葬禮上接受休克療法。Terra和Celsius在幾天內就被市場力量曝光并開膛破肚.
1900/1/1 0:00:00