• 区块链【5】你说要给我一百万,那么问题来了


    上期讨论了如何进行身份验证,现在我们知道如何去确认一条广播的信息是不是由本人发出的。现在假设收到了一条广播,内容是Alice支付给Bob一百万个比特币,经过身份验证,确认信息是由本人发出,未经篡改。那么问题来了,Alice有没有一百万个比特币呢?

    如何进行余额的检查呢?我们知道区块链是把很多的交易信息,一个块一个块打包,再把它穿一个串,链起来的,并且,每一个人在使用区块链比特币的时候,都会下载所有的块,从第一个创世纪的块开始,一直到最新的块,所以如果有一天Alice说,我要付给Bob十个比特币,并且把这件事给广播出去,其他人接收到这个消息后,就需要进行余额检查。怎么检查?通过追溯。将Alice的所有交易信息,从后向前逐条追溯。比如,Alice的第一条交易信息是通过挖矿获得了50个比特币,第二条是付给某人40个比特币,然后就没有记录了,那么我们就能知道,Alice现在的余额是10,足够支付,这条交易信息就会被全网接受。

    现在又假设,Alice只有10个比特币,但是她同时发送了两条广播,内容是分别向Bob和Carl支付了10个比特币,这种时候我们又如何来鉴别呢?

    由于网络延迟的存在,有些人会先接收到第一条消息,有些人会先接收到第二条消息。每一个用户接收到Alice的消息之后,会进行余额验证,先接收到第一条消息的人,会拒绝第二条消息,同理,先接收到第二条消息的人,会拒绝第一条消息。此时,既有接收了第一条消息的人,也有接收了第二条消息的人,但是没有关系,交易信息并没有被确认,直到有一个幸运儿,找到了那道数学题的解,然后打包了一个新的块,链到主链上去。新块产生后,其他人都会放弃自己的块,去接收新块,也就意味着双重支付中的某一条交易信息被确认,另一条被抛弃。这样,双重支付的问题就被解决了。所以,当接收到别人付款的时候,不能当时就认为比特币已经到账了,必须等到新块产生,付款信息已经记录在主链上时,才是真正的到账。

    我是蓝博hr,今天的区块链就聊到这里,我们下期见!

    官网:http://www.lenbor.com
  • 相关阅读:
    python3全栈开发-并发编程的多进程理论
    python3全栈开发-补充UDP的套接字、操作系统、并发的理论基础
    python3全栈开发-什么是粘包、粘包现象、如何解决粘包
    python3全栈开发-socket编程
    python3全栈开发- 元类metaclass(面试必考题)
    浏览器窗口
    SQL 笔记
    数据库连接字符串
    获取网卡地址信息
    启动所选择的应用程序
  • 原文地址:https://www.cnblogs.com/lenbor/p/12660929.html
Copyright © 2020-2023  润新知