1. 支持快速搭链
群组架构,一键搭链。
一键搭建新群组,扩展新业务,类似于平行扩展一个区块链。
2. 支持联盟链的自理
3. 支持海量的数据——分布式存储
4. 隐私保护
5. 运维需求
并行计算模型
分布式存储
区块链中的各个模块,例如 P2P、虚拟机、共识机制,接口通用统一化,可插拔,根据需要去替换和定制。
自签证书:将自己的信息计算哈希值然后使用自己的私钥进行备书,自己可以证明信息是出自于自己。
代理证书:将自己的信息和公钥计算哈希值,然后用别人的私钥进行备书。别人可以证明信息是出自你自己。
所以 FISCO BCOS 联盟链既需要自己证明自己,也需要别人证明自己。
图灵完备的高级语言,支持循环、函数调用等。
由于合约需要计算结果唯一,所以与 java 等通用编程语言相比,没有 java 中的那些会造成不确定结果的因素,例如随机函数 random 等包含随机性的一些方法。
劣势:解释执行,速度比较慢。功能单一。
采用 C++ 编写合约逻辑,需要集成在 BCOS 中。
与 Solidity 访问方式一样,不需要建立虚拟机,没有 EVM,直接在底层代码执行,可以与 EVM 互通。BCOS 中存储等特殊功能都是由 Precompiled 开发。
单 Solidity 合约部署如下:
在 BCOS 中将流程简化,只需要在控制台将 Solidity 合约用 sdk2java 转译成 Java,就可以直接和业务一起部署在区块链上了。
类似于互联网中的 DNS。
将智能合约地址命名,方便用户寻址查找合约。
给开发者和企业应用。
Channel 协议(二进制协议):提供给 java SDK 使用。
JsonRPC 协议:对 http 比较友好的协议,可以给 web 调用。
区块链交易在 sdk 生成的,通过调用 sdk 接口,将交易发送到某一个区块链节点,此节点自动广播给其他区块链节点,所有区块链节点收到此交易,区块连节点之间会执行一个共识,确定由谁来出块。确定出块的节点,会将交易从区块组的交易池中取出来,打包进区块中,发给全网去执行共识。执行共识的过程中,就执行了这个交易。交易执行完毕,通知全网,区块落地,让全网的其他节点认同这个区块,此笔交易执行成功。
单播:单个区块链节点给单个区块链节点发送消息,通过区块链节点标识寻址。
组播:单个区块链节点向一组有共同属性的区块链节点发送消息,通过 Topic 寻址。
广播:单个区块链节点向所有节点发送消息。
有四个节点,node0,node1,node2,node3。
node0 是区块链共识节点,将区块从交易池中取出打包好后,进行广播到全网。在 pre-preapare 阶段,收到包的节点都会尝试去执行这个区块,执行完区块后,会将区块改变过的信息计算一个哈希值,回复签名包。在 preapare 阶段,会检查各节点结果是否一致,如果一致会回复一个 Commit 包。这些节点收到 Commit 包后即可将区块落盘。
只要全网 2/3 的节点结果一致,就可以落盘。1/3 的恶意节点或者故障节点不会影响整体。
按时间片去选取和容灾的。
比 PBFT 优势:可以容纳 1/2 的故障,共识过程只有两步,效率比较高。
比 PBFT 劣势:安全性比较差,如果有恶意节点,可以使整个集群崩溃。
产生的数据通过事务原子性地写入存储中。
可以使用 SPV 技术,通过 title 可以知悉里面有无所查询的数据。
节点之间实时同步更新状态,感知连上最新区块高度。
从 node0 和 node2 分别同步一部分,增加同步效率。