XuperChain核心流程

04-XuperChain核心流程

0 XuperChain架构图

核心框架

Xuper Chain主要由 Xuper Core 这个核心引擎来构建。Xuper Core 分为三个部分:

  1. 基础组件:日志、存储、监控等关键组件,以及密码学库等基本组件。
  2. 核心组件:包括共识、合约、账本、网络安全模块,这些都是必备的。
  3. 协议层:各个模块对应的底层网络协议的实现。

Xuper Chain 的整体架构是一个多引擎架构,例如合约模块支持多类智能合约引擎。各模块都是标准化的,并且广域适用,类似于公有链的内容,很多节点都能访问,通过区块链浏览器或其他方式访问到网络。

Xuper Chain 构建了一个开放的网络,我们可以通过 Xuper Chain 的门户查看区块高度、交易总数、合约数等公开数据,也可以通过开放网络进行管理和操作。

1 二阶段交易提交流程

1.1 提交预执行

用户通过客户端或SDK提交合约执行的请求,网络中的任意一个全卡点接受请求

1.2 全节点预执行

全节点收到请求之后进行合约预执行,全节点需要在它本地构建一个沙盒环境去执行这个交易。若执行成功,则返回执行后的读写集给客户端

1.3 提交交易

客户端获取到读写集之后,在本地组装交易,同时用本地私钥进行交易签名,完成之后把完整的交易发送到区块链网络中

1.4 p2p交易广播

任意节点收到来自客户端的提交交易请求后通过p2p网络把交易广播给警个网络,从而让矿工能发现新的交易

1.5 矿工节点区块打包

矿工在收到来自p2p的交易后,通过打包区块把交易组装到一个新的区里面,同时加上自己的签名

1.6 p2p区块广播

矿工打包区块完毕之后,把新的区块通过p2p网络广播给其他节点

1.7 全节点交易验证

其他节点接受到区块后,进行区块的合法性校验,比如签名、共识、交易验证等,验证后就计入本地账本

1.8 交易订阅

客户端通过订阅,了解到自己的交易已经被打包到新的区块,则交易已上链

通过共识算法选出记账节点,然后把交易组装到一个新的区块里,进行签名,然后把区块广播到其他的全节点里,其他的全节点进行交易的验证。若验证通过,就落块,寄到全节点的本地账本里。客户端可通过订阅的方式了解到自己的交易已被打包到新的区块,即交易已上链。

预执行的流程其实就是客户端需要通过 RPC 模块,把预执行请求发送到全节点,然后全节点根据预执行请求构建沙盒环境,在沙盒环境里面查询合约代码,执行智能合约,然后返回读写集给客户端。沙盒环境的作用是做数据隔离,不会对真实的已经在全节点上存储的数据产生影响,因为可能发送来的交易无法通过验证,可能是失败的,也可能是产生冲突的。如果每个交易都执行,那其实是得不偿失的。

合约执行完毕之后会把读写集返回给客户端。区块的打包流程是交易通过 P2P 网络进行合法性的验证,如果验证通过,就会被添加到矿工的交易池里。通过共识算法选出记账节点,这一轮的记账节点从交易池里选出一批交易打包成区块,然后进行签名,把新的区块先写入到自己本地的账本里,然后通过 P2P 网络广播给其他的全节点。其他全节点收到新的区块之后验证签名、交易和状态。如果验证通过,就把区块写入到自己的本地账本里,完成落块,实现区块打包到广播到其他网络节点的全过程。

2 交易预执行流程

2.1 预执行请求提交

  • 依据请求参数选择合适的合约虚拟机
  • 构造好执行合约所需的沙盒环境:

2.2 执行合约代码

  • 依据请求参数链上查询合约代码
  • 执行智能合约,合约在沙盒环境中执行,进行资源的读取和写入
  • 如果合约执行过程中超资源,合约执行过程直接终止
  • 执行期间产生的数据作用于沙盒,不会对真实存储产生影响,保证合约执行的原子性和隔离性

2.3 读写集返回

合约执行完毕,读写集数据返回给客户端。

3 区块打包流程

交易通过p2p网络进行交易合法性验证,包括签名,双花读写集等验证,如果都通过之后就进入到交易池里面。

在共识模块的协调下,选出这一轮的矿工。

矿工从交易池里面选取一批交易进行打包,打包完毕之后进行签名。

矿工在生成新区块之后首先会写入到自己的账本,同时更新状态机以反映最新的状态变化

矿工更新完本地账本之后,通过p2p网络进行新区块的广播其他节点通过p2p网络接收到来自矿工的新区块

从节点在收到一个新的区块之后,对区块链中交易进行验证包括共识、交易、状态,以保证数据的安全性。

一切验证通过之后就把新区块持久化到本地账本,至此完成了区块的打包到广播到其他网络节点的全过程。

获取更多干货内容,记得关注我哦。

相关推荐
超爱吃士力架28 分钟前
设计模式五大基本原则
前端·后端·设计模式
好奇的菜鸟2 小时前
如何为IntelliJ IDEA配置JVM参数
开发语言·后端
Simon_Smith2 小时前
SpringBoot+IDEA工具框架快捷键+注解备注
spring boot·后端·intellij-idea
揽月随风醉2 小时前
golang 判断一个点是否在一个多边形内
开发语言·后端·golang
机器之心2 小时前
Florence-VL来了!使用生成式视觉编码器,重新定义多模态大语言模型视觉信息
人工智能·后端
熬夜的猪4 小时前
Redis 最佳实践
java·redis·后端
涡能增压发动积4 小时前
Java不能搞大模型应用开发?SpringAI拯救你
java·人工智能·后端
一二小选手5 小时前
【SpringBoot】常用注解 配置文件加载顺序 全局异常
java·spring boot·后端
007php0075 小时前
go语言zero框架下的日志记录的sdk实战案例
linux·开发语言·后端·python·nginx·golang·php