当前位置: 首页 > article >正文

web3基于OP_Rollup的L2扩容方案-Arbitrum

业务模型

价值:arbitrum对于用户来说的核心价值是交易速度、更低的gas费用、欺诈证明技术保证L2层交易具备L1层的安全性。

L2层的网络具备兼容L1层所有应用的特点,任何L1层的应用都可以拓展到L2层,包括普通的消息调用、治理、代币交易等。

Arbitrum整体业务流转包括三个部分:

  1. 部署启动Transaction fees (TXFEES) = L2 Gas Price (P) * Gas Limit (G)
  2. L2层交易处理
  3. L1层业务结算

项目部署启动

目前大多数项目基本遵循的是跨链中的Lock/Mint和Burn/Unlock模式。在L1上和L2上分别部署一套应用,在L1上锁定资产,在L2上进行等量铸造,或者在L2上销毁再到L1上进行解锁。通过跨链的模式完成资产在L1上和L2上的流动。

Arbitrum Fundation的ARB也是符合上述模式,但只是在L2上发行桥接到L1上使用。与跨链桥不同的是,本身Arbirum的安全性基本是与L1等价的,只是作为L1层的拓展,并不像跨链具有不同的共识或者安全性假设。因此,L2上的资产与L1上的资产是等价的,其流动不需要通过交易所,而是直接进行桥接。

Arbitrum的桥接规范中,有三类合约:

  • 资产合约(Asset),代币合约本身
  • 网关合约(Gateways),实现特定类型的跨链资产桥接
  • 路由合约(GatewayRouters),为每一种资产进行路由到指定网关合约

L1到L2之间的代币转账都是开始于L1的路由合约发起对资产的L1的网关合约的deposit调用,再由L1的网管合约发起对L2的网管合约的调用完成。反之亦然。

L1到L2L2到L1

L2层交易处理流程

基本处理流程如下:

接收交易

在L2层的交易通常是被排序器(Sequencer)接收,通常有两种方式发送交易:

  1. 客户端使用钱包链下直接发送给排序器,针对的是经典的纯L2网络的交易(如直接使用L2的原生DAPP)
  2. 通过延迟队列(Delayed Inbox),客户端通过钱包直接发送交易到L1层的延迟队列中。通常被用于通过桥deposit ETH或代币。

排序

排序主要有排序器负责

  1. 将延迟队列的交易和本地收到的L2交易排序,并预执行返回给用户一个即时的收据
  2. 推送排序好的batch到L1上,以便验证者验证,并推送给验证者交易batch

验证者(Validator)断言

验证者执行交易batch生成L2区块,并向L1发起的断言,通常的断言包含很多L2区块组成的一个摘要信息,供merkel proof验证的root,和相关挑战的执行过程证明信息

L1层业务结算

结算比较简单,和跨链交易的目的链执行过程类似。通过被确认的断言内包含的root,用户提供提款L2交易到L1交易发生的一个Merkel proof,即能够完成结算。

跨L1、L2消息

跨链消息分为两类,L1 → L2,L2 → L1,两种交易的处理方式也不一样

1、L1 → L2消息

Retryable Tickets:arbitrum上规范的发起L1到L2消息的方式,通常被用来执行L1到L2的deposit操作,其提交和执行是异步完成。同时,也能用于强制让L2执行任何消息,因为直接发给排序器的消息可能会被审查而忽略掉。

可以保证跨链消息的原子性,如果L1消息提交成功,则最终能够有很强的保证其在L2能够执行成功。

生命周期:

创建Ticket(L1上执行)

  • deposit检查目的是保证,消息在L2上执行有充足的gas(msg.value < (maxSubmissionCost + l2CallValue + gasLimit * maxFeePerGas))
  • Ticket创建成功,l2CallValue + submissionCost将会被扣除在L2层的兑换中使用

自动兑换(L2上执行)

由于消息的提交和执行是异步的,成功的Retryable Tickets并不能保证L2上一定能执行成功。当Tickets创建成功后,排序器将会尝试在L2上执行,会检查L2的账户余额是否大于maxFeePerGas * gasLimit 且 maxFeePerGas >L2Basefee(和L1的计费方式一样),可能会产生两种结果:

  • 成功,Tickets消息中的指定的L2层合约地址、方法将会被执行,剩余的费用将被退回到指定账户。
  • 失败(如突然L2的gas价格上涨,导致gas费不够),该Ticket将会被保存在排序器的内存中至少一周。然后就需要执行手动兑换。

手动兑换(L2上执行)

任何人都能够通过调用L2上的预编译合约方法ArbRetryableTx尝试手动在L2上执行Ticket未完成的执行,并且会捐赠一定的gas费用来进行下一次尝试执行。

通常,如果在7天内还是没有被执行成功,Ticket将会超时被自动丢弃,除非用户未Ticket再次付费让排序器再次为其保留7天,只要用户一直在超时前付费则Ticket能够一直保留下去

2、L2 → L1消息

这类型的消息主要用于L2到L1 withdraw,由于有L1的欺诈证明作为安全性保证,任何被定序后的不执行操作,都会被认为是作恶,很容易在挑战中被发现。只可能在定序前被排序器拒绝的情况,这种情况也可已通过向L1的延迟队列中发送交易让排序器强制执行解决。

此类型消息与L1结算消息是相同的。

预编译合约:如从L1上发起的消息是通过合约完成的。而从L2上发起向L1的提款消息,在Arbitrum中不是普通的合约,而是部署在Arbitrum上的预编译合约,完成Arbitrum系统层面的一些特定工作。

Gas费&提交费用

提交费用(submission fee):L1到L2消息的提交费,使用ETH未使用ARB。

用户支付的费用:

  • 提交到L1的calldata的存储费用,即定序时将L2交易压缩上传的费用(通过brotli-zero算法压缩),该部分钱会被发送到一个特殊地址L1PricerFundsPool上,专门用来支付L1的存储费用。
  • 使用L2网络资源的费用:包括执行、存储、其他L2层节点提供服务的费用(L2上Gas费),此部分与以太坊go-geth客户端计费一致。

计算方式为:

Transaction fees (TXFEES) = L2 Gas Price (P) * Gas Limit (G)

Gas Limit (G) = Gas used on L2 (L2G) + Extra Buffer for L1 cost (B)

Extra Buffer (B) = L1 Estimated Cost (L1C) / L2 Gas Price (P)

L1 Estimated Cost (L1C) = L1 price per byte of data (L1P) * Size of data to be posted in bytes (L1S)

其中,L1P时在L2上预估的当前L1上存储每个字节的gas价格,该值随着L1动态波动;L1S即是压缩过后的存储空间。

L2上统一收取Gas费:经过上述的两部分计算,得到一个最终的Transaction fees (TXFEES) 费用,在L2层统一结算。由于在L1层的EOA账户将会直接在L2层创建相同的地址作为L2的EOA账户。因此,结算gas费也是使用相同的EOA地址,使用ETH结算,并未使用ARB代币。

代币

2023年3月Arbitrum Foundation开始空投治理代币ARB,ARB代币目前只作为DAO治理使用,不作为gas计费使用。目前已经将L2主网(包括Arbitrum Rollup和AnyTrust)过渡到DAO阶段。

缺点:由于目前ARB不用来支付L1和L2的消息,虽然ARB是标准的ERC20代币,但是只是通过治理来影响Arbitrum生态,其价值很难与Arbitrum的生态绑定,只是起到了DAO的作用,

Arbitrum治理

arbitrum治理目前包含两个部分:

  • DAO治理:由ARB代币持有组成,负责对提案进行投票、执行
    在arbitrum治理中对提案投票分为两个步骤:
    1. 温度检查:在提案进入到下一个阶段之前进行预投票,主要目的是检查社区对这个提案是否有兴趣(防止存在大量无效提案)只有代币持有量0.01%d的账户才具备资格投票。
    2. 链上投票:对通过温度检查的提案正式在链上创建,任何代币持有量超过5000000的账户都能够参与。提案投票通过的条件是超过50%的ARB投票。
  • 安全理事会:一群负责解决Arbitrum生态系统风险的个人,通常由Arbitrum DAO理事会选举产生,采取<9, 12>多签方案,能够在紧急情况下绕开DAO投票直接对合约进行升级。
    其中,Arbitrum DAO的成员才能具备资格竞选,且至少需要0.2%的ARB代币才有资格成为候选人

提案生命周期

排序器

目前Arbitrum官方提供的排序器依然是中心化的,但是去中心化的方案正在DAO组织的讨论当中

Tips:目前在官方提供的排序器中,优先使用FIFO的方式进行排序。因此,用户只需要支付一个basefee而不用考虑小费。


http://www.kler.cn/a/463813.html

相关文章:

  • Windows平台下如何手动安装MYSQL
  • JS基础 -- 数组 (对象 / 数组 / 类数组 / 对象数组)的遍历
  • 计算机网络 (16)数字链路层的几个共同问题
  • Git命令行的使用
  • 【AI大模型】深入GPT-2模型细节:揭秘其卓越性能的秘密
  • 大带宽服务器和普通服务器相比较的优势
  • OpenSSL 常见用法与命令输出解析
  • 【FlutterDart】构建布局(1/100)
  • flask-admin 框架下添加menu_links 菜单
  • pytorch Batch Normalization介绍
  • 我有服务器之——内网穿透
  • Kraft模式安装Kafka(含常规、容器两种安装方式)
  • 抖音短视频矩阵系统源码开发技术解析
  • Vue学习之路:从入门到实践
  • 穷举vs暴搜vs深搜vs回溯vs剪枝_全排列_子集
  • linux安装mysql80
  • Lesson 12 Self-supervised Learning for Speech and Image
  • 牛客网最新 1180 道 Java 面试题及答案整理
  • cjson系列——EXAMPLES
  • PHP-Casbin v4.0.0 发布,支持 ACL、RBAC、ABAC 等模型的访问控制框架
  • OpenCV-Python实战(12)——图像金字塔
  • 机器学习随机森林回归模型数据预处理中归一化或者标准化
  • SQL 建表语句详解
  • Vue演练场基础知识(二)表单绑定+条件渲染
  • 【2024年-12月-25日-开源社区openEuler实践记录】easybox:简化开发运维流程的开源百宝箱
  • Android Gradle JVM配置文件gradle.properties优先级查找