作者:SinaMahmoodi
翻譯&校對:IANLIU&阿劍
來源:以太坊愛好者
摘要:區塊中每發生一次合約調用,無狀態客戶端都需要完整的合約代碼作為區塊見證的一部分,而傳輸合約代碼占用無狀態客戶端帶寬的比例,高居其帶寬開銷的第二位。
人們認為,代碼默克爾化方法能夠優化帶寬開銷。本文解釋了如何將代碼拆分為“塊”,默克爾化這些chunk,并只在交易需要的情況下傳遞這些chunk。實驗證明,基于目前的主網情況,我們能看到合約代碼傳輸的開銷節省了40%~60%。
巨大的無狀態區塊
代碼默克爾化的概念已經被提出好一陣子了,一開始主要用于代碼去重,但其他用途還未被很好地探索。現在它重新進入大眾視線,卻是因為另一個目的——用于降低無狀態客戶端所需要的帶寬開銷。如果你想知道無狀態客戶端為什么出現,我推薦這篇總結,或是AlexeyAkhunov的推文,里面還附上了他的實驗數據。為求簡短扼要,我不會深入整個無狀態客戶端模型的細節,僅提供相關細節的簡要總結。
在無狀態模式下,節點可以依賴其他節點來取得區塊內容并使用相關默克爾證明加以驗證,而不必自己存儲所有區塊狀態——這會給網絡帶寬帶來巨大的性能提升。AlexeyAkhunov和turbo-geth團隊一直在研究,希望能確定已經產出的主網區塊的區塊見證大小。下圖是對最近50000個區塊的測量結果:紅線追蹤每個無狀態區塊需要發送的合約代碼量。如果以太坊從當前的hexary字典樹結構轉為二進制trie,則見證數據所包含的哈希值數據大小約能減小3倍,這時候合約代碼量就成為構成見證大小的第一大頭了。
觀點:Ripple的判決可能有助于Coinbase和Binance在各自的訴訟中勝訴:金色財經報道,Ripple Labs在與美國證券監管機構的分歧判決中獲勝,這一判決引起了XRP代幣持有者的歡呼,代幣價格大幅上漲,業內重量級人士稱贊這一判決可能有助于加密貨幣交易所Coinbase和Binance在各自的訴訟中勝訴。
加密貨幣投資公司Venture Coinist創始人Luke Martin指出,美SEC起訴Binance和Coinbase的核心內容是它們在其平臺上提供未注冊證券的銷售,在XRP案之后,Martin認為這將對SEC及其主席Gary Gensler造成實質性打擊,他認為這一決定對行業來說是“不可想象的利好”。支持XRP的律師John Deaton也表達了類似的觀點,他認為Coinbase是另一個贏家,而相關的幣將從中受益。同樣,加密貨幣交易所Gemini的首席執行官Tyler Winklevoss也表示,這一裁決摧毀了美SEC對Coinbase的指控。他的孿生兄弟Cameron Winklevoss稱,這一裁決是一個分水嶺,將使美SEC難以對加密貨幣行使權力。[2023/7/14 10:54:43]
觀點:FTX崩盤或引發機構投資者放棄加密領域投資:金色財經報道,越來越多機構投資者正在對FTX崩盤感到不滿,富達國際(Fidelity International)首席投資策略師Salman Ahmed表示,FTX崩盤引發了大型機構投資者對加密生態系統可行性的質疑,過去投資加密貨幣就很困難,但現在承受的壓力將會更大。
Salman Ahmed透露,富達國際在今年二月推出了針對歐洲專業投資者的比特幣交易所交易產品,現在已虧損約55%。Pinebridge Investments多資產投資組合經理Hani Redha也表示,加密貨幣很可能不會在機構資產配置中找到歸宿,曾經有一段時間,每個投資者都覺得在戰略資產配置中都應該擁有加密貨幣,但現在已完全不在討論之列。(Economic Times)[2022/11/13 12:59:15]
-圖表顯示最近50000個主網區塊的無狀態區塊見證大小變化,經過窗口=128個區塊的移動平均計算-
不要發送整段代碼
我們假設,其實每筆交易只會調用部分的合約代碼,所以我們的目標就是拆分這些代碼塊,每次交易只發送需要的chunk的區塊見證。如果這種假設合理,而且每筆交易真的只用到一小部分字節碼,那么區塊見證的合約代碼部分就能大大的減小。
觀點:美國在CBDC方面有落后的風險:Schnapper-Casteras PLLC律師事務所律師及數字貨幣項目顧問JP Schnapper-Casteras在CoinDesk發文稱,較早采用CBDC的國家可能會從先行優勢中獲益。在美國,行動太慢并維持現狀可能會剝奪新的重要財政和貨幣工具。在最壞的情況下,美國將在未來幾年陷入困境:既沒有在國家金融基礎設施上取得實質性進展,也沒有提高監管透明度或私營提供商的開放標準。關于是否加入其他國家,并公開、緊急地開始就可以補充紙幣的數字貨幣工作,美國面臨著一個迫切的決定。盡管做出決定可能很艱難,但更糟糕的是等待和落伍。[2020/10/21]
為了更好地理解,想象我們正在部署一份新的合約,我們需要傳遞代碼和并確定basicblock有兩種特性:
-字節碼的basicblocks-
Basicblock要么從索引0開始,要么從?JUMPDEST?開始——這么做能保證每個無狀態客戶端都能安全地進行JUMPDEST分析。
觀點:BTC等各類資產暴跌因投資者急于套現:從比特幣到貴金屬和歐洲股市的大跌資產拋售,因為投資者正在清算投資組合中的頭寸以籌集現金。拋售是受到各種因素的刺激,從冠狀病軌跡的不確定性及其對經濟的影響,到對美國對歐洲旅行禁令將如何打擊航空公司和石油需求的擔憂等。芝加哥High Ridge Futures金屬交易主管David Meger表示,交易員和投資者正在出售各種資產類別,這是急于套現和輕度的恐慌型舉動。(路透社)[2020/3/13]
每個basicblock都無法更改控制流。因此,我們可以確定一旦開始執行代碼,只會存在兩種情況:正確執行結束,或是gas耗盡。雖然還沒有和其他方案進行比較,我們先假設這么執行是相對更有效率的。
出于效率考量,我們合并相鄰塊,直到每個代碼塊都至少有128字節為止。接著以第一個字節作為key,將這些合并后的代碼塊插進Trie。最后,客戶端將此Trie的根作為該合約賬戶的新記錄存儲下來。如下圖所示,記錄代碼的Trie會成為狀態樹的子樹。
律師觀點:對區塊鏈項目而言,基金會并非躲避監管的金鐘罩:大成律所律師肖颯發文稱,基金會模式只是一種解決現有問題的“權宜之計”,并不是萬能鑰匙,解決不了空氣幣是不是空氣的問題。如果發幣或項目虛假等問題存在,行為人根本逃避不了法律責任,最終傷害了我國金融消費者的利益,中國法律必然會出手。采取公司制的好處是深得傳統資本市場喜愛融入傳統金融機構圈子順暢,有組織,有紀律,有底線。未來1-2年,區塊鏈應用項目或公鏈爭奪戰,還將涌現一些成熟合規的公司出來,而不是中本聰等匿名咖和躲避監管的基金會為王。[2018/6/8]
-代碼默克爾化之后,會成為狀態樹的子樹。為了簡化,上圖我用了二進制樹,同時樹的路徑也不準確,不能完整表示真實的key-
為了測試部署的合約,我們試著發起一筆調用該合約的交易。礦工會執行這筆交易,并標記執行過程中觸及的每個chunk。當要發布區塊的時候,礦工會將合約狀態的證明,以及觸及哪些代碼chunk的turboproof證明,一起打包在區塊內。
-交易所觸及的所有chunk和驗證codeRoot所需的哈希值,都會以turboproof證明的形式發送出去-
收到這個區塊后,無狀態客戶端就能驗證合約是否屬于區塊狀態的一部分,也能驗證合約的余額、nonce、狀態根、codeRoot等其他參數。這些信息足以讓客戶端從chunk中重構部分字節碼,同時清空其他不需要的chunk。因為chunk算法的設計,所以客戶端知道所有的chunk都是從?JUMPDEST?開始,因此能夠安全地進行jump操作。
-我們可以通過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
Tags:BASTURCOINROOChronoBaseAAG VentureswinnercoinProof Of Degen
貴州省人民政府關于加快區塊鏈技術應用和產業發展的意見(黔府發〔2020〕5號)各市、自治州人民政府,各縣(市、區、特區)人民政府.
1900/1/1 0:00:00北京時間12日凌晨,比特幣四年一次的產出減半完成,螞蟻礦池、SlushPool、OK礦池分別挖出了前三個區塊。加密貨幣正式來到新一次的減半時代.
1900/1/1 0:00:00來源:經濟參考報 科技是抗擊新冠肺炎疫情的重要手段。突如其來的疫情給許多行業按下“暫停鍵”的同時,也給數字經濟按下了“快進鍵”。區塊鏈技術的集成應用在新的技術革新和產業變革中起著重要作用.
1900/1/1 0:00:00撰文:潘致雄,鏈聞研究總監以太坊在誕生后遭遇的最多質疑就是性能問題,在二層網絡解決方案Plasma幾乎全面潰敗后,前沿研究領域又將眼光放在了? Rollup?技術上.
1900/1/1 0:00:00本文來源:第一財經,原題《姚前:Libra2.0與數字美元》 作者:姚前 2020年是不平凡的一年。黑天鵝事件頻發,美股多次熔斷,原油期貨價格跌至-37.63美元.
1900/1/1 0:00:00財經網·鏈上財經5月11日訊,據比特幣區塊鏈瀏覽器5月11日15點數據顯示,距離比特幣第三次減半還有10個小時16分鐘,目前比特幣區塊高度為629937,距離減半還有63塊.
1900/1/1 0:00:00