摘要:在本文中,我们将探讨如何使用完全同步的Bitcoin Core节点在bitcoin-qt控制台中运行命令。请注意,Bitcoin Core的最小空间要求(当前约为250gb),带宽要求不断提高,并且如果在任何时间段处于脱机状态,都将需要重新同步。Bitcoin Core内置了检索数据、生成地址、发送事务等命令。如果您对开发比特币应用程序或只是学习有关操作Bitcoin Core的更多信息感兴趣,RPC控制台是一个很好的入门方法。我们将探索一些基本的命令来检索有关网络、区块链和交易的信息。

在本文中,我们将探讨如何使用完全同步的Bitcoin Core节点在bitcoin-qt控制台中运行命令。

请注意,Bitcoin Core的最小空间要求(当前约为250gb),带宽要求不断提高,并且如果在任何时间段处于脱机状态,都将需要重新同步。

Bitcoin Core内置了检索数据、生成地址、发送事务等命令。如果您对开发比特币应用程序或只是学习有关操作Bitcoin Core的更多信息感兴趣,RPC控制台是一个很好的入门方法。我们将探索一些基本的命令来检索有关网络、区块链和交易的信息。

安装比特币并等待将节点同步到网络后,打开控制台。 运行bitcoin-qt(比特币核心的GUI)时,可以在窗口下拉菜单中找到它。

比特币核心RPC控制台交互的基本命令教程插图

比特币核心RPC控制台交互的基本命令教程插图(1)

比特币RPC控制台接受各种命令,通常带有0或1个参数。还有一些方法需要多个参数,例如发送或验证交易。在本教程中,我们将使用以下基本命令来熟悉控制台:

基本信息

1. getblockchaininfo
2. getmininginfo
3. getpeerinfo

区块信息

1. getblockcount
2. getbestblockhash
3. getblock hash
4. getblockhash index

事务信息

1. getrawmempool
2. getrawtransaction txid
3. decoderawtransaction rawtx

常规信息命令

这些命令将各自返回具有各种信息的对象。 例如,

> getblockchaininfo

返回信息:

{
  \"chain\": \"main\",
  \"blocks\": 582101,
  \"headers\": 582101,
  \"bestblockhash\": \"000000000000000000165bf4a8eaa460df475200284

0009c29ec0adfd9376406\",

  \"difficulty\": 7409399249090.253,
  \"mediantime\": 1561321207,
  \"verificationprogress\": 0.9999922936147396,
  \"initialblockdownload\": false,
  \"chainwork\": \"000000000000000000000000000000000000000006d2371

8c9e22adc4275b706\",

  \"size_on_disk\": 257091100656,
  \"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\": \"\"
}

此命令有很多信息。它为我们提供了确定最佳块以及在何处找到所需的所有详细信息。我们还可以看到区块链的大小和实现的各种软分叉。

第二个常规信息命令,

> getmininginfo

返回以下对象:

{
  \"blocks\": 582102,
  \"difficulty\": 7409399249090.253,
  \"networkhashps\": 6.626238141514776e+019,
  \"pooledtx\": 3527,
  \"chain\": \"main\",
  \"warnings\": \"\"
}

区块和难度值也位于getblockchaininfoinfo命令中,但是在这里我们可以找到:

· 每秒网络哈希
· 交易池中的交易数

第三个常规信息命令是查找有关您的节点与之通信区块链数据的对等方的信息。该命令:

> getpeerinfo

返回对象数组。每个对象都有有关您的比特币核心实例当前连接到的对等节点的信息。如果您在路由器上打开了端口8333,则此数字的范围通常为10–50(有关在此处打开端口的更多信息)。返回的信息包括:

· IP地址信息
· 上次发送/接收后的时间
· 节点连接时间(正常运行时间)
· 版本/子版本
· 其他网络信息

此数组中对等点的总数指示连接数,但是您也可以使用命令getconnectioncount返回连接节点的数值。

区块命令

要检索有关一个区块的数据,我们首先需要一个区块索引或散列来标识该区块。我们可以使用以下命令检索有关链上当前最佳区块的两个值:

> getblockcount

返回当前的最佳区块索引:

582102

或者

> getbestblockhash

返回当前最好的区块哈希值:

000000000000000000227508581434096917b80e3a4c981116cc8ff532aa48ef

比特币区块链上的每个区块都有一个索引和一个哈希,我们可以使用它来查找有关它的详细信息。可以使用区块哈希直接查找块,也可以使用块索引间接查找区块。例如假设我们知道要查找高度(索引)为530120的块。首先键入以下命令:

> getblockhash 530120

返回哈希值:

00000000000000000025c3a8404acf1cabc9fe0a2901f59828128c3bb16f7616

接下来使用getblock命令检索区块数据:

> getblock 00000000000000000025c3a8404acf1cabc9fe0a2901f59828128c3bb16f7616

使用特定哈希调用的getblock命令将返回:

· 自该区块以来已确认区块的数量
· 区块大小
· 区块重量
· 梅克尔根
· 块中所有tx id的数组
· 区块被挖掘的时间
· 区块随机数
· 目前的难度系数
· 交易数量(nTx)
· 下一个/上一个区块哈希

事务处理命令

默认情况下,比特币不对交易编制索引。 要查找与您的钱包关联的事务以外的事务,必须首先在配置文件中打开索引。 转到设置>>选项>>打开配置文件以打开比特币配置文件(bitcoin.conf)。

添加行:

txindex=1

添加此命令后,保存文件并重新启动Bitcoin Core。此过程可能需要几个小时,因此设置过夜或在您不在时很有用。一旦比特币核心索引了区块链,就可以使用getrawtransaction和解码器awtransaction命令单独查找任何交易。

这似乎是一个繁琐的额外步骤,但是请记住,此设置也是运行闪电节点的必要条件。

现在我们有一个索引的比特币节点正在运行,让我们找到一些要解码的交易。 我们可以使用以下命令查看内存池中所有事务的ID

> getrawmempool

此命令将返回当前在内存池中的(通常)成千上万个待处理事务的数组。

我们可以通过选择其中一个交易ID来查找特定交易。

> getrawtransaction 68ecbf8b6d78db0aa4969feb65c6d600bde02f33dbc84151139964fcf448af55

这将返回原始交易:

010000000152fb73aff8ae297ab294f0e4ddce76c63cfcdb10488582d6e7c8
94053a4325ea000000006b483045022100bc7852636a24fd1da1e14d04abc2
c8a467b45f5f7922be47ed8cbd5f571904af0220239cb094a40a4b5d812096
b82354bc4470823aeaf8658dd9c71a43327f4a29cd012102a1703f0092c3de
5106379bce7fbf8689263e31ea8ed41723c8533c28de62cf16ffffffff0219
7c0800000000001976a914bf1cccd8e4256b5258ce66849e05f4a59f1edb8d
88ac0000000000000000536a4c500003ad250002c5239e661ae029df7a66f0
2955e7a322413e8fbeb6448072b87b7a7c1304ac111052848276bb2bbbf5ad
6612436a5d0fe8370702bd541feb2ffa416fa6194a21eb30a2be3060387bf8
7100000000

这个十六进制字符串(我们称之为十六进制)是经过编码的交易,可以使用以下代码进行解码:

> decoderawtransaction hex

此命令返回一个对象,其中包含有关该事务的详细信息

{
  \"txid\": \"68ecbf8b6d78db0aa4969feb65c6d600bde02f33dbc841511399

64fcf448af55\",

  \"hash\": \"68ecbf8b6d78db0aa4969feb65c6d600bde02f33dbc841511399

64fcf448af55\",

  \"version\": 1,
  \"size\": 284,
  \"vsize\": 284,
  \"weight\": 1136,
  \"locktime\": 0,
  \"vin\": [
    {
      \"txid\": \"ea25433a0594c8e7d682854810dbfc3cc676cedde4f094b27a

29aef8af73fb52\",
      \"vout\": 0,
      \"scriptSig\": {
        \"asm\": \"3045022100bc7852636a24fd1da1e14d04abc2c8a467b45f5

f7922be47ed8cbd5f571904af0220239cb094a40a4b5d812096b82354bc447082

3aeaf8658dd9c71a43327f4a29cd[ALL] 02a1703f0092c3de5106379bce7fbf8

689263e31ea8ed41723c8533c28de62cf16\",
        \"hex\": \"483045022100bc7852636a24fd1da1e14d04abc2c8a467b45f

5f7922be47ed8cbd5f571904af0220239cb094a40a4b5d812096b82354bc447082

3aeaf8658dd9c71a43327f4a29cd012102a1703f0092c3de5106379bce7fbf8689

263e31ea8ed41723c8533c28de62cf16\"
      },
      \"sequence\": 4294967295
    }
  ],
  \"vout\": [
    {
      \"value\": 0.00556057,
      \"n\": 0,
      \"scriptPubKey\": {
        \"asm\": \"OP_DUP OP_HASH160 bf1cccd8e4256b5258ce66849e05f4a59

f1edb8d OP_EQUALVERIFY OP_CHECKSIG\",

        \"hex\": \"76a914bf1cccd8e4256b5258ce66849e05f4a59f1edb8d88ac\",
        \"reqSigs\": 1,
        \"type\": \"pubkeyhash\",
        \"addresses\": [
          \"1JRWZiGXAm9n3b5FXopkW1wPifAtXwfjWC\"
        ]
      }
    },
    {
      \"value\": 0.00000000,
      \"n\": 1,
      \"scriptPubKey\": {
        \"asm\": \"OP_RETURN 0003ad250002c5239e661ae029df7a66f029

55e7a322413e8fbeb6448072b87b7a7c1304ac111052848276bb2bbbf5ad66

12436a5d0fe8370702bd541feb2ffa416fa6194a21eb30a2be3060387bf871\",

        \"hex\": \"6a4c500003ad250002c5239e661ae029df7a66f02955e7a

322413e8fbeb6448072b87b7a7c1304ac111052848276bb2bbbf5ad6612436a

5d0fe8370702bd541feb2ffa416fa6194a21eb30a2be3060387bf871\",
        \"type\": \"nulldata\"
      }
    }
  ]
}

这里我们有:

· 交易规模
· 交易权重
· 输入详细信息
· 输出详细信息和值/秒

这里有很多信息,但是请注意,上面的交易没有与其输入相关的任何值。确认交易所在的区块在交易中均不可用。故意遗漏这些细节是为了防止区块链重复不必要的数据。但是我们确实有足够的信息来查询每笔比特币交易中收到的金额,并且能够查询以前的交易输出。使用这些命令足以构建基本的区块浏览器。

总结

比特币核心RPC控制台是使用比特币节点促进交易和构建应用程序的中心。每个比特币实例都可以访问以前交易历史记录以及网络和采矿信息的几乎不变的共享数据库。

通常了解其中一些基本命令是比特币应用程序开发和节点操作中的关键步骤。可以通过多种不同的编程语言来访问这些命令,以构建使用和实现事务逻辑的API和应用程序。可以从您自己的节点运行业务,并通过具有自定义用户界面的应用程序以编程方式跟踪每个交易。