FISCO BCOS代码分析
FISCO BCOS的代码大量参考了以太坊C++的代码
================================
目录
- UTXO
- abi
- cert
- docker
- eth
- evmjit
- libdevcrypto
- libdiskencryption
- libpaillier
- libp2p
- libpbftseal
- libraftseal
- libsinglepoint
- homebrew
- libchannelserver
- libdevcore
- libethcore
- libethereum
- libevmcore
- libodbc
-
smartcontract
=================================
UTXO
以太坊使用账户管理余额,比特币则使用UTXO模型。以太坊的账户模型主要有两点限制:
-
对于以太坊的账户模型,来源账户在给去向账户进行转账时,直接从本账户的余额中扣减转账数额,但无法确定所扣减的数额全部/部分来源于先前哪一笔交易,有哪些前置的消费条件,从而无法进行转账前的业务逻辑校验。
-
当同一来源账户在给多个去向账户进行转账时,存在多个交易共同操作来源账户余额的情况,基于以太坊数据一致性方案中交易列表及交易回执的有序性要求,区块链网络无法对转账交易进行并行处理。
因此FISCO BCOS增加了对于UTXO的支持,可以使用带有Token的资产,这些资产有明确的金额和所有权。
具体内容请参考以下链接:以太坊上基于UTXO模型的转账交易方案使用手册
返回目录
abi
CNS(合约命名服务)模块代码
cert
CA认证生成脚本。和以太坊不同,所有的节点都必须持有CA认证才允许加入网络。
cmake
deps
doc
docker
Docker镜像示例
eth
主入口目录,其中main.cpp包含main函数入口
evmjit
VM JIT is a library for just-in-time compilation of Ethereum EVM code. It can be used to substitute classic interpreter-like EVM Virtual Machine in Ethereum client.
homebrew
Mac OS包管理软件
libchannelserver
AMOP(链上链下通信协议)实现目录
libcontact
libdevcore
基础通用组件实现目录,如工具类函数、基础数据类型结构定义、IO操作函数、读写锁、内存DB、TrieDB、SHA3实现、RLP编解码实现、Worker模型等等
libdevcrypto
加密算法包,相对于以太坊源代码,FISCO BCOS添加了对于国产密码学标准的支持。
算法类型 | 国密版FISCO BCOS | 非国密版FISCO BCOS |
---|---|---|
签名算法 | SM2 (公私钥长度:512 bits, 256 bits) | ECDSA (公私钥长度: 512 bits, 256 bits) |
哈希算法 | SM3 (哈希串长度: 256 bits) | SHA3 (哈希串长度: 256 bits) |
对称加解密算法 | SM4 (对称密钥长度: 128 bits) | AES (加密秘钥长度: 256 bits) |
libdiskencryption
存储层面上的加密, 落盘存储加密实现目录
libethcore
区块链核心数据结构目录。如ABI、秘钥管理、区块头、预编译、交易结构等等
libethereum
区块链主框架逻辑目录。如交易池、系统合约、节点管理、块链、块、链参数等等
libevm
虚拟机主目录。如解释器、JIT等等
libevmcore
OPCODE指令集定义、定价
libodbc
支持数据库分布式存储
libp2p
p2p包实现了通用的p2p网络协议。包括节点的查找,节点状态的维护,节点连接的建立等p2p的功能。p2p 包实现的是通用的p2p协议。 某一种具体的协议(比如eth协议。 whisper协议。 swarm协议)被封装成特定的接口注入p2p包。所以p2p内部不包含具体协议的实现。 只完成了p2p网络应该做的事情。FISCO BCOS添加了节点SSL校验,用于节点介入控制和认证。
和以太坊一样,FISCO BCOS也支持RPLx。RLPx协议属于会话层的协议,主要功能是在节点之间建立并维持通信,节点的发现和节点之间数据流的传输主要是由传输层的UDP和TCP协议完成.
RLPx协议实现了完备的前向安全性(Perfect Forward Secrecy),即现有的密钥泄漏不会导致之前信道上的信息被破解,因为RLPx协议每次建立的连接都使用了不同的密钥.
实现过程是通过了一次Diffie–Hellman密钥交换,连接的双方各随机生成一个私钥,然后将算出的公钥发送给对方,最后双方通过手中的密钥和对方的公钥生成了一个共享密钥,此次连接的信道上将会使用此共享密钥加密传输信息.
回到目录
libpaillier
FISCO BCOS支持加法同态,可以在不解密的情况下,对于加密数据进行加法操作,而不泄露参与加法的具体数字。
回到目录
libpbftseal
不同于比特币的PoW,和以太坊的PoS,PBFT(拜占庭容错)是FISCO BCOS的共识算法之一。
回到目录
libraftseal
RAFT是FISCO BCOS支持的另外一种共识算法,相比于PBFT的1/3,RAFT可以提供1/2的容错率。RAFT本质上是一种同步算法,不解决容错的作恶的问题。
回到目录
libsinglepoint
共识算法插件
libstatistic
访问频率统计与控制实现目录
libweb3jsonrpc
web3 RPC实现目录
libwebthree
libwhisper
Whisper协议——Whisper协议是DApp间通信的通信协议。Whisper是为需要大规模的多对多数据发现、信号谈判和最少的传输通信、完全的隐私保护的下一代DApp而设计的。此功能为以太坊基础通讯协议。
Whisper(低语者)是以太坊的一个功能扩展。它是以太坊生态中的一个重要一环(以太坊的智能合约smart contract实现了分布式逻辑,以太坊的Swarm实现了分布式存储,以太坊的Whisper实现了分布式消息)。
Whisper将实现智能合约间的消息互通,届时可以实现功能更加复杂的DApp。
sample
一键安装与部署
script
与安装相关的脚本
smartcontract
系统合约实现目录
tool
utils
web3lib
web3 是一个通过RPC 调用 和本地节点进行通信的js库。web3可以与任何暴露了RPC接口的以太坊节点连接。