From c3d0109a5b1265cd615c0d2bf910632b21d507ce Mon Sep 17 00:00:00 2001 From: Say Cheong Date: Wed, 10 Jan 2024 13:46:54 +0900 Subject: [PATCH 1/2] Added GetAccountState to IWorldState --- Libplanet.Action.Tests/Mocks/MockWorldState.cs | 9 +++++++++ Libplanet.Action/State/IWorldState.cs | 13 ++++++++++++- Libplanet.Action/State/World.cs | 3 +++ Libplanet.Action/State/WorldBaseState.cs | 14 ++++++++------ .../Queries/StateQueryTest.Mocks.cs | 5 +++++ 5 files changed, 37 insertions(+), 7 deletions(-) diff --git a/Libplanet.Action.Tests/Mocks/MockWorldState.cs b/Libplanet.Action.Tests/Mocks/MockWorldState.cs index 24968ec633b..eab8c0aeae5 100644 --- a/Libplanet.Action.Tests/Mocks/MockWorldState.cs +++ b/Libplanet.Action.Tests/Mocks/MockWorldState.cs @@ -45,6 +45,15 @@ public IAccount GetAccount(Address address) ? new HashDigest(stateRootNotNull) : null)); + public IAccountState GetAccountState(Address address) + => Legacy && address.Equals(ReservedAddresses.LegacyAccount) + ? new MockAccountState(_stateStore, Trie.Hash) + : new MockAccountState( + _stateStore, + Trie.Get(ToStateKey(address)) is { } stateRootNotNull + ? new HashDigest(stateRootNotNull) + : null); + public IWorldState SetAccountState(Address address, IAccount account) => Legacy && address.Equals(ReservedAddresses.LegacyAccount) ? new MockWorldState(_stateStore, account.Trie.Hash) diff --git a/Libplanet.Action/State/IWorldState.cs b/Libplanet.Action/State/IWorldState.cs index b3b7f3250fc..65d6e326d81 100644 --- a/Libplanet.Action/State/IWorldState.cs +++ b/Libplanet.Action/State/IWorldState.cs @@ -44,10 +44,21 @@ public interface IWorldState /// /// The referring /// the world to get its state. - /// The of the given . + /// The of the given . /// If it has never been set to any state it returns /// instead. [Pure] IAccount GetAccount(Address address); + + /// + /// Gets the of the given . + /// + /// The referring + /// the world to get its state. + /// The of the given . + /// If it has never been set to any state it returns + /// instead. + [Pure] + IAccountState GetAccountState(Address address); } } diff --git a/Libplanet.Action/State/World.cs b/Libplanet.Action/State/World.cs index 01158ad98b9..cdd2f22d7f7 100644 --- a/Libplanet.Action/State/World.cs +++ b/Libplanet.Action/State/World.cs @@ -46,6 +46,9 @@ public IAccount GetAccount(Address address) : _baseState.GetAccount(address); } + [Pure] + public IAccountState GetAccountState(Address address) => GetAccount(address); + /// [Pure] public IWorld SetAccount(Address address, IAccount account) diff --git a/Libplanet.Action/State/WorldBaseState.cs b/Libplanet.Action/State/WorldBaseState.cs index 2f045b983f7..248b4980f88 100644 --- a/Libplanet.Action/State/WorldBaseState.cs +++ b/Libplanet.Action/State/WorldBaseState.cs @@ -30,20 +30,22 @@ public WorldBaseState(ITrie trie, IStateStore stateStore) public bool Legacy { get; private set; } /// - public IAccount GetAccount(Address address) + public IAccount GetAccount(Address address) => new Account(GetAccountState(address)); + + public IAccountState GetAccountState(Address address) { if (Legacy) { return address.Equals(ReservedAddresses.LegacyAccount) - ? new Account(new AccountState(Trie)) - : new Account(new AccountState(_stateStore.GetStateRoot(null))); + ? new AccountState(Trie) + : new AccountState(_stateStore.GetStateRoot(null)); } else { return Trie.Get(ToStateKey(address)) is Binary accountStateRootHash - ? new Account(new AccountState(_stateStore.GetStateRoot( - new HashDigest(accountStateRootHash.ByteArray)))) - : new Account(new AccountState(_stateStore.GetStateRoot(null))); + ? new AccountState(_stateStore.GetStateRoot( + new HashDigest(accountStateRootHash.ByteArray))) + : new AccountState(_stateStore.GetStateRoot(null)); } } } diff --git a/Libplanet.Explorer.Tests/Queries/StateQueryTest.Mocks.cs b/Libplanet.Explorer.Tests/Queries/StateQueryTest.Mocks.cs index eeda9ffde5e..74f548e0691 100644 --- a/Libplanet.Explorer.Tests/Queries/StateQueryTest.Mocks.cs +++ b/Libplanet.Explorer.Tests/Queries/StateQueryTest.Mocks.cs @@ -93,6 +93,11 @@ public IAccount GetAccount(Address address) => ? new MockAccount(_stateRootHash) : new MockAccount(null); + public IAccountState GetAccountState(Address address) => + _stateRootHash is { } && ReservedAddresses.LegacyAccount.Equals(address) + ? new MockAccount(_stateRootHash) + : new MockAccount(null); + public IWorld SetAccount(Address address, IAccount account) => throw new System.NotImplementedException(); } From 9d5838bbe977e57a1edbb9ba8e74cbe34877851a Mon Sep 17 00:00:00 2001 From: Say Cheong Date: Wed, 10 Jan 2024 13:49:52 +0900 Subject: [PATCH 2/2] Move GetAccount from IWorldState to IWorld --- Libplanet.Action/State/AccountState.cs | 1 - Libplanet.Action/State/IAccountState.cs | 1 - Libplanet.Action/State/IWorld.cs | 12 +- Libplanet.Action/State/IWorldState.cs | 11 -- Libplanet.Action/State/World.cs | 7 +- Libplanet.Action/State/WorldExtensions.cs | 8 +- .../Queries/StateQueryTest.Mocks.cs | 69 ++----- .../GraphTypes/WorldStateType.cs | 4 +- Libplanet.Explorer/Queries/StateQuery.cs | 16 +- Libplanet.Net.Tests/Consensus/ContextTest.cs | 2 +- Libplanet.Net.Tests/SwarmTest.Preload.cs | 18 +- Libplanet.Net.Tests/SwarmTest.cs | 70 +++++-- Libplanet.Net.Tests/TestUtils.cs | 2 +- Libplanet.Net/Consensus/ConsensusContext.cs | 2 +- Libplanet.Tests/Action/AccountTest.cs | 4 +- Libplanet.Tests/Action/AccountV0Test.cs | 2 +- Libplanet.Tests/Action/AccountV1Test.cs | 2 +- Libplanet.Tests/Action/ActionEvaluatorTest.cs | 32 ++-- .../Blockchain/BlockChainTest.Append.cs | 104 +++++++---- .../Blockchain/BlockChainTest.ProposeBlock.cs | 130 ++++++++----- Libplanet.Tests/Blockchain/BlockChainTest.cs | 173 ++++++++++++------ .../Blocks/PreEvaluationBlockTest.cs | 32 +++- Libplanet.Tests/Fixtures/IntegerSet.cs | 2 +- Libplanet/Blockchain/BlockChain.Validate.cs | 2 +- 24 files changed, 430 insertions(+), 276 deletions(-) diff --git a/Libplanet.Action/State/AccountState.cs b/Libplanet.Action/State/AccountState.cs index 9ea1da56130..13e0c8370cf 100644 --- a/Libplanet.Action/State/AccountState.cs +++ b/Libplanet.Action/State/AccountState.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using System.Linq; using Bencodex.Types; diff --git a/Libplanet.Action/State/IAccountState.cs b/Libplanet.Action/State/IAccountState.cs index f40bb455879..f4fd374b1d2 100644 --- a/Libplanet.Action/State/IAccountState.cs +++ b/Libplanet.Action/State/IAccountState.cs @@ -4,7 +4,6 @@ using Libplanet.Crypto; using Libplanet.Store.Trie; using Libplanet.Types.Assets; -using Libplanet.Types.Blocks; using Libplanet.Types.Consensus; namespace Libplanet.Action.State diff --git a/Libplanet.Action/State/IWorld.cs b/Libplanet.Action/State/IWorld.cs index a099e6dd947..ce3caa09541 100644 --- a/Libplanet.Action/State/IWorld.cs +++ b/Libplanet.Action/State/IWorld.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Collections.Immutable; using System.Diagnostics.Contracts; using Libplanet.Crypto; @@ -42,6 +41,17 @@ public interface IWorld : IWorldState [Pure] IWorldDelta Delta { get; } + /// + /// Gets the of the given . + /// + /// The referring + /// the world to get its state. + /// The of the given . + /// If it has never been set to any state it returns + /// instead. + [Pure] + IAccount GetAccount(Address address); + /// /// Gets a new instance that the world state of the given /// is set to the given diff --git a/Libplanet.Action/State/IWorldState.cs b/Libplanet.Action/State/IWorldState.cs index 65d6e326d81..2ed9dbce3a4 100644 --- a/Libplanet.Action/State/IWorldState.cs +++ b/Libplanet.Action/State/IWorldState.cs @@ -39,17 +39,6 @@ public interface IWorldState /// bool Legacy { get; } - /// - /// Gets the of the given . - /// - /// The referring - /// the world to get its state. - /// The of the given . - /// If it has never been set to any state it returns - /// instead. - [Pure] - IAccount GetAccount(Address address); - /// /// Gets the of the given . /// diff --git a/Libplanet.Action/State/World.cs b/Libplanet.Action/State/World.cs index cdd2f22d7f7..67a5fda6912 100644 --- a/Libplanet.Action/State/World.cs +++ b/Libplanet.Action/State/World.cs @@ -33,19 +33,20 @@ public World( [Pure] public ITrie Trie => _baseState.Trie; - /// + /// [Pure] public IAccount GetAccount(Address address) { return Delta.Accounts.TryGetValue(address, out IAccount? account) ? account - : _baseState.GetAccount(address); + : new Account(_baseState.GetAccountState(address)); } + /// [Pure] public IAccountState GetAccountState(Address address) => GetAccount(address); diff --git a/Libplanet.Action/State/WorldExtensions.cs b/Libplanet.Action/State/WorldExtensions.cs index 4235700fc56..9cd812b17d1 100644 --- a/Libplanet.Action/State/WorldExtensions.cs +++ b/Libplanet.Action/State/WorldExtensions.cs @@ -1,15 +1,11 @@ -using System.Collections.Immutable; -using Bencodex.Types; -using Libplanet.Crypto; - namespace Libplanet.Action.State { internal static class WorldExtensions { - internal static IAccount GetFungibleAssetsAccount(this IWorldState world) => + internal static IAccount GetFungibleAssetsAccount(this IWorld world) => world.GetAccount(ReservedAddresses.LegacyAccount); - internal static IAccount GetValidatorSetAccount(this IWorldState world) => + internal static IAccount GetValidatorSetAccount(this IWorld world) => world.GetAccount(ReservedAddresses.LegacyAccount); internal static IWorld SetFungibleAssetsAccount( diff --git a/Libplanet.Explorer.Tests/Queries/StateQueryTest.Mocks.cs b/Libplanet.Explorer.Tests/Queries/StateQueryTest.Mocks.cs index 74f548e0691..e8e20f63eb6 100644 --- a/Libplanet.Explorer.Tests/Queries/StateQueryTest.Mocks.cs +++ b/Libplanet.Explorer.Tests/Queries/StateQueryTest.Mocks.cs @@ -4,7 +4,6 @@ using System.Numerics; using System.Security.Cryptography; using Bencodex.Types; -using Libplanet.Action; using Libplanet.Action.State; using Libplanet.Common; using Libplanet.Crypto; @@ -38,44 +37,44 @@ private class MockChainStates : IBlockChainStates : null; public IWorldState GetWorldState(HashDigest? stateRootHash) => - new MockWorld(stateRootHash); + new MockWorldState(stateRootHash); public IWorldState GetWorldState(BlockHash? blockHash) => - new MockWorld(ToStateRootHash(blockHash)); + new MockWorldState(ToStateRootHash(blockHash)); public IValue GetState(HashDigest? stateRootHash, Address address) => - new MockAccount(stateRootHash).GetState(address); + new MockAccountState(stateRootHash).GetState(address); public IValue GetState(BlockHash? blockHash, Address address) => - new MockAccount(ToStateRootHash(blockHash)).GetState(address); + new MockAccountState(ToStateRootHash(blockHash)).GetState(address); public FungibleAssetValue GetBalance( HashDigest? stateRootHash, Address address, Currency currency) => - new MockAccount(stateRootHash).GetBalance(address, currency); + new MockAccountState(stateRootHash).GetBalance(address, currency); public FungibleAssetValue GetBalance( BlockHash? blockHash, Address address, Currency currency) => - new MockAccount(ToStateRootHash(blockHash)).GetBalance(address, currency); + new MockAccountState(ToStateRootHash(blockHash)).GetBalance(address, currency); public FungibleAssetValue GetTotalSupply(HashDigest? stateRootHash, Currency currency) => - new MockAccount(stateRootHash).GetTotalSupply(currency); + new MockAccountState(stateRootHash).GetTotalSupply(currency); public FungibleAssetValue GetTotalSupply(BlockHash? blockHash, Currency currency) => - new MockAccount(ToStateRootHash(blockHash)).GetTotalSupply(currency); + new MockAccountState(ToStateRootHash(blockHash)).GetTotalSupply(currency); public ValidatorSet GetValidatorSet(HashDigest? stateRootHash) => - new MockAccount(stateRootHash).GetValidatorSet(); + new MockAccountState(stateRootHash).GetValidatorSet(); public ValidatorSet GetValidatorSet(BlockHash? blockHash) => - new MockAccount(ToStateRootHash(blockHash)).GetValidatorSet(); + new MockAccountState(ToStateRootHash(blockHash)).GetValidatorSet(); } // Behaves like a non-empty world only if state root hash is non-null. - private class MockWorld : IWorld + private class MockWorldState : IWorldState { private readonly HashDigest? _stateRootHash; - public MockWorld(HashDigest? stateRootHash) + public MockWorldState(HashDigest? stateRootHash) { _stateRootHash = stateRootHash; } @@ -86,31 +85,21 @@ public MockWorld(HashDigest? stateRootHash) public IWorldDelta Delta => throw new System.NotImplementedException(); - // Only returns a non-empty account if state root hash is not null and - // address is legacy account address - public IAccount GetAccount(Address address) => - _stateRootHash is { } && ReservedAddresses.LegacyAccount.Equals(address) - ? new MockAccount(_stateRootHash) - : new MockAccount(null); - public IAccountState GetAccountState(Address address) => _stateRootHash is { } && ReservedAddresses.LegacyAccount.Equals(address) - ? new MockAccount(_stateRootHash) - : new MockAccount(null); - - public IWorld SetAccount(Address address, IAccount account) => - throw new System.NotImplementedException(); + ? new MockAccountState(_stateRootHash) + : new MockAccountState(null); } // Behaves like a non-empty account only if state root hash is non-null. - private class MockAccount : IAccount + private class MockAccountState : IAccountState { public static readonly Address Address = new Address("0x5003712B63baAB98094aD678EA2B24BcE445D076"); private readonly HashDigest? _stateRootHash; - public MockAccount(HashDigest? stateRootHash) + public MockAccountState(HashDigest? stateRootHash) { _stateRootHash = stateRootHash; } @@ -146,32 +135,6 @@ public ValidatorSet GetValidatorSet() => "032038e153d344773986c039ba5dbff12ae70cfdf6ea8beb7c5ea9b361a72a9233"), new BigInteger(1)), }); - - public IAccount SetState(Address address, IValue state) => - throw new System.NotImplementedException(); - - public IAccount RemoveState(Address address) => - throw new System.NotImplementedException(); - - public IAccount MintAsset( - IActionContext context, - Address recipient, - FungibleAssetValue value) => throw new System.NotImplementedException(); - - public IAccount TransferAsset( - IActionContext context, - Address sender, - Address recipient, - FungibleAssetValue value, - bool allowNegativeBalance = false) => throw new System.NotImplementedException(); - - public IAccount BurnAsset( - IActionContext context, - Address owner, - FungibleAssetValue value) => throw new System.NotImplementedException(); - - public IAccount SetValidator(Validator validator) => - throw new System.NotImplementedException(); } private class MockTrie : ITrie diff --git a/Libplanet.Explorer/GraphTypes/WorldStateType.cs b/Libplanet.Explorer/GraphTypes/WorldStateType.cs index b515a075fc6..2773827402a 100644 --- a/Libplanet.Explorer/GraphTypes/WorldStateType.cs +++ b/Libplanet.Explorer/GraphTypes/WorldStateType.cs @@ -37,7 +37,7 @@ public WorldStateType() } ), resolve: context => - context.Source.GetAccount(context.GetArgument
("address")) + context.Source.GetAccountState(context.GetArgument
("address")) ); Field>>>( @@ -54,7 +54,7 @@ public WorldStateType() ), resolve: context => context .GetArgument("addresses") - .Select(address => context.Source.GetAccount(address)) + .Select(address => context.Source.GetAccountState(address)) .ToArray() ); } diff --git a/Libplanet.Explorer/Queries/StateQuery.cs b/Libplanet.Explorer/Queries/StateQuery.cs index 8c30492c496..2f07feb8168 100644 --- a/Libplanet.Explorer/Queries/StateQuery.cs +++ b/Libplanet.Explorer/Queries/StateQuery.cs @@ -112,14 +112,14 @@ private static object ResolveWorldState(IResolveFieldContext { return context.Source .GetWorldState(offsetBlockHash) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetStates(addresses); } case (_, srh: not null): return context.Source .GetWorldState(offsetStateRootHash) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetStates(addresses); } } @@ -146,14 +146,14 @@ private static object ResolveBalance(IResolveFieldContext con { return context.Source .GetWorldState(offsetBlockHash) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetBalance(owner, currency); } case (_, srh: not null): return context.Source .GetWorldState(offsetStateRootHash) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetBalance(owner, currency); } } @@ -187,12 +187,12 @@ private static object ResolveBalance(IResolveFieldContext con case (blockhash: not null, _): return context.Source .GetWorldState(offsetBlockHash) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetTotalSupply(currency); case (_, srh: not null): return context.Source .GetWorldState(offsetStateRootHash) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetTotalSupply(currency); } } @@ -216,12 +216,12 @@ private static object ResolveBalance(IResolveFieldContext con case (blockhash: not null, _): return context.Source .GetWorldState(offsetBlockHash) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetValidatorSet().Validators; case (_, srh: not null): return context.Source .GetWorldState(offsetStateRootHash) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetValidatorSet().Validators; } } diff --git a/Libplanet.Net.Tests/Consensus/ContextTest.cs b/Libplanet.Net.Tests/Consensus/ContextTest.cs index a5ac0715ca3..7a988a3df4b 100644 --- a/Libplanet.Net.Tests/Consensus/ContextTest.cs +++ b/Libplanet.Net.Tests/Consensus/ContextTest.cs @@ -322,7 +322,7 @@ void BroadcastMessage(ConsensusMsg message) => TestUtils.PrivateKeys[0], blockChain .GetWorldState(blockChain[0L].Hash) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetValidatorSet(), contextTimeoutOptions: new ContextTimeoutOption()); diff --git a/Libplanet.Net.Tests/SwarmTest.Preload.cs b/Libplanet.Net.Tests/SwarmTest.Preload.cs index 9c6071b868d..b505d60264e 100644 --- a/Libplanet.Net.Tests/SwarmTest.Preload.cs +++ b/Libplanet.Net.Tests/SwarmTest.Preload.cs @@ -107,8 +107,10 @@ public async Task InitialBlockDownloadStates() await receiverSwarm.AddPeersAsync(new[] { minerSwarm.AsPeer }, null); await receiverSwarm.PreloadAsync(); - var state = receiverChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(address1); + var state = receiverChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address1); Assert.Equal((Text)"foo,bar,baz", state); Assert.Equal(minerChain.BlockHashes, receiverChain.BlockHashes); @@ -750,8 +752,10 @@ public async Task PreloadAsyncCancellation(int cancelAfter) Assert.Equal(blockArray[0], receiverChain.Tip); Assert.Equal( (Text)string.Join(",", Enumerable.Range(0, 5).Select(j => $"Item0.{j}")), - receiverChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(address) + receiverChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address) ); } else @@ -764,8 +768,10 @@ public async Task PreloadAsyncCancellation(int cancelAfter) string.Join(",", Enumerable.Range(0, 5).Select(j => $"Item{i}.{j}")) ) ), - receiverChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(address) + receiverChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address) ); } diff --git a/Libplanet.Net.Tests/SwarmTest.cs b/Libplanet.Net.Tests/SwarmTest.cs index 8cee7d251c9..0d5abc645b5 100644 --- a/Libplanet.Net.Tests/SwarmTest.cs +++ b/Libplanet.Net.Tests/SwarmTest.cs @@ -1060,10 +1060,18 @@ public async void RestageTransactionsOnceLocallyMinedAfterReorg(bool restage) keyB, CreateBlockCommit(minerB.BlockChain.Tip)); minerB.BlockChain.Append(blockC, TestUtils.CreateBlockCommit(blockC)); - Assert.Equal((Text)dumbItem, minerA.BlockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(targetAddress1)); - Assert.Equal((Text)dumbItem, minerB.BlockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(targetAddress2)); + Assert.Equal( + (Text)dumbItem, + minerA.BlockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(targetAddress1)); + Assert.Equal( + (Text)dumbItem, + minerB.BlockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(targetAddress2)); await StartAsync(minerA); await StartAsync(minerB); @@ -1078,10 +1086,16 @@ public async void RestageTransactionsOnceLocallyMinedAfterReorg(bool restage) Assert.Equal(3, minerA.BlockChain.Count); Assert.Equal( restage ? null : (Text?)dumbItem, - minerA.BlockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(targetAddress1)); - Assert.Equal((Text)dumbItem, minerA.BlockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(targetAddress2)); + minerA.BlockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(targetAddress1)); + Assert.Equal( + (Text)dumbItem, + minerA.BlockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(targetAddress2)); Log.Debug("Check if txs in unrendered blocks staged again"); Assert.Equal( @@ -1095,10 +1109,18 @@ public async void RestageTransactionsOnceLocallyMinedAfterReorg(bool restage) await minerB.BlockAppended.WaitAsync(); Assert.Equal(minerA.BlockChain.Tip, minerB.BlockChain.Tip); - Assert.Equal((Text)dumbItem, minerA.BlockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(targetAddress1)); - Assert.Equal((Text)dumbItem, minerA.BlockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(targetAddress2)); + Assert.Equal( + (Text)dumbItem, + minerA.BlockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(targetAddress1)); + Assert.Equal( + (Text)dumbItem, + minerA.BlockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(targetAddress2)); } finally { @@ -1421,12 +1443,24 @@ public async Task DoNotReceiveBlockFromNodeHavingDifferenceGenesisBlock() Assert.Equal(1, genesisChainB.Count); Assert.Equal(2, genesisChainC.Count); - Assert.Equal("1", (Text)genesisChainA.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(signerAddress)); - Assert.Equal("2", (Text)genesisChainB.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(signerAddress)); - Assert.Equal("1", (Text)genesisChainC.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(signerAddress)); + Assert.Equal( + "1", + (Text)genesisChainA + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(signerAddress)); + Assert.Equal( + "2", + (Text)genesisChainB + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(signerAddress)); + Assert.Equal( + "1", + (Text)genesisChainC + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(signerAddress)); } finally { diff --git a/Libplanet.Net.Tests/TestUtils.cs b/Libplanet.Net.Tests/TestUtils.cs index d547e39976a..44524698480 100644 --- a/Libplanet.Net.Tests/TestUtils.cs +++ b/Libplanet.Net.Tests/TestUtils.cs @@ -289,7 +289,7 @@ void BroadcastMessage(ConsensusMsg message) => privateKey, validatorSet ?? blockChain .GetWorldState(blockChain[height - 1].Hash) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetValidatorSet(), contextTimeoutOptions: contextTimeoutOptions ?? new ContextTimeoutOption()); diff --git a/Libplanet.Net/Consensus/ConsensusContext.cs b/Libplanet.Net/Consensus/ConsensusContext.cs index b5ea670377a..db7aca0060f 100644 --- a/Libplanet.Net/Consensus/ConsensusContext.cs +++ b/Libplanet.Net/Consensus/ConsensusContext.cs @@ -441,7 +441,7 @@ private Context CreateContext(long height) _privateKey, _blockChain .GetWorldState(_blockChain[Height - 1].Hash) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetValidatorSet(), contextTimeoutOptions: _contextTimeoutOption); AttachEventHandlers(context); diff --git a/Libplanet.Tests/Action/AccountTest.cs b/Libplanet.Tests/Action/AccountTest.cs index 28d954da2ab..249223be6c1 100644 --- a/Libplanet.Tests/Action/AccountTest.cs +++ b/Libplanet.Tests/Action/AccountTest.cs @@ -253,14 +253,14 @@ public virtual BlockChain TransferAssetInBlock() DumbAction.DumbCurrency * 5, chain .GetWorldState() - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetBalance(_addr[0], DumbAction.DumbCurrency) ); Assert.Equal( DumbAction.DumbCurrency * -5, chain .GetWorldState() - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetBalance(_addr[1], DumbAction.DumbCurrency) ); diff --git a/Libplanet.Tests/Action/AccountV0Test.cs b/Libplanet.Tests/Action/AccountV0Test.cs index d79829d6ce5..8a4a9477130 100644 --- a/Libplanet.Tests/Action/AccountV0Test.cs +++ b/Libplanet.Tests/Action/AccountV0Test.cs @@ -80,7 +80,7 @@ public override BlockChain TransferAssetInBlock() DumbAction.DumbCurrency * 6, chain .GetWorldState() - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetBalance(_addr[0], DumbAction.DumbCurrency) ); diff --git a/Libplanet.Tests/Action/AccountV1Test.cs b/Libplanet.Tests/Action/AccountV1Test.cs index e3e44e64e00..1817ad9b13a 100644 --- a/Libplanet.Tests/Action/AccountV1Test.cs +++ b/Libplanet.Tests/Action/AccountV1Test.cs @@ -83,7 +83,7 @@ public override BlockChain TransferAssetInBlock() DumbAction.DumbCurrency * 5, chain .GetWorldState() - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetBalance(_addr[0], DumbAction.DumbCurrency) ); diff --git a/Libplanet.Tests/Action/ActionEvaluatorTest.cs b/Libplanet.Tests/Action/ActionEvaluatorTest.cs index 04bfa225201..2fded0dc424 100644 --- a/Libplanet.Tests/Action/ActionEvaluatorTest.cs +++ b/Libplanet.Tests/Action/ActionEvaluatorTest.cs @@ -160,15 +160,21 @@ public void Evaluate() Assert.Single(evaluations); Assert.Null(evaluations.Single().Exception); Assert.Equal( - chain.GetWorldState() - .GetAccount(ReservedAddresses.LegacyAccount).GetState(action.SignerKey), + chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(action.SignerKey), (Text)address.ToHex()); Assert.Equal( - chain.GetWorldState() - .GetAccount(ReservedAddresses.LegacyAccount).GetState(action.MinerKey), + chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(action.MinerKey), (Text)miner.Address.ToHex()); - var state = chain.GetWorldState() - .GetAccount(ReservedAddresses.LegacyAccount).GetState(action.BlockIndexKey); + var state = chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(action.BlockIndexKey); Assert.Equal((long)(Integer)state, blockIndex); } @@ -1070,13 +1076,15 @@ public void EvaluateActionAndCollectFee() Assert.Null(evaluations.Single().Exception); Assert.Equal( FungibleAssetValue.FromRawValue(foo, 9), - chain.GetWorldState(evaluations.Single().OutputState) - .GetAccount(ReservedAddresses.LegacyAccount) + chain + .GetWorldState(evaluations.Single().OutputState) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetBalance(address, foo)); Assert.Equal( FungibleAssetValue.FromRawValue(foo, 1), - chain.GetWorldState(evaluations.Single().OutputState) - .GetAccount(ReservedAddresses.LegacyAccount) + chain + .GetWorldState(evaluations.Single().OutputState) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetBalance(miner.Address, foo)); } @@ -1146,12 +1154,12 @@ public void EvaluateThrowingExceedGasLimit() Assert.Equal( FungibleAssetValue.FromRawValue(foo, 5), chain.GetWorldState(evaluations.Single().OutputState) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetBalance(address, foo)); Assert.Equal( FungibleAssetValue.FromRawValue(foo, 5), chain.GetWorldState(evaluations.Single().OutputState) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetBalance(miner.Address, foo)); } diff --git a/Libplanet.Tests/Blockchain/BlockChainTest.Append.cs b/Libplanet.Tests/Blockchain/BlockChainTest.Append.cs index 169e4518e89..485772e4fb4 100644 --- a/Libplanet.Tests/Blockchain/BlockChainTest.Append.cs +++ b/Libplanet.Tests/Blockchain/BlockChainTest.Append.cs @@ -83,63 +83,77 @@ Func getTxExecution Assert.Equal(2, renders[0].Context.BlockIndex); Assert.Equal( new IValue[] { null, null, null, null, (Integer)1 }, - addresses.Select( - _blockChain.GetWorldState(renders[0].Context.PreviousState) - .GetAccount(ReservedAddresses.LegacyAccount).GetState) + addresses.Select(_blockChain + .GetWorldState(renders[0].Context.PreviousState) + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState) ); Assert.Equal( new IValue[] { (Text)"foo", null, null, null, (Integer)1 }, - addresses.Select( - _blockChain.GetWorldState(renders[0].NextState) - .GetAccount(ReservedAddresses.LegacyAccount).GetState) + addresses.Select(_blockChain + .GetWorldState(renders[0].NextState) + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState) ); Assert.Equal("bar", actions[1].Item); Assert.Equal(2, renders[1].Context.BlockIndex); Assert.Equal( - addresses.Select(_blockChain.GetWorldState(renders[0].NextState) - .GetAccount(ReservedAddresses.LegacyAccount).GetState), - addresses.Select(_blockChain.GetWorldState(renders[1].Context.PreviousState) - .GetAccount(ReservedAddresses.LegacyAccount).GetState) + addresses.Select(_blockChain + .GetWorldState(renders[0].NextState) + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState), + addresses.Select(_blockChain + .GetWorldState(renders[1].Context.PreviousState) + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState) ); Assert.Equal( new IValue[] { (Text)"foo", (Text)"bar", null, null, (Integer)1 }, addresses.Select( _blockChain.GetWorldState(renders[1].NextState) - .GetAccount(ReservedAddresses.LegacyAccount).GetState) + .GetAccountState(ReservedAddresses.LegacyAccount).GetState) ); Assert.Equal("baz", actions[2].Item); Assert.Equal(2, renders[2].Context.BlockIndex); Assert.Equal( addresses.Select( _blockChain.GetWorldState(renders[1].NextState) - .GetAccount(ReservedAddresses.LegacyAccount).GetState), + .GetAccountState(ReservedAddresses.LegacyAccount).GetState), addresses.Select( _blockChain.GetWorldState(renders[2].Context.PreviousState) - .GetAccount(ReservedAddresses.LegacyAccount).GetState) + .GetAccountState(ReservedAddresses.LegacyAccount).GetState) ); Assert.Equal( new IValue[] { (Text)"foo", (Text)"bar", (Text)"baz", null, (Integer)1 }, addresses.Select( - _blockChain.GetWorldState(renders[2].NextState) - .GetAccount(ReservedAddresses.LegacyAccount).GetState) + _blockChain + .GetWorldState(renders[2].NextState) + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState) ); Assert.Equal("qux", actions[3].Item); Assert.Equal(2, renders[3].Context.BlockIndex); Assert.Equal( addresses.Select( - _blockChain.GetWorldState(renders[2].NextState) - .GetAccount(ReservedAddresses.LegacyAccount).GetState), + _blockChain + .GetWorldState(renders[2].NextState) + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState), addresses.Select( - _blockChain.GetWorldState(renders[3].Context.PreviousState) - .GetAccount(ReservedAddresses.LegacyAccount).GetState) + _blockChain + .GetWorldState(renders[3].Context.PreviousState) + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState) ); Assert.Equal( new IValue[] { (Text)"foo", (Text)"bar", (Text)"baz", (Text)"qux", (Integer)1, }, - _blockChain.GetWorldState(renders[3].NextState) - .GetAccount(ReservedAddresses.LegacyAccount).GetStates(addresses) + _blockChain + .GetWorldState(renders[3].NextState) + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetStates(addresses) ); Address minerAddress = addresses[4]; @@ -147,8 +161,12 @@ Func getTxExecution .Where(r => TestUtils.IsMinerReward(r.Action)) .ToArray(); - Assert.Equal((Integer)2, (Integer)_blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(minerAddress)); + Assert.Equal( + (Integer)2, + (Integer)_blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(minerAddress)); Assert.Equal(2, blockRenders.Length); Assert.True(blockRenders.All(r => r.Render)); Assert.Equal(1, blockRenders[0].Context.BlockIndex); @@ -156,18 +174,24 @@ Func getTxExecution Assert.Equal( (Integer)1, - (Integer)_blockChain.GetWorldState(blockRenders[0].NextState) - .GetAccount(ReservedAddresses.LegacyAccount).GetState(minerAddress) + (Integer)_blockChain + .GetWorldState(blockRenders[0].NextState) + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(minerAddress) ); Assert.Equal( (Integer)1, - (Integer)_blockChain.GetWorldState(blockRenders[1].Context.PreviousState) - .GetAccount(ReservedAddresses.LegacyAccount).GetState(minerAddress) + (Integer)_blockChain + .GetWorldState(blockRenders[1].Context.PreviousState) + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(minerAddress) ); Assert.Equal( (Integer)2, - (Integer)_blockChain.GetWorldState(blockRenders[1].NextState) - .GetAccount(ReservedAddresses.LegacyAccount).GetState(minerAddress) + (Integer)_blockChain + .GetWorldState(blockRenders[1].NextState) + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(minerAddress) ); foreach (Transaction tx in txs) @@ -179,12 +203,12 @@ Func getTxExecution Assert.False(e.Fail); Assert.Equal(block2.Hash, e.BlockHash); Assert.Equal(tx.Id, e.TxId); - var inputAccount = - _blockChain.GetWorldState(Assert.IsType>(e.InputState)) - .GetAccount(ReservedAddresses.LegacyAccount); - var outputAccount = - _blockChain.GetWorldState(Assert.IsType>(e.OutputState)) - .GetAccount(ReservedAddresses.LegacyAccount); + var inputAccount = _blockChain + .GetWorldState(Assert.IsType>(e.InputState)) + .GetAccountState(ReservedAddresses.LegacyAccount); + var outputAccount = _blockChain + .GetWorldState(Assert.IsType>(e.OutputState)) + .GetAccountState(ReservedAddresses.LegacyAccount); var accountDiff = AccountDiff.Create(inputAccount, outputAccount); Assert.Empty(accountDiff.FungibleAssetValueDiffs); } @@ -227,10 +251,10 @@ Func getTxExecution Assert.False(txExecution1.Fail); var inputAccount1 = _blockChain.GetWorldState( Assert.IsType>(txExecution1.InputState)) - .GetAccount(ReservedAddresses.LegacyAccount); + .GetAccountState(ReservedAddresses.LegacyAccount); var outputAccount1 = _blockChain.GetWorldState( Assert.IsType>(txExecution1.OutputState)) - .GetAccount(ReservedAddresses.LegacyAccount); + .GetAccountState(ReservedAddresses.LegacyAccount); var accountDiff1 = AccountDiff.Create(inputAccount1, outputAccount1); Assert.Equal( @@ -271,7 +295,7 @@ Func getTxExecution Assert.False(txExecution3.Fail); var outputAccount3 = _blockChain.GetWorldState( Assert.IsType>(txExecution3.OutputState)) - .GetAccount(ReservedAddresses.LegacyAccount); + .GetAccountState(ReservedAddresses.LegacyAccount); Assert.Equal( DumbAction.DumbCurrency * -35, outputAccount3.GetBalance(pk.Address, DumbAction.DumbCurrency)); @@ -306,7 +330,7 @@ public void AppendModern() Assert.False(world1.Legacy); Assert.Equal( (Text)"foo", - world1.GetAccount(DumbModernAction.DumbModernAddress).GetState(address1)); + world1.GetAccountState(DumbModernAction.DumbModernAddress).GetState(address1)); var block2 = _blockChain.ProposeBlock( miner, new[] { tx2 }.ToImmutableList(), @@ -316,7 +340,7 @@ public void AppendModern() Assert.False(world2.Legacy); Assert.Equal( (Text)"bar", - world2.GetAccount(DumbModernAction.DumbModernAddress).GetState(address2)); + world2.GetAccountState(DumbModernAction.DumbModernAddress).GetState(address2)); } [SkippableFact] diff --git a/Libplanet.Tests/Blockchain/BlockChainTest.ProposeBlock.cs b/Libplanet.Tests/Blockchain/BlockChainTest.ProposeBlock.cs index b19c9aee4cd..a5970eb3ecb 100644 --- a/Libplanet.Tests/Blockchain/BlockChainTest.ProposeBlock.cs +++ b/Libplanet.Tests/Blockchain/BlockChainTest.ProposeBlock.cs @@ -29,8 +29,10 @@ public void ProposeBlock() Assert.Equal(1, _blockChain.Count); AssertBencodexEqual( (Text)$"{GenesisProposer.Address}", - _blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(default)); + _blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(default)); var proposerA = new PrivateKey(); Block block = _blockChain.ProposeBlock(proposerA); @@ -41,8 +43,10 @@ public void ProposeBlock() block.MarshalBlock().EncodingLength <= getMaxTransactionsBytes(block.Index)); AssertBencodexEqual( (Text)$"{GenesisProposer.Address},{proposerA.Address}", - _blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(default) + _blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(default) ); var proposerB = new PrivateKey(); @@ -59,8 +63,10 @@ public void ProposeBlock() $"{GenesisProposer.Address},{proposerA.Address},{proposerB.Address}"); AssertBencodexEqual( expected, - _blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(default) + _blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(default) ); Block block3 = _blockChain.ProposeBlock( @@ -74,8 +80,10 @@ public void ProposeBlock() $"{GenesisProposer.Address},{proposerA.Address},{proposerB.Address}"); AssertBencodexEqual( expected, - _blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(default) + _blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(default) ); // Tests if ProposeBlock() method automatically fits the number of transactions @@ -118,8 +126,10 @@ public void ProposeBlock() $"{GenesisProposer.Address},{proposerA.Address},{proposerB.Address}"); AssertBencodexEqual( expected, - _blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(default) + _blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(default) ); } @@ -276,16 +286,26 @@ public void ProposeBlockWithPendingTxs() StageTransactions(txs); - Assert.Null(_blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(addrA)); - Assert.Null(_blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(addrB)); - Assert.Null(_blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(addrC)); - Assert.Null(_blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(addrD)); - Assert.Null(_blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(addrE)); + Assert.Null(_blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(addrA)); + Assert.Null(_blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(addrB)); + Assert.Null(_blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(addrC)); + Assert.Null(_blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(addrD)); + Assert.Null(_blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(addrE)); foreach (Transaction tx in txs) { @@ -306,22 +326,42 @@ public void ProposeBlockWithPendingTxs() Assert.Contains(txs[2].Id, txIds); Assert.Contains(txs[3].Id, txIds); - Assert.Equal(new Integer(1), _blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(addrA)); - Assert.Equal(new Text("1b"), _blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(addrB)); - Assert.Equal(new Text("2a"), _blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(addrC)); - Assert.IsType(_blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(addrD)); + Assert.Equal( + new Integer(1), + _blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(addrA)); + Assert.Equal( + new Text("1b"), + _blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(addrB)); + Assert.Equal( + new Text("2a"), + _blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(addrC)); + Assert.IsType( + _blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(addrD)); Assert.Equal( new HashSet { "2b", "5a" }, - ((string)(Text)_blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(addrD)).Split(new[] { ',' }) - .ToHashSet() + ((string)(Text)_blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(addrD)).Split(new[] { ',' }).ToHashSet() ); - Assert.Equal(new Text("5b"), _blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(addrE)); + Assert.Equal( + new Text("5b"), + _blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(addrE)); foreach (Transaction tx in new[] { txs[0], txs[1], txs[4] }) { @@ -484,10 +524,14 @@ public void ProposeBlockWithBlockAction() var block = blockChain.ProposeBlock(privateKey1, CreateBlockCommit(_blockChain.Tip)); blockChain.Append(block, CreateBlockCommit(block)); - var state1 = blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(address1); - var state2 = blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(address2); + var state1 = blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address1); + var state2 = blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address2); Assert.Equal(0, blockChain.GetNextTxNonce(address1)); Assert.Equal(1, blockChain.GetNextTxNonce(address2)); @@ -498,10 +542,14 @@ public void ProposeBlockWithBlockAction() block = blockChain.ProposeBlock(privateKey1, CreateBlockCommit(_blockChain.Tip)); blockChain.Append(block, CreateBlockCommit(block)); - state1 = blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(address1); - state2 = blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(address2); + state1 = blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address1); + state2 = blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address2); Assert.Equal(1, blockChain.GetNextTxNonce(address1)); Assert.Equal(1, blockChain.GetNextTxNonce(address2)); diff --git a/Libplanet.Tests/Blockchain/BlockChainTest.cs b/Libplanet.Tests/Blockchain/BlockChainTest.cs index 04f9c6a9683..c7095a137eb 100644 --- a/Libplanet.Tests/Blockchain/BlockChainTest.cs +++ b/Libplanet.Tests/Blockchain/BlockChainTest.cs @@ -94,7 +94,7 @@ public void ValidatorSet() { var validatorSet = _blockChain .GetWorldState() - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetValidatorSet(); _logger.Debug( "GenesisBlock is {Hash}, Transactions: {Txs}", @@ -244,8 +244,10 @@ public void ProcessActions() chain.StageTransaction(tx1); Block block1 = chain.ProposeBlock(new PrivateKey()); chain.Append(block1, CreateBlockCommit(block1)); - IValue state = chain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(_fx.Address1); + IValue state = chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(_fx.Address1); Assert.NotNull(state); var result = BattleResult.FromBencodex((Bencodex.Types.Dictionary)state); @@ -275,8 +277,10 @@ public void ProcessActions() new PrivateKey(), CreateBlockCommit(chain.Tip)); chain.Append(block2, CreateBlockCommit(block2)); - state = chain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(_fx.Address1); + state = chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(_fx.Address1); result = BattleResult.FromBencodex((Bencodex.Types.Dictionary)state); Assert.Contains("bow", result.UsedWeapons); @@ -298,8 +302,10 @@ public void ProcessActions() new PrivateKey(), CreateBlockCommit(chain.Tip)); chain.StageTransaction(tx3); chain.Append(block3, CreateBlockCommit(block3)); - state = chain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(_fx.Address1); + state = chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(_fx.Address1); Assert.NotNull(state); } @@ -580,19 +586,25 @@ public void StateAfterForkingAndAddingExistingBlock() var b2 = _blockChain.ProposeBlock( miner, lastCommit: CreateBlockCommit(_blockChain.Tip)); _blockChain.Append(b2, CreateBlockCommit(b2)); - var state = _blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(address); + var state = _blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address); Assert.Equal((Text)"foo,bar", state); var forked = _blockChain.Fork(b1.Hash); - state = forked.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(address); + state = forked + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address); Assert.Equal((Text)"foo", state); forked.Append(b2, CreateBlockCommit(b2)); - state = forked.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(address); + state = forked + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address); Assert.Equal((Text)"foo,bar", state); } @@ -928,8 +940,10 @@ public void Swap(bool render) // except genesis block. Assert.Equal( (Integer)(totalBlockCount - 1), - (Integer)_blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(minerAddress) + (Integer)_blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(minerAddress) ); Assert.Single(blockActionRenders); // #1 -> #2' Assert.True(blockActionRenders.All(r => r.Render)); @@ -1163,8 +1177,10 @@ public void GetStateOnlyDrillsDownUntilRequestedAddressesAreFound() ).Select(i => addresses[i]).ToArray(); Assert.All( - chain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetStates(targetAddresses), + chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetStates(targetAddresses), Assert.NotNull); var callCount = tracker.Logs.Where( @@ -1200,8 +1216,10 @@ public void GetStateReturnsEarlyForNonexistentAccount() tracker.ClearLogs(); Address nonexistent = new PrivateKey().Address; - IValue result = chain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(nonexistent); + IValue result = chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(nonexistent); Assert.Null(result); var callCount = tracker.Logs.Where( trackLog => trackLog.Method == "GetBlockStates" @@ -1226,8 +1244,12 @@ public void GetStateReturnsValidStateAfterFork() stateStore, actionLoader, new[] { new DumbAction(_fx.Address1, "item0.0", idempotent: true) }); - Assert.Equal("item0.0", (Text)chain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(_fx.Address1)); + Assert.Equal( + "item0.0", + (Text)chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(_fx.Address1)); chain.MakeTransaction( privateKey, @@ -1238,21 +1260,33 @@ public void GetStateReturnsValidStateAfterFork() chain.Append(block, CreateBlockCommit(block)); Assert.Equal( new IValue[] { (Text)"item0.0,item1.0" }, - chain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetStates(new[] { _fx.Address1 }) + chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetStates(new[] { _fx.Address1 }) ); - Assert.Equal("item0.0,item1.0", (Text)chain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(_fx.Address1)); + Assert.Equal( + "item0.0,item1.0", + (Text)chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(_fx.Address1)); var forked = chain.Fork(chain.Tip.Hash); Assert.Equal(2, forked.Count); Assert.Equal( new IValue[] { (Text)"item0.0,item1.0" }, - forked.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetStates(new[] { _fx.Address1 }) + forked + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetStates(new[] { _fx.Address1 }) ); - Assert.Equal("item0.0,item1.0", (Text)forked.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(_fx.Address1)); + Assert.Equal( + "item0.0,item1.0", + (Text)forked + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(_fx.Address1)); } [SkippableFact] @@ -1275,13 +1309,17 @@ public void GetStateReturnsLatestStatesWhenMultipleAddresses() new SingleActionLoader(typeof(DumbAction)))); Assert.All( - chain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetStates(addresses), + chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetStates(addresses), Assert.Null); foreach (var address in addresses) { - Assert.Null(chain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(address)); + Assert.Null(chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address)); } var privateKeysAndAddresses10 = privateKeys.Zip(addresses, (k, a) => (k, a)); @@ -1296,24 +1334,36 @@ public void GetStateReturnsLatestStatesWhenMultipleAddresses() chain.Append(block1, CreateBlockCommit(block1)); Assert.All( - chain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetStates(addresses), + chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetStates(addresses), v => Assert.Equal((Text)"1", v)); foreach (var address in addresses) { - Assert.Equal((Text)"1", chain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(address)); + Assert.Equal( + (Text)"1", + chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address)); } chain.MakeTransaction(privateKeys[0], new[] { new DumbAction(addresses[0], "2") }); Block block2 = chain.ProposeBlock( privateKeys[0], lastCommit: CreateBlockCommit(chain.Tip)); chain.Append(block2, CreateBlockCommit(block2)); - Assert.Equal((Text)"1,2", chain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(addresses[0])); + Assert.Equal( + (Text)"1,2", + chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(addresses[0])); Assert.All( - chain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetStates(addresses.Skip(1).ToArray()), + chain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetStates(addresses.Skip(1).ToArray()), v => Assert.Equal((Text)"1", v) ); } @@ -1652,12 +1702,18 @@ public void BlockActionWithMultipleAddress() miner2, lastCommit: CreateBlockCommit(_blockChain.Tip)); _blockChain.Append(block3, CreateBlockCommit(block3)); - IValue miner1state = _blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(miner1.Address); - IValue miner2state = _blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(miner2.Address); - IValue rewardState = _blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(rewardRecordAddress); + IValue miner1state = _blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(miner1.Address); + IValue miner2state = _blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(miner2.Address); + IValue rewardState = _blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(rewardRecordAddress); AssertBencodexEqual((Integer)2, miner1state); AssertBencodexEqual((Integer)1, miner2state); @@ -1960,7 +2016,7 @@ private void CreateWithGenesisBlock() var validator = blockChain .GetWorldState() - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetValidatorSet()[0]; Assert.Equal(validatorPrivKey.PublicKey, validator.PublicKey); Assert.Equal(BigInteger.One, validator.Power); @@ -1970,8 +2026,11 @@ private void CreateWithGenesisBlock() tx => !(tx.Actions is null) && tx.Actions.All(a => !Registry.IsSystemAction(a))).UpdatedAddresses); - var states = addresses.Select(address => blockChain.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(address)) + var states = addresses + .Select(address => blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address)) .ToArray(); for (int i = 0; i < states.Length; ++i) { @@ -2055,10 +2114,12 @@ private void CheckIfTxPolicyExceptionHasInnerException() { // ReSharper disable AccessToModifiedClosure // The following method calls should not throw any exceptions: - x?.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetStates(new[] { default(Address) }); - x?.GetWorldState().GetAccount( - ReservedAddresses.LegacyAccount).GetState(default); + x?.GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetStates(new[] { default(Address) }); + x?.GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(default); // ReSharper restore AccessToModifiedClosure }); IStore store = new MemoryStore(); @@ -2216,7 +2277,7 @@ private void ValidateNextBlockCommitOnValidatorSetChange() Assert.Equal( blockChain .GetWorldState(blockChain[0].Hash) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetValidatorSet(), new ValidatorSet( ValidatorPrivateKeys.Select( @@ -2225,7 +2286,7 @@ private void ValidateNextBlockCommitOnValidatorSetChange() Assert.Equal( blockChain .GetWorldState(blockChain[1].Hash) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetValidatorSet(), new ValidatorSet( newValidators.Select( diff --git a/Libplanet.Tests/Blocks/PreEvaluationBlockTest.cs b/Libplanet.Tests/Blocks/PreEvaluationBlockTest.cs index 55316b4dd6b..83d2b6321c3 100644 --- a/Libplanet.Tests/Blocks/PreEvaluationBlockTest.cs +++ b/Libplanet.Tests/Blocks/PreEvaluationBlockTest.cs @@ -61,8 +61,12 @@ public void Evaluate() fx.StateStore, genesis, actionEvaluator); - AssertBencodexEqual((Bencodex.Types.Integer)123, blockChain.GetWorldState() - .GetAccount(ReservedAddresses.LegacyAccount).GetState(address)); + AssertBencodexEqual( + (Bencodex.Types.Integer)123, + blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address)); HashDigest identicalGenesisStateRootHash = blockChain.DetermineBlockStateRootHash(preEvalGenesis, out _); @@ -89,8 +93,12 @@ public void Evaluate() AssertBytesEqual(block1.StateRootHash, identicalBlock1StateRootHash); blockChain.Append(block1, TestUtils.CreateBlockCommit(block1)); - AssertBencodexEqual((Bencodex.Types.Integer)158, blockChain.GetWorldState() - .GetAccount(ReservedAddresses.LegacyAccount).GetState(address)); + AssertBencodexEqual( + (Bencodex.Types.Integer)158, + blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address)); } } @@ -128,8 +136,12 @@ public void DetermineStateRootHash() fx.StateStore, genesis, actionEvaluator); - AssertBencodexEqual((Bencodex.Types.Integer)123, blockChain.GetWorldState() - .GetAccount(ReservedAddresses.LegacyAccount).GetState(address)); + AssertBencodexEqual( + (Bencodex.Types.Integer)123, + blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address)); HashDigest identicalGenesisStateRootHash = blockChain.DetermineBlockStateRootHash(preEvalGenesis, out _); @@ -154,8 +166,12 @@ public void DetermineStateRootHash() _output.WriteLine("#1: {0}", block1); blockChain.Append(block1, TestUtils.CreateBlockCommit(block1)); - AssertBencodexEqual((Bencodex.Types.Integer)158, blockChain.GetWorldState() - .GetAccount(ReservedAddresses.LegacyAccount).GetState(address)); + AssertBencodexEqual( + (Bencodex.Types.Integer)158, + blockChain + .GetWorldState() + .GetAccountState(ReservedAddresses.LegacyAccount) + .GetState(address)); } } } diff --git a/Libplanet.Tests/Fixtures/IntegerSet.cs b/Libplanet.Tests/Fixtures/IntegerSet.cs index b76d015e6da..664f7094381 100644 --- a/Libplanet.Tests/Fixtures/IntegerSet.cs +++ b/Libplanet.Tests/Fixtures/IntegerSet.cs @@ -108,7 +108,7 @@ public TxWithContext Sign(PrivateKey signer, params Arithmetic[] actions) long nonce = Chain.GetNextTxNonce(signerAddress); Transaction tx = Transaction.Create(nonce, signer, Genesis.Hash, actions.ToPlainValues()); - BigInteger prevState = Chain.GetWorldState().GetAccount( + BigInteger prevState = Chain.GetWorldState().GetAccountState( ReservedAddresses.LegacyAccount).GetState(signerAddress) is Bencodex.Types.Integer i ? i.Value : 0; diff --git a/Libplanet/Blockchain/BlockChain.Validate.cs b/Libplanet/Blockchain/BlockChain.Validate.cs index ba03eab29a4..0ea6778d5d2 100644 --- a/Libplanet/Blockchain/BlockChain.Validate.cs +++ b/Libplanet/Blockchain/BlockChain.Validate.cs @@ -138,7 +138,7 @@ internal void ValidateBlockCommit( // FIXME: When the dynamic validator set is possible, the functionality of this // condition should be checked once more. var validators = GetWorldState(block.PreviousHash ?? Genesis.Hash) - .GetAccount(ReservedAddresses.LegacyAccount) + .GetAccountState(ReservedAddresses.LegacyAccount) .GetValidatorSet(); if (!validators.ValidateBlockCommitValidators(blockCommit)) {