Block
關於重定向系統比特幣的問題,將硬編碼塊添加到現有區塊鏈
標準值
if (nActualTimespan < params.nPowTargetTimespan/4) nActualTimespan = params.nPowTargetTimespan/4; if (nActualTimespan > params.nPowTargetTimespan*4) nActualTimespan = params.nPowTargetTimespan*4;
但如果我使用
if (nActualTimespan < params.nPowTargetTimespan/4) nActualTimespan = params.nPowTargetTimespan/4; if (nActualTimespan > params.nPowTargetTimespan*2) nActualTimespan = params.nPowTargetTimespan*2;
它是有效的還是會破壞差異系統?
我可以為 diff 添加什麼值不是增長很快,但下降速度比增長快,因為它對於快速的塊時間更穩定。
區塊時間的設置是
consensus.nPowTargetTimespan = 10 * 60; // 10 min consensus.nPowTargetSpacing = 5 * 60; //5 min
還有一個問題
我嘗試使用為 testnet 創建的存在函式 low diff 塊,僅用於高度為 2001 的塊。以前存在的區塊是 2000,現在是區塊鏈中的最新區塊。
if ((pindexLast->nHeight+1) % params.DifficultyAdjustmentInterval() != 0) { if(pindexLast->nHeight+1 == 2001) { // Special difficulty rule for testnet: // If the new block's timestamp is more than 2* 10 minutes // then allow mining of a min-difficulty block. if (pblock->GetBlockTime() > pindexLast->GetBlockTime() + params.nPowTargetSpacing*2) return nProofOfWorkLimit; else { // Return the last non-special-min-difficulty-rules-block const CBlockIndex* pindex = pindexLast; while (pindex->pprev && pindex->nHeight % params.DifficultyAdjustmentInterval() != 0 && pindex->nBits == nProofOfWorkLimit) pindex = pindex->pprev; return pindex->nBits; } } return pindexLast->nBits; } else { if (params.fPowAllowMinDifficultyBlocks) { // Special difficulty rule for testnet: // If the new block's timestamp is more than 2* 10 minutes // then allow mining of a min-difficulty block. if (pblock->GetBlockTime() > pindexLast->GetBlockTime() + params.nPowTargetSpacing*2) return nProofOfWorkLimit; else { // Return the last non-special-min-difficulty-rules-block const CBlockIndex* pindex = pindexLast; while (pindex->pprev && pindex->nHeight % params.DifficultyAdjustmentInterval() != 0 && pindex->nBits == nProofOfWorkLimit) pindex = pindex->pprev; return pindex->nBits; } } return pindexLast->nBits; }
並在 2001 年之後對新塊使用新規則重定向,並接受具有舊重定向規則的舊塊。
if(pindexLast->nHeight+1 > 2001) { if (nActualTimespan < params.nPowTargetTimespan/4) nActualTimespan = params.nPowTargetTimespan/4; if (nActualTimespan > params.nPowTargetTimespan*2) nActualTimespan = params.nPowTargetTimespan*2; } else { if (nActualTimespan < params.nPowTargetTimespan/4) nActualTimespan = params.nPowTargetTimespan/4; if (nActualTimespan > params.nPowTargetTimespan*4) nActualTimespan = params.nPowTargetTimespan*4; }
關於我要問的問題,這個解決方案是正確的並且會起作用,還是這個解決方案是錯誤的,最終是否存在另一種方法來做到這一點?
if (nActualTimespan < params.nPowTargetTimespan/4) nActualTimespan = params.nPowTargetTimespan/4; if (nActualTimespan > params.nPowTargetTimespan*2) nActualTimespan = params.nPowTargetTimespan*2;
這與您想要的相反。它會迅速增加難度,但會緩慢降低難度。
這就是您要執行的操作:
if (nActualTimespan < params.nPowTargetTimespan/2) nActualTimespan = params.nPowTargetTimespan/2; if (nActualTimespan > params.nPowTargetTimespan*4) nActualTimespan = params.nPowTargetTimespan*4;