区块链技术学习总结

(1)比特币特性

去中心化。这意味着没有中心的服务器,不受某个人的控制,整个系统直接由用户端的电脑构成。这样的技术难度是非常大的,并不像手机 App 或是小网站一样,你想发布就发布,这需要有人来跟你一起玩。
数据防篡改。所有交易记录全量保存,并公开给所有的人,而且还被加密和校验。并不是数据不能被篡改,而是数据被篡改的成本非常大。
固定的发行量。不会像国家中央银行那样乱印钞票,造成通货膨胀。

相信区块链的人都相信,可以通过区块链这个技术来改变整个社会的组织形成——不再需要银行、中介机构、电商平台、支付宝等中间机构,人们可以通过一个不受任何人控制和操作的 P2P 金融系统,进行完全自由和可信的交易。
当然,反区块链的人的观点也很明确。他们认为,所谓的去中心化看似很美好,但实则不可能。而且从目前的区块链的应用来看,也没有颠覆什么,连迹象都没有。反而,大家都在疯狂地炒作概念,没有实质的价值。像 ICO 和交易所这样的东西里面充满了大量的投机主义,泡沫非常大。

(2)区块链认识

区块链又叫 blockchain,其中有一个一个的区块,每个区块中包括着一组交易信息,然后,每一个区块都会有一个 ID(或是一个地址),这些区块通过记录前一个区块的 ID 来形成一条链。

在这里插入图片描述

1、每个块的 ID 都是通过其内容生成的,所以,只要是内容有一丁点儿的变化,这个 ID 都会完全不一样。

2、而生成 ID 的内容中还包括上一个块的 ID。于是只要上一个块的内容变了,其 ID 也要跟着变(不然就不合法了),那么后面指向这个块的 ID 也要变。于是,后面指向这个块的 ID 也要重新计算,而变成另一个,这样就会形成一个连锁效应——一个块被修改,后续的所有块都要跟着一起改。于是导致了修改成本的提升。

3、这种一处改,处处改的方式,并不代表不能篡改,而只是让修改面比较大,让你的改动麻烦一点。

4、越旧的区块的篡改会造成越大面积的修改,于是越旧的区块就不容易篡改,就越安全。反之,越新的区块就越不安全。

(3)工作量证明共识机制

分布式网络的数据一致性是最难的问题了,在这种去中心化的网络集群下就更难了。其中最大的本质差别是,一个公司内的分布式系统中的结点是被假设成可信任的,而在去中心化的网络下,结点要被假设成不可信任的。

以谁的数据为准? 任何结点都可以修改自己所下载的账本,也就是任何一个人都可以伪造账本。那么,谁的数据才是对的?在去中心化的网络下,我们只能认为,大多数人认识的数据是对的。只要我控制了一半以上的结点,我让这“大多数人”伪造同一份账本,那么相当于整个账本都被我修改过来了。因为在没有服务器的去中心化的网络下,所谓的真理只不过是大多数人同意的东西。

比特币使用了 Proof-of-Work 工作量证明机制,也就是“挖矿”。所谓的“挖矿”其实就是用大规模的计算来找到一个符合系统要求的区块 ID。要找到符合条件的区块 ID 只能通过暴力穷举的方式,所以要付出大量的系统计算资源和电力。

应用分析:
修改几乎变得不可能。试想,如果生成一个区块需要大量的长时间的计算力。也就是在世界上最好的电脑集群下计算 10 分钟才能打好一个包。那么,当我们要去修改数据内容的时候,这个过程也是一样的。前面说过,如果你要伪造一个块,那么你就要修改后面所有的块,修改一个块的成本如此之高,那么修改整个链的成本也就非常之高了。
能掌握 51% 的算力的人变得几乎不可能。除了伪造一条链的成本很高,还要控制大多数人的算力,这意味着需要巨额的资金投入。这两个难度加起来,几乎不太可能。
解决分歧。一方面,这么大的工作量找出来的区块 ID,已经有效地降低了大家有意见冲突的概率。另一方面,就算是出现了合法冲突的区块(同时出现了多个合理的区块,即区块链出现分支 / 分叉),也就是多个合法的账本。而因为挖矿的成本太高,导致要同时跟进多个账本是不可能的,所以矿工们只能赌跟其中一个。大多数人所选择的那一个分支的链就会越来越多,于是另外一边也就无人问津,从而作废了。

(4)比特币的 hash 算法

一个区块保存的信息基本如下:
在这里插入图片描述

区块链就像一个单向链表,通过追溯前一个块的地址,把所有的数据块存成了一条链。所以,我们叫其 BlockChain
在这里插入图片描述

每个数据块的“地址”的编码使用了计算机上的一个算法 Secure Hash。有人音译为“安全哈希”,也有人意译为“安全散列”。区块链用的是 SHA-256 这个算法。
基本流程:
1、根据上图描述,假设左边第一张图为区块A,此时区块A已经形成,开始构建区块B
2、将区块A的内容即数据集合和区块地址即000007cabfa 做哈希运算,得到当前区块的地址ID为000008acbed,如上面左边第二张图所示
3、如果前置数据块中的数据改了,那么其 hash 就会完全不一样了,也就是说你的 ID 或地址就变了,于是别人就找不到这个数据块了;
4、所以,你还要去修改别人数据块中指向你的地址,但是别人数据块中指向你的地址(ID/hash)变了,也会导致他自己的地址(ID/hash)随之变化。因为他用你的地址生成了自己的地址,这样一来,你就需要把其他人的地址全部改掉。

在这样的连锁反应下,你想要偷偷修改一个 bit 的难度一下就提高很多。所以,在区块链的世界里,越老的区块越安全也越不容易被人篡改,越新的区块越不安全也越容易被人篡改。
在这里插入图片描述

上图是区块链的协议格式。
其中 Version,Previous Block Hash,Merkle Root,Timestamp,Difficulty Target 和 Nonce 这六个数据字段是区块链的区块数据协议头。后面的数据是交易数据,分别是:本块中的交易笔数 H 和交易列表
对这六字段进行 hash 计算,就可以得到本区块的 hash 值,也就是其 ID 或是地址。其 hash 方式如下(对区块头做两次 SHA-256 的 hash 求值):
SHA-256(SHA-256 (Block Header))

比特币对这个 hash 值是有要求的,其要求是那个 Bits 字段控制的,然后你可以调整 Nonce 这个 32 位整型的值来找到符合条件的 hash 值。我们把这个事情叫做“挖矿”。

猜你喜欢

转载自blog.csdn.net/Octopus21/article/details/115263591