首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过做实验来理解什么是区块链

本文是迄今为止,第一篇通过实验来解释什么是区块链的文章。

(建议在电脑端打开阅读此文)

之所以写这篇文章,是因为笔者发现尽管区块链概念很热门,但绝大多数人对区块链特殊的技术机制并不了解,也没有找到一本能用通俗的语言让技术小白快速理解区块链技术的书。因为不了解,难免就会产生不少误解,因为误解,难免会对像笔者这类区块链从业者也产生不少误会。为了消除误解和误会,特作此文,通过实验直观的了解区块链技术。

在给区块链下定义之前,我们先把“区块链”几个字拆开来一个一个理解。区块链英文是:Blockchain,由“块”Block和“链”Chain两个单词组合,有人简称其为“块链”。

一、什么是“区块”(Block)

区块链是一种特殊形式的数据库,与我们熟悉的关系型数据库(如Excel)有很大的不同。

关系型数据库是由一张一张表格组成,每张表格有“字段”和“记录”两个维度。

比如Excel中,我们经常能看到以下表格:

表格中的姓名、部门、职务等就是“字段”,每个记录都是一个员工的数据。

但是,在区块链中,数据的存储方式则完全不同。

所有数据都存在一个一个“区块”(Block)中,可以把这些区块想象成数据的集合。块中的数据可以是下面的任何一种形式:

文本信息,以及用文本方式表述的数据库,如:JSON、xml、mql数据库文件、源代码等等

以树形结构的数据,如:比特币交易网络的交易数据

二进制文件,如:软件、压缩包、Office文档等

在关系型数据库中,只要把数据保存到磁盘就完成了数据的写入。但是要把数据写入区块链的“数据块”,并没有这么简单,它运用了一套严谨的非对称加密算法。必须满足某种加密条件,才能生成“数据块”,完成数据的保存工作。

下面我们通过一个实验来说明区块链的“块”,以及数据库是如何生成的。

实验1:关于区块链中“块”的实验。

打开网站:https://anders.com/blockchain/block.html,看到如下页面:

上图是一个区块链“数据块”的最基本组成。包括:区块编号(Block),验证数(Nonce),数据(Data)和哈希值(Hash)。

Hash值是把区块编号、验证数和数据三项通过一定方式组合,再运用加密算法(如SHA256)计算得出的。

需要说明的是,Hash值前的4个“0”,这是个非常重要的概念。因为任何Block+Nonce+Data的组合都能产生唯一的Hash值,但是只有一种情况会使得产生的Hash值前面产生n个“0”,在工作量证明(POW)模式的区块链中,这种情况下的数据块才是一个合格的数据块,将被加载到区块链中。

现在我们尝试在Data栏中输入一些数据,如下图:

可以看到,由Block、Nonce、和数据“中华人民共和国成立于1949年10月1日”组合后的Hash值改变了,前面的四个“0”消失了,变成了“f705532c.....”。很显然,这个数据块不能被接受。那么怎么办呢?这时我们需要一个非常耳熟能详而且形象的名词:挖矿(Mine)。

挖矿的目的就是找到一个合适的Nonce值,让他与Block和Data组合后,计算出的Hash值能满足前面n位都是“0”。

这时候,我们看到Nonce值变成了:37964,而对应的Hash值前面四位又变成了“0”,一个合格的区块产生了。

听说过比特币的朋友都知道挖比特币要耗费大量的计算机资源,为什么呢?其实就是为了计算Nonce值。

本程序中为了方便体验,设定了4个“0”。但是一旦改成5个“0”的话,就需要2-3分钟才能算出Nonce,而目前的比特币挖矿,已经需要满足前面产生20几个“0”的运算,不使用大规模的算力,已经没有可能算出结果。

为什么要采取这种机制呢?下文中会解释到。

二、什么是区块链中的“链”

关系型数据库是由一张一张数据表组成,不同的表有不同的字段和记录,但是各个数据表之间的逻辑关系是并行的,即一张表中某一个数据的变动,并不会对其他表产生必然的影响。比如,上图中第一条记录的姓名,如果改成“刘铁男”,这个数据库依然可用。

可是在区块链中,就不一样了。每个块的数据都和前面的块数据有关,如果一个块中的数据被修改后,都会导致整个数据库的破坏(破坏是一种比较好理解的用词)。除非将之前的块数据都做相应的修改,数据库才能恢复正常。这就是为什么要称之为“区块链”的原因:所有数据都在一根链上。有句歇后语:“一根绳上的蚂蚱,跑不了你,也跑不了他”。

因此,区块链的最大特点由此而产生了:不可更改性。

实验2:关于区块链中“链”的实验

打开链接:https://anders.com/blockchain/blockchain.html,看到如下页面:

把页面移到最右端,看到最后一个Block中是5,说明这是个有5个区块的链。

目前所有的区块都满足Hash值前面四位数是0,是一个成熟的区块链。

现在,我们尝试着在第二个块中写入数据,如下图:

我们发现,不只是#2号区块的Hash值前面的“0”消失了,连#3、#4、#5号区块的Hash值的“0”都消失了。什么原因呢?因为我们擅自改动了区块链上某一个块的值,破坏了整个区块链的完整性。

那么怎么样才能恢复这条区块链呢?对了,重新对每个块进行挖矿。

依次点击区块#2、#3、#4、#5中的蓝色“Mine”按钮,将所有区块的Hash值前四位都变成“0”,区块链重新变得完整。

因为要将多个区块重新“挖矿”计算,以上过程中也许需要10几分钟时间。通过这个实验,也就不难理解为什么区块链数据不可更改,因为任何一个改动都将带来极其繁重的重新“挖矿”计算。不仅如此,即使你花了九牛二虎之力挖矿,产生了新的区块,但这个块很可能与其他块不一致,导致你挖的块不被区块链网络承认。

为什么会这样呢?因为区块链是一个分布式的计算机系统,在这个系统中,并不是只有你一个人在挖,数据也并没有只有你一个人拥有。

三、什么是区块链的“分布式”

分布式计算,简单来说就是将数据和计算分别交由不同的计算机执行。从完成的工作类型来分可以把分布式分成两大类:

一种是把一个大任务分割成不同小任务,交给不同计算机处理,著名的有“寻找梅森素数”的GIMPS分布式系统;

另一种是所有计算机都完成相同的任务,但需要确保数据的同步或者在一定共识机制下数据的统一性。

区块链的分布式计算属于后者,他在各个不同计算机上都有相同的数据(如交易记录),完成相同的任务(如记张)。但是,每个人都希望在自己的账本上给自己的账户多转一些钱,这就会导致账本的错误。要避免这种不一致性的产生,就出现了“共识”规则。

最简单的共识规则就是少数服从多数。以比特币为例,只要超过51%的计算机一起“做假账”,那么“假账”就能成为“真帐”。

实验3:

打开链接:https://anders.com/blockchain/distributed.html,可以看到如下图的三条区块链(分别用Peer A,Peer B和Peer C表示),这代表着不同计算机(节点)上保存的数据。

我们把每个节点上的链移到最右边,即#5号块(最新块)。

分别在三个节点的最新块中输入数据,其中节点A中的数据是:“欠隔壁老王100万”,节点B和C中的数据是:“隔壁老王欠我100万”。

那么应该听谁的呢?

通过以上实验,我们已经对区块链的核心技术有了大致的了解。我们给出区块链的定义也就水到渠成了。

定义:区块链是一个链式增长的分布式数据库。

区块链有三大特点:

1- 分布式(Distributed)的,即数据和计算并不是在一台中心化服务器上运行。

2- 数据以区块(Block)的形式保存,而不是以关系型数据库的表格方式。

3- 区块以“链”(Chain)的方式有机的组合在一起,这种组合的核心技术就是“非对称加密”。

Kuan Ke Cai Jing

从人文角度为你解读区块链,用技术方法助你精准炒币

你好,我是古哥(不是谷歌)

一位老币民,2013年进入币圈,2014年参与Ripple开发,2015年做财经类自媒体,创办《宽客财经》,2017年加入BTCMedia,担任亚太区技术总监。近些年,专注区块链技术,也对币圈的事很感兴趣。

欢迎加我微信,一起探讨行业中共同关心的话题。

声明:本文观点仅代表本人,不代表本人所服务的企业或组织。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180121G0674Y00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券