Exemplo n.º 1
0
        // 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);
            }
        }
Exemplo n.º 2
0
 public bool ContainsBlockStates(BlockHash blockHash)
 {
     Log(nameof(ContainsBlockStates), blockHash);
     return(_stateStore.ContainsBlockStates(blockHash));
 }
Exemplo n.º 3
0
 public bool ContainsBlockStates(HashDigest <SHA256> blockHash)
 {
     Log(nameof(ContainsBlockStates), blockHash);
     return(_stateStore.ContainsBlockStates(blockHash));
 }