深入技术
内存池

内存池

当前内存池信息

已占内存:  272.13 MB
交易数量:  102,021
总交易费:  1.04 BTC
总交易大小:  48.20 vMB
最低内存池费率:  1 sat/byte
最低转发费率:  1 sat/byte
未广播交易数量:  1

内存池 (mempool) 是交易的暂存区, 矿工挖矿时会从内存池选择交易打包进区块。凡是进入内存池中的交易都是经过验证的有效的交易

在节点收到一笔交易后, 首先会验证交易的有效性, 比如检查交易的签名是否正确、交易费率是否大于节点设置的费率、内存池中是否有花费相同输入的交易等。如果交易通过了验证, 则会被添加到内存池中并转发到已知的其它网络节点。

内存池中的交易(子)可以花费另一个仍在内存池中的交易(父)的输出, 这两个交易可以称作父子交易。打包时, 父交易必须排在子交易前面, 可以是同一个区块, 也可以是不同区块。

子交易也可以有子交易, 但是有一个限制:从初始的父交易开始, 最多只能有 25 个后代交易。

如果一笔交易的手续费太低, 它可能永远不会被打包进区块。因为矿工会优先选择手续费高的交易。这种情况下, 交易会在内存池中停留一段时间, 然后被节点移出内存池。这个时间默认是 2 周。

节点设置

如果你本地正在运行一个 bitcoin-core 节点, 你可以在 bitcoin.conf 文件中配置内存池的一些参数:

  • mempoolexpiry - 内存池中交易的最大时间限制, 默认为 336小时(2周)
  • maxmempool - 设置内存池的最大大小, 默认 300 MB, 超过时会移除低费率的交易
  • mempoolreplacement - 设置内存池中交易的替换策略, 有以下取值:
    • 1 - 默认值, 允许所有交易的替换
    • 0 - 禁止替换
    • fee - 只允许费率更高的替换
    • fee,output - 只允许费率更高和添加新输出的替换
  • mempoolminfee - 设置内存池中交易的最低费用, 默认值为 0.00001, 表示 1 sat/byte (如果没有强制设置, 可能会自动调整)
  • minmempoolfee - 内存池中交易的最低费用, 默认值为 0.00001, 表示 1 sat/byte
  • minrelaytxfee - 设置节点接受的最低费用, 低于这个值将不会转发交易, 默认值为 0.00001, 表示 1 sat/byte
  • limitancestorcount - 交易有未确认祖先交易数量。默认值为 25
  • limitancestorsize - 交易有未确认祖先交易的总大小。默认值为 101000, 表示 101 kvB
  • limitdescendantcount - 交易有未确认后代交易数量。默认值为 25
  • limitdescendantsize - 交易有未确认后代交易的总大小。默认值为 101000, 表示 101 kvB

相关RPC

获取节点内存池信息
返回值
名称类型描述
loadedboolean内存池是否已加载
sizenumber内存池中交易数量
bytesnumber内存池中交易总大小
usagenumber内存池占用的内存大小
maxmempoolnumber内存池的最大大小
mempoolminfeenumber内存池中交易的最低费用
minrelaytxfeenumber节点接受的最低费用
unbroadcastcountnumber未广播的交易数量
获取内存池所有交易信息
参数列表
参数名类型必选默认值描述
verbosebooleanfalse是否返回交易详情
mempool_sequencebooleanfalse每次内存池状态改变都会自增的序列号
获取内存池中某交易详情
参数列表
参数名类型必选默认值描述
txidstring-交易ID
重要返回值
名称类型描述
vsizenumber交易的虚拟大小
weightnumber交易的权重, witness 数据占 1/4, 其他数据占 1
feenumber交易的手续费
timenumber交易进入内存池的时间
heightnumber交易进入内存池时的区块高度
dependsarray交易的依赖交易
spentbyarray花费这笔交易输出的交易
descendantcountnumber交易的后代交易数量
descendantsizenumber交易的后代交易总大小
ancestorcountnumber交易的祖先交易数量
ancestorsizenumber交易的祖先交易总大小
获取内存池中特定交易的所有祖先交易信息
参数列表
参数名类型必选默认值描述
txidstring-交易ID
verbosebooleanfalse是否返回交易详情
获取内存池中特定交易的所有后代交易信息
参数列表
参数名类型必选默认值描述
txidstring-交易ID
verbosebooleanfalse是否返回交易详情
Copyright © 2024 HeapUp