写点什么

(28DW-S8-Day6) 区块链如何解决双重支付及防篡改

用户头像
mtfelix
关注
发布于: 2021 年 02 月 26 日

今天学习下区块链如何进行余额检查、避免双重支付以及防止篡改。

余额检查

A 说支付给 B 同学 10 个 BTC,那大家怎么才能知道 A 到底有没有 10 个 BTC?

余额检查的方法就是在链中向前回溯,看 A 到底获得过多少个,以往支出过多少个,现在还剩多少个。 否则,其他人不进行确认,也就不会被打包、上链。

避免双重支付

A 只有 10 个 BTC,如果他同时发出两个消息:支付给 B 10 个 BTC,支付给 C 10 个 BTC,那不是会超付吗?

假设分别有两组人,第一组人最先收到消息(A->B 10BTC),第二组人最先收到消息(A->C 10BTC),且分别追溯确认余额没问题。随后,第一组人收到消息(A->C 10BTC)时就会拒绝,第二组类似。于是,他们就开始挖矿(求那个合法的 hash 值),最先得到打包上链权的那个幸运儿所在的组(比如 A 组),就会把对应的交易信息(比如,A->B 10BTC)成功上链。另一组,大家就放弃了。

因此,在 BTC 交易时,收到别人要给你支付的消息时,还需要等这个交易信息被打包上主链确认后才行。

防止篡改/删除

如果一个人 A,想把之前的一条记录删除可以实现吗? 比如,之前 A 付给 B 10 BTC,现在 B 这个人出问题了,A 想删除当时那个给 B 的支付记录以撇清关系? 再比如,如果不是支付信息,而是某些其他的文字信息,后面想删除了,可以吗? 答案是:基本上不可能,除非你的计算能力超过除你之外的全世界。

怎么实现呢?

最长链原则

比特币里面一个最长链原则。

在某个时刻,主链可能出现分叉,但是随后很快,大家会迅速跑到最长的分叉上,其他分叉会被废弃。

所以,挖矿成功,也有可能被废弃?

想篡改/删除记录块如何做?

如果 A 想篡改/删除某个历史的区块 b101,就需要在 b101,挖矿打包产生一个分叉 b101_pre 插入到 b101 前面。 而且假设现在主链上已经到 b110 了,A 就需要开足马力把 b101_pre 搞出来这个分叉的长度超越(b101->b110),而且关键是他在疯狂挖矿的时候,全世界其他人都在挖,其他人依然在(->b101->b110->...)这个主链上往后延长,。A 想达到目的,就得超越全世界其余人的计算力能力总和,以一己之力对抗全世界,这个基本上不太可能。

小结:篡改删除记录块,相当于对抗全世界,基本没可能。 经验:大额的交易,一般等 6 个块以后,就可以确认,因为被篡改基本不可能了。

参考文献

  • 中本聪的白皮书:《比特币:一种点对点的电子现金系统》

  • 李永乐:《比特币和区块链的原理》视频

  • https://bitcoin.org/


发布于: 2021 年 02 月 26 日阅读数: 45
用户头像

mtfelix

关注

内心平静是一生的追求 2018.01.17 加入

简单的技术人

评论

发布
暂无评论
(28DW-S8-Day6)区块链如何解决双重支付及防篡改