Esempio n. 1
0
        public IReadOnlyList <ActionEvaluation> Evaluate(
            IPreEvaluationBlock <T> block,
            StateCompleterSet <T> stateCompleterSet)
        {
            ITrie?previousBlockStatesTrie = !(_trieGetter is null) && block.PreviousHash is { } h
                ? _trieGetter(h)
                : null;

            IAccountStateDelta previousStates =
                GetPreviousBlockOutputStates(block, stateCompleterSet);

            ImmutableList <ActionEvaluation> evaluations = EvaluateBlock(
                block: block,
                previousStates: previousStates,
                previousBlockStatesTrie: previousBlockStatesTrie).ToImmutableList();

            if (_policyBlockAction is null)
            {
                return(evaluations);
            }
            else
            {
                previousStates = evaluations.Count > 0
                    ? evaluations.Last().OutputStates
                    : previousStates;
                return(evaluations.Add(
                           EvaluatePolicyBlockAction(
                               block: block,
                               previousStates: previousStates,
                               previousBlockStatesTrie: previousBlockStatesTrie)));
            }
        }
Esempio n. 2
0
        public IReadOnlyList <ActionEvaluation> Evaluate(
            IPreEvaluationBlock <T> block,
            StateCompleterSet <T> stateCompleterSet)
        {
            _logger.Debug(
                "Evaluating actions in the block #{BlockIndex} " +
                "pre-evaluation hash: {PreEvaluationHash}...",
                block.Index,
                ByteUtil.Hex(block.PreEvaluationHash)
                );
            DateTimeOffset evaluateActionStarted = DateTimeOffset.Now;

            try
            {
                ITrie?previousBlockStatesTrie =
                    !(_trieGetter is null) && block.PreviousHash is { } h
                    ? _trieGetter(h)
                    : null;

                IAccountStateDelta previousStates =
                    GetPreviousBlockOutputStates(block, stateCompleterSet);

                ImmutableList <ActionEvaluation> evaluations = EvaluateBlock(
                    block: block,
                    previousStates: previousStates,
                    previousBlockStatesTrie: previousBlockStatesTrie).ToImmutableList();

                if (_policyBlockAction is null)
                {
                    return(evaluations);
                }
                else
                {
                    previousStates = evaluations.Count > 0
                        ? evaluations.Last().OutputStates
                        : previousStates;
                    return(evaluations.Add(
                               EvaluatePolicyBlockAction(
                                   block: block,
                                   previousStates: previousStates,
                                   previousBlockStatesTrie: previousBlockStatesTrie
                                   )
                               ));
                }
            }
            finally
            {
                TimeSpan evalDuration = DateTimeOffset.Now - evaluateActionStarted;
                _logger
                .ForContext("Tag", "Metric")
                .Debug(
                    "Actions in {TxCount} transactions for block #{BlockIndex} " +
                    "pre-evaluation hash: {PreEvaluationHash} evaluated in {DurationMs:F0}ms.",
                    block.Transactions.Count,
                    block.Index,
                    ByteUtil.Hex(block.PreEvaluationHash),
                    evalDuration.TotalMilliseconds
                    );
            }
        }
Esempio n. 3
0
 public static void AssertPreEvaluationBlocksEqual <T>(
     IPreEvaluationBlock <T> expected,
     IPreEvaluationBlock <T> actual
     )
     where T : IAction, new()
 {
     AssertPreEvaluationBlockHeadersEqual(expected, actual);
     AssertBlockContentsEqual(expected, actual);
 }