美文网首页
分布式-13-区块链

分布式-13-区块链

作者: 宠辱不惊的咸鱼 | 来源:发表于2019-10-04 09:24 被阅读0次

    概述

    http://www.ruanyifeng.com/blog/2017/12/blockchain-tutorial.html

    blockchain-001.jpg
    • 安全,信任,去中心化
    • 特殊的分布式数据库
    • 区块链的作用是存储信息,读写 -> 数据库
    • 任何人都可以架设服务器加入区块链网络
      • 什么是区块链网络?
    • 没有管理员,也无法产生管理员

    区块(block)

    概述

    blockchain-002.jpg
    • 区块链由一个个区块组成,也是名称由来
    • 区块很像数据库的记录,每次写入数据,就是创建一个区块
    • 组成
      • 区块头(Head):当前区块的元信息
        • 生成时间
        • 区块体Hash
        • 上一个区块Hash
        • ...
      • 区块体(Body):实际数据

    区块Hash

    Hash = SHA256(区块头)
    
    • 区块Hash被定义为区块头的Hash,由本区块和上一区块共同决定
    • Hash计算的耗时性保证区块篡改的几乎不可行性,除非掌握全网51%以上算力

    采矿

    • 由于必须保证节点之间的同步,所以新区块的添加速度不能太快
    • 试想一下
      • 你刚刚同步了一个区块,准备基于它生成下一个区块
      • 但这时别的节点又有新区块生成,你不得不放弃做了一半的计算,再次去同步
      • 因为每个区块的后面,只能跟着一个区块,你永远只能在最新区块的后面,生成下一个区块
      • 所以,你别无选择,一听到信号,就必须立刻同步
    • 区块链的发明者中本聪(假名,真实身份至今未知)故意让添加新区块,变得很困难
      • 他的设计是:平均每10分钟,全网才能生成一个新区块,一小时六个
      • 这种产出速度不是通过命令达成,而是故意设置了海量计算
      • 只有通过极其大量的计算,才能得到一个有效Hash(和区块Hash不是一个概念),从而把新区块添加到区块链
    • 这个过程叫采矿(mining),因为计算有效Hash的难度,好比在全世界的沙子里面,找到一粒符合条件的沙子
    • 计算Hash的机器就叫做矿机,操作矿机的人就叫做矿工

    难度系数

    概述

    blockchain-003.jpg blockchain-004.jpg
    • 为什么计算Hash这么困难?
      • 不是任意一个Hash都可以,只有满足条件的Hash才会被区块链接受
      • 这个条件特别苛刻,使得绝大部分Hash都不满足要求,必须重算
      • 区块头包含一个难度系数(difficulty),这个值决定了计算Hash的难度
      • 举例来说,第100000个区块的难度系数是14484.16236122
    • 有效Hash机制
      • 区块链协议规定:使用一个常量除以难度系数,得到目标值
      • 值(猜测由矿机自己来给) -> Hash算法 -> Hash值 -> 小于目标值的Hash才是有效的
      • 目标值非常小,Hash小于该值的机会极其渺茫,可能计算10亿次,才算中一次
      • 这就是采矿如此之慢的根本原因
      • 区块头里面还有一个Nonce值,记录Hash重算的次数
      • 第100000个区块的Nonce值是274148111,即计算了2.74亿次,才得到了一个有效的Hash,该区块才能加入区块链

    难度系数调节

    • 就算采矿很难,但也没法保证,正好十分钟产出一个区块
    • 有时一分钟就算出来了,有时几个小时可能也没结果
    • 总体来看,随着硬件设备的提升,以及矿机数量的增长,计算速度一定会越来越快
    • 为了将产出速率恒定在十分钟,中本聪还设计了难度系数的动态调节机制
    • 他规定,难度系数每两周(2016个区块)调整一次
    • 如果两周里面,区块的平均生成速度是9分钟,就意味着比规定速度快了10%,因此难度系数调高10%
    • 如果平均生成速度是11分钟,意味着比规定速度慢了10%,难度系数调低10%
    • 难度系数越调越高(目标值越来越小),导致采矿越来越难

    区块链分叉

    • 同时有两个区块加入,应该采纳哪一个呢?


      blockchain-005.jpg
    • 现有规则

      • 新节点总是采用最长的那条区块链
      • 如果有分叉,将看哪个分支在分叉点后面,先达到6个新区块(称为"六次确认")
      • 按照10分钟一个区块计算,一小时就可以确认
      • 由于新区块的生成速度由计算能力决定,所以这条规则就是说,拥有大多数计算能力的那条分支,就是正宗的区块链


        blockchain-006.jpg

    总结

    • 区块链代价
      • 效率:10分钟 + 同步时耗
      • 能耗:无数无意义计算
    • 场景
      • 不存在所有成员都信任的管理当局
      • 写入数据不要求实时使用
      • 挖矿收益能够弥补本身成本


        blockchain-007.jpg

    PBFT

    • 共识机制

    比特币

    http://www.ruanyifeng.com/blog/2018/01/bitcoin-tutorial.html

    相关文章

      网友评论

          本文标题:分布式-13-区块链

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