比特币系统的实现
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。