// Copied from BlockChain<T>.SetStates(). private static void SetStates( Guid chainId, IStateStore stateStore, Block <NCAction> block, IReadOnlyList <ActionEvaluation> actionEvaluations, bool buildStateReferences ) { IImmutableSet <Address> stateUpdatedAddresses = actionEvaluations .SelectMany(a => a.OutputStates.StateUpdatedAddresses) .ToImmutableHashSet(); IImmutableSet <(Address, Currency)> updatedFungibleAssets = actionEvaluations .SelectMany(a => a.OutputStates.UpdatedFungibleAssets .SelectMany(kv => kv.Value.Select(c => (kv.Key, c)))) .ToImmutableHashSet(); if (!stateStore.ContainsBlockStates(block.Hash)) { var totalDelta = GetTotalDelta(actionEvaluations, ToStateKey, ToFungibleAssetKey); stateStore.SetStates(block, totalDelta); } if (buildStateReferences && stateStore is IBlockStatesStore blockStatesStore) { IImmutableSet <string> stateUpdatedKeys = stateUpdatedAddresses .Select(ToStateKey) .ToImmutableHashSet(); IImmutableSet <string> assetUpdatedKeys = updatedFungibleAssets .Select(ToFungibleAssetKey) .ToImmutableHashSet(); IImmutableSet <string> updatedKeys = stateUpdatedKeys.Union(assetUpdatedKeys); blockStatesStore.StoreStateReference(chainId, updatedKeys, block.Hash, block.Index); } }
public bool ContainsBlockStates(BlockHash blockHash) { Log(nameof(ContainsBlockStates), blockHash); return(_stateStore.ContainsBlockStates(blockHash)); }
public bool ContainsBlockStates(HashDigest <SHA256> blockHash) { Log(nameof(ContainsBlockStates), blockHash); return(_stateStore.ContainsBlockStates(blockHash)); }