Tinychain是一个由python实现的比特币简易版,开发者是James O'Beirne,比特币源码开发维护团队成员之一。Tinychain的代码非常精简,总共一千多行,如果你想我一样不懂C++,又想从源码角度学习比特币,不妨从tinychain入手,理解比特币代码的架构。
git clone https://github.com/jamesob/tinychain.gitvirtualenv --python=python3.6 venv && . venv/bin/activatepip install -r requirements.txtdocker-compose up命令,这会产生两个tinychain节点,同时会出现两个address,把它记录下来,后面收款付款会用到。./bin/sync_wallets命令。这个命令作用是将两个容器的tinychian节点初始的钱包信息展示出来。就像这样:./bin/sync_wallets
Synced node1's wallet:
[2018-12-14 17:27:45,161][tinychain:1109] INFO your address is 1HGpSwYVCpCH52VxCcnNtNgXnHQcQVUyAy
3598.0 ⛼
Synced node2's wallet:
[2018-12-14 17:27:46,906][tinychain:1109] INFO your address is 153Gxg4HNyknpn88Ga9V7a2aArgZxbD6Yw
3751.999994 ⛼
注意:./bin/sync_wallets这个脚本可能会报这样的错误:AssertionError: assert len(string) == curve.baselen, (len(string), curve.baselen)
我把它改了一下,可以顺利运行,供大家参考。代码如下:
#!/bin/bash
docker-compose exec node1 cat wallet.dat > wallet1.dat
echo "Synced node1's wallet:"
./client.py balance --wallet wallet1.dat
echo
node2id=$(docker ps | grep 'node2' | awk '{print $1}')
docker cp ${node2id}:/wallet.dat ./wallet2.dat
echo "Synced node2's wallet:"
./client.py balance --wallet wallet2.dat
./client.py balance -w wallet1.dat可以查看wallet1.dat文件对应的钱包信息。ps: wallet.dat实际上存储的是私钥。./client.py send -w wallet2.dat 1898KEjkziq9uRCzaVUUoBwzhURt4nrbP8 1337./client.py status e8f63eeeca32f9df28a3a62a366f63e8595cf70efb94710d43626ff4c0918a8a e8f63eeeca32f9df28a3a62a366f63e8595cf70efb94710d43626ff4c0918a8a是交易的哈希值(client.py还有更多的方法,输入./client.py --help可获取。大家可以下载tinychain的源码按照上述例子运行测试一下效果,更多的代码分析敬请期待!