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基金會推出“Ignite On Klaytn”計劃以支持DApp開發者:金色財經報道,Klaytn基金會 8 日宣布啟動“Ignite On Klaytn”計劃。IOK計劃旨在為去中心化應用程序(DApp)開發者提供更好的開發環境。通過該計劃,Klaytn將支持與Klaytn生態中的優秀合作伙伴在主網DApp服務開發所需的各個領域進行合作。具體來說,數字錢包、API節點、Game-Fi工具、營銷和社區建設、預言機、安全服務、DeFi服務、開發外包等DApp開發的基本要素都得到了實際落實。[2023/8/9 21:33:35]
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。
在理解了基礎類型的基礎上,DataStack可以由一系列Tuple實現:
Interlay創始人提議創建BRC-42標準,旨在將BRC-20代幣橋接至以太坊等外部網絡:5月12消息,Interlay創始人Alexei Zamyatin發推提議創建BRC-42標準,旨在以完全去中心化的方式將BRC-20代幣橋接至以太坊、Solana、Polkadot、Interlay等外部智能合約鏈,從而解鎖BRC-20代幣的DeFi用例,比如閃兌、借貸等等。
此前,Alexei還曾提議過創建BRC-21標準,旨在以去中心化的方式將以太坊、Solana等外部區塊鏈的代幣橋接至比特幣鏈上,BRC-42與BRC-21均作用于跨鏈領域,但方向相反。[2023/5/12 14:59:45]
總結一下,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樹樹根:
Interlay在波卡區塊鏈上推出比特幣支持的Stablecoin iBTC:8月15日消息,基于Polkadot的DeFi互操作平臺Interlay宣布推出封裝比特幣資產interBitcoin(iBTC),這是一個由比特幣支持的Stablecoin,由去中心化抵押金庫網絡支持,可1:1兌換BTC并將擴大BTC的用于DeFi、跨鏈轉移、NFT等的用途。目前,iBTC已經兼容Acala和Moonbeam,但Interlay表示已投入100萬美元加速拓展其他區塊鏈,預計很快將支持以太坊、Cosmos、Solana和Avalanche。(Cryptoslate)[2022/8/16 12:27:11]
整個執行過程可以分割成多個小過程,每個小過程(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是再次分割點的狀態。如果需要再次分割,需要滿足分割點的個數規定:
StarkWare發文介紹Layer 3擴容方案:12月22日消息,StarkWare發文介紹Layer 3擴容方案,要點如下:
-遞歸證明開辟了令人驚訝和新穎的設計選項;
-引入L3(應用特定層),在L2的基礎上遞歸構建;
-L3滿足應用的定制需求,例如超可擴展性,更好地控制技術堆棧以及隱私;
-目前StarkWare為客戶定制的L2解決方案StarkEx,將移植到L3;
-StarkNet的獨立實例也將采用L3方案。
StarkWare總結稱,L3承諾了超可擴展性、更好地控制技術堆棧以滿足各種需求和隱私,同時保持以太坊(L1)提供的安全保證。它采用的遞歸概念可以擴展到分形分層解決方案的附加層。[2021/12/22 7:56:49]
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" ); 起始狀態正確。這次分割不能超出上次分割范圍,并且最后一個狀態和上一個分割的結束狀態不一樣。
Matter Labs推出新型以太坊Layer2擴容方案zkPorter:以太坊研究小組Matter Labs宣布推出新型以太坊Layer2擴容方案zkPorter 。zkPorter是一種基于zkSNARK的新型擴容技術,通過結合zkRollup和分片技術來處理數據可用性,它能支持任意多個分片,每個分片都有自己的數據可用性策略,由分片內的智能合約定義,各分片的選擇在個人帳戶級別進行控制。Matter Labs表示,目前zkRollup能在ETH 1.0上達到3000 TPS的性能,且保守估計(取決于 ETH 2.0實施細節)在分片的ETH 2.0上至少可以處理20000TPS,但zkPorter的目標是支持數十億用戶的需求,需要進一步降低成本,提升性能。(Medium)[2020/8/3]
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執行少量指令確定狀態是否正確。
7 月 2 日,Solana Season Hackathon 亞洲賽區在 DoraHacks 開發者平臺 HackerLink 完成二次方投票,并立即進入寬限期(Grace Period).
1900/1/1 0:00:00ICP Squad是第一個使用一種稱為Engage-to-Earn的新獎勵模式的NFT游戲,玩家可以使用他們的錢包和互聯網身份來賺取被動收入.
1900/1/1 0:00:002021年,公鏈雖然沒有了2017、2018年的熱度,但是作為區塊鏈不可或缺的基礎設施,公鏈的創新和發展仍然是區塊鏈進一步爆發的底層支撐.
1900/1/1 0:00:00Moonbeam Network 是一個基于 Substrate 的智能合約鏈,可輕松構建本地可互操作的應用,兼容以太坊的EVM.
1900/1/1 0:00:00新技術凝聚到一起,力量之大,影響之深。 ——張放 這是一個新時代,新的技術,不只是帶來了新的體驗,而是開啟了一種新的文明.
1900/1/1 0:00:00摘 要:Stratos 是去中心化服務的基礎架構,如果我可以將地球比作區塊鏈生態系統,那么 Stratos 將和平流層一樣,環繞在區塊鏈生態周邊,為區塊鏈各種應用提供去中心化存儲.
1900/1/1 0:00:00