From 5297eaf0f67900b52b9e07a2d77fbf05ab98378b Mon Sep 17 00:00:00 2001 From: Yang Chun Ung Date: Mon, 13 May 2024 13:17:04 +0900 Subject: [PATCH 1/2] Add GetAvatarState flags for reduce getState call --- Lib9c/Module/AvatarModule.cs | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/Lib9c/Module/AvatarModule.cs b/Lib9c/Module/AvatarModule.cs index d86422835..0eedc7966 100644 --- a/Lib9c/Module/AvatarModule.cs +++ b/Lib9c/Module/AvatarModule.cs @@ -16,8 +16,13 @@ namespace Nekoyume.Module { public static class AvatarModule { - // This method automatically determines if given IValue is a legacy avatar state or not. - public static AvatarState GetAvatarState(this IWorldState worldState, Address address) + // TODO change flags set default false + public static AvatarState GetAvatarState( + this IWorldState worldState, + Address address, + bool getInventory = true, + bool getWorldInformation = true, + bool getQuestList = true) { var account = worldState.GetAccountState(Addresses.Avatar); var serializedAvatarRaw = account.GetState(address); @@ -64,9 +69,20 @@ public static AvatarState GetAvatarState(this IWorldState worldState, Address ad try { - avatarState.inventory = GetInventoryV2(worldState, address); - avatarState.worldInformation = GetWorldInformationV2(worldState, address); - avatarState.questList = GetQuestListV2(worldState, address); + if (getInventory) + { + avatarState.inventory = GetInventoryV2(worldState, address); + } + + if (getWorldInformation) + { + avatarState.worldInformation = GetWorldInformationV2(worldState, address); + } + + if (getQuestList) + { + avatarState.questList = GetQuestListV2(worldState, address); + } } catch (KeyNotFoundException) { From df33592cdbadf682d836a32df48584ebbd7fab80 Mon Sep 17 00:00:00 2001 From: Yang Chun Ung Date: Mon, 13 May 2024 13:17:43 +0900 Subject: [PATCH 2/2] Use conditional state in ClaimItems --- .Lib9c.Tests/Action/ClaimItemsTest.cs | 4 +++- Lib9c/Action/ClaimItems.cs | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.Lib9c.Tests/Action/ClaimItemsTest.cs b/.Lib9c.Tests/Action/ClaimItemsTest.cs index b41bd8919..a543f1f1b 100644 --- a/.Lib9c.Tests/Action/ClaimItemsTest.cs +++ b/.Lib9c.Tests/Action/ClaimItemsTest.cs @@ -182,7 +182,9 @@ public void Execute(string memo) RandomSeed = 0, }); - var avatarState = states.GetAvatarState(recipientAvatarAddress); + var avatarState = states.GetAvatarState(recipientAvatarAddress, getQuestList: false, getWorldInformation: false); + Assert.Null(avatarState.questList); + Assert.Null(avatarState.worldInformation); var mail = Assert.IsType(avatarState.mailBox.Single()); if (string.IsNullOrEmpty(memo)) { diff --git a/Lib9c/Action/ClaimItems.cs b/Lib9c/Action/ClaimItems.cs index 6ad0324f8..1019c2492 100644 --- a/Lib9c/Action/ClaimItems.cs +++ b/Lib9c/Action/ClaimItems.cs @@ -99,7 +99,7 @@ public override IWorld Execute(IActionContext context) foreach (var (avatarAddress, fungibleAssetValues) in ClaimData) { - var avatarState = states.GetAvatarState(avatarAddress) + var avatarState = states.GetAvatarState(avatarAddress, getQuestList: false, getWorldInformation: false) ?? throw new FailedLoadStateException( ActionTypeText, GetSignerAndOtherAddressesHex(context, avatarAddress), @@ -160,7 +160,7 @@ public override IWorld Execute(IActionContext context) mailBox.Add(mail); mailBox.CleanUp(); avatarState.mailBox = mailBox; - states = states.SetAvatarState(avatarAddress, avatarState); + states = states.SetAvatarState(avatarAddress, avatarState, setWorldInformation: false, setQuestList: false); } return states;