From 990ea8be73805735a93675e6d8012abd81db8e54 Mon Sep 17 00:00:00 2001 From: Cao Yi Date: Sun, 30 May 2021 06:19:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E5=AD=97=E5=86=85=E5=AE=B9=E5=92=8C?= =?UTF-8?q?=E6=8E=92=E7=89=88=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ch03.md | 102 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/ch03.md b/ch03.md index aa9f215..6a63ab8 100644 --- a/ch03.md +++ b/ch03.md @@ -9,7 +9,7 @@ Bitcoin是一个开源项目,源代码使用开放(MIT)授权,可免费 ![图3-1](https://github.com/bitcoinbook/bitcoinbook/raw/develop/images/mbc2_0301.png) -图3-1 比特币核心架构(来源Eric Lombrozo) +图3-1 比特币核心架构(来源:Eric Lombrozo) ## 3.1 比特币开发环境 @@ -36,13 +36,13 @@ $ >**提示** Git是最广泛使用的分布式版本控制系统,是软件开发人员最重要的工具之一。 如果操作系统还未安装,需要先安装git命令行或git的图形界面。 -当git克隆操作完成后,当前目录(如果是bitcoin)就有源代码存储库的完整本地副本。 在提示符下键入“cd bitcoin”,进入此目录: +当git克隆操作完成后,当前目录(如果是bitcoin)就有源代码存储库的完整本地副本。 在提示符下键入``cd bitcoin``,进入此目录: `$ cd bitcoin` ### 3.2.1 选择Bitcoin Core版本 -默认情况下,本地副本将与最新的代码同步,但是最新版本可能是不稳定的或者是Beta版。 所以在编译代码前,先查看发布标签tag,选择一个特定的版本。 这将使本地副本与关键字标签所标识的代码库的特定快照同步。 开发人员使用标签tag来标记特定版本号的代码。 首先,要找到可用的标签,我们使用git tag命令: +默认情况下,本地副本将与最新的代码同步,但是最新版本可能是不稳定的或者是Beta版。 所以在编译代码前,先查看发布标签tag,选择一个特定的版本。 这将使本地副本与关键字标签所标识的代码库的特定快照同步。 开发人员使用标签tag来标记特定版本号的代码。 首先,要找到可用的标签,我们使用``git tag``命令: ``` $ git tag @@ -57,7 +57,7 @@ v0.12.0rc2 ... ``` -tag列表显示所有发布的比特币版本。根据惯例,用于测试的发布候选版本具有后缀“rc”。可以在生产系统上运行的稳定版本没有后缀。从上面的列表中,选择最高版本的版本,在编写时是v0.11.2。要使本地代码与此版本同步,请使用git checkout命令: +tag列表显示所有发布的比特币版本。根据惯例,用于测试的发布候选版本具有后缀“rc”。可以在生产系统上运行的稳定版本没有后缀。从上面的列表中,选择最高版本的版本,在编写时是v0.11.2。要使本地代码与此版本同步,请使用``git checkout``命令: ``` $ git checkout v0.11.2 @@ -74,11 +74,11 @@ nothing to commit, working directory clean ### 3.2.2 配置构建Bitcoin Core -源代码中包括帮助文档,可以在许多文件中找到。在提示符下输入“more README.md”,可以查看bitcoin目录中最主要的文档README.md的内容,使用空格键可翻页。在本章中,我们将在Linux上部署命令行比特币客户端,也称为bitcoind。在系统中查看编译bitcoind命令行客户端的说明,方法是输入“more doc / build-unix.md” 。doc目录中还有macOS和Windows的文档,分别为build-osx.md或build-windows.md。 +源代码中包括帮助文档,可以在许多文件中找到。在提示符下输入``more README.md``,可以查看bitcoin目录中最主要的文档README.md的内容,使用空格键可翻页。在本章中,我们将在Linux上部署命令行比特币客户端,也称为bitcoind。在系统中查看编译bitcoind命令行客户端的说明,方法是输入``more doc/build-unix.md`` 。doc目录中还有macOS和Windows的文档,分别为build-osx.md或build-windows.md。 仔细查看文档第一部分提到的依赖库,在开始构建比特币客户端之前这些库必须存在。如果缺少这些库,构建过程会提示出错,并失败。如果构建失败提示是缺少这些依赖库,那么就必须再安装它,然后从刚才提示出错的地方重新开始构建。这些依赖库都安装之后,可以使用autogen.sh脚本生成一组脚本来启动构建过程。 ->**注意** Bitcoin Core 构建过程已经从0.9开始更改为使用autogen / configure / make系统。 0.9之前的旧版本使用简单的Makefile,与以下示例的方法略有不同。 建议按照版本的说明进行操作。 在0.9中引入的autogen / configure / make用于之后的版本构建过程,下面演示的示例就是这个过程。 +>**注意** Bitcoin Core构建过程已经从0.9开始更改为使用autogen / configure / make系统。 0.9之前的旧版本使用简单的Makefile,与以下示例的方法略有不同。 建议按照版本的说明进行操作。 在0.9中引入的autogen / configure / make用于之后的版本构建过程,下面演示的示例就是这个过程。 ``` $ ./autogen.sh @@ -97,7 +97,7 @@ Makefile.am: installing 'build-aux/depcomp' ... ``` -autogen.sh脚本创建一组自动配置脚本,它会询问系统以发现正确的设置,并确保依赖库已经完整。 其中最重要的是配置脚本,它提供了许多自定义构建过程的可选选项。输入“./configure --help”查看各种选项: +autogen.sh脚本创建一组自动配置脚本,它会询问系统以发现正确的设置,并确保依赖库已经完整。 其中最重要的是配置脚本,它提供了许多自定义构建过程的可选选项。输入``./configure --help``查看各种选项: $ ./configure --help `configure' configures Bitcoin Core 0.11.2 to adapt to many kinds of systems. @@ -115,23 +115,23 @@ autogen.sh脚本创建一组自动配置脚本,它会询问系统以发现正 --with-gui[=no|qt4|qt5|auto] ... -帮助文档中可以看到,配置脚本允许使用--enable-FEATURE和--disable-FEATURE标志来启用或禁用bitcoind的某些功能,使用该命令是把FEATURE替换为功能名称。 在本章中,我们将构建所有默认功能的bitcoind客户端。 我们不会使用配置标志调整功能,但是需要了解客户端是能够实现可选功能的。如果您处于学术环境中,计算机实验室的限制可能需要把应用程序安装在当前账户的主目录中(例如,使用--prefix = $ HOME)。 +帮助文档中可以看到,配置脚本允许使用``--enable-FEATURE``和``--disable-FEATURE``标志来启用或禁用bitcoind的某些功能,使用该命令是把FEATURE替换为功能名称。 在本章中,我们将构建所有默认功能的bitcoind客户端。 我们不会使用配置标志调整功能,但是需要了解客户端是能够实现可选功能的。如果您处于学术环境中,计算机实验室的限制可能需要把应用程序安装在当前账户的主目录中(例如,使用--prefix = $ HOME)。 以下这些选项,可以覆盖configure脚本的默认行为: ---prefix=$HOME +``--prefix=$HOME`` -这将覆盖生成的可执行文件的默认安装位置(默认是/ usr / local /)。 使用$HOME将所有内容放在主目录,也可以放在其他路径。 +这将覆盖生成的可执行文件的默认安装位置(默认是/usr/local/)。 使用$HOME将所有内容放在主目录,也可以放在其他路径。 ---disable-wallet +``--disable-wallet`` 这用于禁用钱包功能。 ---with-incompatible-bdb +``--with-incompatible-bdb`` 如果您正在构建钱包,允许使用不兼容的Berkeley DB库版本。 ---with-gui=no +``--with-gui=no`` 不构建图形用户界面,图形界面是需要Qt库的。 这只生成服务器和命令行客户端。 @@ -152,11 +152,11 @@ checking whether make sets $(MAKE)... yes $ ``` -如果一切顺利,configure命令运行完成后,会自动一个创建可定制的构建脚本。可以使用构建脚本编译bitcoind。如果有缺失的库或是错误,configure命令将会提示出错。出现错误,一般都是缺少库或是有不兼容的库。这需要重新查看文档,确认是否安装所有依赖库。然后再次运行configure,看看错误是否消失。 +如果一切顺利,``configure``命令运行完成后,会自动一个创建可定制的构建脚本。可以使用构建脚本编译``bitcoind``。如果有缺失的库或是错误,``configure``命令将会提示出错。出现错误,一般都是缺少库或是有不兼容的库。这需要重新查看文档,确认是否安装所有依赖库。然后再次运行``configure``,看看错误是否消失。 ### 3.2.3 构建Bitcoin Core可执行文件 -下一步,开始编译源代码,这个过程根据CPU处理能力和内存大小,但一般可能需要1个小时完成。编译的过程中,应该过几秒或是几分钟看一下输出结果。如果出现了问题,就会看到错误。如果中断了,编译的过程可以在任何时候恢复。输入make命令就可以开始编译了: +下一步,开始编译源代码,这个过程根据CPU处理能力和内存大小,但一般可能需要1个小时完成。编译的过程中,应该过几秒或是几分钟看一下输出结果。如果出现了问题,就会看到错误。如果中断了,编译的过程可以在任何时候恢复。输入``make``命令就可以开始编译了: ``` $ make @@ -177,7 +177,7 @@ Making all in src $ ``` -如果CPU是多核,那么需要设置并行编译作业需要的核数,比如输入make -j 2会使用两个核。如果一切顺利,bitcoind就编译完成了。可以使用make check命令运行单元测试包,检查链接的库没有发生中断。最后一步就是sudo make install 命令,安装 bitcoind 可执行文件,可能会提示您输入用户密码,因为这一步需要管理员权限: +如果CPU是多核,那么需要设置并行编译作业需要的核数,比如输入``make -j 2``会使用两个核。如果一切顺利,bitcoind就编译完成了。可以使用``make check``命令运行单元测试包,检查链接的库没有发生中断。最后一步就是``sudo make install``命令,安装``bitcoind``可执行文件,可能会提示您输入用户密码,因为这一步需要管理员权限: ``` $ make check && sudo make install @@ -191,7 +191,7 @@ libtool: install: /usr/bin/install -c bitcoin-tx /usr/local/bin/bitcoin-tx $ ``` -bitcoind 默认的安装位置是/usr/local/bin。查询下面这两个可执行文件的路径,可以确认bitcoin是否安装成功。 +``bitcoind``默认的安装位置是``/usr/local/bin``。查询下面这两个可执行文件的路径,可以确认bitcoin是否安装成功。 ``` $ which bitcoind @@ -225,7 +225,7 @@ $ which bitcoin-cli ### 3.3.1 配置Bitcoin Core节点 -Bitcoin Core每次启动都会在查找数据文件目录下的配置文件(文件名一般是bitcoin.conf)。这一部分先了解配置文件的不同选项,建立配置文件。要找到配置文件的位置,在“terminal”中运行bitcoind -printtoconsole命令,命令输出的前几行就能看到。 +Bitcoin Core每次启动都会在查找数据文件目录下的配置文件(文件名一般是``bitcoin.conf``)。这一部分先了解配置文件的不同选项,建立配置文件。要找到配置文件的位置,在``terminal``中运行``bitcoind -printtoconsole``命令,命令输出的前几行就能看到。 ``` $ bitcoind -printtoconsole @@ -237,11 +237,11 @@ Using config file /home/ubuntu/.bitcoin/bitcoin.conf [a lot more debug output] ... ``` -找到配置文件的位置后,可以使用Ctrl-C退出程序。一般来说,配置文件位于当前用户的主目录的.bitcoin数据目录下。系统不会自动创建这个文件的,需要手动从下面例3的内容复制粘贴过来。也可以使用自己的默认编辑器手动创建进行修改。 +找到配置文件的位置后,可以使用``Ctrl-C``退出程序。一般来说,配置文件位于当前用户的主目录的``.bitcoin``数据目录下。系统不会自动创建这个文件的,需要手动从下面例3的内容复制粘贴过来。也可以使用自己的默认编辑器手动创建进行修改。 Bitcoin Core还提供了100多个配置选项,可以修改网络节点的行为,区块链的存储以及操作的其他方面。 -要查看这些选项的列表,运行bitcoind --help命令: +要查看这些选项的列表,运行``bitcoind --help``命令: ``` $ bitcoind --help @@ -269,51 +269,51 @@ Options: Set the number of threads to service RPC calls (default: 4) ``` -以下是您可以在配置文件中设置的一些最重要的选项,也可以作为bitcoind的命令行参数: +以下是您可以在配置文件中设置的一些最重要的选项,也可以作为``bitcoind``的命令行参数: -alertnotify +``alertnotify`` 运行指定的命令或脚本,通常通过电子邮件将紧急警报发送给该节点的所有者。 -conf +``conf`` -配置文件的替代位置。 只作为bitcoind的命令行参数有意义,不能在配置文件中起作用。 +配置文件的替代位置。 只作为``bitcoind``的命令行参数有意义,不能在配置文件中起作用。 -datadir +``datadir`` -选择存放区块链数据的目录和文件系统。 默认情况下,在账户主目录的.bitcoin子目录。 确保该文件系统最少有几GB的可用空间。 +选择存放区块链数据的目录和文件系统。 默认情况下,在账户主目录的``.bitcoin``子目录。 确保该文件系统最少有几GB的可用空间。 -prune +``prune`` 启用修剪模式,通过删除旧区块,将磁盘空间要求降低到几百MB。供空间有限的节点使用。 -txindex +``txindex`` 维护所有交易的索引。 这意味着可以通过ID以编程方式在区块链的完整副本中检索任何交易。 -dbcache +``dbcache`` 设置UTXO cache大小。默认是300MB。配置高的系统上可以增加一些,配置低的话就减少一些,可以减少内存消耗,但是需要更多的磁盘IO开销。 -maxconnections +``maxconnections`` 设置最连接多少个节点。 从默认值减少该值将减少带宽消耗。 如果网络是带宽受限或者按照流量计费,可以设置这个参数。 -maxmempool +``maxmempool`` 将交易内存池限制在几兆字节。 使用它来减少节点的内存使用。 -maxreceivebuffer/maxsendbuffer +``maxreceivebuffer/maxsendbuffer`` 将每个连接的内存缓冲区限制为多少个KB。 在内存受限节点上使用。 -minrelaytxfee +``minrelaytxfee`` 设置发送的交易的的最低费用。 低于此值,交易被视为不规范的,会被交易池拒绝,也不会被发送。 **交易数据库索引和txindex选项** -默认情况下,Bitcoin Core会创建一个数据库,这个数据库只包含与用户钱包有关的交易。 如果您想要使用诸如getrawtransaction(参见3.4.2)之类的命令解读任何交易,则需要修改配置文件中的txindex选项设置txindex = 1来构建完整的交易索引。 如果不是一开始设置此选项,后期再想开启完全索引,需要使用-reindex选项重新启动bitcoind,并等待它重建索引。 +默认情况下,Bitcoin Core会创建一个数据库,这个数据库只包含与用户钱包有关的交易。 如果您想要使用诸如``getrawtransaction``(参见3.4.2)之类的命令解读任何交易,则需要修改配置文件中的txindex选项设置``txindex=1``来构建完整的交易索引。 如果不是一开始设置此选项,后期再想开启完全索引,需要使用``-reindex``选项重新启动``bitcoind``,并等待它重建索引。 下面的配置文件显示了前面提到的选项与完全索引节点组合起来的示例,可以作为比特币应用程序的API后端运行。 @@ -337,7 +337,7 @@ maxreceivebuffer=2500 maxsendbuffer=500 ``` -配置文件修改完成之后,可以使用printtoconsole选项测试 bitcoind,查看输出的结果: +配置文件修改完成之后,可以使用``printtoconsole``选项测试``bitcoind``,查看输出的结果: ``` $ bitcoind -printtoconsole @@ -373,11 +373,11 @@ Opened LevelDB successfully [... more startup messages ...] ``` -一确认配置显示正常,可以按Ctrl-C中断进程。 +一确认配置显示正常,可以按``Ctrl-C``中断进程。 -如果不想在前台运行Bitcoin Core,可以使用守护进程选项启动:bitcoind -daemon,在后台运行。 +如果不想在前台运行Bitcoin Core,可以使用守护进程选项启动:``bitcoind -daemon``,在后台运行。 -要监视比特币节点的进度和运行状态,使用命令bitcoin-cli getblockchaininfo: +要监视比特币节点的进度和运行状态,使用命令``bitcoin-cli getblockchaininfo``: ``` $ bitcoin-cli getblockchaininfo @@ -397,11 +397,11 @@ $ bitcoin-cli getblockchaininfo 上面输出内容显示了这个节点当前更新的数据是区块高度为0,区块头为83999,意思是只获取到了最佳链的区块头,完整的区块数据之后才会开始下载。 -配置选项确定好之后,应该将bitcoin命令添加到操作系统中的启动脚本中,让它随系统重启自动启动。 可以在contrib / init下的bitcoin目录查看README.md文件,找到不同操作系统对应的示例启动脚本。 +配置选项确定好之后,应该将bitcoin命令添加到操作系统中的启动脚本中,让它随系统重启自动启动。 可以在``contrib/init``下的bitcoin目录查看README.md文件,找到不同操作系统对应的示例启动脚本。 ## 3.4 通过命令行使用Bitcoin Core的JSON-RPC API接口 -Bitcoin Core客户端实现了JSON-RPC接口,这个接口也可以通过命令行工具bitcoin-cli访问。命令行可以使用API进行编程,方便进行交互方式测试。开始前,使用help命令查看可用的比特币RPC命令列表: +Bitcoin Core客户端实现了JSON-RPC接口,这个接口也可以通过命令行工具``bitcoin-cli``访问。命令行可以使用API进行编程,方便进行交互方式测试。开始前,使用``help``命令查看可用的比特币RPC命令列表: ``` $ bitcoin-cli help @@ -419,7 +419,7 @@ walletpassphrase "passphrase" timeout walletpassphrasechange "oldpassphrase" "newpassphrase" ``` -这些命令中的每一个可能都有多个参数。 要获得更多帮助,查看详细说明和参数信息,可以在help之后添加命令名称。 例如,要查看getblockhash RPC命令使用详情: +这些命令中的每一个可能都有多个参数。 要获得更多帮助,查看详细说明和参数信息,可以在``help``之后添加命令名称。 例如,要查看getblockhash RPC命令使用详情: ``` $ bitcoin-cli help getblockhash @@ -438,7 +438,7 @@ Examples: > curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getblockhash", "params": [1000] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ ``` -在帮助信息的最后,可以看到RPC命令的两个示例,使用bitcoin-cli或HTTP客户端的curl。 这些例子演示如何调用命令。 复制第一个示例并查看结果: +在帮助信息的最后,可以看到RPC命令的两个示例,使用``bitcoin-cli``或HTTP客户端的``curl``。 这些例子演示如何调用命令。 复制第一个示例并查看结果: ``` $ bitcoin-cli getblockhash 1000 @@ -451,9 +451,9 @@ $ bitcoin-cli getblockhash 1000 ### 3.4.1 获得Bitcoin Core客户端状态的信息 -Bitcoin Core通过JSON-RPC提供了不同模块的状态信息。其中最重要的命令有getblockchaininfo, getmempoolinfo, getnetworkinfo and getwalletinfo。 +Bitcoin Core通过JSON-RPC提供了不同模块的状态信息。其中最重要的命令有``getblockchaininfo``, ``getmempoolinfo``, ``getnetworkinfo``和``getwalletinfo``。 -getblockchaininfo RPC命令之前介绍过了。getnetworkinfo显示比特币网络节点状态的基本信息。用bitcoin-cli运行这个命令示例如下: +``getblockchaininfo`` RPC命令之前介绍过了。``getnetworkinfo``显示比特币网络节点状态的基本信息。用``bitcoin-cli``运行这个命令示例如下: ``` $ bitcoin-cli getnetworkinfo @@ -484,7 +484,7 @@ $ bitcoin-cli getnetworkinfo ### 3.4.2 查看和解码交易 -命令:getrawtransaction,decoderawtransaction +命令:``getrawtransaction``,``decoderawtransaction`` 在买咖啡的故事中,Alice从Bob咖啡厅买了一杯咖啡。 她的交易ID(txid)0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2,已经被记录在区块链上。 使用API把交易ID作为参数可以进行检索和检查该交易: @@ -503,7 +503,7 @@ ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813014↵ >**提示** 交易ID在交易被确认之前是没有意义的。 在区块链中缺少交易哈希并不意味着交易未被处理。 这被称为“交易延展性”,因为区块中的交易被确认之前是可以修改交易哈希的。 交易被确认后,txid是就是不可改变的和权威的。 -命令getrawtransaction以十六进制形式返回序列化交易。 为了解码,使用decoderawtransaction命令,将十六进制数据作为参数。 可以复制getrawtransaction返回的十六进制,并将其作为参数粘贴到decoderawtransaction中: +命令``getrawtransaction``以十六进制形式返回序列化交易。 为了解码,使用decoderawtransaction命令,将十六进制数据作为参数。 可以复制``getrawtransaction``返回的十六进制,并将其作为参数粘贴到decoderawtransaction中: ``` $ bitcoin-cli decoderawtransaction 0100000001186f9f998a5aa6f048e51dd8419a14d8↵ @@ -566,15 +566,15 @@ d50f654e788acd0ef8000000000001976a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8↵ 交易解码展示这笔交易的所有成分,包括交易的输入及输出。在这个例子中,可以看到这笔给我们新地址存入15mBTC的交易使用了一个输入并且产生两个输出。这笔交易的输入是前一笔确认交易的输出(以7957a35fe开头的 vin txid)。两个输出则是15mBTC转账金额和返回的找零金额。 -可以使用相同命令(例如 gettransaction )检查本次交易txid前一笔交易,进一步探索区块链。通过从一笔交易跳到另外一笔交易,我们可以追溯一连串的交易,因为币一定是从一个拥有者的地址传送到另一个拥有者的地址。 +可以使用相同命令(例如 ``gettransaction``)检查本次交易txid前一笔交易,进一步探索区块链。通过从一笔交易跳到另外一笔交易,我们可以追溯一连串的交易,因为币一定是从一个拥有者的地址传送到另一个拥有者的地址。 ### 3.4.3 探索区块 -命令: getblock 、 getblockhash +命令: ``getblock``,``getblockhash`` 探索区块类似于探索交易。不同之处是区块可以由区块高度或区块哈希引用。首先,我们找一个区块的高度。在买咖啡故事中,我们看到Alice的交易已被包含在277316区块中。 -使用getblockhash命令,该命令用区块高度作为参数,并返回该区块的区块哈希值: +使用``getblockhash``命令,该命令用区块高度作为参数,并返回该区块的区块哈希值: ``` $ bitcoin-cli getblockhash 277316 @@ -635,7 +635,7 @@ Bitcoin Core的API是一个JSON-RPC接口。 JSON代表JavaScript Object Notatio $ curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getinfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ ``` -此命令显示curl向本地主机(127.0.0.1)提交HTTP请求,连接到默认比特币端口(8332),并使用text / plain编码向getinfo方法提交jsonrpc请求。 +此命令显示curl向本地主机(127.0.0.1)提交HTTP请求,连接到默认比特币端口(8332),并使用text/plain编码向getinfo方法提交jsonrpc请求。 你会注意到curl随同请求会发出一个凭证。Bitcoin Core每次启动时会创建一个随机口令,放在数据目录下的.cookie文件中。bitcoin-cli助手会读取数据目录下的这个口令文件。同样你也可以复制这个口令发送给curl(或更高级别的Bitcoin Core RPC封装)。你还可以使用Bitcoin Core源码目录下的./share/rpcauth/rpcauth.py助手脚本创建一个静态口令。 @@ -700,7 +700,7 @@ $ python rpc_transaction.py ([u'1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK'], Decimal('0.08450000')) ``` -上述两个例子都比较简单。 你真的不需要一个程序来运行它们; 你可以很容易地使用bitcoin-cli 助手。 不过,下一个示例需要数百个RPC调用,并更清楚地说明了使用编程接口的方便。 +上述两个例子都比较简单。 你真的不需要一个程序来运行它们; 你可以很容易地使用bitcoin-cli助手。 不过,下一个示例需要数百个RPC调用,并更清楚地说明了使用编程接口的方便。 在例5中,我们首先检索区块277316,然后通过引用每个交易ID来检索所有的419个交易。 接下来,我们遍历每个交易的输出累加起来。