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); }