比特幣行情 比特幣行情
Ctrl+D 比特幣行情
ads
首頁 > FIL幣 > Info

NBS:Layer 2:深入理解Arbitrum

Author:

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

Arbitrum是Layer2 Rollup的一種方案。和Optimism類似,狀態的終局性采用“挑戰”(challenge)機制進行保證。Optimism的挑戰方法是將某個交易完全在Layer1模擬執行,判斷交易執行后的狀態是否正確。這種方法需要在Layer1模擬EVM的執行環境,相對復雜。Arbitrum的挑戰相對輕便一些,在Layer1執行某個操作(AVM),確定該操作執行是否正確。Arbitrum介紹文檔中提到,整個挑戰需要大概500字節的數據和9w左右的gas。為了這種輕便的挑戰機制,Arbitrum實現了AVM虛擬機,并在AVM虛擬機中實現了EVM的執行。AVM虛擬機的優勢在于底層結構方便狀態證明。

Arbitrum的開發者文檔詳細介紹了Arbitrum架構和設計。對AVM以及L1/L2交互細節感興趣的小伙伴可以耐心地查看"Inside Arbitrum"章節:

https://developer.offchainlabs.com/docs/developer_quickstart

整體框架

Arbitrum的開發者文檔給出了各個模塊關系:

Arbitrum的系統主要由三部分組成(圖中的右部分,從下到上):EthBridge,AVM執行環境和ArbOS。EthBridge主要實現了inbox/outbox管理以及Rollup協議。EthBridge實現在Layer1。ArbOS在AVM虛擬機上執行EVM。簡單的說,Arbitrum在Layer2實現了AVM虛擬機,在虛擬機上再模擬EVM執行環境。用AVM再模擬EVM的原因是AVM的狀態更好表達,便于Layer1進行挑戰。

EthBridge和AVM執行環境對應的源代碼:

https://github.com/OffchainLabs/arbitrum.git

ArbOS對應的源代碼:

https://github.com/OffchainLabs/arb-os.git

這個模塊關系圖太過籠統,再細分一下:

EthBridge主要實現了三部分功能:inbox,outbox以及Rollup協議。inbox中“存放”交易信息,這些交易信息會“同步”到ArbOS并執行。outbox中“存放”從L2到L1的交易,主要是withdrawl交易。Rollup協議主要是L2的狀態保存以及挑戰。特別注意的是,Arbitrum的所有的交易都是先提交到L1,再到ArbOS執行。ArbOS除了對外的一些接口外,主要實現了EVM模擬器。整個模擬器實現在AVM之上。整個EVM模擬器采用mini語言實現,Arbitrum實現了AVM上的mini語言編譯器。簡單的說,Arbitrum定義了新的硬件(machine)和指令集,并實現了一種上層語言mini。通過mini語言,Arbitrum實現了EVM模擬器,可以執行相應交易。

AVM State

因為所有的交易都是在AVM執行,交易的執行狀態可以用AVM狀態表示。AVM相關實現的代碼在arbitrum/packages/arb-avm-cpp中。

AVM的狀態由PC,Stack,Register等狀態組成。AVM的狀態是這些狀態的hash值拼接后的hash結果。

AVM使用c++實現,AVM表示的邏輯實現在MachineStateKeys類的machineHash函數(machinestate.cpp)中。AVM的特別之處就是除了執行外,還能較方便的表達(證明)執行狀態。深入理解AVM的基本數據結構,AVM的基本的數據類型包括:

Klaytn公布2023年計劃,將通過可持續性等要素以實現大規模采用:2月27日消息,韓國互聯網巨頭 Kakao 旗下公鏈 Klaytn 宣布 2023 年計劃,其愿景是通過可持續性、可驗證性和社區三要素實現大規模采用,其中包含 6 個戰略目標和 18 個詳細舉措,重點將圍繞優先考慮生態系統的可持續性,通過透明的治理和運營確保可驗證性,以及培養強大而充滿活力的社區。

其中,可持續性舉措包括健全代幣經濟學策略、優化金庫、推出 Klaytn 社區基金和 Klaytn 基金會基金、2023 年下半年啟動無許可網絡試點、優化節點規范等;可驗證性舉措包括組建 GC 部門委員會、啟動鏈上投票、啟動季度生態系統報告等;培養社區的舉措包括開發和啟動 Klaytn 的 Oracle、開放 SDK、推出 Metaverse 套餐、啟動黑客松 KlayMakers23、啟動 Web3 社交基礎設施的 Alpha 版本等。[2023/2/27 12:32:14]

using value =     std::variant<Tuple, uint256_t, CodePointStub, HashPreImage, Buffer>; enum ValueTypes { NUM, CODEPT, HASH_PRE_IMAGE, TUPLE, BUFFER = 12, CODE_POINT_STUB = 13 };    uint256_t - 整數類型

CodePoint - 當前代碼指令表示

Tuple - 元組,由8個Value組成。元組中的某個元素依然可以是元組

Buffer - 數組,最長為2^64

HashPreImage - 固定的hash類型,hashValue = hash(value, prevHashValue)

每種數據類型除了數據表示外,還能非常方便地計算其hash值作為狀態。詳細看看CodePoint和Tuple基本數據類型。

CodePoint類型將多個操作“捆綁”在一起,每個CodePoint除了記錄當前的Operation外,還包括前一個CodePoint的hash信息。這樣所有的Operation可以串連起來,當前的CodePoint除了能表達當前的Operation外,還能明確Operation的依賴關系。CodePoint的類型定義在:packages/arb-avm-cpp/avm_values/include/avm_values/codepoint.hpp。

struct CodePoint {     Operation op;     uint256_t nextHash;     CodePoint(Operation op_, uint256_t nextHash_)         : op(op_), nextHash(nextHash_) {}     bool isError() const {         return nextHash == 0 && op == Operation{static_cast<OpCode>(0。;     } };TupleTuple類型由RawTuple實現。RawTuple是由一組value組成。Tuple限制最多8個value。

struct RawTuple {     HashPreImage cachedPreImage;     std::vector<value> data;     bool deferredHashing = true;     RawTuple() : cachedPreImage({}, 0), deferredHashing(true) {} };Tuple的類型定義在:packages/arb-avm-cpp/avm_values/include/avm_values/tuple.hpp。

Web3基金會:DOT是“協調軟件”而非證券,不會與以太坊和比特幣等Layer 1區塊鏈競爭:1月27日,Web3 基金會在社交媒體上表示,Polkadot 原生 Token DOT 是協調軟件而非證券產品,該基金會還強調將會努力遵守美國證券法以及美國證券交易委員會對數字資產的指導,以及對 Token 轉型的完整愿景得到解決,并將采取措施管理 DOT Token 分配,確保不會出現網絡被少部分實體控制問題。

此外,Web3 基金會還表示 Polkadot 不會與以太坊和比特幣等 Layer 1 區塊鏈競爭,截止目前 Polkadot 生態系統中項目和團隊數量已經超過 550 個。[2023/1/27 11:32:20]

在理解了基礎類型的基礎上,DataStack可以由一系列Tuple實現:

總結一下,AVM中的PC,Stack,Register等等的狀態都能通過hash結果表示。AVM整個狀態由這些hash值的拼接數據的hash表示。

Rollup Challenge

在提交到L1的狀態有分歧時,挑戰雙方(Asserter和Challenger)先將狀態分割,找出“分歧點”。明確分歧點后,挑戰雙方都可提供執行環境,L1執行相關操作確定之前提交的狀態是否正確。L1的挑戰處理邏輯實現在arb-bridge-eth/contracts/challenge/Challenge.sol。整個挑戰機制有超時機制保證,為了突出核心流程,簡化流程如下圖所示:

挑戰者通過initializeChallenge函數發起挑戰。接下來挑戰者(Challenger)和應戰者(Asserter)通過bisectExecution確定不可再分割的“分歧點”。在確定分歧點后,挑戰者通過oneStepProveExecution函數確定Assert之前提交的狀態是否正確。

initializeChallenge

    function initializeChallenge(         IOneStepProof[] calldata _executors,         address _resultReceiver,         bytes32 _executionHash,         uint256 _maxMessageCount,         address _asserter,         address _challenger,         uint256 _asserterTimeLeft,         uint256 _challengerTimeLeft,         IBridge _bridge     ) external override {         ...        asserter = _asserter;         challenger = _challenger;         ...         turn = Turn.Challenger;         challengeState = _executionHash;         ...     }initializeChallenge確定挑戰者和應戰者,并確定需要挑戰的狀態(存儲在challengeState)。challengeState是由一個和多個bisectionChunk狀態hash組成的merkle樹樹根:

LayerZero:愿1:1置換出FTX中280萬枚STG為6個月鎖定期的veSTG:金色財經報道,跨鏈互操作性協議LayerZero聯合創始人兼CEO Bryan Pellegrino發推稱,愿意借鑒Tron與FTX的合作形式,如果FTX愿意與我們合作,我們將幫助置換出FTX中當前持有的280萬枚STG,將280萬枚STG以1:1的形式置換為6個月鎖定期的veSTG,希望DAO和基金會對此進行支持。[2022/11/11 12:50:37]

整個執行過程可以分割成多個小過程,每個小過程(bisection)由起始和結束的gas和狀態來表示。

turn用來記錄交互順序。turn = Turn.Challenger表明在初始化挑戰后,首先由Challenger發起分歧點分割。

bisectExecution

bisectExecution挑選之前分割片段,并如可能將片段進行再次分割:

bisectExecution的函數定義如下:

    function bisectExecution(         bytes32[] calldata _merkleNodes,                                                                     uint256 _merkleRoute,                                                                               uint256 _challengedSegmentStart,                                                                     uint256 _challengedSegmentLength,                                                                   bytes32 _oldEndHash,         uint256 _gasUsedBefore,         bytes32 _assertionRest,                                                                             bytes32[] calldata _chainHashes                                                                 ) external onlyOnTurn {_chainHashes是再次分割點的狀態。如果需要再次分割,需要滿足分割點的個數規定:

Layer2隱私跨鏈協議Zecrey與YINFinance達成合作,將允許用戶進行跨鏈收益資產管理:6月22日消息,基于ZKRollup的Layer2隱私跨鏈協議Zecrey與去中心化流動性管理協議YIN Finance達成合作,將通過集成允許YIN Finance用戶實現BNB Chain、Polygon、Arbitrum等不同鏈上的收益資產管理,同時YIN Finance旗下DAO操作系統VolcanoX計劃利用Zecrey的私人支付解決方案來管理DAO系統的資產分配。

注:Zecrey是一個基于ZK Rollup的Layer2隱私跨鏈協議,可實現不同公鏈(以太坊、Near、Solana、BNBChain等)的數字資產的跨鏈聚合和管理。3月份,Zecrey完成400萬美元天使輪融資,Spartan Group與Shima Capital領投。[2022/6/22 1:24:00]

       uint256 private constant EXECUTION_BISECTION_DEGREE = 400;        require(             _chainHashes.length ==                                                                                   bisectionDegree(_challengedSegmentLength, EXECUTION_BISECTION_DEGREE) + 1,                       "CUT_COUNT"         );簡單的說,每次分割,必須分割成400份。

_oldEndHash是用來驗證狀態這次分割的分割片段是上一次分割中的某個。需要檢查分割的有效性:

        require(_chainHashes[_chainHashes.length - 1] != _oldEndHash, "SAME_END");                           require(             _chainHashes == ChallengeLib.assertionHash(_gasUsedBefore, _assertionRest),                       "segment pre-fields"                                                                             );           require(_chainHashes != UNREACHABLE_ASSERTION, "UNREACHABLE_START");                             require(             _gasUsedBefore < _challengedSegmentStart.add(_challengedSegmentLength),                             "invalid segment length"                                                                         );  起始狀態正確。這次分割不能超出上次分割范圍,并且最后一個狀態和上一個分割的結束狀態不一樣。

TokenBetter在Google Play美國區金融類榜單中排名第三:據AppBrain數據顯示,4月30日TokenBetter global在Google Play美國金融榜單中排名第3,日本金融榜單排名第21,伊朗金融榜單排名第49。

AppBrain 是一款強大的Google Play(原名‘安卓市場’)替代品。它包含有趣的特色功能,AppBrain主要針對Android應用程序提供搜尋及下載的網站,AppBrain也提供了Android應用程序及其排行。

TokenBetter成立于2018年12月,總部位于美國,一家全球性的數字貨幣國際站。TokenBetter構建區塊鏈金融市場的底層基礎設施,應用于金融行業的信息、資金和憑證交換。[2020/5/6]

        bytes32 bisectionHash =                                                                                 ChallengeLib.bisectionChunkHash(                                                                         _challengedSegmentStart,                                                                             _challengedSegmentLength,                 _chainHashes,                 _oldEndHash             );         verifySegmentProof(bisectionHash, _merkleNodes, _merkleRoute);通過merkle樹的路徑檢查確定起始狀態和結束狀態是上一次某個分割。

updateBisectionRoot(_chainHashes, _challengedSegmentStart, _challengedSegmentLength);更新細分分割對應的challengeState。

oneStepProveExecution

當不能分割后,挑戰者提供初始狀態(證明),并由L1進行相應的計算。計算的結果應該和提供的_oldEndHash不一致。不一致說明挑戰者成功證明了之前的計算結果不對。

            (uint64 gasUsed, uint256 totalMessagesRead, bytes32 memory proofFields) =                 executors[prover].executeStep(                     bridge,                     _initialMessagesRead,                     [_initialSendAcc, _initialLogAcc],                     _executionProof,                     _bufferProof                 );通過executeStep計算出正確的結束狀態。executeStep實現在packages/arb-bridge-eth/contracts/arch/OneStepProofCommon.sol中。核心是executeOp函數,針對當前的context讀取op,執行并更新狀態。感興趣的小伙伴可以自行查看。

            rootHash = ChallengeLib.bisectionChunkHash(                 _challengedSegmentStart,                 _challengedSegmentLength,                 oneStepProofExecutionBefore(                     _initialMessagesRead,                     _initialSendAcc,                     _initialLogAcc,                     _initialState,                     proofFields                 ),                 _oldEndHash             );         }         verifySegmentProof(rootHash, _merkleNodes, _merkleRoute);確定初始狀態和結束狀態是上一次挑戰狀態中的某個分割。初始狀態由提供的證明(proof)計算獲得。

            require(                 _oldEndHash !=                     oneStepProofExecutionAfter(                         _initialSendAcc,                         _initialLogAcc,                         _initialState,                         gasUsed,                         totalMessagesRead,                         proofFields                     ),                 "WRONG_END"             );確認_oldEndHash和計算獲得結束狀態不一樣。不一樣才說明之前提交的結束狀態是錯誤的。

_currentWin();計算完成后,確定勝利方。

總結:

Arbitrum是Layer2 Rollup的一種方案。采用挑戰機制確定Rollup狀態的終局性。為了引入輕便挑戰機制,Arbitrum定義了AVM,一種可以方便證明執行狀態的虛擬機,并設計了mini語言和編譯器。在AVM上模擬了EVM的執行環境,兼容EVM。挑戰時將執行過程進行400分分割,由L1執行少量指令確定狀態是否正確。

Tags:NBSBSPCHAHASHnbs幣最新消息BSPTOrlando ChainHexHash

FIL幣
ARI:介紹 Rarible 協議:用于 NFT 創新的開源跨鏈工具

今天,我們很自豪地宣布推出一套開源工具(稱為“?Rarible 協議”),以極大地簡化 NFT 項目和想法的上市流程.

1900/1/1 0:00:00
ZED:ZED RUN:NFT賽馬游戲

區塊鏈游戲原本就要即將消逝遠去,神奇的區塊鏈世界總有無數的熱情感染這個世界。Axie Infinity、SAND、YGG等重要代表游戲不僅僅重新點燃了區塊鏈游戲的熱情,還帶動了NFT板塊.

1900/1/1 0:00:00
MEV:MEV:產生、類別和發展

區塊鏈的透明度和可追溯性超過了世界上的絕大多數系統,但是在這背后仍然存在著看不見的博弈,MEV(礦工可提取價值/最大可提取價值)就是隱藏的黑暗森林。在每一筆交易背后都可能有它的身影.

1900/1/1 0:00:00
NFT:使用Coinhub玩轉OEC的NFT市場—ORG

關于Orange:Orange定位OEC鏈上的NFT全生態操作系統,支持OEC鏈上任何生態的NFT轉賬拍賣交易,目標打造成OEC鏈上的NFT龍頭平臺.

1900/1/1 0:00:00
LID:Lido:通往去信任的以太坊質押之路

2020 年 12 月 1 日,信標鏈發布,以太坊由此踏上了向 PoS (權益證明) 共識過渡的征程.

1900/1/1 0:00:00
FOX:如何領取ShapeShift去中心化治理代幣FOX空投

7 月 14 日,總部位于美國科羅拉多州的加密貨幣交易平臺 ShapeShift 宣布將解散現有公司,并轉變為去中心化治理平臺.

1900/1/1 0:00:00
ads