以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > 幣安幣 > Info

觀點 | 通過 EVM 代碼默克爾化縮減見證數據大小_比特幣

Author:

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

作者:SinaMahmoodi

翻譯&校對:IANLIU&阿劍

來源:以太坊愛好者

摘要:區塊中每發生一次合約調用,無狀態客戶端都需要完整的合約代碼作為區塊見證的一部分,而傳輸合約代碼占用無狀態客戶端帶寬的比例,高居其帶寬開銷的第二位。

人們認為,代碼默克爾化方法能夠優化帶寬開銷。本文解釋了如何將代碼拆分為“塊”,默克爾化這些chunk,并只在交易需要的情況下傳遞這些chunk。實驗證明,基于目前的主網情況,我們能看到合約代碼傳輸的開銷節省了40%~60%。

巨大的無狀態區塊

代碼默克爾化的概念已經被提出好一陣子了,一開始主要用于代碼去重,但其他用途還未被很好地探索。現在它重新進入大眾視線,卻是因為另一個目的——用于降低無狀態客戶端所需要的帶寬開銷。如果你想知道無狀態客戶端為什么出現,我推薦這篇總結,或是AlexeyAkhunov的推文,里面還附上了他的實驗數據。為求簡短扼要,我不會深入整個無狀態客戶端模型的細節,僅提供相關細節的簡要總結。

在無狀態模式下,節點可以依賴其他節點來取得區塊內容并使用相關默克爾證明加以驗證,而不必自己存儲所有區塊狀態——這會給網絡帶寬帶來巨大的性能提升。AlexeyAkhunov和turbo-geth團隊一直在研究,希望能確定已經產出的主網區塊的區塊見證大小。下圖是對最近50000個區塊的測量結果:紅線追蹤每個無狀態區塊需要發送的合約代碼量。如果以太坊從當前的hexary字典樹結構轉為二進制trie,則見證數據所包含的哈希值數據大小約能減小3倍,這時候合約代碼量就成為構成見證大小的第一大頭了。

觀點:由于用戶基數低于市場預期,主要元宇宙協議表現欠佳:4月6日消息,數據顯示,三種主要元宇宙協議:Decentraland、Axie Infinity和The Sandbox的代幣今年以來都在下跌,表現明顯不如比特幣。盡管風投資本對這三款游戲都很感興趣,并且已經向元宇宙和GameFi投入了數億美元,但一些市場觀察人士表示,日活用戶(DAU)數量未能反映投資水平。

“與《堡壘之夜》、《俠盜獵車手》、《糖果傳奇》等傳統游戲不同,目前這款游戲沒有吸引玩家的自然粘性,讓玩家愿意花錢繼續玩下去,”Web3分析師DeFi Vader在2021年8月關于Axie Infinity的一份報告中寫道,“如果其中一款或幾款游戲能夠創造自然的用戶粘性,那么DAU的增長將不再主要依賴于日收益。”

根據DappRadar的數據,在過去30天里,Axie Infinity的平均日用戶數量比前一時期下降了30%,降至約107240人,The Sandbox的日用戶數量下降了29%,降至1180人,而Decentraland的日用戶數量平均減少了15%,降至978人。(CoinDesk)[2022/4/6 14:07:58]

觀點:股票交易員轉向加密貨幣或推動交易所代幣創新高:CoinDesk發文稱,新數據顯示,一些散戶股票交易員對最近包括Robinhood在內的交易平臺限制股票購買感到沮喪,他們正在將注意力轉向中心化加密貨幣交易所(CEX)和去中心化加密貨幣交易所(DEX)。這有助于推動一些交易所代幣達到新高。[2021/2/2 18:39:34]

-圖表顯示最近50000個主網區塊的無狀態區塊見證大小變化,經過窗口=128個區塊的移動平均計算-

不要發送整段代碼

我們假設,其實每筆交易只會調用部分的合約代碼,所以我們的目標就是拆分這些代碼塊,每次交易只發送需要的chunk的區塊見證。如果這種假設合理,而且每筆交易真的只用到一小部分字節碼,那么區塊見證的合約代碼部分就能大大的減小。

為了更好地理解,想象我們正在部署一份新的合約,我們需要傳遞代碼和并確定basicblock有兩種特性:

-字節碼的basicblocks-

觀點:牛市期間逢低買入可能是明智且有利可圖的交易策略:在牛市期間,比特幣為交易員提供了主要的機會,他們可以利用“逢低買入(buy the dip)”策略,以較低的價格進入頭寸,從而快速獲利。

“逢低買入”是交易員和投資者的一種流行策略,尤其是在加密貨幣領域,尤其是針對比特幣交易。隨著比特幣即將迎來另一輪牛市行情的開始,基于此前2017年的真正牛市,在當前市場條件下,逢低買入可能是非常明智且有利可圖的交易策略。

在不到一個月的時間里,比特幣價格從跌至9000美元,再反彈至近12000美元,社區認為確實存在一個持續的牛市,這使得該策略特別有效。即使是從相對較短的幾周時間和明顯的看漲趨勢來看,BTC也曾短暫下跌過幾次,然后繼續走高。如圖所示,在幾次跳水事件中,比特幣在幾個小時甚至幾分鐘內跌幅達15%,這些事件提供了以較低價格積累更多代幣的機會。當然,當人們真正看到比特幣在幾分鐘內從1.2萬美元跌至1.05萬美元下方時,克服內在恐懼并按下“購買”按鈕并不那么簡單。正如分析師Chris Dunn最近斷言,這正是成功交易者與不那么成功的交易者的區別。(Cryptopotato)[2020/8/9]

Basicblock要么從索引0開始,要么從?JUMPDEST?開始——這么做能保證每個無狀態客戶端都能安全地進行JUMPDEST分析。

聲音 | 觀點:從以往的經驗來看定于5月份的分叉也可能會對比特幣的價格產生重要影響:截至北京時間周一09:48,比特幣(Bitfinex)報10158.8美元,過去24小時漲幅為2.20%,市值逼近1844億美元;年初迄今,比特幣已經累計上漲了41.2%。對于比特幣的上漲邏輯,Oanda高級市場分析師埃德·莫亞(EdMoya)表示:“市場認為公共衛生事件的影響可能僅限于第一季度,加上對于第二階段經貿談判的樂觀情緒,促使風險資產得以廣泛上漲。”GrayscaleInvestments董事總經理邁克爾·索南辛(MichaelSonnenshein)預計,從以往的經驗來看,定于5月份的分叉也可能會對比特幣的價格產生重要影響。FundstratGlobalAdvisors分析師羅布·斯萊默(RobSluymer)預計,二季度之前,比特幣將在10,000美元至11,000美元的區間內交投。其他市值居前的加密貨幣近期同樣走高,以太坊過去5日上漲20%,年初迄今漲近78%;瑞波幣年內漲49%,比特幣現金漲121%,萊特幣漲88%。[2020/2/10]

每個basicblock都無法更改控制流。因此,我們可以確定一旦開始執行代碼,只會存在兩種情況:正確執行結束,或是gas耗盡。雖然還沒有和其他方案進行比較,我們先假設這么執行是相對更有效率的。

比特幣長期看空者觀點動搖 或支撐比特幣價格突漲:CNBC知名金融分析人士、加密貨幣堅定看空者Jim Cramer表示,銀行正在面臨來自加密貨幣資產的壓力。Cramer長期看空觀點的動搖,可能是比特幣價格19日凌晨突漲的原因之一。[2018/6/19]

出于效率考量,我們合并相鄰塊,直到每個代碼塊都至少有128字節為止。接著以第一個字節作為key,將這些合并后的代碼塊插進Trie。最后,客戶端將此Trie的根作為該合約賬戶的新記錄存儲下來。如下圖所示,記錄代碼的Trie會成為狀態樹的子樹。

-代碼默克爾化之后,會成為狀態樹的子樹。為了簡化,上圖我用了二進制樹,同時樹的路徑也不準確,不能完整表示真實的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:比特幣DES加密貨幣EST比特幣歷史價格圖表des幣開盤加密貨幣有哪幾種類型VESTX幣

幣安幣
星展銀行加入區塊鏈網絡Contour,實現貿易結算流程的數字化_CON

據外媒5月12日報道,星展銀行宣布它成為了第一家加入貿易融資區塊鏈網絡Contour的新加坡銀行,該網絡建立在R3的Corda區塊鏈基礎上.

1900/1/1 0:00:00
巴比特專欄 | 劉昌用:比特幣減半與2021牛市_比特幣

所謂比特幣減半,是指比特幣的新幣發行速度減半,從現在的每10分鐘發行12.5個,減半到6.25個,每天由新發行1800個縮減到900個。按現在的價格,減半前每天增發新幣價值約1億元.

1900/1/1 0:00:00
巴比特專欄 | 如何利用比特幣減半思維武裝你的工作和生活_比特幣

比特幣在今天完成了第三次挖礦產量減半,每個區塊的挖礦產出從最初的50BTC減到了6.25BTC。比特幣的挖礦平均10分鐘產生一個區塊,最初一個區塊可以挖到50BTC.

1900/1/1 0:00:00
減半后比特幣網絡算力降低近20%,這是暫時的嗎_比特幣

據Decrypt5月14日報道,比特幣網絡的哈希速率在減半后出現了顯著下降。但這是挖礦行業中許多人提前就預料到的事情,大多數人認為哈希速率的下降只是暫時的.

1900/1/1 0:00:00
歐洲央行稱Libra儲備可達3萬億美元,將對金融穩定構成重大風險_LIB

歐洲中央銀行本周在一份報告中表示,如果社交媒體巨頭Facebook的穩定幣Libra推出但出現問題,可能對金融穩定構成重大風險.

1900/1/1 0:00:00
比特幣返利平臺Lolli融資300萬美元,Peter Thiel旗下基金領投_比特幣

據Lolli官網5月11日消息,比特幣返利平臺Lolli宣布完成300萬美元種子輪第二輪融資,此輪融資獲得超額認購.

1900/1/1 0:00:00
ads