示例#1
0
        public override IAccountStateDelta Execute(IActionContext context)
        {
            IActionContext ctx              = context;
            var            states           = ctx.PreviousStates;
            var            weeklyArenaState = new WeeklyArenaState(0);

            var rankingState = new RankingState(Ranking);

            if (ctx.Rehearsal)
            {
                states = states.SetState(RankingState.Address, MarkChanged);
                states = states.SetState(ShopState.Address, MarkChanged);
#pragma warning disable LAA1002
                states = TableSheets
                         .Aggregate(states, (current, pair) =>
                                    current.SetState(Addresses.TableSheet.Derive(pair.Key), MarkChanged));
                states = rankingState.RankingMap
                         .Aggregate(states, (current, pair) =>
                                    current.SetState(pair.Key, MarkChanged));
#pragma warning restore LAA1002
                states = states.SetState(weeklyArenaState.address, MarkChanged);
                states = states.SetState(GameConfigState.Address, MarkChanged);
                states = states.SetState(RedeemCodeState.Address, MarkChanged);
                states = states.SetState(AdminState.Address, MarkChanged);
                states = states.SetState(ActivatedAccountsState.Address, MarkChanged);
                states = states.SetState(GoldCurrencyState.Address, MarkChanged);
                states = states.SetState(Addresses.GoldDistribution, MarkChanged);
                foreach (var rawPending in PendingActivations)
                {
                    states = states.SetState(
                        new PendingActivationState((Bencodex.Types.Dictionary)rawPending).address,
                        MarkChanged
                        );
                }
                states = states.SetState(AuthorizedMinersState.Address, MarkChanged);
                states = states.SetState(CreditsState.Address, MarkChanged);
                return(states);
            }

            if (ctx.BlockIndex != 0)
            {
                return(states);
            }

#pragma warning disable LAA1002
            states = TableSheets
                     .Aggregate(states, (current, pair) =>
                                current.SetState(Addresses.TableSheet.Derive(pair.Key), pair.Value.Serialize()));
            states = rankingState.RankingMap
                     .Aggregate(states, (current, pair) =>
                                current.SetState(pair.Key, new RankingMapState(pair.Key).Serialize()));
#pragma warning restore LAA1002
            states = states
                     .SetState(weeklyArenaState.address, weeklyArenaState.Serialize())
                     .SetState(RankingState.Address, Ranking)
                     .SetState(ShopState.Address, Shop)
                     .SetState(GameConfigState.Address, GameConfig)
                     .SetState(RedeemCodeState.Address, RedeemCode)
                     .SetState(AdminState.Address, AdminAddress)
                     .SetState(ActivatedAccountsState.Address, ActivatedAccounts)
                     .SetState(GoldCurrencyState.Address, GoldCurrency)
                     .SetState(Addresses.GoldDistribution, GoldDistributions);

            if (!(AuthorizedMiners is null))
            {
                states = states.SetState(
                    AuthorizedMinersState.Address,
                    AuthorizedMiners
                    );
            }

            foreach (var rawPeding in PendingActivations)
            {
                states = states.SetState(
                    new PendingActivationState((Bencodex.Types.Dictionary)rawPeding).address,
                    rawPeding
                    );
            }

            if (!(Credits is null))
            {
                states = states.SetState(CreditsState.Address, Credits);
            }

            var currency = new GoldCurrencyState(GoldCurrency).Currency;
            states = states.MintAsset(GoldCurrencyState.Address, currency * 1000000000);
            return(states);
        }