美文网首页
Burstcoin 的 base target

Burstcoin 的 base target

作者: Ashton | 来源:发表于2019-08-10 21:31 被阅读0次

    按 Burstcoin 的设计,每 4 分钟出一个块,那么如果出块更快或更慢怎么办呢?就靠这个 base target 去调整啦。Base target 的值越大,难度越低,出块就越快。这个在原理上和比特币以太坊是类似的。

    1. 对于创世区块,会有一个难度的初始值
      if (block.getId() == Genesis.GENESIS_BLOCK_ID && block.getPreviousBlockId() == 0) {
          block.setBaseTarget(Constants.INITIAL_BASE_TARGET);
    
    1. 对于头 2700 个块,计算每个块的base target 时,先取出前 4 个块的 base target 平均值。
          Block itBlock = previousBlock;
          BigInteger avgBaseTarget = BigInteger.valueOf(itBlock.getBaseTarget());
          do {
            itBlock = downloadCache.getBlock(itBlock.getPreviousBlockId());
            avgBaseTarget = avgBaseTarget.add(BigInteger.valueOf(itBlock.getBaseTarget()));
          } while (itBlock.getHeight() > block.getHeight() - 4);
          avgBaseTarget = avgBaseTarget.divide(BigInteger.valueOf(4));
    
    1. 在算出当前块与前面第 4 个块的出块时间差,出 4 个块的理想时间值是 4 * 4 * 60 = 960s,如果实际时间差大于这个值,则应该增大 base target 以减小难度,如果实际时间差小于这个值,则应该减小 base target 以增大难度。
          long curBaseTarget = avgBaseTarget.longValue();
          long newBaseTarget = BigInteger.valueOf(curBaseTarget).multiply(BigInteger.valueOf(difTime))
              .divide(BigInteger.valueOf(240L * 4)).longValue();
    

    代码中的 newBaseTarget 就是调整过后的 base target。

    相关文章

      网友评论

          本文标题:Burstcoin 的 base target

          本文链接:https://www.haomeiwen.com/subject/nerdjctx.html