FISCO BCOS 主要技术和原理
公众链-联盟链
1. 支持快速搭链
群组架构,一键搭链。
一键搭建新群组,扩展新业务,类似于平行扩展一个区块链。
2. 支持联盟链的自理
3. 支持海量的数据——分布式存储
4. 隐私保护
5. 运维需求
两翼
并行计算模型
- 区块链自动识别交易的互斥资源,构建出 DAG,规划一个可并行的执行路线。
- 最佳情况下,性能提升可达到 CPU 核心数的倍数。
分布式存储
- 使用分布式存储替换旧的本机存储,突破了单机磁盘容量的限制,支持横向扩展。
- 分布式存储定义了标准的数据访问 CRUD 接口,适配多种数据存储系统。
- 区块链节点既可以直接访问存储,也可以通过专用的数据代理访问存储。
- 适配关系型数据库(MySQL),简化数据操作。mysql 有网关,可以按照主key取模,分散多个表中。按照客户需求,mysql更加便利于检索。shuging
- 数据管理更方便,容易支持数据迁移/备份。
- 由于数据是全网冗余的,所有区块链的节点、账本都是一样的数据。没办法通过增加节点数量来改变总体的存储容量大小,希望突破单机节点容量的限制。以太坊使用的是 leveldb 进行存储,比特币使用的文件存储。当支持关系型数据库(MySQL、ORACLE等)后,由于本身可以支持平行扩展,可以进行分库分表,可以使我们单个区块链的节点容纳更多更海量的数据。
多引擎——为联盟链应用保驾护航
区块链中的各个模块,例如 P2P、虚拟机、共识机制,接口通用统一化,可插拔,根据需要去替换和定制。
FISCO BCOS 架构
区块链业务开发流程
- 01 搭建区块链
- 02 开发智能合约
- 03 部署合约
- 04 使用 Java SDK 开发业务逻辑
- 05 业务上线,发起交易
节点准入控制
- 联盟链又称许可链,参与区块链网络的节点都需要经过准入控制
- 采用SSL通信机制,基于PKI的CA认证机制
- 节点白名单机制
- 证书黑名单机制
自签证书:将自己的信息计算哈希值然后使用自己的私钥进行备书,自己可以证明信息是出自于自己。
代理证书:将自己的信息和公钥计算哈希值,然后用别人的私钥进行备书。别人可以证明信息是出自你自己。
所以 FISCO BCOS 联盟链既需要自己证明自己,也需要别人证明自己。
以太坊智能合约开发——Solidity
图灵完备的高级语言,支持循环、函数调用等。
由于合约需要计算结果唯一,所以与 java 等通用编程语言相比,没有 java 中的那些会造成不确定结果的因素,例如随机函数 random 等包含随机性的一些方法。
劣势:解释执行,速度比较慢。功能单一。
BCOS 开发的合约——Precompiled 合约
采用 C++ 编写合约逻辑,需要集成在 BCOS 中。
与 Solidity 访问方式一样,不需要建立虚拟机,没有 EVM,直接在底层代码执行,可以与 EVM 互通。BCOS 中存储等特殊功能都是由 Precompiled 开发。
合约编译部署——SDK
单 Solidity 合约部署如下:
在 BCOS 中将流程简化,只需要在控制台将 Solidity 合约用 sdk2java 转译成 Java,就可以直接和业务一起部署在区块链上了。
BCOS 开发合约工具——CNS
类似于互联网中的 DNS。
将智能合约地址命名,方便用户寻址查找合约。
接入层设计——对外接口
给开发者和企业应用。
Channel 协议(二进制协议):提供给 java SDK 使用。
JsonRPC 协议:对 http 比较友好的协议,可以给 web 调用。
发送交易——调用合约上链
区块链交易在 sdk 生成的,通过调用 sdk 接口,将交易发送到某一个区块链节点,此节点自动广播给其他区块链节点,所有区块链节点收到此交易,区块连节点之间会执行一个共识,确定由谁来出块。确定出块的节点,会将交易从区块组的交易池中取出来,打包进区块中,发给全网去执行共识。执行共识的过程中,就执行了这个交易。交易执行完毕,通知全网,区块落地,让全网的其他节点认同这个区块,此笔交易执行成功。
多模网络设计
单播:单个区块链节点给单个区块链节点发送消息,通过区块链节点标识寻址。
组播:单个区块链节点向一组有共同属性的区块链节点发送消息,通过 Topic 寻址。
广播:单个区块链节点向所有节点发送消息。
PBFT共识机制
有四个节点,node0,node1,node2,node3。
node0 是区块链共识节点,将区块从交易池中取出打包好后,进行广播到全网。在 pre-preapare 阶段,收到包的节点都会尝试去执行这个区块,执行完区块后,会将区块改变过的信息计算一个哈希值,回复签名包。在 preapare 阶段,会检查各节点结果是否一致,如果一致会回复一个 Commit 包。这些节点收到 Commit 包后即可将区块落盘。
只要全网 2/3 的节点结果一致,就可以落盘。1/3 的恶意节点或者故障节点不会影响整体。
Raft 共识算法
按时间片去选取和容灾的。
比 PBFT 优势:可以容纳 1/2 的故障,共识过程只有两步,效率比较高。
比 PBFT 劣势:安全性比较差,如果有恶意节点,可以使整个集群崩溃。
区块链数据
产生的数据通过事务原子性地写入存储中。
分布式存储架构设计
树结构——MPTState
可以使用 SPV 技术,通过 title 可以知悉里面有无所查询的数据。
网络 P2P 区块同步原理
节点之间实时同步更新状态,感知连上最新区块高度。
从 node0 和 node2 分别同步一部分,增加同步效率。
权限控制实现
- 最小粒度为表,基于外部账号进行控制。
- 使用白名单机制,未配置权限的表,默认完全放开,及所有外部账户都有读写权限。
- 权限设置利用权限表(_sys_table_access_)。没有配置的没有权限控制。
- 采用控制台,可以方便地进行权限控制的设置