我正在尝试在python中实现一个区块链,我已经具有创建交易和块(以及所有密码材料(的链代码。我有一个本地存储池用于未确认的交易,该交易是否应该与其他节点共享?
我已经搜索了有关此主题的信息,但是我没有找到任何具体信息。在我看来,交易是在一种"未经证实的交易"内存库中传播的,并且节点检查了其他节点中没有的未确认交易,从而删除了已经存在于链中的节点。它是否正确?如果是,我很乐意夺回一些帮助或链接到信息。
另一个问题:假设我拥有那枚硬币的0.5,我想将其转移到X先生。我执行我的交易,并且节点检查当前链中,我确实有0.5硬币,所以我签署了我的交易并将其发送给所谓的未经证实的交易池(提到这些不在真实的链上(。然后,假设我在此交易获得确认之前进行了另一项交易。这是建立一个块的过程,以检查我的第一次交易是否得到0.5,但第二笔交易没有?还是这是创建交易过程的工作?如果是第二个,那么未经证实的交易应该参与实际金钱的数量...您看到我的烂摊子吗?
是区块链内存池的"未确认交易",分布在节点上?
是的,一旦节点收到交易(假设节点是正常配置(,它将在验证后立即将该交易广播到其同行。当然,如果已将交易已被挖掘(包括在一个块中(,则将失败验证。这是必要的,因为除非一个节点具有很大的标题功率,否则很难开采,因为这将是唯一了解交易的人。如果没有共享Mempool,也会发生很多冲突。
在您的第二个问题上:
当您提交交易时,钱包软件应从您的可用余额中扣除(假设没有被拒绝(。在比特币(和其他相关货币(中,如果未在一定时间范围内确认交易(包含在一个块中((比特币为2周(,则将其从mempool中删除,并且硬币可以再次花费。否则,您可以做一个替换byfee来覆盖交易,并以少量费用将硬币发送给自己。