第一章 区块链技术入门

 
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及交易脚本(未发费的交易输出)
  • 比特币白皮书
 
 
 
 
03-27 08:26