一般拿过一个项目我是习惯先了解一下项目的目录结构, 看一看项目是怎么组织依赖库, 构建脚本, 以及头文件和源代码文件的, 这样能够对整个项目结构大概有个数, 除了能够了解这个项目包含哪些模块, 模块与模块之间的调用关系之外, 还能在后面阅读代码时碰到对符号的引用时, 大概知道到哪里找它的定义, 对阅读和理解代码帮助会很大.
<p dir="auto">所以继前一篇 <a href="https://steemit.com/bitshares/@cifer/graphene" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">基础知识 之后, 本篇就来过一遍项目源码结构. 前一篇说了 Graphene 项目的源码已经并入 bitshares-core 项目维护了, clone 下来 bitshares-core 项目之后, 项目根目录的文件和目录很多, 但不难看出最重要的两个目录就是 <code>libraries/ 和 <code>progams/. <p dir="auto"><code>programs/ 目录组织比较简单, 一目了然. 不仅如此, 代码量也少, 基本上每个程序就一个 <code>main.cpp 源文件, 所以重中之重还在 <code>libraries. <p dir="auto"><code>libraries 的代码组织的可谓井井有条, 让人看了非常舒服: <p dir="auto">libraries: <pre><code>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/ <p dir="auto">可以看到, <code>libraries/ 下的几大模块一目了然, 明显看名字就知道是做什么的. 而且代码结构高度一致, cpp 文件都位于各自一级目录, hpp 文件都位于各自的 <code>include/graphene/ 目录下 . 首先是 <code>plugins 目录, bitshares 的每一项功能都被设计成可拆卸的, 我们可以选择只运行一个稳定节点 (delayed_node) 而不成为见证人, 也可以选择是否要包含历史查询功能. 这能帮助只有某些需求的人节省大量系统资源, 非常灵活. <p dir="auto">另外不得不说的一个模块是 <code>fc, 这实际上是 git submodule 引入的外部模块, <code>fc 最初也是 BM 开发的, 现在是并到 bitshares-fc 仓库了, <code>fc 是基础工具库, 提供了一般编程过程中会涉及到的异步, 多线程, 结构体序列化等方便的功能. <p dir="auto"><code>chain 模块稍微有点不一样, 它还包含了一个 <code>protocol 子模块. 在 <code>protocol 子模块中能看到熟悉的字眼如 block, transaction, operations... 另外 <code>chain 中还包含了两个重要的类: block_database 和 database, block_database 负责操作区块数据, database 实际上是继承了 <code>db::object_database 类, 同时负责操作数据索引以及调用 <code>block_database 操作区块数据. <p dir="auto"><code>app 和 <code>net 提供的也是核心功能, 包括节点发现, p2p 连接, rpc 服务提供, 消息 handler (交易处理) 等. <code>wallet 也自不必多说, 处理钱包文件等. <p dir="auto">最后是 <code>db 模块, 这里面定义了所有 bitshares 中的对象的基类以及索引结构, 上面说的 <code>ob::object_database 就是直接操作索引的类, 加上操作数据的 <code>chain::block_database 类, 就构成了 bitshares 数据库的主要部分. <p dir="auto">Ok, 本篇就这样吧, 后续再逐个剖析下上面的各个模块Graphene 源码阅读 ~ 源码结构
7 years ago in #bitshares by cifer (60)
$80.03
- Past Payouts $80.03
- - Author $60.43
- - Curators $19.60
21 votes
- adm: $67.14
- abit: $12.51
- schamangerbert: $0.13
- grzesiekb: $0.08
- nationalpark: $0.05
- cnbuddy: $0.04
- cifer: $0.02
- zagec: $0.02
- ety001: $0.02
- cherryloua: $0.01
- cuthamza: $0.01
- quicksnake: $0.00
- wanizubair: $0.00
- irisz: $0.00
- huwaid: $0.00
- mitchconnor: $0.00
- anniezhang: $0.00
- bobdos: $0.00
- coindzs: $0.00
- wuyueling: $0.00
- and 1 more
期待下篇子模块,最近正好在捣鼓里面的东西,官方文档又太旧。
期待多多评论交流啊, 有微信加个微信也行呀
可以加我微信quicksnake,最近和几个朋友在搞bts的手机钱包,欢迎大佬更多的给我们讲解代码。因为我自己不完全是开发方面的,所以也要仰仗各位大佬。
快写代码
好的😜 被大佬催突然感觉有压力了
了解项目的目录结构,很重要的基础工作,赞!
哈哈, 很浅薄的内容
干得好,我也想好好了解比特股底层结构。
赞。跟着学习
一起学习~