从日志上看启动了测试网络预设的4个测试节点:00,01,02,03启动,其中01,02,03设置00为其boot node。这里bitcoin-test打出的日志是00节点的debug日志。
三、测试网络手动区块生成和转账以及客户端应用API调用
我们采用各种情景循序渐进的方式加以介绍。
情形1: coinbase发行新币
比特币网络通过挖矿节点的挖矿奖励进行比特币的发行,起始时挖到一个区块可以得到50BTC,但是挖矿节点挖出的新币需要100个区块确认才可以被使用,我们将查看这一过程。
新起一个终端执行区块链网络的控制(该终端代称:testnet终端)
$ docker exec -itbitcoin-testnet bash
再起一个终端执行客户端的调用(该终端代称:testnet-client终端)
$ docker exec -itbitcoin-testnet-client bash
我们先通过testnet-client终端查看目前00节点的BTC余额情况
$ node listunspent
我们通过testnet-client终端查看到00节点可用的BTC余额为0。第一次执行listunspent脚本时会将为00节点预先准备的钱包导入到00节点上,钱包导入时需要钱包WIP(Wallet ImportFormat)和对应私钥。
下面通过testnet终端在00节点上人工产生100个区块。
# make generate0BLOCKS=100
从docker-compose启动的终端上可以看到新的区块被逐个加入到区块链上。
再通过testnet-client终端查看00节点目前可用余额情况,还是0。
# nodelistunspent00
通过testnet终端,我们在00节点上再执行一个区块的生成。
# make generate0BLOCKS=1
再通过testnet-client终端查看00节点,区块链高度101,目前可用余额变成50,而其导入的钱包TestWallet-m00的余额依然为0。
# nodelistunspent00
情形2:执行coinbase发行的新币到钱包转账
我们从00节点往01节点所持有的TestWallet-m01转入10BTC,然后通过人工产生区块模拟6个区块挖矿确认。(区块链网络经过6个区块确认,可以保证区块中的交易不可撤销,也就可以认定为可以花用的inputtransaction了。6个区块确认是在客户端上调用listunspent api设定的参数)
下面通过testnet终端在00节点往TestWallet-m01代表的钱包地址转账10BTC。
# make sendfrom0ADDRESS='mkq2mLXFX44YavfHDA2LT8pTYgbRPPdU15' AMOUNT=10
我们先通过testnet-client终端查看01节点,第一次执行listunspent脚本时会将为01节点预先准备的钱包导入到01节点上。
# nodelistunspent01
通过testnet终端,我们还是通过00节点模拟挖5个区块
# make generate0BLOCKS=5
再通过testnet-client终端查看01节点,区块链高度106,目前导入的钱包TestWallet-m01的余额为10,但是Unspent还是空的。
# nodelistunspent01
通过testnet终端,我们再让00节点挖出一个区块
# make generate0BLOCKS=1
再通过testnet-client终端查看01节点,区块链高度107,目前导入的钱包TestWallet-m01的余额为10,Unspent中也看到了金额为10BTC的可花交易。
# nodelistunspent01
情形3:执行钱包到钱包的转账
我们从TestWallet-m01 (当前可花10BTC)转账1BTC到TestWallet-m02。
先通过testnet-client终端查看02节点账户余额情况,第一次执行listunspent脚本时会将为02节点预先准备的钱包导入到02节点上。
# nodelistunspent02
通过testnet-client终端执行钱包TestWallet-m01到钱包TestWallet-m02的转账
# node RpcTestnet01
由于TestWallet-m01当前存在可花余额10BTC>转账金额1BTC,所以交易可以成功执行。
通过testnet-client终端查看02节点账户余额为0。
# nodelistunspent02
通过testnet终端,我们这次在01节点上执行5个区块确认
# make generate1BLOCKS=5
通过testnet-client终端查看02节点钱包TestWallet-m02余额为1,但可花依然为空。
# node listunspent02
通过testnet终端,在01节点上执行1个区块确认
# make generate1BLOCKS=1
再通过testnet-client终端查看02节点钱包TestWallet-m02余额为1,经过6个区块确认,Unspent中也看到了金额为1BTC的可花交易。
# nodelistunspent02
情形4:运用操作码OP_RETURN(ox6a)标记无效转账交易实现备注上区块链刻字
通过testnet-client终端运行OpreturnTestnet02
# nodeOpreturnTestnet02
由于存在unspent交易在TestWallet-m02(1BTC)上,这里只需花费矿工费用200000satoshi,找零还是打回TestWallet-m02。
通过testnet-client终端查看02节点钱包TestWallet-m02余额减少为0.998,由于找零还没有得到确认,可花交易为空。
# nodelistunspent02
通过testnet终端,在01节点上执行6个区块确认
# make generate1BLOCKS=6
在testnet-client终端再查看02节点钱包TestWallet-m02余额0.998BTC,可花交易0.998BTC。
# nodelistunspent02
这个过程可以反复执行,直到unspent不足以支付矿工打包费用。
# nodeOpreturnTestnet02
# make generate1BLOCKS=6
# nodelistunspent02