bitcoinj的介绍:
bitcoinj提供了一个与Bitcoin协议交互的类库。bitcoinj维护了一个钱包(wallet),以及发送/接收交易(transactions)的方法,此外还维护了许多其他的功能特点,将会在下面一一列举。
Feature 1: 高度优化的简单支付验证(simplified payment verification,既SPV)。在这种模式下,只有一部分区块链会被下载到本地,这允许了bitcoinj运行在一些轻量级的设备上,例如智能手机或者是个人虚拟网络中。
Feature 2:维护了一个加密的Wallet类,可以通过这个类进行费率计算,加签,生成秘钥(Key),插件化的比特币选择,持有比特币,这个类支持扩展,并且可以添加事件监听器。(后面会单独介绍这个类的)
Feature 3:提供了一个简单的GUI Wallet 应用,可以通过这个自定义属于你自己的app
Feature 4:提供一套实验性的完整验证模式,这个模式完成了和比特币核(Bitcoin core)一样的验证工作。在这个模式中,未被消费的交易(transaction)输出集合会被计算出来, 并且你可以通过PostgreSQL存储,用索引的方式通过地址(address)回溯整个账本的余额。
Feature 5:支持小额交易渠道(micropayment channels),可以通过这个构建客户端和服务器端的多重签名的合约(multi-signature contract),然后就在这种渠道上进行更快速的小额交易,并且避免了费率问题。
bitcoinj是由Java语言实现的,但是可以被运行再JVM上的其他语言所使用,例如Python或者 JavaScript。
bitcoinj 的组件
bitcoinj 内置了日志(logging)和断言(assertions)。bitcoinj可以通过Maven或者Gradle的方式来进行构建。
一个bitcoinj应用包含了一下一些模块:
NetworkParameters 实例,提供了一个可选的生产或测试的网络环境
Wallet实例,保存 ECKeys 和其他的数据
PeerGroup实例,管理网络连接
BlockChain实例,维护了让Bitcoin运行的一个全局的共享的数据结构
BlockStore实例,存储了Block Chain的数据结构,例如存放在硬盘上
WalletEventListener的实现,监听Wallet 事件
一个基本的应用包括了以上几个模块,bitcoinj还提供了一个简化的 WalletAppKit 类,这个类创建了以上所有的对象,并且连接了各个模块的功能。
现在我们开始使用 WalletAppKit 构建一个程序
首先,使用工具类的方法配置log4j
1 BriefLogFormatter.init(); 2 if (args.length < 2) { 3 System.err.println("Usage: address-to-send-back-to [regtest|testnet]"); 4 return; 5 }
然后通过可选的命令行参数来选择需要的网络环境