public override ConsensusCommand GetAEDPoSConsensusCommand()
            {
                // Provided pubkey can mine a block after TinyBlockMinimumInterval ms.
                var arrangedMiningTime =
                    MiningTimeArrangingService.ArrangeMiningTimeWithOffset(CurrentBlockTime,
                                                                           TinyBlockMinimumInterval);

                var roundStartTime           = CurrentRound.GetRoundStartTime();
                var currentTimeSlotStartTime = CurrentBlockTime < roundStartTime
                    ? roundStartTime.AddMilliseconds(-MiningInterval)
                    : CurrentRound.RoundNumber == 1
                        ? MinerInRound.ActualMiningTimes.First()
                        : MinerInRound.ExpectedMiningTime;

                var currentTimeSlotEndTime = currentTimeSlotStartTime.AddMilliseconds(MiningInterval);

                return(arrangedMiningTime > currentTimeSlotEndTime
                    ? new TerminateRoundCommandStrategy(CurrentRound, Pubkey, CurrentBlockTime, false)
                       .GetAEDPoSConsensusCommand()  // The arranged mining time already beyond the time slot.
                    : new ConsensusCommand
                {
                    Hint = new AElfConsensusHint {
                        Behaviour = AElfConsensusBehaviour.TinyBlock
                    }.ToByteString(),
                    ArrangedMiningTime = arrangedMiningTime,
                    MiningDueTime = currentTimeSlotEndTime,
                    LimitMillisecondsOfMiningBlock = IsLastTinyBlockOfCurrentSlot()
                            ? LastTinyBlockMiningLimit
                            : DefaultBlockMiningLimit
                });
            }
Exemplo n.º 2
0
            public override ConsensusCommand GetAEDPoSConsensusCommand()
            {
                var miningInterval = MiningInterval;
                var offset         =
                    _consensusBehaviour == AElfConsensusBehaviour.UpdateValue && Order == 1
                        ? miningInterval
                        : Order.Add(MinersCount).Sub(1).Mul(miningInterval);
                var arrangedMiningTime =
                    MiningTimeArrangingService.ArrangeMiningTimeWithOffset(CurrentBlockTime, offset);

                return(new ConsensusCommand
                {
                    Hint = new AElfConsensusHint {
                        Behaviour = _consensusBehaviour
                    }.ToByteString(),
                    ArrangedMiningTime = arrangedMiningTime,
                    MiningDueTime = arrangedMiningTime.AddMilliseconds(miningInterval),
                    LimitMillisecondsOfMiningBlock = DefaultBlockMiningLimit
                });
            }