如何访问比特币交易池

本文介绍了比特币Mempool的概念,它作为交易进入区块链之前的等待区域。文章详细解释了如何使用QuickNode设置比特币节点,并通过Bitcoin RPC方法访问和分析Mempool中的交易数据,包括交易费用、大小、时间以及与其他交易的依赖关系,最后还介绍了如何获取原始交易数据。

概述

比特币是区块链技术的鼻祖。随着比特币的出现,区块链和去中心化的新时代开始了。比特币使每个人都可以进行他们今天所享受的 P2P 交易;本指南将教你如何从比特币内存池中获取这些交易。

前提条件:

  • 终端/cmd (CLI)。
  • 比特币节点。
  • 热爱去中心化。

什么是比特币内存池?

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

注意:在标准实践中,Bitcoin 是协议/网络,而 bitcoinBTC 是货币。

比特币交易费用以每笔交易的字节数支付的 satoshi 数量来衡量。Satoshi 是比特币网络原生货币比特币的最小单位,其中 1 比特币 = 1 亿 satoshis。矿工优先考虑内存池中交易费用高的交易。但是自从 SegWit 升级 以来,比特币交易发生了一些变化。它引入了一种新的交易,称为 SegWit 交易,以增加每个比特币区块的交易数量。它解决了两个问题:1. 它增加了比特币每秒的交易数量,2. 它解决了Transaction Malleability问题。

在 SegWit 之前,区块或交易以字节为单位衡量,每个区块限制为 1 MB(兆字节)或 1 百万字节。在 SegWit 之后,交易和区块以 权重单位 衡量;这些权重单位用于衡量比特币数据并比较交易。

接下来要介绍的概念是 vByte。一个 vByte 相当于四个权重单位。Legacy 交易的一个字节的数据占用 1 vByte(4 个权重单位)。而对于 SegWit 交易,一个字节的数据占用 1/4 vByte(1 个权重单位)。这种折扣允许区块中填充 4 倍以上的交易。当前的比特币区块大小限制为 1 vMegabyte/ 1 百万 vByte/ 4 百万权重单位。大多数钱包以 satoshis/vByte 为单位计算交易费用,即为使用的每个 vByte 数据支付的费用。

比特币内存池分析用例

内存池分析帮助我们了解网络上的拥塞/流量,最终帮助我们计算交易费用。

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

设置 QuickNode 比特币节点

为了我们今天的目的,我们需要一个比特币节点来访问区块链数据。考虑到比特币上的大量数据,启动我们自己的节点将非常昂贵且耗时。我们将注册一个免费的 QuickNode 帐户 here,在那里我们可以轻松创建比特币节点。

Quicknode 比特币节点截图

复制并保存你的节点的 HTTPS URL,因为它稍后会用到。

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

我们将使用 Bitcoin RPC methods 来获取内存池数据,特别是 getrawmempool 方法。打开终端/cmd 并复制粘贴以下内容:

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

QUICKNODE_BITCOIN_URL 替换为你的比特币节点的 HTTPS URL,这是我们在上一步中获得的。上面是向我们的节点发出的一个 cURL 请求,以及 getrawmempool 方法。

输出应该类似于这样。

现在让我们了解一下输出主体。上面的方法给出了当前在内存池中的待处理交易的列表。我们将取出一个交易并检查每个字段。

{
    "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,区块链上的交易通过该 ID 来识别。

第 4-9 行:交易费用细目。

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

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

第 12 行:用于挖矿优先级的具有费用增量的交易费用。

第 13 行:自 1970 年 1 月 1 日 GMT 以来交易进入池中的时间(以秒为单位)。

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

第 15 行:内存池中 后代交易 的数量,包括此交易。

第 16 行:内存池中所有后代交易的大小。

第 17 行:内存池中所有后代交易的修改费用。

第 18 行:内存池中 祖先交易 的数量,包括此交易。

第 19 行:内存池中所有祖先交易的大小。

第 20 行:内存池中所有祖先交易的修改费用。

第 21 行:具有 见证数据 的交易 ID。

第 22 行:如果未确认的交易用作此交易的输入,则必须在此处输入。

第 23 行:如果另一个未确认的交易正在使用来自此交易的数据,则必须在此处输入。

第 24 行:一个布尔值,显示交易是否可以由于 BIP 125 而被替换。

现在要获取实际的交易数据,我们将不得不使用另一种方法 getrawtransaction,它将返回有关特定交易的信息。在你的终端/cmd 中复制粘贴以下内容:

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 URL,这是我们在上一步中获得的。上面是向我们的节点发出的一个 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 显示了内存池中此特定交易用作输入的交易列表。

第 21-33 行:Vout 显示了内存池中使用此特定交易作为输入的交易的列表。

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

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

第 36 行:自 1970 年 1 月 1 日 GMT 以来交易进入池中的时间(以秒为单位)。

第 37 行:挖掘出交易所在的区块的时间,此处为空,因为交易正在等待处理。

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

通过分析上面的数据,我们可以了解比特币交易的来龙去脉。比特币交易非常复杂,但是 getrawtransaction 方法会给出原始的交易信息,这些信息易于查看和理解。

结论

祝贺你掌握了比特币内存池。今天在本指南中,我们学习了什么是比特币内存池,比特币内存池的用途,如何访问比特币内存池/如何获取比特币待处理交易以及如何获取比特币待处理交易数据。

订阅我们的 newsletter 以获取更多关于 Ethereum 的文章和指南。如果你有任何反馈,请随时通过 Twitter 与我们联系。你随时可以在我们的 Discord 社区服务器上与我们聊天,这里有一些你将遇到的最酷的开发者 :)

  • 原文链接: quicknode.com/guides/bit...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。