BTC-协议-04

112 阅读2分钟
  • 核心概念:

    • 比特币的发行:由挖矿决定(coinbase铸币权)
    • 防止双花攻击(double spending
  • BTC系统中每个交易都包含输入和输出两部分,然后由转账人签名:

    • 输入部分要说明币的来源和发起转账人的公钥
      • 为防止有人冒名顶替,用自己的公私钥对进行对他人账户章BTC的转移,需要比对在coinbase中的获得铸币权人的公钥哈希和当前公钥(拼接当前节点输入和上一个节点的输出,组成bitcoin script,运行无误即通过)
    • 输出部分要给出收款人公钥的哈希(即收款人的账户地址)
  • 两种哈希指针

    • 一种是指向前一个区块头的哈希指针
    • 另一种是指向前面某个交易的指针,即用来指明币的来源
  • block header中包含的主要的域:

    • 版本:protocol version
    • 指向上一个节点的哈希指针:hash of previous block header
    • 区块体中交易数据的根哈希值:merkel root hash
    • 挖矿相关:
      • 目标难度:target
        • mining puzzle:H(block header) <= target
        • 目标难度的编码:nBits
      • 随机数:nonce
  • 分布式共识:distributed consensus

    • 不可能结论:
      • FLP theorem:在一个异步的(asynchronous)系统里,(网络传输迟延没有上限就叫异步系统),即使只有一个成员是有问题的(faulty),也不可能取得共识
      • CAP theorem:任何一个分布式系统,这三个性质中(Consistency、Availability、Partition tolerance)最多只能满足两个
    • 著名协议Paxos
  • 比特币中的共识协议:

    • 投票:需要检验membership
      • 按照账户投票:难以防范女巫攻击Sybil attack
        • 联盟链,membership准入要求,hyperledger fabric
      • 按照算力投票:寻找nonce,解mining puzzle
        • 争夺记账权:
          • 获得记账权的节点有权利发布下一个区块。其他节点收到这个区块之后,要验证该区块的合法性
          • 铸币交易block reward:50BTC -> 25BTC -> 12.5BTC -> 6.25BTC -> ...(每隔21万个区块奖励减半,即大约四年)
        • 具体验证方式:
          1. 验证block header:
            1. 检查nBits域设置的是否符合比特币协议中规定的难度要求
            2. 检查该不等式是否成立
          2. 检查block body:
            1. 验证交易列表中每个交易是否都合法
              • 合法的签名
              • 以前没有被花过
    • 最长合法链:
      • 分叉攻击Forking attack
      • 隐式同意implicit consent:在认可的最长合法链上继续挖矿
      • 确认时间:六个区块之后(10分钟出一个块,大概一小时)
    • 希望获得共识的内容:账本的一致性