Beispiel #1
0
        // Copied from BlockChain<T>.SetStates().
        private static void SetStates(
            Guid chainId,
            IStore store,
            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.ContainsStateRoot(block.StateRootHash))
            {
                HashDigest <SHA256>?prevStateRootHash = store.GetStateRootHash(block.PreviousHash);
                var totalDelta = GetTotalDelta(actionEvaluations, ToStateKey, ToFungibleAssetKey);
                stateStore.Commit(prevStateRootHash, totalDelta);
            }
        }