作者:SinaMahmoodi
翻譯&校對:IANLIU&阿劍
來源:以太坊愛好者
摘要:區塊中每發生一次合約調用,無狀態客戶端都需要完整的合約代碼作為區塊見證的一部分,而傳輸合約代碼占用無狀態客戶端帶寬的比例,高居其帶寬開銷的第二位。
人們認為,代碼默克爾化方法能夠優化帶寬開銷。本文解釋了如何將代碼拆分為“塊”,默克爾化這些chunk,并只在交易需要的情況下傳遞這些chunk。實驗證明,基于目前的主網情況,我們能看到合約代碼傳輸的開銷節省了40%~60%。
巨大的無狀態區塊
代碼默克爾化的概念已經被提出好一陣子了,一開始主要用于代碼去重,但其他用途還未被很好地探索。現在它重新進入大眾視線,卻是因為另一個目的——用于降低無狀態客戶端所需要的帶寬開銷。如果你想知道無狀態客戶端為什么出現,我推薦這篇總結,或是AlexeyAkhunov的推文,里面還附上了他的實驗數據。為求簡短扼要,我不會深入整個無狀態客戶端模型的細節,僅提供相關細節的簡要總結。
在無狀態模式下,節點可以依賴其他節點來取得區塊內容并使用相關默克爾證明加以驗證,而不必自己存儲所有區塊狀態——這會給網絡帶寬帶來巨大的性能提升。AlexeyAkhunov和turbo-geth團隊一直在研究,希望能確定已經產出的主網區塊的區塊見證大小。下圖是對最近50000個區塊的測量結果:紅線追蹤每個無狀態區塊需要發送的合約代碼量。如果以太坊從當前的hexary字典樹結構轉為二進制trie,則見證數據所包含的哈希值數據大小約能減小3倍,這時候合約代碼量就成為構成見證大小的第一大頭了。
觀點:BTC供應量有限應該起到對沖通脹的作用:金色財經報道,英國加密貨幣指數交易公司 Trakx 的經濟學家 Ryan Shea表示,加密貨幣不像與指數掛鉤的金邊債券或通脹保值國債那樣受到通脹保護,后者的價值會根據指定的通脹指數自動增加。但對于比特幣等供應量固定或有限的加密貨幣,它們的供應量指標與黃金的供應量指標非常相似,而黃金的供應量自然受到限制。
CoinShares研究主管James Butterfill表示,盡管比特幣很受歡迎,但它相對較新,而且有關該加密貨幣的可用價格數據仍然有限。由于比特幣的存在時間相對較短,我們不得不依賴于它作為一種資產所代表的基本概念,因此從理論上講,它的供應量有限,但以美元計價,它應該起到對沖通脹的作用。[2023/6/13 21:33:38]
-圖表顯示最近50000個主網區塊的無狀態區塊見證大小變化,經過窗口=128個區塊的移動平均計算-
不要發送整段代碼
我們假設,其實每筆交易只會調用部分的合約代碼,所以我們的目標就是拆分這些代碼塊,每次交易只發送需要的chunk的區塊見證。如果這種假設合理,而且每筆交易真的只用到一小部分字節碼,那么區塊見證的合約代碼部分就能大大的減小。
觀點:區塊鏈技術為藝術家提供了一種與觀眾聯系的強大方式:金色財經報道,電影導演、Film Squad和MetaCannes Film3電影節的聯合創始人Jordan Bayne表示,區塊鏈技術為藝術家提供了一種與觀眾聯系的強大方式。[2023/5/30 9:49:56]
為了更好地理解,想象我們正在部署一份新的合約,我們需要傳遞代碼和并確定basicblock有兩種特性:
-字節碼的basicblocks-
Basicblock要么從索引0開始,要么從?JUMPDEST?開始——這么做能保證每個無狀態客戶端都能安全地進行JUMPDEST分析。
每個basicblock都無法更改控制流。因此,我們可以確定一旦開始執行代碼,只會存在兩種情況:正確執行結束,或是gas耗盡。雖然還沒有和其他方案進行比較,我們先假設這么執行是相對更有效率的。
出于效率考量,我們合并相鄰塊,直到每個代碼塊都至少有128字節為止。接著以第一個字節作為key,將這些合并后的代碼塊插進Trie。最后,客戶端將此Trie的根作為該合約賬戶的新記錄存儲下來。如下圖所示,記錄代碼的Trie會成為狀態樹的子樹。
觀點:比特幣耗電量與美國家用電器耗電量相差甚遠:在劍橋大學另類金融中心加密貨幣研究主管Apolline Blandin?的最新一集《On the Brink》播客中,他談到了礦工的盈利能力和比特幣網絡的能源消耗,以及它是否確實對環境產生了不利影響。Blandin指出,關于比特幣礦池及其能源消耗的觀點總是會引起兩極分化的觀點。能源消耗也已變得至關重要,并且對礦工的盈利能力和生存至關重要。Blandin還認為,“如果比特幣很費電,那么你要看看美國那些一直開著但不使用的家用電器所消耗的電量,然后您就會意識到這些設備可以為比特幣世界供電約4.6年”。(AMBCrypto)[2020/6/7]
-代碼默克爾化之后,會成為狀態樹的子樹。為了簡化,上圖我用了二進制樹,同時樹的路徑也不準確,不能完整表示真實的key-
為了測試部署的合約,我們試著發起一筆調用該合約的交易。礦工會執行這筆交易,并標記執行過程中觸及的每個chunk。當要發布區塊的時候,礦工會將合約狀態的證明,以及觸及哪些代碼chunk的turboproof證明,一起打包在區塊內。
觀點:2020年危機后比特幣將與住房市場一同迎來強勁反彈:雖然房地產市場的中期趨勢依然黯淡,但格拉納達大學和芝加哥聯邦儲備銀行發表的一篇研究論文稱,上世紀90年代末的歷史數據顯示,金融危機之后往往是房價的急劇上漲。而如果2020年危機過后,房地產以類似的方式增長,出于黃金和房地產市場之間的相關性,以及機構投資者越越來越認為比特幣是一種價值儲存手段,這些證據都表明,黃金和比特幣等避險資產可能也會隨之增長。從長期來看,房地產、黃金和比特幣的整體表現將非常強勁。(福布斯)[2020/5/25]
-交易所觸及的所有chunk和驗證codeRoot所需的哈希值,都會以turboproof證明的形式發送出去-
收到這個區塊后,無狀態客戶端就能驗證合約是否屬于區塊狀態的一部分,也能驗證合約的余額、nonce、狀態根、codeRoot等其他參數。這些信息足以讓客戶端從chunk中重構部分字節碼,同時清空其他不需要的chunk。因為chunk算法的設計,所以客戶端知道所有的chunk都是從?JUMPDEST?開始,因此能夠安全地進行jump操作。
動態 | 觀點:運用區塊鏈等技術將數據作為發現價格、評估風險、配置資源的重要平臺:1月14日消息,中國社會科學院西部發展研究中心副研究員俞林、北京交通大學經管學院教授傅少川今日聯合發文表示,推動金融機構加快研究和創新,運用區塊鏈、大數據等技術,加強對企業各類經營數據、交易數據、管理數據的分析、整合和挖掘,通過確立數字化的中小微企業金融服務變革,打造完備的數據基礎,將數據作為發現價格、評估風險、配置資源的重要平臺。(光明日報)[2020/1/14]
-我們可以通過turboproof重構字節碼;對于交易不需要的chunk則設為0-
實驗
為了驗證,我們編寫了一份測試原型,該原型可以從Geth客戶端的RPC端口獲取主網的區塊和過去的狀態,然后模擬執行交易。每當執行過程中遇到新的合約,就將合約拆分為多個chunk,并標記執行交易時觸及的chunk。當區塊中的交易全部執行完畢后,會為所觸及的chunk生成證明——turboproof。
接著重置狀態,用turboproof重構出來的代碼,替換掉原本的合約代碼,然后再次執行剛才的交易。為了檢查執行的正確性,我們比較前后兩次消耗的gas量和區塊的bloom過濾器。
對最近的50個區塊執行此過程,我們可以看到合約代碼量減少了40%~60%。
提醒:上圖的數據結果似乎令人充滿希望,但請記住,我們還需要成千上萬個區塊中的數據,才能得出令人信服的實驗結論;目前原型處于早期階段,一切結論都還為時尚早!
后續發展
你應該還記得,每個代碼塊的最小長度是可設置的參數,修改這個參數會在截然不同的兩個方面影響見證的大小。假設我們將參數設為32字節,則chunk的粒度變得更小,要傳遞的代碼量也就變得更少。但是這樣一來,Trie的深度就必須增加;換句話說,為了生成chunks的證明,我們需要進行更多次哈希運算。
所以下一步,我們將會深入分析——究竟要將區塊最小長度設為多少,才能獲得最優解。當然不論如何,只要將hexary字典樹結構二進制Trie,我們就能減少3/4的哈希運算,從而降低見證數據的大小。
在測試原型中,我們將合約代碼拆分為basicblock;而可選的代碼拆分算法當然有很多,有的簡單有的復雜。最簡單的一種就是拆分為固定大小的chunk,從目前來看,這種方法只會有push和jumpdest分析的問題。
更進一步地說,如果我們任意設置字節碼的最小值,則客戶端在收到chunk之后,可能會因為?PUSH?操作或任何多字節碼的操作,而碰上?JUMPDEST(0x5b)?報錯的情況。如下圖所示,有完整代碼的客戶端會發現這里的jump操作是非法的,因為?0x5b?屬于?PUSH1?的操作數,執行到這里應該終止。但如果客戶端只收到chunks#6和#8,而沒有收到#7,則他會跳到位置41繼續執行,就產生了對同一份合約代碼的不同解釋。后面我們會扼要地說明怎么在任意設置字節碼的情況下,避免這種錯誤。
為了解決這個問題,MartinHolstSwende建議向每個chunk添加一個元數據,該元數據記錄了有多少個chunk的首字節是push操作;然后,驗證者就能在jumpdest分析過程中跳過那些字節。Alexey正在探索的另一種方法是“不允許在EVM中進行動態跳轉操作”,這使我們只需在部署合約時做一次靜態的跳轉分析,而不需要在每次執行代碼時進行。AlexBeregszaszi建議使用合約控制流程圖,以更好地規范默克爾化流程;與之類似,ChristianReitweissner提出了一種執行證明方法,從合約的控制流程圖創建默克爾DAG。我不會在本文中評價這些想法,希望之后能披露更多信息。
最終結果可能表明,不同的chunk拆分算法之間的效率提升可以忽略不計,這么一來選擇的算法就越簡單越好。而好消息是,基于早期數據實驗,我們至少有一種算法可以顯著減少無狀態區塊中需要傳輸的代碼量。
本文著重討論如何默克爾化EVM字節碼,但總體思路并不局限于EVM。實際上,Ewasm團隊的其他成員也在嘗試默克爾化Wasm代碼,也遇到了相應的挑戰。這些挑戰主要是因為Wasm代碼由多個部分組成,并且在執行之前需要經過嚴格的驗證——這意味著重構的字節碼也必須通過驗證。
敬請期待后續更多信息!
原文鏈接:?https://medium.com/ewasm/evm-bytecode-merklization-2a8366ab0c90
本文來源:DeFi研究筆記,作者:徐勇借貸是DeFi中資金規模最大的應用。目前主要的借貸協議有MakerDAO、Compound、dYdX、bZx、Aave、Lendf.Me、DDEX、Nuo等.
1900/1/1 0:00:00從過去一周數據來看,盡管恰逢比特幣減半大事件,但是鏈上各項數據與前一周相比,并無過大的變化,各項數據整體都呈現下降狀態.
1900/1/1 0:00:00來源:哈希派 作者:LucyCheng11歲的小朋友都在干什么?上學、做作業,沒事的時候打打游戲、踢踢足球、看看動漫......但兩年前同為11歲的美國小男孩AndrewCourey除了同年齡段.
1900/1/1 0:00:00作者:羅滔 自疫情發生以來,全球經濟形勢下行,出于避險的考慮,人們對黃金呈現出更高的關注度。與此同時,比特幣的熱度也絲毫不減,由于其與黃金展現出了相似的特性,不少人將比特幣視為“數字黃金”,甚至.
1900/1/1 0:00:00作者|哈希派分析團隊 共計71,562枚BTC于2小時內從Binance轉移至未知地址,或為內部錢包整理:5月8日消息,據 AI Coin 數據顯示,共計 71.
1900/1/1 0:00:00導讀? 在被幣安收購后,CMC的交易所排名衡量標準發生變化,引發行業爭議。 摘要?? 專題:選手變裁判,CMC交易所排名惹爭議.
1900/1/1 0:00:00