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))); } }
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 ); } }
public static void AssertPreEvaluationBlocksEqual <T>( IPreEvaluationBlock <T> expected, IPreEvaluationBlock <T> actual ) where T : IAction, new() { AssertPreEvaluationBlockHeadersEqual(expected, actual); AssertBlockContentsEqual(expected, actual); }