C++从零开始区块链:区块链业务模块之重复交易检测

想象这样一个场景:
节点a广播了一条消息,节点b和节点c都收到并记录在自己的交易列表中了。
然后节点b和节点c挖矿。
当节点b挖矿成功,将a的交易打包到区块中,并在网络上广播。
这时节点c接收到节点b的挖矿成功的广播,区块验证通过后挂到自己的区块上,然后继续挖矿。
当节点c也挖矿成功后,将自己的交易列表打包程区块在节点上广播。
而节点d是个小透明,先接收到b的区块,后接收到c的区块,然后将自己的区块同步到主链上。
于是问题来了,b和c都将a的交易记录了一次,并都打包成区块,又都被挂到了主链上。其造成的结果就是a明明只广播了一条交易,但主链上却记录了a的两次交易,很明显是错误的。
那么怎么解决呢?就是在每个节点的接收到一个挖矿广播后,用自己的交易列表和区块的交易列表进行比对,如果发现自己的列表中的某个交易已经记录在区块上了,就将自己的该交易记录删除。
单从交易的付款方,收款方,交易金额来区分是否是同一支交易是不合适的,因为很有可能两个人进行了多次金额相同的交易。为解决这个问题,需要在交易中加入一个随机值或者是时间戳。但本例只为演示,就不加了。

void BlockChain::DeleteDuplicateTransactions(const Block &block)
{
    std::
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木千

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值