Block

關於重定向系統比特幣的問題,將硬編碼塊添加到現有區塊鏈

  • August 8, 2017

標準值

   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;

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