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)); }
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; } }
/// <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)); }
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); }
/// <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)); }
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())); }
public void EncodingTest() { var callArguments = new GenericExtrinsicCall("", "", new AccountId("0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d"), new Balance(100)); Assert.AreEqual("D43593C715FDD31C61141ABD04A99FD6822C8558854CCDE39A5684E7A56DA27D9101", Utils.Bytes2HexString(callArguments.Encode(), Utils.HexStringFormat.PURE)); }
/// <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)); }
/// <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)); }
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);
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);