編者按:本文來自Unitimes,作者:SinaMahmoodi,編譯:Unitimes_David,星球日報經授權發布。摘要:無狀態客戶端需要將區塊中調用的智能合約代碼作為區塊見證的一部分進行發送。合約代碼是導致無狀態區塊帶寬開銷的第二大因素。代碼默克爾化被認為有助于降低該開銷。本文詳細解釋了我們如何將合約代碼分割成塊,默克爾化這些塊并僅傳輸交易執行所必須的塊。根據對最近主網區塊所做的實驗,我們可以發現該方法總計節約了40-60%的代碼傳輸量。無狀態區塊很大
雖然未被深入研究過,代碼默克爾化這個想法由來已久,其主要被用于代碼解耦。然而,它最近因不同用途而重獲新生,即減小無狀態客戶端的帶寬需求。如果你想知道無狀態客戶端背后的動機是什么,我建議你看看最近這篇概要或者AlexeyAkhunov的文章。我不會在本文深入模型細節,但為了完整起見,我提供了相關細節的摘要。在無狀態模型下,節點不需要存儲狀態,并依賴其它節點在區塊中打包所有必要狀態及證明這些狀態有效性的默克爾證明。這意味著和原來相比大得多的網絡帶寬。AlexeyAkhunov與turbo-geth團隊一直在做測量歷史主網區塊的區塊見證大小的實驗。下面是最近50,000個區塊的測量結果。紅線跟蹤在一個無狀態區塊中需要發送的合約代碼量,其為區塊見證大小的第二大來源。如果以太坊從當前的十六進制trie樹遷移到二進制trie樹的話,這些見證中的哈希部分將會縮減約3倍,從而使得合約代碼成為見證大小的主要來源。
鯨魚自2月底以來已經購買了超過11億枚的XRP:金色財經報道,推特用戶Ali發文稱,支持Ripple的鯨魚自2月底以來已經購買了超過11億枚XRP,價值約5.7億美金。[2023/7/9 22:26:44]
來自github的數據。圖表顯示了50000個近期主網區塊的無狀態區塊見證組成。這些值是以128個塊為窗口的移動平均值。無需發送完整代碼
直觀地,我們可以假設一個給定的交易將僅僅觸及其調用合約的部分代碼。因此,我們的目標是把代碼分割成塊并在區塊見證中發送給定交易所必須的塊。如果我們的假設是正確的而且交易確實僅使用了小部分合約字節碼,那么區塊見證中的合約代碼部分會顯著減少。為了確切地了解其原理,讓我們想象一個正在部署的新合約。我們掃描合約代碼并識別出基本塊。注意,客戶端僅需為JUMPDEST分析作一次代碼掃描,因此不會引入很高的開銷。這些基本塊有兩個特征:
BTC突破27300美元:金色財經報道,行情顯示,BTC突破27300美元,現報27300.1美元,日內漲幅達到6.13%,行情波動較大,請做好風險控制。[2023/6/7 21:21:17]
一個虛構字節碼的基本塊每個基本塊要么從索引0開始,要么從JUMPDEST開始。這是為了讓無狀態客戶端能夠安全地進行JUMPDEST分析。每個基本塊不會改變控制流。因此,我們可以確定,一旦我們開始執行一個基本塊,要么它將運行到最后,要么它將耗盡Gas。我們假定這方案會更為高效,但仍未測試其替代方案來作對比。為了提高效率,相鄰的基本塊將會合并直到每個基本塊的最小長度為128字節。然后將它們插入trie樹中,使用其第一個字節的索引作為鍵。客戶端最終將此trie樹的根存儲在記錄該合約的新創建的賬戶中。如下所示,代碼trie樹實際上成為了狀態trie樹的子樹。
數據:美聯儲11月實現縮表922.94億美元:12月5日,據美聯儲官網信息,美聯儲 11 月實現縮表 922.94 億美元,其資產總額由 8.676 萬億降至 8.584 萬億美元。[2022/12/5 21:23:51]
默克爾化的合約代碼成為了狀態trie樹的子樹。為了簡化圖表,我使用了二進制trie樹。路徑和鍵值也不太準確。讓我們通過提交調用合約的交易來進行測試。礦工執行交易并標記在執行過程中觸及的塊。當發布區塊時,礦工會納入合約賬戶狀態證明和觸及代碼塊的turbo證明。
觸及塊與驗證代碼根所需的哈希作為turbo證明進行傳輸收到該區塊后,無狀態客戶端可以驗證合約是否為狀態的一部分以及是否有著正確的屬性:余額,nonce值,狀態根和代碼根。然后,它可以根據代碼根去驗證代碼塊及其鍵值。上述信息足以讓客戶端從這些塊中重構出部分字節碼并讓其它塊留空。值得注意的是,根據我們采用的塊分割算法,客戶端知道每個塊都以JUMPDEST開始,因而可以安全地執行跳轉。
MetaMask在Dapp中啟動“Bridge Aggregator”,支持Connext、Hop、cBridge等:11月9日消息,MetaMask 在 MetaMask Portfolio dApp 中推出跨鏈橋功能“MetaMask Bridges”,可幫助用戶尋找將代幣從一個鏈移動到另一個鏈的最佳路線。目前此測試版本支持以太坊、Avalanche、BNB Chain、Polygon 網絡,用戶可進行 ETH/WETH、普通穩定幣(例如 DAI)和原生 Gas 代幣(例如 MATIC)的跨鏈,且每次跨鏈金額高達 1 萬美元。據悉,MetaMask Bridges 只使用經過團隊審查的跨鏈橋,包括 Connext、Hop、Celer cBridge、Polygon Bridge。[2022/11/9 7:23:05]
從trubo證明,我們可以重構字節碼。給定交易所不需要的塊則留空。實驗
OpenSea每日ETH交易量創2022年新低:5月18日消息,OpenSea每日ETH交易量達到自2021年12月21日以來的最低水平。[2022/5/18 3:24:12]
為了測試,我們編寫了一個原型,其通過Geth的RPC端口抓取主網區塊及初始狀態。然后,原型在這些區塊中運行交易,每當遇到新合約時,把合約分割成塊并對觸及塊進行標記。當區塊中的所有交易被處理后,原型會為這些塊生成turbo證明。我們在更新后的初始狀態下重新運行這些交易。為了檢查正確定,我們比較了使用的Gas量以及區塊的布隆過濾器。對最近的50個區塊進行處理,我們可以看到代碼量的減少在40%到60%之間。警告:這些數據雖然看上去不錯,但請記住,我們需要數萬個區塊的數據來得出有說服力的結論,而且原型正處于初始階段,因此很可能有Bug。何去何從
你可能仍記得,每個塊的最小長度是一個可配置的參數。修改該參數會對塊見證的大小有著兩種相反影響。例如減少至32字節,讓塊的粒度更細,從而減少了需要發送的代碼總量。但同時也增加了trie樹的深度,最終導致證明所需的哈希數增大。下一步將會對最小塊大小的設定進行更徹底的分析,看看是否有一個最為節約空間的值。不管最小塊大小的值,從十六進制trie樹切換為二進制trie樹會將證明所需的哈希值減少為原來的1/4,從而進一步減小塊見證的大小。對于該原型,我們選擇將代碼分割為一個個基本塊,但也存在著其它各種各樣的分割算法,有些更為簡單,有些更為復雜。最簡單的方法是把代碼分割為固定大小的塊。目前,該方案的唯一問題圍繞在PUSH數據和JUMPDEST分析之上。以此為基礎進行展開:如果我們在任意邊界分割字節碼,PUSH操作碼及未來引入的其它多字節操作碼的操作數可能會被接收到塊的客戶端誤以為是JUMPDEST(0x5b)。如下所示,一個擁有完整代碼的客戶端可以得知JUMP是無效的并停止執行。然而,一個接收到塊6和塊8但沒有接收塊7的客戶端將跳轉到位置41,從而以不同的方式對合約進行解析。我們將在后文簡要地提及能夠避免該問題并支持任意邊界的方案。為了解決這個問題,MartinHolstSwende建議在每個塊上添加一個元數據,指定頭部的多少個字節為PUSH的操作數。然后,驗證程序可以在進行JUMPDEST分析期間跳過這些字節。Alexey正探索的另一條路徑為禁止EVM中的動態跳轉,讓我們能在部署時一次過靜態地對跳轉進行分析而不是在每次代碼執行期間。AlexBeregszaszi提出使用合約控制流圖能夠更好地指引默克爾化。同時,ChristianReitweissner提出一個執行證明方案,其中默克爾化DAG是由合約的控制流圖所創建。我不能客觀地評價他在這篇文章中的思路,同時希望他能夠在未來進行更多的說明。結果或許會表明不同的分割算法在效率上僅有微不足道的提升。在這種情況下,最簡單的算法將成為最明智的選擇。好消息是,我們至少有一個在早期數據上似乎可以顯著地減少無狀態區塊中傳輸代碼量的算法。本文特地對EVM字節碼的默克爾化進行了討論,但其總體思路并不局限于EVM。事實上,其它EWASM團隊正同時對默克爾化WASM代碼進行實驗,其面臨著自身的一系列挑戰。這主要是因為WASM代碼由多個部分組成并在執行前有著嚴格的校驗,這意味著重構的字節碼必須通過校驗。請持續關注這方面的進展。致謝:非常感謝EWASM團隊的GuillaumeBallet,AlexBeregszaszi和CaseyDetrio對本文的審閱和反饋。原地址:https://medium.com/ewasm/參考鏈接:https://ethereum-magicians.org/https://ethresear.ch/https://blog.ethereum.org/https://medium.com/https://github.com/https://github.com/https://en.wikipedia.org/https://github.com/https://github.com/https://github.com/https://medium.com/
來源/LongHash4月15日,美國總統特朗普宣布將會暫停提供資金給世界衛生組織WHO,他表示在新型冠狀病疫情爆發的應對上,WHO“未能履行其基本職責”.
1900/1/1 0:00:00本文來自:哈希派,作者:LucyCheng,星球日報經授權轉發。 2012年11月28日下午三點半左右,區塊#210000被早期礦池Slushpool挖出.
1900/1/1 0:00:00北京鏈安,聚焦區塊鏈安全與數據服務,以下是基于北京鏈安ChainsMap鏈上數據監測系統,就上周數據發布的比特幣鏈上數據周報。從過去一周數據來看,鏈上各項數據與前一周相比,變化不大.
1900/1/1 0:00:00翻譯:Shirley翻譯機構:DAOSquare我們是1UP,我們是為了獎勵社區的增值貢獻而誕生的.
1900/1/1 0:00:002020年第16周區塊鏈二級市場報告2019年4月12日-2020年4月20日本期報告重點內容:本周大盤走勢:上行動能乏力.
1900/1/1 0:00:00編者按:本文來自imToken,作者:June,星球日報經授權發布。近日,全球資本市場一改3月下旬的陰霾,開啟普漲模式,并聯動數字資產市場回暖.
1900/1/1 0:00:00