Altcoin-Development
為什麼更改 MAX_MONEY 不會更改最大硬幣數?
我已更改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
為任何交易輸出都不應超過的適當值。)