Fix DragonX P2P port, block subsidy, blocktime, and difficulty params
- chainparams.cpp: Correct P2P port from 18030 to 21768 - hush_utils.h: Use CRC-based network magic instead of HUSH_MAGIC shortcut so new standalone binary matches existing network nodes - hush_utils.h: Remove DragonX-specific hush_block_subsidy() call, use generic ASSETCHAINS_HALVING logic consistent with mainnet - hush_utils.h: Fix P2P port override so -port flag works correctly - main.cpp: Remove blocktime halving code (150s→75s at z2zheight) that does not apply to DragonX's fixed 36s blocktime - pow.cpp: Use params.AveragingWindowTimespan() (17*36=612) instead of standalone AveragingWindowTimespan() which returns HUSH3's 17*75=1275
This commit is contained in:
@@ -520,7 +520,7 @@ void *chainparams_commandline() {
|
||||
if ( SMART_CHAIN_SYMBOL[0] != 0 )
|
||||
{
|
||||
if (strcmp(SMART_CHAIN_SYMBOL,"DRAGONX") == 0) {
|
||||
ASSETCHAINS_P2PPORT = 18030;
|
||||
ASSETCHAINS_P2PPORT = 21768;
|
||||
}
|
||||
|
||||
if ( ASSETCHAINS_BLOCKTIME != 60 )
|
||||
|
||||
@@ -1476,7 +1476,10 @@ uint32_t hush_smartmagic(char *symbol,uint64_t supply,uint8_t *extraptr,int32_t
|
||||
//TODO: why is this needed?
|
||||
const bool isdragonx = strncmp(symbol, "DRAGONX",7) == 0 ? true : false;
|
||||
if(isdragonx) {
|
||||
return HUSH_MAGIC;
|
||||
// Use the same CRC-based magic as all other chains so that the
|
||||
// network magic bytes match between old wrapper-launched nodes
|
||||
// and the new standalone binary.
|
||||
return(calc_crc32(crc0,buf,len));
|
||||
} else {
|
||||
return(calc_crc32(crc0,buf,len));
|
||||
}
|
||||
@@ -1650,13 +1653,11 @@ uint64_t hush_sc_block_subsidy(int nHeight)
|
||||
if(fDebug) {
|
||||
fprintf(stderr,"%s: subsidy=%ld at height=%d with ASSETCHAINS_HALVING[curEra]=%lu\n",__func__,subsidy,nHeight, ASSETCHAINS_HALVING[curEra]);
|
||||
}
|
||||
if ( ASSETCHAINS_HALVING[curEra] != 0 )
|
||||
if (ASSETCHAINS_HALVING[curEra] != 0)
|
||||
{
|
||||
if (isdragonx) {
|
||||
subsidy = hush_block_subsidy(nHeight);
|
||||
if(fDebug)
|
||||
fprintf(stderr,"%s: DRAGONX subsidy=%ld at height=%d\n",__func__,subsidy,nHeight);
|
||||
} else if ( (numhalvings = ((nHeight - nStart) / ASSETCHAINS_HALVING[curEra])) > 0 ) {
|
||||
// hush_block_subsidy() is HUSH3-specific with hardcoded reward schedule
|
||||
// DragonX uses generic halving logic with ASSETCHAINS_REWARD/ASSETCHAINS_HALVING
|
||||
if ( (numhalvings = ((nHeight - nStart) / ASSETCHAINS_HALVING[curEra])) > 0 ) {
|
||||
// The code below is not compatible with DRAGONX mainnet
|
||||
if ( ASSETCHAINS_DECAY[curEra] == 0 ) {
|
||||
subsidy >>= numhalvings;
|
||||
@@ -2349,13 +2350,14 @@ void hush_args(char *argv0)
|
||||
fprintf(stderr,"MAX_MONEY %llu %.8f\n",(long long)MAX_MONEY,(double)MAX_MONEY/SATOSHIDEN);
|
||||
//printf("baseid.%d MAX_MONEY.%s %.8f\n",baseid,SMART_CHAIN_SYMBOL,(double)MAX_MONEY/SATOSHIDEN);
|
||||
uint16_t tmpport = hush_port(SMART_CHAIN_SYMBOL,ASSETCHAINS_SUPPLY,&ASSETCHAINS_MAGIC,extraptr,extralen);
|
||||
// DragonX P2P port is 21768 (RPC=21769). The HUSH_MAGIC shortcut in
|
||||
// hush_smartmagic() produces 18030 which is wrong, so override here.
|
||||
if(isdragonx) {
|
||||
tmpport = 21768;
|
||||
}
|
||||
if ( GetArg("-port",0) != 0 )
|
||||
{
|
||||
ASSETCHAINS_P2PPORT = GetArg("-port",0);
|
||||
if(isdragonx) {
|
||||
fprintf(stderr,"set DRAGONX p2pport.%u\n",ASSETCHAINS_P2PPORT);
|
||||
ASSETCHAINS_P2PPORT = 18030;
|
||||
}
|
||||
if(fDebug)
|
||||
fprintf(stderr,"set p2pport.%u\n",ASSETCHAINS_P2PPORT);
|
||||
} else ASSETCHAINS_P2PPORT = tmpport;
|
||||
|
||||
34
src/main.cpp
34
src/main.cpp
@@ -3062,15 +3062,8 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex
|
||||
// move best block pointer to prevout block
|
||||
view.SetBestBlock(pindex->pprev->GetBlockHash());
|
||||
|
||||
// If disconnecting a block brings us back before our blocktime halving height, go back
|
||||
// to our original blocktime so our DAA has the correct target for that height
|
||||
// DragonX has a fixed 36s blocktime - no blocktime halving needed
|
||||
int nHeight = pindex->pprev->GetHeight();
|
||||
nFirstHalvingHeight = GetArg("-z2zheight",340000);
|
||||
if (isdragonx && (ASSETCHAINS_BLOCKTIME != 150) && (nHeight < nFirstHalvingHeight)) {
|
||||
LogPrintf("%s: Setting blocktime to 150s at height %d!\n",__func__,nHeight);
|
||||
ASSETCHAINS_BLOCKTIME = 150;
|
||||
hush_changeblocktime();
|
||||
}
|
||||
|
||||
|
||||
if (pfClean) {
|
||||
@@ -3154,11 +3147,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
||||
ASSETCHAINS_PRIVATE = 1;
|
||||
}
|
||||
}
|
||||
if (isdragonx && (ASSETCHAINS_BLOCKTIME != 75) && (chainActive.Height() >= nFirstHalvingHeight)) {
|
||||
LogPrintf("%s: Blocktime halving to 75s at height %d!\n",__func__,pindex->GetHeight());
|
||||
ASSETCHAINS_BLOCKTIME = 75;
|
||||
hush_changeblocktime();
|
||||
}
|
||||
// DragonX has a fixed 36s blocktime - no blocktime halving needed
|
||||
|
||||
bool fExpensiveChecks = true;
|
||||
if (fCheckpointsEnabled) {
|
||||
@@ -3761,14 +3750,7 @@ void static UpdateTip(CBlockIndex *pindexNew) {
|
||||
progress = (longestchain > 0 ) ? (double) chainActive.Height() / longestchain : 1.0;
|
||||
}
|
||||
|
||||
nFirstHalvingHeight = GetArg("-z2zheight",340000);
|
||||
if(isdragonx) {
|
||||
if (ASSETCHAINS_BLOCKTIME != 75 && (chainActive.Height() >= nFirstHalvingHeight)) {
|
||||
LogPrintf("%s: Blocktime halving to 75s at height %d!\n",__func__,chainActive.Height());
|
||||
ASSETCHAINS_BLOCKTIME = 75;
|
||||
hush_changeblocktime();
|
||||
}
|
||||
}
|
||||
// DragonX has a fixed 36s blocktime - no blocktime halving needed
|
||||
|
||||
LogPrintf("%s: new best=%s height=%d log2_work=%.8g tx=%lu date=%s progress=%f cache=%.1fMiB(%utx)\n", __func__,
|
||||
chainActive.LastTip()->GetBlockHash().ToString(), chainActive.Height(),
|
||||
@@ -5113,15 +5095,7 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
|
||||
// Check Proof-of-Work difficulty
|
||||
if (isdragonx) {
|
||||
|
||||
// Difficulty (nBits) relies on the current blocktime of this block
|
||||
if ((ASSETCHAINS_BLOCKTIME != 75) && (nHeight >= nFirstHalvingHeight)) {
|
||||
LogPrintf("%s: Blocktime halving to 75s at height %d!\n",__func__,nHeight);
|
||||
ASSETCHAINS_BLOCKTIME = 75;
|
||||
hush_changeblocktime();
|
||||
}
|
||||
// The change of blocktime from 150s to 75s caused incorrect AWT of 34 blocks instead of 17
|
||||
// caused by the fact that Difficulty Adjustment Algorithms do not take into account blocktime
|
||||
// changing at run-time, from Consensus::Params being a const struct
|
||||
// DragonX has a fixed 36s blocktime - no blocktime halving needed
|
||||
unsigned int nNextWork = GetNextWorkRequired(pindexPrev, &block, consensusParams);
|
||||
|
||||
if (fDebug) {
|
||||
|
||||
@@ -533,9 +533,9 @@ unsigned int CalculateNextWorkRequired(arith_uint256 bnAvg,
|
||||
int64_t nActualTimespan = nLastBlockTime - nFirstBlockTime;
|
||||
LogPrint("pow", " nActualTimespan = %d before dampening\n", nActualTimespan);
|
||||
|
||||
bool isdragonx = strncmp(SMART_CHAIN_SYMBOL, "DRAGONX",7) == 0 ? true : false;
|
||||
// If this is DRAGONX, use AWT function defined above, else use the one in params
|
||||
int64_t AWT = isdragonx ? AveragingWindowTimespan() : params.AveragingWindowTimespan();
|
||||
// DragonX uses params.AveragingWindowTimespan() = nPowAveragingWindow * nPowTargetSpacing = 17 * 36 = 612
|
||||
// The standalone AveragingWindowTimespan() returns 1275 which is HUSH3-specific (17 * 75s)
|
||||
int64_t AWT = params.AveragingWindowTimespan();
|
||||
|
||||
nActualTimespan = AWT + (nActualTimespan - AWT)/4;
|
||||
LogPrint("pow", " nActualTimespan = %d before bounds\n", nActualTimespan);
|
||||
|
||||
Reference in New Issue
Block a user