一、 环境依赖
OS 选择:
ubuntu 14 ~ 15 均可
为了减少实践过程中出现的大量的依赖库的安装的繁琐程度,推荐ubuntu,当然其他发行版的Linux也是可以的。

开发倚赖包:

1
2
3
4
5
apt-get install libboost-all-dev
apt-get install openssl
apt-get install libssl-dev
apt-get install libdb5.3++-dev
apt-get install libminiupnpc-dev

secp256k1 库已经被包含,由于secp256k1库更新较快,必须match指定版本才能work,当前版本并不支持最新版本的secp256k1.

代码获取:

git clone https://github.com/betachen/ttcoin.git
共识模型基于 Pow + Pos

二、编译
本文只研究核心代码, qt部分代码不考虑,进入目录 ttcoin/src
直接make, 如果编译过程中出现了not found某某依赖包,直接拷贝名称安装即可,需要注意版本
大约等待10几分钟,编译完成可以看到生成了ttcoind。
如果需要完全创建自己的区块链,请按照《从 0 到 1 建立自己的区块链》修改少量hard codeing的代码重新编译即可。
其中hashGenesisBlock部分的代码已经在文件中,只需打开条件编辑即可生成创世块

三、尝试单机运行
第一次运行需要配置一些简单的参数,根据提示设置即可
默认交易端口是12009,使用debug命令可以在 ~/.ttcoin/debug.log 看到更详细的信息

1
./ttcoind -debug
因为是从bitcoin fork过来的,所以可以使用bitcoin绝大部分的JsonRPC:
https://blockchain.info/api/json_rpc_api

四、挖矿
当你的binary可以运行了,你真正的旅程才开始:先挖矿产出币,接下来再尝试多节点运行–>多节点交易
理想的情况是,运行Binary以后,会出块产生coinbase交易。

(挖矿分为SOLO和POOL两种方式
SOLO单机就可以,但是效率会很低,初始块可能将近1个小时左右才能出来
POOL挖矿可以线性减少时间)

五、尝试多节点运行
bitcoin是一种P2P网络,可以使用下面的方式理解。
假设存在A、B、C、D四个核心节点
当B、C、D都和A链接时,A会告诉A都链接了谁,这样就形成互通的P2P网络。
使用命令链接peer:

./ttcoind -debug -addnode=192.168.1.2

六、多节点相互交易
可以参考bitcoind的用法进行交易

七、代码剖析
ttcoind 是从 bitcoind.cpp 的 main函数进入的
真正执行初始化的是AppInit2函数

1
fRet = AppInit2(threadGroup);
在AppInit2中我们可以看到起了约7个线程

(后续更新)