来源:https://blog.csdn.net/takeopen/article/details/79575088
一、概述
区块链技术,也可以叫做区块链存储技术,是一种新的存储方式。既然是一种存储方式,那么我们可以把区块链和u盘,硬盘,网盘这些抽象为同一类东西。在这一类东西里面,区块链的存储介质可以说和网盘最为一致的——网络;但不同的,也是最主要的区别是,网盘是集中存储,而区块链是分布式。
简单的说,使用网盘,需要把数据存储到相应公司的服务器上,也就是全网的数据都集中在同一个地方;使用区块链,则是把数据存储在全网上,也就是每个接入区块链网络的设备上。
说到底,区块链只是一种新的存储方式,跟网盘差不多的东西。
区块链是一个好东西,但它却有一个很大的弊端,存储利用率极低——像比特币,网络上的每个设备都存储着相同的数据;与集中式存储方式比较,最大的优势是——运营商或相关的企业降低了自身用于部署数据存储的成本(因为成本都平摊给用户了)。
另一个优势是,数据无须有人管理,无须担心被人控制,无须担心数据被任意篡改等等。对比一下存储利用率,这个大优势显得有点鸡肋。除非未来改进其机制将全网看成一个统一的存储介质,而不是像现在,更像是一种备份机制。
二、区块链的运行
先用人话举个简化版例子。
在这么一个社区里面,小明给了10块钱买了老王的绿的帽子,当他们达成交易的时候,他们就需要对外用大喇叭喊——我小明给了老王十块钱换了绿帽;我老王给了小明一定绿帽获得10块钱。这个社区的人听到后,哗啦啦把这笔交易都记录到了自己的小本本上。
再举个例子
还是这个社区,小明的妻子在医院里生孩子,当孩子出世的时候,小明就拿着个大喇叭喊——我小明的孩子狗蛋在10月24号5点12分出生了,医院也拿个大喇叭喊——小明的孩子狗蛋在10月24号5点12分出生了。这个社区的人听到后,哗啦啦有把这件事记录到自己的小本本上。
这就是区块链基本的运行模式了。
所有相关人员一起参与记录。
接下来就是用术语来讨论。
区块链网络是由运行着相关软件的设备连接而成的,就像一张渔网一样,每个设备节点就是渔网上的结。
当网络上的一个节点与其他节点互动时产生的数据都被这个网络里的其他节点捕获并记录。
三、区块链所应用的技术
P2P、哈希算法、链表这是区块链的核心。
P2P技术是让每个设备都能加入到网络中的基本通信技术;
链表,(程序员大都知道是什么东西),区块链之所以叫区块链,是因为数据是按块保存的,然后这些数据块依次连接起来形成链,而这些数据块本身具有一个ID,并且还有上一数据块的ID和下一数据块的ID;
哈希算法是为了保证数据不轻易被修改,每块数据经过哈希算法运算生成一个哈希值,而不同数据经过哈希算法计算出来的哈希值是不同的,严格点说是相同的可能极低,所以哈希值可以确保数据块没有被修改过;
有这三个东西,基本上可以就可以写一个区块链的简单应用了——比如简化版比特币,这玩意也是最不值钱的东西了。
当然,这样应用是不靠谱的,有很大漏洞。
比如怎么能保证这块数据是真实有效的?
节点不能知道被发布出来的数据块是真实有效的,没被篡改过的;这就要讨论拜占庭将军问题了。所以举个例子可以这样:
当一个节点的一块数据块被修改,那么这个节点发布的数据块就会和其他节点发布出来的一样,但是其他设备都不知道这两块数据块哪块是正确的,那么这两块数据块都会在区块链网络中保留下来,这样会形成分叉。但区块链的数据是不断增加了,篡改了一块数据,为了保证被篡改的数据有效,那么就需要继续在这条链上增加数据,没有被篡改的也在增加数据;假设没有被篡改的设备节点多,那么没有被篡改的区块链区块增加的速度会比较快(假设设备计算力相同),在分叉点后,会先达到某个数量,比如10,则以这个分支为准,被篡改的分支将被舍弃。
简单地说,当撒了一个谎后,需要为这个谎言再撒一个,当撒谎的速度不够快时,就输了。