Altcoin-Development

為什麼更改 MAX_MONEY 不會更改最大硬幣數?

  • April 11, 2018

我已更改MAX_MONEY以減少在我的山寨幣中發行的硬幣數量,但它不起作用。

為什麼?

儘管有這個名字,但這個MAX_MONEY常數並不用於確定硬幣的最大總數。相反,它僅用於完整性檢查:任何大於 的交易輸出MAX_MONEY都會被自動拒絕為無效。他們只是將這個新常數設置為等於比特幣的最終最大數量,因為這是一個絕對不應被任何輸出超過的值。這是修復早期錯誤的一部分,該錯誤僅檢查交易的所有輸出的總和,導致加法可能溢出。

區塊補貼(又名獎勵)在 中的 GetBlockSubsidy函式中計算validation.cpp

CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
{
   int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
   // Force block reward to zero when right shift is undefined.
   if (halvings >= 64)
       return 0;

   CAmount nSubsidy = 50 * COIN;
   // Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.
   nSubsidy >>= halvings;
   return nSubsidy;
}

在這裡你可以看到 50 個硬幣的初始塊獎勵是硬編碼的。減半間隔consensusParams.nSubsidyHalvingInterval在,和chainparams.cpp的建構子中分別設置(各自的預設值為 210000、210000、150)。注意不出現。CMainParams``CTestNetParams``CRegTestParams``MAX_MONEY

因此,為了改變你的硬幣的總貨幣供應量,你需要做一些數學來決定初始塊獎勵和減半間隔應該是多少,並相應地修改它們。如果您希望通過任何其他機制調整獎勵,而不是“繼續減半直到獎勵達到零”,那麼您將不得不重寫該 GetBlockSubsidy函式。(並且您應該更改MAX_MONEY為任何交易輸出都不應超過的適當值。)

引用自:https://bitcoin.stackexchange.com/questions/36612