实验1 初步熟悉比特币客户端

三葉Leaves Author

以下内容是我测试 Bitcoin Core 的实验相关内容,这玩意简单来说就是能挖矿。

1. 配置比特币客户端

环境搭建

Quote

点击“环境变量”,找到并选择系统变量中的Path,点击编辑变量: 点击“新建”,将比特币安装路径比特币安装路径\daemon\添加到变量中

值得注意的是,如上是比特币客户端的程序安装路径,但是比特币客户端的程序数据路径一般默认会在 C 盘,可能在这两个位置:

  • 旧版本:%APPDATA%\Bitcoin\
  • 新版本:C:\Users\26646\AppData\Local\Bitcoin

注意把用户名字段 26646 替换成你自己的。

配置回归测试模式(Regtest Mode)

回归测试模式可以在不消耗真实算力的情况下测试比特币挖矿等各种流程,相关对比如下:

与其他网络模式的对比

  1. 主网(Mainnet)
  • 真实的比特币网络
  • 使用真实的比特币
  • 需要实际算力挖矿
  1. 测试网(Testnet)
  • 公共测试网络
  • 使用测试币
  • 需要连接外部节点
  1. 回归测试网(Regtest)
  • 私有测试环境
  • 完全控制
  • 本地独立运行

在刚才的C:\Users\26646\AppData\Local\Bitcoin中新建配置文件bitcoin.conf内容如下:

1
2
3
regtest=1
[regtest] #在新版本中必须加上这个块标识,否则会报错
rpcport=8332

然后终端运行 bitcoind 命令,确实多了一个文件夹,如图表1:

图表 1
图表 1

分析回归测试模式日志

分析终端输出的日志,能有以下关键信息:

1
2
2025-03-24T06:43:41Z * Using 8.0 MiB for chain state database
2025-03-24T06:43:41Z * Using 440.0 MiB for in-memory UTXO set (plus up to 286.1 MiB of unused mempool space)

可见为链上交易状态(chain state)分配了8.0 MiB的数据库空间,以及440.0 MiB的内存UTXO集合空间。

分析日志,可总结回归测试模式下,程序添加P2P节点的步骤:

首先绑定了本地监听端口

1
2
3
2025-03-24T06:43:41Z Bound to 127.0.0.1:18445
2025-03-24T06:43:41Z Bound to [::]:18444
2025-03-24T06:43:41Z Bound to 0.0.0.0:18444

启动网络相关线程

1
2
3
4
5
2025-03-24T06:43:41Z net thread start
2025-03-24T06:43:41Z dnsseed thread start
2025-03-24T06:43:41Z opencon thread start
2025-03-24T06:43:41Z msghand thread start
2025-03-24T06:43:41Z addcon thread start

尝试从DNS种子获取节点地址

1
2
2025-03-24T06:43:41Z Loading addresses from DNS seed dummySeed.invalid.
2025-03-24T06:43:41Z 0 addresses found from DNS seeds

60秒后尝试添加固定种子节点

1
2
2025-03-24T06:44:42Z Adding fixed seeds as 60 seconds have passed and addrman is empty
2025-03-24T06:44:42Z Added 0 fixed seeds from reachable networks.

其他重要观察

  1. 程序运行在回归测试模式(regtest)
  2. RPC服务器在本地8332端口启动
  3. 区块数据库和链状态数据库都使用了LevelDB
  4. 程序成功初始化了创世区块:
1
2025-03-24T06:43:41Z UpdateTip: new best=0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206 height=0

但是密钥信息并没有出现,经查阅,我发现在 21 版本以后不会自动创建钱包,这是我和实验指导书的差异。这需要我们自己手动创建。

创建并配置新版本钱包

创建钱包

钱包名称可以替换成你自己想要的。

1
2
bitcoin-cli -regtest createwallet "LeavesWallet"
bitcoin-cli -regtest getwalletinfo

获得了以下输出:

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
PS C:\Users\26646> bitcoin-cli -regtest createwallet "LeavesWallet"  
{
"name": "LeavesWallet"
}
PS C:\Users\26646> bitcoin-cli -regtest getwalletinfo
{
"walletname": "LeavesWallet",
"walletversion": 169900,
"format": "sqlite",
"balance": 0.00000000,
"unconfirmed_balance": 0.00000000,
"immature_balance": 0.00000000,
"txcount": 0,

# 创建了4000 个内部密钥和外部密钥
"keypoolsize": 4000,
"keypoolsize_hd_internal": 4000,

"paytxfee": 0.00000000,
"private_keys_enabled": true,
"avoid_reuse": false,
"scanning": false,
"descriptors": true,
"external_signer": false,
"blank": false,
"birthtime": 1742799986,
"lastprocessedblock": {
"hash": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206",
"height": 0
}
}

为钱包创建新地址

1
2
PS C:\Users\26646> bitcoin-cli -regtest getnewaddress
bcrt1q8xe3ukkxdmhr74dhgdf9r3cy73cr69cnr4tw0m

尝试进行挖矿

1
2
3
4
5
6
7
8
9
10
11
PS C:\Users\26646> bitcoin-cli -regtest generatetoaddress 102 "bcrt1q8xe3ukkxdmhr74dhgdf9r3cy73cr69cnr4tw0m"
[
  "080274b6da55d970b4660155d6ec89577696e85ad9b9abcabac59c265b266850",
  "3b97fae70d97a736d3a5ab27ee031b028f5a905c24b4706b269c810684b413ed",
  "1bdc03bfde50f05f29ff100dbd45fc1ffcc52f7e65aba1bce9f124c4103111ab",
  "3180d29fb98e50ee22ad396c6b6fd079c96a0f58f854f1707e1fb2c5740556af",
……
  "1aecb2e84bf077982a1cd1a7f087b92010527efa6e845e926419555312521730",
  "4bff3bf2c94f454c50d2c13934744e91a5f5b02c4773541339fcfbcc83656006",
  "7c4ecc84de4d64600c4cba2a9edc3f68ba7f415fd3fffd308e9ca2b3201e2691"
]

查看余额

1
2
PS C:\Users\26646> bitcoin-cli -regtest getbalance
100.00000000
对余额的解释:

  1. 比特币的成熟度规则
  • 在比特币系统中,挖矿奖励(coinbase交易)必须等待100个区块确认后才能使用
  • 第1个区块会产生挖矿奖励
  • 需要再挖100个区块让这个奖励成熟
  • 所以总共需要101个区块
  1. 具体计算
  • 第1个区块:获得50 BTC奖励(regtest模式下的奖励值)
  • 接下来的100个区块:让第1个区块的奖励成熟
  • 最终结果:有了可以使用的50 BTC

因为如上这个原因,网上总会习惯性先挖 101 个,我这里故意挖 102 个,果然,余额是 100 BTC。
有时候,当你把终端关闭后再次尝试查看余额之前,需要先加载钱包:

1
bitcoin-cli -regtest loadwallet "wallet_name"

把钱包名称替换成你的实际值即可。
更多关于钱包的配置与概念,可以参考比特币客户端钱包基础

  • 标题: 实验1 初步熟悉比特币客户端
  • 作者: 三葉Leaves
  • 创建于 : 2025-03-24 00:00:00
  • 更新于 : 2025-03-25 16:32:34
  • 链接: https://blog.oksanye.com/281b16e76c56/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论