internal async Task LoadDataAsync() { IsBusy = true; try { await Task.Run(() => { try { var response = PolkadotApi.GetStorage(new Address("5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"), "ProductTracking", "ShipmentsOfOrganization"); var shipments = PolkadotApi.Serializer.Deserialize <ShipmentIdList>(response.HexToByteArray()); var shipmentsObs = new ObservableCollection <ShipmentInfo>(shipments.ShipmentIds.Select(s => new ShipmentInfo { ShipmentId = s.ToString() })); Device.BeginInvokeOnMainThread(() => Shipments = shipmentsObs); } catch (Exception ex) { Trace.WriteLine(ex); } }); } finally { IsBusy = false; } }
public override void OnNavigatedFrom(INavigationParameters parameters) { if (!string.IsNullOrEmpty(transactionSid)) { PolkadotApi.UnsubscribeStorage(transactionSid); } }
private void QueryChainState() { try { if (!App.IsPolkadotApiConnected) { App.ConnectToNode(); } var response = PolkadotApi.GetStorage(new Address("5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"), "ProductRegistry", "ProductsOfOrganization"); var products = PolkadotApi.Serializer.Deserialize <ProductIdList>(response.HexToByteArray()); foreach (var product in products.ProductIds) { Trace.WriteLine(product); } var extrinsicExtensions = PolkadotApi.GetMetadata(new Polkadot.Data.GetMetadataParams()).GetExtrinsicExtension(); foreach (var ext in extrinsicExtensions) { Trace.WriteLine(ext); } } catch (System.Exception ex) { Trace.WriteLine(ex); } }
private async void SubmitRegisterProductExtrinsicAsync() { IsBusy = true; try { if (!App.IsPolkadotApiConnected) { App.ConnectToNode(); } _ = Task.Run(async() => { try { var ser = PolkadotApi.Serializer; var sender = new Address("5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"); var pub = AddressUtils.GetPublicKeyFromAddr(sender); var secret = "0x33A6F3093F158A7109F679410BEF1A0C54168145E0CECB4DF006C1C2FFFB1F09925A225D97AA00682D6A59B95B18780C10D7032336E88F3442B42361F4A66011"; var encodedExtrinsic = ser.Serialize(new RegisterProductCall( new Identifier("00012345678905"), pub, //Empty.Instance //OneOf.OneOf<Empty, ProductPropertyList>.FromT0(Empty.Instance) new ProductPropertyList(new[] { new ProductProperty( new Identifier("name"), new Identifier("Chocolate frog") ) }) ) ); Trace.WriteLine(encodedExtrinsic.ToPrefixedHexString()); var tcs = new TaskCompletionSource <string>(); var sid = PolkadotApi.SubmitAndSubcribeExtrinsic(encodedExtrinsic, "ProductRegistry", "register_product", sender, secret, str => tcs.SetResult(str)); Trace.WriteLine(sid); var result = await tcs.Task.WithTimeout(TimeSpan.FromMinutes(1)).ConfigureAwait(false); PolkadotApi.UnsubscribeStorage(sid); Trace.WriteLine(result); } catch (Exception ex) { Trace.WriteLine(ex); } }); } catch (System.Exception ex) { Trace.WriteLine(ex); } finally { IsBusy = false; } }
protected T GetValueFromStorageMap <T>(string module, string storageMap, object key) { var param = PolkadotApi.Serializer.Serialize(key); var paramKey = Hash.GetStorageKey(Hasher.BLAKE2, param, param.Length, PolkadotApi.Serializer); var response = PolkadotApi.GetStorage(paramKey.Concat(param).ToArray(), module, storageMap); return(PolkadotApi.Serializer.Deserialize <T>(response.HexToByteArray())); }
private async void SubmitTrackShipmentExtrinsicAsync() { IsBusy = true; try { if (!App.IsPolkadotApiConnected) { App.ConnectToNode(); } _ = Task.Run(async() => { try { var ser = PolkadotApi.Serializer; var sender = new Address("5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"); //var pub = AddressUtils.GetPublicKeyFromAddr(sender); var secret = "0x33A6F3093F158A7109F679410BEF1A0C54168145E0CECB4DF006C1C2FFFB1F09925A225D97AA00682D6A59B95B18780C10D7032336E88F3442B42361F4A66011"; var shipmentId = ser.Serialize(new Identifier("S0002")); var operation = Scale.EncodeCompactInteger(new BigInteger((int)ShippingOperation.Scan)); var timestamp = Scale.EncodeCompactInteger(DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()); var emptyArgs = new byte[2]; var buf = new byte[shipmentId.Length + operation.Length + timestamp.Length + emptyArgs.Length]; shipmentId.CopyTo(buf.AsMemory()); operation.Bytes.CopyTo(buf.AsMemory(shipmentId.Length)); timestamp.Bytes.CopyTo(buf.AsMemory(shipmentId.Length + (int)operation.Length)); emptyArgs.CopyTo(buf.AsMemory(shipmentId.Length + (int)operation.Length + (int)timestamp.Length)); var tcs = new TaskCompletionSource <string>(); var sid = PolkadotApi.SubmitAndSubcribeExtrinsic(buf, "ProductTracking", "TrackShipment", sender, secret, str => tcs.SetResult(str)); Trace.WriteLine(sid); var result = await tcs.Task.WithTimeout(TimeSpan.FromSeconds(30)).ConfigureAwait(false); PolkadotApi.UnsubscribeStorage(sid); Trace.WriteLine(result); } catch (Exception ex) { Trace.WriteLine(ex); } }); } catch (System.Exception ex) { Trace.WriteLine(ex); } finally { IsBusy = false; } }
private void SubmitTransferExtrinsic() { IsBusy = true; try { if (!App.IsPolkadotApiConnected) { App.ConnectToNode(); } _ = Task.Run(async() => { try { var sender = new Address("5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"); //var pub = AddressUtils.GetPublicKeyFromAddr(sender); var secret = "0x33A6F3093F158A7109F679410BEF1A0C54168145E0CECB4DF006C1C2FFFB1F09925A225D97AA00682D6A59B95B18780C10D7032336E88F3442B42361F4A66011"; var recipient = "5Ef1wcrhb5CVyZjpdYh9Keg81tgUPcsYi9uhNHC9uqjo7956"; var pub = AddressUtils.GetPublicKeyFromAddr(recipient); var compactAmount = Scale.EncodeCompactInteger(BigInteger.Parse("10")); var buf = new byte[pub.Bytes.Length + compactAmount.Bytes.Length]; pub.Bytes.CopyTo(buf.AsMemory()); compactAmount.Bytes.CopyTo(buf.AsMemory(pub.Bytes.Length)); Trace.WriteLine("Transfer Buf: " + buf.ToPrefixedHexString()); var call = new TransferCall(pub, BigInteger.Parse("10")); var encodedCall = PolkadotApi.Serializer.Serialize(call); Trace.WriteLine("Transfer Call: " + encodedCall.ToPrefixedHexString()); var tcs = new TaskCompletionSource <string>(); var sid = PolkadotApi.SubmitAndSubcribeExtrinsic(encodedCall, "balances", "transfer", sender, secret, str => tcs.SetResult(str)); Trace.WriteLine(sid); var result = await tcs.Task.WithTimeout(TimeSpan.FromSeconds(30)); PolkadotApi.UnsubscribeStorage(sid); Trace.WriteLine(result); } catch (Exception ex) { Trace.WriteLine(ex); } }); } catch (System.Exception ex) { Trace.WriteLine(ex); } finally { IsBusy = false; } }
public void Dispose() { if (eventSubs != null) { EventAggregator.GetEvent <ApiStatusEvent>().Unsubscribe(eventSubs); } if (!string.IsNullOrEmpty(blockSid)) { PolkadotApi.UnsubscribeBlockNumber(blockSid); } ((IDisposable)blockSubject).Dispose(); }
private void SignTransfer() { IsBusy = true; try { if (!App.IsPolkadotApiConnected) { App.ConnectToNode(); } _ = Task.Run(async() => { try { var sender = new Address("5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"); //var pub = AddressUtils.GetPublicKeyFromAddr(sender); var secret = "0x33A6F3093F158A7109F679410BEF1A0C54168145E0CECB4DF006C1C2FFFB1F09925A225D97AA00682D6A59B95B18780C10D7032336E88F3442B42361F4A66011"; var recipient = "5Ef1wcrhb5CVyZjpdYh9Keg81tgUPcsYi9uhNHC9uqjo7956"; var amount = BigInteger.Parse("10"); var tmp = Blake2B.ComputeHash(secret.HexToByteArray()); var tcs = new TaskCompletionSource <string>(); var sid = PolkadotApi.SignAndSendTransfer(sender.Symbols, secret, recipient, amount, res => tcs.SetResult(res)); Trace.WriteLine(sid); var result = await tcs.Task.WithTimeout(TimeSpan.FromSeconds(30)); PolkadotApi.UnsubscribeStorage(sid); Trace.WriteLine(result); } catch (Exception ex) { Trace.WriteLine(ex); } }); } catch (System.Exception ex) { Trace.WriteLine(ex); } finally { IsBusy = false; } }
public PeersInfo GetSystemPeers() { return(PolkadotApi.GetSystemPeers()); }
public SystemInfo GetSystemInfo() { return(PolkadotApi.GetSystemInfo()); }
private async Task TrackShipmentAsync(ShippingOperation operation) { TransactionProgress = 0.0f; TransactionStatus = ""; await Task.Run(() => { try { var ser = PolkadotApi.Serializer; //TODO: Implement account management var sender = new Address("5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"); var secret = "0x33A6F3093F158A7109F679410BEF1A0C54168145E0CECB4DF006C1C2FFFB1F09925A225D97AA00682D6A59B95B18780C10D7032336E88F3442B42361F4A66011"; var encodedExtrinsic = ser.Serialize( new TrackShipmentCall( new Identifier(ShipmentId), (int)operation, DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), new ReadPoint(), new ReadingList() ) ); Trace.WriteLine(encodedExtrinsic.ToPrefixedHexString()); transactionSid = PolkadotApi.SubmitAndSubcribeExtrinsic(encodedExtrinsic, "ProductTracking", "track_shipment", sender, secret, response => { Trace.WriteLine(response); var res = JObject.Parse(response); if (res.Value <string>("subscription") != transactionSid || !res.ContainsKey("result")) { return; } Device.BeginInvokeOnMainThread(() => { TransactionInProgress = true; var result = res["result"]; if (result is JValue value && (string)value.Value == "ready") { TransactionStatus = "valid"; TransactionProgress = 0.25f; } else if (result is JObject resObj) { if (resObj.ContainsKey("broadcast")) { TransactionStatus = "broadcasted to peers"; TransactionProgress = 0.5f; } else if (resObj.ContainsKey("inBlock")) { TransactionStatus = "in block " + resObj.Value <string>("inBlock"); TransactionProgress = 0.75f; } else if (resObj.ContainsKey("finalized")) { PolkadotApi.UnsubscribeStorage(transactionSid); transactionSid = null; TransactionStatus = "finalized"; TransactionProgress = 1.0f; _ = Task.Delay(2000).ContinueWith(_ => Device.BeginInvokeOnMainThread(() => TransactionInProgress = false)); } } }); }); }