diff --git a/package.json b/package.json
index e2cbe845634233b6c389514b009691f14ee6b286..739570e65e265d08348442c614b35e7ab99828d9 100644
--- a/package.json
+++ b/package.json
@@ -40,10 +40,13 @@
     "@ionic/storage-angular": "^3.0.6",
     "@ngx-translate/core": "^14.0.0",
     "@ngx-translate/http-loader": "^7.0.0",
-    "@polkadot/api": "^8.9.1",
-    "@polkadot/keyring": "^9.6.1",
-    "@polkadot/ui-keyring": "^2.6.1",
-    "@polkadot/ui-settings": "^2.6.1",
+    "@polkadot/api": "^9.2.4",
+    "@polkadot/util": "^10.1.6",
+    "@polkadot/util-crypto": "^10.1.6",
+    "@polkadot/keyring": "^10.1.6",
+    "@polkadot/networks": "^10.1.6",
+    "@polkadot/ui-keyring": "^2.9.7",
+    "@polkadot/ui-settings": "^2.9.7",
     "crypto-browserify": "^3.12.0",
     "jdenticon": "^3.1.1",
     "moment": "^2.29.3",
@@ -67,8 +70,8 @@
     "@angular/language-service": "^14.2.0",
     "@capacitor/cli": "4.1.0",
     "@ionic/angular-toolkit": "^6.1.0",
-    "@polkadot/typegen": "^8.9.1",
-    "@polkadot/types": "^8.9.1",
+    "@polkadot/typegen": "^9.2.4",
+    "@polkadot/types": "^9.2.4",
     "@types/jasmine": "~4.0.3",
     "@types/jasminewd2": "~2.0.10",
     "@types/node": "^12.20.55",
diff --git a/src/app/network/currency.model.ts b/src/app/network/currency.model.ts
index c735f7a9489a6c998b3117da1afa01345851f170..4f4f1d1c2bc300e5eff053348dfe8a4f7c42b651 100644
--- a/src/app/network/currency.model.ts
+++ b/src/app/network/currency.model.ts
@@ -3,4 +3,9 @@ export interface Currency {
   symbol: string;
   ss58Format: number;
   genesys: string;
+  fees: {
+    identity: number;
+    tx: number;
+  },
+  decimals: number;
 }
diff --git a/src/app/network/network.service.ts b/src/app/network/network.service.ts
index 05b34be7cc49a8977c670187db5c64d52a19ac00..84acf88ea69216fc73d6534c45f463a67b7e8859 100644
--- a/src/app/network/network.service.ts
+++ b/src/app/network/network.service.ts
@@ -5,21 +5,30 @@ import {Peer, Peers} from "./peer.model";
 import {StartableService} from "@app/shared/services/startable-service.class";
 import {abbreviate} from "@app/shared/currencies";
 import {Currency} from "@app/network/currency.model";
-import {cryptoWaitReady} from "@polkadot/util-crypto";
 //import * as definitions from '@duniter/core-types/interfaces'
 
 const WELL_KNOWN_CURRENCIES = Object.freeze({
-  'Ğdev': <Currency>{
+  'Ğdev': <Partial<Currency>>{
     name: 'Ğdev',
     symbol: 'ĞD',
     ss58Format: 42,
-    genesys: '0x096baa94878da1965c8a7929212f4e7a5f6a813cdcbbb401603b39e5e470b6e0'
+    genesys: '0x07c112ff6ab9d7d0d531ebe59f98b35318b2813b1655577380819d38d6182d99',
+    fees: {
+      identity: 300, // = 3 Gdev
+      tx: 1 // = 0.01 Gdev
+    },
+    decimals: 2
   },
-  'Ğ1': <Currency>{
+  'Ğ1': <Partial<Currency>>{
     name: 'Ğ1',
     symbol: 'Ğ1',
     ss58Format: 42,
-    genesys: '0x___TODO___'
+    genesys: '0x___TODO___',
+    fees: {
+      identity: 300, // = 3G1 - FIXME
+      tx: 1 // = 0.01 G1 - FIXME
+    },
+    decimals: 2 // FIXME remove for autodetection
   }
 });
 
@@ -36,7 +45,7 @@ export class NetworkService extends StartableService<ApiPromise> {
     return this._data;
   }
 
-  get currencySign(): string {
+  get currencySymbol(): string {
     return this.currency.symbol || '';
   }
 
@@ -73,23 +82,35 @@ export class NetworkService extends StartableService<ApiPromise> {
       //,...types
     });
 
-    // get the chain information
+    // Get the chain information
     const chainInfo = await api.registry.getChainProperties();
-    console.debug(`${this._logPrefix}Connecting to chain: `, chainInfo.toHuman());
+    const chain = '' + (await api.rpc.system.chain());
+    const genesys = api.genesisHash.toHex();
 
-    // Read the genesys block hash
-    console.info(`${this._logPrefix}Blockchain genesis: ` + api.genesisHash.toHex());
+    console.info(`${this._logPrefix}Connecting to chain {${chain}}: `, chainInfo.toHuman());
 
-    // Retrieve the chain name
-    const chain = '' + (await api.rpc.system.chain());
+    // Check is well known currency
     if (WELL_KNOWN_CURRENCIES[chain]) {
-      this.currency = WELL_KNOWN_CURRENCIES[chain];
+      const wellKnownCurrency = WELL_KNOWN_CURRENCIES[chain];
+      if (wellKnownCurrency.genesys && wellKnownCurrency.genesys !== genesys) {
+        console.warn(`${this._logPrefix}Invalid genesys for ${chain}! Expected ${wellKnownCurrency.genesys} but peer return ${genesys}`);
+      }
+      else {
+        this.currency = WELL_KNOWN_CURRENCIES[chain];
+      }
     }
-    this.currency.symbol = this.currency.symbol || abbreviate(this.currency.name);
+    this.currency.name = this.currency.name || chain;
+    this.currency.symbol = this.currency.symbol || chainInfo.tokenSymbol.value?.[0].toHuman() || abbreviate(this.currency.name);
+    this.currency.decimals = this.currency.decimals || +(chainInfo.tokenDecimals.value?.[0].toHuman()) || 0;
+
+    // Read the genesys block hash
+    console.debug(`${this._logPrefix}Blockchain symbol: ${this.currency.symbol}`);
+    console.debug(`${this._logPrefix}Blockchain decimals: ${this.currency.decimals}`);
+    console.debug(`${this._logPrefix}Blockchain genesis: ${genesys}`);
 
     // Retrieve the latest header
     const lastHeader = await api.rpc.chain.getHeader();
-    console.info(`${this._logPrefix}${this.currency.name} - last block #${lastHeader.number} has hash ${lastHeader.hash}`);
+    console.info(`${this._logPrefix}Last block: #${lastHeader.number} - hash ${lastHeader.hash}`);
 
     return api;
   }
diff --git a/src/app/shared/pages/base.page.ts b/src/app/shared/pages/base.page.ts
index 7587ed02d60b157a0d2438eb7ab21c684652d790..3fd1a33429ad69cd434a704b9d2e50cdf39bb35e 100644
--- a/src/app/shared/pages/base.page.ts
+++ b/src/app/shared/pages/base.page.ts
@@ -90,34 +90,34 @@ export abstract class BasePage<
 
   protected abstract ngOnLoad(): Promise<S>;
 
-  protected setError(err) {
+  protected setError(err, opts =  {emitEvent: true}) {
     let message = err?.message || err || 'ERROR.UNKNOWN_ERROR';
     if (!message) {
       console.error(err);
       message = 'ERROR.UNKNOWN_ERROR';
     }
     this.error = message;
-    this.markForCheck();
+    if (opts.emitEvent !== false) this.markForCheck();
   }
 
-  protected resetError() {
+  protected resetError(opts ={emitEvent: true}) {
     if (this.error) {
       this.error = null;
-      this.markForCheck();
+      if (opts.emitEvent !== false) this.markForCheck();
     }
   }
 
-  protected markAsLoading() {
+  protected markAsLoading(opts =  {emitEvent: true}) {
     if (!this.loading) {
       this.loading = true;
-      this.markForCheck();
+      if (opts.emitEvent !== false) this.markForCheck();
     }
   }
 
-  protected markAsLoaded() {
+  protected markAsLoaded(opts =  {emitEvent: true}) {
     if (this.loading) {
       this.loading = false;
-      this.markForCheck();
+      if (opts.emitEvent !== false) this.markForCheck();
     }
   }
 
diff --git a/src/app/shared/pipes/amount.pipe.ts b/src/app/shared/pipes/amount.pipe.ts
index fb39d71480f0e6e1df027f21de1cf6c61a34c522..f1ba3d74a98c622db2dc6616d68813d48a744b42 100644
--- a/src/app/shared/pipes/amount.pipe.ts
+++ b/src/app/shared/pipes/amount.pipe.ts
@@ -15,6 +15,6 @@ export class AmountFormatPipe extends NumberFormatPipe {
 
   transform(val: number, opts?: Intl.NumberFormatOptions & {fixedDecimals?: number}): string {
     if (isNil(val)) return '';
-    return super.transform(val / 100, opts) + (' ' + this.networkService.currencySign);
+    return super.transform(val / 100, opts) + (' ' + this.networkService.currencySymbol);
   }
 }
diff --git a/src/app/transfer/transfer-routing.module.ts b/src/app/transfer/transfer-routing.module.ts
index 3bc695c1d5df6cc6c586e24ab25f95e57e09292b..2fa7c7106111737f65ea42da508b353e28dcd5aa 100644
--- a/src/app/transfer/transfer-routing.module.ts
+++ b/src/app/transfer/transfer-routing.module.ts
@@ -8,6 +8,16 @@ const routes: Routes = [
     path: '',
     pathMatch: 'full',
     component: TransferPage
+  },
+  {
+    path: 'from/:from',
+    pathMatch: 'full',
+    component: TransferPage
+  },
+  {
+    path: 'to/:to',
+    pathMatch: 'full',
+    component: TransferPage
   }
 ];
 
diff --git a/src/app/transfer/transfer.page.html b/src/app/transfer/transfer.page.html
index 93d5530ce5d77b9ff9e2b3d8afcacf8f9c69df0f..5adabc5b2bea7e6b1a6f26845c82d23a3a46f217 100644
--- a/src/app/transfer/transfer.page.html
+++ b/src/app/transfer/transfer.page.html
@@ -13,11 +13,12 @@
       <ion-title size="large" translate>TRANSFER.TITLE</ion-title>
     </ion-toolbar>
   </ion-header>
+
   <div id="container">
 
     <ion-list>
       <!-- error -->
-      <ion-item *ngIf="error" lines="none" color="light">
+      <ion-item *ngIf="error" lines="none" color="light" class="error">
         <ion-icon slot="start" name="alert-circle" color="danger"></ion-icon>
         <ion-label color="danger">{{error|translate}}</ion-label>
       </ion-item>
@@ -59,7 +60,10 @@
                 <span *ngIf="account|balance; let balance">({{balance|amountFormat}})</span>
               </ion-select-option>
             </ion-select>
-            <ion-badge *ngIf="issuer" slot="end">{{issuer|balance|amountFormat}}</ion-badge>
+            <ion-badge *ngIf="issuer|balance; let balance" slot="end"
+              [color]="amount+fee>balance ? 'danger' : 'success'">
+              {{balance|amountFormat}}
+            </ion-badge>
           </ng-container>
         </ng-template>
       </ion-item>
@@ -69,12 +73,14 @@
         <ion-input type="number" [(ngModel)]="amount">
 
         </ion-input>
+        <ion-label color="medium" slot="end" *ngIf="currency">{{currency.symbol}}</ion-label>
       </ion-item>
 
       <ion-item lines="none">
         <ion-toggle [(ngModel)]="showComment">
         </ion-toggle>
         <ion-label class="ion-text-start" color="medium" translate>TRANSFER.BTN_ADD_COMMENT</ion-label>
+        <ion-badge slot="end" *ngIf="amount && fee">{{'TRANSFER.FEE'|translate:{fee: fee, currency: currency.symbol} }}</ion-badge>
       </ion-item>
 
       <ion-item  *ngIf="showComment">
@@ -82,14 +88,13 @@
 
         </ion-textarea>
       </ion-item>
-
     </ion-list>
 
     <div class="ion-text-center" *ngIf="!mobile">
-      <ion-button (click)="cancel($event)" color="light">
+      <ion-button (click)="cancel($event)" color="light" [disabled]="loading">
         <ion-label translate>COMMON.BTN_CANCEL</ion-label>
       </ion-button>
-      <ion-button (click)="submit($event)">
+      <ion-button (click)="submit($event)" [disabled]="loading||invalid">
         <ion-icon slot="start" name="paper-plane"></ion-icon>
         <ion-label translate>TRANSFER.BTN_SEND</ion-label>
       </ion-button>
@@ -118,10 +123,10 @@
 </ion-content>
 
 <ion-footer *ngIf="mobile">
-  <ion-button (click)="cancel($event)" color="light">
+  <ion-button (click)="cancel($event)" color="light" [disabled]="loading">
     <ion-label translate>COMMON.BTN_CANCEL</ion-label>
   </ion-button>
-  <ion-button (click)="submit($event)">
+  <ion-button (click)="submit($event)" [disabled]="loading||invalid">
     <ion-icon slot="start" name="paper-plane"></ion-icon>
     <ion-label translate>TRANSFER.BTN_SEND</ion-label>
   </ion-button>
diff --git a/src/app/transfer/transfer.page.ts b/src/app/transfer/transfer.page.ts
index 9dc265f6735582862fbf8a20b3c6f6b244ea61fc..36ea83e5afff9519dda63ef95a589e765069f615 100644
--- a/src/app/transfer/transfer.page.ts
+++ b/src/app/transfer/transfer.page.ts
@@ -12,9 +12,11 @@ import {BasePage} from "@app/shared/pages/base.page";
 import {Account} from "@app/wallet/account.model";
 import {ActionSheetOptions, IonModal, PopoverOptions} from "@ionic/angular";
 import {BehaviorSubject, firstValueFrom, Observable} from "rxjs";
-import {isNotEmptyArray} from "@app/shared/functions";
+import {isNotEmptyArray, isNotNilOrBlank} from "@app/shared/functions";
 import {filter} from "rxjs/operators";
 import {WotLookupPage} from "@app/wot/wot-lookup.page";
+import {NetworkService} from "@app/network/network.service";
+import {Currency} from "@app/network/currency.model";
 
 @Component({
   selector: 'app-transfer',
@@ -28,6 +30,7 @@ export class TransferPage extends BasePage<Observable<Account[]>> implements OnI
   issuer: Account = null;
   recipient: Account = {address: null, meta: null};
   amount: number;
+  fee: number;
 
   protected actionSheetOptions: Partial<ActionSheetOptions> = {
     cssClass: 'select-account-action-sheet'
@@ -44,10 +47,24 @@ export class TransferPage extends BasePage<Observable<Account[]>> implements OnI
     return (this.issuer.data.free || 0) + (this.issuer.data.reserved || 0);
   }
 
+  get currency(): Currency {
+    return this.networkService.currency;
+  }
+
+  get valid(): boolean {
+    const valid = this.amount > 0 && isNotNilOrBlank(this.issuer?.address) && isNotNilOrBlank(this.recipient?.address);
+    console.log(valid);
+    return valid;
+  }
+
+  get invalid(): boolean {
+    return !this.valid;
+  }
 
   constructor(
     injector: Injector,
     protected accountService: AccountService,
+    protected networkService: NetworkService,
     protected cd: ChangeDetectorRef
   ) {
     super(injector, {name: 'transfer', loadDueTime: 250});
@@ -76,11 +93,24 @@ export class TransferPage extends BasePage<Observable<Account[]>> implements OnI
 
     const accounts = await firstValueFrom(subject);
 
+    // Load issuer
+    const issuerAddress = this.activatedRoute.snapshot.paramMap.get('from');
+    if (isNotNilOrBlank(issuerAddress)) {
+      this.issuer = (accounts||[]).find(a => a.address === issuerAddress);
+    }
     // Only one account: select it
-    if (accounts?.length === 1) {
+    else if (accounts?.length === 1) {
       this.issuer = accounts[0];
     }
 
+    // Load receiver
+    const receiverAddress = this.activatedRoute.snapshot.paramMap.get('to');
+    if (isNotNilOrBlank(receiverAddress)) {
+      this.recipient.address = receiverAddress;
+    }
+
+    this.fee = (this.networkService.currency?.fees.tx || 0) / Math.pow(10, this.networkService.currency?.decimals || 0);
+
     return subject;
   }
 
@@ -95,26 +125,39 @@ export class TransferPage extends BasePage<Observable<Account[]>> implements OnI
   }
 
   cancel(event?: UIEvent) {
-    //
+    this.reset();
   }
 
   async submit(event?: UIEvent) {
     // Check valid
     if (!this.recipient || !this.issuer) return; // Skip
 
+    this.markAsLoading();
     this.resetError();
 
     try {
-      const txHash = await this.accountService.transfer(this.issuer, this.recipient, this.amount);
+      await this.accountService.transfer(this.issuer, this.recipient, this.amount);
 
       await this.showToast({message: 'INFO.TRANSFER_SENT'});
+
+      this.reset();
     }
     catch (err) {
       this.setError(err);
+      this.markAsLoaded();
     }
   }
 
-  compareWith(a1: Account, a2: Account) {
+  protected compareWith(a1: Account, a2: Account) {
     return a1.address === a2.address;
   }
+
+  protected reset() {
+    this.showComment = false;
+    this.issuer = null;
+    this.recipient = {address: null, meta: null};
+    this.amount = null;
+    this.markAsLoaded();
+    this.markForCheck();
+  }
 }
diff --git a/src/app/wallet/account.service.ts b/src/app/wallet/account.service.ts
index 75115eac2154bda7b0d11056e54cebe0cbd1403f..2023a27a959b2ebfa98285f9a616a1130a90fe97 100644
--- a/src/app/wallet/account.service.ts
+++ b/src/app/wallet/account.service.ts
@@ -41,6 +41,7 @@ export interface LoadAccountDataOptions {
   reload?: boolean;
   withTx?: boolean;
   withBalance?: boolean;
+  emitEvent?: boolean;
 }
 
 @Injectable({providedIn: 'root'})
@@ -372,34 +373,49 @@ export class AccountService extends StartableService {
     return await this.loadData(account, opts);
   }
 
-  async transfer(from: Partial<Account>, to: Partial<Account>, amount: number) : Promise<string> {
+  async transfer(from: Partial<Account>, to: Partial<Account>, amount: number, fee?: number) : Promise<string> {
     if (!from || !to) throw new Error('Missing argument \'from\' or \'to\' !');
+    const currency = this.network.currency;
+
+    // Check currency
+    if (!currency) throw new Error('ERROR.CHECK_NETWORK_CONNECTION');
+
+    // Check amount
     if (isNilOrNaN(amount)) {
       throw new Error('ERROR.AMOUNT_REQUIRED');
     }
     if (amount < 0) {
       throw new Error('ERROR.AMOUNT_NEGATIVE');
     }
-    // Same issuer/recipient
+
+    // Check fee
+    fee = fee || currency.fees.tx || 0;
+    if (fee < 0) {
+      throw new Error('ERROR.FEE_NEGATIVE');
+    }
+
+    // Check issuer != recipient
     if (from.address === to.address) {
       throw new Error('ERROR.SAME_TX_RECIPIENT');
     }
-    // the address we use to use for signing, as injected
-    //const issuer = from.address ? await this.getByAddress(from.address) : await this.getByAddress(from.meta?.name);
-
 
+    // Get issuer account
     const issuerAccount = await this.getByAddress(from.address);
-    // Not enough credit
-    if (amount > issuerAccount.data.free) {
+
+    // Check enough credit
+    if ((amount + fee) > issuerAccount.data.free) {
       throw new Error('ERROR.NOT_ENOUGH_CREDIT');
     }
 
     console.info(`[account-service] Sending ${amount} :\nfrom: ${from.address}\nto ${to.address}`)
 
-    const issuerPair = keyring.getPair(issuerAccount.address);
-    const convertedAmount = Math.floor(amount * 100);
 
-    // Unlock
+    // Compute total amount (with fee) and remove decimals
+    const powBase = Math.pow(10, currency.decimals || 0);
+    const totalAmount = Math.floor((amount + fee) * powBase);
+
+    // Get pair, and unlock it
+    const issuerPair = keyring.getPair(issuerAccount.address);
     if (issuerPair.isLocked) {
       console.debug(`[account-service] Unlocking address ${from.address} ...`);
       const isAuth = await this.auth();
@@ -410,29 +426,23 @@ export class AccountService extends StartableService {
     try {
       // Sign and send a transfer from Alice to Bob
        const txHash = await this.api.tx.balances
-         .transfer(to.address, convertedAmount)
+         .transfer(to.address, totalAmount)
          .signAndSend(issuerPair, async ({status, events, findRecord}) => {
             if (status.isInBlock) {
               console.info(`${this._logPrefix}Completed at block hash #${status.hash.toHuman()}`);
 
               if (this._debug) console.debug(`${this._logPrefix}Block events:`, JSON.stringify(events));
 
-              await sleep(200);
-              // Update issuer account
-              //issuerAccount.data.free -= amount;
+              let outdatedAccounts = [issuerAccount];
 
               // Update receiver account
               if (await this.isAvailable(to.address)) {
                 const toAccount = await this.getByAddress(to.address);
-                //toAccount.data.free += amount;
-
-                await this.loadData(toAccount, {reload: true});
+                outdatedAccounts.push(toAccount);
               }
 
-              await this.loadData(issuerAccount, {reload: true});
-
-              // Notify account changes
-              this.notifyChanged();
+              await sleep(200);
+              await this.refreshData(outdatedAccounts, {reload: true});
 
             } else {
               console.info(`Current status`, status.toHuman());
@@ -466,25 +476,57 @@ export class AccountService extends StartableService {
       ...opts
     };
 
-    // Load balance (free + reserved)
-    if (opts.withBalance === true && (isNil(account.data?.free) || opts.reload === true)) {
-      const {data} = await this.api.query.system.account(account.address);
-      account.data = {
-        ...account.data,
-        ...JSON.parse(data.toString())
-      };
-    }
+    try {
+      const now = Date.now();
+      let loaded = false;
+
+      // Load balance (free + reserved)
+      if (opts.withBalance === true && (isNil(account.data?.free) || opts.reload === true)) {
+        console.debug(`${this._logPrefix} Loading ${account.address} data...`);
+        const {data} = await this.api.query.system.account(account.address);
+        account.data = {
+          ...account.data,
+          ...JSON.parse(data.toString())
+        };
+        loaded = true;
+      }
 
-    // Load TX
-    if (opts.withTx === true && (isNil(account.data?.txs) || opts.reload === true)) {
-      console.warn('[account-service] TODO - Implement load Tx');
-    }
+      // Load TX
+      if (opts.withTx === true && (isNil(account.data?.txs) || opts.reload === true)) {
+        console.debug(`${this._logPrefix} Loading ${account.address} TX history...`);
+        console.warn('[account-service] TODO - Implement load TX history');
+        // TODO
+        //somethingLoaded = true;
+      }
 
-    console.debug(`${this._logPrefix} Loaded ${account.address} data:`, account.data);
+      if (loaded) {
+        console.debug(`${this._logPrefix} Loading ${account.address} data [OK] in ${Date.now()-now}`, account.data);
+      }
+
+    }
+    catch(err) {
+      console.error(`${this._logPrefix}Failed to load ${account.address} data:`, err);
+      throw new Error('ERROR.LOAD_WALLET_DATA_ERROR');
+    }
 
     return account;
   }
 
+  private async refreshData(accounts: Account|Account[], opts?: LoadAccountDataOptions) {
+    const array = Array.isArray(accounts) ? accounts : [accounts];
+    try {
+      const jobs = array.map(account => this.loadData(account, opts));
+      await Promise.all(jobs);
+
+      // Notify accounts changed
+      if (!opts || opts.emitEvent !== false) this.notifyChanged();
+    }
+    catch(err) {
+      console.error(`${this._logPrefix}Failed to refresh data of:`, array.map(a => a.address));
+      throw new Error('ERROR.UPDATE_WALLET_LIST_FAILED');
+    }
+  }
+
   private notifyChanged() {
     this._$accounts.next(this._$accounts.value.slice() /*create a copy*/);
   }
diff --git a/src/app/wallet/wallet.page.html b/src/app/wallet/wallet.page.html
index dfd6313aedd9f22ea266c76b176f41a4f970a723..1762ca4cb38c6947bfab17a1fa50e57e8b0052f5 100644
--- a/src/app/wallet/wallet.page.html
+++ b/src/app/wallet/wallet.page.html
@@ -25,6 +25,11 @@
 <ion-content [fullscreen]="true">
   <ion-header>
     <ion-toolbar class="ion-text-end" color="secondary">
+      <ion-buttons slot="start">
+        <ion-button *ngIf="loaded" (click)="qrCodeModal.present()">
+          <ion-icon slot="icon-only" name="qr-code"></ion-icon>
+        </ion-button>
+      </ion-buttons>
       <ion-title size="large" *ngIf="loaded; else loadingText">
         {{ balance | amountFormat }}
       </ion-title>
@@ -50,6 +55,7 @@
                    [value]="data?.address"
                    readonly>
         </ion-input>
+
         <ion-button slot="end" (click)="copyAddress()"
                     [disabled]="loading"
                     fill="clear" [title]="'COMMON.COPY'|translate">
@@ -72,7 +78,8 @@
     </ion-list>
 
     <div class="ion-text-center">
-      <ion-button [routerLink]="'../../transfer'">
+      <ion-button [routerLink]="['/transfer', 'from', data?.address]"
+                  [disabled]="loading">
         <ion-icon slot="start" name="paper-plane"></ion-icon>
         <ion-label translate>COMMON.BTN_SEND_MONEY</ion-label>
       </ion-button>
@@ -94,3 +101,15 @@
     </ion-content>
   </ng-template>
 </ion-modal>
+
+
+<ion-modal
+  #qrCodeModal
+  [backdropDismiss]="true"
+>
+  <ng-template>
+    <ion-content scrollY="false">
+      QRCODE
+    </ion-content>
+  </ng-template>
+</ion-modal>
diff --git a/src/app/wallet/wallet.page.ts b/src/app/wallet/wallet.page.ts
index 28a0746766eaf3f0da775f21bc05afcd8c5b1dc2..e6de42b2ba154651ab62131f59b39279a690a134 100644
--- a/src/app/wallet/wallet.page.ts
+++ b/src/app/wallet/wallet.page.ts
@@ -2,12 +2,10 @@ import {AfterViewChecked, ChangeDetectionStrategy, Component, Injector, OnInit,
 import {AccountService} from "./account.service";
 import {Clipboard} from "@capacitor/clipboard";
 import {BasePage} from "@app/shared/pages/base.page";
-import {Account, AccountData} from "@app/wallet/account.model";
-import {isEmptyArray, isNilOrBlank} from "@app/shared/functions";
-import {keyring} from "@polkadot/ui-keyring";
+import {Account} from "@app/wallet/account.model";
+import {isEmptyArray} from "@app/shared/functions";
 import {NetworkService} from "@app/network/network.service";
 import {BehaviorSubject} from "rxjs";
-import {AuthModal} from "@app/auth/auth.modal";
 import {IonModal} from "@ionic/angular";
 import {Router} from "@angular/router";
 
@@ -39,6 +37,8 @@ export class WalletPage extends BasePage<Account> implements OnInit, AfterViewCh
 
   @ViewChild('authModal') authModal: IonModal;
 
+  @ViewChild('qrCodeModal') qrCodeModal: IonModal;
+
   constructor(
     injector: Injector,
     protected router: Router,
@@ -70,7 +70,7 @@ export class WalletPage extends BasePage<Account> implements OnInit, AfterViewCh
   protected async ngOnLoad(): Promise<Account> {
 
     this.info('Loading page...');
-    this.currency = this.networkService.currencySign;
+    this.currency = this.networkService.currencySymbol;
 
     const accounts = await this.accountService.getAll();
     this.$account.next(accounts);
@@ -104,12 +104,19 @@ export class WalletPage extends BasePage<Account> implements OnInit, AfterViewCh
   }
 
   async copyAddress() {
+    if (this.loading || !this.data?.address) return; // Skip
+
     await Clipboard.write({
-      string: this.data?.address
+      string: this.data.address
     });
     await this.showToast({message: 'INFO.COPY_TO_CLIPBOARD_DONE'});
   }
 
+  async showQrCode() {
+    if (this.qrCodeModal.isOpen) return; // Skip
+    this.qrCodeModal.present();
+  }
+
   async openAuthModal(): Promise<Account|null> {
     if (!this.authModal.isOpen) {
       await this.authModal.present();
diff --git a/src/app/wot/wot-details.page.html b/src/app/wot/wot-details.page.html
index bab7bc50123e6c155b703f34b21e7263c844180d..153114a1465f32f29d75b4b8488fcde8273a78ae 100644
--- a/src/app/wot/wot-details.page.html
+++ b/src/app/wot/wot-details.page.html
@@ -2,68 +2,65 @@
   <ion-toolbar color="primary">
     <ion-buttons slot="start">
       <ion-menu-button></ion-menu-button>
+      <ion-back-button></ion-back-button>
     </ion-buttons>
-    <ion-title translate>MENU.WOT</ion-title>
+    <ion-title size="large">{{data|accountName}}</ion-title>
   </ion-toolbar>
 </ion-header>
 
 <ion-content [fullscreen]="true">
+  <ion-header collapse="condense" *ngIf="showToolbar">
+    <ion-toolbar>
+      <ion-title size="large">{{data|accountName}}</ion-title>
+    </ion-toolbar>
+  </ion-header>
 
   <div id="container">
 
-    <ion-searchbar [placeholder]="'WOT.SEARCH_HELP'|translate"
-                   (change)="search()"
-                   (click)="searchClick.emit($event)">
-    </ion-searchbar>
+    <ion-header>
+      <ion-toolbar class="ion-text-end" color="secondary">
+        <ion-avatar slot="start" *ngIf="data?.meta?.avatar">
+          <ion-img [src]="data.meta.avatar"></ion-img>
+        </ion-avatar>
+        <ion-title size="large" *ngIf="loaded; else loadingText">
+          {{ data|balance|amountFormat }}
+        </ion-title>
+        <ng-template #loadingText>
+          <ion-title translate>COMMON.LOADING</ion-title>
+        </ng-template>
+      </ion-toolbar>
+    </ion-header>
 
     <ion-list>
+      <ion-item>
+        <ion-icon slot="start" name="key"></ion-icon>
+        <ion-label color="medium" translate>COMMON.PUBKEY</ion-label>
+        <ion-input *ngIf="loaded; else skeleton60"
+                   class="ion-text-end"
+                   [value]="data?.address"
+                   readonly>
+        </ion-input>
 
-      <ng-container *ngIf="loading">
-
-        <ng-template [ngTemplateOutlet]="itemSkeleton"></ng-template>
-        <ng-template [ngTemplateOutlet]="itemSkeleton"></ng-template>
-        <ng-template [ngTemplateOutlet]="itemSkeleton"></ng-template>
-      </ng-container>
-
-      <ng-template #items>
-        <ion-item-sliding *ngFor="let item of data">
-          <ion-item >
-            <ion-avatar slot="start" *ngIf="item.meta?.avatar; else iconPerson">
-              <ion-img [src]="item.meta?.avatar"></ion-img>
-            </ion-avatar>
-            <ng-template #iconPerson>
-              <ion-icon slot="start" name="person"></ion-icon>
-            </ng-template>
-            <ion-label>
-              <h2>{{item.meta?.name}}</h2>
-              <p>{{item.address|addressFormat}}</p>
-            </ion-label>
-            <ion-button slot="end" *ngIf="!mobile" (click)="transfer(item)" [title]="'BTN_SEND_MONEY'|translate">
-              <ion-icon slot="icon-only" name="paper-plane"></ion-icon>
-            </ion-button>
-          </ion-item>
-          <ion-item-options *ngIf="mobile">
-            <ion-item-option (click)="transfer(item)" [title]="'BTN_SEND_MONEY'|translate">
-              <ion-icon slot="icon-only" name="paper-plane"></ion-icon>
-            </ion-item-option>
-          </ion-item-options>
-        </ion-item-sliding>
-      </ng-template>
+        <ion-button slot="end" (click)="copyAddress()"
+                    [disabled]="loading"
+                    fill="clear" [title]="'COMMON.COPY'|translate">
+          <ion-icon slot="icon-only" name="copy"></ion-icon>
+        </ion-button>
+      </ion-item>
 
     </ion-list>
 
+    <div class="ion-text-center">
+      <ion-button [routerLink]="['/transfer', 'to', data?.address]"
+                  [disabled]="loading">
+        <ion-icon slot="start" name="paper-plane"></ion-icon>
+        <ion-label translate>COMMON.BTN_SEND_MONEY</ion-label>
+      </ion-button>
+    </div>
+
   </div>
 </ion-content>
 
-
-<ng-template #itemSkeleton>
-  <ion-item>
-    <ion-icon slot="start" name="person"></ion-icon>
-    <ion-skeleton-text animated style="width: 60%"></ion-skeleton-text>
-  </ion-item>
-</ng-template>
-
-
-<ng-template #inputSkeleton>
-  <ion-skeleton-text animated style="width: 60%"></ion-skeleton-text>
+<ng-template #skeleton60>
+  <ion-skeleton-text [animated]="true" style="width: 60%"></ion-skeleton-text>
 </ng-template>
diff --git a/src/app/wot/wot-details.page.ts b/src/app/wot/wot-details.page.ts
index 0774c6df9977621993ded00b8e74be2a2f31febf..9baf6caf84d0090592c4bb67a50c0c28c63903fb 100644
--- a/src/app/wot/wot-details.page.ts
+++ b/src/app/wot/wot-details.page.ts
@@ -1,9 +1,11 @@
-import {ChangeDetectionStrategy, Component, Injector, OnInit} from '@angular/core';
+import {ChangeDetectionStrategy, Component, Injector, Input, OnInit} from '@angular/core';
 
 import {BasePage} from "@app/shared/pages/base.page";
 import {Account} from "@app/wallet/account.model";
 import {Router} from "@angular/router";
 import {WotService} from "@app/wot/wot.service";
+import {AccountService} from "@app/wallet/account.service";
+import {Clipboard} from "@capacitor/clipboard";
 
 @Component({
   selector: 'app-wot-details',
@@ -15,26 +17,48 @@ export class WotDetailsPage extends BasePage<Account> implements OnInit {
 
   address = this.activatedRoute.snapshot.paramMap.get('address');
 
+  @Input() showToolbar = true;
+
   constructor(injector: Injector,
               private router: Router,
+              private accountService: AccountService,
               private wotService: WotService
               ) {
     super(injector, {name: 'wot-details-page'});
   }
 
   ngOnInit() {
+    super.ngOnInit();
   }
 
   protected async ngOnLoad(): Promise<Account> {
 
-    await this.wotService.ready();
+    await Promise.all([
+      this.accountService.ready(),
+      this.wotService.ready()
+    ]);
+
+    const ownedAddress = await this.accountService.isAvailable(this.address);
+    if (ownedAddress) {
+      return this.accountService.getByAddress(this.address);
+    }
 
     const data = await this.wotService.search({address: this.address});
 
     return data[0];
   }
 
-  transfer() {
+
+  async copyAddress() {
+    if (this.loading || !this.data?.address) return; // Skip
+
+    await Clipboard.write({
+      string: this.data?.address
+    });
+    await this.showToast({message: 'INFO.COPY_TO_CLIPBOARD_DONE'});
+  }
+
+  transfer(event?: UIEvent) {
     this.router.navigate(['transfer'], {
       queryParams: {
         address: this.data.address,
diff --git a/src/app/wot/wot-lookup.page.html b/src/app/wot/wot-lookup.page.html
index 7c51e13e18d4c7f4598e3437eadcfbbb3cff572f..3250d3b6f3d0dacb0c074c9b59c3e01699629de6 100644
--- a/src/app/wot/wot-lookup.page.html
+++ b/src/app/wot/wot-lookup.page.html
@@ -8,6 +8,11 @@
 </ion-header>
 
 <ion-content [fullscreen]="true">
+  <ion-header collapse="condense" *ngIf="showToolbar">
+    <ion-toolbar>
+      <ion-title size="large" translate>MENU.WOT</ion-title>
+    </ion-toolbar>
+  </ion-header>
 
   <div id="container">
 
@@ -63,7 +68,6 @@
       </ng-template>
 
     </ion-list>
-
   </div>
 </ion-content>
 
@@ -77,8 +81,3 @@
     </ion-label>
   </ion-item>
 </ng-template>
-
-
-<ng-template #inputSkeleton>
-  <ion-skeleton-text animated style="width: 60%"></ion-skeleton-text>
-</ng-template>
diff --git a/src/app/wot/wot-lookup.page.ts b/src/app/wot/wot-lookup.page.ts
index b894a9152cb008b0010d59bec36da56b1061b74b..3e481c1257e46259630c508f959474713607158d 100644
--- a/src/app/wot/wot-lookup.page.ts
+++ b/src/app/wot/wot-lookup.page.ts
@@ -75,7 +75,9 @@ export class WotLookupPage extends BasePage<Account[]> implements OnInit {
     }
     else {
       // Open
-      this.router.navigate(['wot', ''])
+      this.router.navigate([item.address], {
+        relativeTo: this.activatedRoute
+      })
     }
   }
 
diff --git a/src/app/wot/wot-routing.module.ts b/src/app/wot/wot-routing.module.ts
index e1973265bac166275635ffb9dbe7ec3242427c15..d8a8067c23bd0f187394ac86ae7d435b43fa424a 100644
--- a/src/app/wot/wot-routing.module.ts
+++ b/src/app/wot/wot-routing.module.ts
@@ -8,13 +8,14 @@ const routes: Routes = [
   {
     path: '',
     pathMatch: 'full',
-    component: WotLookupPage
+    component: WotLookupPage,
   },
   {
     path: ':address',
     pathMatch: 'full',
     component: WotDetailsPage
   }
+
 ];
 
 @NgModule({
diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json
index a0429a1f07d770de7dfe9ae2e1d3fd129321bc09..0fac1639eb425260c77f64b3fdf2d1ee6e7e527b 100644
--- a/src/assets/i18n/fr.json
+++ b/src/assets/i18n/fr.json
@@ -678,6 +678,7 @@
     "AMOUNT_HELP": "Montant",
     "COMMENT": "Commentaire",
     "COMMENT_HELP": "Commentaire",
+    "FEE": "+{{fee}} {{currency}} frais",
     "BTN_SEND": "Envoyer",
     "BTN_ADD_COMMENT": "Ajouter un commentaire",
     "REST": "Reste du compte",
@@ -737,6 +738,7 @@
     "NEED_LOGIN_FIRST": "Veuillez d'abord vous connecter.",
     "AMOUNT_REQUIRED": "Le montant est obligatoire.",
     "AMOUNT_NEGATIVE": "Montant négatif non autorisé.",
+    "FEE_NEGATIVE": "Frais négatif non autorisé.",
     "NOT_ENOUGH_CREDIT": "Crédit insuffisant.",
     "INVALID_NODE_SUMMARY": "Nœud injoignable ou adresse invalide.",
     "INVALID_USER_ID": "Le pseudonyme ne doit contenir ni espace ni caractère spécial ou accentué.",
diff --git a/src/index.html b/src/index.html
index d357cf7a8a32347e515d2f969a9fdadde0385d43..4a657e97410ccc15e37556b6069840a37e5abf97 100644
--- a/src/index.html
+++ b/src/index.html
@@ -17,6 +17,18 @@
   <!-- add to homescreen for ios -->
   <meta name="apple-mobile-web-app-capable" content="yes" />
   <meta name="apple-mobile-web-app-status-bar-style" content="black" />
+
+  <style>
+    /*body {*/
+    /*  min-width: 800px;*/
+    /*  max-width: auto;*/
+    /*}*/
+    /*html {*/
+    /*   min-width: 800px;*/
+    /*   max-width: auto;*/
+    /*   min-height: 600px;*/
+    /* }*/
+  </style>
 </head>
 
 <body>
diff --git a/src/manifest.json b/src/manifest.json
index 0eb4d872ab1d9278eac30e34985d2cca8ab454a6..4ad549def78a65724a4b57429e25dea73cec6c50 100644
--- a/src/manifest.json
+++ b/src/manifest.json
@@ -1,28 +1,28 @@
 {
   "short_name": "Cesium",
   "name": "Cesium",
-  "manifest_version": 1,
+  "manifest_version": 2,
   "version": "2.0.0-rc1",
   "default_locale": "fr",
   "description": "Cesium Wallet for Ğ1 libre currency",
   "icons": [
     {
-      "src": "img/logo_32px.png",
+      "src": "assets/img/logo_32px.png",
       "sizes": "32x32",
       "type": "image/png"
     },
     {
-      "src": "img/logo_96px.png",
+      "src": "assets/img/logo_96px.png",
       "sizes": "96x96",
       "type": "image/png"
     },
     {
-      "src": "img/logo_144px.png",
+      "src": "assets/img/logo_144px.png",
       "sizes": "144x144",
       "type": "image/png"
     },
     {
-      "src": "img/logo.svg",
+      "src": "assets/img/logo.svg",
       "sizes": "192x192",
       "type": "image/svg"
     }
@@ -30,18 +30,23 @@
   "background_color": "#1a237e",
   "theme_color": "black",
   "dir": "ltr",
-  "start_url": "/#/app/home",
+  "start_url": "/home",
   "display": "standalone",
+  "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
+  "browser_action": {
+    "default_popup": "index.html",
+    "default_icon": "assets/icon/favicon.ico"
+  },
   "protocol_handlers": [
     {
       "protocol": "june",
-      "name": "Cesium",
-      "uriTemplate": "/#/app/home?uri=%s"
+      "name": "june",
+      "uriTemplate": "/home?uri=%s"
     },
     {
       "protocol": "web+june",
-      "name": "Cesium",
-      "uriTemplate": "/#/app/home?uri=%s"
+      "name": "web-june",
+      "uriTemplate": "/home?uri=%s"
     }
   ]
 }
diff --git a/src/theme/_cesium.scss b/src/theme/_cesium.scss
index 247c9b186284ff15d3210ed755c697ea5efcd611..f2523fd1c75831bd970533ede7dcf80dea8b60e5 100644
--- a/src/theme/_cesium.scss
+++ b/src/theme/_cesium.scss
@@ -7,3 +7,16 @@
   display: none;
   visibility: hidden;
 }
+
+/* -- error message -- */
+.item.error,
+ion-item.error {
+  ion-label {
+    white-space: break-spaces !important;
+  }
+}
+
+/* */
+ion-toolbar {
+  --ion-toolbar-background: var(--ion-color-base);
+}
diff --git a/yarn.lock b/yarn.lock
index 13727d5ebc1d7d30f38acea0fc723adbe6251cb6..f1b82ad97b6f24fc396b559501fd5af2dbaf8a1b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -340,7 +340,7 @@
     json5 "^2.2.1"
     semver "^6.3.0"
 
-"@babel/core@^7.12.3", "@babel/core@^7.17.2", "@babel/core@^7.18.9":
+"@babel/core@^7.12.3", "@babel/core@^7.17.2", "@babel/core@^7.18.13":
   version "7.18.13"
   resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.13.tgz"
   integrity sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A==
@@ -1255,7 +1255,7 @@
     core-js-pure "^3.15.0"
     regenerator-runtime "^0.13.4"
 
-"@babel/runtime@7.18.9", "@babel/runtime@^7.18.6", "@babel/runtime@^7.18.9":
+"@babel/runtime@7.18.9", "@babel/runtime@^7.18.9":
   version "7.18.9"
   resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz"
   integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==
@@ -1303,6 +1303,13 @@
     "@babel/helper-validator-identifier" "^7.18.6"
     to-fast-properties "^2.0.0"
 
+"@capacitor-community/sqlite@^4.0.1":
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/@capacitor-community/sqlite/-/sqlite-4.0.1.tgz#4d8a01be12196ccfe2cd910d0d41cabd91b3ca0b"
+  integrity sha512-bKdIUfDm+fXyZm2WZWWceFZjv8Zn0bRUI2lhaCRKJNqFk3jTI7z4qGTB2zqsKcijVhYF18j21pzXqJc3Ybb9xA==
+  dependencies:
+    jeep-sqlite "^1.5.5"
+
 "@capacitor/app@4.0.1":
   version "4.0.1"
   resolved "https://registry.npmjs.org/@capacitor/app/-/app-4.0.1.tgz#05c60541c427ef30f4762d8f786e70d0ed32fe01"
@@ -1769,11 +1776,6 @@
   resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz"
   integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==
 
-"@noble/secp256k1@1.6.0":
-  version "1.6.0"
-  resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.0.tgz"
-  integrity sha512-DWSsg8zMHOYMYBqIQi96BQuthZrp98LCeMNcUOaffCIVYQ5yxDbNikLF+H7jEnmNNmXbtVic46iCuVWzar+MgA==
-
 "@noble/secp256k1@1.6.3":
   version "1.6.3"
   resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz"
@@ -1913,70 +1915,70 @@
     node-addon-api "^3.2.1"
     node-gyp-build "^4.3.0"
 
-"@polkadot/api-augment@8.14.1":
-  version "8.14.1"
-  resolved "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-8.14.1.tgz"
-  integrity sha512-65GMlgVnZd08Ifh8uAj+p/+MlXxvsAfBcCHjQhOmbCE0dki+rzTPUR31LsWyDKtuw+nUBj0iZN4PelO+wU4r0g==
+"@polkadot/api-augment@9.2.4":
+  version "9.2.4"
+  resolved "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-9.2.4.tgz#6d12e6e702828facd40606efbb494d80c1372db4"
+  integrity sha512-oL8JJS3RClbv+yVdVTjRHoU2d3az/YvD+Ex2UFnMtBCBk22kDnDEoJAstJJjnXW2RT7CsEmCj3ffP0pmJGvF4A==
   dependencies:
     "@babel/runtime" "^7.18.9"
-    "@polkadot/api-base" "8.14.1"
-    "@polkadot/rpc-augment" "8.14.1"
-    "@polkadot/types" "8.14.1"
-    "@polkadot/types-augment" "8.14.1"
-    "@polkadot/types-codec" "8.14.1"
-    "@polkadot/util" "^10.1.1"
-
-"@polkadot/api-base@8.14.1":
-  version "8.14.1"
-  resolved "https://registry.npmjs.org/@polkadot/api-base/-/api-base-8.14.1.tgz"
-  integrity sha512-EXFhNXIfpirf18IsqcG2pGQW1/Xn+bfjqVYQMMJ4ZONtYH4baZZlXk7SoXCCHonN2x1ixs4DOcRx5oVxjabdIQ==
+    "@polkadot/api-base" "9.2.4"
+    "@polkadot/rpc-augment" "9.2.4"
+    "@polkadot/types" "9.2.4"
+    "@polkadot/types-augment" "9.2.4"
+    "@polkadot/types-codec" "9.2.4"
+    "@polkadot/util" "^10.1.6"
+
+"@polkadot/api-base@9.2.4":
+  version "9.2.4"
+  resolved "https://registry.npmjs.org/@polkadot/api-base/-/api-base-9.2.4.tgz#6279da0fb2ce6a044fc03ce28112322908f20193"
+  integrity sha512-iTSsenaKAWTrkyDkbvBlhx/hzS/DlPPcw+u/Z2EQfnsh6R8qR7Od5JbFKM5Z81mlBX2R3FYm6r2Cxan0Bb+bDA==
   dependencies:
     "@babel/runtime" "^7.18.9"
-    "@polkadot/rpc-core" "8.14.1"
-    "@polkadot/types" "8.14.1"
-    "@polkadot/util" "^10.1.1"
+    "@polkadot/rpc-core" "9.2.4"
+    "@polkadot/types" "9.2.4"
+    "@polkadot/util" "^10.1.6"
     rxjs "^7.5.6"
 
-"@polkadot/api-derive@8.14.1":
-  version "8.14.1"
-  resolved "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-8.14.1.tgz"
-  integrity sha512-eWG1MrQhHMUjt9gDHN9/9/ZMATu1MolqcalPFhNoGtdON3+I0J3ntjQ4y5X7+p2OGwQplpYRKqbK4k7tKzu8tA==
+"@polkadot/api-derive@9.2.4":
+  version "9.2.4"
+  resolved "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-9.2.4.tgz#2abdf94d69cc4b2596125f630452237cb62c4988"
+  integrity sha512-16V+l8hNe+TMYbZf6Bq27ZT69HXZC1Fn/mq0IrzdAs4jW2mok5tDfHDL+rCGJeRTq1LXFUOfPZGTMR4bqH2VqA==
   dependencies:
     "@babel/runtime" "^7.18.9"
-    "@polkadot/api" "8.14.1"
-    "@polkadot/api-augment" "8.14.1"
-    "@polkadot/api-base" "8.14.1"
-    "@polkadot/rpc-core" "8.14.1"
-    "@polkadot/types" "8.14.1"
-    "@polkadot/types-codec" "8.14.1"
-    "@polkadot/util" "^10.1.1"
-    "@polkadot/util-crypto" "^10.1.1"
+    "@polkadot/api" "9.2.4"
+    "@polkadot/api-augment" "9.2.4"
+    "@polkadot/api-base" "9.2.4"
+    "@polkadot/rpc-core" "9.2.4"
+    "@polkadot/types" "9.2.4"
+    "@polkadot/types-codec" "9.2.4"
+    "@polkadot/util" "^10.1.6"
+    "@polkadot/util-crypto" "^10.1.6"
     rxjs "^7.5.6"
 
-"@polkadot/api@8.14.1", "@polkadot/api@^8.9.1":
-  version "8.14.1"
-  resolved "https://registry.npmjs.org/@polkadot/api/-/api-8.14.1.tgz"
-  integrity sha512-jg26eIKFYqVfDBTAopHL3aDaNw9j6TdUkXuvYJOnynpecU4xwbTVKcOtSOjJ2eRX4MgMQ4zlyMHJx3iKw0uUTA==
+"@polkadot/api@9.2.4", "@polkadot/api@^9.2.4":
+  version "9.2.4"
+  resolved "https://registry.npmjs.org/@polkadot/api/-/api-9.2.4.tgz#501a271d61dd5e1a81d08e0183a4a4bc0a081693"
+  integrity sha512-mtTnTpix8lvjZnKgB3vnYE9frGPil2QbUd6uD2Vu/q2izRZuuPrMCAQjMf9o8CRJfeC4149jX3VZ5xq9gmYHrg==
   dependencies:
     "@babel/runtime" "^7.18.9"
-    "@polkadot/api-augment" "8.14.1"
-    "@polkadot/api-base" "8.14.1"
-    "@polkadot/api-derive" "8.14.1"
-    "@polkadot/keyring" "^10.1.1"
-    "@polkadot/rpc-augment" "8.14.1"
-    "@polkadot/rpc-core" "8.14.1"
-    "@polkadot/rpc-provider" "8.14.1"
-    "@polkadot/types" "8.14.1"
-    "@polkadot/types-augment" "8.14.1"
-    "@polkadot/types-codec" "8.14.1"
-    "@polkadot/types-create" "8.14.1"
-    "@polkadot/types-known" "8.14.1"
-    "@polkadot/util" "^10.1.1"
-    "@polkadot/util-crypto" "^10.1.1"
+    "@polkadot/api-augment" "9.2.4"
+    "@polkadot/api-base" "9.2.4"
+    "@polkadot/api-derive" "9.2.4"
+    "@polkadot/keyring" "^10.1.6"
+    "@polkadot/rpc-augment" "9.2.4"
+    "@polkadot/rpc-core" "9.2.4"
+    "@polkadot/rpc-provider" "9.2.4"
+    "@polkadot/types" "9.2.4"
+    "@polkadot/types-augment" "9.2.4"
+    "@polkadot/types-codec" "9.2.4"
+    "@polkadot/types-create" "9.2.4"
+    "@polkadot/types-known" "9.2.4"
+    "@polkadot/util" "^10.1.6"
+    "@polkadot/util-crypto" "^10.1.6"
     eventemitter3 "^4.0.7"
     rxjs "^7.5.6"
 
-"@polkadot/keyring@^10.1.1", "@polkadot/keyring@^10.1.6":
+"@polkadot/keyring@^10.1.6":
   version "10.1.6"
   resolved "https://registry.npmjs.org/@polkadot/keyring/-/keyring-10.1.6.tgz"
   integrity sha512-l4kF8SRJwkAfQaPKu15/0cxnSu5kPBj/RM0oJpSxkiqZXMhflU7i1tGX2DNhXST+btyEe0AYDzLg2YSyxYOPQA==
@@ -1985,16 +1987,7 @@
     "@polkadot/util" "10.1.6"
     "@polkadot/util-crypto" "10.1.6"
 
-"@polkadot/keyring@^9.6.1":
-  version "9.7.2"
-  resolved "https://registry.npmjs.org/@polkadot/keyring/-/keyring-9.7.2.tgz"
-  integrity sha512-qY5baU1qduwTE04Cyrqtf2pCpsIk7Z5vi45CD9U3cbkKXaJoNUqIpfKoL8Vh/yVJBwhclMdxV9E2rEJs8Iv4bg==
-  dependencies:
-    "@babel/runtime" "^7.18.6"
-    "@polkadot/util" "9.7.2"
-    "@polkadot/util-crypto" "9.7.2"
-
-"@polkadot/networks@10.1.6", "@polkadot/networks@^10.1.1", "@polkadot/networks@^10.1.6":
+"@polkadot/networks@10.1.6", "@polkadot/networks@^10.1.6":
   version "10.1.6"
   resolved "https://registry.npmjs.org/@polkadot/networks/-/networks-10.1.6.tgz"
   integrity sha512-NINGTVkvAnrBDXbIdcSJ7gCmtXUB6ybI4TLHY2Tf/57hak+hlyQUoHZdaTzpRYrxZ9xoUUS1K83Lr3wfwMblHA==
@@ -2003,146 +1996,137 @@
     "@polkadot/util" "10.1.6"
     "@substrate/ss58-registry" "^1.28.0"
 
-"@polkadot/networks@9.7.2":
-  version "9.7.2"
-  resolved "https://registry.npmjs.org/@polkadot/networks/-/networks-9.7.2.tgz"
-  integrity sha512-oMAdF8Y9CLBI0EUZBcycHcvbQQdbkJHevPJ/lwnZXJTaueXuav/Xm2yiFj5J3V8meIjLocURlMawgsAVItXOBQ==
-  dependencies:
-    "@babel/runtime" "^7.18.6"
-    "@polkadot/util" "9.7.2"
-    "@substrate/ss58-registry" "^1.23.0"
-
-"@polkadot/rpc-augment@8.14.1":
-  version "8.14.1"
-  resolved "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-8.14.1.tgz"
-  integrity sha512-0dIsNVIMeCp0kV7+Obz0Odt6K32Ka2ygwhiV5jhhJthy8GJBPo94mKDed5gzln3Dgl2LEdJJt1h/pgCx4a2i4A==
+"@polkadot/rpc-augment@9.2.4":
+  version "9.2.4"
+  resolved "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-9.2.4.tgz#372eec7f15aea8f0ba3cb80affb0f216e6971e26"
+  integrity sha512-Jhw0r1CDr1CgkXdq/9zVNzQe4Yipk+NZ+uBWgBxfk+5ceaVsPjcwDG4A+J7og6I3fiWpz7srY1MC2Q8tikn6BA==
   dependencies:
     "@babel/runtime" "^7.18.9"
-    "@polkadot/rpc-core" "8.14.1"
-    "@polkadot/types" "8.14.1"
-    "@polkadot/types-codec" "8.14.1"
-    "@polkadot/util" "^10.1.1"
+    "@polkadot/rpc-core" "9.2.4"
+    "@polkadot/types" "9.2.4"
+    "@polkadot/types-codec" "9.2.4"
+    "@polkadot/util" "^10.1.6"
 
-"@polkadot/rpc-core@8.14.1":
-  version "8.14.1"
-  resolved "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-8.14.1.tgz"
-  integrity sha512-deQ8Ob59ao/1fZQdaVtFjYR/HCBdxSYvQGt7/alBu1Uig9Sahx9oKcMkU5rWY36XqGZYos4zLay98W2hDlf+6Q==
+"@polkadot/rpc-core@9.2.4":
+  version "9.2.4"
+  resolved "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-9.2.4.tgz#83e5828b53e27c976636bafe4486979df420cd93"
+  integrity sha512-npGOFC3BIjIxb4+jK4hISlUjsY8ay6GsLD5qhxEeiypk3pDNeHuBN/LjN4Z5Cb9N6e2fDgcLP4HRZG+YTf8ccA==
   dependencies:
     "@babel/runtime" "^7.18.9"
-    "@polkadot/rpc-augment" "8.14.1"
-    "@polkadot/rpc-provider" "8.14.1"
-    "@polkadot/types" "8.14.1"
-    "@polkadot/util" "^10.1.1"
+    "@polkadot/rpc-augment" "9.2.4"
+    "@polkadot/rpc-provider" "9.2.4"
+    "@polkadot/types" "9.2.4"
+    "@polkadot/util" "^10.1.6"
     rxjs "^7.5.6"
 
-"@polkadot/rpc-provider@8.14.1":
-  version "8.14.1"
-  resolved "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-8.14.1.tgz"
-  integrity sha512-pAUSHZiSWLhBSYf4LmLc8iCaeqTu7Ajn8AzyqxvZDHGnIrzV5M7eTjpNDP84qno6jWRHKQ/IILr62hausEmS5w==
+"@polkadot/rpc-provider@9.2.4":
+  version "9.2.4"
+  resolved "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-9.2.4.tgz#c25db404642516ccd4d461325c2dcec08637fba9"
+  integrity sha512-qVlaDr/Oax764mps89tQpKFohOacFta5Gp72s81OBxFR1Nxq9qE5uaL5AaXzAxEtL+XVMFYKE508pp2IJW52dw==
   dependencies:
     "@babel/runtime" "^7.18.9"
-    "@polkadot/keyring" "^10.1.1"
-    "@polkadot/types" "8.14.1"
-    "@polkadot/types-support" "8.14.1"
-    "@polkadot/util" "^10.1.1"
-    "@polkadot/util-crypto" "^10.1.1"
-    "@polkadot/x-fetch" "^10.1.1"
-    "@polkadot/x-global" "^10.1.1"
-    "@polkadot/x-ws" "^10.1.1"
-    "@substrate/connect" "0.7.9"
+    "@polkadot/keyring" "^10.1.6"
+    "@polkadot/types" "9.2.4"
+    "@polkadot/types-support" "9.2.4"
+    "@polkadot/util" "^10.1.6"
+    "@polkadot/util-crypto" "^10.1.6"
+    "@polkadot/x-fetch" "^10.1.6"
+    "@polkadot/x-global" "^10.1.6"
+    "@polkadot/x-ws" "^10.1.6"
+    "@substrate/connect" "0.7.11"
     eventemitter3 "^4.0.7"
     mock-socket "^9.1.5"
     nock "^13.2.9"
 
-"@polkadot/typegen@^8.9.1":
-  version "8.14.1"
-  resolved "https://registry.npmjs.org/@polkadot/typegen/-/typegen-8.14.1.tgz"
-  integrity sha512-NfQj/tnL0N1ggBr3RhYEaPIPYtzUKPduhtqF/J2WRWoz4PT2qtzhYd+ljyIR+T7s9Ijnjm3+Gjf9xEq2vchRLg==
+"@polkadot/typegen@^9.2.4":
+  version "9.2.4"
+  resolved "https://registry.npmjs.org/@polkadot/typegen/-/typegen-9.2.4.tgz#766af32c3ab1a6ba4438ef3f5e02b9b56d85e3da"
+  integrity sha512-13dSv7ucLAaMWJTzYSErPfFfKCZPp8cMp5l8XcmUEk/zc5GuLCII+A4Fj+7FGYXjntUvf+DhV4hgzGMitjM0SQ==
   dependencies:
-    "@babel/core" "^7.18.9"
+    "@babel/core" "^7.18.13"
     "@babel/register" "^7.18.9"
     "@babel/runtime" "^7.18.9"
-    "@polkadot/api" "8.14.1"
-    "@polkadot/api-augment" "8.14.1"
-    "@polkadot/rpc-augment" "8.14.1"
-    "@polkadot/rpc-provider" "8.14.1"
-    "@polkadot/types" "8.14.1"
-    "@polkadot/types-augment" "8.14.1"
-    "@polkadot/types-codec" "8.14.1"
-    "@polkadot/types-create" "8.14.1"
-    "@polkadot/types-support" "8.14.1"
-    "@polkadot/util" "^10.1.1"
-    "@polkadot/util-crypto" "^10.1.1"
-    "@polkadot/x-ws" "^10.1.1"
+    "@polkadot/api" "9.2.4"
+    "@polkadot/api-augment" "9.2.4"
+    "@polkadot/rpc-augment" "9.2.4"
+    "@polkadot/rpc-provider" "9.2.4"
+    "@polkadot/types" "9.2.4"
+    "@polkadot/types-augment" "9.2.4"
+    "@polkadot/types-codec" "9.2.4"
+    "@polkadot/types-create" "9.2.4"
+    "@polkadot/types-support" "9.2.4"
+    "@polkadot/util" "^10.1.6"
+    "@polkadot/util-crypto" "^10.1.6"
+    "@polkadot/x-ws" "^10.1.6"
     handlebars "^4.7.7"
     websocket "^1.0.34"
     yargs "^17.5.1"
 
-"@polkadot/types-augment@8.14.1":
-  version "8.14.1"
-  resolved "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-8.14.1.tgz"
-  integrity sha512-Xa4TUFqyZT+IJ6pBSwDjWcF42u/E34OyC+gbs5Z2vWQ4EzSDkq4xNoUKjJlEEgTemsD9lhPOIc4jvqTCefwxEw==
+"@polkadot/types-augment@9.2.4":
+  version "9.2.4"
+  resolved "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-9.2.4.tgz#dc9307012bf7adfa8329413e716dda351cd7e5f1"
+  integrity sha512-3Y8I7ZjCBWJwnooegEqBvsbYk9EOAfYhX1g+IxYFL/xTUO4mdNrgmaslHele2M7h//N+xW+iZ5R8IGRYOka1ew==
   dependencies:
     "@babel/runtime" "^7.18.9"
-    "@polkadot/types" "8.14.1"
-    "@polkadot/types-codec" "8.14.1"
-    "@polkadot/util" "^10.1.1"
+    "@polkadot/types" "9.2.4"
+    "@polkadot/types-codec" "9.2.4"
+    "@polkadot/util" "^10.1.6"
 
-"@polkadot/types-codec@8.14.1":
-  version "8.14.1"
-  resolved "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-8.14.1.tgz"
-  integrity sha512-y6YDN4HwvEgSWlgrEV04QBBxDxES1cTuUQFzZJzOTuZCWpA371Mdj3M9wYxGXMnj0wa+rCQGECHPZZaNxBMiKg==
+"@polkadot/types-codec@9.2.4":
+  version "9.2.4"
+  resolved "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-9.2.4.tgz#4ae6bd33fbc7cb41b3b8dc41d49325393fd4f22f"
+  integrity sha512-3Wy7KOk6qd0v6rUQ2Qq5bz6xAo2KCp1Sn1GYa7VPNcFZfZaBO3Axgg3w3++ckDqLt8bI99Y/wCuAKhzvnMs/WA==
   dependencies:
     "@babel/runtime" "^7.18.9"
-    "@polkadot/util" "^10.1.1"
-    "@polkadot/x-bigint" "^10.1.1"
+    "@polkadot/util" "^10.1.6"
+    "@polkadot/x-bigint" "^10.1.6"
 
-"@polkadot/types-create@8.14.1":
-  version "8.14.1"
-  resolved "https://registry.npmjs.org/@polkadot/types-create/-/types-create-8.14.1.tgz"
-  integrity sha512-fb9yyblj5AYAPzeCIq0kYSfzDxRDi/0ud9gN2UzB3H7M/O4n2mPC1vD4UOLF+B7l9QzCrt4e+k+/riGp7GfvyA==
+"@polkadot/types-create@9.2.4":
+  version "9.2.4"
+  resolved "https://registry.npmjs.org/@polkadot/types-create/-/types-create-9.2.4.tgz#be920f7ae3404e655afc2cd0b63a6ccebe2ea112"
+  integrity sha512-RU5r4GlhNFhd3QUzUj9gxfRNlH4LgvHEXTS/K5pprlKTmoJk9HcpzbnkydM8qb1kc3JJWpYgG3Ov82y6HWDjDg==
   dependencies:
     "@babel/runtime" "^7.18.9"
-    "@polkadot/types-codec" "8.14.1"
-    "@polkadot/util" "^10.1.1"
+    "@polkadot/types-codec" "9.2.4"
+    "@polkadot/util" "^10.1.6"
 
-"@polkadot/types-known@8.14.1":
-  version "8.14.1"
-  resolved "https://registry.npmjs.org/@polkadot/types-known/-/types-known-8.14.1.tgz"
-  integrity sha512-GP7gRo9nmitykkrRnoLF61Qm19UFdTwMsOnJkdm7AOeWDmZGxutacgO6k1tBsHr38hsiCCGsB/JiseUgywvGIw==
+"@polkadot/types-known@9.2.4":
+  version "9.2.4"
+  resolved "https://registry.npmjs.org/@polkadot/types-known/-/types-known-9.2.4.tgz#940e18aa18dea885051db5fabddd83a81580ba52"
+  integrity sha512-AEf0Qj/HjoCZTbIdNHXFQt+bbjaNpVdSV+yWIJNTtpRz6IcFNkddiW+4VRlesJh8M6zNy1S4BUcJlee3OqWJbg==
   dependencies:
     "@babel/runtime" "^7.18.9"
-    "@polkadot/networks" "^10.1.1"
-    "@polkadot/types" "8.14.1"
-    "@polkadot/types-codec" "8.14.1"
-    "@polkadot/types-create" "8.14.1"
-    "@polkadot/util" "^10.1.1"
+    "@polkadot/networks" "^10.1.6"
+    "@polkadot/types" "9.2.4"
+    "@polkadot/types-codec" "9.2.4"
+    "@polkadot/types-create" "9.2.4"
+    "@polkadot/util" "^10.1.6"
 
-"@polkadot/types-support@8.14.1":
-  version "8.14.1"
-  resolved "https://registry.npmjs.org/@polkadot/types-support/-/types-support-8.14.1.tgz"
-  integrity sha512-XqR4qq6pCZyNBuFVod8nFSNUmLssrjoU9bOIn4Ua2cqNlI9xsuKaI1X5ySEn/oWOtKQ2L5hbCm9vkXrEtXBl1w==
+"@polkadot/types-support@9.2.4":
+  version "9.2.4"
+  resolved "https://registry.npmjs.org/@polkadot/types-support/-/types-support-9.2.4.tgz#5446791a876dedc629ff48fd0066ff306d2a2ec7"
+  integrity sha512-+Ci3dr6vieIybtfNERMeujzhr1P6i0napLm1bFb3QAiZ8sOaeF9i1y/LUsIHSFCb7D4joyJpaRK0WwLSV17WBA==
   dependencies:
     "@babel/runtime" "^7.18.9"
-    "@polkadot/util" "^10.1.1"
+    "@polkadot/util" "^10.1.6"
 
-"@polkadot/types@8.14.1", "@polkadot/types@^8.9.1":
-  version "8.14.1"
-  resolved "https://registry.npmjs.org/@polkadot/types/-/types-8.14.1.tgz"
-  integrity sha512-Xza16ejKrSd4XhTOlbfISyxZ2sRmbMAZk5pX7VEMHVZHqV98o+bJ2f9Kk7F8YJijkHHGosCLDestP9R5nLoOoA==
+"@polkadot/types@9.2.4", "@polkadot/types@^9.2.4":
+  version "9.2.4"
+  resolved "https://registry.npmjs.org/@polkadot/types/-/types-9.2.4.tgz#05818a2514f4d87c3339f6e000174ffccd6e0385"
+  integrity sha512-AnoTE2ORB0GfDz0JXwMqGiUieIxJSledxmiGTMF3Oj68WLWtg5yEMQZzYnbAELBLhscYdp1MHwYNBli72M3Q2Q==
   dependencies:
     "@babel/runtime" "^7.18.9"
-    "@polkadot/keyring" "^10.1.1"
-    "@polkadot/types-augment" "8.14.1"
-    "@polkadot/types-codec" "8.14.1"
-    "@polkadot/types-create" "8.14.1"
-    "@polkadot/util" "^10.1.1"
-    "@polkadot/util-crypto" "^10.1.1"
+    "@polkadot/keyring" "^10.1.6"
+    "@polkadot/types-augment" "9.2.4"
+    "@polkadot/types-codec" "9.2.4"
+    "@polkadot/types-create" "9.2.4"
+    "@polkadot/util" "^10.1.6"
+    "@polkadot/util-crypto" "^10.1.6"
     rxjs "^7.5.6"
 
-"@polkadot/ui-keyring@^2.6.1":
+"@polkadot/ui-keyring@^2.9.7":
   version "2.9.7"
-  resolved "https://registry.npmjs.org/@polkadot/ui-keyring/-/ui-keyring-2.9.7.tgz"
+  resolved "https://registry.npmjs.org/@polkadot/ui-keyring/-/ui-keyring-2.9.7.tgz#b79b056b4c26866b3e87569407bcc16b95894545"
   integrity sha512-0Y5Nh7YBEGfJQVRyEQAE3C05JBKRfLN+qVTBlCGe315xus8DyO3YS+w1HYHmHiXV34EfavnhftTla0/KWsND5g==
   dependencies:
     "@babel/runtime" "^7.18.9"
@@ -2154,7 +2138,7 @@
     rxjs "^7.5.6"
     store "^2.0.12"
 
-"@polkadot/ui-settings@2.9.7", "@polkadot/ui-settings@^2.6.1":
+"@polkadot/ui-settings@2.9.7", "@polkadot/ui-settings@^2.9.7":
   version "2.9.7"
   resolved "https://registry.npmjs.org/@polkadot/ui-settings/-/ui-settings-2.9.7.tgz"
   integrity sha512-MZJbexCei4LsUew9cY4XxxLjNM0M+VMPqByNXSiksneYyz3AoojR3EiLr1WlP1D/pqkvb8gIR61MYpcTRuc87Q==
@@ -2165,7 +2149,7 @@
     eventemitter3 "^4.0.7"
     store "^2.0.12"
 
-"@polkadot/util-crypto@10.1.6", "@polkadot/util-crypto@^10.1.1", "@polkadot/util-crypto@^10.1.6":
+"@polkadot/util-crypto@10.1.6", "@polkadot/util-crypto@^10.1.6":
   version "10.1.6"
   resolved "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-10.1.6.tgz"
   integrity sha512-r3XWcCERomcGyB5PT7Qa1LYtCHfspVbehPGvraRlX5xhZBihpU4zMRWTSBNMPNaeIjUJmmSQHeG0ZnQVvnwzkg==
@@ -2182,24 +2166,7 @@
     ed2curve "^0.3.0"
     tweetnacl "^1.0.3"
 
-"@polkadot/util-crypto@9.7.2":
-  version "9.7.2"
-  resolved "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-9.7.2.tgz"
-  integrity sha512-tfz6mJtPwoNteivKCmR+QklC4mr1/hGZRsDJLWKaFhanDinYZ3V2pJM1EbCI6WONLuuzlTxsDXjAffWzzRqlPA==
-  dependencies:
-    "@babel/runtime" "^7.18.6"
-    "@noble/hashes" "1.1.2"
-    "@noble/secp256k1" "1.6.0"
-    "@polkadot/networks" "9.7.2"
-    "@polkadot/util" "9.7.2"
-    "@polkadot/wasm-crypto" "^6.2.2"
-    "@polkadot/x-bigint" "9.7.2"
-    "@polkadot/x-randomvalues" "9.7.2"
-    "@scure/base" "1.1.1"
-    ed2curve "^0.3.0"
-    tweetnacl "^1.0.3"
-
-"@polkadot/util@10.1.6", "@polkadot/util@^10.1.1", "@polkadot/util@^10.1.6":
+"@polkadot/util@10.1.6", "@polkadot/util@^10.1.6":
   version "10.1.6"
   resolved "https://registry.npmjs.org/@polkadot/util/-/util-10.1.6.tgz"
   integrity sha512-k+gCKmgwxp0smmLIR7SfiEYEToayWXjrC7pQ0PqAGxpBNOdVMSCzLMnOHf9AI5cjs/lx6ULr1fHn721wLVonkw==
@@ -2212,20 +2179,6 @@
     "@types/bn.js" "^5.1.0"
     bn.js "^5.2.1"
 
-"@polkadot/util@9.7.2":
-  version "9.7.2"
-  resolved "https://registry.npmjs.org/@polkadot/util/-/util-9.7.2.tgz"
-  integrity sha512-ivTmA+KkPCq5i3O0Gk+dTds/hwdwlYCh89aKfeaG9ni3XHUbbuBgTqHneo648HqxwAwSAyiDiwE9EdXrzAdO4Q==
-  dependencies:
-    "@babel/runtime" "^7.18.6"
-    "@polkadot/x-bigint" "9.7.2"
-    "@polkadot/x-global" "9.7.2"
-    "@polkadot/x-textdecoder" "9.7.2"
-    "@polkadot/x-textencoder" "9.7.2"
-    "@types/bn.js" "^5.1.0"
-    bn.js "^5.2.1"
-    ip-regex "^4.3.0"
-
 "@polkadot/wasm-bridge@6.3.1":
   version "6.3.1"
   resolved "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-6.3.1.tgz"
@@ -2258,7 +2211,7 @@
     "@babel/runtime" "^7.18.9"
     "@polkadot/wasm-util" "6.3.1"
 
-"@polkadot/wasm-crypto@^6.2.2", "@polkadot/wasm-crypto@^6.3.1":
+"@polkadot/wasm-crypto@^6.3.1":
   version "6.3.1"
   resolved "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-6.3.1.tgz"
   integrity sha512-OO8h0qeVkqp4xYZaRVl4iuWOEtq282pNBHDKb6SOJuI2g59eWGcKh4EQU9Me2VP6qzojIqptrkrVt7KQXC68gA==
@@ -2277,7 +2230,7 @@
   dependencies:
     "@babel/runtime" "^7.18.9"
 
-"@polkadot/x-bigint@10.1.6", "@polkadot/x-bigint@^10.1.1":
+"@polkadot/x-bigint@10.1.6", "@polkadot/x-bigint@^10.1.6":
   version "10.1.6"
   resolved "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-10.1.6.tgz"
   integrity sha512-yeBZQ9+u49KqDBaeSw+ytshqzyaScKrDjAxpWCfOGxJaB+5Nv1W7fqi3OJ4S/HN5DYItr0a6UC14e1hiZUtZCg==
@@ -2285,17 +2238,9 @@
     "@babel/runtime" "^7.18.9"
     "@polkadot/x-global" "10.1.6"
 
-"@polkadot/x-bigint@9.7.2":
-  version "9.7.2"
-  resolved "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-9.7.2.tgz"
-  integrity sha512-qi8/DTGypFSt5vvNOsYcEaqH72lymfyidGlsHlZ6e7nNASnEhk/NaOcINiTr1ds+fpu4dtKXWAIPZufujf2JeQ==
-  dependencies:
-    "@babel/runtime" "^7.18.6"
-    "@polkadot/x-global" "9.7.2"
-
-"@polkadot/x-fetch@^10.1.1":
+"@polkadot/x-fetch@^10.1.6":
   version "10.1.6"
-  resolved "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-10.1.6.tgz"
+  resolved "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-10.1.6.tgz#f965d08207a224eda793f3ecfe377a9780aa7ae5"
   integrity sha512-LxsMtrQCgEC+ySRjS94voxY34OsL5qi4HBo6p8QWuXJB9pCuyGmnuFa8hJ0eMJ1Ne0SRo4gbasKWux6E5b00eg==
   dependencies:
     "@babel/runtime" "^7.18.9"
@@ -2303,20 +2248,13 @@
     "@types/node-fetch" "^2.6.2"
     node-fetch "^3.2.10"
 
-"@polkadot/x-global@10.1.6", "@polkadot/x-global@^10.1.1":
+"@polkadot/x-global@10.1.6", "@polkadot/x-global@^10.1.6":
   version "10.1.6"
   resolved "https://registry.npmjs.org/@polkadot/x-global/-/x-global-10.1.6.tgz"
   integrity sha512-/nraYZg0hdSjbczhDBAsHlEqeZLs0u0xa8HJrfH2lq8+HOIYkQpJPHOqiQIvEe/VFRq7Xnbij+4uffV+otzB/w==
   dependencies:
     "@babel/runtime" "^7.18.9"
 
-"@polkadot/x-global@9.7.2":
-  version "9.7.2"
-  resolved "https://registry.npmjs.org/@polkadot/x-global/-/x-global-9.7.2.tgz"
-  integrity sha512-3NN5JhjosaelaFWBJSlv9mb/gDAlt7RuZ8NKlOjB+LQHd9g6ZbnYi5wwjW+i/x/3E4IVbBx66uvWgNaw7IBrkg==
-  dependencies:
-    "@babel/runtime" "^7.18.6"
-
 "@polkadot/x-randomvalues@10.1.6":
   version "10.1.6"
   resolved "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-10.1.6.tgz"
@@ -2325,14 +2263,6 @@
     "@babel/runtime" "^7.18.9"
     "@polkadot/x-global" "10.1.6"
 
-"@polkadot/x-randomvalues@9.7.2":
-  version "9.7.2"
-  resolved "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-9.7.2.tgz"
-  integrity sha512-819slnXNpoVtqdhjI19ao7w5m+Zwx11VfwCZkFQypVv3b/1UEoKG/baJA9dVI6yMvhnBN//i8mLgNy3IXWbVVw==
-  dependencies:
-    "@babel/runtime" "^7.18.6"
-    "@polkadot/x-global" "9.7.2"
-
 "@polkadot/x-textdecoder@10.1.6":
   version "10.1.6"
   resolved "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-10.1.6.tgz"
@@ -2341,14 +2271,6 @@
     "@babel/runtime" "^7.18.9"
     "@polkadot/x-global" "10.1.6"
 
-"@polkadot/x-textdecoder@9.7.2":
-  version "9.7.2"
-  resolved "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-9.7.2.tgz"
-  integrity sha512-hhrMNZwJBmusdpqjDRpOHZoMB4hpyJt9Gu9Bi9is7/D/vq/hpxq8z7s6NxrbRyXJf1SIk6NMK0jf5XjRLdKdbw==
-  dependencies:
-    "@babel/runtime" "^7.18.6"
-    "@polkadot/x-global" "9.7.2"
-
 "@polkadot/x-textencoder@10.1.6":
   version "10.1.6"
   resolved "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-10.1.6.tgz"
@@ -2357,17 +2279,9 @@
     "@babel/runtime" "^7.18.9"
     "@polkadot/x-global" "10.1.6"
 
-"@polkadot/x-textencoder@9.7.2":
-  version "9.7.2"
-  resolved "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-9.7.2.tgz"
-  integrity sha512-GHbSdbMPixDAOnJ9cvL/x9sPNeHegPoDSqCAzY5H6/zHc/fNn0vUu0To9VpPgPhp/Jb9dbc0h8YqEyvOcOlphw==
-  dependencies:
-    "@babel/runtime" "^7.18.6"
-    "@polkadot/x-global" "9.7.2"
-
-"@polkadot/x-ws@^10.1.1":
+"@polkadot/x-ws@^10.1.6":
   version "10.1.6"
-  resolved "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-10.1.6.tgz"
+  resolved "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-10.1.6.tgz#9ea6c3afce12059e617be43d3ead5e57db332115"
   integrity sha512-PNDM4/fPECz2rTsE3lS+KiF87QN7mrN79yp2CsTHUVYKDg511Hp85wvtGkVgUoA98JWYETpVO7kUR1wSRDf46A==
   dependencies:
     "@babel/runtime" "^7.18.9"
@@ -2413,23 +2327,24 @@
   resolved "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-1.0.1.tgz"
   integrity sha512-161JhCC1csjH3GE5mPLEd7HbWtwNSPJBg3p1Ksz9SFlTzj/bgEwudiRN2y5i0MoLGCIJRYKyKGMxVnd29PzNjg==
 
-"@substrate/connect@0.7.9":
-  version "0.7.9"
-  resolved "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.9.tgz"
-  integrity sha512-E6bdBhzsfHNAKlmQSvbTW1jyb0WcIvgbrEBfJ4B6FZ3t1wpGjldL6GrYtegVtKr9/ySQ/pFNn0uVbugukpMDjQ==
+"@substrate/connect@0.7.11":
+  version "0.7.11"
+  resolved "https://registry.npmjs.org/@substrate/connect/-/connect-0.7.11.tgz#fa9d24991fe9edc7fb771fbdee21a9b7cf6d1322"
+  integrity sha512-/xiOlkmJfl2XPYQTmyWKEh2AXryEAPSMAxZXs6D/aqYDy0TKZDAp1dfQiHyPt1vMwOlnM4WJv9lPks3ZMwCP+w==
   dependencies:
     "@substrate/connect-extension-protocol" "^1.0.1"
-    "@substrate/smoldot-light" "0.6.25"
+    "@substrate/smoldot-light" "0.6.30"
     eventemitter3 "^4.0.7"
 
-"@substrate/smoldot-light@0.6.25":
-  version "0.6.25"
-  resolved "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.25.tgz"
-  integrity sha512-OQ9/bnJJy90xSRg5Vp9MIvrgbrVt/r/FwXYSmyLeBBNbJt6o1gSeshVo8icD+2VWwd/TJ2oHl5CVQWe89MyByA==
+"@substrate/smoldot-light@0.6.30":
+  version "0.6.30"
+  resolved "https://registry.npmjs.org/@substrate/smoldot-light/-/smoldot-light-0.6.30.tgz#a49f4a77f3047bfc1fb9224725a6286e2b709bf1"
+  integrity sha512-U/F75XzxuNG+KGSujxsMAm8zUBpBON+l0oX19EnSWjvqD+smYjvcj1SeqQhFYxJjtoCQyZLedKBsZGyNbG3FbQ==
   dependencies:
-    websocket "^1.0.32"
+    pako "^2.0.4"
+    ws "^8.8.1"
 
-"@substrate/ss58-registry@^1.23.0", "@substrate/ss58-registry@^1.28.0":
+"@substrate/ss58-registry@^1.28.0":
   version "1.28.0"
   resolved "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.28.0.tgz"
   integrity sha512-XPSwSq4CThLyg+OnZ5/LHh3SPDQjRdGS3Ux5ClgWhRCQamlU86FCT1LBwQ/i+ximbdBfqKRRzVhm1ql3AJ9FKQ==
@@ -2491,6 +2406,11 @@
   resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz"
   integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==
 
+"@types/emscripten@*":
+  version "1.39.6"
+  resolved "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.6.tgz#698b90fe60d44acf93c31064218fbea93fbfd85a"
+  integrity sha512-H90aoynNhhkQP6DRweEjJp5vfUVdIj7tdPLsu7pq89vODD/lcugKfZOsfgwpvM6XUewEp2N5dCg1Uf3Qe55Dcg==
+
 "@types/eslint-scope@^3.7.3":
   version "3.7.3"
   resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz"
@@ -2655,6 +2575,14 @@
   dependencies:
     "@types/node" "*"
 
+"@types/sql.js@^1.4.3":
+  version "1.4.3"
+  resolved "https://registry.npmjs.org/@types/sql.js/-/sql.js-1.4.3.tgz#190393fd9aff683b880b9fbe3b04b4f6a84c5fbd"
+  integrity sha512-3bz1LJIiJtKMEL8tYf7c9Nrb1lYcFeWQkE8vhWvobE29ZzizW79DtoTjqx1bR82DS2Ch2K30nOwNhuLclZ1vYg==
+  dependencies:
+    "@types/emscripten" "*"
+    "@types/node" "*"
+
 "@types/websocket@^1.0.5":
   version "1.0.5"
   resolved "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.5.tgz"
@@ -6017,11 +5945,6 @@ ionicons@^6.0.2:
   dependencies:
     "@stencil/core" "~2.16.0"
 
-ip-regex@^4.3.0:
-  version "4.3.0"
-  resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz"
-  integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==
-
 ip@^1.1.5:
   version "1.1.8"
   resolved "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz"
@@ -6362,6 +6285,17 @@ jdenticon@^3.1.1:
   dependencies:
     canvas-renderer "~2.2.0"
 
+jeep-sqlite@^1.5.5:
+  version "1.5.7"
+  resolved "https://registry.npmjs.org/jeep-sqlite/-/jeep-sqlite-1.5.7.tgz#c1f48e94673e9551a15ad83ea5c4f3c49bd75f4e"
+  integrity sha512-/lxBCs1uw3cvsdZizhxw8Kn/7SX3Xcxel7ifRiokyDekDqH9fpcdBh+W1lCq+u895bYL+l9XoqceT4zqUI5zvA==
+  dependencies:
+    "@stencil/core" "^2.17.4"
+    "@types/sql.js" "^1.4.3"
+    jszip "^3.7.1"
+    localforage "^1.10.0"
+    sql.js "^1.7.0"
+
 jest-worker@^27.4.5:
   version "27.5.1"
   resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz"
@@ -6504,6 +6438,16 @@ jszip@^3.1.3:
     readable-stream "~2.3.6"
     set-immediate-shim "~1.0.1"
 
+jszip@^3.7.1:
+  version "3.10.1"
+  resolved "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2"
+  integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==
+  dependencies:
+    lie "~3.3.0"
+    pako "~1.0.2"
+    readable-stream "~2.3.6"
+    setimmediate "^1.0.5"
+
 karma-chrome-launcher@~3.1.1:
   version "3.1.1"
   resolved "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz"
@@ -6680,9 +6624,9 @@ loader-utils@^2.0.0:
     emojis-list "^3.0.0"
     json5 "^2.1.2"
 
-localforage@^1.9.0:
+localforage@^1.10.0, localforage@^1.9.0:
   version "1.10.0"
-  resolved "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz"
+  resolved "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4"
   integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==
   dependencies:
     lie "3.1.1"
@@ -7565,6 +7509,11 @@ pako@^1.0.3, pako@~1.0.2:
   resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz"
   integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
 
+pako@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d"
+  integrity sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==
+
 parent-module@^1.0.0:
   version "1.0.1"
   resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
@@ -8759,6 +8708,11 @@ set-immediate-shim@~1.0.1:
   resolved "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz"
   integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
 
+setimmediate@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+  integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
+
 setprototypeof@1.1.0:
   version "1.1.0"
   resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz"
@@ -9006,6 +8960,11 @@ sprintf-js@~1.0.2:
   resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz"
   integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
 
+sql.js@^1.7.0:
+  version "1.7.0"
+  resolved "https://registry.npmjs.org/sql.js/-/sql.js-1.7.0.tgz#cadfed9773b643fbba0fc1ed1847e3a647e1fcb9"
+  integrity sha512-qAfft3xkSgHqmmfNugWTp/59PsqIw8gbeao5TZmpmzQQsAJ49de3iDDKuxVixidYs6dkHNksY8m27v2dZNn2jw==
+
 sshpk@^1.7.0:
   version "1.16.1"
   resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz"
@@ -9805,7 +9764,7 @@ websocket-extensions@>=0.1.1:
   resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz"
   integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
 
-websocket@^1.0.32, websocket@^1.0.34:
+websocket@^1.0.34:
   version "1.0.34"
   resolved "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz"
   integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==
@@ -9892,7 +9851,7 @@ wrappy@1:
   resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
   integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
 
-ws@^8.4.2:
+ws@^8.4.2, ws@^8.8.1:
   version "8.8.1"
   resolved "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0"
   integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==