Пример #1
0
        internal async Task <string> GetExtrinsicParametersAsync(GenericExtrinsicCall callArguments, Account account, uint tip, uint lifeTime, CancellationToken token)
        {
            Method method = GetMethod(callArguments);

            uint nonce = await System.AccountNextIndexAsync(account.Address, token);

            Era  era;
            Hash startEra;

            if (lifeTime == 0)
            {
                era      = Era.Create(0, 0);
                startEra = GenesisHash;
            }
            else
            {
                startEra = await Chain.GetFinalizedHeadAsync(token);

                Header finalizedHeader = await Chain.GetHeaderAsync(startEra, token);

                era = Era.Create(lifeTime, finalizedHeader.Number);
            }

            var uncheckedExtrinsic = RequestGenerator.SubmitExtrinsic(true, account, method, era, nonce, tip, GenesisHash, startEra);

            return(Utils.Bytes2HexString(uncheckedExtrinsic.Encode(), Utils.HexStringFormat.PREFIXED));
        }
Пример #2
0
        public void EncodingTest()
        {
            var accountId = new AccountId();

            accountId.Create("0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d");

            var balance = new Balance();

            balance.Create(100);

            var callArguments = new GenericExtrinsicCall("", "", accountId, balance);

            switch (Constants.AddressVersion)
            {
            case 0:
                Assert.AreEqual("D43593C715FDD31C61141ABD04A99FD6822C8558854CCDE39A5684E7A56DA27D9101",
                                Utils.Bytes2HexString(callArguments.Encode(), Utils.HexStringFormat.Pure));
                break;

            case 1:
                Assert.AreEqual("FFD43593C715FDD31C61141ABD04A99FD6822C8558854CCDE39A5684E7A56DA27D9101",
                                Utils.Bytes2HexString(callArguments.Encode(), Utils.HexStringFormat.Pure));
                break;

            case 2:
                Assert.AreEqual("00D43593C715FDD31C61141ABD04A99FD6822C8558854CCDE39A5684E7A56DA27D9101",
                                Utils.Bytes2HexString(callArguments.Encode(), Utils.HexStringFormat.Pure));
                break;
            }
        }
Пример #3
0
        /// <summary>
        /// Get an unchecked extrinsic.
        /// </summary>
        /// <param name="callArguments"></param>
        /// <param name="account"></param>
        /// <param name="tip"></param>
        /// <param name="lifeTime"></param>
        /// <param name="signed"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public async Task <UnCheckedExtrinsic> GetExtrinsicParametersAsync(GenericExtrinsicCall callArguments, Account account, uint tip, uint lifeTime, bool signed, CancellationToken token)
        {
            var method = GetMethod(callArguments);

            var nonce = await System.AccountNextIndexAsync(account.Value, token);

            Era  era;
            Hash startEra;

            if (lifeTime == 0)
            {
                era      = Era.Create(0, 0);
                startEra = GenesisHash;
            }
            else
            {
                startEra = await Chain.GetFinalizedHeadAsync(token);

                var finalizedHeader = await Chain.GetHeaderAsync(startEra, token);

                era = Era.Create(lifeTime, finalizedHeader.Number.Value);
            }

            return(RequestGenerator.SubmitExtrinsic(signed, account, method, era, nonce, tip, GenesisHash, startEra, RuntimeVersion));
        }
Пример #4
0
        public async Task DoSomethingTestAsync()
        {
            var extrinsic_wait = 5000;

            var cts = new CancellationTokenSource();
            await _substrateClient.ConnectAsync(cts.Token);

            var u32 = new U32();

            u32.Create(77);

            var extrinsicCall = new GenericExtrinsicCall("TemplateModule", "do_something", u32);

            _ = await _substrateClient.Author.SubmitAndWatchExtrinsicAsync(ActionExtrinsicUpdate, extrinsicCall, Alice, 0, 64, cts.Token);

            Thread.Sleep(extrinsic_wait);

            var result = await _substrateClient.GetStorageAsync("TemplateModule", "Something", cts.Token);

            Assert.AreEqual("U32", result.GetType().Name);

            var something = result as U32;

            Assert.AreEqual(77, something.Value);
        }
Пример #5
0
        /// <summary>Submits the and watch extrinsic asynchronous.</summary>
        /// <param name="callback">The callback.</param>
        /// <param name="callArguments">The call arguments.</param>
        /// <param name="account">The account.</param>
        /// <param name="tip">The tip.</param>
        /// <param name="lifeTime">The life time.</param>
        /// <param name="token">The token.</param>
        /// <returns>
        ///   <br />
        /// </returns>
        public async Task <string> SubmitAndWatchExtrinsicAsync(Action <string, ExtrinsicStatus> callback,
                                                                GenericExtrinsicCall callArguments, Account account, uint tip, uint lifeTime, CancellationToken token)
        {
            var extrinsic = await _client.GetExtrinsicParametersAsync(callArguments, account, tip, lifeTime, signed : true, token);

            return(await SubmitAndWatchExtrinsicAsync(callback, Utils.Bytes2HexString(extrinsic.Encode()), token));
        }
Пример #6
0
        public Method GetMethod(GenericExtrinsicCall callArguments)
        {
            if (!MetaData.TryGetModuleByName(callArguments.ModuleName, out Module module) || !module.TryGetCallByName(callArguments.CallName, out Call call))
            {
                throw new MissingModuleOrItemException($"Module '{callArguments.ModuleName}' or Item '{callArguments.CallName}' missing in metadata of '{MetaData.Origin}'!");
            }

            if (call.Arguments?.Length > 0 && callArguments == null)
            {
                throw new MissingParameterException($"{callArguments.ModuleName}.{callArguments.CallName} needs {call.Arguments.Length} parameter(s)!");
            }

            return(new Method(module, call, callArguments?.Encode()));
        }
Пример #7
0
        public void EncodingTest()
        {
            var callArguments = new GenericExtrinsicCall("", "", new AccountId("0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"), new Balance(100));

            Assert.AreEqual("D43593C715FDD31C61141ABD04A99FD6822C8558854CCDE39A5684E7A56DA27D9101", Utils.Bytes2HexString(callArguments.Encode(), Utils.HexStringFormat.PURE));
        }
Пример #8
0
 /// <summary>
 /// Submits the generic extrinsic asynchronous.
 /// </summary>
 /// <param name="genericExtrinsicCall">The generic extrinsic call.</param>
 /// <returns></returns>
 public async Task <string> SubmitGenericExtrinsicAsync(GenericExtrinsicCall genericExtrinsicCall)
 {
     return(await Client.Author
            .SubmitAndWatchExtrinsicAsync(CallBackExtrinsic, genericExtrinsicCall, Account, 0, 64,
                                          _connectTokenSource.Token));
 }
Пример #9
0
        /// <summary>Submits the extrinsic asynchronous.</summary>
        /// <param name="callArguments">The call arguments.</param>
        /// <param name="account">The account.</param>
        /// <param name="tip">The tip.</param>
        /// <param name="lifeTime">The life time.</param>
        /// <param name="token">The token.</param>
        /// <returns>
        ///   <br />
        /// </returns>
        public async Task <Hash> SubmitExtrinsicAsync(GenericExtrinsicCall callArguments, Account account, uint tip, uint lifeTime, CancellationToken token)
        {
            var extrinsic = await _client.GetExtrinsicParametersAsync(callArguments, account, tip, lifeTime, signed : true, token);

            return(await SubmitExtrinsicAsync(Utils.Bytes2HexString(extrinsic.Encode()), token));
        }
Пример #10
0
 public async Task <string> SubmitAndWatchExtrinsicAsync(Action <ExtrinsicStatus> callback, GenericExtrinsicCall callArguments, Account account, uint tip, uint lifeTime, CancellationToken token) => await SubmitAndWatchExtrinsicAsync(callback, await _client.GetExtrinsicParametersAsync(callArguments, account, tip, lifeTime, token), token);
Пример #11
0
 public async Task <Hash> SubmitExtrinsicAsync(GenericExtrinsicCall callArguments, Account account, uint tip, uint lifeTime, CancellationToken token) => await SubmitExtrinsicAsync(await _client.GetExtrinsicParametersAsync(callArguments, account, tip, lifeTime, token), token);