比特币交易池

比特币网络中几乎每个节点都会维护一个临时的未确认交易列表,被称为内存池(memory pool)或交易池(transaction pool)。节点使用这个池子对那些已发布到网络但尚未被包含进区块链的交易进行跟踪。比如,持有用户钱包(比特币钱包)的节点可以利用交易池,跟踪发送到用户钱包但尚未确认的支付交易。

随着交易被接收和验证,它们被加入交易池并且被中继到相邻节点,从而在网络中实现传播。

有些节点也维护一个独立的孤儿交易池。如果一个交易的输入引用了一个尚处未知状态的交易,比如说父交易缺失,这个孤儿交易就将被临时存储在孤儿交易池中,直到其父交易抵达本节点。

当交易被加到交易池时,将对孤儿交易池进行检查,以发现是否有交易引用了这个交易的输出(即其子交易)。若匹配,孤儿交易就会通过验证,并从孤儿交易池被移到普通交易池,交易链条将被补全。鉴于新移入的交易不再是孤儿交易,处理进程将递归寻找新的后代交易,直到再也找不到更多的后代。一个父交易进来后,通过重新组合孤儿交易与父交易的关系,会触发互相依赖的交易链的连锁重建。

不管是交易池还是孤儿交易池(如果实现了的话),都存放于内存中,而不是保存到永久存储中;它们随着接收到的网络消息而被动态填充。当一个节点启动时,两个池都是空的,随着不断从网络上接收新的交易,内存池也逐步被填上。

有些比特币客户端在实现过程中还维护一个UTXO数据库或UTXO池,这是一个区块链上的未花费交易输出的集合。虽然“UTXO池”听起来跟交易池类似,但是它代表的是一个完全不同的数据集合。不像交易池或孤儿交易池,UTXO池不会被初始化为空集合,而是包含几百万条未花费输出,甚至包括一些日期回溯到2009年的交易。UTXO池可保存在本地内存,也可以存储在持久化的、带索引的数据库中。

然而,交易池或孤儿交易池都只是单个节点的本地视图,节点与节点间可能由于全新启动或者重启而产生巨大区别;UTXO池代表网络当前的共识,节点间的差异通常很小。另外,交易和孤儿交易池只包含未确认交易,而UTXO只包含已确认的交易输出。

看了“比特币交易池”的朋友还学了:

比特币交易介绍

比特币交易的生命周期

868区块链学习网为您整理《比特币交易池》仅供参考。