From a570bc7e85177efc4445e0c713a68ed05388a090 Mon Sep 17 00:00:00 2001 From: Yang Chun Ung Date: Fri, 20 Dec 2024 17:41:01 +0900 Subject: [PATCH] Use StateRootHash api instead of block hash --- .../Assets/_Scripts/Blockchain/ActionHandler.cs | 2 +- nekoyume/Assets/_Scripts/Blockchain/RPCAgent.cs | 1 + .../_Scripts/Extensions/GetStateExtensions.cs | 6 ++++-- nekoyume/Assets/_Scripts/State/States.cs | 17 +++++++++-------- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/nekoyume/Assets/_Scripts/Blockchain/ActionHandler.cs b/nekoyume/Assets/_Scripts/Blockchain/ActionHandler.cs index 38c4be439d4..ef4b41f4024 100644 --- a/nekoyume/Assets/_Scripts/Blockchain/ActionHandler.cs +++ b/nekoyume/Assets/_Scripts/Blockchain/ActionHandler.cs @@ -116,7 +116,7 @@ protected GoldBalanceState GetGoldBalanceState(ActionEvaluation evaluation } var sheetStates = await agent.GetStateBulkAsync( - ReservedAddresses.LegacyAccount, sheetAddrArr); + agent.BlockTipStateRootHash, ReservedAddresses.LegacyAccount, sheetAddrArr); var stakeRegularFixedRewardSheet = new StakeRegularFixedRewardSheet(); stakeRegularFixedRewardSheet.Set( sheetStates[sheetAddrArr[0]].ToDotnetString()); diff --git a/nekoyume/Assets/_Scripts/Blockchain/RPCAgent.cs b/nekoyume/Assets/_Scripts/Blockchain/RPCAgent.cs index 513dcae8a73..e3094754b5c 100644 --- a/nekoyume/Assets/_Scripts/Blockchain/RPCAgent.cs +++ b/nekoyume/Assets/_Scripts/Blockchain/RPCAgent.cs @@ -609,6 +609,7 @@ private AvatarState ResolveAvatarState(byte[] raw) public async Task> GetStateBulkAsync(Address accountAddress, IEnumerable
addressList) { + throw new NotImplementedException(); var raw = await _service.GetBulkStateByBlockHash( BlockTipHash.ToByteArray(), diff --git a/nekoyume/Assets/_Scripts/Extensions/GetStateExtensions.cs b/nekoyume/Assets/_Scripts/Extensions/GetStateExtensions.cs index e50e81e9548..223f199d860 100644 --- a/nekoyume/Assets/_Scripts/Extensions/GetStateExtensions.cs +++ b/nekoyume/Assets/_Scripts/Extensions/GetStateExtensions.cs @@ -29,6 +29,7 @@ public static class GetStateExtensions ItemSlotState.DeriveAddress(avatarAddress, BattleType.Raid) }; var itemBulk = await agent.GetStateBulkAsync( + agent.BlockTipStateRootHash, ReservedAddresses.LegacyAccount, itemAddresses); var itemSlotStates = new List(); @@ -47,6 +48,7 @@ public static class GetStateExtensions RuneSlotState.DeriveAddress(avatarAddress, BattleType.Raid) }; var runeBulk = await Game.Game.instance.Agent.GetStateBulkAsync( + Game.Game.instance.Agent.BlockTipStateRootHash, ReservedAddresses.LegacyAccount, runeAddresses); var runeSlotStates = new List(); @@ -78,7 +80,7 @@ public static async Task GetAllCombinationSlotStateAsyn { combinationSlotAddresses.Add(CombinationSlotState.DeriveAddress(avatarAddress, i)); } - var bulkStates = await agent.GetStateBulkAsync(ReservedAddresses.LegacyAccount, combinationSlotAddresses); + var bulkStates = await agent.GetStateBulkAsync(agent.BlockTipStateRootHash, ReservedAddresses.LegacyAccount, combinationSlotAddresses); allCombinationSlotState = new AllCombinationSlotState(); for (var i = 0; i < AvatarState.DefaultCombinationSlotCount; i++) @@ -142,7 +144,7 @@ public static async Task GetAllRuneStateAsync( var runeAddresses = runeListSheet.Values.Select(row => RuneState.DeriveAddress(avatarAddress, row.Id)); var stateBulk = await Game.Game.instance.Agent.GetStateBulkAsync( - ReservedAddresses.LegacyAccount, runeAddresses); + Game.Game.instance.Agent.BlockTipStateRootHash, ReservedAddresses.LegacyAccount, runeAddresses); foreach (var runeSerialized in stateBulk.Values.OfType()) { allRuneState.AddRuneState(new RuneState(runeSerialized)); diff --git a/nekoyume/Assets/_Scripts/State/States.cs b/nekoyume/Assets/_Scripts/State/States.cs index 94326c247e6..975d4132e24 100644 --- a/nekoyume/Assets/_Scripts/State/States.cs +++ b/nekoyume/Assets/_Scripts/State/States.cs @@ -71,7 +71,7 @@ public class States public FungibleAssetValue CrystalBalance { get; private set; } public AllRuneState AllRuneState { get; private set; } - + public AllCombinationSlotState AllCombinationSlotState { get; private set; } public readonly ConcurrentDictionary> @@ -86,12 +86,12 @@ public readonly ConcurrentDictionary> private class Workshop { private readonly ConcurrentDictionary _states = new(); - + public void UpdateCombinationSlotState(int index, CombinationSlotState state) { _states[index] = state; } - + /// /// If you want to update the state, use . /// @@ -216,7 +216,7 @@ public void SetAllRuneState(AllRuneState allRuneState) { AllRuneState = allRuneState; } - + private void SetAllCombinationSlotState(Address avatarAddress, AllCombinationSlotState allCombinationSlotState) { LocalLayer.Instance.InitializeCombinationSlots(allCombinationSlotState); @@ -251,7 +251,7 @@ public async UniTask InitRuneSlotStates() RuneSlotState.DeriveAddress(avatarState.address, BattleType.Arena), RuneSlotState.DeriveAddress(avatarState.address, BattleType.Raid) }; - var stateBulk = await Game.Game.instance.Agent.GetStateBulkAsync(ReservedAddresses.LegacyAccount, addresses); + var stateBulk = await Game.Game.instance.Agent.GetStateBulkAsync(Game.Game.instance.Agent.BlockTipStateRootHash, ReservedAddresses.LegacyAccount, addresses); foreach (var value in stateBulk.Values) { if (value is List list) @@ -321,7 +321,7 @@ public async UniTask InitItemSlotStates() ItemSlotState.DeriveAddress(avatarState.address, BattleType.Arena), ItemSlotState.DeriveAddress(avatarState.address, BattleType.Raid) }; - var stateBulk = await agent.GetStateBulkAsync(ReservedAddresses.LegacyAccount, addresses); + var stateBulk = await agent.GetStateBulkAsync(agent.BlockTipStateRootHash, ReservedAddresses.LegacyAccount, addresses); foreach (var value in stateBulk.Values) { if (value is List list) @@ -359,7 +359,7 @@ private async UniTask InitItemSlotState(int slotIndex, AvatarState avatarState) ItemSlotState.DeriveAddress(avatarState.address, BattleType.Raid) }; - var stateBulk = await Game.Game.instance.Agent.GetStateBulkAsync(ReservedAddresses.LegacyAccount, addresses); + var stateBulk = await Game.Game.instance.Agent.GetStateBulkAsync(Game.Game.instance.Agent.BlockTipStateRootHash, ReservedAddresses.LegacyAccount, addresses); foreach (var value in stateBulk.Values) { if (value is List list) @@ -726,7 +726,7 @@ public IDictionary GetCombinationSlotState(AvatarStat { return !_slotStates.ContainsKey(avatarState.address) ? null : _slotStates[avatarState.address].States; } - + public void SetGameConfigState(GameConfigState state) { GameConfigState = state; @@ -782,6 +782,7 @@ public void UpdateHammerPointStates(IEnumerable recipeIds) .ToList(); var states = await Game.Game.instance.Agent.GetStateBulkAsync( + Game.Game.instance.Agent.BlockTipStateRootHash, ReservedAddresses.LegacyAccount, hammerPointStateAddresses.Select(tuple => tuple.Item1)); var joinedStates = states.Join(