首页 > 编程语言 >以太坊 layer2: optimism 源码学习(二) 提现原理

以太坊 layer2: optimism 源码学习(二) 提现原理

时间:2022-08-24 20:59:03浏览次数:89  
标签:layer2 提现 函数 主网 optimism 源码 合约 OP

作者:林冠宏 / 指尖下的幽灵。转载者,请: 务必标明出处。

掘金:https://juejin.im/user/1785262612681997

博客:http://www.cnblogs.com/linguanh/

GitHub : https://github.com/af913337456/

出版的书籍:


本次是系列文章,这是第二篇。第一篇在: 以太坊 layer2: optimism 源码学习 (一)


目录:

  • 为什么存在提现动作
  • 提现的原子性
  • 提现的调用链
  • 源码中的提现实现
  • 下一篇核心组件 Relayer 的源码实现

为什么存在提现动作?

OP 本质是个大型的 DApp,我们要使用它,就要先从以太坊的主网充值 Token 进去,充值的原理及其源码分析在第一篇文章中。

用户在 OP 里面进行了系列的交易动作后,需要把 Token 转回到主网,才能与其他的 DApp 的交互或主网转账。因此对应地,OP 提供了提现 Token 到主网的功能。

提现的原子性

虽然在 OP 中的交易都直接发生在 OP 的网络中,比如转账的地址是 OP 网络中的以太坊地址。但是所有的交易都会被同步到以太坊主网中,与 OP 的合约发生实际的主网交互。这就意味着,地址所在 OP 中 Token 余额的变化也会导致主网上的余额变化。这一点见第一篇文章中的 OP 原理介绍。

提现的调用链

用户是提现发起的对象,提现遵循下面的步骤:

  1. 用户向 OP 的 Sequencer 发起提现交易;
  2. 这笔交易是一次合约调用交易,指向 L2StanderBridger.sol 中的 withdraw 函数;
  3. withdraw 函数中会构造最后在主网合约中发起真正提现的函数数据;
  4. 交易被 OP 网络正常打包;
  5. 交易被Batch-Submitter 提交到主网 CTC 合约,走正常的挑战机制;
  6. 挑战期过后,Relayer 为此交易生成证明,调用 L1 上的 L1CrossDomainMessenger.relayMessage 函数,使之完成合约检查然后在内部调用目标合约,最终在 L1 完成 L2 交易的最终目的,用户的 Token 在 L1 地址上得到了提现;
  7. 提现闭环。

源码中的提现实现

首先是 L2 上的 withdraw 函数,如下图所示,参数细节描述在图中。要知道同个地址的私钥是一样的,意味着用户在 OP 的地址,在主网上,一样是这个私钥所拥有所有权。

withdraw 函数组装 L1 合约上的目标最终提现函数。如下图所示,留意这句重点 IL1StandardBridge.finalizeETHWithdrawal.selector,和充值流程中的 deposit.selector异曲同工的做法。

最终 Relayer 会调用到的 L1CrossDomainMessenger.relayMessage 函数,在这个函数里面,就会把前面包装的,对应到 L1StandardBridge.sol 合约中的 finalizeETHWithdrawal 函数给执行掉。实现最终的提现。如下图所示。

上图 relayMessage 函数中,_target 就是合约 L1StandardBridge.sol_message 就是被 L2StanderBriger.sol 的提现函数中包装的数据,如下:

message = abi.encodeWithSelector(
    IL1StandardBridge.finalizeETHWithdrawal.selector,
    _from,
    _to,
    _amount,
    _data
);

这个 message 就是对应 relayMessage 函数中的 _message。最终执行到 L1StandardBridge.sol 中的 finalizeETHWithdrawal 函数,其源码如下:

下一篇核心组件 Relayer 的源码实现

标签:layer2,提现,函数,主网,optimism,源码,合约,OP
From: https://www.cnblogs.com/linguanh/p/16621521.html

相关文章

  • 《Python源码剖析》PDF高清版试读
      《Python源码剖析》PDF高清版免费下载地址  内容简介  · · · · · ·作为主流的动态语言,Python不仅简单易学、移植性好,而且拥有强大丰富的库的......
  • Spring 源码学习笔记10——Spring AOP
    Spring源码学习笔记10——SpringAOP参考书籍《Spring技术内幕》SpringAOP的实现章节书有点老,但是里面一些概念还是总结比较到位源码基于Spring-aop5.3.22可能和旧......
  • LNMP架构的源码编译
    LNMP架构的源码编译一、LNMP架构的编译安装1.安装nginx服务(1)关闭防火墙[root@localhost~]#systemctlstopfirewalld[root@localhost~]#systemctldisablefirew......
  • 新字符设备驱动原理和框架源码分析
    一、分配和释放设备号动态申请设备号:/*dev:设备号--dev_tdevid;count:是要申请的数量,一般都是一个;name:是设备名字*/intalloc_chrdev_region(dev_t*dev,uns......
  • CBV源码剖析
    你自己不要修改源码除了bug很难找突破口在urls.pyurl(r'^login/',views.MyLogin.as_view())url(r'^login/',views.view)FBV一模一样CBV与FBV在路由匹配上本质是一样......
  • 即时通讯源码(基于websocket即时通讯源码uniapp)+视频搭建教程
    即时通讯系统源码服务器端构架目录:1、构建基本服务器2、用户在线功能3、用户消息广播机制4、用户业务层封装5、在线用户查询6、修改用户名......
  • 姿薇优选源码
    最近新开发了一款姿薇优选系统,其主要功能有预约系统,支付系统,商城系统,会员系统,积分系统,物流系统,赠送系统,实名认证系统等等。姿薇优选系统客服系统源码分享:<?phpnamespac......
  • 自定义频率-权限 频率执行源码分析-全局异常处理-自动生成接口文档-RBAC
    自定义频率类 #自定义的逻辑1)取出访问者ip{192.168.1.12:[访问时间3,访问时间2,访问时间1],192.168.1.12:[],192.168.1.14:[]}2)判断当前ip不在访问字典里,......
  • 数字化培训、知识库、考学一体平台@附源码
    前言随着信息化的进一步推进,目前各行各业都在进行数字化转型,本人从事过医疗、政务等系统的研发,和客户深入交流过日常办公中“知识”的重要性,再加上现在倡导的互联互通、数......
  • 源码编译安装 git
    1、下载解压git源代码curl-Ohttps://mirrors.edge.kernel.org/pub/software/scm/git/git-2.37.2.tar.gztar-xvfgit-2.37.2.tar.gzcdgit-2.37.22、安装依赖包......