区块链(二):它的现实道理

我常常考虑问题,喜欢从头开始,从比较容易懂的地方开始。尤其考虑理论问题、抽象问题、技术问题时,喜欢从实际的现实出发。然后再结合一些资料、与人交流,认识、批判、反思,逐渐建构、整合起一个自己感觉比较舒服、通畅的知识结构或逻辑体系。

对区块链的认识,也是如此。尽管在了解的过程中,会出现一些问题和困惑,那又有什么关系呢?先留着。在认识的过程中,有些问题自然就会解决。另一方面,正是这些问题才驱动我去弥补知识结构的残缺。

好,进入主题。

正如

前文

所说,区块链是一个分布式数据存储系统,去中心化;所有交易信息都记录在这个系统的所有节点上,参与的所有人都去维护、并彼此监督;同时,它并不要求所有人没有恶意。

正因为此,它要真的运行,就需要解决一些恶意问题、安全问题、信任问题,恰如前文末尾列举的那样(当然这也仅是其中的一点点)。

那到底要解决哪些问题呢?区块链又是如何解决的?我们不妨从简单的现实出发,一步步去看、去了解。

首先,我们对现实作一个极简化的抽象:假设A向B发起了一笔交易,即A给B 30元钱。

当A发起这笔交易的时候,也就意味着一条交易信息生成了:A—>B 30元。

但,区块链的世界规定:每一条交易记录,都必须有能力追溯到交易发起者发起的这笔交易、以及所涉及金额的上一笔全部交易信息(也就是这笔钱怎么来的)。

这很容易理解,在去中心化的网络中,通过建立交易链和交易链上的可追溯性,可以间接保证数据的安全有效。

于是,上述交易信息就扩展为:

A1—>A 5元

A2—>A 10元

A3—>A 15元

A —>B 30元

合并即为:(A1—>A 5元 + A2—>A 10元 + A3—>A 15元)—>B 30元

这就是一条交易信息。前面括号内为这笔钱的来源,即为“输入值”,括号外是这笔钱的去处,即为“输出值”。

每条交易信息至少包含了“输入值”和“输出值”这两个重要字段。(其实这也只是一种数据格式,比特币系统即采取此种)

A向B发起了这笔交易,就像什么呢?就像早上你去买早点,向老板娘说要十个包子、五杯豆浆、五碗豆腐脑,一共得付给人家30元钱。

于是,这里就有个问题:如果A的账户不够30元钱,怎么办?如果A的账户超过30元钱,又怎么办?

那么,就必须引入以下判断的过程,加以解决:如果不够30元,这条交易信息即为“无效”,没有实际进行。如果正好30元,就会像上述那样如实记录:(A1—>A 5元 + A2—>A 10元 + A3—>A 15元)—>B 30元。

如果超过30元,比如40元,就会将多出的钱重新支付给自己,相当于找零。交易信息为:

A1—>A 15元

A2—>A 10元

A3—>A 15元

A —>A 10元

A —>B 30元

实际合并为:(A1—>A 15元 + A2—>A 10元 + A3—>A 15元 + A—>A 10元)—>B 30元。其中的“A—>A 10元”即为找零。

A发起这笔交易,也就意味着这条信息创建了。刚创建的这条信息立马被标记为“未确认”,因为B还没有接收到它。

下一步,就是A把这条信息发送给B。

在A发送给B的过程中,存在两个问题:怎么保证这条信息不被其他人篡改?当B接收到的时候,怎么保证这条信息确实是发起交易的人A所创造的?

其实,这两个问题可以通过哈希算法和非对称加密解决。它们均是计算机领域比较成熟基础的技术。

一条交易信息就是一段明文,哈希算法会把它以不可逆的方式转化为一段长度较短、位数固定的字符串,进行加密。

它有两个特点:第一,加密过程不可逆,也就是说我们无法通过字符串倒推原来的明文;第二,输入的明文与输出的字符串一一对应,明文改变一点点,输出的字符串就会面目全非。

非对称加密,是指说任何人手里都有两把钥匙,一把公钥,一把私钥。其中,私钥由自己拥有,只有自己知道;公钥,公之于众,人人都知道。值得注意的是,一条信息由私钥加密后,解密只能通过公钥。

到底这两项技术怎么解决前面的那两个问题的呢?

仍以“A—>B 30元”这条交易信息举例:

当A发起这笔交易时,A会先用哈希算法对这条交易信息进行处理,得到一个固定长度的字符串,再用自己的私钥对这个字符串进行加密,生成一份“数字签名”。

然后,A把“A—>B 30元”这条交易信息、“数字签名”、自己公之于众的“公钥”打包,一起发给B。

B收到这三样东西后,首先将“A—>B 30元”进行哈希处理,得到一个哈希值。然后,用A提供的“公钥”对“数字签名”解密,得到另一个哈希值。如果这两个哈希值一致,就可以证明:B接到的交易信息是A发出的,也没中途被其他人篡改过。

简而言之,交易的时候,发起者需要在交易中提交其公钥和签名(每次交易的签名都不同,但均从同一个私钥生成)。区块链系统的所有人都可以通过所提交的公钥和签名进行验证,并确认该交易是否有效,即确认发起者在该时刻对所交易的数字货币拥有所有权。

一旦所有人对这条交易信息加以确认、证实有效,那么这条交易就成功了。随即,这条信息被标记为“有效”。

这条交易信息生效后,存在哪里呢?A那里吗,B那里吗?

如果这条信息只存在A、B这两个人那里的话,这条信息就不会形成大家的共识,在数字世界中就会有被篡改的风险。

比如,A会偷偷抹掉这条记录。尽管B留着,但又有谁能判断出孰真孰假、孰是孰非呢?没有任何一个第三者可以。

于是,又回溯到了原来的问题:区块链虽然去中心化,但怎么保证这些信息是大家的共识?

自然地,解决之道在于所有人都要有记录这条信息的机会,以彼此互相监督。

好了,假如所有人都同时记录这条信息,并且机会均等,这条信息的确是记录在所有节点上了,但又会产生这样的问题:为什么人家要记呢?凭什么给你记账?

比如C可能会想:所有其他人都记了,我不记不行吗?更何况记录还浪费我时间、占用我空间、耗费我资源?

更恐怖的是,如果人人都这样想,那将没有一个人去记录,除了A、B。

但只有A、B记录又不行,怎么办?

于是,区块链就引入了一个奖励机制,统一规定:凡是第一个记录的,会有劳动报酬。

换句话说,当A、B交易成功时,你第一个把这条信息记录下来,就会获得小费,而且你还可以给这条记录加上一个独一无二的编号。

好了,这条规则开始实行后,所有人一听,马上就争相恐后抢着去记录,而且还会仔细监听,只希望能在第一时间记录一条新的消息。

另一个问题,这条信息到底记录在哪儿呢?

答案:区块里,第一个抢到这条信息的人的区块里。

但现实中又不光有“A—>B 30元”这一条信息,还有数以千万计的类似交易信息,而一个区块的容量是有限的(比如比特币系统的每个区块是1M),那怎么办呢?

自然地,增加新区块。

但下一个区块生成后,又不能单独飘在外面,因为区块链的本质就在于大家有同一个账本。如果单独飘在外面的话,就相当于又产生了一个新账本。

于是,这个新区块就必须链接在前一个区块的后面。每一个新产生的区块都如此。久而久之,这就形成一条主链,这就是区块链,也就是大家共同拥有的记录账本,大家账本的模子都长这样。

从以上看来,区块链到底是什么呢?

从形式看,它是由区块组成的链,是一套分布式数据存储系统,是大家共同拥有的记账的账本。区块链系统中所有参与者的交易信息都记录在每一个人的账本上,彼此监督,大家认可。

而实质上呢?

区块链本质上是信任的制造机,它目的就在于:让人们在“去中心化”的环境下,通过设计一系列的机制、规则(如前面所说的),让人们仍能像在“中心化”的环境下一样,正常、信任地进行交易。

这些设计的机制,就起到传统中心化环境下“中心”或“权威”背书的作用。

当然,我们要清醒地知道:以上设计的这些机制都是比较基本的、基础的。在区块链真正运行时,还会出现一些其他的问题,这将在下一次随笔中谈及。

参考资料:

[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/20180303A02ZJO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券