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

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

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

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

相关推荐
华仔啊17 分钟前
工作5年没碰过分布式锁,是我太菜还是公司太稳?网友:太真实了!
java·后端
卿·静32 分钟前
Node.js对接即梦AI实现“千军万马”视频
前端·javascript·人工智能·后端·node.js
SamDeepThinking1 小时前
在 Cursor IDE 中配置 SQLTools 连接 MySQL 数据库指南(Windows 11)
后端·ai编程·cursor
武子康1 小时前
大数据-92 Spark 深入解析 Spark Standalone 模式:组件构成、提交流程与性能优化
大数据·后端·spark
青梅主码1 小时前
麦肯锡最新发布报告《想打破生产力天花板吗?重新思考完成工作的方式》:与其一味调整组织结构,不如从根本上简化工作流程,释放更大价值
后端
Python私教2 小时前
源滚滚Rust全栈班v1.02 无符号整数详解
开发语言·后端·rust
绝无仅有2 小时前
面试总结之Nginx 经验常见问题汇总第二篇
后端·面试·github
这里有鱼汤2 小时前
分享7种常见的量化交易策略
后端
绝无仅有2 小时前
面试实战总结之Nginx配置经验第一篇
后端·面试·github
shark_chili2 小时前
CPU性能优化三剑客:分支预测、并行运算与超线程技术深度解析
后端