这个项目基于bitcoin v0.3.24,通过修改源码中的参数,建立一个独立的对等网络,与原本的比特币互不兼容。
选择这个release作为开发起点的原因:
- v0.2.7 增加命令行模式bitcoind
- v0.3.21 加入UPNP网络协议
以上两个功能在实验环境中需要,所以选择v0.3的最后一个release v0.3.24.
需要两个以上节点,节点通过IP直接连接来初始化分布式网络。
可以两个节点在同一内网;或者一内网一公网,内网节点通过IP连接外网节点。
我的编译环境:
- Win7 64bit: mingw32 GNU Make 3.82
- Ubuntu 16.10: gcc 6.2.0
参考编译文档doc/build-msw.txt
下载安装:
- tdm-gcc-4.5.1 务必安装32位版本,即MinGW32
- MSYS 1.0.11
下载编译:
- boost_1_43_0
- db-4.7.25.NC
- openssl-1.0.0d
- wxWidgets-2.9.1
- upnpc-exe-win32-20110215 (可选)
修改src/makefile.mingw,改变依赖库的绝对路径,尝试编译:
mingw32-make bitcoin.exe bitcoind.exe -f makefile.mingw
编译成功后,开始下一步修改网络参数。
我在Ubuntu 16.10环境下只编译了命令行形式的bitcoind,没有编译图形化界面bitcoin,原因是这个release依赖的wxWidgets 2.9.0与gcc 6.2兼容性差。
参考编译文档doc/build-unix.txt
下载编译:
- boost_1_57_0
- db-4.7.25.NC
- miniupnpc-1.5 (可选)
修改src/makefile.unix,添加编译参数-std=c++03 -fpermissive
,改变库的路径,尝试编译bitcoind:
make -f makefile.unix bitcoind
编译成功后,开始下一步修改网络参数。
- 删除hard coding的checkpoint
- 改写hard coding的区块高度nTotalBlocksEstimate
- 删除种子节点pnSeed
- 跳过IRC连接
- 跳过DNSSeed发现
- 改变最小挖矿难度限制 bnProofOfWorkLimit
- 改变预期区块产生时间、难度调整周期nTarget
- 改变创世区块 (这个好复杂.. 先跳过)
- 改变网络端口
- 限制挖矿CPU核数fLimitProcessors
假设Ubuntu的ip是1.2.3.4,先启动Ubuntu的bitcoind,然后启动Win7的bitcoin客户端连接Ubuntu节点。
1.在Ubuntu上设置rpcpassword
mkdir -p ~/.bitcoin && echo rpcpassword=*** > ~/.bitcoin/bitcoin.conf
2.在Ubuntu运行bitcoind
./bitcoind -gen
3.在Win7打开cmd.exe,运行客户端
bitcoin.exe -gen -addnode=1.2.3.4
区块数据文件默认保存在:
- Win: %APPDATA%\Bitcoin
- Ubuntu: ~/.bitcoin
-
blkindex Error
原因是新的节点还没生成高度1的区块即退出,删除区块数据目录下的blkindex.dat,重新启动程序即可。