Angular, Blockchain, Science とか

Angular, Blockchain, Science全般 の情報を主に書いていきます。

ビットコイン マイニング報酬のソースコードリーディング

ビットコインのマイニング報酬のコードを見ていきます。

マイニング報酬は、トランザクション手数料の総額 + coinbase報酬

coinbase報酬(BlockSubsidy)は50bitcoinから始まって、210000ブロックごとに半減していきます。

以下のコードでcoinbase報酬を出します。

// Subsidy は 報酬という意味
CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
{
    // nHeightは現在のブロック高.
    // nSubsidyHalvingIntervalは半減ブロック間隔 = 210000
    // ブロック高を半減ブロック間隔で割ることで半減回数を求めている.
    int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
    
    // 半減数の回数最大で64.それを超えたら報酬は0.
    if(halvings >= 64)
        return 0;
        
    // COIN定数は 100,000,000satoshi で,50 * COIN は50億satoshi
    // 初期報酬(nSubsidy) が 50億satoshi であることがわかる。
    CAmount nSubsidy = 50 * COIN;
    
    // 報酬は210000ブロックごとに半減.約4年
    // 右シフト演算子を使って報酬(nSubsidy)を割っている
    nSubsidy >>= halvings;
    return nSubsidy;
}

この後、nSubsidy と トランザクション手数料(nFees)を足したものがマイニングの報酬となります。