bitcoin-cli 或者 bitcoin core wallet 的 console,支持很多命令,可以获得区块链相关的很多信息,一步步实验和解析下命令的输出。
getwalletinfo
获取钱包相关的一些信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
{
"walletname": "wallet.dat",
"walletversion": 159900,
"balance": 0.00000000,
"unconfirmed_balance": 0.00000000,
"immature_balance": 0.00000000,
"txcount": 0,
"keypoololdest": 1532923740,
"keypoolsize": 1000,
"keypoolsize_hd_internal": 1000,
"paytxfee": 0.00000000,
"hdmasterkeyid": "a50eea8496c072b54f4f0b2937e3edb7bbc4761d"
}
- balance: 已确认的余额,包括挖矿或者普通交易
- unconfirmed_balance: 未确认的余额,确认数为0,普通交易
- immature_balance: 未成熟的余额,确认数小于100,只针对挖矿
- txcount: 钱包内的 transaction 数量
- keypoololdest: 最先生成的 key 的时间戳
- keypoolsize: 预生成的 key 数量,外部的 key
- keypoolsize_hd_internal: 预生成的 key 数量,内部的 key,为 hd 使用
- paytxfee: 预设的支付费用
- hdmasterkeyid: masterkey 的 Hash160
getblockchaininfo
获得区块链的信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
{
"chain": "main",
"blocks": 539741,
"headers": 539741,
"bestblockhash": "0000000000000000000137324acb33a45f61d442cd767420ea934816ac20622c",
"difficulty": 6727225469722.534,
"mediantime": 1535947766,
"verificationprogress": 0.9999988951741678,
"initialblockdownload": false,
"chainwork": "000000000000000000000000000000000000000003028651fd95478395288650",
"size_on_disk": 207037656735,
"pruned": false,
"softforks": [
{
"id": "bip34",
"version": 2,
"reject": {
"status": true
}
},
{
"id": "bip66",
"version": 3,
"reject": {
"status": true
}
},
{
"id": "bip65",
"version": 4,
"reject": {
"status": true
}
}
],
"bip9_softforks": {
"csv": {
"status": "active",
"startTime": 1462060800,
"timeout": 1493596800,
"since": 419328
},
"segwit": {
"status": "active",
"startTime": 1479168000,
"timeout": 1510704000,
"since": 481824
}
},
"warnings": ""
}
blocks & headers: 当前的区块链高度
bestblockhash: 当前的最优块(被确认最多的块)的 hash
difficulty: 当前难度值
mediantime: 最后块之前的 11 个块的中间时间,后续有效块的时间不能早于这个中间时间
verificationprogress: 验证的进程,从 0 到 1
chainwork: 按照现在的难度,重新生成目前这么多区块,一共有多少工作量。公式是
\[区块数 * 难度 * [0x01,0001,0001]\]size_on_disk: 所有区块所需的存储空间
pruned: 是否删减区块
softforks: 软分叉是为了升级区块链规则或修复 BUG,不会出现新的币种 前面 3 个,BIP34、66、65,是老版本的软分叉,每次升级 version 递增。
后面 2 个,csv、segwit,采用了 BIP9 定义的新的软分叉规则,不再使用 version 递增的方式,而是引入了“版本位”、“开始时间”、“超时”、“状态”等概念。active 就代表已经成功激活。来自 BIP9
都是去中心化的思想,版本是否更新也是由大家决定的
这里有一个 95% 原则,如果一定时间内的所有区块的 95% 使用了这个软分叉的版本,那么就上线这个版本(变为 active),从这时候开始,所有不遵守新版本规则的区块,将不会被矿工们验证通过。
getblockhash
获取某个区块的 hash
1
2
>> getblockhash 1000
00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09
这里获取的是第 1000 个区块的 hash
getblock
获取某个区块信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>> getblock 00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09
{
"hash": "00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09",
"confirmations": 538753,
"strippedsize": 216,
"size": 216,
"weight": 864,
"height": 1000,
"version": 1,
"versionHex": "00000001",
"merkleroot": "fe28050b93faea61fa88c4c630f0e1f0a1c24d0082dd0e10d369e13212128f33",
"tx": [
"fe28050b93faea61fa88c4c630f0e1f0a1c24d0082dd0e10d369e13212128f33"
],
"time": 1232346882,
"mediantime": 1232344831,
"nonce": 2595206198,
"bits": "1d00ffff",
"difficulty": 1,
"chainwork": "000000000000000000000000000000000000000000000000000003e903e903e9",
"nTx": 1,
"previousblockhash": "0000000008e647742775a230787d66fdf92c46a48c896bfbc85cdc8acc67e87d",
"nextblockhash": "00000000a2887344f8db859e372e7e4bc26b23b9de340f725afbf2edb265b4c6"
}
这里的信息都很熟悉,只说下面两个:
- weight: 重量,这个是 segwit 引入的概念,用来计算手续费
- tx: 这里面是所有的 transaction 的 hash,这里只有一个,是挖矿的
getrawtrasaction
根据 transaticon 的 hash 来获得原始数据
1
2
3
>> getrawtransaction fe28050b93faea61fa88c4c630f0e1f0a1c24d0082dd0e10d369e13212128f33
01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0804ffff
001d02fd04ffffffff0100f2052a01000000434104f5eeb2b10c944c6b9fbcfff94c35bdeecd93df977882babc7f3a2cf7f5c81d3b09a68db7f0e04f21de5d4230e75e6dbe7ad16eefe0d4325a62067dc6f369446aac00000000
简单解析下,注意啊,都是小端的:
1
2
3
4
5
6
7
8
9
10
11
12
01000000, version
01, txin num
0000000000000000000000000000000000000000000000000000000000000000, 预设值
ffffffff, 预设值
08, coinbase len
04ffff001d02fd04, coinbase
ffffffff, sequence
01, txout num
00f2052a01000000, 50 btc
43, script len
4104f5eeb2b10c944c6b9fbcfff94c35bdeecd93df977882babc7f3a2cf7f5c81d3b09a68db7f0e04f21de5d4230e75e6dbe7ad16eefe0d4325a62067dc6f369446aac
00000000, locktime
也可以使用下面的命令来解析
decoderawtransaction
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
>> decoderawtransaction 01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0804ffff001d02fd04ffffffff0100f2052a01000000434104f5eeb2b10c944c6b9fbcfff94c35bdeecd93df977882babc7f3a2cf7f5c81d3b09a68db7f0e04f21de5d4230e75e6dbe7ad16eefe0d4325a62067dc6f369446aac00000000
{
"txid": "fe28050b93faea61fa88c4c630f0e1f0a1c24d0082dd0e10d369e13212128f33",
"hash": "fe28050b93faea61fa88c4c630f0e1f0a1c24d0082dd0e10d369e13212128f33",
"version": 1,
"size": 135,
"vsize": 135,
"locktime": 0,
"vin": [
{
"coinbase": "04ffff001d02fd04",
"sequence": 4294967295
}
],
"vout": [
{
"value": 50.00000000,
"n": 0,
"scriptPubKey": {
"asm": "04f5eeb2b10c944c6b9fbcfff94c35bdeecd93df977882babc7f3a2cf7f5c81d3b09a68db7f0e04f21de5d4230e75e6dbe7ad16eefe0d4325a62067dc6f369446a OP_CHECKSIG",
"hex": "4104f5eeb2b10c944c6b9fbcfff94c35bdeecd93df977882babc7f3a2cf7f5c81d3b09a68db7f0e04f21de5d4230e75e6dbe7ad16eefe0d4325a62067dc6f369446aac",
"reqSigs": 1,
"type": "pubkey",
"addresses": [
"1BW18n7MfpU35q4MTBSk8pse3XzQF8XvzT"
]
}
}
]
}
还是上面那些内容,这样看起来或许直观点。
dumprivkey & importprivkey
这两个可以导出某个地址的私钥,或者将某个私钥导入钱包
dumpwallet
将钱包的所有私钥和地址导出,开启了 HD 的话,会导出很多
其他的命令就不一一介绍了,如果以后发现了有趣的命令,再增加进来。