diff --git a/lib/providers/substrate_sdk.dart b/lib/providers/substrate_sdk.dart
index 8af54068bb606597b92cba62fd1f4ed4c527ec55..34571f37b377b7e0c3d4fa91949cfd3e7b754e93 100644
--- a/lib/providers/substrate_sdk.dart
+++ b/lib/providers/substrate_sdk.dart
@@ -2,6 +2,7 @@
 
 import 'dart:typed_data';
 import 'package:easy_localization/easy_localization.dart';
+import 'package:fast_base58/fast_base58.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/chest_data.dart';
@@ -14,6 +15,7 @@ import 'package:polkawallet_sdk/api/types/txInfoData.dart';
 import 'package:polkawallet_sdk/polkawallet_sdk.dart';
 import 'package:polkawallet_sdk/storage/keyring.dart';
 import 'package:polkawallet_sdk/storage/types/keyPairData.dart';
+import 'package:polkawallet_sdk/webviewWithExtension/types/signExtrinsicParam.dart';
 import 'package:provider/provider.dart';
 import 'package:truncate/truncate.dart';
 import 'package:pointycastle/pointycastle.dart' as pc;
@@ -280,8 +282,14 @@ class SubstrateSdk with ChangeNotifier {
     return genesisHash;
   }
 
-  Future addressToPubkey(String address) async {
-    await sdk.api.account.decodeAddress([address]);
+  Future<String> addressToPubkey(String address,
+      [bool toBase58 = false]) async {
+    final pubkey = await sdk.api.account.decodeAddress([address]);
+    final String pubkeyHex = pubkey!.keys.first;
+    final pubkeyByte = HEX.decode(pubkeyHex.substring(2)) as Uint8List;
+    final pubkey58 = Base58Encode(pubkeyByte);
+
+    return toBase58 ? pubkey58 : pubkeyHex;
   }
 
   // Future pubkeyToAddress(String pubkey) async {
@@ -610,25 +618,6 @@ class SubstrateSdk with ChangeNotifier {
         cryptoType: CryptoType.ed25519,
         rawSeed: rawSeedHex);
 
-    // final json = await sdk.api.keyring.importAccount(keyring,
-    //     keyType: KeyType.rawSeed,
-    //     key: rawSeedHex,
-    //     name: 'test',
-    //     password: 'password',
-    //     derivePath: '',
-    //     cryptoType: CryptoType.ed25519);
-
-    // final keypair = await sdk.api.keyring.addAccount(
-    //   keyring,
-    //   keyType: KeyType.rawSeed,
-    //   acc: json!,
-    //   password: password,
-    // );
-    // await sdk.api.keyring.deleteAccount(keyring, keypair);
-
-    // final keypair2 = KeyPairData.fromJson(json as Map<String, dynamic>);
-
-    // g1V1NewAddress = keypair.address!;
     g1V1NewAddress = newAddress.address!;
     notifyListeners();
   }
@@ -794,10 +783,26 @@ class SubstrateSdk with ChangeNotifier {
     return await executeCall(txInfo, txOptions, password);
   }
 
+  Future<String> signMessage(
+      String message, String address, String password) async {
+    final params = SignAsExtensionParam();
+    params.msgType = "pub(bytes.sign)";
+    params.request = {
+      "address": address,
+      "data": message,
+    };
+
+    final res = await sdk.api.keyring.signAsExtension(password, params);
+    // log.d('signaturee: ${res?.signature}');
+
+    return res?.signature ?? '';
+  }
+
   Future<String> migrateIdentity(
       {required String fromAddress,
       required String destAddress,
-      required String password}) async {
+      required String formPassword,
+      required String destPassword}) async {
     transactionStatus = '';
     final fromPubkey = await sdk.api.account.decodeAddress([fromAddress]);
     final sender = TxSenderData(
@@ -810,27 +815,35 @@ class SubstrateSdk with ChangeNotifier {
     List txOptions = [];
     String? rawParams;
     // final destKeyring = getKeypair(destAddress);
+    // await sdk.api.keyring.signatureVerify(message, signature, address)
 
     final genesisHash = await getGenesisHash();
-    final idtyIndex = await getIdentityIndexOf(destAddress);
-    // final oldPubkey = await addressToPubkey(fromAddress);
-    final messageToSign = 'icok$genesisHash$idtyIndex$fromAddress';
-    final newKeySig = messageToSign;
+    final idtyIndex = await getIdentityIndexOf(fromAddress);
+    final oldPubkey = await addressToPubkey(fromAddress, true);
+    final messageToSign = 'icok$genesisHash$idtyIndex$oldPubkey';
+    final newKeySig =
+        await signMessage(messageToSign, destAddress, destPassword);
 
     txInfo = TxInfoData(
-      'utility',
-      'batchAll',
+      'identity',
+      'changeOwnerKey',
       sender,
     );
-    const tx1 = 'api.tx.universalDividend.claimUds()';
-    final tx2 = 'api.tx.identity.changeOwnerKey("$destAddress", "$newKeySig")';
-    const tx3 = 'api.tx.balances.transferAll(false)';
 
-    rawParams = '[[$tx1, $tx2, $tx3]]';
+    txOptions = [destAddress, newKeySig];
 
-    log.d(
-        'g1migration args:  ${txInfo.module}, ${txInfo.call}, $txOptions, $rawParams');
-    return await executeCall(txInfo, txOptions, password, rawParams);
+    // const tx1 = 'api.tx.universalDividend.claimUds()';
+    // final tx2 = 'api.tx.identity.changeOwnerKey("$destAddress", "$newKeySig")';
+    // const tx3 = 'api.tx.balances.transferAll(false)';
+
+    // rawParams = '[[$tx1, $tx2, $tx3]]';
+
+    log.d("""g1migration args:${txInfo.module}, ${txInfo.call},
+       txOptions: $txOptions
+       rawParams: $rawParams
+       messageToSign: $messageToSign
+       newKeySig: $newKeySig""");
+    return await executeCall(txInfo, txOptions, formPassword, rawParams);
   }
 
   Future revokeIdentity(String address, String password) async {
@@ -856,7 +869,9 @@ class SubstrateSdk with ChangeNotifier {
   }
 
   Future migrateCsToV2(String salt, String password, String destAddress,
-      {required double balance, String idtyStatus = 'noid'}) async {
+      {required destPassword,
+      required double balance,
+      String idtyStatus = 'noid'}) async {
     final scrypt = pc.KeyDerivator('scrypt');
 
     scrypt.init(
@@ -891,7 +906,8 @@ class SubstrateSdk with ChangeNotifier {
       await migrateIdentity(
           fromAddress: keypair.address!,
           destAddress: destAddress,
-          password: 'password');
+          formPassword: 'password',
+          destPassword: destPassword);
     } else if (balance != 0) {
       await pay(
           fromAddress: keypair.address!,
diff --git a/lib/screens/home.dart b/lib/screens/home.dart
index 297121b503f27d486cad471873d87099b58b88c0..f586685baa35c0a9a869830ec3363ab818e4bfaa 100644
--- a/lib/screens/home.dart
+++ b/lib/screens/home.dart
@@ -39,8 +39,7 @@ class HomeScreen extends StatelessWidget {
 
     final bool isWalletsExists = myWalletProvider.checkIfWalletExist();
 
-    // sub.csToV2('test', 'test');
-    // sub.getSs58Prefix();
+    // sub.addressToPubkey('5CQ8T4qpbYJq7uVsxGPQ5q2df7x3Wa4aRY6HUWMBYjfLZhnn');
 
     isTall = false;
     ratio = 1;
diff --git a/lib/screens/myWallets/import_g1_v1.dart b/lib/screens/myWallets/import_g1_v1.dart
index 259ec6eb726a25cc2c3c6a060400d0b4411ffed0..a9fbc21dcdf256acbc66dfe80cd84852d78354d2 100644
--- a/lib/screens/myWallets/import_g1_v1.dart
+++ b/lib/screens/myWallets/import_g1_v1.dart
@@ -1,3 +1,5 @@
+// ignore_for_file: use_build_context_synchronously
+
 import 'dart:async';
 
 import 'package:easy_localization/easy_localization.dart';
@@ -8,6 +10,7 @@ import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/providers/wallet_options.dart';
+import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
 import 'package:gecko/screens/transaction_in_progress.dart';
 import 'package:provider/provider.dart';
 
@@ -211,11 +214,27 @@ class ImportG1v1 extends StatelessWidget {
                         onPressed: canValidate
                             ? () async {
                                 log.d('GOOO');
+                                WalletData? defaultWallet =
+                                    myWalletProvider.getDefaultWallet();
+
+                                String? pin;
+                                if (myWalletProvider.pinCode == '') {
+                                  pin = await Navigator.push(
+                                    context,
+                                    MaterialPageRoute(
+                                      builder: (homeContext) {
+                                        return UnlockingWallet(
+                                            wallet: defaultWallet);
+                                      },
+                                    ),
+                                  );
+                                }
 
                                 sub.migrateCsToV2(
                                     sub.csSalt.text,
                                     sub.csPassword.text,
                                     selectedWallet.address!,
+                                    destPassword: pin ?? myWalletProvider.pinCode,
                                     balance: balance,
                                     idtyStatus: idtyStatus);
                                 Navigator.push(
diff --git a/lib/screens/transaction_in_progress.dart b/lib/screens/transaction_in_progress.dart
index d63e1668cae762dc9856e6f219c9697426e99e72..6ab820baa72b4562b205bd6da448b053787d2c1c 100644
--- a/lib/screens/transaction_in_progress.dart
+++ b/lib/screens/transaction_in_progress.dart
@@ -88,7 +88,8 @@ class TransactionInProgress extends StatelessWidget {
           if (result.contains('blockHash: ')) {
             isValid = true;
             resultText = 'extrinsicValidated'.tr(args: [actionName]);
-            log.i('Bloc of last transaction: ${sub.blocNumber} --- $result');
+            log.i(
+                'g1migration Bloc of last transaction: ${sub.blocNumber} --- $result');
           } else {
             isValid = false;
             resultText = "${"anErrorOccured".tr()}:\n";