Fix sapling pool persistence and add subsidy/fees to getblock RPC
Lower SPROUT_VALUE_VERSION and SAPLING_VALUE_VERSION constants in chain.h from upstream Zcash values (1001400/1010100) to 1000000. When DragonX was rebranded from HUSH3, CLIENT_VERSION was reset from 3.10.5 to 1.0.0, falling below these thresholds. This caused nSaplingValue to silently skip serialization, so the sapling pool total reset to 0 on every node restart. Explorer nodes should reindex once after upgrading. Add subsidy and fees fields to the getblock RPC response so explorers can display the correct 3 DRGX block reward separately from fees, instead of showing the combined coinbase output as the reward.
This commit is contained in:
@@ -32,8 +32,12 @@ class CChainPower;
|
||||
#include <boost/foreach.hpp>
|
||||
|
||||
extern bool fZindex;
|
||||
static const int SPROUT_VALUE_VERSION = 1001400;
|
||||
static const int SAPLING_VALUE_VERSION = 1010100;
|
||||
// These version thresholds control whether nSproutValue/nSaplingValue are
|
||||
// serialized in the block index. They must be <= CLIENT_VERSION or the
|
||||
// values will never be persisted, causing nChainSaplingValue to reset
|
||||
// to 0 after node restart. DragonX CLIENT_VERSION is 1000150 (v1.0.1.50).
|
||||
static const int SPROUT_VALUE_VERSION = 1000000;
|
||||
static const int SAPLING_VALUE_VERSION = 1000000;
|
||||
extern int32_t ASSETCHAINS_LWMAPOS;
|
||||
extern char SMART_CHAIN_SYMBOL[65];
|
||||
extern uint64_t ASSETCHAINS_NOTARY_PAY[];
|
||||
|
||||
@@ -322,6 +322,15 @@ UniValue blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool tx
|
||||
result.push_back(Pair("anchor", blockindex->hashFinalSproutRoot.GetHex()));
|
||||
result.push_back(Pair("blocktype", "mined"));
|
||||
|
||||
// Report block subsidy and fees separately so explorers don't have to
|
||||
// reimplement the reward schedule to display them.
|
||||
CAmount nSubsidy = GetBlockSubsidy(blockindex->GetHeight(), Params().GetConsensus());
|
||||
CAmount nCoinbase = block.vtx[0].GetValueOut();
|
||||
CAmount nFees = nCoinbase - nSubsidy;
|
||||
if (nFees < 0) nFees = 0; // block 1 has premine, avoid negative
|
||||
result.push_back(Pair("subsidy", ValueFromAmount(nSubsidy)));
|
||||
result.push_back(Pair("fees", ValueFromAmount(nFees)));
|
||||
|
||||
UniValue valuePools(UniValue::VARR);
|
||||
valuePools.push_back(ValuePoolDesc("sapling", blockindex->nChainSaplingValue, blockindex->nSaplingValue));
|
||||
result.push_back(Pair("valuePools", valuePools));
|
||||
|
||||
Reference in New Issue
Block a user