zoukankan      html  css  js  c++  java
  • 区块链技术核心概念与原理

    第一章 区块链技术入门

     
    1.1区块链前世今生
        1.1.1 密码朋克(Cypherpunk)
    邮件组: 密码 数学 计算机技术 等
        wiki解密创始人: 阿桑奇
        BT下载作者     : 布莱姆-科恩
        万维网创始人  : 蒂姆伯纳斯-李
        智能合约概念的提出者: 尼克 萨博
        Facebook创始人之一: 肖恩帕克
        比特币的创始人: 中本聪  (比特币白皮书: 一个点对点的电子现金系统-去中心化)
     
        1.1.2区块链: 一系列技术的集合
        作用:存储信息。任何需要保存的信息都可以写入区块链,也可以从里面读取,就像一个数据库。
    比特币系统里面的数据是以一个个的区块来存储的,并且通过hash的方式,把一个个区块链接起来形成一个区块的链条。
        
    特点:
    • 无中心化 :没有管理员 无需添加额外审核
    • 分布式数据库 
    • 能耗大,非常浪费资源
     
        1.1.3 应用场景
        资产: ICO 数字资产发行、支付、交易、结算
        记账:股权交易、供应链金融、商业积分
        不可篡改(区块链不可篡改的特点): 溯源、重酬、医疗证明、存在性证明
        点对点特点: 共享经济 、 物联网 
        隐私:匿名交易
     
    1.2区块链前景
         任何人都可以架设服务器,加入区块链网络成为其中一个节点。可以向任何一个节点,写入/当前数据,因为最后所有数据都会同步到区块链网络中保持一致。
    1.3比特币是什么
     
        1.3.1 比特币
    比特币:数字货币 每10分钟记账一次
    货币: 货币是可以承载价值的一般等价物
    一般等价物: 任何可以作为具有交易价值的物品
      金属货币—>银票—〉法币  ——》一串数字(虚拟货币)
    数字货币: 共识 具有共识的虚拟货币
     
        1.3.2 特点
        信任性:财产只受自己控制 (私密钥匙)
        无通胀性:不会因为发行过多而贬值  
                        比特币的总量不变性:2100万个 
       无假钞 :
        流通性: 流通性好,全球无缝流通。免去中间商和中心化直接点对点交易
        去中心化记账系统:
                中央服务器存储所有数据 !=》 存在比特币网络每一个节点里
     
    1.4比特币原理
       1.4.1 账本如何验证
    Hash 
         哈希函数: Hash(原始信息) = 摘要信息
            
           Hash就是 计算机可以对任意内容,计算出一个长度相同的特征值。
        区块链的长度:256位 ,原始信息不同对应的Hash值一定不可能相同!
    解析: 原始信息 通过Hash操作之后,对任何的原始信息,得到一个简短的摘要信息
     Hash特点:
    •     同样的原始信息用同一个哈希函数总能得到相同的摘要信息
    •     原始信息任何微小的变化都会哈希出面目全非的 摘要信息 
    •     从摘要信息无法逆向推算出原始信息 
    •     区块与Hash是一一对应的,每个区块的Hash都是针对 区块头 计算的
    摘要信息保存起来形成了区块
     
    区块
        区块链由一个个区块block组成。区块很像数据库的记录,每次写入数据,就是创建一个区块。
      
     
     
      ex:区块头( 序号 、时间戳、Nonce值、Hash值、当前区块体的hash,上一个区块的Hash值等...) +区块体(交易记录)
    Nonce值:记录Hash重算的次数。第100000个区块的NOce值是 274148111,即计算了2.74亿次,才得到一个有效的Hash值。
     
    区块链计算公式:
                        hash = SHA256(区块头)
    hash值 由区块头唯一决定,SHA256是区块链的Hash算法
     
    ps:若当前区块的内容变了,或者上一个区块的hash变了,一定会引起当前区块的Hash改变。
     重大意义: 如果有人修改了一个区块,该区块的hash值就变了,为了让后面的区块能继续链接到它,就必须同时修改后面所有的区块,否则被改掉的区块就脱离整个区块链。
        基于这类联动机制,区块链保证了自身的可靠性,数据一旦写入就无法被篡改。
      
    两个账本的合并:把第一个账本的Hash值作为原始信息的一部分,与第二个账本的原始信息和在一起进行Hash运算操作。
            对比第二个Hash值是否一致的验证。对上了说明第二个账本的信息和第一个摘要的信息都是正确的。
    第二个账本:形容又一个 区块 (( 序号 、时间戳、Hash值) +交易记录)
    区块链:每一个节点在核对数据的时候,只需要核对最后一个区块的摘要信息。信息能够核对上,说明整个区块链的账本是正确的。完成高效的账本验证。
     
        1.4.2 所有权问题
     
    账号: 地址表示
    1.4.2.1 转账记录:
        { “付款地址”:“xxxxx”
          “收款地址” :“yyyyy”
            “金额” : “2 btc"
        }
     
    1.4.2.2 密码 —>私钥 
        一个地址对应一个私钥
    谁拥有这个私钥 ,谁就能用于支付。私钥泄露 比特币就会丢失。 
        无法重新获取,账号和密码不能互相推导。
     
    1.4.4.3 非对称加密技术(交易签名)
        ————不泄露私钥的情况下,证明  拥有某个地址的私钥
    •     对交易进行hash得到交易的摘要
    •     用私钥对摘要进行签名  
     
    1.4.4.4 签名过程:
    •     对原始信息进行Hash计算 得到摘要信息
     用摘要信息和 私钥 进行 签名操作 sign  ——得到签名信息
     
    付款节点:
        循环广播交易内容:   交易的 原始信息、交易的签名 信息、交易的金额
    •  交易的节点 分发给 周围的节点,让周围的节点一起验证信息 ,整个广播循环操作
    • 相邻节点收到广播后,验证通过后,再次与之相邻的节点进行广播,进行验证操作。
    与相邻的节点进行广播验证后:
        验证签名的信息是否是付款方 用私钥对原始信息 签名产生的 
     
    1.4.4.5 验证
        验证运算 : 
            原始交易 信息的摘要 一致 说明 是地址私钥所有者发出的 
             验证通过 并写入账本  并再次广播
        
    1.4.4.6 签名及验证
        签名 和 验证 是逆运算
            付款的地址 是 公钥 
        签名的过程 是对摘要进行加密的过程: 通过摘要和私钥 得到签名信息
        验证的过程 是解密的过程 :付款方地址和签名信息进行解密,  得到交易的摘要
     
    ps: 账本 不包含任何个人信息 
     
        1.4.3 为什么记账(挖矿)
    记账 :Hash打包过程
    记账 需要消耗资源,记账操作完成会获得系统12.5 btc的奖励
     
    挖矿——工作量证明
    1个比特币 相当于 4w+ 人民币 ,一次记账相当于能奖励 50W+ rmb
     
        1.4.3.1 规则
    •     一段时间内 只可以有一个人可以记账成功 (10分钟左右)
    •     通过解决密码学难题(即工作量证明)竞争获得唯一记账权
    •     其他节点 复制记账结果
    •     使用一个常量 除以/难度系数 = 目标值 ; target = targetMax / difficulty。只有小于目标值饿Hash才是有效值 (难度系数越调越高目标值越来越小,导致采矿越来越难)
    •     难度系数动态调节机制; 即是如果每两周调节一次,发现生成速度比法定速度快10%则难度系数增加10% ,反之亦然
    为了保证节点之间的同步,所以区块链的添加速度不能太快。    
     
        1.4.3.2 工作量证明
     Hash(上一个hash值,交易记录集) = 新的Hash值
     
    提高难度:
     Hash(上一个hash值,交易记录集,随机数) = 0000..开头新的Hash值【直到找到一个以若干个0开头hash值】
        率先找到一个符合条件的hash值,就能获得一个唯一的记账权
     
    交易记录集
    •     收集广播中还没有被记录账本的交易
    •     交易的有效性验证
    •     添加一笔给自己转账的交易(挖矿奖励12.5btc)
     
    hash值是 16进制 字符串
        得到一个0  的概率 是 1/16 
        得到两个0  的概率 是 16*16 
        得到 18个0 的概率 是 16的 18次方的 hash运算
     
        1.4.4 以什么为基准--共识机制
    思考: 两个节点同时完成工作量证明,使用谁的区块?
        
    节点工作量只有在其他的节点认同其有效的 
     
    1.4.4.1 区块链的分叉
    上面提到的问题,如果两方同时向区块链写入数据,双方都链接着前一个区块,就形成分叉,这时采用哪个区块?
        答:新节点总是采用最长的那条区块链。若分叉,参考哪个分支在分叉点后面,先达到6个新区块(“六次确认”。新区块的生成速度由计算能力决定,拥有大多数计算能力的那条分支,就是被选中的区块链比特链,没被选中的作为备选链。
     
    1.4.4.2 共识机制
        采用累计工作量最大的区块链 是主链 或是说难度最大的区块链
    机制:
        保证 区块链 比特币在最大的链上进行工作 
     
     
    1.5 比特币其他
    • 比特币P2P网络
    • 区块结构Merkle树
    • 比特币UTXO及交易脚本(未发费的交易输出)
    • 比特币白皮书
     
     
     
     
  • 相关阅读:
    Git—分支管理
    Git—推送代码至Github
    Git入门—创建项目
    Mysql单表查询
    Mysql数据的增删改查
    Mysql完整约束性
    C++继承中同名成员变量处理方法
    C++继承和组合中的构造函数和析构函数调用原则
    C++继承中的类型兼容原则
    C++中的继承
  • 原文地址:https://www.cnblogs.com/cold-ice/p/9053723.html
Copyright © 2011-2022 走看看