初识区块链-什么是区块链

区块链(blockchain)究竟是个什么技术?为什么会成为热点技术?它又解决了什么问题?

区块链技术的革命性

说区块链必然要谈比特币,比特币是一种数字货币,有以下几个特性。

  1. 去中心化。 意味着没有中心服务器,不受某个人的控制。
  2. 数据防篡改。 所有交易记录全量保存,并公开给所有人,而且还被加密和校验。
  3. 固定的发行量。 不会出现类似于乱印钞票的现象。

这些东西加在一起,就会使得那些想作弊的人很难作恶。
简单来说,相信区块链的人都相信,可以通过区块链技术来改变整个社会的组织形成–不再需要银行、中介、电商平台等中间机构,人们可以通过一个不受任何人控制和操作的 P2P 金融系统,进行完全自由和可信的交易。

去中心化记账

传统中心化

假设有一个村落有百户居民,其中有一个德高望重的村长。村民们都把钱存到村长家,村长负责记账。如张三用 1000 买了李四家的牛,那么村长就把张三名下的存款减去 1000,李四家加上 1000。类似于银行存取款的操作,这种就是传统中心化的操作方式。

去中心化

去中心化的比特币交易流程如下。

  • 首先需要交易用户把交易传到网络上。
  • 然后网络上有些机器叫做记账结点,它们通过比拼计算力的方式竞争记账权。也叫”挖矿“。
  • 获得记账权的结点后,会把待记账的交易进行计算打包,并向全网广播。收到新的记账包的结点会对其进行验证,验证通过后加入自己的区块。

德高望重的村长因为操劳过度归西去了。儿子狗蛋上任了,但是他粗心大意经常算错账,幸好村民们都有自己的小本本记着账。突然有一天狗蛋老婆偷偷给她七大姑八大姨加了好多钱,事情暴露后村民十分不满向狗蛋讨说法,现场一片混乱。
这个时候村民 中本聪 站出来了,他说我设计了一套系统,不依赖任何人记账。

公开记账

中本聪说我的系统稍微有一点麻烦。需要干以下几件事。

  1. 每家每户发一个信鸽。就是 P2P 点对点的分布式网络。
  2. 每家每户发一个印章和一个扫描器。扫描器可以识别他人的交易是否真实有效。印章用于标识自己的身份代号。
  3. 每家每户都参与记账,不过不再记余额,而是记交易本身的内容。及记每一笔交易的付款人、收款人和付款金额。(Transaction)

因为记录的每一笔交易都是有序产生的,所以为了保证大家的账本是一致的,增加一个广播机制。

创建创世区块

创世区块是全村生成公开账本的第一笔交易的第一个信封。

于是中本聪说我先生成第一个 Transaction,这个交易的付款人为空,收款人是村长,付款金额是 100W(全村的总资产)。
做好第一个信封以后,让村里所有人都复印一份。这个步骤也叫做同步区块,也就是全网都拿到这个信封,以及信封里的 Transaction。

交易

现在有了创世纪区块,假设张三在村长那存款余额为 10W,那么交易单就应该把 100W 分成两部分,一部分是 10W,一收款人是张三;另外 90W 是村长自己,这样就做成了一个 Transaction。

打包 Transaction (挖矿)

现在有了 Transaction,但是还需要用信封把 Transaction 装起来,这个信封就是区块链中的”区块“,这个封装过程就是”打包交易。

之所以要封装起来是为了让打包交易的人能在信封上署名,并且装配交易标号(区块 ID),方便后续村民查询。

谁来打包呢?这个时候中本聪又说,随着咱村人口的增长,未来 100W 肯定不够,暂定 150W,多出来的这 50W,就当奖励那些装信封的人了,当然也不能给多,谁装一次给 2 个币。
但是你要想获得这个装信封的权利,得做一道难题,谁先把这个题做出来谁就给这笔 Transaction 装到信封里并且盖上自己的印章。

但是挖矿(做题)需要大规模的计算来找到一个符合系统要求的区块 ID。要找到符合条件的区块 ID 只能通过暴力穷举的方式,所以要付出大量系统计算和电力。

广播交易

广播是为了让全村都知道你这一刻产生了一个 Transaction,或者是装好了一个信封。

收到通知后,村民可以先验证信封上难题的答案是否正确,接着验里面的每一笔交易,最后还要验信封背面的内容,及上一个信封的摘要是否正确。因为上一个信封大家都已经确认过。所以可以有效的防止伪造作假。这就是区块链。

区块链

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

每个 ID 都是通过其内容生成的,只要内容有一丁点的变化这个 ID 就会完全不一样。
而且这个 ID 的内容中还包含上一个块的 ID,于是只要上一个块的内容变了,其(当前) ID 也要跟着变(不然就不合法了)。那么后一个区块的 ID 也要重新计算变成另一个,这样就会形成一个连锁效应,一个区块被改,后续的都得跟着改,提高了修改(伪造)成本。

共识机制

共识机制是区块链的核心组成要素之一。它决定了区块链的业务吞吐量、交易速度、不可篡改性、准入门槛等。

共识机制主要解决了两个问题。

  1. 谁有权利。
  2. 作弊问题。

在上文中心化记账中,采用分布式方式记账,所以大家面临的最大的问题就是谁有权利记账,以谁的记账数据为准,其次是如何避免记账者作弊。

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

所谓大多数人? 在互联网的世界里,我们可以使用程序模拟出无穷多个“人”出来,根本分不清是人还是狗。

如何避免中心化风险? 比如李四在第一次记账时篡改了部分数据,第二次还是他记账,还继续篡改,这样是很有可能形成假账的。

为了解决这些问题,比特币使用了 Proof Of Work 工作量证明机制,也就是”挖矿

PoW 工作量证明

在 PoW (Proof Of Work)机制中,计算资源(算力)是决定记账权的唯一因素,与之对应的,便是计算难度。

计算难度是区块链为了控制答案产生的速度。

通过提升计算难度来”极度消耗计算力“这种方式来提高成本,从而有效控制以下几个问题。

  1. 修改变得几乎不可能 如果生成一个区块需要大量的且长时间的计算力,比如世界上最好的电脑集群下 10 分钟才能打包好一个 Transaction。那么当我们去修改数据内容的时候,其过程也是一样的。前面也有说过,篡改一个区块,就要修改后面所有的块。
  2. 能掌握 51%算力的人变得几乎不可能 除了伪造一个链的成本很高,还要控制大多数人的算力,这意味着需要巨额的资金支出,两个难度加起来,几乎不太可能。
  3. 解决分歧 一方面,大量的算力计算出答案,也就是区块 ID,已经有效降低了大家有意见冲突的可能。另一方面,就算出现了合法冲突的区块(如分支、分叉)。也就是多个合法的账本 而因为挖矿的成本太高,导致同时跟进多个账本是不可能的,所以矿工们只能赌跟其中一个。大多数人选择的那个分支的链越多,另一个也就作废了。

解决双花攻击

双花攻击是指一个币被花费了两次。这在任意的区块链系统中是不被允许的。

所有的记账结点都会遵循一下两个规则。

  1. 一个币如果已经被花费,就会标为已花费,如果再次接收到这个币的花费请求,那么记账结点就会拒绝打包这次交易。
  2. 如果同时接收到了两个信封,这两个信封中装的两笔交易出现了一个币被花费了两次的情况,也就是分叉 那么一般会选择挖矿难度比较大的那个信封。

规则一避免未确认的交易出现双花,规则二避免已确认的交易出现双花,及上文中说到的解决分歧。

以上。