• 区块链技术理念


    区块链在本质上就是一种记账方法,当然了,并不是通过人来记账的,而是通过一种 软件,我们暂且简称为区块链客户端。以上面的例子来说,张三、李四、王五、赵六等 人,就相当于一个个的区块链客户端软件,它们运行在不同的设备上,彼此之间独立工 作。通常我们把运行中的客户端软件称为“节点”。这些节点运行后,彼此之间会认识一 下。它们彼此之间是这样认识的:张三认识李四也认识王五,赵六联系到了张三,让张三 把他认识的人的联系方式发给自己,这样赵六也认识了李四和王五,通过这样的方式,大 家就形成了一张网,有什么事只要招呼一声,立马消息就会传遍整个网络节点。这种方式 跟新闻转发差不多,不需要依靠某一个人,大家就能互通消息了,在区块链软件的结构 中,这种互相通信的功能称为“网络路由”。

    在这个网络中,每个节点都维护着自己的一个账本,账本中记录着网络中发生的一笔 笔账务。具体是什么样的账务呢?这得看具体是什么样的功能网络。区块链技术属于一种 技术方法,可以用来实现各种不同的业务功能,小到如上例中的日常记账,大到各种复杂 的商业合约,等等,记录的数据也就不同了。网络中的节点是独立记账的,可是记账的内 容要保持彼此一致。所用的方法就是设定一个游戏规则,通过这个规则选出一个记账的节 点,就如上例中的掷骰子。在区块链系统中,这个所谓的“掷骰子”称为“共识算法”,就是 一种大家都遵守的筛选方案,我们可以先这么简单地理解。选出一个节点后,则一段时间 内的账务数据都以这个节点记录的为准,这个节点记录后会把数据广播出去,告诉其他的 节点,其他节点只需要通过网络来接收新的数据,接收后各自根据自己现有的账本验证一 下能不能接得上,有没有不匹配和不规范的,如果都符合要求,就存储到自己的账本中。

    在有些系统中,会考虑到被骰子投中的节点的劳动付出,毕竟它要负责整理数据,验 证数据,打包数据,还要再广而告之,这个活还是挺辛苦的。于是会设计一种激励机制, 负责打包数据的那个节点可以获得系统的奖励,这个奖励类似于论坛积分,站在软件技术 的角度,就是一个数据。这个数据可以视为奖金,有时候大家会很积极地去争取那个奖 金,于是就希望骰子能投中自己,有些区块链系统在这个环节会设计出一种带有竞争的机 制,让各个节点去抢,谁能抢到这个机会谁就能获得打包数据的权力并且同时获得这笔奖 励,在这种情况下,我们会形象地将这个竞争的过程称为“挖矿”。

    那么,话又说回来了,我们将一个个运行客户端称为节点,那到底怎么标记不同的使 用者呢?也是通过用户名注册吗?实则不然。在区块链系统中,这个地方的设计很有意 思,是通过一种密码算法来实现的,具体来说是通过一种叫公开密钥算法的机制来实现 的。我们知道,对于一种密码算法来说,无论算法过程是什么样的,都会有一个密钥。而 公开密钥算法拥有一对(也就是两个)密钥,跟虎符一样,是彼此配合使用的,可以互相 用来加解密。其中一个叫私钥,另外一个叫公钥,公钥可以公开给别人,私钥要自己保管 好。在区块链系统中,公钥就是用来用户身份识别的,一般不会直接使用公钥,因为不容 易让人记住。公钥往往都比较长,实际处理的时候都会进行转换,比如取得公钥的最后20 个字节或者经过一系列更复杂的转换,最后得到一个称为“地址”的转换结果,这个“地 址”就能代表一个用户。

    为什么在区块链系统中要用这么一个奇怪的用户身份表示方法呢?似乎看起来除了有 些创意外,也没特别的用处。这里我们就得再介绍下这个公开密钥算法的特别能力。之前 提到说这种算法有两个密钥,那么这两个密钥是怎么配合工作的呢?我们来简单说明一 下:用公钥加密的数据必须用对应的私钥来解密,而用私钥加密(通常称为“签名”)的数 据必须用对应的公钥来解密。这个特点可是能发挥很大用处的,就如上述的例子中,如果 张三要发送给李四一张支票,那怎么传送呢?就这么发过去,会被那个记账的人拿到,风 险可就大了。于是张三想了一个办法,他在支票上用李四的公钥加了个密,然后再签上自 己的名字(使用自己的私钥签名),这个时候其他人就算拿到支票也没用,因为只有李四 才有自己的私钥,也只有李四才能解开这张支票来使用。这种功能设计在区块链系统中称 为“脚本系统”。

    现在我们知道了,区块链的技术理念,其实就是大家共同来参与记账,通过一种规则 不断地选出账务打包者,其他节点接收验证,并且每个用户都有一对密钥表示自己,通过 脚本系统的功能实现在公共网络中定向发送有价值的数据。

  • 相关阅读:
    servlet乱码以及解决
    javascript正则简单入门
    javascript创建自定义对象和prototype
    java 对象初始化和代码块初始化顺序
    java final 和instanceof 关键字
    【记录】自学JavaScript第七周
    【记录】自学JavaScript第六周
    获取节点名称及节点值
    正则表达式中的替换字符串示例
    部分正则表达式基本函数用法示例
  • 原文地址:https://www.cnblogs.com/qukuailian/p/8674513.html
Copyright © 2020-2023  润新知