在Eclipse下运行比特币全节点之一

预备篇

运行环境:

操作系统: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导入:

 

 

猜你喜欢

转载自chen4w.iteye.com/blog/2286500