首页 百科知识 交易链条和孤儿交易

交易链条和孤儿交易

时间:2022-07-17 百科知识 版权反馈
【摘要】:正如我们所看到的,交易构成了一根链条,一个交易花费了上一笔交易(父交易)的输出,并创建新的输出以供后一笔交易(子交易)使用。有时候子交易可能早于父交易到达。没有父交易的交易池被称为孤儿交易池。然后,整个交易链条就可以被放进交易池,等待被含进区块。交易链条的长度不受限制,允许任意数量的世代交易同时传输。

正如我们所看到的,交易构成了一根链条,一个交易花费了上一笔交易(父交易)的输出,并创建新的输出以供后一笔交易(子交易)使用。有时,整根交易链条需要互相依赖,比方说父交易、子交易、孙交易是被同时创建的,用以满足一个复杂的交易流程要求,这个流程要求有效的子交易要先于父交易进行签名。举例来说,这就是和币(CoinJoin)交易所使用的技术,这种交易需要所有参与者同时加入,以保护隐私

当一个交易链条在网络中传输时,它们不一定总是按照相同的顺序到达。有时候子交易可能早于父交易到达。这种情况下,看到子交易的节点会发现交易引用了一个未知的父交易。节点不会直接拒绝这笔交易,而是先将其放入一个临时的交易池,等待它的父交易到来;与此同时,节点继续向其他节点传播这笔交易。没有父交易的交易池被称为孤儿交易池(orphan transaction pool)。一旦父交易到达,所有引用了父交易的UTXO的子交易都将从池子里释放出来,重新进行递归验证。然后,整个交易链条就可以被放进交易池,等待被含进区块。交易链条的长度不受限制,允许任意数量的世代交易同时传输。将孤儿交易放进孤儿交易池的机制,可以保证原本有效的交易不会仅仅因为其父交易延时到达而被拒绝,不管到达的顺序如何,它们从属的交易链条最终都会依照正确的顺序重建起来。

存放在内存中的孤儿交易数量是有数量限制的,这样可以防止针对比特币节点发起的拒绝服务攻击。限制数量在比特币标准客户端的源码中定义为:MAX_ORPHAN_TRANSACTIONS。如果池中的交易数量超过MAX_ORPHAN_TRANSACTIONS,一个或多个交易就会被随机从池中排除出去,直到池中的交易数量小于限制数量。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈