预备篇
运行环境:
操作系统:OSX10.11.3
JDK:JDK1.6+
eclipse:eclipse Luna+
什么是比特币?
比特币实验网络是“中本聪” 2009年发起建立的一个去中心化信任网络。它的原理阐述在在中本聪论文中:
《Bitcoin: A Peer-to-Peer Electronic Cash System》
如果你有兴趣了解比特币网络的运行细节,可以读读这本书:《Master bitcoin》
这本书的作者也是比特币投资者,这本书是介绍比特币系统运行机制最完整的一本书。
作者以比特币的常见功能为线索,带领读者进行一趟比特币之旅,从直接与用户交互的直观界面,输入输出。到后台的运行机制和模型,讲得很细。
中文版:http://zhibimo.com/read/wang-miao/mastering-bitcoin/mastering-bitcoin.pdf
英文版:http://pan.baidu.com/share/link?uk=2214641459&shareid=55602077&third=0&adapt=pc&fr=ftw
中文版的翻译质量也相当不错。直接阅读中文版就好。但是中文版中的链接和命令文本粘贴出来有问题,所以我尝试命令或者看链接,仍然用英文版
通过安装bitcoind节点,通过它内置的JSon-RPC, 可以以命令行方式交互 bitcoin-cli,跟着作者运行比特币的功能并观察可阅读的执行结果。
另外本书也推荐了一些开源比特币库,可以运行观察输入输出结果,作者主要用了比特币的Python实现 pycoin(代替bitcoind)用这些库可执行代码级的交互。
比特币的基本概念
这类文章巴比特上的写得简洁的也有很多,比如:
比特币私钥、公钥、钱包地址之间的关系》—— http://8btc.com/article-1960-1.html
比特币的数据结构
讲交易的数据结构的——http://618.io/2013/10/27/bitcoin-transaction-01/
上面那篇 结合比特币官方的数据结构定义,就一目了然了。上面那篇讲的是交易消息的内容,就是下面这篇中的payload那部分。
消息内容加上消息头,就是P2P协议所传播的一种类型消息——交易(tx)消息、其他还有block 消息、getblocks消息等等,
消息之间的应答关系,也在协议中说明了。
https://zh-cn.bitcoin.it/wiki/%E5%8D%8F%E8%AE%AE%E8%AF%B4%E6%98%8E
交易的签名构造和广播—— http://618.io/2013/10/27/bitcoin-transaction-02/
比特币的三种网络类型
好吧,说了那么多,做为程序员,想在本地运行一个全节点,有没有不花钱的路子呢?
有的!因为除了比特币正式网络(MainNet),开发人员可以通过两外两种测试网络运行自己的全节点。
https://bitcoin.org/en/developer-examples#testing-applications
其中TestNet 与MainNet的运行机制基本一致,只不过端口由8333换成了18333,而如果你还嫌TestNet下竞争生成Block太麻烦,
无论如何给我生成Block,那么就运行RegTest Mode好了。
一套程序,通过修改启动参数,即可运行在上述三种网络下。
bitcoinj
bitcoinj是bitcoin全节点的java实现。与比特币官方推荐的C++实现不同的是:目前它并没有内置RPC或命令行交互。
它的功能交互是通过几个example例子、tool、以及walletKit体现的。下面动手试试:
bitcoinj是用Maven管理的项目,代码寄放在github。
我们采用eclipse luna+,因为它集成了egit客户端和Maven插件。
用egit下载代码:
代码下载到本地之后,用import exsiting maven project导入: