# 平台介绍

- 平台介绍
  - 架构
    - [整体架构](./#整体架构)
    - [主链+平行链架构](./#主链+平行链架构)
  - [模块介绍](./#模块介绍)
  - [性能提升](./#性能提升)
  - [隐私保护（联盟链）](./#隐私保护（联盟链）)
  - [区块链交互易用性](./#区块链交互易用性)
  - chain33技术特点总结

Chain33是由复杂美自主研发的区块链底层开发平台，于2018年在github上开源。

Chain33平台是一套支持共识，数据库，执行器等可插拔，且易升级的区块链架构。

Chain33创造性的支持分层的架构，主链负责交易清算，智能合约和虚拟机从主链上分离放到平行链上独立执行，多条平行链并存提升运算效率。且平行链之间通过主链实现链间互联。

底层平台可用性经过广泛的应用实践检验，基于chain33区块链开发平台搭建的POS公链已经平稳运行2年多时间，同时基于chain33开发平台，已经有50多条平行链， 多条私有链和联盟链也在平稳运行， 业务涉及游戏，金融，溯源，存证，电商，健康等多业务领域

Chain33有以下特点：

1. `基于GO语言的区块链底层框架`
2. `模块独立，划分为区块链，共识，执行器，P2P，Mempool，钱包，数据存储，RPC等模块`
3. `可扩展性强，包括共识，执行器，数据存储等模块都可以插拔`
4. `平行链技术使公链更容易横向扩展`
5. `支持多种SDK，并提供了可视化的BAAS服务，大幅缩短建链、开发、部署的时间`


## 架构

### 整体架构

项目使用模块插件化的区块链底层开发框架，chain33保留了核心功能，将扩展功能以插件方式加进来。基于插件的设计有很多好处，可以将扩展功能从系统框架中剥离出来，降低框架的复杂度，让框架更加容易实现。
同时项目开发了多个功能模块，集合组成了模块插件仓库。模块插件化的设计架构是为了能更便捷的搭建区块链。单一的模块并不能体现出其优势，如果有不同的模块，就可以搭建出不同属性的链。为企业/个人的搭链提供个性化选择。这样的方式可以让企业/个人将更多的精力投入到业务中，而非区块链底层技术的研发中。
插件库中已经支持多种类型的插件（包含应用层，共识层，加密算法，交易排队机制等），可以自由组合，适用各种场景。

chain33插件架构如下图：

![img](../assets/i1.png)

如果没有特殊的业务场景需要，可以在Chain33基础上选择合适的插件，快速建立所需要的公链,联盟链，私有链或平行链等；如果有特殊的业务场景需要，需要对共识算法、合约、存储等进行定制化开发，也可以通过插件的形式快速开发、集成，构建所需要的公链。

### 主链+平行链架构

平行链依附于主链，共享主链共识网络，通过grpc接口同主链节点相连，理论上一条主链下可以挂无数的平行链。在主链上，交易只做共识和存储，而实际的交易都在平行链上执行，互不干扰。每条平行链只运行自己的数据，平行链与平行链之间数据相互隔离，并且由于复杂的合约主要运行在平行链上，主链上只运行一些基础核心的合约，所以主链的稳定性会比较强，进而保证整个区块链网络的稳定。 平行链各自执行自己的交易，多条平行链共存，实现了交易的并行执地。

主链+平行链拓扑图：

![img](../assets/i2.png)

## 模块介绍

Chain33采用模块插件化的设计，模块可插拔，适应多种场景，助力企业快速链改，核心模块包括：

- **应用层**：EVM虚拟机， WASM虚拟机，GO语言原生合约以及JVM虚拟机（研发完成，测试中）
- **共识层**：支持POS，DPOS以及POS33的公链共识、Tendermint及pbft联盟链共识、Raft私链共识、平行链共识等。
- **数据层**：数据存储方式支持可扩展，目前支持MPT、MAVL、KVDB、MVCCKVDB多种方式，其中我们自研的MVCCKVDB能避免了状态树膨胀而导致性能下降的问题，支持LevelDB、ES等多种后端存储。
- **加密算法**：兼容国际标准以及国密标准（SM2,SM3,SM4，SECP256K1,ED25519）
- **交易缓存池**：交易排队机制可配置（时间，价格）

## 性能提升

为提升系统整体性能，chain33从以下几方面来进行了优化

- **共识流程的优化（联盟链）**：chain33联盟链引入了聚合签名的技术来降低共识过程中的消息通信，通过leader去收集签名，于聚合后发送给其他节点，通过聚合签名就可以验证是否 2/3的节点已经签名，这样就能保证在区块链节点增加的情况下，交易数不会大量增加，提升共识的效率。
- **交易并行执行**：chain33采用平行链的架构，主链上，交易只做共识和存储，而实际的交易都在平行链上执行，互不干扰。每条平行链只运行自己的数据，平行链与平行链之间数据相互隔离，并且由于复杂的合约主要运行在平行链上，主链上只运行一些基础核心的合约，所以主链的稳定性会比较强，进而保证整个区块链网络的稳定。 平行链各自执行自己的交易，多条平行链共存，实现了交易的并行执地。
- **存储分片**：存储分片主要基于kad网络，分片算法可以保证数据相对均匀的分布在区块链的各个节点上，每个节点仅需要保存一部分数据，非常适合海量数据存储的场景，且可以随时增加机器实现动态扩容。数据打包之后进行分布式存储，减少了数据的数量，避免数据过于碎片化增加网络负载。

## 隐私保护（联盟链）

考虑到联盟链的高安全性需求，通过以下方：

- **节点准入机制**：节点加入或退出共识网络，都需要经过区块链上的管理合约进行授权，没有经过授权的节点无法加入共识网络。
- **数据传输保护**：节点与节点之间TLS加密，节点与应用之间的TLS加密方式实现传输过程中的隐私保护。
- **数据访问保护**：通过权限管理智能合约来界定数据的访问权限，只有被赋予相应权限才可以访问相关数据。
- **支持国密算法**：支持国密加密、签名算法及国密哈希算法。
- **可分享型隐私保护**：数据加密上链存储，结合代理重加密及秘钥分片技术实现隐私数据的动态授权。秘钥可以通过shamir门限秘钥分享算法（ (k,n)门限密钥共享算法，算法把密钥拆分成n个密钥分片，只有收集大于等于k个分片才能将原始的密钥重构，k就是门限值(k < n) ），分成多片存放于多个安全节点上,同时还支持超时配置。

## 区块链交互易用性

chain33引入命令行工具、区块链浏览器、多语言SDK等来提升系统的易用性

- **[区块链浏览器](../en/blockchainBrowser.md)**
- **[JAVA-SDK](https://github.com/33cn/chain33-sdk-java)**
- **[GOLANG-SDK](https://github.com/33cn/chain33-sdk-go)**
- **[PYTHON-SDK](https://github.com/33cn/chain33-sdk-python)**
- **[PHP-SDK](https://github.com/33cn/chain33-sdk-php)**

## chain33技术特点总结

- **国产开源**：国产自研，拥有自主知识产权，代码开源，支持独立部署，用户可以完全掌握自己数据。
- **国密算法**：在区块链多语言版本的SDK中，既支持国际标准，也支持国密标准。支持SM2，SM3,SM4。
- **支持国产芯片**：支持部署运行在国产芯片服务器上。
- **模块化设计**：项目吸纳了Linux 内核设计的模块化思想，开发了多个功能模块，集合组成了模块插件仓。
- **共识机制可插拔**：Chain33兼容多种共识机制，包括 RAFT、PBFT、POS、DPOS 等主流共识，也包括 SPOS、POS33 等自主研发共识机制，插拔不同的共识算法，可快速搭建私链、联盟链、公链、平行链。
- **平行链架构**：拥有自主知识产权，专利号：CN201610996011.9。目前平行链技术已经成为分片的主流的解决方案之一。在 Chain33中，主链不仅仅提供管理所有的平行链的功能，还提供了平行链消息存储的功能，通过主链数据的分片，以及高性能的共识算法，兼顾了链本身的安全性以及系统的可扩展性。
- **高效存储**：支持业务层快速调用区块链系统数据，如存证系统：底层建设的区块链数据，可以以ES数据库进行方便检索、个性化检索等。
- **跨链交易**：在采用侧链中继技术和比特币交换资产设计上，Chain33设计了哈希锁定步骤，使得参与双方都受到合理保护，资产转移更有保障。在与以太坊或其他区块链资产互操作上，采用合约桥加公证人机制，保障各方资产转移在可信基础上安全流转。
- **隐私保护**：采用代理重加密加秘钥分片的方案，实现数据可分享型存储，保障数据隐私。
- **简单易用**：系统安装简便， 同时提供BAAS服务可以实现可视化安装，以及提供智能合约IDE工具，帮助开发者节约成本。