# 底层技术Chain33介绍
<font color="6B7280">最近更新时间：2022-01-10 19:23:10</font>

Chain33是由杭州复杂美科技有限公司自主研发的区块链底层开发平台，已于2018年在github上完全开源。

支持其他区块链软件供应商基于Chain33基础自由拓展开发，实现自由搭链；同时支持定制化二次开发，为区块链后续升级变更提供保障。

底层Chain33可用性经过广泛的应用实践检验，基于Chain33区块链开发平台搭建多条公链、联盟链、平行链和私有链平稳运行；业务涉及金融、游戏、溯源、存证、电商、健康等多领域。

### 区块链逻辑架构图
![](../../assets/chain33-1.jpg)

Chain33使用的是一种模块插件化的区块链底层开发框架，保留了区块链的核心功能，可扩展功能以插件形式存在。

基于插件方式的设计有很多好处，可以将扩展的功能从系统框架中剥离，降低区块链框架的复杂度；同时区块链框架也更容易实现。

模块插件化的设计目的是助力企业更加便捷的搭建区块链。企业在搭链过程中，可根据实际业务场景选择所需功能模块，为企业搭链提供了个性化选择方式。这样的实现方式可以有助于企业将更多的人力物力投入到业务中，而非区块链底层技术的研发中。真正意义上实现区块链技术适用于各行各业，企业轻松搭链。

### 主链平行链架构
![](../../assets/chain33-2.jpg)

Chain33创造性地实现了“主链+子链”的分层架构，主链仅运行核心智能合约，做共识和存储交易，要求简单稳定，保证整个联盟网络稳定运行；实际交易在平行链执行，多条平行链并存提升运算效率，且平行链之间通过主链实现链间互链。

Chain33天然支持主链与子链、子链与子链间的跨链交易；通过多种跨链方案结合平行链，支持Chain33与外部异构公链间的价值传递。

### Chain33交易处理
![](../../assets/chain33-3.jpg)

### 流程:
1. 应用层完成交易签名后，通过RPC模块发送到节点的交易缓存池模块缓存。
2. 缓存池检查交易的合法性：交易是否重复、签名是否正确、交易是否过期等。
3. 通过P2P模块向其他节点广播交易，保证所有节点交易缓存池中的交易一致。
4. 共识模块定时从交易缓存池中拉取交易列表，构造区块。
5. 共识模块将该区块的共识消息广播给联盟链网络中的其它节点做共识处理。
6. 共识模块发送区块给执行器（智能合约）模块来执行交易。
7. 执行完成后，共识模块将区块发送给账本模块做处理。
8. 调用底层存储，将账本存储在节点数据库中。
9. 账本再通过P2P模块将区块广播给其它节点，接收到区块的节点再次验证并执行区块中的交易并存储区块。

### Chain33共识技术
在PBFT协议的基础上，采用聚合签名和连续出块的方式来提升性能。
![](../../assets/chain33-4.jpg)

### 传统PBFT的痛点
共识节点数为n，投票过程的消息复杂度为O(n2)，不适合大规模的共识节点部署。

### 改进方案
在两轮投票阶段，共识节点将自己的投票发送给Proposer，然后Proposer收集这些投票进行聚合签名，并广播给其他共识节点，这样消息复杂度为O(n)，适合大规模共识节点部署。
![](../../assets/chain33-5.jpg)
### 原有痛点

所有高度的区块都需要经过两轮投票才能达成共识，并且打包一个区块后就要切换Proposer，切换比较频繁，这两方面导致共识耗费的时间在出块时间中占比较高，从而影响整个区块链系统的TPS。

### 改进方案

共识节点作为Proposer时，连续提议并打包多个区块，第一个区块经过两轮投票确定，后续的区块经过一轮投票确定。这样处理后，一方面减少切换Proposer的次数，另一方面缩短共识的时间，从而提升共识效率。另外，如果区块链网络中突然出现大量交易，Proposer可以很快提议并打包多个区块，及时处理这些交易，提升了系统的响应性。