1 总体方案

  • 用户通过SDK或curl命令向节点发起RPC请求以发起交易,
  • 节点收到交易后将交易附加到交易池中,
  • 打包器不断从交易池中取出交易,并通过一定条件触发,将取出交易打包为区块。
  • 生成区块后,由共识引擎进行验证及共识,验证区块无误且节点间达成共识后,将区块上链。
  • 当节点通过同步模块从其他节点处下载缺失的区块时,会同样对区块进行执行及验证。

2 整体架构

整体架构如下图所示:

Node:区块节点

TxPool:交易池,节点自身维护的、用于暂存收到的交易的内存区域

Sealer:打包器

Consensus Engine:共识引擎

BlockVerifier:区块验证器,用于验证一个区块的正确性

Executor:执行引擎,执行单个交易

BlockChain:区块链管理模块,是唯一有写权限的模块,提交区块接口需要同时传入区块数据和执行上下文数据,区块链管理将两种数据整合成一个事务提交到底层存储

Storage:底层存储

主要关系如下:

  1. 用户通过操作SDK或直接编写curl命令向所连接的节点发起交易。
  2. 节点收到交易后,若当前交易池未满则将交易附加至TxPool中并向自己所连的节点广播该交易;否则丢弃交易并输出告警。
  3. Sealer会不断从交易池中取出交易,并立即将收集到的交易打包为区块并发送至共识引擎。
  4. 共识引擎调用BlockVerifier对区块进行验证并在网络中进行共识,BlockVerifier调用Executor执行区块中的每笔交易。当区块验证无误且网络中节点达成一致后,共识引擎将区块发送至BlockChain。
  5. BlockChain收到区块,对区块信息(如块高等)进行检查,并将区块数据与表数据写入底层存储中,完成区块上链。

3 方案流程

3.1 合约执行流程

执行引擎基于执行上下文(Executive Context)执行单个交易,

其中执行上下文由区块验证器创建用于缓存暂存区块执行过程中执行引擎产生的所有数据。

执行引擎同时支持EVM合约与预编译合约,其中EVM合约可以通过交易创建合约、合约创建合约两种方式来创建,其执行流程如下:

EVM合约创建后,保存到执行上下文的_sys_contracts_表中,EVM合约的地址在区块链全局状态内自增,从0x1000001开始(可定制),EVM合约执行过程中,Storage变量保存到执行上下文的c_(合约地址)表中。

预编译合约分永久和临时两种:(1) 永久预编译合约,整合在底层或插件中,合约地址固定;(2) 临时预编译合约,EVM合约或预编译合约执行时动态创建,合约地址在执行上下文内自增,从0x1000开始,至0x1000000截止,临时预编译合约仅在执行上下文内有效预编译合约没有Storage变量,只能操作表,其执行流程如下:

https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/design/architecture/transaction_stream.html?highlight=EVM#id5

以太坊虚拟机 EVM(3)交易流(FISCO BCOS为例)相关推荐

  1. 以太坊虚拟机EVM的缺陷与不足

    首先对作者做个简单的自我介绍,Jordan Earls是Qtum量子链的联合创始人之一,目前担任Qtum量子链全球首席工程师.Qtum目前采用了以太坊虚拟机(Ethereum Virtual Mach ...

  2. 以太坊虚拟机EVM究竟是个啥

    基本概念 EVM(ETHereum Virtual Machine)是「以太坊虚拟机」的缩写.如果你有一些软件开发的背景,一定听过java虚拟机.通俗的解释java虚拟机的就是: 我们写的java代码 ...

  3. 深入了解以太坊虚拟机

    本文由币乎社区(bihu.com)内容支持计划赞助. 译者说,深入了解以太坊虚拟机是一个系列的文章,一共5篇! 本文是第1篇,主要介绍的是以太坊虚拟机汇编代码基础.后续的4篇译文链接在本文的结尾处. ...

  4. 对于以太坊虚拟机 (EVM)及其相关知识的讲解

    以太坊虚拟机(EVM) EVM是智能合约的运行环境 作为区块验证协议的一部分,参与网络的每个节点都会运行EVM,审查节点会检查验证正在验证的区块中列出的交易,并运行EVM中交易触发的代码 EVM是沙盒 ...

  5. 深度剖析以太坊虚拟机(EVM)的未来:Ewasm

    以太坊是具有内置图灵完备编程语言的区块链.任何人都可以使用以太坊智能合约来创建去中心化应用程序."以太坊虚拟机(EVM)是以太坊处理智能合约部署和执行的一部分"(Antonopou ...

  6. 从比特币脚本引擎到以太坊虚拟机

    这个系列是目标受众是区块链开发者和有其他开发经验的CS专业学生 面对媒体对区块链相关技术的解读和吹捧,许多人一时不知所措.投资人.大公司都在FOMO(fear of missing out)的心理驱动 ...

  7. solidity智能合约[37]-以太坊虚拟机数据存储

    EVM 当调用solidity函数时,都会在以太坊虚拟机当中来执行.因此了解以太坊虚拟机的细节,了解其数据的存储机制变得尤为重要. 以太坊虚拟机中的空间分为3大部分.分别为storage.stack与 ...

  8. 写给开发者——从比特币脚本引擎到以太坊虚拟机

    这个系列的目标受众是区块链开发者和CS专业同学 面对媒体对区块链相关技术的解读和吹捧,许多人一时不知所措.投资人.大公司都在FOMO(fear of missing out)的心理驱动下,争相宣布al ...

  9. 以太坊源码深入分析(9)-- 以太坊通过EVM执行交易过程分析

    上一节分析了同步一个新的区块准备插入本地BlockChain之前需要重放并执行新区块的所有交易,并产生交易收据和日志.以太坊是如何执行这些交易呢?这就要请出大名鼎鼎的以太坊虚拟机. 以太坊虚拟机在执行 ...

  10. 深入了解以太坊虚拟机第4部分——ABI编码外部方法调用的方式

    本文由币乎社区(bihu.com)内容支持计划赞助. 在本系列的上一篇文章中我们看到了Solidity是如何在EVM存储器中表示复杂数据结构的.但是如果无法交互,数据就是没有意义的.智能合约就是数据和 ...

最新文章

  1. 几大科技公司在VR方面的布局是怎么样的?
  2. ups容量计算和配置方法_干货:UPS电源配蓄电池公式计算方法!
  3. Spring:设置日志依赖项
  4. hide show vue 动画_Vue2.x学习四:过渡动画
  5. 计算机软件基础 一课本,计算机软件基础(-)课后习题答案.doc
  6. 构造函数后面的冒号后初始化列表
  7. 如何安装uclient_uclient软件
  8. 明华澳汉 sle_4442 卡 读写
  9. 人工智能语音实训平台实验指导书
  10. 我的世界java版1.7.10打不开怎么办_我的世界中国版打不开怎么办 怎么解决
  11. MRI T1加权结构
  12. 阿里CEO张勇:打破各企业边界 联手对抗黑灰产
  13. 项目管理(pm)-净现值
  14. 实验室主机Ubuntu远程控制+自动开关机
  15. 基于stm32的车辆减速灯项目——MPU6050或ADXL345
  16. 使用POI提取Word文件的内容(纯文本、带html格式)
  17. 外贸网站建设的一些建站方法
  18. 金融级实人认证是什么?
  19. AWD平台搭建与使用入门
  20. 【蓝桥杯】历届试题 对局匹配(C++)

热门文章

  1. w3c subscribe
  2. Python自然语言处理学习笔记(60):7.1 信息抽取
  3. 学习ExtJS(九) fit布局
  4. 中小企业SAAS产品选型之分析自己的需求
  5. 沃达丰V1210刷机教程
  6. 初识面向对象(钻石继承,super,多态,封装,method,property,classmethod,staticmethod)...
  7. 调用operator+=来定义operator+比其他方法更有效?
  8. Galera集群server.cnf参数调整--前言
  9. POJ 2182 Lost Cows (线段树)
  10. Oracle新建用户及权限