内存池和孤立池
几乎每个比特币网络上的节点都维护着一个临时的未确认交易列表,称为内存池(mempool)。节点使用这个池来跟踪已知于网络但尚未包含在区块链中的交易,称为未确认交易。
随着未确认交易的接收和验证,它们被添加到内存池,并被中继到相邻节点以在网络上传播。
一些节点实现还维护一个单独的孤立交易池。如果交易的输入引用了尚未知晓的交易,比如缺少的父交易,那么孤立交易将临时存储在孤立池中,直到父交易到来。
当交易被添加到内存池时,会检查孤立池中是否有任何引用该交易输出(其子交易)的孤立交易。任何匹配的孤立交易都将被验证。如果有效,它们将从孤立池中移除,并添加到内存池中,完成从父交易开始的链条。随着新添加的交易不再是孤立交易,这个过程会递归地重复,查找任何更进一步的后代,直到不再找到后代。通过这个过程,父交易的到来触发了整个链条的相互依赖交易的级联重构,将孤立交易与其父交易一直重组到链条的底部。
一些比特币实现还维护一个未花费交易输出(UTXO)数据库,这是区块链上所有未花费输出的集合。这代表了与内存池不同的一组数据。与内存池和孤立池不同,UTXO数据库包含了数百万条未花费交易输出的条目,从创世区块一直到现在所有尚未花费的输出。UTXO数据库以表格形式存储在持久性存储中。
虽然内存池和孤立池代表了单个节点的局部视角,可能会因节点的启动或重新启动时间的不同而变化,但UTXO数据库代表了网络的累积共识,因此在节点之间通常不会变化。
现在我们对节点和客户端用于在比特币网络上传输数据的许多数据类型和结构有了一定的了解,现在是时候来看看负责保持网络安全和运行的软件了。
Last updated