挖矿与共识

挖矿与共识

  每10分钟就会有⼀个新的区块被“挖掘”出来,每个区块⾥包含着从上⼀个区块产⽣到⽬前这段时间内发⽣的所有交易,这些交易被依次添加到区块链中。我们把包含在区块内且被添加到区块链上的交易称为“确认”交易,交易经过“确认”之后,新的拥有者才能够花费他在交易中得到的⽐特币。

  矿⼯们在挖矿过程中会得到两种类型的奖励:创建新区块的新币奖励,以及区块中所含交易的交易费

  换句话说在2140年之后,不会再有新的⽐特币产⽣。

 

  ⼤约每⼗分钟产⽣⼀个新区块,每开采 210,000(21W) 个块(1年5.25W个区块),⼤约耗时4年,货币发⾏速率降低50%。在⽐特币运⾏的第⼀个四年中,每个区块创造出50个新⽐特币。

  到2140年左右,会存在接近2,100万⽐特币。

  比特币发行量脚本:

# 初始的块奖励为50BTC
start_block_reward = 50

# 以10分钟为⼀个区块的间隔,210000个块共约4年时间
reward_interval = 210000

def max_money():
    # 50 BTC = 50 0000 0000 Satoshis
    current_reward = 50 * 10**8
    total = 0
    while current_reward > 0:
        total += reward_interval * current_reward
        current_reward /= 2
    return total

print "Total BTC to ever be created:", max_money(), "Satoshis"
View Code

    

  总量有限并且发⾏速度递减创造了⼀种抗通胀的货币供应模式。法币可被中央银⾏⽆限制地印刷出来,⽽⽐特币永远不会因超额印发⽽出现通胀。

  许多经济学家提出通缩经济是⼀种⽆论如何都要避免的灾难型经济。因为在快速通缩时期,⼈们预期着商品价格会下通货紧缩货币跌,⼈们将会储存货币,避免花掉它。这种现象充斥了⽇本经济“失去的⼗年”,就是因为在需求坍塌之后导致了滞涨状态。

去中心化共识

1、交易的独立校验。

  每⼀个节点在校验每⼀笔交易时,都需要对照⼀个⻓⻓的标准列表:  

    1)交易的语法和数据结构必须正确。  

    2)输⼊与输出列表都不能为空。

    3)交易的字节⼤⼩是⼩于 MAX_BLOCK_SIZE 的。

    4)解锁脚本( scriptSig )只能够将数字压⼊栈中,并且锁定脚本( scriptPubkey )必须要符合 isStandard 的格式 (该格式将会拒绝⾮标准交易)。

    5)对于每⼀个输⼊,如果引⽤的输出存在于池中任何的交易,该交易将被拒绝。 

2、整合交易至区块。

  交易的优先级是由交易输⼊所花费的UTXO的“块龄”决定,交易输⼊值⾼、“块龄”⼤的交易⽐那些新的、输⼊值⼩的交易拥有更⾼的优先级。

  交易的优先级是通过输⼊值和输⼊的“块龄”乘积之和除以交易的总⻓度得到的。交易输⼊的值是由⽐特币单位“聪”(1亿分之1个⽐特币)来表⽰的。

    

  UTXO的“块龄”是⾃该UTXO被记录到区块链为⽌所经历过的区块数,即这个UTXO在区块链中的深度。交易记录的⼤⼩由字节来表⽰。

  

  ⼀个交易想要成为“较⾼优先级”,需满⾜的条件:优先值⼤于57,600,000,相当于⼀个⽐特币(即1亿聪),年龄为⼀天(144个区块),交易的⼤⼩为250个字节:

    

  1)区块中⽤来存储交易的前50K字节是保留给较⾼优先级交易的。Jing的节点在填充这50K字节的时候,会优先考虑这些最⾼优先级的交易,不管它们是否包含了矿⼯费。这种机制使得⾼优先级交易即便是零矿⼯费,也可以优先被处理。

  2)然后,Jing的挖矿节点会选出那些包含最⼩矿⼯费的交易,并按照“每千字节矿⼯费”进⾏排序,优先选择矿⼯费⾼的交易来填充剩下的区块,区块⼤⼩上限为 MAX_BLOCK_SIZE

  3)如区块中仍有剩余空间,Jing的挖矿节点可以选择那些不含矿⼯费的交易。有些矿⼯会竭尽全⼒将那些不含矿⼯费的交易整合到区块中,⽽其他矿⼯也许会选择忽略这些交易。

  4)在区块被填满后,内存池中的剩余交易会成为下⼀个区块的候选交易。因为这些交易还留在内存池中,所以随着新的区块被加到链上,这些交易输⼊时所引⽤UTXO的深度(即交易“块龄”)也会随着变⼤

猜你喜欢

转载自www.cnblogs.com/tekkaman/p/9973837.html