首页
学习
活动
专区
工具
TVP
发布

区块链(三):走进它的世界

在正文开始之前,先给出一些常用名词的基本含义,这些在前文中已屡次提及。

区块

区块链的基本结构单元。一个区块就是若干交易数据的集合,它会被标记上时间戳和前一个区块的独特标记。区块头经过哈希运算后会生成一份工作量证明,从而验证区块中的交易。有效的区块经过全网络的共识后会被追加到主区块链中。

区块链

区块链是一串通过验证的区块,当中的每一个区块都与上一个相连,一直连到创世区块。

创世区块

创世区块指区块链上的第一个区块,用来初始化相应的加密货币。区块链里的第一个区块创建于2009年,被称为创世区块。它是区块链里面所有区块的共同祖先,这意味着你从任一区块,循链向后回溯,最终都将到达创世区块。因为创世区块被编入到比特币客户端软件里,所以每一个节点都始于至少包含一个区块的区块链,这能确保创世区块不会被改变。每一个节点都“知道”创世区块的哈希值、结构、被创建的时间和里面的一个交易。因此,每个节点都把该区块作为区块链的首区块,从而构建了一个安全的、可信的区块链的根。

好,进入正文。

前文(即《区块链(二)》一文)提及,大家都争先恐后记录系统中产生每一条新的交易信息。

但,交易信息是数以千万计的,而一个区块的容量又是有限的,于是就要去找新的区块。

为什么说“找”呢?

因为一个新的区块不是没有条件的,它要满足一定的条件才能成功连到前一个区块上,直到创世区块。

在2009年,第一个区块(创世区块)产生后,在创世区块的基础上,区块链中的用户通过不断计算随机数的哈希值,寻找满足与特定的SHA-256哈希值对应的数值解。这个寻找随机数的过程就好比矿工在茫茫矿区挖掘金矿,因此也被称为“挖矿”。

当区块链中的某个用户找到符合要求的数值解后,该用户就在全网范围内发布广播,网络中的其他用户都能收到这条广播并加以验证。

一旦验证为真,其余节点会自动停止计算,并将新创建的区块加入到前序区块之后。

通过以上叙述,就会明白:新区块的产生是有相当严苛的条件的。每个区块后面都有哈希值,然后大家用计算资源(电力、服务器算力等)去碰撞、去计算,直到找到对的值,才能成功连在主链上。

此时,就相当于区块链增加了一块,记账的小本子增加了新的一页。

为了犒劳你“挖矿”的付出,为了补偿你挖矿所耗费的资源(电力、算力等),区块链世界统一规定:给予挖矿者一定的数字货币奖励。

比如,作为区块链的一种形式,比特币是通过“工作量证明”来发行货币的。在比特币系统中,货币的总数量为 2100 万个,这在一开始就被程序写死了。而第一笔区块奖励也是程序确定了的。然后,矿工挖出一个区块所获得的奖励,每隔 21 万个区块将减少一半,按照平均 10 分钟挖出一个区块的执行效率,差不多每四年会大减一次。

2009 年 1 月起每个区块奖励 50 个比特币,2012 年 11 月减半为每个区块 25 个比特币,2016 年 7 月减半为 12.5 个比特币。基于这个规则,到2140 年,所有比特币将全部发行完毕,之后不会再有新的比特币产生。

好,回到区块链。

如果你成功挖到一个新区块的话,恭喜你,这账本上新的一页是属于你的,挖矿所得的收益(即数字货币)也是属于你的。虽然其他人的本上也会增加一模一样的一页,但那只不过是复制品,一个没有数字货币加持的副本。

于是我们看到,矿工节点的收益实际由两部分组成:挖出新区块的数字货币奖励、新区块内所记录交易的记录费(也就是小费)。

但目前来说,一个区块内的小费大概只占矿工总收入的 0.5%甚至更少,大部分收益主要还是来自于挖矿所得的数字货币奖励。

然而,随着挖矿奖励的递减,以及每个区块中包含的交易数量增加,记录费在矿工收益中所占的比重将会逐渐增加。在 2140 年之后,所有的矿工收益将完全由记录费构成。

由于这么丰厚的收益激励,越来越多的用户会加入到寻找数值解的队伍中。

自然地,就会出现这样的情况:C和D几乎同时各自找到了一个新的区块,那以谁的为准?如果有人紧接着又开发了新区块,究竟连在谁的后面?

在这个时候,一部分人选择了C,一部分人选择了D。每一个用户在其认为有效的区块后记账,并继续开发新区块。

慢慢地,慢慢地,就会出现如下情况:原本一条唯一的、顺序确认好了的区块链,突然分叉了:一部分人跟着C,一部分人跟着D。

这怎么能行呢?如果这样的话,每个人的账本就不一样了。

于是,区块链又引入了一个机制:最长的那条区块链被认为是唯一有效的。

当连接新区块时,每个人会判断哪条链长,就会选择那条。于是,慢慢地,有一条链连接地越来越少,逐渐被废弃掉了。这条废弃链的区块里面的交易信息,会重新标记为“未确认”,再重新记录在另一条链的新区块上。

另外,全网也会尽力控制在一个周期内只有一个节点能成功挖出区块。当然,不能够完全避免多个节点同时挖出区块的可能性,但这也是一个办法。

如何尽力控制?比如说,当人们挖矿的热情高涨、工作效率提高的时候,区块会越来越难挖。简而言之,通过提高工作难度,来维持这个平衡。另外,顺便说一句:产生区块、挖出区块、校验区块,他们的时间周期近乎相同。

人们如此热情高涨地挖矿、找新区块,那如果有人掌握了50%以上的算力,他能够比其他人更快地找到新区块怎么办?

其他所有人的算力加起来,都比不过他,他比谁算的都快,所有新产生的区块都是他的。

换句话说,他拥有了“绝对”的权利:他能够修改自己的交易记录,可以进行双重支付;能阻止区块确认部分或者全部交易;能阻止部分或全部矿工开采到任何有效的区块。

这不就麻烦了吗?这个问题被称为“51%攻击”。(当然这只是一个理论值)

我们不妨假设一个理想状态:真有人拥有51%的算力,如果他篡改交易记录、阻止其他人开采到新区块,当然在短期会有利,但与此同时,也给自己带来一个更严重的问题:大家失去了对这个区块链的信任,区块链将一文不值。

他原本可以通过挖矿获得收益,但此时区块链却不值钱了。那么,51%算力的人还会篡改数据、阻止其他人开采新区块吗?

这在一定程度上,有效防止了“51%攻击”的发生。

除此之外还有一个问题,就是上面提到的“双重支付”:一笔数字现金在交易中被重复使用。

比如,A同时发起两笔交易:A给B 30元,A给C 30元。A手里有30元,但这30元只能进行其中的一笔交易,可A发起了两笔,那如何保证一笔数字货币在实际交易中只能被支付一次、不会被双重支付呢?

这个问题也被称为“双花问题”。

在传统的交易管理中,可信赖的第三方持有并保管交易账本,从而保证每一笔现金只能被花费一次。

那在区块链中怎么办呢?

以比特币为例,在交易发生的那一刻起,交易数据就被盖上了时间戳。当交易数据被打包到一个区块中后,就算完成了一次确认。当区块链接到前一个区块之后,交易又得到第二次确认。在连续得到六个区块确认后,这笔交易基本上就不可逆转地得到确认了。

在比特币中,每一次确认都需要“工作量证明”,也就是说每一次确认都需要一定的时间。正因为确认时间较长,后一笔交易想与前一笔交易同时得到确认是不可能的。

而一笔资金一旦在第一次交易确认有效后,第二次交易就无法得到确认。区块链通过这种共识机制解决了这个“双花问题”。

好,此时再给出一些名词的具体含义,这些名词在上述也已屡次提及。

确认

当一项交易被区块收录时,我们可以说它有一次确认。矿工们在此区块之后每再产生一个区块,此项交易的确认数就再加一。当确认数达到六及以上时,通常认为这笔交易比较安全并难以逆转。

难度

整个网络会通过调整“难度”这个变量来控制生成工作量证明所需要的计算力。

难度目标

使整个网络的计算力大致每10分钟产生一个区块所需要的难度数值即为难度目标。挖矿的难度会相应提高,为了保证数值解不会很快被找到。

难度调整

整个网络每产生2,106个区块后会根据之前2,106个区块的算力进行难度调整。

矿工费

交易的发起者通常会向网络缴纳一笔矿工费,用以处理这笔交易。大多数的交易需要0.5毫比特币的矿工费。

矿工

矿工指通过不断重复哈希运算来产生工作量证明的各网络节点。

工作量证明

工作量证明指通过有效计算得到的一小块数据。具体到比特币,矿工必须要在满足全网目标难度的情况下求解SHA256算法。

奖励

每一个新区块中都有一定量新创造的数字货币用来奖励算出工作量证明的矿工。现阶段每一区块有25比特币的奖励。

私钥

用来解锁对应(钱包)地址的一串字符,例如5J76sF8L5jTtzE96r66Sf8cka9y44wdpJjMwCxR3tzLh3ibVPxh。

交易

简单地说,交易指把数字货币从一个地址转到另一个地址。更准确地说,一笔“交易”指一个经过签名运算的,表达价值转移的数据结构。每一笔“交易”都经过网络传输,由矿工节点收集并封包至区块中,永久保存在区块链某处。

自此,通过以上这一个个机制、一个个规则,就创建了一个可信的完全去中心化的公开账本,一个使用创世块作为信任的根源、后序区块被正确验证有效的可信任链。

这就是区块链。

于是,我们看到:区块链去中心化,同时也解决了“去中心化”所带来的信任问题。

当再回顾一下整个设计过程的时候,我们不得不叹服:区块链首先是一项伟大的构想,然后又转化为了可实行的技术。但归根到底,它所传递的是一种人与人之间价值交换的基础语言。

参考资料:

[1]唐文剑等,区块链:将如何重新定义世界,机械工业出版社

[2]邹均等,区块链技术指南,机械工业出版社

[3]徐明星等,图说区块链,中信出版集团

[4]宋波等,区块链开发指南,机械工业出版社

[5]徐明星等,区块链:重塑经济与世界,中信出版集团

[6]高航等,区块链与新经济:数字货币2.0时代,电子工业出版社

[7]区块链是什么,如何简单易懂地介绍区块链?http://news.at.zhihu.com/story/9666826

[8]区块链是什么,如何简单易懂地介绍区块链?https://www.zhihu.com/question/37290469

[9]区块链是什么:从技术架构到哲学核心https://v.qq.com/x/page/x0518nuh2z7_0.html

[10]精通比特币http://zhibimo.com/read/wang-miao/mastering-bitcoin/Chapter08.html

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券