zoukankan      html  css  js  c++  java
  • 区块链技术

    区块链特点

    • 一种特殊的分布式数据库,没有管理员,彻底无中心
    • 写入数据比较慢,要求实时的场景不适配
    • 能耗比较大,选择使用时需评估成本和目的(公益还是盈利)
    • 所有节点都全量存储数据,并同时支持读写

    区块链的组成

    区块链由一个个区块组成,区块很像数据库的记录,每次写入数据,就是创建一个区块。
    每个区块包含两个部分:区块头和区块体
    区块头包含了当前区块的多项元信息,其中最主要的是

    1. 生成时间
    2. 实际数据(即区块体)的 Hash
    3. 上一个区块的 Hash(针对“区块头”(Head)计算的)
    4. Nonce 值,记录了 Hash 重算的次数。

    区块体就是你需要保存的业务数据

    Hash解释 

    Hash 就是计算机可以对任意内容,计算出一个长度相同的特征值。区块链的 Hash 长度是256位,不管原始内容是什么,最后都会计算出一个256位的二进制数字。而且可以保证,只要原始内容不同,对应的 Hash 一定是不同的(忽略hash冲突的可能性)。
    每个区块(包括当前时间)的 Hash 都是不一样的,可以通过 Hash 标识区块。
    如果区块的内容变了,它的 Hash 一定会改变。
    如果有人修改了一个区块,该区块的 Hash 就变了。为了让后面的区块还能连到它,该人必须同时修改后面所有的区块,否则被改掉的区块就脱离区块链了。Hash 的计算很耗时,同时修改多个区块几乎不可能发生,除非有人掌握了全网51%以上的计算能力。通过这种联动机制,区块链保证了自身的可靠性,数据一旦写入,就无法被篡改。

    节点的同步 

    所有节点的IP写死在代码或者配置中
    分布式一致性保证中的拜占庭将军问题,只要叛变者不超过1/3,无论叛变者如何折腾,忠诚的将军总能达成一致的意见。
    工作量证明机制(PoW),保证每10分钟生成一个区块, 依赖机器进行数学运算来获取插入区块权,资源消耗相比其他共识机制高、可监管性弱,每次达成共识需要全网共同参与运算,性能效率比较低,容错性方面允许全网50%节点出错。
    当某个节点接到其他节点送来的区块时,必须立即停下手里的挖矿工作进行账簿确认。需要确认的信息有三个:账簿的Hash有效,区块的前一页Hash有效,区块体业务数据是否有效。

    ps:

    在网络可靠,存在节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性算法。
    分布式环境下的一致性问题无解,但是采用适当的机制(Paxos,Raft,PBFT,PoW/Pos/DPoS/Casper),永远无法达成一致的可能性极小。

    计算Hash(采矿)

    区块头包含一个难度系数(difficulty),这个值决定了计算 Hash 的难度。区块链协议规定,使用一个常量除以难度系数,可以得到目标值(target)。显然,难度系数越大,目标值就越小。
    Hash 的有效性跟目标值密切相关,只有小于目标值的 Hash 才是有效的,否则 Hash 无效,必须重算。由于目标值非常小,Hash 小于该值的机会极其渺茫,可能计算10亿次,才算中一次。这就是采矿如此之慢的根本原因。这就是总所周知的工作量证明系统(Proof-of-Work)。
    难度系数的动态调节,为了将产出速率恒定在十分钟,难度系数每两周(2016个区块)调整一次。如果这两周里面,区块的平均生成速度是9分钟,就意味着比法定速度快了10%,因此难度系数就要调高10%;如果平均生成速度是11分钟,就意味着比法定速度慢了10%,因此难度系数就要调低10%。难度系数越调越高,导致了采矿越来越难。
    例子:比特币区块demo链接

    ps:

    哈希值是固定长度的数值,用来标识唯一数据。
    哈希通过将索引、前个哈希、时间戳、数据、随机数作为输入后计算得出。
    CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)     data->对于比特币来说是默克树哈希值(2000个交易记录的hash组合)

    SHA256 算法通过给定的输入,计算出一个唯一的哈希。相同的输入总会生成相同的哈希。

    修改一个区块的唯一方式就是重新开采这个区块以及它之后的所有区块。因为新的区块不断增加,基本不可能修改区块链。

    区块链的分叉

    如果两个人同时向区块链写入数据,也就是说,同时有两个区块加入,因为它们都连着前一个区块,就形成了分叉。这时应该采纳哪一个区块呢?
    规则是,新节点总是采用最长的那条区块链。如果区块链有分叉,将看哪个分支在分叉点后面,先达到6个新区块(称为“六次确认”)。按照10分钟一个区块计算,一小时就可以确认。由于新区块的生成速度由计算能力决定,所以这条规则就是说,拥有大多数计算能力的那条分支,就是正宗的区块链。

    区块链的类型

    公有链,任何人都可以参与使用和维护,典型的如比特币区块链,信息是完全公开的。
    私有链,集中管理者进行限制,只有组织内部的人可以使用,信息公开程度完全由组织控制。
    联盟链,介于两者之间,有若干个组织一起合作维护一条区块链,有权限的管理,相关信息会得到保护,典型的如银联组织。

    区块链应用场景

    区块链即服务,BlockChain as a Service(BaaS)
    供应链,阿里对跨境电商防伪已经用上了区块链技术
    汇款支付,虚拟货币的比特币就是一个例子
    还有很多地方,可以集思广益,譬如身份识别,股票交易,药物防伪,物联网等等。

  • 相关阅读:
    oracle 10g 共享服务器搭建
    Oracle:10053事件简述
    Asktom Oracle: Partition table and index .
    Oracle shared server配置
    Oracle:物化视图语法
    Asktom:Thanks for the question regarding "consistent gets Very puzzling".
    oracle嵌套表整理的学习资料
    非空闲等待事件之:db file sequential read(转)
    Asktom Oracle:How to multiplex single row into multiple rows
    Oracle:Not exists
  • 原文地址:https://www.cnblogs.com/wade-luffy/p/8301075.html
Copyright © 2011-2022 走看看