上期讨论了如何进行身份验证,现在我们知道如何去确认一条广播的信息是不是由本人发出的。现在假设收到了一条广播,内容是Alice支付给Bob一百万个比特币,经过身份验证,确认信息是由本人发出,未经篡改。那么问题来了,Alice有没有一百万个比特币呢?
如何进行余额的检查呢?我们知道区块链是把很多的交易信息,一个块一个块打包,再把它穿一个串,链起来的,并且,每一个人在使用区块链比特币的时候,都会下载所有的块,从第一个创世纪的块开始,一直到最新的块,所以如果有一天Alice说,我要付给Bob十个比特币,并且把这件事给广播出去,其他人接收到这个消息后,就需要进行余额检查。怎么检查?通过追溯。将Alice的所有交易信息,从后向前逐条追溯。比如,Alice的第一条交易信息是通过挖矿获得了50个比特币,第二条是付给某人40个比特币,然后就没有记录了,那么我们就能知道,Alice现在的余额是10,足够支付,这条交易信息就会被全网接受。
现在又假设,Alice只有10个比特币,但是她同时发送了两条广播,内容是分别向Bob和Carl支付了10个比特币,这种时候我们又如何来鉴别呢?
由于网络延迟的存在,有些人会先接收到第一条消息,有些人会先接收到第二条消息。每一个用户接收到Alice的消息之后,会进行余额验证,先接收到第一条消息的人,会拒绝第二条消息,同理,先接收到第二条消息的人,会拒绝第一条消息。此时,既有接收了第一条消息的人,也有接收了第二条消息的人,但是没有关系,交易信息并没有被确认,直到有一个幸运儿,找到了那道数学题的解,然后打包了一个新的块,链到主链上去。新块产生后,其他人都会放弃自己的块,去接收新块,也就意味着双重支付中的某一条交易信息被确认,另一条被抛弃。这样,双重支付的问题就被解决了。所以,当接收到别人付款的时候,不能当时就认为比特币已经到账了,必须等到新块产生,付款信息已经记录在主链上时,才是真正的到账。
我是蓝博hr,今天的区块链就聊到这里,我们下期见!