跳转至主要内容

如何访问比特币内存池

更新于
2025年11月26日

阅读时间 7 分钟

概述

比特币是区块链技术的鼻祖。随着比特币的诞生,区块链和去中心化迎来了新时代。正是比特币让每个人都能进行如今所享有的点对点交易;本指南将教你如何从比特币内存池中获取这些交易。

先决条件:

  • 终端/cmd(命令行界面)。
  • 比特币节点。
  • 对去中心化的热爱。

什么是比特币内存池?

在比特币网络上发送的交易不会直接被添加到区块链中。所有有效的交易都必须先进入一个等待区,然后才会被纳入区块。这个等待区被称为内存池(mempool)。如果内存池的大小较大,则表明网络流量较高,这会导致交易确认时间变长,交易手续费也随之增加。

:按照惯例,比特币(Bitcoin)指的是协议/网络,而比特币(bitcoin) 或BTC则指代该货币。

比特币交易手续费以每字节交易支付的萨托什数量来衡量。萨托什是比特币网络原生货币比特币的最小单位,1比特币=1亿萨托什。矿工会优先处理内存池中手续费较高的交易。 但自SegWit升级以来,比特币交易方面发生了一些变化。该升级引入了一种名为SegWit交易的新交易类型,以增加每个比特币区块的交易数量。它解决了两个问题:1. 提高了比特币每秒的交易处理量;2. 解决了交易可变性问题。

在SegWit推出之前,区块或交易的计量单位是字节,每个区块的上限为1 MB(兆字节)或100万字节。SegWit推出后,交易和区块的计量单位改为“权重”;这些权重单位用于衡量比特币数据并比较交易。

接下来要介绍的概念是 vByte。1 vByte 相当于 4 个权重单位。在传统交易中,1 Byte 的数据占用 1 vByte(4 个权重单位)。而在 SegWit 交易中,1 Byte 的数据仅占用 1/4 vByte(1 个权重单位)。这种折让使得区块能够容纳多出 4 倍的交易。 当前比特币区块大小上限为 1 vMegabyte/100 万 vByte/400 万权重单位。大多数钱包以 satoshis/vByte 为单位计算交易手续费,即按每 vByte 数据量支付相应费用。

比特币内存池分析的应用场景

Mempool 分析有助于我们了解网络上的拥塞和流量情况,这最终有助于我们计算交易手续费。

现在,让我们访问内存池,并从中获取一些交易数据。

配置 Quicknode 比特币端点

为了实现今天的目标,我们需要一个比特币节点来访问区块链数据。鉴于比特币上的数据量庞大,在此自行启动一个节点将非常昂贵且耗时。因此,我们将在此注册一个免费的 Quicknode 账户,通过该账户可以轻松创建一个比特币端点。

Quicknode 比特币端点的截图

请复制并保存您节点的 HTTPS 网址,稍后会用到。

如何访问比特币内存池/如何获取比特币的待处理交易

我们将使用比特币 RPC 方法来获取内存池数据,具体来说是getrawmempool方法。请打开终端/命令提示符,并复制粘贴以下内容:

curl --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getrawmempool", "params": [true]}' -H 'content-type: application/json' <QUICKNODE_BITCOIN_URL>

请将QUICKNODE_BITCOIN_URL替换为您的比特币节点的 HTTPS 网址(该网址我们在上一步中已获取)。上文是一个通过 cURL向我们的节点发送的请求,其中包含 getrawmempool 方法。 

输出结果应与此类似。

现在让我们来了解输出内容。上述方法返回了一个当前位于内存池(mempool)中的待处理交易列表。我们将从中提取一条交易,并逐一解析其各个字段。

{
"result": {
"2d1228abf06836b1173936061fec0384e82e3b684d7950a27f06a06f587400d3": {
"fees": {
"base": 0.00111999,
"modified": 0.00111999,
"ancestor": 0.00111999,
"descendant": 0.00111999
},
"size": 90826,
"fee": 0.00111999,
"modifiedfee": 0.00111999,
"time": 1629052793,
"height": 695936,
"descendantcount": 1,
"descendantsize": 90826,
"descendantfees": 111999,
"ancestorcount": 1,
"ancestorsize": 90826,
"ancestorfees": 111999,
"wtxid": "b3b49bb3dcae483d579710a2e1f9c7ed585ab35e2a8cb941ff8cb27ea8adec20",
"depends": [],
"spentby": [],
"bip125-replaceable": false
}
}
}

上述 JSON 输出说明:

第3行:这是用于识别区块链上某笔交易的交易ID。

第4-9行:交易费明细。

第 10 行:根据BIP 141 规定的交易大小。

第11行:以BTC(比特币)计的交易手续费。

第12行:包含用于确定挖矿优先级的交易费差值的交易费。

第13行:交易进入池的时间(以秒为单位,自1970年1月1日格林尼治标准时间起计算)。

第 14 行:交易进入交易池时区块链(最新区块)的高度。

第 15 行:mempool 中包含本笔交易在内的子交易数量。

第16行:mempool中所有子交易的大小。

第 17 行:修改了内存池中所有子交易的手续费。

第 18 行:mempool 中包含本次交易的祖先交易数量

第 19 行:mempool 中所有祖先交易的大小。

第 20 行:mempool 中所有父交易修改后的手续费。

第 21 行:交易 ID 及见证数据

第 22 行:如果将一笔未确认的交易作为本交易的输入,则应在此处填写。

第 23 行:如果另一笔未确认的交易使用了本交易的数据,则必须在此处填写。

第 24 行:一个布尔值,用于指示该交易是否可根据BIP 125 被替换。

现在,要获取实际的交易数据,我们需要使用另一个方法getrawtransaction,该方法将返回有关特定交易的信息。请将以下内容复制并粘贴到终端/命令提示符中:

curl --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getrawtransaction", "params": ["2d1228abf06836b1173936061fec0384e82e3b684d7950a27f06a06f587400d3", true]}' -H 'content-type: application/json' <QUICKNODE_BITCOIN_URL>

QUICKNODE_BITCOIN_URL替换为您的比特币节点的 HTTPS 网址,该网址我们在上一步中已获取。 上文是一个使用 cURL向我们的节点发送的请求,其中包含 getrawtransaction 方法。要获取该方法,我们将向节点发送 ping 请求以解析该方法。调用此方法时,我们需要传入两个参数。第一个是待查询交易的交易 ID。第二个是一个布尔值,如果设置为 false,则返回一个字符串;否则,返回一个 JSON 对象。

我们将第二个参数设置为“true”,因此输出结果应如下所示。

此处粘贴的交易对象说明:

第3行:用于标识区块链上某笔交易的交易ID(与提供的相同)。

第4行:由见证交易的txid生成的交易哈希值。

第 5 行:根据BIP 141 规定的交易大小。

第 6 行:交易的虚拟大小,该大小基于见证交易的大小计算得出。

第7行:交易的版本号,目前为1或2。如果是2,则表示适用BIP 68

第8行:锁定时间以区块号形式指定。如果指定了锁定时间,则该交易只有在超过锁定时间的区块之后,才能被加入该区块。例如,如果锁定时间指定为30,那么矿工只能在区块号30被挖出之后才可采纳该交易。

第 9-20 行:Vin 显示了该笔交易作为输入所使用的 mempool 中的交易列表。

第 21-33 行:Vout 显示了以该特定交易为输入的 mempool 中的交易列表。

第34行:区块哈希,此处显示为null,因为该交易尚未确认。

第 35 行:该交易已通过的确认次数。

第36行:交易进入池的时间,以自1970年1月1日格林尼治标准时间(GMT)起计算的秒数表示。

第 37 行:添加该交易所在的区块的挖矿时间,由于该交易处于待处理状态,此处为空。

第 38 行:'txid' 的序列化、十六进制编码数据

通过分析上述数据,我们可以深入了解比特币交易的方方面面。比特币交易虽然相当复杂,但 getrawtransaction 方法会返回原始交易信息,这些信息便于查看和理解。

结论

恭喜您掌握了比特币内存池的相关知识。在本指南中,我们学习了什么是比特币内存池、比特币内存池的用途、如何访问比特币内存池/如何获取比特币待处理交易,以及如何获取比特币待处理交易数据。

订阅我们的通讯,获取更多关于以太坊的文章和指南。如果您有任何反馈,欢迎通过Twitter 联系我们。您还可以随时在我们的Discord社区服务器上与我们交流,那里聚集了您能遇到的最酷的开发者们 :)

分享本指南