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网络接收到来自矿工的新区块

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

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

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

相关推荐
Luke君607975 小时前
Spring Flux方法总结
后端
define95275 小时前
高版本 MySQL 驱动的 DNS 陷阱
后端
忧郁的Mr.Li6 小时前
SpringBoot中实现多数据源配置
java·spring boot·后端
暮色妖娆丶7 小时前
SpringBoot 启动流程源码分析 ~ 它其实不复杂
spring boot·后端·spring
Coder_Boy_7 小时前
Deeplearning4j+ Spring Boot 电商用户复购预测案例中相关概念
java·人工智能·spring boot·后端·spring
Java后端的Ai之路7 小时前
【Spring全家桶】-一文弄懂Spring Cloud Gateway
java·后端·spring cloud·gateway
野犬寒鸦7 小时前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
Honmaple8 小时前
OpenClaw 实战经验总结
后端
golang学习记8 小时前
Go 嵌入结构体方法访问全解析:从基础到进阶陷阱
后端
NAGNIP9 小时前
程序员效率翻倍的快捷键大全!
前端·后端·程序员