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的基本的数据类型包括:
Layer-2区块链Optimism日交易量在六个月内首次超过Arbitrum:金色财经报道,根据Dune Analytics 的数据, Layer-2 区块链 Optimism 的每日交易量在六个月内首次超过了其竞争对手 Arbitrum 。
7 月 25 日,Optimism 的交易总数为 844,290 笔,而 Arbitrum 的交易总数为 630,534 笔。这一增长可归因于 Worldcoin (WLD) 的发布,这是一家由 Chat GPT 的 Sam Altman 创立的加密人工智能公司,基于 Optimism 区块链。Optimism 的原生代币 (OP) 在过去 24 小时内上涨了 4.5%。
Optimism 的每日活跃钱包指标仍低于 Arbitrum,为 51,062 个,而 Arbitrum 为 63,893 个。[2023/7/28 16:03:11]
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。
V神:为长期可持续发展,以太坊需进行Layer2扩展、钱包安全和隐私三项转变:金色财经报道,以太坊联合创始人Vitalik Buterin在最新的博客文章中指出,以太坊要想长期可持续发展,需要经历三项主要的技术转变,分别为Layer2扩展、钱包安全和隐私。他表示,需要改进的不仅仅是协议的功能。在某些情况下,我们与以太坊交互的方式需要从根本上改变,需要对应用程序和钱包进行深刻的改变。由于以太坊之上存在多种不同的扩展解决方案,现在用户很难只有一个地址,因此有必要构建Layer2区块链的跨链解决方案。而这必须在智能合约钱包和隐私进一步发展的同时实现。[2023/6/12 21:30:26]
在理解了基础类型的基础上,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树树根:
WOOFi推出由Arbitrum和LayerZero提供支持的跨链质押:5月25日消息,WOOFi Stake 2.0 通过与 LayerZero 的跨链消息技术集成改进了该模型。现在用户可以将 WOO 押在两条新的受支持链上,包括 Ethereum 和 Optimism,但奖励将合并并可在 Arbitrum 上领取,从而简化多链用户体验。WOO 代币现在可以跨七个链进行质押,以通过 WOOFi swap费在 Arbitrum 上赚取 USDC。[2023/5/25 10:39:49]
整个执行过程可以分割成多个小过程,每个小过程(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是再次分割点的状态。如果需要再次分割,需要满足分割点的个数规定:
DeFi平台Portal与比特币侧链Mintlayer达成合作:4月29日消息,DeFi平台Portal宣布与比特币侧链Mintlayer达成合作。这一合作有望将Portal不受审查的跨链DEX功能带到Mintlayer,为基于比特币的DeFi提供新动力。此外,Mintlayer上发布的侧链资产种类增加可能会使Portal DEX为用户提供更多交易对。
据悉,Portal是基于比特币构建的自托管钱包和跨链Layer-2 DEX。Mintlayer是比特币侧链协议,旨在将去中心化金融市场带给大众。(Coinquora)[2022/4/29 2:39:27]
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" ); 起始状态正确。这次分割不能超出上次分割范围,并且最后一个状态和上一个分割的结束状态不一样。
美国SEC将举行有关比特币和ICO的投资者会议 主席Jay Clayton将出席:据CCN消息,美国证券交易委员会(SEC)将于6月13日在乔治亚州立大学举行SEC投资者会议。届时首先会举办一场市政厅活动。随后,与会者可以与美国证券交易委员会成员会面,就金融科技、共同基金、防止欺诈和加密货币的相关监管问题进行非正式讨论。SEC的全部五名委员都将出席会议,其中包括主席Jay Clayton。Clayton今年早些时候在普林斯顿大学就加密货币和ICO发表了演讲。当被问及否认为ICO具有欺诈性时,Clayton表示“绝对不是”。他希望SEC提出的监管措施能够通过剔除不良行为者,使合法项目蓬勃发展而对加密货币空间产生积极影响。[2018/5/30]
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执行少量指令确定状态是否正确。
Liquefy Labs 围绕资产代币化进行了新尝试,以 Lithium 连接 Linear 与 Convergence,通过多方位的 DeFi 组件构建资产无障碍流通的生态系统.
1900/1/1 0:00:00近期,Chia火了,火得一塌糊涂,围绕Chia的话题也层出不穷。硬盘价格飙涨、比特流创始人是Chia的创始人、Filecoin和Chia有何异同、Chia算力增长等等.
1900/1/1 0:00:00参与近期即将上线的测试或许可获得项目空投奖励。专注长尾市场资产的去中心借贷协议 Euler 宣布将于近期开启 bug 测试赏金计划,并在 2021 年第三季度正式上线 v1,参与协议试用的用户可.
1900/1/1 0:00:00就在今晚!NewB.Farm收益农场将与区块链数字资产管理服务平台Coinhub于今晚20:00做客《DeFi掘金记,一秒读懂DeFi》.
1900/1/1 0:00:00以太坊即将发生巨大的变化,我们会有Eth2.0、EIP-1559,并且会在主要的以太坊协议中越来越多地采用layer2扩展解决方案.
1900/1/1 0:00:00随着 Karura 在首次平行链竞拍中获得了第一条 Kusama 平行链,Acala 网络三部曲除了此前的测试网 Mandala.
1900/1/1 0:00:00