当前位置: 首页 > 工具软件 > btcd > 使用案例 >

btcd源码解析

桑宇
2023-12-01

1.写在前面

因为学习的需要,这一年半和接下来更长的时间都会与Bitcoin打交道。不可避免地,需要对Bitcoin的源码进行修改。
网上找过一些Bitcoin源码分析的资源,但大多都是基于C++实现的源码。笔者对C++并不是很熟悉,相反,用Go语言用得更多一些。所以,这个系列的博客会针对Go语言实现的Bitcoin进行分析,也即btcd。因为btcd的实现中将wallet的功能独立了出来,形成一个新的项目btcdwallet,因此我们也会对btcdwallet的代码实现进行分析。

2. 实验环境

有必要明确一下btcdbtcwallet代码版本号,以及Go语言的版本号:

  • btcd版本:[git commit log] ed77733ec07dfc8a513741138419b8d9d3de9d2d
  • btcwallet版本:[git commit log] 9ad115360b375a08265d088580606a398202e3ac
  • Go版本:go1.11.2

3. 系统运行步骤

考虑到btcdbtcwallet的官方文档描述得不够详细,我们在这里演示一下btcdbtcwalletbtcctl的运行步骤。
我们以运行一个simnet网络为例。

3.1. 生成挖矿地址

在运行btcd时,需要通过--miningaddr指定一个挖矿的地址。这个挖矿地址我们需要借助btcwallet来生成,但btcwallet生成挖矿地址的过程又需要和btcd通信。这里就形成了一个环,也即:btcd依赖于btcwalletbtcwallet又依赖于btcd

我们的处理方式是:

  1. 先不指定--miningaddr运行btcd./btcd -u seafooler -P 123456 --simnet
  2. 然后运行btcwallet连接btcd: ./btcwallet -u seafooler -P 123456 --simnet (需要注意的是,在第一次运行btcwallet时,需要首先利用--create选项初始化一个钱包:./btcwallet -u seafooler -P 123456 --simnet --create)
  3. 再运行btcctl发送指令给btcwallet生成地址:./btcctl -u seafooler -P 123456 --wallet --simnet getnewaddress

3.2. 指定挖矿地址重启btcd

基于以上步骤生成的挖矿地址,重新启动btcd,如下所示:/btcd -u seafooler -P 123456 --simnet --miningaddr=SN9t3caxhG77Pn7cAitHHz7C9b5Jaadkt6

3.3. 挖矿操作

使用btcctl运行./btcctl -u seafooler -P 123456 --wallet --simnet generate 1命令即可生成一个新区块。此时通过命令./btcctl -u seafooler -P 123456 --wallet --simnet getbalance查看当前账户余额,会发现余额为0.
这是因为新挖出的区块奖励需要等待100个区块之后才能生效,也即使用./btcctl -u seafooler -P 123456 --wallet --simnet generate 99命令继续挖出99个新区块后,即可查询到当前余额为50.

 类似资料: