组成区块链的基本要素

作者: zidea | 来源:发表于2018-11-16 05:44 被阅读24次

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

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

    什么是状态机

    这里定义状态机,这个状态机只是为了说明区块链,所以设计很简单,初始化状态为整型 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 < 95 所以无法再更新状态机。

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

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

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

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

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

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

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

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

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

    总结

    请大家多多支持我的微信公众号,这里会推送最新最快的好文章。

    小马学编程

    相关文章

      网友评论

        本文标题:组成区块链的基本要素

        本文链接:https://www.haomeiwen.com/subject/dvkpfqtx.html