Bitcoin有三个独立的网络:Mainnet、Testnet、Regtest。
Mainnet(主网)是作为官方版本使用的网络,它具有一定的价值。所有真实的交易都发生在这个网络上,人们通过mainnet获得报酬。
Testnet(测试网),一个与主网具有几乎相同规则的网络(一些操作码在mainnet上是禁止的,而在Testnet上取消了这个限制)。它有对等点发现功能,即它可以在testnet网络上找到类似于mainnet的对等点,并且运行它的是一个对等点(p2p)网络。
Regtest是一个私有的区块链,它具有与testnet相同的规则和地址格式,但是没有要连接到的全局p2p网络。该网络下可以使用一个简单的命令在没有使用挖矿硬件下挖掘区块。
首先在github上下载bitcoin源码:
git clone https://github.com/bitcoin/bitcoin.git
编译:
./ autogen.sh
./configure --prefix=/usr_dir --enable-wallet
make && sudo make install
Configure过程中会提示缺少对应的库,按照提示按照即可。如果出现兼容的问题,请在./configure的参数中加上:--with-incompatible-bdb
为了方便测试,可以把bitcoin对应的命令通过软链接的方式创建到bin目录下:
sudo ln -s /your_dir/bitcoind /usr/local/bin/bitcoind
sudo ln -s /your_dir/bitcoin-cli /usr/local/bin/bitcoin-cli
启动Mainnet:bitcoind -daemon 启动后会通过内置的地址去寻找其他节点。
启动Testnet:bitcoind -testnet -daemon 启动后,它也会根据内置其他节点地址去P2P学习链接其他节点。
启动Regtest:bitcoind -regtest -daemon 启动后,它是一个本地私有节点,不会同步数据。
不过在启动网络时一般都会加入其它参数,可以通过配置文件或者命令行的方式配置参数,以下是启动regtest网络的配置文件:
#配置文件默认在user/.bitcoin/下,如果需要指定数据文件的路径加入datadir即可
regtest=1
rpcbind=127.0.0.1
rpcallowip=127.0.0.1
rpcuser=test
rpcpassword=test
server=1
daemon=1
txindex=1
然后执行执行bitcoin命令便可启动
bitcoind
Bitcoin Core starting
bitcoin-cli stop #关闭网络
bitcoin-cli getnetworkinfo #查看网络状态
bitcoin-cli getpeerinfo #查看网络节点
bitcoin-cli getblockchaininfo #查看区块链信息:如同步进度
bitcoin-cli help #查看所有命令
生产一个用于接收付款的bitcoin地址
bitcoin-cli getnewaddress
2MvFrKgUR8xYLzYD6dR5mAuySULqgL8MEcF
为指定地址立即生产指定数量区块。
注意bitcoin-0.18版本之后,regtest网络不再使用generate命令生产区块,用以代替的是generatetoaddress命令
Generatetoaddress nblocks [address] [maxtries]
参数:
Nblocks:生产的区块数量;
Address:将新生成的比特币发送到的地址;
Maxtries:重复次数
bitcoin-cli generatetoaddress 10 2MvFrKgUR8xYLzYD6dR5mAuySULqgL8MEcF
[
"4d98b03ef7cc9e6074db11685a298059ed4aa942b08949d080067e3f490b6569",
"6738a949c6039b7c4760514c299b0206da26bbd503847da92e30c98a7407b7d9",
"0713a96da679d7274143cc5c045efb8bd311d1979290c4c5ccfde0810b1ff865",
"7ad0d6f65df41435909d281d9d99405a43b487b17c3f7fa6f7305884b294f154",
"00f66d0e4495bc2f4fb1714e4b2470b1bb8b64287453d7fb1efb9550c2c13cdc",
"58c69c45026cd1f179d526b3f1df8f0d6869a10ad81762df4d73c498e64d0f3b",
"4c43bcd992d4f47b6fa3f21e6f342e98a3b49eb278ccc2853e0e1a89655c59b2",
"4ef2e0a6e39950060fc6570f4f5fb0b4bbcc4311556212b2c329c113541cbf24",
"2cf103f36f77a98a1097dd7bae834909542010fcc4e8270a16ea3eeb2ecd3001",
"7a6e56731f890a26190de403ccd62659dbb782c54c3ba81500341686deba4b70"
]
查看余额总数,即挖矿奖励
参数:
dummy:向后兼容,必须设置为“*”;
minconf:只包括至少确认了指定次数的交易
include_watchonly:包括在watch-only地址中的余额
bitcoin-cli getbalance
14724.21875000
分组显示每个地址余额信息
bitcoin-cli listaddressgroupings
[
[
[
"2MvFrKgUR8xYLzYD6dR5mAuySULqgL8MEcF",
14732.03125000,
""
]
],
[
[
"2MyHZ8Ep3GFFb8zj8Rekvk48mxgaG2CEQ8E",
0.00000000,
""
]
]
]
将钱包解密密钥存储在内存中timeout秒。
在执行与私钥相关的事务前,这是必须操作。
参数:
passphrase:必须项。钱包密码。
timeout:必须项。保存解密密钥的时间(以秒为单位)。限制在最多1073741824(2^30)秒。任何大于1073741824秒的值将被设置为1073741824秒。
注意:
在钱包已经解锁时发出walletpassphrase命令将设置一个新的解锁时间并覆盖旧解锁时间。
bitcoin-cli walletpassphrase "my passphrase" 60 #解锁钱包60秒
bitcoin-cli walletlock #锁定钱包。在调用此方法之后,您需要再次调用walletpassphrase,然后才能调用需要解锁钱包的任何方法。
参数:
address:字符串,要发送到的比特币地址
amount:数值,发送数量
comment:字符串,用于存储事务用途的注释。这不是交易的一部分,只是放在你的钱包里。
comment_to:字符串用于存储要向其发送事务的人或组织的名称的注释。
subtractfeefromamount:布尔值,费用是否从发送的金额中扣除,如果是接收者收到的比特币将少于你在“金额”栏中输入的比特币。
replaceable:布尔值,允许通过BIP 125用更高费用的交易代替此交易
conf_target
estimate_mode:字符串,费用估算模式:UNSET,ECONOMICAL,CONSERVATIVE三种模式
注:1,2项为必须,其余为可选项
bitcoin-cli sendtoaddress 2MyHZ8Ep3GFFb8zj8Rekvk48mxgaG2CEQ8E 1.5 #项该地址转1.5个币
437d17fc8cbb869baf7263c4931e55ea47c70038c648f296b4f3ba0c8d4ad426
#查询结果
bitcoin-cli listaddressgroupings
[
[
[
"2MuRGmAPbuVUDqh6hd3nH2d1CoppF1ZxXZf",
0.06246680
],
[
"2MvFrKgUR8xYLzYD6dR5mAuySULqgL8MEcF",
14730.46875000,
""
]
],
[
[
"2MyHZ8Ep3GFFb8zj8Rekvk48mxgaG2CEQ8E",
1.50000000,
""
]
]
]
查看有关区块链处理的各种状态信息。
bitcoin-cli getblockchaininfo
{
"chain": "regtest",
"blocks": 1020,
"headers": 1020,
"bestblockhash": "4bd12c2c27a1c8e61a0dd68993a9b31bd541bd182e16439d3451b9348952168a",
"difficulty": 4.656542373906925e-10,
"mediantime": 1572588071,
"verificationprogress": 1,
"initialblockdownload": false,
"chainwork": "00000000000000000000000000000000000000000000000000000000000007fa",
"size_on_disk": 307170,
"pruned": false,
"softforks": {
"bip34": {
"type": "buried",
"active": true,
"height": 500
},
"bip66": {
"type": "buried",
"active": false,
"height": 1251
},
"bip65": {
"type": "buried",
"active": false,
"height": 1351
},
"csv": {
"type": "buried",
"active": true,
"height": 432
},
"segwit": {
"type": "buried",
"active": true,
"height": 0
},
"testdummy": {
"type": "bip9",
"bip9": {
"status": "active",
"start_time": 0,
"timeout": 9223372036854775807,
"since": 432
},
"height": 432,
"active": true
}
},
"warnings": ""
}