轉(zhuǎn)自 https://blog.csdn.net/yzpbright/article/details/81004202
比特幣
一、安裝 Docker
二、安裝和運(yùn)行比特幣測試網(wǎng)絡(luò)(bitcoin-testnet)
1.下載比特幣測試網(wǎng)絡(luò)(bitcoin-testnet)的Docker鏡像
docker pull freewil/bitcoin-testnet-box
2.運(yùn)行Docker鏡像
docker run -t -i -p 19001:19001 -p 19011:19011 freewil/bitcoin-testnet-box
輸出如下類似:
@ubuntu:~$ sudo docker run -t -i -p 19001:19001 -p 19011:19011 freewil/bitcoin-testnet-box
tester@647e5bee8412:~/bitcoin-testnet-box$
3.啟動測試網(wǎng)絡(luò)
進(jìn)入Docker運(yùn)行環(huán)境后,輸入下面的命令來啟動兩個比特幣節(jié)點(diǎn),從而組成比特幣測試網(wǎng)絡(luò):
make start
輸出如下類似:
tester@647e5bee8412:~/bitcoin-testnet-box$ make start
bitcoind -datadir=1 -daemon
Bitcoin server starting
bitcoind -datadir=2 -daemon
Bitcoin server starting
啟動成功后,將在本機(jī)模擬運(yùn)行兩個比特幣測試錢包節(jié)點(diǎn),組成一個私有范圍的比特幣測試網(wǎng)絡(luò)。
輸入下面的命令可以查看測試網(wǎng)絡(luò)節(jié)點(diǎn)狀態(tài)信息:
make getinfo
輸出如下類似:
bitcoin-cli -datadir=1 getinfo //第一個錢包節(jié)點(diǎn)的信息
{
? “version”: 120100,
? “protocolversion”: 70012,
? “walletversion”: 60000,
? “balance”: 0.00000000,
? “blocks”: 0,
? “timeoffset”: 0,
? “connections”: 1,
? “proxy”: “”,
? “difficulty”: 4.656542373906925e-10,
? “testnet”: false,
? “keypoololdest”: 1467253951,
? “keypoolsize”: 101,
? “paytxfee”: 0.00000000,
? “relayfee”: 0.00001000,
? “errors”: “”
}
bitcoin-cli -datadir=2 getinfo //第二個錢包節(jié)點(diǎn)的信息
{
? “version”: 120100,
? “protocolversion”: 70012,
? “walletversion”: 60000,
? “balance”: 0.00000000,
? “blocks”: 0,
? “timeoffset”: 0,
? “connections”: 1,
? “proxy”: “”,
? “difficulty”: 4.656542373906925e-10,
? “testnet”: false,
? “keypoololdest”: 1467253951,
? “keypoolsize”: 101,
? “paytxfee”: 0.00000000,
? “relayfee”: 0.00001000,
? “errors”: “”
}
我們可以順便查看下兩個節(jié)點(diǎn)的bitcoin.conf文件是如何配置的
節(jié)點(diǎn)1的配置文件,路徑:/home/tester/bitcoin-testnet-box/1/bitcoin.conf
# testnet-box functionality
regtest=1
dnsseed=0
upnp=0
# listen on different ports than default testnet
port=19000
rpcport=19001
# always run a server, even with bitcoin-qt
server=1
# enable SSL for RPC server
#rpcssl=1
rpcallowip=0.0.0.0/0
rpcuser=admin1
rpcpassword=123
節(jié)點(diǎn)2的配置文件,路徑:/home/tester/bitcoin-testnet-box/2/bitcoin.conf
內(nèi)容類似節(jié)點(diǎn)1。
再順便查看下節(jié)點(diǎn)1的對等節(jié)點(diǎn)的信息:
tester@0cc1d63a966c:~/bitcoin-testnet-box$ bitcoin-cli -datadir=1 getpeerinfo
[
{
? "id": 0,
? "addr": "127.0.0.1:52766",
? "addrbind": "127.0.0.1:19000",
? "services": "000000000000040d",
? "relaytxes": true,
? "lastsend": 1531383259,
? "lastrecv": 1531383259,
? "bytessent": 429,
? "bytesrecv": 453,
? "conntime": 1531383259,
? "timeoffset": 0,
? "pingtime": 0.002959,
? "minping": 0.002959,
? "version": 70015,
? "subver": "/Satoshi:0.16.0/",
? "inbound": true,
? "addnode": false,
? "startingheight": 0,
? "banscore": 0,
? "synced_headers": -1,
? "synced_blocks": -1,
? "inflight": [
? ],
? "whitelisted": false,
? "bytessent_per_msg": {
? "feefilter": 32,
? "getheaders": 93,
? "ping": 32,
? "pong": 32,
? "sendcmpct": 66,
? "sendheaders": 24,
? "verack": 24,
? "version": 126
? },
? "bytesrecv_per_msg": {
? "feefilter": 32,
? "getaddr": 24,
? "getheaders": 93,
? "ping": 32,
? "pong": 32,
? "sendcmpct": 66,
? "sendheaders": 24,
? "verack": 24,
? "version": 126
? }
}
]
再順便查看下節(jié)點(diǎn)2的對等節(jié)點(diǎn)的信息:
tester@0cc1d63a966c:~/bitcoin-testnet-box$ bitcoin-cli -datadir=2 getpeerinfo
輸出與節(jié)點(diǎn)1類型
4. 初始化和區(qū)塊鏈數(shù)據(jù)
使用getnewaddress命令分別為兩個錢包生成一個地址(或者用命令 make address1 也可以):
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ bitcoin-cli -datadir=1 getnewaddress
2NAUVNvRVKn2QT2yoKYo1LXBBHES1DiiAWp
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ bitcoin-cli -datadir=2 getnewaddress
2N5czXHSEFronnYvMHUhSinQW8jjp7UjRtu
這里生成的KEY,根據(jù)具體情況會發(fā)生變化
查看地址對應(yīng)的私鑰:
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ bitcoin-cli -datadir=1 dumpprivkey 2NAUVNvRVKn2QT2yoKYo1LXBBHES1DiiAWp
cP5cEwanYgwJTUA6RG43DQ9p3ErpmqdPrJK7kX48zaMKkEfoL8s3
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ bitcoin-cli -datadir=2 dumpprivkey 2N5czXHSEFronnYvMHUhSinQW8jjp7UjRtu
cQ8UyP5CoJ2SbHXdJagxxHSjYnxd69kaCaSU7uMPq6iRxpEhpuYP
注意:在正式的比特幣網(wǎng)絡(luò)環(huán)境下,平均是10分鐘左右才能產(chǎn)生一個新的區(qū)塊。但在這里的測試網(wǎng)絡(luò)(testnet)特殊設(shè)定的環(huán)境下,區(qū)塊是通過簡單的命令控制就可以即時和批量產(chǎn)生的,方便程序開發(fā)測試。
生成一個區(qū)塊:
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make generate
輸出類似如下:
bitcoin-cli -datadir=1 generate 1
[
"5db89a9818792f8665b6540d32c3834856cb6a07ed34aecb03128e96cbe3658a"
]
繼續(xù)生成9個區(qū)塊:
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make generate BLOCKS=9
bitcoin-cli -datadir=1 generate 9
[
"61bc358db1ddb82972b830a00cb1dd27a7e6f3f5b409d667ff90af7a72caeb75",
"0eedb9ecb498df0e638013343ca97189ca768c54592ed5155a2ccbedf13f5309",
"7f74386d70b295102c5e44e373232648f7c07e00918c0b6de1ad033c3c121b38",
"7ca80b7bf1209d18e56b5c399992171c074c566e3109376b09877401b86a0b1d",
"61f0b2f3f4d2d4d199d7cbbed9bba721e65de3e30f474042c0eb4ce4cfc1ad54",
"2f97d16c46e5ccc46b795b9ee72f58720c494ae0f48d98d70a5b5a9e8b5be2ba",
"26edd9fd85b3e75ba7e731596ac065afbc29f68d8a6dd16f928d1e898ae18fb6",
"684fa2b10a662bffdd7e4e148e3a73c430cf7bbc14d0ed320200e008dd1ea625",
"2b62353790c59d2e643c815d56952264052dd99876a61e0d46e81accd7661262"
]
此時查看錢包信息:
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make getwalletinfo
輸出類似如下:
bitcoin-cli -datadir=1 getwalletinfo
{
"walletname": "wallet.dat",
"walletversion": 159900,
"balance": 0.00000000,
"unconfirmed_balance": 0.00000000,
"immature_balance": 500.00000000,
"txcount": 10,
"keypoololdest": 1531366844,
"keypoolsize": 999,
"keypoolsize_hd_internal": 1000,
"paytxfee": 0.00000000,
"hdmasterkeyid": "0ac63ad922d529b4ff4be71a10f1751c3978b5f5"
}
bitcoin-cli -datadir=2 getwalletinfo
{
"walletname": "wallet.dat",
"walletversion": 159900,
"balance": 0.00000000,
"unconfirmed_balance": 0.00000000,
"immature_balance": 0.00000000,
"txcount": 0,
"keypoololdest": 1531366844,
"keypoolsize": 999,
"keypoolsize_hd_internal": 1000,
"paytxfee": 0.00000000,
"hdmasterkeyid": "78f6a0f992aae42ff3504477f150a65e86c1f287"
}
結(jié)果顯示錢包1的balance(余額)里根本沒有任何比特幣,但immature_balance(未成熟的余額)里有相應(yīng)的500個比特幣,這是為什么呢?
結(jié)果顯示,錢包1和錢包2都有20個區(qū)塊了,沒有什么問題,那么為什么錢包1的balance里沒有比特幣呢?
繼續(xù)創(chuàng)建200個區(qū)塊:
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make generate BLOCKS=200
再查詢錢包余額:
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make getwalletinfo
bitcoin-cli -datadir=1 getwalletinfo
{
"walletname": "wallet.dat",
"walletversion": 159900,
"balance": 6000.00000000,
"unconfirmed_balance": 0.00000000,
"immature_balance": 3225.00000000,
"txcount": 220,
"keypoololdest": 1531366844,
"keypoolsize": 999,
"keypoolsize_hd_internal": 1000,
"paytxfee": 0.00000000,
"hdmasterkeyid": "0ac63ad922d529b4ff4be71a10f1751c3978b5f5"
}
bitcoin-cli -datadir=2 getwalletinfo
{
"walletname": "wallet.dat",
"walletversion": 159900,
"balance": 0.00000000,
"unconfirmed_balance": 0.00000000,
"immature_balance": 0.00000000,
"txcount": 0,
"keypoololdest": 1531366844,
"keypoolsize": 999,
"keypoolsize_hd_internal": 1000,
"paytxfee": 0.00000000,
"hdmasterkeyid": "78f6a0f992aae42ff3504477f150a65e86c1f287"
}
結(jié)果顯示錢包1的balance(余額)里6000個比特幣了。
到這里,可以初步得出結(jié)論是之前生成的20個區(qū)塊還太”新鮮”,不夠”老”,需要后面生成更多的區(qū)塊來完成確認(rèn)。
(補(bǔ)充:后來查詢資料知道,挖礦所得的coinbase交易中的獎勵必須要在100個區(qū)塊深度之后才能花費(fèi)。)
給錢包2轉(zhuǎn)賬,這里轉(zhuǎn)10個比特幣:
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make sendfrom1 ADDRESS=2N5czXHSEFronnYvMHUhSinQW8jjp7UjRtu AMOUNT=10
bitcoin-cli -datadir=1 sendtoaddress 2N5czXHSEFronnYvMHUhSinQW8jjp7UjRtu 10
967d37c71c1f768ff75e8ee675cf0dc5899a953bb4954b3b0f8ad3f25fc2aa52
這時,查詢錢包余額,
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make getwalletinfo
結(jié)果顯示錢包2的10個比特幣還未確認(rèn)。
好辦,繼續(xù)生成10個區(qū)塊,使得交易得到確認(rèn):
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make generate BLOCKS=10
這時,再查看錢包余額:
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make getwalletinfo
從結(jié)果可以看到錢包2的10個比特幣到賬了,說明交易得到了確認(rèn)。
浙公網(wǎng)安備 33010602011771號