惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - 陈峰

yamux多路复用的使用例子 golang struct golang channel golang context - 陈峰 - 博客园 发布spring cloud + vue项目 以太坊上发行ERC20代币 [转]大白话讲解Promise(一) 非对称加密, 助记词, PIN, WIF 搭建EOS未完 - 陈峰 - 博客园 解决 Unknown action buyram in contract eosio 错误 [转]EOS智能合约 & 私链激活 & 基本操作 [转]https://www.jianshu.com/p/06443248f4d8 web3js 进行转账 [转]How to Send Ethereum with Web3.js and Node 【转】干货 | 【虚拟货币钱包】从 BIP32、BIP39、BIP44 到 Ethereum HD Wallet 钱包,卡 [转]vux使用教程 [转]CentOS7利用systemctl添加自定义系统服务 [转]重定向输出
比特币测试网络搭建
陈峰 · 2018-11-28 · via 博客园 - 陈峰

转自 https://blog.csdn.net/yzpbright/article/details/81004202

比特币

一、安装 Docker

二、安装和运行比特币测试网络(bitcoin-testnet)

1.下载比特币测试网络(bitcoin-testnet)的Docker镜像

docker pull freewil/bitcoin-testnet-box

2.运行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.启动测试网络

进入Docker运行环境后,输入下面的命令来启动两个比特币节点,从而组成比特币测试网络:

make start

输出如下类似:

tester@647e5bee8412:~/bitcoin-testnet-box$ make start
bitcoind -datadir=1 -daemon
Bitcoin server starting
bitcoind -datadir=2 -daemon
Bitcoin server starting

启动成功后,将在本机模拟运行两个比特币测试钱包节点,组成一个私有范围的比特币测试网络。

输入下面的命令可以查看测试网络节点状态信息:

make getinfo

输出如下类似:

bitcoin-cli -datadir=1 getinfo //第一个钱包节点的信息
{
​ “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 //第二个钱包节点的信息
{
​ “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.conf文件是如何配置的
节点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

节点2的配置文件,路径:/home/tester/bitcoin-testnet-box/2/bitcoin.conf

内容类似节点1。

再顺便查看下节点1的对等节点的信息:

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
​ }
}
]

再顺便查看下节点2的对等节点的信息:

tester@0cc1d63a966c:~/bitcoin-testnet-box$ bitcoin-cli -datadir=2  getpeerinfo

输出与节点1类型

4. 初始化和区块链数据

使用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,根据具体情况会发生变化

查看地址对应的私钥:

tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ bitcoin-cli -datadir=1  dumpprivkey  2NAUVNvRVKn2QT2yoKYo1LXBBHES1DiiAWp
cP5cEwanYgwJTUA6RG43DQ9p3ErpmqdPrJK7kX48zaMKkEfoL8s3
tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ bitcoin-cli -datadir=2  dumpprivkey  2N5czXHSEFronnYvMHUhSinQW8jjp7UjRtu
cQ8UyP5CoJ2SbHXdJagxxHSjYnxd69kaCaSU7uMPq6iRxpEhpuYP

注意:在正式的比特币网络环境下,平均是10分钟左右才能产生一个新的区块。但在这里的测试网络(testnet)特殊设定的环境下,区块是通过简单的命令控制就可以即时和批量产生的,方便程序开发测试。

生成一个区块:

tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make generate

输出类似如下:

bitcoin-cli -datadir=1 generate 1
[
"5db89a9818792f8665b6540d32c3834856cb6a07ed34aecb03128e96cbe3658a"
]

继续生成9个区块:

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"
}

结果显示钱包1的balance(余额)里根本没有任何比特币,但immature_balance(未成熟的余额)里有相应的500个比特币,这是为什么呢?

结果显示,钱包1和钱包2都有20个区块了,没有什么问题,那么为什么钱包1的balance里没有比特币呢?

继续创建200个区块:

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"
}

结果显示钱包1的balance(余额)里6000个比特币了。

到这里,可以初步得出结论是之前生成的20个区块还太”新鲜”,不够”老”,需要后面生成更多的区块来完成确认。

(补充:后来查询资料知道,挖矿所得的coinbase交易中的奖励必须要在100个区块深度之后才能花费。)

给钱包2转账,这里转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

结果显示钱包2的10个比特币还未确认。

好办,继续生成10个区块,使得交易得到确认:

tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make generate BLOCKS=10

这时,再查看钱包余额:

tester@0f4ec9f7a91a:~/bitcoin-testnet-box$ make getwalletinfo

从结果可以看到钱包2的10个比特币到账了,说明交易得到了确认。