记录黑客技术中优秀的内容,传播黑客文化,分享黑客技术精华

在本地网络(regtest)挖矿和记账

2021-01-24 23:57

在本地网络(regtest)挖矿和记账

少壮不囤币,老大徒伤悲。在前面一篇文章我们学习到在测试网络(testnet)发送和接受比特币,不过测试网络需要下载整个区块链数据,不太方便,目前我们了解到比特币主网络(mainnet)是比特币正式使用的,测试网络(testnet)是开发者用来测试的,测试网络的币可以免费领。还有一种是本地网络(regtest),这个更厉害,可以重头开始挖一个区块,进行回归测试,下面我们开始操作使用本地网络(regtest)测试挖矿和记账,启动比特币客户端时添加 -regtest 参数。

/Applications/Bitcoin-Qt.app/Contents/MacOS/Bitcoin-Qt -regtest

打开成功之后看到本地网络(regtest)显示的是蓝色的,如下图所示。在前面的文章我们看到主网络(mainnet)显示的是黄色,测试网络(testnet)显示的是绿色。

获取当前的区块信息,可以看到当前的区块个数是 0,信息如下:

getblockchaininfo
{
  "chain": "regtest",
  "blocks": 0,
  "headers": 0,
  "bestblockhash": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206",
  "difficulty": 4.656542373906925e-10,
  "mediantime": 1296688602,
  "verificationprogress": 1,
  "initialblockdownload": true,
  "chainwork": "0000000000000000000000000000000000000000000000000000000000000002",
  ......

我们需要挖出一个区块,在控制台上输入命令 generate 1 代表挖一个区块,有可能会提示下面的错误。

has been replaced by the -generate cli option. Refer to -help for more information. (code -32601)

尝试切换到命令行,调用 bitcoin-cli 创建第一个区块,这时可以成功。

./bitcoin-cli -regtest -generate 1
{
  "address": "bcrt1qcj6ar25j7hmrr3dh2yplusq9g623ltyymdeudx",
  "blocks": [
    "25277be9c9e5fef3bd48e1af965581933a9b6ae4d6ce096c3086702c12d14d57"
  ]
}

getblock 命令可以查询这个区块的信息

./bitcoin-cli -regtest getblock 25277be9c9e5fef3bd48e1af965581933a9b6ae4d6ce096c3086702c12d14d57
{
  "hash": "25277be9c9e5fef3bd48e1af965581933a9b6ae4d6ce096c3086702c12d14d57",
  "confirmations": 1,
  "strippedsize": 213,
  "size": 249,
  "weight": 888,
  "height": 1,
  "version": 536870912,
  "versionHex": "20000000",
  "merkleroot": "22fbb6c2017927d63ed49941a5b77ead1938a7b37108670fae8eb710c7ca90a7",
  "tx": [
    "22fbb6c2017927d63ed49941a5b77ead1938a7b37108670fae8eb710c7ca90a7"
  ],
  "time": 1611489703,
  "mediantime": 1611489703,
  "nonce": 1,
  "bits": "207fffff",
  "difficulty": 4.656542373906925e-10,
  "chainwork": "0000000000000000000000000000000000000000000000000000000000000004",
  "nTx": 1,
  "previousblockhash": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206"
}

这时我们看客户端上显示余额有 50 BTC,如下图所示。

不过在交易记录里可以看到需要 101 个区块确认才可以使用这 50 个 BTC,如下图所示。

gettransaction 命令可以查看该笔交易的详情

gettransaction 22fbb6c2017927d63ed49941a5b77ead1938a7b37108670fae8eb710c7ca90a7
{
  "amount": 0.00000000,
  "confirmations": 1,
  "generated": true,
  "blockhash": "25277be9c9e5fef3bd48e1af965581933a9b6ae4d6ce096c3086702c12d14d57",
  "blockheight": 1,
  "blockindex": 0,
  "blocktime": 1611489703,
  ......
}

接下来可以使用 generatetoaddress 再挖 100 个区块并且指定奖励的 BTC 发送到 bcrt1q7qunn5l9h8mkty7vcz9huavjqv8j6u3fvn5236 地址。

generatetoaddress 100 bcrt1q7qunn5l9h8mkty7vcz9huavjqv8j6u3fvn5236
[
  "10f219ad2ec202095d74a8627e3d18a3510b0fc2a1144cfaf38d92eb7bf89076",
  "5076ac1a63acbae6f62798dd2c54bf84a86ac6509c84a8daa06d81b916bab32e",
  "77fbec09c28a862316e373fd9abd4d21c0061a9c494bbd46511087e0f906666d",
  "4ad7d6b052758a52efcaf0c80ee4b5178d5ad0f7cd15158a840265979dcbf595",
  "738d2994eaff7568eb47e32fc44d0c63991a94d3b97049bbc35c9673623e55a7",
  ....
]

目前我们的本地网络有 101 个区块,第一个挖出的区块奖励 50个BTC已经可以使用,新挖的 100 个区块的奖励 5000 个BTC还不能使用,如下图所示。

通过 getbalance 可以获取当前钱包的余额,但是一个钱包有可能会有多个地址,我们可以使用 listaddressgroupings 显示所有地址对应的余额。

getbalance
50.00000000
listaddressgroupings
[
  [
    [
      "bcrt1qcj6ar25j7hmrr3dh2yplusq9g623ltyymdeudx",
      50.00000000,
      ""
    ]
  ],
  [
    [
      "bcrt1q7qunn5l9h8mkty7vcz9huavjqv8j6u3fvn5236",
      0.00000000,
      ""
    ]
  ]
]

接着我们尝试转账 25 个 BTC,最小的手续费是每 KB 使用 0.00001000,大概一个字节一聪,比特币最小的单元是聪,可以看到该笔交易的体积大于是 0.141 KB,手续费对应的就是 0.00000141 个 BTC,如下图所示。

发送完成之后,查询 txid,可以看到 confirmations 是 0,说明确认数是 0,这笔交易未被确认。

gettransaction 99d589fdf5a02268b2cef9954e5b3e2a92a38020355916baa0473458f8f79dc2
{
  "amount": 0.00000000,
  "fee": -0.00000141,
  "confirmations": 0,
  "trusted": true,
     ......
}

我们需要挖一个区块才能确认这一笔交易。

generatetoaddress 1 bcrt1q7qunn5l9h8mkty7vcz9huavjqv8j6u3fvn5236
[
  "2b7d13b1d8be18d5a1b99d22c015b12cd973c4e76d7381c8a65cca55fccd3bbd"
]

此时可以看到 bcrt1qcj6ar25j7hmrr3dh2yplusq9g623ltyymdeudx 地址的余额变成 0,bcrt1q7qunn5l9h8mkty7vcz9huavjqv8j6u3fvn5236 变成 75,因为还有 50 是挖矿得到的奖励,为什么这里又多了一个 bcrt1q7m6p0s8aq6fn7q4eujuv8wjh0mk2w5c9n6w9y8 呢?里面有 24.99999859 金额是怎么回事?我觉得应该是找零地址,bcrt1qcj6ar25j7hmrr3dh2yplusq9g623ltyymdeudx 把扣除手续费后还剩的 24.99999859 转给了找零地址。

listaddressgroupings
[
  [
    [
      "bcrt1qcj6ar25j7hmrr3dh2yplusq9g623ltyymdeudx",
      0.00000000,
      ""
    ],
    [
      "bcrt1q7m6p0s8aq6fn7q4eujuv8wjh0mk2w5c9n6w9y8",
      24.99999859
    ]
  ],
  [
    [
      "bcrt1q7qunn5l9h8mkty7vcz9huavjqv8j6u3fvn5236",
      75.00000000,
      ""
    ]
  ]
]

可以看到新挖出的这个区块有两个 tx,说明是有两笔交易。一笔交易是转账 25 BTC,还有一笔是挖矿奖励 50 BTC。

getblock 2b7d13b1d8be18d5a1b99d22c015b12cd973c4e76d7381c8a65cca55fccd3bbd
{
  "hash": "2b7d13b1d8be18d5a1b99d22c015b12cd973c4e76d7381c8a65cca55fccd3bbd",
  "confirmations": 1,
  "strippedsize": 327,
  "size": 472,
  "weight": 1453,
  "height": 102,
  "version": 536870912,
  "versionHex": "20000000",
  "merkleroot": "453e0a5655448a99727e2d1b3015b0465fd1b426b0354cf884ed1ba4222f19b6",
  "tx": [
    "5ab0d6ae833b439d9d1a06ee0002384c8afce1450c8a01c813b148a602f339d9",
    "99d589fdf5a02268b2cef9954e5b3e2a92a38020355916baa0473458f8f79dc2"
  ],
  "time": 1611494585,
  "mediantime": 1611492039,
  "nonce": 1,
  "bits": "207fffff",
  "difficulty": 4.656542373906925e-10,
  "chainwork": "00000000000000000000000000000000000000000000000000000000000000ce",
  "nTx": 2,
  "previousblockhash": "39af9cf0b60ca07ba780125bc730c4b07ad1683f98a8c079410473abe1c5eda4"
}

区块里的第一笔交易称为 coinbase,是用于挖矿奖励的。可以看到 0.00000141 手续费和 50 BTC 挖矿奖励一起发送到了 bcrt1q7qunn5l9h8mkty7vcz9huavjqv8j6u3fvn5236,说明矿工除了能得到挖矿奖励还能获取打包该区块的所有手续费。

gettxout 5ab0d6ae833b439d9d1a06ee0002384c8afce1450c8a01c813b148a602f339d9 0
{
  "bestblock": "2b7d13b1d8be18d5a1b99d22c015b12cd973c4e76d7381c8a65cca55fccd3bbd",
  "confirmations": 1,
  "value": 50.00000141,
  "scriptPubKey": {
    "asm": "0 f03939d3e5b9f76593ccc08b7e7592030f2d7229",
    "hex": "0014f03939d3e5b9f76593ccc08b7e7592030f2d7229",
    "reqSigs": 1,
    "type": "witness_v0_keyhash",
    "addresses": [
      "bcrt1q7qunn5l9h8mkty7vcz9huavjqv8j6u3fvn5236"
    ]
  },
  "coinbase": true
}

转载请注明:exchen's blog » 在本地网络(regtest)挖矿和记账


知识来源: https://www.exchen.net/bitcoin-regtest-miner.html

阅读:208213 | 评论:0 | 标签:区块链/比特币 区块链 比特币

想收藏或者和大家分享这篇好文章→复制链接地址

“在本地网络(regtest)挖矿和记账”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

黑帝公告 📢

永久免费持续更新精选优质黑客技术文章Hackdig,帮你成为掌握黑客技术的英雄

标签云 ☁