Graphene 源码阅读 ~ 源码结构

in bitshares •  last year

一般拿过一个项目我是习惯先了解一下项目的目录结构, 看一看项目是怎么组织依赖库, 构建脚本, 以及头文件和源代码文件的, 这样能够对整个项目结构大概有个数, 除了能够了解这个项目包含哪些模块, 模块与模块之间的调用关系之外, 还能在后面阅读代码时碰到对符号的引用时, 大概知道到哪里找它的定义, 对阅读和理解代码帮助会很大.

所以继前一篇 基础知识 之后, 本篇就来过一遍项目源码结构. 前一篇说了 Graphene 项目的源码已经并入 bitshares-core 项目维护了, clone 下来 bitshares-core 项目之后, 项目根目录的文件和目录很多, 但不难看出最重要的两个目录就是 libraries/progams/.

programs/ 目录组织比较简单, 一目了然. 不仅如此, 代码量也少, 基本上每个程序就一个 main.cpp 源文件, 所以重中之重还在 libraries.

libraries 的代码组织的可谓井井有条, 让人看了非常舒服:

libraries:

chain/
    include/graphene/chain/
                    protocol/
    protocol/
db/
    include/graphene/db/
app/
    include/graphene/app/
net/
    include/graphene/app/
wallet/
    include/graphene/wallet/
plugins/
    witness/
        include/graphene/witness/
    market_history/
        include/graphene/market_history/
    delayed_node/
        include/graphene/delayed_node/
    ...
fc/

可以看到, libraries/ 下的几大模块一目了然, 明显看名字就知道是做什么的. 而且代码结构高度一致, cpp 文件都位于各自一级目录, hpp 文件都位于各自的 include/graphene/ 目录下 . 首先是 plugins 目录, bitshares 的每一项功能都被设计成可拆卸的, 我们可以选择只运行一个稳定节点 (delayed_node) 而不成为见证人, 也可以选择是否要包含历史查询功能. 这能帮助只有某些需求的人节省大量系统资源, 非常灵活.

另外不得不说的一个模块是 fc, 这实际上是 git submodule 引入的外部模块, fc 最初也是 BM 开发的, 现在是并到 bitshares-fc 仓库了, fc 是基础工具库, 提供了一般编程过程中会涉及到的异步, 多线程, 结构体序列化等方便的功能.

chain 模块稍微有点不一样, 它还包含了一个 protocol 子模块. 在 protocol 子模块中能看到熟悉的字眼如 block, transaction, operations... 另外 chain 中还包含了两个重要的类: block_database 和 database, block_database 负责操作区块数据, database 实际上是继承了 db::object_database 类, 同时负责操作数据索引以及调用 block_database 操作区块数据.

appnet 提供的也是核心功能, 包括节点发现, p2p 连接, rpc 服务提供, 消息 handler (交易处理) 等. wallet 也自不必多说, 处理钱包文件等.

最后是 db 模块, 这里面定义了所有 bitshares 中的对象的基类以及索引结构, 上面说的 ob::object_database 就是直接操作索引的类, 加上操作数据的 chain::block_database 类, 就构成了 bitshares 数据库的主要部分.

Ok, 本篇就这样吧, 后续再逐个剖析下上面的各个模块

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

期待下篇子模块,最近正好在捣鼓里面的东西,官方文档又太旧。

·

期待多多评论交流啊, 有微信加个微信也行呀

·
·

可以加我微信quicksnake,最近和几个朋友在搞bts的手机钱包,欢迎大佬更多的给我们讲解代码。因为我自己不完全是开发方面的,所以也要仰仗各位大佬。

快写代码

·

好的😜 被大佬催突然感觉有压力了

了解项目的目录结构,很重要的基础工作,赞!

·

哈哈, 很浅薄的内容

干得好,我也想好好了解比特股底层结构。