zoukankan      html  css  js  c++  java
  • 比特币系统的实现

    Block chain:去中心化账本

    Bitcoin:transaction-based ledger 基于交易的账本

    ETH:account-based ledger 基于账户的账本

    UTXO:Unspent transaction outputs;未花费交易输出,相较于账户模型不直观。比特币并没有一个用于记录账户余额的账本,而是依靠对交易历史的记录。如果要确定个人地址的余额,就必须查看该地址之前的输入输出,计算出余额。

    inputs - outputs = tx fee (to miner)

    在一个区块的交易中,总输入与总输出的差值作为交易费用(非常少的一笔小费),转给挖出区块的矿工,和出块费用一起成为矿工的总收入。

    关于挖矿的部分细节:

    寻找nonce,计算出新区快的过程,正是哈希第三个特性puzzle friendly的体现,计算过程本身是工作量证明。

    Mining过程:每次挖矿是Bernoulli trial:a random experiment with binary outcome;每次试nonce求解:Bernoulli process:a sequence of independent Bernoulli trials。

     由于计算力的提升以及投入挖矿的矿工逐渐增多,出块时间可能由原来的几十分钟降低为几分钟甚至更短,因此为了维持出块时间,必须定期调整出块难度。

    调整mining difficulty-->维持average time约10min。调整方法:改变target nonce等计算内容。

    出块时间是与难度成正相关的,当难度较低时,出块时间短,应增大难度,拉长出块时间。

    成比例优势:挖矿就是比拼算力的过程,为使得出块的次数与算力成正比,即通过固定时间内尝试更多的nonce来成为赢家。上图说明出块概率不应随难度改变(与时间相关)而变化。

    举例而言,如果A算力是B的十倍,但是如果出块概率会随难度改变,由于难度与计算的nonce有关,会导致A算到后面的nonce值是出块概率改变,使得出块优势不止十倍。

    挖矿过程看似是在计算计算计算,但是实际上也仅仅是在计算,计算这些哈希值本就是无用的(目前看来确实如此),并非是把所有的矿工吸引来解决世界级数学难题,我相信大家都只是来淘金的。不过这一过程也是为了维护区块链的稳定运行的必要条件。Bitcoin is secured by mining.

    比特币系统规定,每出块21万个,出块奖励就会减半(初始值为50,而出块时间会通过调整难度固定在十分钟左右,因此 21万 * 10min / 1year ,大约每四年出块奖励就会减半。

    21万 * 50 * ( 1 + 1/2 + 1/4 + 1/8 + ... )--> 2100万  比特币总量为2100万

     BTC本身对矿工在区块中写入哪些合法交易是不做限制的,不过不必担心自己的交易不会被写入区块,总有block会看上你的。  :)

    但是一个区块文件大小有限制,应不超过1MB。

    图片引用自B站用户

  • 相关阅读:
    struts文件上传,获取文件名和文件类型
    commons-fileupload.jar实现文件上传
    DiskFileItemFactory类的使用
    css控制两个表格的边线重合
    css控制同一个页面的两个表格,一个显示有边框线,而另一个没边框线
    Android无线调试_adbWireless
    Android无线调试(转)
    struts2用到的jar有那些
    Eclipse 中 Could not find *.apk的解决方案
    JavaScript修改注册表
  • 原文地址:https://www.cnblogs.com/faded828x/p/13067140.html
Copyright © 2011-2022 走看看