组成区块链的基本要素

今天给他家分享的是当下炙手可热的技术—区块链。只要大家在百度输入区块链,就能获得成千上万条有关的消息。想必大家或多或少对区块链有所了解。我也在通过不断的学习,来不断刷新自己对区块链的认识。作为一名程序员,自然而然地也想探究一下区块链背后的技术。虽然个人能力有限。今天目标是带大家了解一下组成区块链的五个基本元素,内容可能因为自己的知识结构和能力限制,可能有有误的地方,希望大家指正。

有人说你研究他—区块链有啥用,其实我也不知道他对我的工作会有啥帮助和用处。但是我知道,如果我都知道他的好处,那他就不会给我带来惊喜和更多价值,现在唯一可以确定他能给我带来的好处就是,带来了一些新思想,开阔了我的编程思路。这是我现在唯一知道他能给我带来的好处。

我们这里定义状态机,这里状态机只是为了说明区块链,所以设计很简单,初始化状态为整型 0 更新状态的是将消息(数字)添加到初始状态(0),如图 这里状态q1 7 = 0 + 7,这是状态机(下图)

区块链技术是基于状态机的,不断更新状态,q1 = q0 + 7(message) q2 = q1 + (-5) = 2 …

这里我们为消息添加一个校验函数,这个函数接受当先状态和消息做为参数,按一定规则进行校验,返回真或假。这里我们定义一个简单的校验规则就是,加入 message 值(7) 需要大于当前状态(0) 也就是 7 > 0 。

我们看一下图,在 q1 接受 -5 进行校验 –5 是否合法,由于我们规则是 message (-5)需要大于原有状态值 7,所以 -5 > 7 为 false 没有通过校验。继续向下显然 16 > 7 通过校验状态更新为 7 + 16 为 23。(如下图)

我们创建 4 个节点可以代表人或组织,每两个节点可以双向传递消息,这样就形成一个分布式网络,确保了信息可以传递给每个节点。(如下图)

在这个分布式网络,每个节点都有一个状态机。

当 message (-5)从一个节点进入分布式网络,以这个节点为路口来更新整个网络上每个节点的状态机。

当 message (-5)流入到每个节点时,每个节点都会获取消息进行校验来更新自己状态机。

这样问题也来了,当不同 message 从两个不同或多个节点进入分布式网络,来更新每个节点的状态机。这样就会带来一致性的问题。这样就有可能有两种情况,第一种情况是先接受 29 然后接受 72 ,还有一种是与之相反。

这样就有可能有两种情况,第一种情况是先接受 72 然后接受 29 ,还有一种是与之相反。

第一种情况,先接受 72 由于 72 > 23 所以会通过校验更新状态为 95, 然后由于 29

这样就有可能有两种情况,第二种情况是先接受 29 然后接受 72 ,还有一种是与之相反。

第二种情况,先接受 29 由于 29 > 23 所以会通过校验更新状态为 52, 然后由于 29

这样对带来问题,每个节点会按哪种情况来更新自己的状态呢?哪种 message 顺序是正确的呢?

通过一定的算法来为每个节点分配彩票,然后进行摇奖,胜出的节点可以决定分歧的对与错。有关具体如何实现,由于个人也在对其内部实现机制了解中,无法给出详细的解答。

这种方式适合内部区块链,而非公网区块链。假设一个人进行提议,大家投标来决定这种情况是否为正确来解决一致性的问题。这部分内容以后给大家更详细地解释。

在处理一致性问题上,我们势必要花费一定时间,这样就可能带来瓶颈的的问题,尤其是大量的信息接连而至的情况下。

为了解决瓶颈问题,我们将一定数量的消息组合为一组消息块,然后通过算法来排序,然后将一组消息添块加到节点上的状态机来更新状态。

依赖一组由公钥/私钥(Public Key /Private Key)组成的密钥对,所以采用非对称加密又被称为公钥加密(Public Key Cryptography)。具体来说,公钥和私钥均可以用于加密。如果密钥对中的其中一个用于加密,另一个则用于解密。公钥公诸于众,不具有隐私性,任何人均可以获取;而私钥专属于拥有该密钥对的实体,属于绝对隐私。

这里给大家来图解—非对称加密

总结

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

扫码关注腾讯云开发者

领取腾讯云代金券