Esempio n. 1
0
        public async Task GetChainAsync()
        {
            var cts = new CancellationTokenSource();
            await _substrateClient.ConnectAsync(cts.Token);

            var blockNumber = new BlockNumber();

            blockNumber.Create(0);

            var blockHash = await _substrateClient.Chain.GetBlockHashAsync(blockNumber);

            var blockHash1 = await _substrateClient.Chain.GetBlockHashAsync(blockNumber, cts.Token);

            Assert.AreEqual("Hash", blockHash.GetType().Name);
            Assert.AreEqual("Hash", blockHash1.GetType().Name);


            var block0 = await _substrateClient.Chain.GetBlockAsync();

            var block1 = await _substrateClient.Chain.GetBlockAsync(cts.Token);

            var block2 = await _substrateClient.Chain.GetBlockAsync(blockHash as Hash);

            var block3 = await _substrateClient.Chain.GetBlockAsync(blockHash as Hash, cts.Token);

            Assert.AreEqual("BlockData", block0.GetType().Name);
            Assert.AreEqual("BlockData", block1.GetType().Name);
            Assert.AreEqual("BlockData", block2.GetType().Name);
            Assert.AreEqual("BlockData", block3.GetType().Name);

            var header0 = await _substrateClient.Chain.GetHeaderAsync();

            var header1 = await _substrateClient.Chain.GetHeaderAsync(cts.Token);

            var header2 = await _substrateClient.Chain.GetHeaderAsync(blockHash as Hash);

            var header3 = await _substrateClient.Chain.GetHeaderAsync(blockHash as Hash, cts.Token);

            Assert.AreEqual("Header", header0.GetType().Name);
            Assert.AreEqual("Header", header1.GetType().Name);
            Assert.AreEqual("Header", header2.GetType().Name);
            Assert.AreEqual("Header", header3.GetType().Name);

            var finalizedHeader = await _substrateClient.Chain.GetFinalizedHeadAsync();

            var finalizedHeader1 = await _substrateClient.Chain.GetFinalizedHeadAsync(cts.Token);

            Assert.AreEqual("Hash", finalizedHeader.GetType().Name);
            Assert.AreEqual("Hash", finalizedHeader1.GetType().Name);

            await _substrateClient.CloseAsync();
        }
Esempio n. 2
0
        public void MogwaiStructTest()
        {
            var mogwaiStructStr = "0x89ab510f57802886c16922685a376edb536f762584dda569cda67381c4e4dec889ab510f57802886c16922685a376edb536f762584dda569cda67381c4e4dec871000000000000000000000000000000000000000000000000";
            var mogwaiStructA   = new MogwaiStruct();

            mogwaiStructA.Create(mogwaiStructStr);


            var mogwaiStructB = new MogwaiStruct();

            var id = new Hash();

            id.Create(mogwaiStructA.Id.Value);

            var dna = new Hash();

            dna.Create(mogwaiStructA.Dna.Value);

            var genesis = new BlockNumber();

            genesis.Create(mogwaiStructA.Genesis.Value);

            var price = new Balance();

            price.Create(mogwaiStructA.Price.Value);

            var gen = new U32();

            gen.Create(mogwaiStructA.Gen.Value);

            var rarity = new EnumType <RarityType>();

            rarity.Create(mogwaiStructA.Rarity.Bytes);

            mogwaiStructB.Create(id, dna, genesis, price, gen, rarity);

            Assert.AreEqual(mogwaiStructB.Id.Value, mogwaiStructA.Id.Value);
            Assert.AreEqual(mogwaiStructB.Dna.Value, mogwaiStructA.Dna.Value);
            Assert.AreEqual(mogwaiStructB.Genesis.Value, mogwaiStructA.Genesis.Value);
            Assert.AreEqual(mogwaiStructB.Price.Value, mogwaiStructA.Price.Value);
            Assert.AreEqual(mogwaiStructB.Gen.Value, mogwaiStructA.Gen.Value);
            Assert.AreEqual(mogwaiStructB.Rarity.Value, mogwaiStructA.Rarity.Value);
        }
Esempio n. 3
0
        public async Task CheckStorageCallsAsync()
        {
            // create new wallet with password and persist
            var wallet = new Wallet();

            await wallet.StartAsync();

            Assert.True(wallet.IsConnected);

            wallet.Load("dev_wallet");

            await wallet.UnlockAsync("aA1234dd");

            Assert.True(wallet.IsUnlocked);

            Assert.AreEqual("5FfzQe73TTQhmSQCgvYocrr6vh1jJXEKB8xUB6tExfpKVCEZ", wallet.Account.Value);

            Thread.Sleep(1000);

            Assert.True(BigInteger.Parse("400000000000000") < wallet.AccountInfo.AccountData.Free.Value);
            Assert.True(BigInteger.Parse("600000000000000") > wallet.AccountInfo.AccountData.Free.Value);

            var blockNumber = new BlockNumber();

            blockNumber.Create(10);
            var blockHash = await wallet.Client.Chain.GetBlockHashAsync(blockNumber);

            var header = await wallet.Client.Chain.GetHeaderAsync(blockHash);

            Assert.AreEqual(10, header.Number.Value);

            var countMogwais = (U64)await wallet.Client.GetStorageAsync("DotMogModule", "OwnedMogwaisCount",
                                                                        new[] { Utils.Bytes2HexString(wallet.Account.Bytes) });

            Assert.AreEqual(1, countMogwais.Value);


            await wallet.StopAsync();

            Assert.False(wallet.IsConnected);
        }
Esempio n. 4
0
        private static async Task RunBlockCallsAsync(CancellationToken cancellationToken)
        {
            using var client = new SubstrateClient(new Uri(Websocketurl));

            client.RegisterTypeConverter(new GenericTypeConverter <MogwaiStruct>());

            await client.ConnectAsync(cancellationToken);

            var systemName = await client.System.NameAsync(cancellationToken);

            var systemVersion = await client.System.VersionAsync(cancellationToken);

            var systemChain = await client.System.ChainAsync(cancellationToken);

            Console.WriteLine($"Connected to System: {systemName} Chain: {systemChain} Version: {systemVersion}.");
            // 544133 CreateMogwai();
            for (uint i = 0; i < 10; i++)
            {
                var blockNumber = new BlockNumber();
                blockNumber.Create(i);
                Console.WriteLine(blockNumber.Encode());

                Console.WriteLine(Utils.Bytes2HexString(blockNumber.Encode()));

                var blockHash = await client.Chain.GetBlockHashAsync(blockNumber, cancellationToken);

                //var block = await client.Chain.GetBlockAsync(blockHash, cancellationToken);

                // Print result
                //Console.WriteLine($"{i} --> {block.Block.Extrinsics.Length}");
                Console.WriteLine($"{i} --> {blockHash.Value}");
            }
            //Console.WriteLine(client.MetaData.Serialize());

            Console.ReadKey();

            // Close connection
            await client.CloseAsync(cancellationToken);
        }
Esempio n. 5
0
        /// <summary> Connects an asynchronous. </summary>
        /// <remarks> 19.09.2020. </remarks>
        /// <param name="token"> A token that allows processing to be cancelled. </param>
        /// <returns> An asynchronous result. </returns>
        public async Task ConnectAsync(CancellationToken token)
        {
            if (_socket != null && _socket.State == WebSocketState.Open)
            {
                return;
            }

            if (_socket == null || _socket.State != WebSocketState.None)
            {
                _jsonRpc?.Dispose();
                _socket?.Dispose();
                _socket = new ClientWebSocket();
            }

            _connectTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(30));
            var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(token, _connectTokenSource.Token);
            await _socket.ConnectAsync(_uri, linkedTokenSource.Token);

            linkedTokenSource.Dispose();
            _connectTokenSource.Dispose();
            _connectTokenSource = null;
            Logger.Debug("Connected to Websocket.");

            var formatter = new JsonMessageFormatter();

            // adding convertersto the formatter
            formatter.JsonSerializer.Converters.Add(new GenericTypeConverter <U8>());
            formatter.JsonSerializer.Converters.Add(new GenericTypeConverter <U16>());
            formatter.JsonSerializer.Converters.Add(new GenericTypeConverter <U32>());
            formatter.JsonSerializer.Converters.Add(new GenericTypeConverter <U64>());
            formatter.JsonSerializer.Converters.Add(new GenericTypeConverter <Hash>());
            formatter.JsonSerializer.Converters.Add(_extrinsicJsonConverter);
            formatter.JsonSerializer.Converters.Add(_extrinsicStatusJsonConverter);

            _jsonRpc = new JsonRpc(new WebSocketMessageHandler(_socket, formatter));
            _jsonRpc.TraceSource.Listeners.Add(new NLogTraceListener());
            _jsonRpc.TraceSource.Switch.Level = SourceLevels.Warning;
            _jsonRpc.AddLocalRpcTarget(Listener, new JsonRpcTargetOptions {
                AllowNonPublicInvocation = false
            });
            _jsonRpc.StartListening();
            Logger.Debug("Listening to websocket.");

            var result = await State.GetMetaDataAsync(token);

            var metaDataParser = new MetaDataParser(_uri.OriginalString, result);

            MetaData = metaDataParser.MetaData;
            Logger.Debug("MetaData parsed.");

            var genesis = new BlockNumber();

            genesis.Create(0);
            GenesisHash = await Chain.GetBlockHashAsync(genesis, token);

            Logger.Debug("Genesis hash parsed.");

            RuntimeVersion = await State.GetRuntimeVersionAsync(token);

            Logger.Debug("Runtime version parsed.");

            _jsonRpc.TraceSource.Switch.Level = SourceLevels.All;
        }