今天我们来学习一下区块链如何查账、如何避免双重支付、如何防止篡改。
余额查询
A表示要支付给B10个BTC,那么我们怎么知道A是否真的有10个BTC呢?
查余额的方式就是在链上回溯,看A获得了多少,过去花了多少,现在还剩多少,否则别人不确认的话,是不会打包上链的。
避免双重支付
A只有10个BTC,如果他同时发两条消息:支付10个BTC给B,支付10个BTC给C,那不是多付了吗?
假设有两组人,第一组人先收到消息(A->B),第二组人先收到消息(A->C),确认余额没问题后,第一组人会拒绝消息(A->C),第二组人也会拒绝消息,于是开始挖矿(寻找合法的哈希值)。最先拿到打包上传上链权利的那组人(例如A组)会成功将对应的交易信息(例如A->B)上传到链上,而另一组人则全部放弃。
因此,当你收到有人要用BTC交易的方式向你付款的消息时,你仍然需要等待交易信息在主链上打包并确认。
防止篡改/删除
如果一个人A想删除之前的一条记录,能做到吗?比如之前A给B付了10个BTC,现在B出问题了,A想删除给B的支付记录,断绝关系?再比如,如果不是支付信息,而是一些其他的文字信息,你后来想删掉,能做到吗?答案是:基本不可能,除非你的算力超过了除你之外全世界的算力。
如何实现?
最长链原则
比特币中有一个最长链原则。
在某个时刻,主链可能会分叉,但此后不久,每个人都会迅速跑向最长的分叉,而其他分叉则会被抛弃。
那么,即使挖矿成功,也可能会被放弃吗?
如何修改/删除记录块?
如果 A 想要篡改/删除某个历史区块 b101,那么就需要对 b101 进行挖矿打包,生成一个分叉插在 b101 前面。而假设主链已经到了 b110,A 需要开足马力挖矿,才能让分叉的长度超过(b101->b110),而且关键是,在他疯狂挖矿的时候,全世界其他人也在挖矿,其他人还在延长主链(->b101->b110->...)。如果 A 想要达到目的,必须超越全世界其他人的算力总和,凭一己之力对抗全世界,这基本是不可能的。
总结:篡改、删除记录区块,相当于和全世界作对,基本不可能。经验:对于大额交易,一般在6个区块之后,就可以确认了,因为篡改基本不可能。
参考