Exemplo n.º 1
0
            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 arrangedMiningTime =
                    MiningTimeArrangingService.ArrangeMiningTimeBasedOnOffset(CurrentBlockTime,
                                                                              TinyBlockMinimumInterval);

                var miningDueTime = MinerInRound.ActualMiningTimes
                                    .OrderBy(t => t)
                                    .Last()
                                    .AddMilliseconds(MiningInterval);

                return(arrangedMiningTime > miningDueTime
                    ? new TerminateRoundCommandStrategy(CurrentRound, Pubkey, CurrentBlockTime, false)
                       .GetAEDPoSConsensusCommand()
                    : new ConsensusCommand
                {
                    Hint = new AElfConsensusHint {
                        Behaviour = AElfConsensusBehaviour.TinyBlock
                    }.ToByteString(),
                    ArrangedMiningTime = arrangedMiningTime,
                    MiningDueTime = miningDueTime,
                    LimitMillisecondsOfMiningBlock = IsLastTinyBlockOfCurrentSlot()
                            ? LastTinyBlockMiningLimit
                            : DefaultBlockMiningLimit
                });
            }
Exemplo n.º 3
0
            public override ConsensusCommand GetAEDPoSConsensusCommand()
            {
                var arrangedMiningTime =
                    MiningTimeArrangingService.ArrangeExtraBlockMiningTime(CurrentRound, Pubkey, CurrentBlockTime);

                return(new ConsensusCommand
                {
                    Hint = new AElfConsensusHint
                    {
                        Behaviour = _isNewTerm ? AElfConsensusBehaviour.NextTerm : AElfConsensusBehaviour.NextRound
                    }
                    .ToByteString(),
                    ArrangedMiningTime = arrangedMiningTime,
                    MiningDueTime = arrangedMiningTime.AddMilliseconds(MiningInterval),
                    LimitMillisecondsOfMiningBlock =
                        _isNewTerm ? LastBlockOfCurrentTermMiningLimit : DefaultBlockMiningLimit
                });
            }
            public override ConsensusCommand GetAEDPoSConsensusCommand()
            {
                var arrangedMiningTime =
                    MiningTimeArrangingService.ArrangeNormalBlockMiningTime(CurrentRound, Pubkey, CurrentBlockTime);

                return(new ConsensusCommand
                {
                    Hint = new AElfConsensusHint
                    {
                        Behaviour = AElfConsensusBehaviour.UpdateValue,
                        RoundId = CurrentRound.RoundId,
                        PreviousRoundId = _previousRoundId
                    }.ToByteString(),
                    ArrangedMiningTime = arrangedMiningTime,
                    // Cancel mining after time slot of current miner because of the task queue.
                    MiningDueTime = CurrentRound.GetExpectedMiningTime(Pubkey).AddMilliseconds(MiningInterval),
                    LimitMillisecondsOfMiningBlock = DefaultBlockMiningLimit
                });
            }
Exemplo n.º 5
0
            public override ConsensusCommand GetAEDPoSConsensusCommand()
            {
                var miningInterval = MiningInterval;
                var offset         =
                    _consensusBehaviour == AElfConsensusBehaviour.UpdateValueWithoutPreviousInValue && Order == 1
                        ? miningInterval
                        : Order.Add(MinersCount).Sub(1).Mul(miningInterval);
                var arrangedMiningTime = MiningTimeArrangingService.ArrangeMiningTimeBasedOnOffset(CurrentBlockTime, offset);

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