bitshares程序结构

in #bitshares6 years ago (edited)

第1章 【绪言】
1.1 编写目的
本文档主要讲述bitshare总体程序结构,包括用户界面及后台服务,然后再对bitshares核心部分进行再一步讲解。关于bitshares的主要功能的具体实现会在其它文档进行深入讲解。

1.2 术语定义
graphene:石墨烯网络,是Cryptonomex公司开发的新型区块链,包括底层P2P网络连接机制以及维护的区块链数据结构,拥有比传统比特币以太坊更快的确认速度,最高可达到每秒上百万TPS,区别于比特币以太坊的POW共识机制,这种区块链采用DPOS共识机制。
DPOS共识机制:由所有该链的token的持有者,选举出一定数量的节点,然后由这些节点协作,轮流进行记账。以bitshares为例,bitshares网络投票选出21个区块生产者(见证人节点)。然后由这21个区块生产者,相互协作,按照一定的顺序,轮流进行记账。出块间隔为3秒一个大区块。此外,这21个区块生产者,不仅记账,还需要提供bitshares全链所需要的计算和网络资源(包括CPU、内存、存储容量等等)。
见证人节点:bitshares网络中通过投票选出来一系列节点,其中同一时刻只有21个节点拥有打包区块的权利,同时有一系列的后备见证人节点,当这21个节点出现违规操作或因故障无法产生区块时,可以通过投票将其撤换,后备见证人节点将依次提升加入到这21个节点队列中。

第2章 【技术原理】
首先看bitshares简单部署示意图:

node1到node4是区块链的见证人节点,此图只是示例,bitshares下的见证人节点目前是21个,这些结点互相连接成为一个P2P网络,cli_wallet是命令行客户端,通过websocket + JSON API与任意见证人节点相连,web_wallet是网页客户端,通过同一套API与任意见证节点相连。客户端调用相应的接口产生各种交易数据,交易数据在各个见证人节点中进行广播。

第3章 【代码结构】
3.1 整体结构
bitshares所有代码都在https://github.com/bitshares下,可以看到这里面有多个工程,每个工程代码及功能如下:
bitshares-core:见证人节点和命令行钱包,C++代码,基于graphene区块链,这个工程是bitshares的核心部分。
bitshares-fc:bitshares-core依赖的一个C++工具库,封装了p2p网络相关实现,webserive相关实现,以及一些文件读写、序列化、哈希操作等一系列工具类。
bitshares-ui: 网页钱包,Javascript代码,基于React和Webpack,即大多数用户使用的UI界面。
bitshares-js: bitshares-ui依赖的js库,包括两大底层功能,读取区块链数据,使用账号签署交易。
bitsharesjs-ws: bitshares-js依赖的js库,封装了与见证节点进行通信的细节,为bitshares-js提供API。
核心代码依赖关系图如下:

3.2 bitshares-core结构
下面再讲解一下bitshares-core相关一些代码,当下载下来bitshares-core代码后,可以看到程序最重要的是以下两个目录:libraries/ 和 progams/。
programs/ 目录组织比较简单, 一目了然. 不仅如此, 代码量也少, 基本上每个程序就一个 main.cpp 源文件,其中最重要的是如下两个:
witness_node:见证人结点程序,bitshares网络上的见证人结点就是编译此代码。
cli_wallet:命令行钱包,当使用命令行方式操作用户账户时,使用此程序。
libraries/ 是bitshares-core所有代码的核心部分,代码结构如下:

可以看到bitshares核心代码是分模块进行组织,结构清晰,下面讲一个各模块功能:
app:提供核心功能,主要是所有的rpc 服务,包括操作数据库,p2p网络连接,主要实现最上层的调度功能。
chain:区块链的核心代码,包括了一系列关键数据结构的定义及相关实现,比如block、transaction、operation、asset、account、witness…除此之外,还包括这样核心数据的操作代码,比如block_database 和 database。 block_database 负责操作区块数据, database 实际上是继承了 db::object_database 类, 同时负责操作数据索引以及调用 block_database 操作区块数据。
db:数据库的基础定义,包括数据库的基类和索引的基类。
egenesis:生成链相关的配置文件。
net:graphene网络所有实现,包括各结点之间的发现、连接、消息通讯等。
plugins:将bitshares基础功能进行分类,组织成一个个plugin,由program下面的程序进行加载调用,比如见证人结点(witness_node)所有相关功能实现,将其封装为一个plugin,而program下的witness只加载witness这个plugin并启动即可实现见证人结点功能。
wallet:bitshares所有具体业务逻辑的所有实现,包括创建账户、转账、订单相关、签名相关业务逻辑,作为app和数据库的中间层,app层提供rpc服务,并将接收到的请求解析调用wallet层进行具体业务处理,然后wallet层调用database层进行数据入库上链等相关操作。

Sort:  

Congratulations @lpbottle! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

You published your First Post

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

Upvote this notification to help all Steemit users. Learn why here!