区块链可扩展性问题的来源及解决方向

区块链
区块链是一个技术术语,解决(或者说颠覆)了现有的依赖第三方中心的交易体系:如果有一个水果市场,我们在市场上用100新台币购买了一个芒果,其实是新台币的发行方(央行)为这一张薄薄的纸作了信用背书--因为水果销售者信任这100新台币可以在他需要的时候,购买等值的其他用品。

什么是区块链?

区块链是一个技术术语,解决(或者说颠覆)了现有的依赖第三方中心的交易体系:如果有一个水果市场,我们在市场上用100新台币购买了一个芒果,其实是新台币的发行方(央行)为这一张薄薄的纸作了信用背书--因为水果销售者信任这100新台币可以在他需要的时候,购买等值的其他用品。

第三方中心的存在,解决了交易双方的信任问题,但是带来了新的问题,如果第三方作恶(比如说央行滥发货币)怎么办?最终极的解决项目就是不需要第三方,这个就是区块链产生的根本动机。

在没有第三方的情形下,怎么实现交易?区块链实现了一个去中心化的帐本实现项目:

  1. 我们有一个公开的帐本,任何人都可以获取这个帐本,帐本上有每个人的余额;
  2. 当Alice向Bob购买商品的时候,Alice向Bob开具一张有一定数额的支票;
  3. Alice向所有人公示这个支票,大家确认确实是Alice的签名后,在账本上记录 Alice的余额减,Bob的余额加;
  4. 每隔一段时间,大家交换一下帐本的内容,让大家的帐本信息同步。

可以看出,区块链是一个完全自治的体系,但是现在有几个问题:

  1. 为什么会记帐,每个人都可以指望别人记帐,自己使用别人的帐本才是最节省成本行为;
  2. 当交易帐本内容的时候,如果两个人的帐本不一致,该以谁的为准;
  3. Alice如果账户里只有10块钱,在市场的这一侧花了8块购买后,飞速跑到另外一头购买另外一件8块的商品,这时候另外一侧的帐本还没有来得及记录前面的购买记录,同样的钱Alice是不是可以花了两次?

为了解决这些问题,区块链作了最基本的设计:

  1. 把所有的交易按时间段组织成区块;
  2. 区块内使用一个哈希防止修改;
  3. 每个区块内记录前一个区块的哈希,保证永久无法修改;
  4. 当同时有多个区块出现时,按某种指定的算法选择一个区块为准。

区块链可扩展性问题的来源及解决方向

 

使用此项目后,每次交换帐本,只需要交换总帐本中的一个区块,大大减少的交换的数量;当多个区块同时出现时,使用某种约定的算法--这个算法在区块链中被称为共识,以符合算法条件的某个区块为准;而Alice同样的钱花两次的想法也会落空:商户只有在支票信息被纳入到共识后的区块里时,才会向Alice提交商品。至于大家为什么愿意记帐呢?注意图上区块中有个记帐人,每个被共识承认的区块的记帐人都会得到一定的奖励。

这时候,货币只是一个数字了(类似于银行内的存款数字),由于帐本是公开的,因此可以在帐本开始前,大家约定好总共的货币数字和记帐人的奖励项目,在任何一个时间点上,可以流通的数字都是可预测的,而且是不可更改的。

区块链的共识机制

当区块进行同步时,有可能会同时产生多个区块,需要一种预先定义的项目来确定使用哪一个区块,这个项目在区块链中称为共识机制。而在在一个去中心化的系统中,有什么是可信的?每个人信自己嘛,交易和出块的结果数据到达我这里的时刻,是无法作假的:数据可能会延时到达(由于网络延时),但绝对不会提前到达(除非时光倒流)。我们可以设计一种机制,让每个节点的记账结果必须达到某个条件,每个节点都认第一个达到这个条件的节点的记录。

PoW机制

Proof-Of-Work,工作量证明机制。

每个节点在记账的同时,按照某种规则找一个随机数,通过这个随机数可以算出某个符合条件的(哈希)值,谁第一个找到的,他就出块成功。这个找随机数的过程就是不断调整随机数-->计算的过程,只要这种算法能够足够离散(这一次和下一次的计算没有任何关联,随机数的变化导致计算结果变化足够离散),那么就能够实现出块节点的随机化。

举个简单的例子,如果算法得到的哈希值总是在0-10000之间,而算法要求得到的(哈希值)小于1,一台机器如果一秒钟能够计算一次,那么平均计算一万次,就有一次值可能小于1;或者反过来说,每次计算,有万分之一的机会小于1. 如果有一万台节点同时在计算,那么每秒都有可能有一台节点得到符合条件的结果,得到符合条件结果的节点就是出块成功。而每一秒,得到结果的机器都可能不一样。这样就获得了足够随机的结果。

POS

Proof-Of-Stake,权益证明机制。

PoW机制很好用,但是有个问题,军备竞赛后,太耗电了,都是做些无意义的计算,除了这个结果和到达时间之外,还有什么可信的数据作为随机值的呢?有想到一个新的点子,每个人存在账号里的币的数量是不一样的么,是不是可以用来作为一种随机数呢?

想想也可以啊,每一次出块的时候,出块节点(账号)里谁的币最多,就认谁的。但这样有个问题:币最多的岂不是一直在出块? 

 

责任编辑:庞桂玉 来源: 今日头条
相关推荐

2018-10-30 10:40:42

区块链比特币技术

2019-12-09 16:08:19

区块链分片分布式

2022-09-05 15:17:34

区块链比特币可扩展性

2022-05-13 16:05:03

区块链比特币可扩展性

2023-06-15 15:40:36

2018-04-10 14:38:10

区块链

2018-09-03 14:30:35

2019-12-19 09:26:34

区块链安全应用程序

2022-01-20 15:45:32

区块链网络安全数据

2021-09-01 13:37:16

物联网可扩展性IoT

2009-05-08 17:04:57

IETFLISP路由系统

2011-04-07 17:20:52

互联网路由器

2021-09-02 09:42:11

测试软件可扩展性开发

2021-12-03 14:41:00

云存储可扩展性存储

2024-10-10 14:01:34

2012-06-04 11:04:46

虚拟化

2021-12-09 05:36:16

云存储可扩展性数据存储云存储

2021-05-17 07:28:23

Spring可扩展性项目

2016-10-13 14:38:51

OpenStack可扩展性IT人员

2020-04-18 11:04:35

物联网工业物联网技术
点赞
收藏

51CTO技术栈公众号