BTC-实现-05

198 阅读2分钟
  • 区块链是去中心化的账本技术:

    • 基于交易的账本模式(BTC比特币)
      • 隐私保护性较好
      • 需要说明币的来源
    • 基于账号的账本模式(ETH以太币)
  • UTXO(unspent transaction output

    • 全节点维护的一个全局的数据结构
    • 方便在服务器内存中快速寻找还未花出去的交易输出,即预防双花攻击
    • 定位的要素:
      • UTXO集合当中的每个元素要给出产生输出的交易哈希值
      • 以及它在这个交易里是第几个输出
    • 每个交易可以有多个输入,也可以有多个输出,因此一个交易可能来自多个地址,可能有多个签名
      • total inputs = total outputs + transaction fee
  • nonce不足以支撑当前剧烈的挖矿活动

    • nonce只有4个字节,2^32搜索空间
    • 很大概率搜索完了仍找不到符合目标空间的nonce,可以使用coinbase字段的前八个字节扩大搜索空间为2^96(因为block header中的merkle root hash是会随着coinbase交易哈希的改变而改变的)
    • 每个发布的区块中都有一个铸币交易coinbase transaction,即正常交易由input scripts和output scripts组成,而coinbase交易中凭空造币,所以没有input scripts的内容,但有一个coinbase的域,可以随意修改内容,作为extra nonce
    • 真正挖矿的时候只有两层循环,外层循环调整coinbase域的extra nonce。算出block header里的根哈希值之后,内层循环再调整header里的nonce
  • 挖矿过程的数理分析:

    • 挖矿过程每次尝试一个nonce可以看作是一次Bernoulli trial(伯努利实验)
    • 每一个随机的伯努利实验就构成了一个Bernoulli process伯努利过程。它的一个性质是:无记忆性
    • 因为一个nonce成功的概率很小,需要大量次数的尝试,因此可以用Poisson process泊松过程来代替伯努利过程
    • 画一个坐标轴,纵轴表示概率密度,横轴表示系统出块时间,那么系统出块时间近似是服从指数分布的
    • 参考概率密度函数分布,因为指数分布的无记忆性,比如一个矿工miner将来还要挖多长时间,跟过去已经挖了多长时间是没有关系的,也称progress free
    • progress free保障了挖矿的公平性,防止了算力强的矿工会获得不成比例的优势