"unconfirmed transactions" 的区块链内存池是否分布在节点上?

Are "unconfirmed transactions" of a blockchain's memory pool spread over nodes?

我正在尝试在 python 中实现区块链,我已经拥有能够创建交易和区块(以及所有加密内容)的链码。我有一个用于未确认交易的本地内存池,这些交易是否应该与其他节点共享?

我已经搜索了有关此主题的信息,但没有找到任何具体信息。 在我看来,交易在一种 "unconfirmed transactions" 内存池中传播是有道理的,并且节点检查它们在其他节点中没有的未确认交易,删除那些已经存在于链中的交易。 这个对吗?如果是,我将很高兴收到一些帮助或 link 信息。

另一个问题: 假设我拥有该硬币的 0.5,我想将它们转移给 X 先生。我执行我的交易,节点检查当前链中是否有 0.5 个硬币,所以我签署我的交易并将其发送到假定的未确认交易池(提到那些不在真正的链上)。然后假设我在确认交易之前进行了另一笔 0.5 的交易。这是构建区块的过程,以检查我是否在第一笔交易中获得了 0.5,但在第二笔交易中却没有?还是交易创建过程的工作?如果是第二种,那未确认的交易就应该参与到实际的钱数中去……你看我乱七八糟的?

Are “unconfirmed transactions” of a blockchain's memory pool spread over nodes?

是的,一旦节点收到交易(假设该节点配置正常),它将在验证后立即将该交易广播给它的对等方。当然,如果交易已经被挖掘(包含在一个区块中),它将无法通过验证。这是必要的,因为除非那个节点有很多哈希算力,否则将很难挖掘,因为它是唯一知道交易的节点。如果内存池不共享,也会有很多冲突。

关于你的第二个问题:

当您提交交易时,钱包软件应该从您的可用余额中扣除(假设它没有被拒绝)。在比特币(和其他相关货币)中,如果交易在一定时间范围内(比特币是 2 周)没有被确认(包含在一个区块中),那么它将被从内存池中移除,并且这些币可以再次自由消费。否则,您可以执行 replaceByFee 来覆盖该交易并以少量费用将硬币发回给您自己。