private NineChroniclesNodeService MakeMineChroniclesNodeService(PrivateKey privateKey) { var goldCurrency = new Currency("NCG", 2, minter: null); var blockPolicy = NineChroniclesNodeService.GetTestBlockPolicy(); Block <PolymorphicAction <ActionBase> > genesis = BlockChain <PolymorphicAction <ActionBase> > .MakeGenesisBlock( HashAlgorithmType.Of <SHA256>(), new PolymorphicAction <ActionBase>[] { new InitializeStates( rankingState: new RankingState(), shopState: new ShopState(), gameConfigState: new GameConfigState(_sheets[nameof(GameConfigSheet)]), redeemCodeState: new RedeemCodeState(Bencodex.Types.Dictionary.Empty .Add("address", RedeemCodeState.Address.Serialize()) .Add("map", Bencodex.Types.Dictionary.Empty) ), adminAddressState: new AdminState(default, 0),
public async Task ActivationKeyNonce_Throw_ExecutionError(string code, string msg) { var adminPrivateKey = new PrivateKey(); var adminAddress = adminPrivateKey.ToAddress(); var activatedAccounts = ImmutableHashSet <Address> .Empty; var pendingActivationStates = new List <PendingActivationState>(); Block <PolymorphicAction <ActionBase> > genesis = BlockChain <PolymorphicAction <ActionBase> > .MakeGenesisBlock( HashAlgorithmType.Of <SHA256>(), new PolymorphicAction <ActionBase>[] { new InitializeStates( rankingState: new RankingState(), shopState: new ShopState(), gameConfigState: new GameConfigState(), redeemCodeState: new RedeemCodeState(Bencodex.Types.Dictionary.Empty .Add("address", RedeemCodeState.Address.Serialize()) .Add("map", Bencodex.Types.Dictionary.Empty) ), adminAddressState: new AdminState(adminAddress, 1500000), activatedAccountsState: new ActivatedAccountsState(activatedAccounts), goldCurrencyState: new GoldCurrencyState(new Currency("NCG", 2, minter: null)), goldDistributions: new GoldDistribution[0], tableSheets: _sheets, pendingActivationStates: pendingActivationStates.ToArray() ), } ); var apvPrivateKey = new PrivateKey(); var apv = AppProtocolVersion.Sign(apvPrivateKey, 0); var userPrivateKey = new PrivateKey(); var properties = new LibplanetNodeServiceProperties <PolymorphicAction <ActionBase> > { Host = System.Net.IPAddress.Loopback.ToString(), AppProtocolVersion = apv, GenesisBlock = genesis, StorePath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()), StoreStatesCacheSize = 2, SwarmPrivateKey = new PrivateKey(), Port = null, NoMiner = true, Render = false, Peers = ImmutableHashSet <Peer> .Empty, TrustedAppProtocolVersionSigners = null, StaticPeers = ImmutableHashSet <BoundPeer> .Empty }; var blockPolicy = NineChroniclesNodeService.GetTestBlockPolicy(); var service = new NineChroniclesNodeService(userPrivateKey, properties, blockPolicy, NetworkType.Test); StandaloneContextFx.NineChroniclesNodeService = service; StandaloneContextFx.BlockChain = service.Swarm?.BlockChain; var query = $"query {{ activationKeyNonce(invitationCode: \"{code}\") }}"; var queryResult = await ExecuteQueryAsync(query); Assert.Single(queryResult.Errors); Assert.Equal(msg, queryResult.Errors.First().Message); }
public async Task ActivationStatus(bool existsActivatedAccounts) { var adminPrivateKey = new PrivateKey(); var adminAddress = adminPrivateKey.ToAddress(); var activatedAccounts = ImmutableHashSet <Address> .Empty; if (existsActivatedAccounts) { activatedAccounts = new[] { adminAddress }.ToImmutableHashSet(); } Block <PolymorphicAction <ActionBase> > genesis = BlockChain <PolymorphicAction <ActionBase> > .MakeGenesisBlock( HashAlgorithmType.Of <SHA256>(), new PolymorphicAction <ActionBase>[] { new InitializeStates( rankingState: new RankingState(), shopState: new ShopState(), gameConfigState: new GameConfigState(), redeemCodeState: new RedeemCodeState(Bencodex.Types.Dictionary.Empty .Add("address", RedeemCodeState.Address.Serialize()) .Add("map", Bencodex.Types.Dictionary.Empty) ), adminAddressState: new AdminState(adminAddress, 1500000), activatedAccountsState: new ActivatedAccountsState(activatedAccounts), goldCurrencyState: new GoldCurrencyState(new Currency("NCG", 2, minter: null)), goldDistributions: new GoldDistribution[0], tableSheets: _sheets, pendingActivationStates: new PendingActivationState[] { } ), } ); var apvPrivateKey = new PrivateKey(); var apv = AppProtocolVersion.Sign(apvPrivateKey, 0); var userPrivateKey = new PrivateKey(); var properties = new LibplanetNodeServiceProperties <PolymorphicAction <ActionBase> > { Host = System.Net.IPAddress.Loopback.ToString(), AppProtocolVersion = apv, GenesisBlock = genesis, StorePath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()), StoreStatesCacheSize = 2, SwarmPrivateKey = new PrivateKey(), Port = null, NoMiner = true, Render = false, Peers = ImmutableHashSet <Peer> .Empty, TrustedAppProtocolVersionSigners = null, StaticPeers = ImmutableHashSet <BoundPeer> .Empty }; var blockPolicy = NineChroniclesNodeService.GetTestBlockPolicy(); var service = new NineChroniclesNodeService(userPrivateKey, properties, blockPolicy, NetworkType.Test); StandaloneContextFx.NineChroniclesNodeService = service; StandaloneContextFx.BlockChain = service.Swarm?.BlockChain; var blockChain = StandaloneContextFx.BlockChain !; var queryResult = await ExecuteQueryAsync("query { activationStatus { activated } }"); var result = (bool)queryResult.Data .As <Dictionary <string, object> >()["activationStatus"] .As <Dictionary <string, object> >()["activated"]; // If we don't use activated accounts, bypass check (always true). Assert.Equal(!existsActivatedAccounts, result); var nonce = new byte[] { 0x00, 0x01, 0x02, 0x03 }; var privateKey = new PrivateKey(); (ActivationKey activationKey, PendingActivationState pendingActivation) = ActivationKey.Create(privateKey, nonce); PolymorphicAction <ActionBase> action = new CreatePendingActivation(pendingActivation); blockChain.MakeTransaction(adminPrivateKey, new[] { action }); await blockChain.MineBlock(adminPrivateKey); action = activationKey.CreateActivateAccount(nonce); blockChain.MakeTransaction(userPrivateKey, new[] { action }); await blockChain.MineBlock(adminPrivateKey); queryResult = await ExecuteQueryAsync("query { activationStatus { activated } }"); result = (bool)queryResult.Data .As <Dictionary <string, object> >()["activationStatus"] .As <Dictionary <string, object> >()["activated"]; Assert.True(result); }