本文详细介绍了Bitcoin的mempool概念,包括其原理、影响因素以及如何使用Bitcoin RPC方法访问和分析mempool中的交易数据。文中还介绍了与SegWit相关的内容,以及如何设置Bitcoin节点和获取交易信息,适合对区块链技术有一定了解的读者。
比特币是区块链技术的奠基者。比特币开启了区块链和去中心化的新纪元。比特币使每个人都能够进行现在所享受的点对点交易;本指南将教你如何从比特币的mempool中获取这些交易。
先决条件:
在比特币网络上发送的交易并不会直接加入区块链。所有有效的交易必须先进入一个待处理区域,然后才会被接受到一个块中。这个待处理区域被称为mempool。如果mempool的大小很大,这表明网络流量高,导致交易确认时间变长和交易费用增加。
注意:在标准实践中,Bitcoin是协议/网络,而bitcoin或BTC是货币。
比特币交易费用是通过为每个交易字节支付的比特币的satoshis数目来衡量的。Satoshi是比特币网络本土货币bitcoin的最小单位,1比特币 = 1亿satoshis。矿工优先处理mempool中交易费用高的交易。但自从SegWit升级后,比特币交易发生了一些变化。它引入了一种新的交易,称为SegWit交易,以增加每个比特币块的交易数量。它解决了两个问题:1. 增加了比特币每秒的交易数量,2. 解决了交易可塑性的问题。
在SegWit之前,块或交易是以字节为单位来测量的,每个块的大小限制为1 MB(兆字节)或100万字节。在SegWit之后,交易和块以权重单位来衡量;这些权重单位用于测量比特币数据并比较交易。
下一个要讨论的概念是vByte。1 vByte等于4个权重单位。1个字节的数据在传统交易中需要1 vByte(4个权重单位)。而对于SegWit交易,1个字节的数据只需1/4 vByte(1个权重单位)。这个折扣允许块填充4倍数量的交易。当前比特币块的大小限制为1 vMegabyte/ 100万 vByte/ 400万个权重单位。大多数钱包以satoshis/vByte的方式计算交易费用,即每使用1 vByte的数据需支付相应的费用。
比特币mempool分析用例:
mempool分析帮助我们了解网络的拥堵/流量,最终帮助我们计算交易费用。
我们现在访问mempool并获取一些交易数据。
为了今天的目的,我们需要一个比特币节点来访问区块链数据。在这里启动我们自己的节点将非常昂贵和耗时,因为比特币上有大量数据。我们将注册一个免费的QuickNode账户在这里,在这里我们将能够轻松创建一个比特币端点。
复制并保存你节点的HTTPS URL,因为稍后会用到。
我们将使用比特币的RPC方法来获取mempool数据,具体来说是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方法。
输出应该类似于此。
现在让我们理解输出主体。上述方法给出了当前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行:mempool中所有后代交易的修改费用。
第18行:mempool中祖先交易的数量,包括这一笔。
第19行:mempool中所有祖先交易的大小。
第20行:mempool中所有祖先交易的修改费用。
第21行:与witness数据一起的交易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显示在mempool中该特定交易用作输入的交易列表。
第21-33行:Vout显示在mempool中使用该特定交易作为输入的交易列表。
第34行:区块哈希,此处为null,因为该交易尚未确认。
第35行:该交易的确认次数。
第36行:交易进入池中的时间,以1970年1月1日格林威治标准时间以来的秒数计。
第37行:块挖掘的时间,即交易被添加的块,此处为null,因为该交易仍在处理。
第38行:序列化的,十六进制编码的数据以表示'txid'
通过分析上述数据,我们可以理解比特币交易的方方面面。比特币交易相当复杂,但getrawtransaction方法返回了原始交易信息,这些信息易于查看和理解。
恭喜你掌握了比特币mempool。在本指南中,我们学习了比特币mempool是什么、比特币mempool的用途、如何访问比特币mempool/如何获取比特币的待处理交易及如何获取比特币待处理交易数据。
订阅我们的时事通讯,以获取更多关于以太坊的文章和指南。如果你有任何反馈,欢迎通过Twitter与我们联系。你也可以随时在我们的Discord社区服务器上与我们聊天,那里有一些你见过的最酷的开发者 :)
- 原文链接: quicknode.com/guides/oth...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!