厦门IT培训
美国上市IT培训机构

13429669395

热门课程

区块链的详解之三

  • 时间:2018-12-13 17:10
  • 发布:转载
  • 来源:网络

上一篇主要讲的是区块链里面加密层的知识,接下里讲解数据层、网络层以及共识层的知识点。无论是哪个等级的知识都是需要大家学到之后再去拓展,丰富自己的认识。小编主要就是给大家一个方向,如果读者还有设么问题可以咨询达内的C语言课程老师,为您详细解答。

数据层

刚才说到区块的概念,可以理解为账本中的一页记账纸,里面记录了若干笔交易,除此以外,区块里需要包含哪些信息?

首先有一个区块高度,可以理解为账本的页码;包含上一个区块摘要信息,这个是为了保证整个区块链链式账本不可篡改性;包含本区块里所有数据交易哈希摘要值。

网络层

网络层是用P2P网络来进行消息的传播,P2P网络是对等式网络,也可以称为是无中心的自组织网络,特点是没有中心化的服务器,任何节点在这个网络中既是服务器,也是客户端。

消息的发送、网络的组织都是自发的,整个网络可以无限扩展,任何节点可以随时加入、随时退出。网络层规定了区块链系统中交易是怎么传输的,以及每一页账本(即区块)是怎么传输的。

共识层

就是要让全网所有记账员账本保持一致,也就是说对所有交易有一个先后顺序,达成完全一致。具体而言,共识机制主要需要解决以下三个问题:

1、What,下一个区块包含哪些交易;

2、Who,下一个区块由谁产生;

3、When,下一个区块在什么时候产生;

区块链共识算法用的较多的是PoW,字面意思是工作量证明,即证明你做了一定量的工作。

工作量证明官方定义是要求用户进行一些比较耗时的复杂运算,然后得出这个答案能够被其他人快速验证,用工作期间耗用的时间、设备、能源作为担保成本,来确保资源是被真正需求方所使用。

PoW较早是在反垃圾邮件中使用,在发送一个邮件之前,需要在本地进行平均几秒的PoW计算,目的是为了增加黑客群发一些垃圾邮件的成本,对于正常用户来说发送一封邮件是低频操作,每次等待几秒完全可以接受;但对于制造垃圾邮件的人,就大幅增加了成本。

PoW一般用哈希函数实现,哈希函数特点是结果确定,但不可逆,知道一个哈希值或哈希值特征,很难推算出输入,如何使用哈希函数实现PoW呢?假设现在有一条消息,哈希值是确定的,如果规定允许在这个消息后面加上一个随机数(我们称为nonce值),然后再计算哈希,那么这个哈希就可以随着nonce值的改变而改变,我们不断地尝试不同的nonce值,就可以得到不同的哈希值。

当得到哈希值符合某一个特征,比如前三位为0或者小于某个特定的数,那么就接受该nonce值作为一个符合要求的答案。这个过程中需要计算方尝试很多次才能得到符合条件的答案,条件越苛刻,需要计算的次数就越多,而这个答案在验算方这边只需要进行一步哈希计算,就可以知道这个nonce值是否是符合条件的答案。PoW通过使用哈希函数保证了难计算、易验证的特点。

PoW运用在比特币这边,区块头部有一个nonce值,每一个矿工需要不断调整区块的Nonce值,使得整个区块的哈希值小于某一个目标哈希(这个目标哈希值由难度值确定,难度值越高,目标哈希值越小),这样一个区块才是合法的区块,谁先算出这个合法的区块,广播到网络中,这个合法的区块就会被其他人接受。

POW的优点是工程上非常简单可靠,容易实现,容错率可以达到50%,控制全网算力没有达到50%,基本上不可能篡改历史记录,这在中本聪一篇论文里有严格的数据论证,是比较公平的机制,投入越多算力,获得记账权概率越大,越有可能产生新的区块。

缺点则是效率低,对于算力和能源浪费非常严重,有人统计过现在整个区块链网络电力消耗超过一个小型国家全国的电力消耗。

同时POW会有分叉,可能有若干个矿工,同时算出下一个区块,因为算哈希值是随机的,可能有人在相近时间内算出来了,因为网络有延迟,不同矿工接受不同的区块,然后就产生了分叉,分叉可能需要等待多个区块来确认,这个交易的确认时间也是不确定的。

目前阶段算力越来越集中,因为一个独立的矿工想要挖下一个区块的话,以你的算力可能在全网比例非常低,挖到下一个区块的概率非常低,以至于一辈子可能都挖不上一个区块。

这时候较好的选择就是加入某一个矿池,贡献你的算力,按照算力份额分成,比如整个矿池挖出下一个区块,把下一个区块奖励平均分给整个矿池里面算力的,这样加入矿池就可以获得比较稳定的奖励,也导致算力越来越集中在矿池手里。

共识层除了POW,还有其他算法,比如POS权益证明,就是占有的比例越多,获得下一个区块发布权的概率越大。POW简单理解就是按劳分配,多劳多得,POS就是按钱分配,持有越多,获得的收益也就越大。

早期的POS也是跟POW一样,结合POW,通过计算当前持有的权益所占比例来决定这个节点的难度,可能持有越多,需要计算的难度值越低,就越有可能算出下一个区块,这是早期的POS。

之后有人提出纯POS想法,完全由节点权益决定区块形成,这时候不需要计算POW进行挖矿,但是现在工业界没有一个公认安全可靠的纯POS项目,但在学术界有一些论文,也提出一些解决方案,对安全性有比较严格的数据论证,但他们的工程化难度非常高。

POS的优点是资源消耗少;共识效率高;权益平等。缺点是实现复杂,安全性有待验证,容易导致马太效应,富者越富,权益会越来越集中,跟POW有差不多的特点。

前面讲了加密层、数据层、网络层、共识层,基本上一笔交易的流程就可以确定下来了:

新交易创建之后,通过P2P网络广播到全网所有的矿工,矿工把这个交易验证通过之后,打包进一个区块中,接着开始计算PoW,当得到某个nonce值使得这个区块的哈希值符合条件之后,再通过P2P网络把这个区块广播给所有的矿工,其他矿工验证这个区块合法之后,就会将这个区块添加到自己的账本中,这样一个交易就在全网范围内完成了写入。

激励层

这样一个分布式账本系统,需要所有矿工消耗CPU、存储、带宽等资源诚实地记账,如果完全没有激励的话,这些矿工可能就没有动力去维护这个系统了。

比特币的激励机制是如果一个矿工计算出了一个新的区块,这个区块会产生一些新的比特币,连同区块里所有交易的手续费都可以归这个矿工所有,这些比特币是对一个诚实矿工的奖励。

如果一个矿工试图修改历史记录或者将不合法的交易打包到新的区块,那么这个矿工将白白浪费算力,而不能使其他矿工同步自己的账本,这部分浪费的算力可以理解为是对不诚实矿工的惩罚。

激励机制在公有链中是必需的。在联盟链中,所有节点都是已经经过组织认证的节点,不需要额外的激励,这些节点也会自发地维护整个系统的安全和稳定。

但在公有链中,节点不需要进行认证,可以随时加入、随时退出这个网络,记账需要消耗CPU、存储、带宽等资源,所以需要有一定的激励机制来确保矿工在记账的过程中能有收益,以此来保证整个区块链系统朝着良性循环的方向发展。

合约层

合约层是区块链可编程特性的基础,区块链可以理解为是去中心化不可篡改的账本,程序代码也是数据,也可以存到账本里。智能合约是存储在区块链中的一段不可篡改的程序,可以自动化的执行一些预先定义好的规则和条款,响应接收到的信息。合约发布之后,其运行和维护就交给全网的矿工去达成共识,合约的开发者定义了合约运行的规则,这个规则发布之后就是公开透明且不可篡改的。

应用层

运行在合约层之上,通过使用合约层的脚本和代码构建去中心化的应用。现在比较火的应用有众筹类的WeiFund,游戏类的加密猫,博彩类的Fomo3D等。

总结

加密层,区块链技术的基石,提供了整个区块链系统的安全性、匿名性保证。

数据层,采用偏序的数据结构,又采用了消息摘要的形式,使得历史数据难以篡改,数据的完整性得以保证。

网络层规定了整个网络节点里的通信机制,可以实现没有中心服务器的数据共享。

共识层,通过POW、POS等共识算法来保证全网数据的一致性,是区块链技术里的关键。

激励层,是通过经济激励机制,使得整个区块链系统可以朝着良性循环方向发展。

合约层,提供区块链系统的可编程性。

应用层,可以开发分布式应用,来丰富整个区块链的生态。

其实看到最后我们可以知道区块链的技术是没有特定的主体的,它就是由P2P这个网络载体连接起来的一个去中心化的全球系统,这样的话对于整体的监管确实是有用的。在区块链的技术不断的创新的同时,整个行业也是乱象丛生,急需各方面的监管才能促使区块链行业的健康发展,让区块链的行业在不断创新的同时也减少一些不必要的弊端,有这些层级的共同监管,也不会导致区块链局限性的发展。

上一篇:区块链的详解之二
下一篇:什么是区块链?让你秒懂

C语言的正确打开方式!

学好C语言&C++,掌握自己的未来

献给Java初学者,没基础如何学Java?

如何选择java学习方法?自学or培训?

选择城市和中心
贵州省

广西省

海南省