diff --git a/assets/translations/en.json b/assets/translations/en.json
index fdfeae167424d6f77eae9eabe30937d46bfe34b9..306a84bc08832fef3b8dc978b1b08a8046e9acb1 100644
--- a/assets/translations/en.json
+++ b/assets/translations/en.json
@@ -71,7 +71,7 @@
     "yourChestAndWalletWereRestoredSuccessfully": "Super!\n\nYour safe and your portfolios have been restored with great success.\n\nCongratulations!",
     "allGood": "That's all good!",
     "areYouSureToForgetSafe": "Are you sure you want to forget the safe \"{}\"?",
-    "areYouSureForgetAllChests": "Are you sure you want to forget all your safes?",
+    "areYouSureForgetAllSafes": "Are you sure you want to forget all your safes?",
     "areYouSureToForgetWallet": "Are you sure you want to forget the wallet \"{}\"?\nThe balance will be transferred to your default wallet.",
     "areYouSureYouWantToCertify1": "Are you sure you want to certify the identity :",
     "areYouSureYouWantToCertify2": "having the address :",
diff --git a/assets/translations/es.json b/assets/translations/es.json
index 571c73fb27f1c0c1a7be3ee178b1299708132a45..23e5a273f11927fbd8efa889ae71a57858218387 100644
--- a/assets/translations/es.json
+++ b/assets/translations/es.json
@@ -71,7 +71,7 @@
     "yourChestAndWalletWereRestoredSuccessfully": "¡Genial!\n\nTu cofre y tus monederos han sido restaurados con éxito.\n\n¡Felicidades!",
     "allGood": "¡Todo bien!",
     "areYouSureToForgetSafe": "¿Seguro de que quieres olvidar el cofre \"{}\"?",
-    "areYouSureForgetAllChests": "¿Seguro de que quieres olvidar todos tus cofres?",
+    "areYouSureForgetAllSafes": "¿Seguro de que quieres olvidar todos tus cofres?",
     "areYouSureToForgetWallet": "¿Seguro de que quieres olvidar el monedero \"{}\"?\nEl saldo será transferido al monedero por defecto.",
     "areYouSureYouWantToCertify": "¿Seguro de que quiere certificar a la dirección\n\n{}?",
     "areYouSureYouWantToCertify1": "¿Seguro de que quiere certificar a la identidad :",
diff --git a/assets/translations/fr.json b/assets/translations/fr.json
index 823af693896d22c0e227270b0c50b530affacb71..66ff74435bf49eaef9a4d4e9abab45e1fb15f2d1 100644
--- a/assets/translations/fr.json
+++ b/assets/translations/fr.json
@@ -71,7 +71,7 @@
     "yourChestAndWalletWereRestoredSuccessfully": "Top !\n\nVotre coffre et vos portefeuilles ont été restaurés avec succès.\n\nFélicitations !",
     "allGood": "C'est tout bon !",
     "areYouSureToForgetSafe": "Êtes-vous sûr de vouloir oublier le coffre \"{}\" ?",
-    "areYouSureForgetAllChests": "Êtes-vous sûr de vouloir oublier tous vos coffres ?",
+    "areYouSureForgetAllSafes": "Êtes-vous sûr de vouloir oublier tous vos coffres ?",
     "areYouSureToForgetWallet": "Êtes-vous sûr de vouloir oublier le portefeuille \"{}\" ?\nLe solde sera transféré vers votre portefeuille par défaut.",
     "areYouSureYouWantToCertify1": "Êtes-vous certain de vouloir certifier l'identité :",
     "areYouSureYouWantToCertify2": "ayant pour adresse :",
diff --git a/assets/translations/it.json b/assets/translations/it.json
index 0e2b1cabd377f0c56d42343c095b21ac1de85dc2..7376d21f08eba4208b90e910ed70e2e0a3051cd6 100644
--- a/assets/translations/it.json
+++ b/assets/translations/it.json
@@ -70,7 +70,7 @@
     "yourChestAndWalletWereRestoredSuccessfully": "Fantastico!\n\nIl tuo scrigno e i tuoi portafogli sono stati recuperati con successo.\n\nCongratulazioni!",
     "allGood": "Tutto bene!",
     "areYouSureToForgetSafe": "Sicuro che vuoi eliminare lo scrigno \"{}\"?",
-    "areYouSureForgetAllChests": "Sicuro che vuoi dimenticare tutti i tuoi scrigni?",
+    "areYouSureForgetAllSafes": "Sicuro che vuoi dimenticare tutti i tuoi scrigni?",
     "areYouSureToForgetWallet": "Sicuro che vuoi dimenticare il tuo portafoglio \"{}\"?",
     "areYouSureYouWantToCertify": "Sicuro che vuoi certificare l'indirizzo\n\n{}?",
     "areYouSureYouWantToCertify1": "Sicuro che vuoi certificare l'identitá :",
diff --git a/integration_test/utility/tests_utility.dart b/integration_test/utility/tests_utility.dart
index 4fa850ac59a513a7fced7135cb0c061ed3bc3aa1..f4e2c8aa4a2d306cb6ac8e6b4a097f957fa39914 100644
--- a/integration_test/utility/tests_utility.dart
+++ b/integration_test/utility/tests_utility.dart
@@ -1,10 +1,9 @@
+import 'package:durt2/durt2.dart' show Durt, WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter_test/flutter_test.dart';
 import 'package:gecko/globals.dart';
-import 'package:gecko/models/wallet_data.dart';
-import 'package:gecko/providers/generate_wallets.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/utils.dart';
@@ -14,24 +13,38 @@ import 'package:gecko/main.dart' as app;
 import 'package:uuid/uuid.dart';
 
 const isHumanReading = false;
-Timeout testTimeout([int seconds = 120]) => Timeout(Duration(seconds: isHumanReading ? 600 : seconds));
+Timeout testTimeout([int seconds = 120]) =>
+    Timeout(Duration(seconds: isHumanReading ? 600 : seconds));
 final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
 late WidgetTester tester;
 
 // TEST WALLETS CONSTS
-const testMnemonic = 'pipe paddle ketchup filter life ice feel embody glide quantum ride usage';
-final test1 = TestWallet('5FeggKqw2AbnGZF9Y9WPM2QTgzENS3Hit94Ewgmzdg5a3LNa', 'test1');
-final test2 = TestWallet('5E4i8vcNjnrDp21Sbnp32WHm2gz8YP3GGFwmdpfg5bHd8Whb', 'test2');
-final test3 = TestWallet('5FhTLzXLNBPmtXtDBFECmD7fvKmTtTQDtvBTfVr97tachA1p', 'test3');
-final test4 = TestWallet('5DXJ4CusmCg8S1yF6JGVn4fxgk5oFx42WctXqHZ17mykgje5', 'test4');
-final test5 = TestWallet('5Dq3giahrBfykJogPetZJ2jjSmhw49Fa7i6qKkseUvRJ2T3R', 'test5');
-final test6 = TestWallet('5GxEp3do81j97kNaH4JyZgDXuPoKWoTuxXXWGyyNXeKeVLHb', 'test6');
-final test7 = TestWallet('5FZ1sSvREbQLCtSSCvMUx7KCAnpJkB7q5mfz2oixiZq2ChET', 'test7');
-final test8 = TestWallet('5CoKV9EEgwb2NmWamTXUAa6ycfNb2k1iNfVGvJAkg7dLq9RH', 'test8');
-final cesiumTest1 = TestWallet('5GAT6CJW8yVKwUuQc7sM5Kk9GZVTpbZYk9PfjNXtvnNgAJZ1', 'cesiumTest1');
-final cesiumTest2 = TestWallet('5DTnny1tTkUs1SXHZTx98RUAj76Z88FfFhsQjd48dXnk8gHR', 'cesiumTest2');
-final cesiumTest3 = TestWallet('5EJct9jTDNKco4YiYfETAseq1gaduBtsJUcNnFicfvh3bTV6', 'cesiumTest3');
-final cesiumTest4 = TestWallet('5HD1oSv6A7VNxPYos6F86JFZ3bhz5LnEaWC4hkwLMj84v4ww', 'cesiumTest4');
+const testMnemonic =
+    'pipe paddle ketchup filter life ice feel embody glide quantum ride usage';
+final test1 =
+    TestWallet('5FeggKqw2AbnGZF9Y9WPM2QTgzENS3Hit94Ewgmzdg5a3LNa', 'test1');
+final test2 =
+    TestWallet('5E4i8vcNjnrDp21Sbnp32WHm2gz8YP3GGFwmdpfg5bHd8Whb', 'test2');
+final test3 =
+    TestWallet('5FhTLzXLNBPmtXtDBFECmD7fvKmTtTQDtvBTfVr97tachA1p', 'test3');
+final test4 =
+    TestWallet('5DXJ4CusmCg8S1yF6JGVn4fxgk5oFx42WctXqHZ17mykgje5', 'test4');
+final test5 =
+    TestWallet('5Dq3giahrBfykJogPetZJ2jjSmhw49Fa7i6qKkseUvRJ2T3R', 'test5');
+final test6 =
+    TestWallet('5GxEp3do81j97kNaH4JyZgDXuPoKWoTuxXXWGyyNXeKeVLHb', 'test6');
+final test7 =
+    TestWallet('5FZ1sSvREbQLCtSSCvMUx7KCAnpJkB7q5mfz2oixiZq2ChET', 'test7');
+final test8 =
+    TestWallet('5CoKV9EEgwb2NmWamTXUAa6ycfNb2k1iNfVGvJAkg7dLq9RH', 'test8');
+final cesiumTest1 = TestWallet(
+    '5GAT6CJW8yVKwUuQc7sM5Kk9GZVTpbZYk9PfjNXtvnNgAJZ1', 'cesiumTest1');
+final cesiumTest2 = TestWallet(
+    '5DTnny1tTkUs1SXHZTx98RUAj76Z88FfFhsQjd48dXnk8gHR', 'cesiumTest2');
+final cesiumTest3 = TestWallet(
+    '5EJct9jTDNKco4YiYfETAseq1gaduBtsJUcNnFicfvh3bTV6', 'cesiumTest3');
+final cesiumTest4 = TestWallet(
+    '5HD1oSv6A7VNxPYos6F86JFZ3bhz5LnEaWC4hkwLMj84v4ww', 'cesiumTest4');
 
 // CUSTOM FUNCTIONS
 
@@ -39,22 +52,27 @@ Future sleep([int time = 1000]) async {
   await Future.delayed(Duration(milliseconds: time));
 }
 
-Future pump({Duration duration = const Duration(milliseconds: 300), int number = 1}) async {
+Future pump(
+    {Duration duration = const Duration(milliseconds: 300),
+    int number = 1}) async {
   for (int i = 0; i < number; i++) {
     log.i("pump $i");
     await tester.pump(duration = duration);
   }
 }
 
-Future<String> clipPaste() async => (await Clipboard.getData('text/plain'))?.text ?? '';
+Future<String> clipPaste() async =>
+    (await Clipboard.getData('text/plain'))?.text ?? '';
 
-clipCopy(String text) async => await Clipboard.setData(ClipboardData(text: text));
+clipCopy(String text) async =>
+    await Clipboard.setData(ClipboardData(text: text));
 
 Future humanRead([int time = 1, bool force = false]) async {
   if (isHumanReading || force) io.sleep(Duration(seconds: time));
 }
 
-Future tapKey(Key buttonKey, {Finder? customFinder, int duration = 100, bool selectLast = false}) async {
+Future tapKey(Key buttonKey,
+    {Finder? customFinder, int duration = 100, bool selectLast = false}) async {
   if (duration != 0) {
     await tester.pumpAndSettle(Duration(milliseconds: duration));
   }
@@ -82,7 +100,9 @@ Future scrollUntil(Key element) async {
   );
 }
 
-Future<void> waitForButtonEnabled(Key key, {Duration timeout = const Duration(seconds: 5), bool reverse = false}) async {
+Future<void> waitForButtonEnabled(Key key,
+    {Duration timeout = const Duration(seconds: 5),
+    bool reverse = false}) async {
   final end = DateTime.now().add(timeout);
 
   log.i('INTEGRATION TEST: Wait for $key to be enabled');
@@ -134,7 +154,8 @@ Future<void> waitFor(String text,
     }
 
     if (settle) {
-      await tester.pumpAndSettle(Duration(milliseconds: pumpDuration), EnginePhase.sendSemanticsUpdate, timeout);
+      await tester.pumpAndSettle(Duration(milliseconds: pumpDuration),
+          EnginePhase.sendSemanticsUpdate, timeout);
     }
     await Future.delayed(const Duration(milliseconds: 100));
   } while (reverse ? finder.evaluate().isNotEmpty : finder.evaluate().isEmpty);
@@ -142,7 +163,8 @@ Future<void> waitFor(String text,
 }
 
 // Test if text is visible on screen, return a boolean
-Future<bool> isPresent(String text, {Duration timeout = const Duration(seconds: 1), bool settle = true}) async {
+Future<bool> isPresent(String text,
+    {Duration timeout = const Duration(seconds: 1), bool settle = true}) async {
   try {
     await waitFor(text, timeout: timeout, settle: settle);
     humanRead();
@@ -154,7 +176,8 @@ Future<bool> isPresent(String text, {Duration timeout = const Duration(seconds:
 }
 
 // Test if widget exist on screen, return a boolean
-Future<bool> isIconPresent(IconData icon, {Duration timeout = const Duration(seconds: 1)}) async {
+Future<bool> isIconPresent(IconData icon,
+    {Duration timeout = const Duration(seconds: 1)}) async {
   await tester.pumpAndSettle();
   final finder = find.byIcon(icon);
   humanRead();
@@ -173,7 +196,10 @@ Future spawnBlock({int number = 1, int duration = 200, int? until}) async {
 }
 
 // Pay in background
-Future bkPay({required String fromAddress, required String destAddress, required double amount}) async {
+Future bkPay(
+    {required String fromAddress,
+    required String destAddress,
+    required double amount}) async {
   final transactionId = const Uuid().v4();
   sub.pay(
     fromAddress: fromAddress,
@@ -189,7 +215,10 @@ Future bkPay({required String fromAddress, required String destAddress, required
 }
 
 // Certify in background
-Future bkCertify({required String fromAddress, required String destAddress, bool spawnBloc = true}) async {
+Future bkCertify(
+    {required String fromAddress,
+    required String destAddress,
+    bool spawnBloc = true}) async {
   sub.certify(fromAddress, destAddress, 'AAAAA');
   if (spawnBloc) {
     await sleep(500);
@@ -199,7 +228,8 @@ Future bkCertify({required String fromAddress, required String destAddress, bool
 }
 
 // Confirm my identity in background
-Future bkConfirmIdentity({required String fromAddress, required String name}) async {
+Future bkConfirmIdentity(
+    {required String fromAddress, required String name}) async {
   sub.confirmIdentity(fromAddress, name, 'AAAAA');
   await sleep(500);
   await spawnBlock();
@@ -218,33 +248,51 @@ Future bkSetNode([String? endpoint]) async {
 
 // Restore chest in background
 Future bkRestoreChest([String mnemonic = testMnemonic]) async {
-  final myWalletProvider = Provider.of<MyWalletsProvider>(homeContext, listen: false);
-  final generateWalletProvider = Provider.of<GenerateWalletsProvider>(homeContext, listen: false);
+  final myWalletProvider =
+      Provider.of<MyWalletsProvider>(homeContext, listen: false);
+  // final generateWalletProvider = Provider.of<GenerateWalletsProvider>(homeContext, listen: false);
 
-  await generateWalletProvider.storeHDWChest(homeContext);
+  // await generateWalletProvider.storeHDWChest(homeContext);
 
   for (int number = 0; number <= 4; number++) {
-    await _addImportAccount(mnemonic: mnemonic, chest: 0, number: number, name: 'test${number + 1}', derivation: (number + 1) * 2);
+    await _addImportAccount(
+        mnemonic: mnemonic,
+        safeNumber: 0,
+        number: number,
+        name: 'test${number + 1}',
+        derivation: (number + 1) * 2);
   }
   myWalletProvider.reload();
 }
 
-Future<WalletData> _addImportAccount({required String mnemonic, required int chest, required int number, required String name, required int derivation}) async {
-  final address = await sub.importAccount(mnemonic: mnemonic, derivePath: '//$derivation', password: 'AAAAA');
-  final myWallet =
-      WalletData(chest: chest, address: address, number: number, name: name, derivation: derivation, imageDefaultPath: '${number % 4}.png', isOwned: true);
-  await walletBox.put(myWallet.address, myWallet);
+Future<WalletData> _addImportAccount(
+    {required String mnemonic,
+    required int safeNumber,
+    required int number,
+    required String name,
+    required int derivation}) async {
+  final address = await sub.importAccount(
+      mnemonic: mnemonic, derivePath: '//$derivation', password: 'AAAAA');
+  final myWallet = WalletData(
+      safeBoxNumber: safeNumber,
+      address: address,
+      name: name,
+      derivation: derivation,
+      imagePath: '${number % 4}.png',
+      isOwned: true);
+  await Durt.i.walletService.walletDataBox.put(myWallet.address, myWallet);
 
   return myWallet;
 }
 
 // Delete all wallets in background
 Future bkDeleteAllWallets() async {
-  final myWalletProvider = Provider.of<MyWalletsProvider>(homeContext, listen: false);
-  final isWalletsPresents = await isPresent('scanQRCode'.tr(), timeout: const Duration(milliseconds: 300));
+  final myWalletProvider =
+      Provider.of<MyWalletsProvider>(homeContext, listen: false);
+  final isWalletsPresents = await isPresent('scanQRCode'.tr(),
+      timeout: const Duration(milliseconds: 300));
   if (isWalletsPresents) {
-    await walletBox.clear();
-    await chestBox.clear();
+    await Durt.i.walletService.clearWallet();
     await configBox.delete('defaultWallet');
     await configBox.delete('isUdUnit');
     await sub.deleteAllAccounts();
diff --git a/lib/globals.dart b/lib/globals.dart
index 4e4046c3afe3bcf2b020aa65d2f37c359c76450a..7b9b826a133456a7cff795fb7667c3313805e6c9 100644
--- a/lib/globals.dart
+++ b/lib/globals.dart
@@ -1,9 +1,7 @@
 import 'dart:io';
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
-import 'package:gecko/models/chest_data.dart';
 import 'package:gecko/models/g1_wallets_list.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/wallet_header_data.dart';
 import 'package:hive_flutter/hive_flutter.dart';
 import 'package:logger/logger.dart';
@@ -17,8 +15,6 @@ const int pinLength = 4;
 const int maxWalletsInSafe = 30;
 const String appLang = 'english';
 
-late Box<WalletData> walletBox;
-late Box<ChestData> chestBox;
 late Box configBox;
 late Box<G1WalletsList> g1WalletsBox;
 late Box<G1WalletsList> contactsBox;
diff --git a/lib/main.dart b/lib/main.dart
index e18ec9041d5e519d0b3e8ace2c0d68b32c7d0ddd..abf8a8767a9b894d3fcb3e7c4823d650b53e8da5 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -14,7 +14,7 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 import 'dart:async';
-import 'package:durt2/durt2.dart';
+import 'package:durt2/durt2.dart' show Durt, Networks;
 import 'package:flutter/services.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/providers/chest_provider.dart';
@@ -33,10 +33,6 @@ import 'package:flutter/material.dart';
 import 'package:gecko/screens/myWallets/wallets_home.dart';
 import 'package:gecko/screens/search.dart';
 import 'package:gecko/screens/search_result.dart';
-import 'package:gecko/services/durt.service.dart';
-import 'package:gecko/services/wallets.service.dart';
-import 'package:get_it/get_it.dart';
-
 import 'package:provider/provider.dart';
 import 'package:flutter/foundation.dart';
 import 'package:responsive_framework/responsive_framework.dart';
@@ -61,16 +57,18 @@ Future<void> main() async {
   await initHiveForFlutter();
   await homeProvider.initHive();
 
-
-
   appVersion = await homeProvider.getAppVersion();
 
   // Register app dependencies
-  await registerDependencies();
+  // await registerDependencies();
+
+  //Init durt2
+  await Durt().init(network: Networks.gdev);
 
   if (kReleaseMode && enableSentry) {
     await SentryFlutter.init((options) {
-      options.dsn = 'https://c09587b46eaa42e8b9fda28d838ed180@o496840.ingest.sentry.io/5572110';
+      options.dsn =
+          'https://c09587b46eaa42e8b9fda28d838ed180@o496840.ingest.sentry.io/5572110';
       options.experimental.replay.sessionSampleRate = 1.0;
       options.experimental.replay.onErrorSampleRate = 1.0;
       // Privacy settings for PII masking
@@ -78,11 +76,17 @@ Future<void> main() async {
       options.experimental.privacy.maskAllText = false;
       options.experimental.privacy.maskAllImages = false;
     },
-        appRunner: () => SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]).then((_) {
+        appRunner: () => SystemChrome.setPreferredOrientations(
+                [DeviceOrientation.portraitUp]).then((_) {
               runApp(
                 SentryWidget(
                   child: EasyLocalization(
-                    supportedLocales: const [Locale('en'), Locale('fr'), Locale('es'), Locale('it')],
+                    supportedLocales: const [
+                      Locale('en'),
+                      Locale('fr'),
+                      Locale('es'),
+                      Locale('it')
+                    ],
                     path: 'assets/translations',
                     fallbackLocale: const Locale('en'),
                     child: const Gecko(),
@@ -93,10 +97,16 @@ Future<void> main() async {
   } else {
     log.i('Debug mode enabled: No sentry alert');
 
-    SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]).then((_) {
+    SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp])
+        .then((_) {
       runApp(EasyLocalization(
         // test, force locale :: startLocale: Locale.fromSubtags(languageCode: 'it'),
-        supportedLocales: const [Locale('en'), Locale('fr'), Locale('es'), Locale('it')],
+        supportedLocales: const [
+          Locale('en'),
+          Locale('fr'),
+          Locale('es'),
+          Locale('it')
+        ],
         path: 'assets/translations',
         fallbackLocale: const Locale('en'),
         child: const Gecko(),
@@ -176,7 +186,8 @@ class Gecko extends StatelessWidget {
           primaryColor: const Color(0xffFFD58D),
           scaffoldBackgroundColor: backgroundColor,
           canvasColor: backgroundColor,
-          colorScheme: ColorScheme.fromSwatch().copyWith(secondary: Colors.grey[850]),
+          colorScheme:
+              ColorScheme.fromSwatch().copyWith(secondary: Colors.grey[850]),
           dialogTheme: DialogThemeData(backgroundColor: backgroundColor),
         ),
         initialRoute: "/",
@@ -191,11 +202,7 @@ class Gecko extends StatelessWidget {
   }
 }
 
-Future<void> registerDependencies() async {
-  GetIt.I.registerSingleton<WalletsService>(WalletsService());
-  GetIt.I.registerSingleton<DurtService>(DurtService());
-  GetIt.I.registerSingleton<DuniterStorageService>(DuniterStorageService());
-
-  // Wait for all non-lazy repos to be ready
-  await GetIt.I.allReady();
-}
+// Future<void> registerDependencies() async {
+//   // Wait for all non-lazy repos to be ready
+//   await GetIt.I.allReady();
+// }
diff --git a/lib/models/chest_data.dart b/lib/models/chest_data.dart
deleted file mode 100644
index ef2d3f72d08d2dcf680b92ea882a1909079c1402..0000000000000000000000000000000000000000
--- a/lib/models/chest_data.dart
+++ /dev/null
@@ -1,34 +0,0 @@
-import 'dart:io';
-import 'package:hive_flutter/hive_flutter.dart';
-part 'chest_data.g.dart';
-
-@HiveType(typeId: 1)
-class ChestData extends HiveObject {
-  @HiveField(0)
-  String? name;
-
-  @HiveField(1)
-  int? defaultWallet;
-
-  @HiveField(2)
-  String? imageName;
-
-  @HiveField(3)
-  File? imageFile;
-
-  @HiveField(4)
-  int? memberWallet;
-
-  ChestData({
-    this.name,
-    this.defaultWallet,
-    this.imageName,
-    this.imageFile,
-    this.memberWallet,
-  });
-
-  @override
-  String toString() {
-    return name!;
-  }
-}
diff --git a/lib/models/chest_data.g.dart b/lib/models/chest_data.g.dart
deleted file mode 100644
index cf1aa52cd62489f22ba3b0dd4baaecb12cb5bfec..0000000000000000000000000000000000000000
--- a/lib/models/chest_data.g.dart
+++ /dev/null
@@ -1,53 +0,0 @@
-// GENERATED CODE - DO NOT MODIFY BY HAND
-
-part of 'chest_data.dart';
-
-// **************************************************************************
-// TypeAdapterGenerator
-// **************************************************************************
-
-class ChestDataAdapter extends TypeAdapter<ChestData> {
-  @override
-  final int typeId = 1;
-
-  @override
-  ChestData read(BinaryReader reader) {
-    final numOfFields = reader.readByte();
-    final fields = <int, dynamic>{
-      for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
-    };
-    return ChestData(
-      name: fields[0] as String?,
-      defaultWallet: fields[1] as int?,
-      imageName: fields[2] as String?,
-      imageFile: fields[3] as File?,
-      memberWallet: fields[4] as int?,
-    );
-  }
-
-  @override
-  void write(BinaryWriter writer, ChestData obj) {
-    writer
-      ..writeByte(5)
-      ..writeByte(0)
-      ..write(obj.name)
-      ..writeByte(1)
-      ..write(obj.defaultWallet)
-      ..writeByte(2)
-      ..write(obj.imageName)
-      ..writeByte(3)
-      ..write(obj.imageFile)
-      ..writeByte(4)
-      ..write(obj.memberWallet);
-  }
-
-  @override
-  int get hashCode => typeId.hashCode;
-
-  @override
-  bool operator ==(Object other) =>
-      identical(this, other) ||
-      other is ChestDataAdapter &&
-          runtimeType == other.runtimeType &&
-          typeId == other.typeId;
-}
diff --git a/lib/models/membership_renewal.dart b/lib/models/membership_renewal.dart
index f477f99f460780bd6bd3dcae44bb4af8872c57ac..6ff3e2318150a47214b08ce125b5b582f7044796 100644
--- a/lib/models/membership_renewal.dart
+++ b/lib/models/membership_renewal.dart
@@ -1,9 +1,9 @@
 // ignore_for_file: use_build_context_synchronously
 
+import 'package:durt2/durt2.dart' show IdtyStatus;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/screens/transaction_in_progress.dart';
@@ -15,7 +15,7 @@ import 'package:gecko/models/membership_status.dart';
 class MembershipRenewal {
   static RenewalInfo calculateRenewalInfo(MembershipStatus status, int renewalPeriodBlocks) {
     if (status.expireDate == null) {
-      return status.idtyStatus == IdtyStatus.notMember
+      return status.idtyStatus == IdtyStatus.expired
           ? RenewalInfo(
               canRenew: true,
               isExpired: true,
diff --git a/lib/models/membership_status.dart b/lib/models/membership_status.dart
index 6059351ea9b2a5eb8e44d0459a164d43fe933133..a8cab69d1877f57e8e84885eea779a01e667fb54 100644
--- a/lib/models/membership_status.dart
+++ b/lib/models/membership_status.dart
@@ -1,4 +1,4 @@
-import 'package:gecko/models/wallet_data.dart';
+import 'package:durt2/durt2.dart' show IdtyStatus;
 
 class MembershipStatus {
   final DateTime? expireDate;
diff --git a/lib/models/migrate_wallet_checks.dart b/lib/models/migrate_wallet_checks.dart
index 5e4f03b9a7a549de2a2cd17a7f54616e79a25be1..81a7b86f0a69768f677dbabfcbbe3be28caa2e3a 100644
--- a/lib/models/migrate_wallet_checks.dart
+++ b/lib/models/migrate_wallet_checks.dart
@@ -1,4 +1,4 @@
-import 'package:gecko/models/wallet_data.dart';
+import 'package:durt2/durt2.dart' show IdtyStatus;
 
 class MigrateWalletChecks {
   final Map<String, dynamic> fromBalance;
diff --git a/lib/models/wallet_data.dart b/lib/models/wallet_data.dart
deleted file mode 100644
index 9f1fc93388bc074770ab3e82865e4d5ae0146051..0000000000000000000000000000000000000000
--- a/lib/models/wallet_data.dart
+++ /dev/null
@@ -1,148 +0,0 @@
-// ignore_for_file: use_build_context_synchronously
-
-import 'dart:io';
-
-import 'package:gecko/globals.dart';
-import 'package:gecko/providers/v2s_datapod.dart';
-import 'package:hive_flutter/hive_flutter.dart';
-import 'package:provider/provider.dart';
-import 'package:uuid/uuid.dart';
-part 'wallet_data.g.dart';
-
-@HiveType(typeId: 0)
-class WalletData extends HiveObject {
-  @HiveField(0)
-  String address;
-
-  @HiveField(1)
-  int? chest;
-
-  @HiveField(2)
-  int? number;
-
-  @HiveField(3)
-  String? name;
-
-  @HiveField(4)
-  int? derivation;
-
-  @HiveField(5)
-  String? imageDefaultPath;
-
-  @HiveField(6)
-  String? imageCustomPath;
-
-  @HiveField(7)
-  bool isOwned;
-
-  @HiveField(8)
-  IdtyStatus identityStatus;
-
-  @HiveField(9)
-  double balance;
-
-  @HiveField(10)
-  List<int>? certs;
-
-  @HiveField(11)
-  DateTime? profileUpdatedTime;
-
-  WalletData({
-    required this.address,
-    this.chest,
-    this.number,
-    this.name,
-    this.derivation,
-    this.imageDefaultPath,
-    this.imageCustomPath,
-    this.profileUpdatedTime,
-    this.isOwned = false,
-    this.identityStatus = IdtyStatus.unknown,
-    this.balance = 0,
-    this.certs,
-  });
-
-  // representation of WalletData when debugging
-  @override
-  String toString() {
-    return name!;
-  }
-
-  // creates the ':'-separated string from the WalletData
-  String get inLine => "$chest:$number:$name:$derivation:$imageDefaultPath:$imageCustomPath:$identityStatus";
-
-  bool get hasIdentity =>
-      identityStatus == IdtyStatus.unconfirmed ||
-      identityStatus == IdtyStatus.unvalidated ||
-      identityStatus == IdtyStatus.member ||
-      identityStatus == IdtyStatus.notMember;
-
-  bool get isMembre => identityStatus == IdtyStatus.member;
-
-  bool get exist => balance != 0;
-
-  bool get hasCustomImage => imageCustomPath != null;
-
-  List<int?> get id => [chest, number];
-
-  Future<DateTime?> getUpdatedTime() async {
-    final datapod = Provider.of<V2sDatapodProvider>(homeContext, listen: false);
-    return await datapod.profileEditedAt(address);
-  }
-
-  Future<bool> shouldUpdateProfile() async {
-    final remoteUpdatedProfile = await getUpdatedTime();
-    late Duration difference;
-    if (profileUpdatedTime != null && remoteUpdatedProfile != null) {
-      difference = profileUpdatedTime!.difference(remoteUpdatedProfile);
-    } else if (remoteUpdatedProfile != null) {
-      return true;
-    } else {
-      difference = Duration.zero;
-    }
-    return difference.inSeconds.abs() >= 30;
-  }
-
-  /// This method get the remote avatar on v2s-datapod only if needed, and store it on disk
-  Future getDatapodAvatar() async {
-    if (!await shouldUpdateProfile()) return;
-
-    final datapod = Provider.of<V2sDatapodProvider>(homeContext, listen: false);
-    final avatarUuid = const Uuid().v4();
-
-    await datapod.getRemoteAvatar(address, uuid: avatarUuid);
-
-    final avatarPath = '${avatarsDirectory.path}/$address-$avatarUuid';
-    if (!await File(avatarPath).exists()) return;
-
-    profileUpdatedTime = await getUpdatedTime();
-    imageCustomPath = avatarPath;
-
-    walletBox.put(address, this);
-    datapod.reload();
-  }
-}
-
-@HiveType(typeId: 5)
-enum IdtyStatus {
-  @HiveField(0)
-  none,
-
-  @HiveField(1)
-  unconfirmed,
-
-  @HiveField(2)
-  unvalidated,
-
-  @HiveField(3)
-  member,
-
-  @HiveField(4)
-  notMember,
-
-  @HiveField(5)
-  revoked,
-
-  @HiveField(6)
-  unknown
-}
diff --git a/lib/models/wallet_data.g.dart b/lib/models/wallet_data.g.dart
deleted file mode 100644
index 71df96177fcea7159d9621e79e11396aec21cc61..0000000000000000000000000000000000000000
--- a/lib/models/wallet_data.g.dart
+++ /dev/null
@@ -1,138 +0,0 @@
-// GENERATED CODE - DO NOT MODIFY BY HAND
-
-part of 'wallet_data.dart';
-
-// **************************************************************************
-// TypeAdapterGenerator
-// **************************************************************************
-
-class WalletDataAdapter extends TypeAdapter<WalletData> {
-  @override
-  final int typeId = 0;
-
-  @override
-  WalletData read(BinaryReader reader) {
-    final numOfFields = reader.readByte();
-    final fields = <int, dynamic>{
-      for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
-    };
-    return WalletData(
-      address: fields[0] as String,
-      chest: fields[1] as int?,
-      number: fields[2] as int?,
-      name: fields[3] as String?,
-      derivation: fields[4] as int?,
-      imageDefaultPath: fields[5] as String?,
-      imageCustomPath: fields[6] as String?,
-      profileUpdatedTime: fields[11] as DateTime?,
-      isOwned: fields[7] as bool,
-      identityStatus: fields[8] as IdtyStatus,
-      balance: fields[9] as double,
-      certs: (fields[10] as List?)?.cast<int>(),
-    );
-  }
-
-  @override
-  void write(BinaryWriter writer, WalletData obj) {
-    writer
-      ..writeByte(12)
-      ..writeByte(0)
-      ..write(obj.address)
-      ..writeByte(1)
-      ..write(obj.chest)
-      ..writeByte(2)
-      ..write(obj.number)
-      ..writeByte(3)
-      ..write(obj.name)
-      ..writeByte(4)
-      ..write(obj.derivation)
-      ..writeByte(5)
-      ..write(obj.imageDefaultPath)
-      ..writeByte(6)
-      ..write(obj.imageCustomPath)
-      ..writeByte(7)
-      ..write(obj.isOwned)
-      ..writeByte(8)
-      ..write(obj.identityStatus)
-      ..writeByte(9)
-      ..write(obj.balance)
-      ..writeByte(10)
-      ..write(obj.certs)
-      ..writeByte(11)
-      ..write(obj.profileUpdatedTime);
-  }
-
-  @override
-  int get hashCode => typeId.hashCode;
-
-  @override
-  bool operator ==(Object other) =>
-      identical(this, other) ||
-      other is WalletDataAdapter &&
-          runtimeType == other.runtimeType &&
-          typeId == other.typeId;
-}
-
-class IdtyStatusAdapter extends TypeAdapter<IdtyStatus> {
-  @override
-  final int typeId = 5;
-
-  @override
-  IdtyStatus read(BinaryReader reader) {
-    switch (reader.readByte()) {
-      case 0:
-        return IdtyStatus.none;
-      case 1:
-        return IdtyStatus.unconfirmed;
-      case 2:
-        return IdtyStatus.unvalidated;
-      case 3:
-        return IdtyStatus.member;
-      case 4:
-        return IdtyStatus.notMember;
-      case 5:
-        return IdtyStatus.revoked;
-      case 6:
-        return IdtyStatus.unknown;
-      default:
-        return IdtyStatus.none;
-    }
-  }
-
-  @override
-  void write(BinaryWriter writer, IdtyStatus obj) {
-    switch (obj) {
-      case IdtyStatus.none:
-        writer.writeByte(0);
-        break;
-      case IdtyStatus.unconfirmed:
-        writer.writeByte(1);
-        break;
-      case IdtyStatus.unvalidated:
-        writer.writeByte(2);
-        break;
-      case IdtyStatus.member:
-        writer.writeByte(3);
-        break;
-      case IdtyStatus.notMember:
-        writer.writeByte(4);
-        break;
-      case IdtyStatus.revoked:
-        writer.writeByte(5);
-        break;
-      case IdtyStatus.unknown:
-        writer.writeByte(6);
-        break;
-    }
-  }
-
-  @override
-  int get hashCode => typeId.hashCode;
-
-  @override
-  bool operator ==(Object other) =>
-      identical(this, other) ||
-      other is IdtyStatusAdapter &&
-          runtimeType == other.runtimeType &&
-          typeId == other.typeId;
-}
diff --git a/lib/providers/chest_provider.dart b/lib/providers/chest_provider.dart
index 28f454378d083b41bd34869ab61fb9df4ce1d97f..49092965b32b1301bc4b6cf6cde9ce80a5328ee1 100644
--- a/lib/providers/chest_provider.dart
+++ b/lib/providers/chest_provider.dart
@@ -1,9 +1,7 @@
 import 'dart:async';
+import 'package:durt2/durt2.dart' show Durt, SafeBox, WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
-import 'package:gecko/globals.dart';
-import 'package:gecko/models/chest_data.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/widgets/commons/confirmation_dialog.dart';
@@ -14,21 +12,22 @@ class ChestProvider with ChangeNotifier {
     notifyListeners();
   }
 
-  Future forgetSafe(context, ChestData chest) async {
-    final bool? answer = await (_confirmDeletingChest(context, chest.name));
+  Future forgetSafe(context, SafeBox safe) async {
+    final bool? answer = await (_confirmDeletingChest(context, safe.name));
     final sub = Provider.of<SubstrateSdk>(context, listen: false);
     if (answer ?? false) {
-      await sub.deleteAccounts(getChestWallets(chest));
-      await chestBox.delete(chest.key);
-      final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
+      await sub.deleteAccounts(getChestWallets(safe));
+      await Durt.i.walletService.deleteSafe(safe.key);
+      final myWalletProvider =
+          Provider.of<MyWalletsProvider>(context, listen: false);
 
       myWalletProvider.pinCode = '';
 
-      if (chestBox.isEmpty) {
-        await configBox.put('currentChest', 0);
+      if (Durt.i.walletService.safeBox.isEmpty) {
+        await Durt.i.walletService.setDefaultSafeBoxNumber(0);
       } else {
-        int? lastChest = chestBox.toMap().keys.first;
-        await configBox.put('currentChest', lastChest);
+        final int lastSafe = Durt.i.walletService.safeBox.toMap().keys.first;
+        await Durt.i.walletService.setDefaultSafeBoxNumber(lastSafe);
       }
 
       Navigator.popUntil(
@@ -39,10 +38,10 @@ class ChestProvider with ChangeNotifier {
     }
   }
 
-  List<String> getChestWallets(ChestData chest) {
+  List<String> getChestWallets(SafeBox safe) {
     List<String> toDelete = [];
-    walletBox.toMap().forEach((key, WalletData value) {
-      if (value.chest == chest.key) {
+    Durt.i.walletService.walletDataBox.toMap().forEach((key, WalletData value) {
+      if (value.safeBoxNumber == safe.key) {
         toDelete.add(value.address);
       }
     });
diff --git a/lib/providers/generate_wallets.dart b/lib/providers/generate_wallets.dart
index 9fc8324491548f4adeb94b51afb35dbf603227d7..a632c26f9f8e8a2a50251b512c1f75ebc87dc6f3 100644
--- a/lib/providers/generate_wallets.dart
+++ b/lib/providers/generate_wallets.dart
@@ -1,29 +1,19 @@
 import 'dart:math';
 import 'package:durt/durt.dart' as durt;
-import 'package:durt2/durt2.dart' show DuniterStorageService, Durt, Language, WalletBalance;
+import 'package:durt2/durt2.dart' show Durt, Language, WalletBalance, WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/bip39_words.dart';
-import 'package:gecko/models/chest_data.dart';
-import 'package:gecko/models/wallet_data.dart';
-import 'package:gecko/providers/substrate_sdk.dart';
-import 'package:gecko/services/wallets.service.dart' show WalletsService;
 import 'package:gecko/widgets/scan_derivations_info.dart';
 import 'package:gecko/widgets/commons/common_elements.dart';
-import 'package:get_it/get_it.dart';
-import 'package:polkawallet_sdk/api/apiKeyring.dart';
-import 'package:provider/provider.dart';
 import "package:unorm_dart/unorm_dart.dart" as unorm;
 
 class GenerateWalletsProvider with ChangeNotifier {
   GenerateWalletsProvider();
 
-  final walletService = GetIt.I.get<WalletsService>();
-  final duniterStorage = GetIt.I.get<DuniterStorageService>();
-
   final walletNameFocus = FocusNode();
   Color? askedWordColor = Colors.black;
   bool isAskedWordValid = false;
@@ -64,29 +54,29 @@ class GenerateWalletsProvider with ChangeNotifier {
   final cellController11 = TextEditingController();
   bool isFirstTimeSentenceComplete = true;
 
-  @Deprecated('Use Durt 2 instead')
-  Future storeHDWChest(BuildContext context) async {
-    int chestNumber = chestBox.isEmpty ? 0 : chestBox.keys.last + 1;
-
-    String chestName;
-    if (chestNumber == 0) {
-      chestName = 'geckoChest'.tr();
-    } else {
-      chestName = '${'geckoChest'.tr()}${chestNumber + 1}';
-    }
-    await configBox.put('currentChest', chestNumber);
-
-    ChestData thisChest = ChestData(
-      name: chestName,
-      defaultWallet: 0,
-      imageName: '${chestNumber % 8}.png',
-    );
-    await chestBox.add(thisChest);
-    int? chestKey = chestBox.keys.last;
-
-    await configBox.put('currentChest', chestKey);
-    notifyListeners();
-  }
+  // @Deprecated('Use Durt 2 instead')
+  // Future storeHDWChest(BuildContext context) async {
+  //   int chestNumber = chestBox.isEmpty ? 0 : chestBox.keys.last + 1;
+
+  //   String chestName;
+  //   if (chestNumber == 0) {
+  //     chestName = 'geckoChest'.tr();
+  //   } else {
+  //     chestName = '${'geckoChest'.tr()}${chestNumber + 1}';
+  //   }
+  //   await configBox.put('currentChest', chestNumber);
+
+  //   ChestData thisChest = ChestData(
+  //     name: chestName,
+  //     defaultWallet: 0,
+  //     imageName: '${chestNumber % 8}.png',
+  //   );
+  //   await chestBox.add(thisChest);
+  //   int? chestKey = chestBox.keys.last;
+
+  //   await configBox.put('currentChest', chestKey);
+  //   notifyListeners();
+  // }
 
   void checkAskedWord(String inputWord, String mnemo) {
     final expectedWord = mnemo.split(' ')[nbrWord];
@@ -159,10 +149,6 @@ class GenerateWalletsProvider with ChangeNotifier {
   }
 
   Future<List<String>?> generateWordList(BuildContext context) async {
-    final sub = Provider.of<SubstrateSdk>(context, listen: false);
-    final walletService = GetIt.I.get<WalletsService>();
-    if (!sub.sdkReady) return null;
-
     final language = switch (appLang) {
       'english' => Language.english,
       'french' => Language.french,
@@ -171,7 +157,7 @@ class GenerateWalletsProvider with ChangeNotifier {
       _ => Language.english,
     };
 
-    final generatedMnemonicTyped = walletService.generateMnemonic(language);
+    final generatedMnemonicTyped = Durt.i.walletService.generateMnemonic(language: language);
 
     generatedMnemonic = generatedMnemonicTyped.sentence;
     return generatedMnemonicTyped.words;
@@ -247,7 +233,9 @@ class GenerateWalletsProvider with ChangeNotifier {
 
   Future pasteMnemonic(BuildContext context) async {
     final sentence = await Clipboard.getData('text/plain');
-    if (sentence?.text == null || sentence!.text!.split(' ').length != 12) return;
+    if (sentence?.text == null || sentence!.text!.split(' ').length != 12) {
+      return;
+    }
 
     int nbr = 0;
 
@@ -282,16 +270,11 @@ class GenerateWalletsProvider with ChangeNotifier {
   Future<ScanDerivationsResult> scanDerivations(BuildContext context, String pinCode) async {
     try {
       return await _scanDerivations(context, pinCode).timeout(
-        const Duration(seconds: 20),
+        const Duration(seconds: 120),
         onTimeout: () async {
-          // // Remove the current chest
-          // final currentChestNumber = configBox.get('currentChest');
-          // if (currentChestNumber != null) {
-          //   final currentChest = chestBox.get(currentChestNumber);
-          //   if (currentChest != null) {
-          //     await chestBox.delete(currentChestNumber);
-          //   }
-          // }
+          // Remove the current chest
+          final actualSafeNumber = Durt.i.walletService.defaultSafeBoxNumber;
+          await Durt.i.walletService.deleteSafe(actualSafeNumber);
 
           // Display error message to user
           // ignore: use_build_context_synchronously
@@ -308,6 +291,7 @@ class GenerateWalletsProvider with ChangeNotifier {
         },
       );
     } catch (e) {
+      log.e('Error scanning derivations: $e');
       // Handle any other errors
       await infoPopup(context, "errorScanDerivations".tr());
 
@@ -327,48 +311,51 @@ class GenerateWalletsProvider with ChangeNotifier {
     Map<String, int> addressToScan = {};
     notifyListeners();
 
-    if (!Durt.instance.isConnected) {
+    if (!Durt.i.isConnected) {
       return ScanDerivationsResult.error;
     }
 
     scanStatus = ScanDerivationsStatus.rootScanning;
-    final hasRoot = await scanRootBalance(pinCode);
     notifyListeners();
+    final hasRoot = await scanRootBalance(pinCode);
     if (hasRoot) {
       isAlive = true;
     }
 
     scanStatus = ScanDerivationsStatus.scanning;
+    notifyListeners();
     for (int derivationNbr in [for (var i = 0; i < numberScan; i += 1) i]) {
-      final addressData = await sub.sdk.api.keyring
-          .addressFromMnemonic(sub.currencyParameters['ss58']!, cryptoType: CryptoType.sr25519, mnemonic: generatedMnemonic!, derivePath: '//$derivationNbr');
-      addressToScan.putIfAbsent(addressData.address!, () => derivationNbr);
+      if ([28, 29, 30].contains(derivationNbr)) continue;
+      print('derivationNbr: $derivationNbr');
+      final keypair = await Durt.i.walletService.getKeyPairFromMnemonic(generatedMnemonic!, derivation: derivationNbr);
+      addressToScan.putIfAbsent(keypair.address, () => derivationNbr);
     }
 
-    final balanceList = await sub.getBalanceMulti(addressToScan.keys.toList()).timeout(
+    final balanceList = await Durt.i.storage.getBalances(addressToScan.keys.toList()).timeout(
           const Duration(seconds: 20),
           onTimeout: () => {},
         );
 
     // Remove unused wallets
-    balanceList.removeWhere((key, value) => value.transferableBalance == 0);
+    balanceList.removeWhere((key, value) => value.free == BigInt.zero);
     scanedValidWalletNumber = balanceList.length + scanedWalletNumber;
 
     scanStatus = ScanDerivationsStatus.import;
+    notifyListeners();
     for (String scannedWallet in balanceList.keys) {
       isAlive = true;
       String walletName = scanedWalletNumber == 0 ? 'currentWallet'.tr() : '${'wallet'.tr()} ${scanedWalletNumber + 1}';
-      await sub.importAccount(mnemonic: generatedMnemonic!, derivePath: "//${addressToScan[scannedWallet]}", password: pinCode);
+      await Durt.i.walletService.importDerivations(pinCode: pinCode, derivations: [addressToScan[scannedWallet]!]);
+      final actualSafeNumber = Durt.i.walletService.defaultSafeBoxNumber;
 
-      WalletData myWallet = WalletData(
-          chest: currentChestNumber,
+      final myWallet = WalletData(
+          safeBoxNumber: actualSafeNumber,
           address: scannedWallet,
-          number: scanedWalletNumber,
           name: walletName,
           derivation: addressToScan[scannedWallet],
-          imageDefaultPath: '${scanedWalletNumber % 4}.png',
+          imagePath: '${scanedWalletNumber % 4}.png',
           isOwned: true);
-      await walletBox.put(myWallet.address, myWallet);
+      await Durt.i.walletService.walletDataBox.put(myWallet.address, myWallet);
       scanedWalletNumber++;
       notifyListeners();
     }
@@ -381,31 +368,26 @@ class GenerateWalletsProvider with ChangeNotifier {
 
   Future<bool> scanRootBalance(String pinCode) async {
     if (generatedMnemonic == null) return false;
-    // final addressData =
-    //     await sub.sdk.api.keyring.addressFromMnemonic(sub.currencyParameters['ss58']!, cryptoType: CryptoType.sr25519, mnemonic: generatedMnemonic!);
 
-    final keypair = await walletService.getKeyPairFromMnemonic(generatedMnemonic!);
-    if (keypair == null) return false;
+    final keypair = await Durt.i.walletService.getKeyPairFromMnemonic(generatedMnemonic!);
+
+    final address = Durt.i.walletService.getAddress(keypair.address);
 
     // if (addressData.address == null) return false;
-    final balance = await duniterStorage.getBalance(keypair.address).timeout(
+    final balance = await Durt.i.storage.getBalance(address).timeout(
           const Duration(seconds: 1),
           onTimeout: () => WalletBalance.empty(),
         );
 
     if (balance.free != BigInt.zero) {
-      // String walletName = 'myRootWallet'.tr();
-      //TODO: Use int pincode directly instead of cast
-      final pinCodeint = int.parse(pinCode);
-      await walletService.createSafe(mnemonic: generatedMnemonic!, pinCode: pinCodeint);
+      String walletName = 'myRootWallet'.tr();
 
-      await walletService.importRootWallet(pinCode: pinCode);
+      await Durt.i.walletService.importRootWallet(pinCode: pinCode);
 
-      // await sub.importAccount(mnemonic: generatedMnemonic!, password: pinCode);
+      final actualSafeNumber = Durt.i.walletService.defaultSafeBoxNumber;
 
-      // WalletData myWallet = WalletData(
-      //     chest: currentChestNumber, address: addressData.address!, number: 0, name: walletName, derivation: -1, imageDefaultPath: '0.png', isOwned: true);
-      // await walletBox.put(myWallet.address, myWallet);
+      WalletData myWallet = WalletData(safeBoxNumber: actualSafeNumber, address: address, name: walletName, derivation: -1, imagePath: '0.png', isOwned: true);
+      await Durt.i.walletService.walletDataBox.put(myWallet.address, myWallet);
       scanedWalletNumber++;
       return true;
     } else {
diff --git a/lib/providers/home.dart b/lib/providers/home.dart
index 5810785fb83e8f615ff96f8585d9d886644bcaf5..1b2048aa4025163ccdf79bd2aac72b946ccad4ca 100644
--- a/lib/providers/home.dart
+++ b/lib/providers/home.dart
@@ -1,23 +1,25 @@
 import 'dart:convert';
 import 'dart:io';
 import 'dart:math';
+import 'package:durt2/durt2.dart' show Durt, Networks;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'dart:async';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/certification_data.dart';
+import 'package:gecko/providers/my_wallets.dart' show MyWalletsProvider;
 import 'package:gecko/providers/substrate_sdk.dart';
+import 'package:gecko/providers/v2s_datapod.dart' show V2sDatapodProvider;
 import 'package:gecko/providers/wallet_options.dart';
+import 'package:gecko/widgets/commons/common_elements.dart' show infoPopup;
 import 'package:hive_flutter/hive_flutter.dart';
 import 'package:flutter/foundation.dart' show kDebugMode, kIsWeb, setEquals;
 import 'package:path_provider/path_provider.dart' as pp;
 import 'package:package_info_plus/package_info_plus.dart';
 import 'package:path_provider/path_provider.dart';
 import 'package:provider/provider.dart';
-import 'package:gecko/models/chest_data.dart';
 import 'package:gecko/models/g1_wallets_list.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/wallet_header_data.dart';
 import 'package:gecko/services/network_config_service.dart';
 
@@ -65,15 +67,11 @@ class HomeProvider with ChangeNotifier {
     // Register Hive adapters
     Hive.registerAdapter(WalletHeaderDataAdapter());
     Hive.registerAdapter(BigIntAdapter());
-    Hive.registerAdapter(WalletDataAdapter());
-    Hive.registerAdapter(ChestDataAdapter());
     Hive.registerAdapter(G1WalletsListAdapter());
     Hive.registerAdapter(IdAdapter());
-    Hive.registerAdapter(IdtyStatusAdapter());
     Hive.registerAdapter(CertificationDataAdapter());
 
     // Open required boxes synchronously
-    chestBox = await Hive.openBox<ChestData>("chestBox");
     configBox = await Hive.openBox("configBox");
 
     // Check if walletHeaderDataVersion non compatible, drop wallet_header_cache
@@ -145,7 +143,7 @@ class HomeProvider with ChangeNotifier {
 
       if (!setEquals(currentSet, remoteSet)) {
         remoteEndpoints.shuffle();
-        await configBox.put('endpoint', remoteEndpoints);
+        // await configBox.put('endpoint', remoteEndpoints);
         log.i('Endpoints mis à jour en background');
       }
     } catch (e) {
@@ -160,7 +158,7 @@ class HomeProvider with ChangeNotifier {
     }
 
     // 1. Vérification rapide de la configBox
-    final existingEndpoints = configBox.get('endpoint');
+    final existingEndpoints = Networks.listDuniterEndpoints;
     if (_isValidEndpointsList(existingEndpoints)) {
       // Lancer la mise à jour en background
       unawaited(_updateEndpointsInBackground(List<String>.from(existingEndpoints)));
@@ -171,7 +169,7 @@ class HomeProvider with ChangeNotifier {
       // 2. Tentative de fetch distant
       final endpoints = await _fetchRemoteEndpoints();
       endpoints.shuffle();
-      await configBox.put('endpoint', endpoints);
+      // await configBox.put('endpoint', endpoints);
       return endpoints;
     } catch (e) {
       // 3. Fallback sur le fichier local
@@ -179,11 +177,11 @@ class HomeProvider with ChangeNotifier {
         final localEndpoints = await rootBundle.loadString('config/gdev_endpoints.json').then((jsonStr) => List<String>.from(jsonDecode(jsonStr)));
 
         localEndpoints.shuffle();
-        await configBox.put('endpoint', localEndpoints);
+        // await configBox.put('endpoint', localEndpoints);
         return localEndpoints;
       } catch (e) {
         log.e('Erreur critique endpoints: $e');
-        return configBox.get('endpoint') ?? [];
+        return Networks.listDuniterEndpoints;
       }
     }
   }
@@ -202,4 +200,75 @@ class HomeProvider with ChangeNotifier {
   void reload() {
     notifyListeners();
   }
+
+  Future<void> initHome(BuildContext context) async {
+    final homeProvider = Provider.of<HomeProvider>(context, listen: false);
+    final sub = Provider.of<SubstrateSdk>(context, listen: false);
+    final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
+    final datapod = Provider.of<V2sDatapodProvider>(context, listen: false);
+
+    // Check if versionData non compatible, drop everything
+    if (configBox.get('dataVersion') == null) {
+      configBox.put('dataVersion', dataVersion);
+    }
+    if (myWalletProvider.isWalletsExists && (configBox.get('dataVersion')) < dataVersion) {
+      // if (!sub.sdkReady && !sub.sdkLoading) sub.initApi();
+      // ignore: use_build_context_synchronously
+      await infoPopup(context, "chestNotCompatibleMustReinstallGecko".tr());
+      await Hive.deleteBoxFromDisk('walletBox');
+      await Hive.deleteBoxFromDisk('chestBox');
+      await datapod.deleteAvatarsDirectory();
+      await avatarsDirectory.create();
+      await configBox.delete('defaultWallet');
+      // if (!sub.sdkReady && !sub.sdkLoading) await sub.initApi();
+      await sub.deleteAllAccounts();
+      configBox.put('dataVersion', dataVersion);
+      myWalletProvider.reload();
+    } else {
+      // if (!sub.sdkReady && !sub.sdkLoading) await sub.initApi();
+    }
+
+    if (!Durt.i.isConnected) {
+      await Hive.deleteBoxFromDisk('g1WalletsBox');
+      await datapod.deleteAvatarsCacheDirectory();
+      await avatarsCacheDirectory.create();
+      g1WalletsBox = await Hive.openBox<G1WalletsList>("g1WalletsBox");
+      contactsBox = await Hive.openBox<G1WalletsList>("contactsBox");
+
+      homeProvider.isWalletBoxInit = true;
+      myWalletProvider.reload();
+
+      // await homeProvider.getValidEndpoints();
+      if (configBox.get('isCacheChecked') == null) {
+        configBox.put('isCacheChecked', false);
+      }
+
+      // Connect to Duniter network
+      await Durt.i.connect();
+
+      // Future<void> updateConnectionStatus(List<ConnectivityResult> result) async {
+      //   log.i('Network changed: $result');
+      //   if (result.contains(ConnectivityResult.none)) {
+      //     Durt.i.isConnected = false;
+      //     await sub.sdk.api.setting.unsubscribeBestNumber();
+      //     homeProvider.changeMessage("notConnectedToInternet".tr());
+      //     sub.reload();
+      //   } else {
+      //     // Check if the phone is actually connected to the internet
+      //     var connectivityResult = await (Connectivity().checkConnectivity());
+      //     if (!connectivityResult.contains(ConnectivityResult.none)) {
+      //       await sub.connectNode();
+
+      //       // Load wallets list
+      //       // myWalletProvider.readAllWallets(myWalletProvider.getCurrentSafe);
+
+      //       //Connect to Indexer
+      //       await duniterIndexer.getValidIndexerEndpoint();
+      //     }
+      //   }
+      // }
+
+      // Connectivity().onConnectivityChanged.listen(updateConnectionStatus);
+    }
+  }
 }
diff --git a/lib/providers/my_wallets.dart b/lib/providers/my_wallets.dart
index 0ea7d5d43b6ee3a2e7cfb5b82b0ff766a71aec1d..359f178b04183284bbd6a8258ce8c3c75a995ba2 100644
--- a/lib/providers/my_wallets.dart
+++ b/lib/providers/my_wallets.dart
@@ -1,11 +1,11 @@
 import 'dart:io';
 
+import 'package:durt2/durt2.dart' show Durt, IdtyStatus, WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/extensions.dart';
 import 'dart:async';
 import 'package:gecko/globals.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
 import 'package:gecko/widgets/commons/confirmation_dialog.dart';
@@ -25,28 +25,22 @@ class MyWalletsProvider with ChangeNotifier {
 
   bool isOwner(String address) => listWallets.any((wallet) => wallet.address == address);
 
-  int getCurrentChest() {
-    if (configBox.get('currentChest') == null) {
-      configBox.put('currentChest', 0);
-    }
-
-    return configBox.get('currentChest');
-  }
+  int get getCurrentSafe => Durt.i.walletService.defaultSafeBoxNumber;
 
-  bool isWalletsExists() => chestBox.isNotEmpty;
+  bool get isWalletsExists => Durt.i.walletService.safeBox.isNotEmpty;
 
   WalletData? get idtyWallet => listWallets.firstWhereOrNull((w) => w.isMembre) ?? listWallets.firstWhereOrNull((w) => w.hasIdentity);
 
   List<WalletData> get listWalletsWithoutIdty => listWallets.where((w) => w.address != idtyWallet?.address).toList();
 
-  Future<List<WalletData>> readAllWallets([int? chest]) async {
-    final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
-    chest = chest ?? getCurrentChest();
+  Future<List<WalletData>> readAllWallets([int? safe]) async {
+    // final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
+    safe = safe ?? getCurrentSafe;
     listWallets.clear();
-    final wallets = walletBox.toMap().values.toList();
+    final wallets = Durt.i.walletService.walletDataBox.toMap().values.toList();
     Map<String, WalletData> walletsToScan = {};
     for (var walletFromBox in wallets) {
-      if (walletFromBox.chest != chest) {
+      if (walletFromBox.safeBoxNumber != safe) {
         continue;
       }
       if (walletFromBox.identityStatus == IdtyStatus.unknown) {
@@ -56,29 +50,29 @@ class MyWalletsProvider with ChangeNotifier {
       }
     }
 
-    // update all idty status in lists
-    int n = 0;
-    final idtyStatusList = await sub.idtyStatusMulti(walletsToScan.keys.toList());
+    // final idtyStatusList =
+    //     await sub.idtyStatusMulti(walletsToScan.keys.toList());
     for (final wallet in walletsToScan.values) {
-      wallet.identityStatus = idtyStatusList[n];
-      walletBox.put(wallet.address, wallet);
+      // wallet.identityStatus = idtyStatusList[n];
+      if (Durt.i.walletService.walletDataBox.containsKey(wallet.address)) continue;
+
+      Durt.i.walletService.walletDataBox.put(wallet.address, wallet);
       listWallets.add(wallet);
-      n++;
     }
 
-    listWallets.sort((p1, p2) => Comparable.compare(p1.number!, p2.number!));
+    listWallets.sort((p1, p2) => Comparable.compare(p1.number, p2.number));
 
     return listWallets;
   }
 
   WalletData? getWalletDataById(List<int?> id) {
     if (id.isEmpty) return WalletData(address: '', isOwned: true);
-    int? chest = id[0];
+    int? safe = id[0];
     int? nbr = id[1];
     WalletData? targetedWallet;
 
-    walletBox.toMap().forEach((key, value) {
-      if (value.chest == chest && value.number == nbr) {
+    Durt.i.walletService.walletDataBox.toMap().forEach((key, value) {
+      if (value.safeBoxNumber == safe && value.number == nbr) {
         targetedWallet = value;
         return;
       }
@@ -102,34 +96,37 @@ class MyWalletsProvider with ChangeNotifier {
     return pinCode.isNotEmpty;
   }
 
-  WalletData? getWalletDataByAddress(String address) => walletBox.toMap().values.firstWhereOrNull((wallet) => wallet.address == address);
+  WalletData? getWalletDataByAddress(String address) =>
+      Durt.i.walletService.walletDataBox.toMap().values.firstWhereOrNull((wallet) => wallet.address == address);
 
-  WalletData getDefaultWallet([int? chest]) {
-    if (chestBox.isEmpty) {
-      return WalletData(address: '', chest: 0, number: 0, isOwned: true);
+  WalletData getDefaultWallet([int? safe]) {
+    if (Durt.i.walletService.safeBox.isEmpty) {
+      return WalletData(address: '', safeBoxNumber: 0, number: 0, isOwned: true);
     } else {
-      chest ??= getCurrentChest();
-      int? defaultWalletNumber = chestBox.get(chest)!.defaultWallet;
-      return getWalletDataById([chest, defaultWalletNumber]) ?? WalletData(address: '', chest: chest, number: 0, isOwned: true);
+      safe ??= getCurrentSafe;
+      final defaultWallet = Durt.i.walletService.safeBox.get(safe)!.defaultAddress;
+      if (defaultWallet == null) {
+        return WalletData(address: '', safeBoxNumber: safe, number: 0, isOwned: true);
+      }
+      return getWalletDataByAddress(defaultWallet) ?? WalletData(address: '', safeBoxNumber: safe, number: 0, isOwned: true);
     }
   }
 
   Future<int> deleteAllWallet(context) async {
-    final sub = Provider.of<SubstrateSdk>(context, listen: false);
     final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
     try {
       log.w('DELETE ALL WALLETS ?');
 
       final answer = await showConfirmationDialog(
         context: context,
-        message: 'areYouSureForgetAllChests'.tr(),
+        message: 'areYouSureForgetAllSafes'.tr(),
         type: ConfirmationDialogType.warning,
       );
       if (answer) {
-        await walletBox.clear();
-        await chestBox.clear();
+        await Durt.i.walletService.walletDataBox.clear();
+        await Durt.i.walletService.safeBox.clear();
         await configBox.delete('defaultWallet');
-        await sub.deleteAllAccounts();
+        // await sub.deleteAllAccounts();
 
         final directory = await getApplicationDocumentsDirectory();
         final avatarFolder = Directory('${directory.path}/avatars/');
@@ -156,7 +153,7 @@ class MyWalletsProvider with ChangeNotifier {
     int newWalletNbr = idList[0];
     int newDerivationNbr = number ?? idList[1];
 
-    int? chest = getCurrentChest();
+    int? safeNumber = getCurrentSafe;
 
     final sub = Provider.of<SubstrateSdk>(context, listen: false);
 
@@ -165,15 +162,15 @@ class MyWalletsProvider with ChangeNotifier {
     final address = await sub.derive(context, defaultWallet.address, newDerivationNbr, pinCode);
 
     WalletData newWallet = WalletData(
-        chest: chest,
+        safeBoxNumber: safeNumber,
         address: address,
         number: newWalletNbr,
         name: name,
         derivation: newDerivationNbr,
-        imageDefaultPath: '${newWalletNbr % 4}.png',
+        imagePath: '${newWalletNbr % 4}.png',
         isOwned: true);
 
-    await walletBox.put(newWallet.address, newWallet);
+    await Durt.i.walletService.walletDataBox.put(newWallet.address, newWallet);
     await readAllWallets();
 
     isNewDerivationLoading = false;
@@ -186,17 +183,17 @@ class MyWalletsProvider with ChangeNotifier {
     isNewDerivationLoading = true;
     notifyListeners();
     int newWalletNbr;
-    int? chest = getCurrentChest();
+    int? safeNumber = getCurrentSafe;
 
-    List<WalletData> walletConfig = await readAllWallets(chest);
+    List<WalletData> walletConfig = await readAllWallets(safeNumber);
     walletConfig.sort((p1, p2) {
-      return Comparable.compare(p1.number!, p2.number!);
+      return Comparable.compare(p1.number, p2.number);
     });
 
     if (walletConfig.isEmpty) {
       newWalletNbr = 0;
     } else {
-      newWalletNbr = walletConfig.last.number! + 1;
+      newWalletNbr = walletConfig.last.number + 1;
     }
     final sub = Provider.of<SubstrateSdk>(context, listen: false);
 
@@ -205,19 +202,19 @@ class MyWalletsProvider with ChangeNotifier {
     final address = await sub.generateRootKeypair(defaultWallet.address, pinCode);
 
     WalletData newWallet = WalletData(
-        chest: chest, address: address, number: newWalletNbr, name: name, derivation: -1, imageDefaultPath: '${newWalletNbr % 4}.png', isOwned: true);
+        safeBoxNumber: safeNumber, address: address, number: newWalletNbr, name: name, derivation: -1, imagePath: '${newWalletNbr % 4}.png', isOwned: true);
 
-    await walletBox.put(newWallet.address, newWallet);
+    await Durt.i.walletService.walletDataBox.put(newWallet.address, newWallet);
     await readAllWallets();
 
     isNewDerivationLoading = false;
     notifyListeners();
   }
 
-  Future<List<int>> getNextWalletNumberAndDerivation({int? chestNumber}) async {
-    chestNumber ??= getCurrentChest();
+  Future<List<int>> getNextWalletNumberAndDerivation({int? safeNumber}) async {
+    safeNumber ??= getCurrentSafe;
 
-    listWallets.sort((p1, p2) => p1.number!.compareTo(p2.number!));
+    listWallets.sort((p1, p2) => p1.number.compareTo(p2.number));
 
     if (listWallets.isEmpty) {
       return [0, 0];
@@ -227,7 +224,7 @@ class MyWalletsProvider with ChangeNotifier {
 
     final newDerivationNbr = maxDerivation == -1 ? 0 : maxDerivation + 1;
 
-    final newWalletNbr = listWallets.last.number! + 1;
+    final newWalletNbr = listWallets.last.number + 1;
 
     return [newWalletNbr, newDerivationNbr];
   }
diff --git a/lib/providers/substrate_sdk.dart b/lib/providers/substrate_sdk.dart
index 701cb10a51433ac8ec9a21cab6a2389525f74837..058c16464a626dd58e8eb31fdbc55d7725c4af68 100644
--- a/lib/providers/substrate_sdk.dart
+++ b/lib/providers/substrate_sdk.dart
@@ -1,18 +1,17 @@
 // ignore_for_file: use_build_context_synchronously
 
 import 'dart:convert';
+import 'package:durt2/durt2.dart' show Durt, IdtyStatus, Networks;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:fast_base58/fast_base58.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/certification_data.dart';
-import 'package:gecko/models/chest_data.dart';
 import 'package:gecko/models/membership_status.dart';
 import 'package:gecko/models/migrate_wallet_checks.dart';
 import 'package:gecko/models/transaction_content.dart';
 import 'package:gecko/models/wallet_balance.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/home.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/wallet_options.dart';
@@ -40,7 +39,7 @@ class SubstrateSdk with ChangeNotifier {
   String generatedMnemonic = '';
   bool sdkReady = false;
   bool sdkLoading = false;
-  bool nodeConnected = false;
+  // bool Durt.i.isConnected = false;
   bool importIsLoading = false;
   int blocNumber = 0;
   bool isLoadingEndpoint = false;
@@ -142,6 +141,7 @@ class SubstrateSdk with ChangeNotifier {
     // transactionStatus.remove(currentTransactionId);
   }
 
+  @Deprecated('Use Durt 2 instead')
   Future _getStorage(String call) async {
     try {
       // log.d(call);
@@ -316,7 +316,7 @@ class SubstrateSdk with ChangeNotifier {
   }
 
   Future<WalletBalance> getBalance(String address) async {
-    if (!nodeConnected) {
+    if (!Durt.i.isConnected) {
       return WalletBalance.empty();
     }
 
@@ -393,7 +393,7 @@ class SubstrateSdk with ChangeNotifier {
   }) {
     int totalAmount = 0;
 
-    if (firstEligibleUd == 0 || idtyStatus != IdtyStatus.member) return 0;
+    if (firstEligibleUd == 0 || idtyStatus != IdtyStatus.validated) return 0;
 
     for (final List reval in pastReevals.reversed) {
       final int udIndex = _convertToInt(reval[0]);
@@ -442,7 +442,7 @@ class SubstrateSdk with ChangeNotifier {
     } else if (nextIssuableOn > blocNumber) {
       final certDelayDuration = (nextIssuableOn - blocNumber) * 6;
       return CertState(status: CertStatus.mustWaitBeforeCert, duration: Duration(seconds: certDelayDuration));
-    } else if (toStatus == IdtyStatus.unconfirmed) {
+    } else if (toStatus == IdtyStatus.created) {
       return CertState(status: CertStatus.mustConfirmIdentity);
     } else {
       return CertState(status: CertStatus.canCert);
@@ -482,10 +482,10 @@ class SubstrateSdk with ChangeNotifier {
 
   final mapStatus = {
     null: IdtyStatus.none,
-    'Unconfirmed': IdtyStatus.unconfirmed,
-    'Unvalidated': IdtyStatus.unvalidated,
-    'Member': IdtyStatus.member,
-    'NotMember': IdtyStatus.notMember,
+    'Unconfirmed': IdtyStatus.created,
+    'Unvalidated': IdtyStatus.confirmed,
+    'Member': IdtyStatus.validated,
+    'NotMember': IdtyStatus.expired,
     'Revoked': IdtyStatus.revoked,
     'unknown': IdtyStatus.unknown,
   };
@@ -742,16 +742,16 @@ class SubstrateSdk with ChangeNotifier {
     isLoadingEndpoint = false;
     notifyListeners();
     if (resNode != null) {
-      nodeConnected = true;
+      // Durt.i.isConnected = true;
 
       // Subscribe bloc number
       sdk.api.setting.subscribeBestNumber((res) {
         blocNumber = _convertToInt(res.toString());
         if (sdk.api.connectedNode?.endpoint == null) {
-          nodeConnected = false;
+          // Durt.i.isConnected = false;
           homeProvider.changeMessage("networkLost".tr());
         } else {
-          nodeConnected = true;
+          // Durt.i.isConnected = true;
         }
         notifyListeners();
       });
@@ -764,10 +764,10 @@ class SubstrateSdk with ChangeNotifier {
       notifyListeners();
       homeProvider.changeMessage("wellConnectedToNode".tr(args: [getConnectedEndpoint()!.split('/')[2]]));
     } else {
-      nodeConnected = false;
+      // Durt.i.isConnected = false;
       notifyListeners();
       homeProvider.changeMessage("noDuniterEndointAvailable".tr());
-      if (!myWalletProvider.isWalletsExists()) snackNode(false);
+      if (!myWalletProvider.isWalletsExists) snackNode(false);
     }
 
     log.i('Connected to node: ${sdk.api.connectedNode?.endpoint}');
@@ -776,7 +776,7 @@ class SubstrateSdk with ChangeNotifier {
   List<NetworkParams> getDuniterBootstrap() {
     List<NetworkParams> node = [];
 
-    for (String endpoint in configBox.get('endpoint')) {
+    for (String endpoint in Networks.listDuniterEndpoints) {
       final n = NetworkParams();
       n.name = currencyName;
       n.endpoint = endpoint;
@@ -900,20 +900,20 @@ class SubstrateSdk with ChangeNotifier {
   }
 
   @Deprecated('Use Durt 2 instead')
-  Future<String> setCurrentWallet(WalletData wallet) async {
-    final currentChestNumber = configBox.get('currentChest');
-    ChestData newChestData = chestBox.get(currentChestNumber)!;
-    newChestData.defaultWallet = wallet.number;
-    await chestBox.put(currentChestNumber, newChestData);
-
-    try {
-      final acc = getKeypair(wallet.address);
-      keyring.setCurrent(acc);
-      return acc.address!;
-    } catch (e) {
-      return (e.toString());
-    }
-  }
+  // Future<String> setCurrentWallet(WalletData wallet) async {
+  //   final currentChestNumber = configBox.get('currentChest');
+  //   ChestData newChestData = chestBox.get(currentChestNumber)!;
+  //   newChestData.defaultWallet = wallet.number;
+  //   await chestBox.put(currentChestNumber, newChestData);
+
+  //   try {
+  //     final acc = getKeypair(wallet.address);
+  //     keyring.setCurrent(acc);
+  //     return acc.address!;
+  //   } catch (e) {
+  //     return (e.toString());
+  //   }
+  // }
 
   @Deprecated('Use Durt 2 instead')
   KeyPairData getCurrentKeyPair() {
@@ -951,15 +951,6 @@ class SubstrateSdk with ChangeNotifier {
     return await importAccount(password: password);
   }
 
-  @Deprecated('Use Durt 2 instead')
-  Future<bool> isMnemonicValid(String mnemonic) async {
-    // Needed for bad encoding of UTF-8
-    mnemonic = mnemonic.replaceAll('é', 'é');
-    mnemonic = mnemonic.replaceAll('è', 'è');
-
-    return await sdk.api.keyring.checkMnemonicValid(mnemonic);
-  }
-
   @Deprecated('Use Durt 2 instead')
   Future<String> csToV2Address(String salt, String password) async {
     final scrypt = pc.KeyDerivator('scrypt');
@@ -1112,7 +1103,7 @@ class SubstrateSdk with ChangeNotifier {
 
     final toIndex = await _getIdentityIndexOf(destAddress);
 
-    if (myIdtyStatus != IdtyStatus.member) {
+    if (myIdtyStatus != IdtyStatus.validated) {
       return 'notMember';
     }
 
@@ -1134,8 +1125,8 @@ class SubstrateSdk with ChangeNotifier {
         sender,
       );
       txOptions = [destAddress];
-    } else if (toIdtyStatus == IdtyStatus.member || toIdtyStatus == IdtyStatus.unvalidated) {
-      if (toCerts.receivedCount >= currencyParameters['minCertForMembership']! - 1 && toIdtyStatus != IdtyStatus.member) {
+    } else if (toIdtyStatus == IdtyStatus.validated || toIdtyStatus == IdtyStatus.confirmed) {
+      if (toCerts.receivedCount >= currencyParameters['minCertForMembership']! - 1 && toIdtyStatus != IdtyStatus.validated) {
         log.d('Batch cert and membership validation');
         txInfo = TxInfoData(
           'utility',
@@ -1411,7 +1402,7 @@ newKeySig: $newKeySigType""");
 
     final Map<String, dynamic> expireOnMap = await _getStorage('membership.membership($idtyIndex)') ?? {};
 
-    if (expireOnMap.isEmpty && idtyStatus == IdtyStatus.notMember) {
+    if (expireOnMap.isEmpty && idtyStatus == IdtyStatus.confirmed) {
       return MembershipStatus(
         expireDate: null,
         hasPendingRenewal: hasPendingRenewal,
diff --git a/lib/providers/wallet_options.dart b/lib/providers/wallet_options.dart
index 5fa7fbe7d5f3ee196e8b439850943ce0ff6bc929..2fe4516a6f3f336dc0c41423b3a43e6bb1737e01 100644
--- a/lib/providers/wallet_options.dart
+++ b/lib/providers/wallet_options.dart
@@ -1,6 +1,7 @@
 // ignore_for_file: use_build_context_synchronously
 
 import 'dart:io';
+import 'package:durt2/durt2.dart' show Durt, WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
@@ -9,7 +10,6 @@ import 'package:gecko/globals.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/duniter_indexer.dart';
 import 'package:gecko/providers/my_wallets.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/providers/v2s_datapod.dart';
 import 'package:gecko/utils.dart';
@@ -36,12 +36,14 @@ class WalletOptionsProvider with ChangeNotifier {
     return pinLength;
   }
 
-  void _renameWallet(List<int?> walletID, String newName, {required bool isCesium}) async {
+  void _renameWallet(String address, String newName,
+      {required bool isCesium}) async {
     MyWalletsProvider myWalletClass = MyWalletsProvider();
 
-    WalletData walletTarget = myWalletClass.getWalletDataById(walletID)!;
+    WalletData walletTarget = myWalletClass.getWalletDataByAddress(address)!;
     walletTarget.name = newName;
-    await walletBox.put(walletTarget.key, walletTarget);
+    await Durt.i.walletService.walletDataBox
+        .put(walletTarget.address, walletTarget);
 
     _newWalletName.text = '';
   }
@@ -58,7 +60,8 @@ class WalletOptionsProvider with ChangeNotifier {
     if (answer) {
       //Check if balance is null
       if (balanceCache[wallet.address] != 0) {
-        final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
+        final myWalletProvider =
+            Provider.of<MyWalletsProvider>(context, listen: false);
         final defaultWallet = myWalletProvider.getDefaultWallet();
         final transactionId = const Uuid().v4();
         sub.pay(
@@ -71,9 +74,9 @@ class WalletOptionsProvider with ChangeNotifier {
         );
       }
 
-      await walletBox.delete(wallet.address);
-      if (wallet.imageCustomPath != null) {
-        final avatarFile = File(wallet.imageCustomPath!);
+      await Durt.i.walletService.walletDataBox.delete(wallet.address);
+      if (wallet.imagePath != null) {
+        final avatarFile = File(wallet.imagePath!);
         if (await avatarFile.exists()) {
           await avatarFile.delete();
         }
@@ -132,17 +135,17 @@ class WalletOptionsProvider with ChangeNotifier {
 
       await File(croppedFile.path).rename(newPath);
 
-      final walletData = MyWalletsProvider().getWalletDataByAddress(address.text);
+      final walletData =
+          MyWalletsProvider().getWalletDataByAddress(address.text);
 
-      if (walletData!.imageCustomPath != null) {
-        final avatarFile = File(walletData.imageCustomPath!);
+      if (walletData!.imagePath != null) {
+        final avatarFile = File(walletData.imagePath!);
         await avatarFile.delete();
       }
 
-      walletData.profileUpdatedTime = DateTime.now();
-      walletData.imageCustomPath = newPath;
+      walletData.imagePath = newPath;
 
-      await walletBox.put(address.text, walletData);
+      await Durt.i.walletService.walletDataBox.put(address.text, walletData);
       notifyListeners();
       datapod.setAvatar(address.text, newPath);
 
@@ -156,8 +159,10 @@ class WalletOptionsProvider with ChangeNotifier {
   Future<String?> confirmIdentityPopup(BuildContext context) async {
     final idtyName = TextEditingController();
     final sub = Provider.of<SubstrateSdk>(context, listen: false);
-    final walletOptions = Provider.of<WalletOptionsProvider>(context, listen: false);
-    final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
+    final walletOptions =
+        Provider.of<WalletOptionsProvider>(context, listen: false);
+    final myWalletProvider =
+        Provider.of<MyWalletsProvider>(context, listen: false);
     final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
 
     bool canValidate = false;
@@ -181,7 +186,10 @@ class WalletOptionsProvider with ChangeNotifier {
                 key: keyEnterIdentityUsername,
                 onChanged: (_) async {
                   idtyExist = await duniterIndexer.isIdtyExist(idtyName.text);
-                  canValidate = !idtyExist && !await duniterIndexer.isIdtyExist(idtyName.text) && idtyName.text.length >= 2 && idtyName.text.length <= 32;
+                  canValidate = !idtyExist &&
+                      !await duniterIndexer.isIdtyExist(idtyName.text) &&
+                      idtyName.text.length >= 2 &&
+                      idtyName.text.length <= 32;
 
                   notifyListeners();
                 },
@@ -197,7 +205,8 @@ class WalletOptionsProvider with ChangeNotifier {
               ),
               const SizedBox(height: 10),
               Consumer<WalletOptionsProvider>(builder: (context, wOptions, _) {
-                return Text(idtyExist ? "thisIdentityAlreadyExist".tr() : '', style: TextStyle(color: Colors.red[500]));
+                return Text(idtyExist ? "thisIdentityAlreadyExist".tr() : '',
+                    style: TextStyle(color: Colors.red[500]));
               })
             ]),
           ),
@@ -205,22 +214,30 @@ class WalletOptionsProvider with ChangeNotifier {
             Row(
               mainAxisAlignment: MainAxisAlignment.center,
               children: [
-                Consumer<WalletOptionsProvider>(builder: (context, wOptions, _) {
+                Consumer<WalletOptionsProvider>(
+                    builder: (context, wOptions, _) {
                   return TextButton(
                     key: keyConfirm,
                     onPressed: canValidate
                         ? () async {
-                            idtyName.text = idtyName.text.trim().replaceAll('  ', '');
+                            idtyName.text =
+                                idtyName.text.trim().replaceAll('  ', '');
 
-                            if (idtyName.text.length.clamp(3, 32) != idtyName.text.length) {
+                            if (idtyName.text.length.clamp(3, 32) !=
+                                idtyName.text.length) {
                               return;
                             }
 
                             if (!await myWalletProvider.askPinCode()) return;
 
-                            final wallet = myWalletProvider.getWalletDataByAddress(address.text);
-                            await sub.setCurrentWallet(wallet!);
-                            final transactionId = await sub.confirmIdentity(walletOptions.address.text, idtyName.text, myWalletProvider.pinCode);
+                            final wallet = myWalletProvider
+                                .getWalletDataByAddress(address.text);
+                            await Durt.i.walletService
+                                .setDefaultAddress(wallet!.address);
+                            final transactionId = await sub.confirmIdentity(
+                                walletOptions.address.text,
+                                idtyName.text,
+                                myWalletProvider.pinCode);
                             Navigator.pop(context);
 
                             Navigator.push(
@@ -238,7 +255,11 @@ class WalletOptionsProvider with ChangeNotifier {
                         : null,
                     child: Text(
                       "validate".tr(),
-                      style: TextStyle(fontSize: 20, color: canValidate ? const Color(0xffD80000) : Colors.grey[500]),
+                      style: TextStyle(
+                          fontSize: 20,
+                          color: canValidate
+                              ? const Color(0xffD80000)
+                              : Colors.grey[500]),
                     ),
                   );
                 })
@@ -251,7 +272,7 @@ class WalletOptionsProvider with ChangeNotifier {
     );
   }
 
-  Future<String?> editWalletName(BuildContext context, List<int?> wID) async {
+  Future<String?> editWalletName(BuildContext context, String address) async {
     final walletName = TextEditingController();
     canValidateNameBool = false;
 
@@ -282,21 +303,25 @@ class WalletOptionsProvider with ChangeNotifier {
             Row(
               mainAxisAlignment: MainAxisAlignment.center,
               children: [
-                Consumer<WalletOptionsProvider>(builder: (context, wOptions, _) {
+                Consumer<WalletOptionsProvider>(
+                    builder: (context, wOptions, _) {
                   return TextButton(
                     key: keyInfoPopup,
                     child: Text(
                       "validate".tr(),
                       style: TextStyle(
                         fontSize: 20,
-                        color: canValidateNameBool ? const Color(0xffD80000) : Colors.grey,
+                        color: canValidateNameBool
+                            ? const Color(0xffD80000)
+                            : Colors.grey,
                         fontWeight: FontWeight.w600,
                       ),
                     ),
                     onPressed: () async {
                       if (canValidateNameBool) {
                         nameController.text = walletName.text;
-                        _renameWallet(wID, walletName.text, isCesium: false);
+                        _renameWallet(address, walletName.text,
+                            isCesium: false);
                         notifyListeners();
                         Navigator.pop(context);
                       }
@@ -312,7 +337,10 @@ class WalletOptionsProvider with ChangeNotifier {
                   key: keyCancel,
                   child: Text(
                     "cancel".tr(),
-                    style: TextStyle(fontSize: 17, color: Colors.grey[800], fontWeight: FontWeight.w300),
+                    style: TextStyle(
+                        fontSize: 17,
+                        color: Colors.grey[800],
+                        fontWeight: FontWeight.w300),
                   ),
                   onPressed: () async {
                     Navigator.pop(context);
@@ -328,9 +356,12 @@ class WalletOptionsProvider with ChangeNotifier {
   }
 
   bool canValidateName(BuildContext context, final walletName) {
-    final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
+    final myWalletProvider =
+        Provider.of<MyWalletsProvider>(context, listen: false);
 
-    bool isNameValid = walletName.text.length >= 2 && !walletName.text.contains(':') && walletName.text.length <= 39;
+    bool isNameValid = walletName.text.length >= 2 &&
+        !walletName.text.contains(':') &&
+        walletName.text.length <= 39;
 
     if (isNameValid) {
       for (var wallet in myWalletProvider.listWallets) {
diff --git a/lib/screens/home.dart b/lib/screens/home.dart
index 4e0fa3b1103d8c2a7198b11c98d19f14ebf7eb43..1222cf1e9f133b869b1954b91364a892bb9460e5 100644
--- a/lib/screens/home.dart
+++ b/lib/screens/home.dart
@@ -1,29 +1,18 @@
-import 'package:connectivity_plus/connectivity_plus.dart';
 import 'package:easy_localization/easy_localization.dart';
 import 'package:gecko/globals.dart';
-import 'package:gecko/models/chest_data.dart';
-import 'package:gecko/models/g1_wallets_list.dart';
 import 'package:gecko/models/scale_functions.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/chest_provider.dart';
-import 'package:gecko/providers/duniter_indexer.dart';
 import 'package:gecko/providers/home.dart';
-import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/providers/my_wallets.dart';
-import 'package:gecko/models/wallet_data.dart';
-import 'package:gecko/providers/v2s_datapod.dart';
-import 'package:gecko/services/durt.service.dart';
 import 'package:gecko/widgets/bubble_speak.dart';
 import 'package:gecko/widgets/buttons/home_settings_button.dart';
 import 'package:gecko/widgets/commons/animated_text.dart';
-import 'package:gecko/widgets/commons/common_elements.dart';
 import 'package:gecko/screens/myWallets/restore_chest.dart';
 import 'package:gecko/screens/onBoarding/1.dart';
 import 'package:gecko/widgets/drawer.dart';
 import 'package:gecko/widgets/buttons/home_buttons.dart';
-import 'package:get_it/get_it.dart';
-import 'package:hive_flutter/hive_flutter.dart';
 import 'package:provider/provider.dart';
 
 class HomeScreen extends StatefulWidget {
@@ -36,82 +25,10 @@ class HomeScreen extends StatefulWidget {
 class _HomeScreenState extends State<HomeScreen> {
   @override
   void initState() {
+    super.initState();
     WidgetsBinding.instance.addPostFrameCallback((_) async {
-      final homeProvider = Provider.of<HomeProvider>(context, listen: false);
-      final sub = Provider.of<SubstrateSdk>(context, listen: false);
-      final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
-      final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
-      final datapod = Provider.of<V2sDatapodProvider>(context, listen: false);
-
-      // Init durt 2
-      await GetIt.I.get<DurtService>().init();
-
-      final bool isWalletsExists = myWalletProvider.isWalletsExists();
-
-      // Check if versionData non compatible, drop everything
-      if (configBox.get('dataVersion') == null) {
-        configBox.put('dataVersion', dataVersion);
-      }
-      if (isWalletsExists && (configBox.get('dataVersion')) < dataVersion) {
-        if (!sub.sdkReady && !sub.sdkLoading) sub.initApi();
-        // ignore: use_build_context_synchronously
-        await infoPopup(context, "chestNotCompatibleMustReinstallGecko".tr());
-        await Hive.deleteBoxFromDisk('walletBox');
-        await Hive.deleteBoxFromDisk('chestBox');
-        await datapod.deleteAvatarsDirectory();
-        await avatarsDirectory.create();
-        chestBox = await Hive.openBox<ChestData>("chestBox");
-        await configBox.delete('defaultWallet');
-        if (!sub.sdkReady && !sub.sdkLoading) await sub.initApi();
-        await sub.deleteAllAccounts();
-        configBox.put('dataVersion', dataVersion);
-        myWalletProvider.reload();
-      } else {
-        if (!sub.sdkReady && !sub.sdkLoading) await sub.initApi();
-      }
-
-      if (sub.sdkReady && !sub.nodeConnected) {
-        walletBox = await Hive.openBox<WalletData>("walletBox");
-        await Hive.deleteBoxFromDisk('g1WalletsBox');
-        await datapod.deleteAvatarsCacheDirectory();
-        await avatarsCacheDirectory.create();
-        g1WalletsBox = await Hive.openBox<G1WalletsList>("g1WalletsBox");
-        contactsBox = await Hive.openBox<G1WalletsList>("contactsBox");
-
-        homeProvider.isWalletBoxInit = true;
-        myWalletProvider.reload();
-
-        await homeProvider.getValidEndpoints();
-        if (configBox.get('isCacheChecked') == null) {
-          configBox.put('isCacheChecked', false);
-        }
-
-        Future<void> updateConnectionStatus(List<ConnectivityResult> result) async {
-          log.i('Network changed: $result');
-          if (result.contains(ConnectivityResult.none)) {
-            sub.nodeConnected = false;
-            await sub.sdk.api.setting.unsubscribeBestNumber();
-            homeProvider.changeMessage("notConnectedToInternet".tr());
-            sub.reload();
-          } else {
-            // Check if the phone is actually connected to the internet
-            var connectivityResult = await (Connectivity().checkConnectivity());
-            if (!connectivityResult.contains(ConnectivityResult.none)) {
-              await sub.connectNode();
-
-              // Load wallets list
-              myWalletProvider.readAllWallets(myWalletProvider.getCurrentChest());
-
-              //Connect to Indexer
-              await duniterIndexer.getValidIndexerEndpoint();
-            }
-          }
-        }
-
-        Connectivity().onConnectivityChanged.listen(updateConnectionStatus);
-      }
+      await Provider.of<HomeProvider>(context, listen: false).initHome(context);
     });
-    super.initState();
   }
 
   @override
@@ -120,10 +37,11 @@ class _HomeScreenState extends State<HomeScreen> {
 
     final myWalletProvider = Provider.of<MyWalletsProvider>(context);
     Provider.of<ChestProvider>(context);
-    final isWalletsExists = myWalletProvider.isWalletsExists();
-
-    isTall = (MediaQuery.of(context).size.height / MediaQuery.of(context).size.width) > 1.75;
+    final isWalletsExists = myWalletProvider.isWalletsExists;
 
+    isTall = (MediaQuery.of(context).size.height /
+            MediaQuery.of(context).size.width) >
+        1.75;
     return Scaffold(
         resizeToAvoidBottomInset: false,
         drawer: MainDrawer(isWalletsExists: isWalletsExists),
@@ -143,7 +61,8 @@ Widget geckHome(context) {
         fit: BoxFit.cover,
       ),
     ),
-    child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
+    child:
+        Column(crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
       Stack(children: <Widget>[
         Positioned(
           top: statusBarHeight + scaleSize(10),
@@ -151,12 +70,15 @@ Widget geckHome(context) {
           child: IconHomeSettings(),
         ),
         Align(
-          child: Image(image: const AssetImage('assets/home/header.png'), height: scaleSize(165)),
+          child: Image(
+              image: const AssetImage('assets/home/header.png'),
+              height: scaleSize(165)),
         ),
       ]),
       Padding(
         padding: const EdgeInsets.only(top: 15),
-        child: Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
+        child:
+            Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
           DefaultTextStyle(
             textAlign: TextAlign.center,
             style: scaledTextStyle(
@@ -217,7 +139,8 @@ Widget welcomeHome(context) {
         fit: BoxFit.cover,
       ),
     ),
-    child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
+    child:
+        Column(crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
       Stack(children: <Widget>[
         Positioned(
           top: statusBarHeight + scaleSize(10),
@@ -225,12 +148,15 @@ Widget welcomeHome(context) {
           child: IconHomeSettings(),
         ),
         Align(
-          child: Image(image: const AssetImage('assets/home/header.png'), height: scaleSize(165)),
+          child: Image(
+              image: const AssetImage('assets/home/header.png'),
+              height: scaleSize(165)),
         ),
       ]),
       Padding(
         padding: const EdgeInsets.only(top: 1),
-        child: Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
+        child:
+            Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
           Expanded(
             child: Text(
               "fastAppDescription".tr(args: [currencyName]),
@@ -278,9 +204,11 @@ Widget welcomeHome(context) {
                   Expanded(
                     child: Stack(children: <Widget>[
                       Padding(
-                        padding: EdgeInsets.only(top: scaleSize(isTall ? 55 : 0)),
+                        padding:
+                            EdgeInsets.only(top: scaleSize(isTall ? 55 : 0)),
                         child: Image(
-                          image: const AssetImage('assets/home/gecko-bienvenue.png'),
+                          image: const AssetImage(
+                              'assets/home/gecko-bienvenue.png'),
                           height: scaleSize(isTall ? 180 : 160),
                         ),
                       ),
@@ -326,7 +254,10 @@ Widget welcomeHome(context) {
                     },
                     child: Text(
                       'createWallet'.tr(),
-                      style: scaledTextStyle(fontSize: 20, fontWeight: FontWeight.w600, color: Colors.white),
+                      style: scaledTextStyle(
+                          fontSize: 20,
+                          fontWeight: FontWeight.w600,
+                          color: Colors.white),
                     ),
                   ),
                 ),
@@ -364,7 +295,10 @@ Widget welcomeHome(context) {
                     },
                     child: Text(
                       "restoreWallet".tr(),
-                      style: scaledTextStyle(fontSize: 20, color: orangeC, fontWeight: FontWeight.w600),
+                      style: scaledTextStyle(
+                          fontSize: 20,
+                          color: orangeC,
+                          fontWeight: FontWeight.w600),
                     ),
                   ),
                 ),
diff --git a/lib/screens/myWallets/chest_options.dart b/lib/screens/myWallets/chest_options.dart
index 3645fca61ea9ab094ac74b3389c1200725e0e5e4..b5197711040eab537add215d58fa489d52fcfa96 100644
--- a/lib/screens/myWallets/chest_options.dart
+++ b/lib/screens/myWallets/chest_options.dart
@@ -1,5 +1,6 @@
 // ignore_for_file: use_build_context_synchronously
 
+import 'package:durt2/durt2.dart' show Durt;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/globals.dart';
@@ -21,12 +22,12 @@ class ChestOptions extends StatelessWidget {
 
   @override
   Widget build(BuildContext context) {
-    final currentChest = chestBox.get(configBox.get('currentChest'))!;
+    final currentSafe = Durt.i.walletService.defaultSafeBox;
 
     return Scaffold(
       backgroundColor: backgroundColor,
       resizeToAvoidBottomInset: false,
-      appBar: GeckoAppBar(currentChest.name!),
+      appBar: GeckoAppBar(currentSafe.name),
       bottomNavigationBar: const GeckoBottomAppBar(),
       body: Stack(children: [
         Builder(
@@ -54,8 +55,9 @@ class ChestOptionsContent extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
     final chestProvider = Provider.of<ChestProvider>(context, listen: false);
-    final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
-    final currentChest = chestBox.get(configBox.get('currentChest'))!;
+    final myWalletProvider =
+        Provider.of<MyWalletsProvider>(context, listen: false);
+    final currentChest = Durt.i.walletService.defaultSafeBox;
     final isAlone = myWalletProvider.listWallets.length == 1;
 
     return Column(
@@ -75,7 +77,8 @@ class ChestOptionsContent extends StatelessWidget {
             );
           },
           child: Container(
-            padding: EdgeInsets.symmetric(horizontal: scaleSize(16), vertical: scaleSize(12)),
+            padding: EdgeInsets.symmetric(
+                horizontal: scaleSize(16), vertical: scaleSize(12)),
             child: Row(
               children: [
                 Icon(
@@ -115,7 +118,8 @@ class ChestOptionsContent extends StatelessWidget {
                 );
               },
               child: Container(
-                padding: EdgeInsets.symmetric(horizontal: scaleSize(16), vertical: scaleSize(12)),
+                padding: EdgeInsets.symmetric(
+                    horizontal: scaleSize(16), vertical: scaleSize(12)),
                 child: Row(
                   children: [
                     Icon(
@@ -145,22 +149,26 @@ class ChestOptionsContent extends StatelessWidget {
             builder: (context, sub, _) {
               return InkWell(
                 key: keycreateRootDerivation,
-                onTap: sub.nodeConnected
+                onTap: Durt.i.isConnected
                     ? () async {
                         await Navigator.push(
                           context,
-                          MaterialPageRoute(builder: (context) => const CustomDerivation()),
+                          MaterialPageRoute(
+                              builder: (context) => const CustomDerivation()),
                         );
                       }
                     : null,
                 child: Container(
-                  padding: EdgeInsets.symmetric(horizontal: scaleSize(16), vertical: scaleSize(12)),
+                  padding: EdgeInsets.symmetric(
+                      horizontal: scaleSize(16), vertical: scaleSize(12)),
                   child: Row(
                     children: [
                       Icon(
                         Icons.manage_accounts,
                         size: scaleSize(24),
-                        color: sub.nodeConnected ? Colors.black87 : Colors.grey[400],
+                        color: Durt.i.isConnected
+                            ? Colors.black87
+                            : Colors.grey[400],
                       ),
                       ScaledSizedBox(width: 16),
                       Expanded(
@@ -168,7 +176,9 @@ class ChestOptionsContent extends StatelessWidget {
                           'createDerivation'.tr(),
                           style: scaledTextStyle(
                             fontSize: 16,
-                            color: sub.nodeConnected ? Colors.black87 : Colors.grey[500],
+                            color: Durt.i.isConnected
+                                ? Colors.black87
+                                : Colors.grey[500],
                           ),
                           softWrap: true,
                         ),
@@ -187,7 +197,8 @@ class ChestOptionsContent extends StatelessWidget {
             await chestProvider.forgetSafe(context, currentChest);
           },
           child: Container(
-            padding: EdgeInsets.symmetric(horizontal: scaleSize(16), vertical: scaleSize(12)),
+            padding: EdgeInsets.symmetric(
+                horizontal: scaleSize(16), vertical: scaleSize(12)),
             child: Row(
               children: [
                 Image.asset(
diff --git a/lib/screens/myWallets/choose_chest.dart b/lib/screens/myWallets/choose_chest.dart
index fa1b7d9b5c1cdbe9818fbaa2bcae8d7daba972dd..843905105767ea13cd5ac699a8b8193ec232704e 100644
--- a/lib/screens/myWallets/choose_chest.dart
+++ b/lib/screens/myWallets/choose_chest.dart
@@ -1,5 +1,8 @@
 // ignore_for_file: use_build_context_synchronously
 
+import 'dart:io';
+
+import 'package:durt2/durt2.dart' show Durt;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/scale_functions.dart';
@@ -23,7 +26,7 @@ class ChooseChest extends StatefulWidget {
 class _ChooseChestState extends State<ChooseChest> {
   final tplController = TextEditingController();
   final buttonCarouselController = CarouselSliderController();
-  int? currentChest = configBox.get('currentChest');
+  int currentChest = Durt.i.walletService.defaultSafeBoxNumber;
 
   @override
   Widget build(BuildContext context) {
@@ -41,30 +44,31 @@ class _ChooseChestState extends State<ChooseChest> {
               options: CarouselOptions(
                 height: 210,
                 onPageChanged: (index, reason) {
-                  currentChest = chestBox.toMap().keys.toList()[index];
+                  currentChest =
+                      Durt.i.walletService.safeBox.toMap().keys.toList()[index];
                   setState(() {});
                 },
                 enableInfiniteScroll: false,
-                initialPage: currentChest!,
+                initialPage: currentChest,
                 enlargeCenterPage: true,
                 viewportFraction: 0.5,
               ),
-              items: chestBox.toMap().entries.map((i) {
+              items: Durt.i.walletService.safeBox.toMap().entries.map((i) {
                 return Builder(
                   builder: (BuildContext context) {
                     return Column(children: <Widget>[
-                      i.value.imageFile == null
+                      i.value.imagePath == null
                           ? Image.asset(
-                              'assets/chests/${i.value.imageName}',
+                              'assets/chests/${i.value.number}.png',
                               height: 150,
                             )
                           : Image.file(
-                              i.value.imageFile!,
+                              File(i.value.imagePath!),
                               height: 150,
                             ),
                       const SizedBox(height: 30),
                       Text(
-                        i.value.name!,
+                        i.value.name,
                         style: const TextStyle(fontSize: 20),
                       ),
                     ]);
@@ -72,10 +76,11 @@ class _ChooseChestState extends State<ChooseChest> {
                 );
               }).toList(),
             ),
-            if (chestBox.values.toList().length > 1)
+            if (Durt.i.walletService.safeBox.values.toList().length > 1)
               Row(
                 mainAxisAlignment: MainAxisAlignment.center,
-                children: chestBox.toMap().entries.map((entry) {
+                children:
+                    Durt.i.walletService.safeBox.values.toList().map((entry) {
                   return GestureDetector(
                     onTap: () =>
                         buttonCarouselController.animateToPage(entry.key),
@@ -86,10 +91,13 @@ class _ChooseChestState extends State<ChooseChest> {
                           vertical: 8.0, horizontal: 4.0),
                       decoration: BoxDecoration(
                           shape: BoxShape.circle,
-                          color: (Theme.of(context).brightness == Brightness.dark
+                          color: (Theme.of(context).brightness ==
+                                      Brightness.dark
                                   ? Colors.white
                                   : Colors.black)
-                              .withValues(alpha: currentChest == entry.key ? 0.9 : 0.4)),
+                              .withValues(
+                                  alpha:
+                                      currentChest == entry.key ? 0.9 : 0.4)),
                     ),
                   );
                 }).toList(),
diff --git a/lib/screens/myWallets/confirm_change_pin.dart b/lib/screens/myWallets/confirm_change_pin.dart
index 8ae690a2348e8929f41fd3aabb7dacea97b9eb4d..88a57d94dde63523f1859b9ebbb79982fd58a455 100644
--- a/lib/screens/myWallets/confirm_change_pin.dart
+++ b/lib/screens/myWallets/confirm_change_pin.dart
@@ -136,7 +136,7 @@ class _ConfirmChangePinScreenState extends State<ConfirmChangePinScreen> {
               widget.walletProvider.pinCode = pin;
 
               // Recharger les wallets avec le nouveau PIN
-              final currentChest = widget.walletProvider.getCurrentChest();
+              final currentChest = widget.walletProvider.getCurrentSafe;
               await widget.walletProvider.readAllWallets(currentChest);
               widget.walletProvider.reload();
 
diff --git a/lib/screens/myWallets/custom_derivations.dart b/lib/screens/myWallets/custom_derivations.dart
index d97e94eb76acf713b735eac789472c4e8b70faa4..9d60927d3bf85fdd5d6eab430fc0df774dbf52b6 100644
--- a/lib/screens/myWallets/custom_derivations.dart
+++ b/lib/screens/myWallets/custom_derivations.dart
@@ -1,10 +1,10 @@
 // ignore_for_file: use_build_context_synchronously
 
+import 'package:durt2/durt2.dart' show WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:gecko/globals.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/widgets/commons/top_appbar.dart';
 import 'package:provider/provider.dart';
@@ -117,7 +117,7 @@ class _CustomDerivationState extends State<CustomDerivation> {
                 ),
                 onPressed: () async {
                   if (!await myWalletProvider.askPinCode()) return;
-                  String newDerivationName = '${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}';
+                  String newDerivationName = '${'wallet'.tr()} ${myWalletProvider.listWallets.last.number + 2}';
                   if (dropdownValue == 'root') {
                     await myWalletProvider.generateRootWallet(context, 'rootWallet'.tr());
                   } else {
diff --git a/lib/screens/myWallets/import_g1_v1.dart b/lib/screens/myWallets/import_g1_v1.dart
index 98e5ff8c9e665afe0bd345de777680c3c8c44ed3..0704ba6cd47c9a6622376e2bcbc0d38b8ca3921d 100644
--- a/lib/screens/myWallets/import_g1_v1.dart
+++ b/lib/screens/myWallets/import_g1_v1.dart
@@ -1,13 +1,13 @@
 // ignore_for_file: use_build_context_synchronously
 
 import 'dart:async';
+import 'package:durt2/durt2.dart' show IdtyStatus, WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/services.dart';
 import 'package:gecko/globals.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/models/migrate_wallet_checks.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
diff --git a/lib/screens/myWallets/manage_membership.dart b/lib/screens/myWallets/manage_membership.dart
index e60898b935d92ec50177d897d03bc9323891f020..064118acacd141860445e79a27350235c46ec5cf 100644
--- a/lib/screens/myWallets/manage_membership.dart
+++ b/lib/screens/myWallets/manage_membership.dart
@@ -1,10 +1,10 @@
 // ignore_for_file: use_build_context_synchronously
 
+import 'package:durt2/durt2.dart' show IdtyStatus;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:gecko/globals.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
@@ -196,7 +196,7 @@ class ManageMembership extends StatelessWidget {
       status,
       sub.currencyParameters['membershipRenewalPeriod']!,
     );
-    if (info.expireDate == null && status.idtyStatus != IdtyStatus.notMember) return const SizedBox.shrink();
+    if (info.expireDate == null && status.idtyStatus != IdtyStatus.expired) return const SizedBox.shrink();
 
     return Container(
       height: scaleSize(64),
diff --git a/lib/screens/myWallets/migrate_identity.dart b/lib/screens/myWallets/migrate_identity.dart
index 1f24c4387d133d3d5ab391b2700126f31390b302..4f3c01cfe7c2b84f03ab867c713ad9a64b0f3569 100644
--- a/lib/screens/myWallets/migrate_identity.dart
+++ b/lib/screens/myWallets/migrate_identity.dart
@@ -1,5 +1,6 @@
 // ignore_for_file: use_build_context_synchronously
 
+import 'package:durt2/durt2.dart' show Durt;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:gecko/globals.dart';
 import 'package:flutter/material.dart';
@@ -43,7 +44,7 @@ class MigrateIdentityScreen extends StatelessWidget {
     String matchInfo = '';
 
     Future scanDerivations() async {
-      if (!await isAddress(newWalletAddress.text) || !await sub.isMnemonicValid(newMnemonicSentence.text) || !statusData.canValidate) {
+      if (!await isAddress(newWalletAddress.text) || !Durt.i.walletService.isMnemonicValid(newMnemonicSentence.text) || !statusData.canValidate) {
         mnemonicIsValid = false;
         matchInfo = '';
         walletOptions.reload();
diff --git a/lib/screens/myWallets/restore_chest.dart b/lib/screens/myWallets/restore_chest.dart
index dbf626813c43ab064b1cef88242cbd3a19211b58..567d9f4ae8d23368661a4c221229c4e1bbde862e 100644
--- a/lib/screens/myWallets/restore_chest.dart
+++ b/lib/screens/myWallets/restore_chest.dart
@@ -1,13 +1,13 @@
 // ignore_for_file: use_build_context_synchronously
 
 import 'package:bubble/bubble.dart';
+import 'package:durt2/durt2.dart' show Durt;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:gecko/globals.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/models/scale_functions.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/generate_wallets.dart';
-import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/screens/onBoarding/7.dart';
 import 'package:gecko/screens/onBoarding/9.dart';
 import 'package:gecko/widgets/commons/fader_transition.dart';
@@ -24,7 +24,6 @@ class RestoreChest extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
     final genW = Provider.of<GenerateWalletsProvider>(context, listen: false);
-    final sub = Provider.of<SubstrateSdk>(context, listen: false);
 
     if (genW.isSentenceComplete(context)) {
       genW.generatedMnemonic =
@@ -97,7 +96,7 @@ class RestoreChest extends StatelessWidget {
                             ),
                           ),
                           onPressed: () async {
-                            if (await sub.isMnemonicValid(genW.generatedMnemonic!)) {
+                            if (Durt.i.walletService.isMnemonicValid(genW.generatedMnemonic!)) {
                               genW.resetImportView();
                               await Navigator.push(
                                 context,
diff --git a/lib/screens/myWallets/show_seed.dart b/lib/screens/myWallets/show_seed.dart
index 78bcac4056087a5e0ff0f558fe11f0e378c173f8..15f50526e8ab2ce9d0a2cd754cb0ae14a027a9db 100644
--- a/lib/screens/myWallets/show_seed.dart
+++ b/lib/screens/myWallets/show_seed.dart
@@ -1,9 +1,9 @@
+import 'package:durt2/durt2.dart' show WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/services.dart';
 import 'package:gecko/globals.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
diff --git a/lib/screens/myWallets/unlocking_wallet.dart b/lib/screens/myWallets/unlocking_wallet.dart
index a10337c0f3249d558bae59b8476af143fe293e3c..d4c541084a3ebf67c19d6b28fae69be69c3444a5 100644
--- a/lib/screens/myWallets/unlocking_wallet.dart
+++ b/lib/screens/myWallets/unlocking_wallet.dart
@@ -1,13 +1,13 @@
 import 'dart:async';
+import 'dart:io';
+import 'package:durt2/durt2.dart' show Durt, SafeBox, WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/services.dart';
-import 'package:gecko/models/chest_data.dart';
 import 'package:gecko/models/scale_functions.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/providers/my_wallets.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/wallet_options.dart';
 import 'package:flutter/material.dart';
 import 'package:pin_code_fields/pin_code_fields.dart';
@@ -23,8 +23,8 @@ class UnlockingWallet extends StatefulWidget {
 }
 
 class _UnlockingWalletState extends State<UnlockingWallet> {
-  late int currentChestNumber;
-  late ChestData currentChest;
+  late int currentSafeNumber;
+  late SafeBox currentSafe;
   bool canUnlock = true;
   late final TextEditingController enterPin;
   late final FocusNode pinFocus;
@@ -36,14 +36,16 @@ class _UnlockingWalletState extends State<UnlockingWallet> {
     super.initState();
     pinFocus = FocusNode(debugLabel: 'pinFocusNode');
     enterPin = TextEditingController();
-    currentChestNumber = configBox.get('currentChest');
-    currentChest = chestBox.get(currentChestNumber)!;
+    currentSafeNumber = Durt.i.walletService.defaultSafeBoxNumber;
+    currentSafe = Durt.i.walletService.safeBox.get(currentSafeNumber)!;
   }
 
   @override
   Widget build(BuildContext context) {
-    final walletOptions = Provider.of<WalletOptionsProvider>(context, listen: false);
-    final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
+    final walletOptions =
+        Provider.of<WalletOptionsProvider>(context, listen: false);
+    final myWalletProvider =
+        Provider.of<MyWalletsProvider>(context, listen: false);
 
     final pinLenght = walletOptions.getPinLenght(widget.wallet.number);
 
@@ -79,19 +81,19 @@ class _UnlockingWalletState extends State<UnlockingWallet> {
                 Row(
                   mainAxisAlignment: MainAxisAlignment.center,
                   children: <Widget>[
-                    currentChest.imageFile == null
+                    currentSafe.imagePath == null
                         ? Image.asset(
-                            'assets/chests/${currentChest.imageName}',
+                            'assets/chests/${currentSafe.number}.png',
                             width: scaleSize(isTall ? 95 : 75),
                           )
                         : Image.file(
-                            currentChest.imageFile!,
+                            File(currentSafe.imagePath!),
                             width: scaleSize(isTall ? 127 : 95),
                           ),
                     ScaledSizedBox(width: 18),
                     Flexible(
                       child: Text(
-                        currentChest.name!,
+                        currentSafe.name,
                         textAlign: TextAlign.center,
                         style: scaledTextStyle(
                           fontSize: isTall ? 24 : 20,
@@ -129,7 +131,8 @@ class _UnlockingWalletState extends State<UnlockingWallet> {
                         ),
                       ),
                       ScaledSizedBox(height: isTall ? 24 : 12),
-                      if (!myWalletProvider.isPinValid && !myWalletProvider.isPinLoading)
+                      if (!myWalletProvider.isPinValid &&
+                          !myWalletProvider.isPinLoading)
                         Padding(
                           padding: const EdgeInsets.only(bottom: 16),
                           child: Text(
@@ -144,7 +147,8 @@ class _UnlockingWalletState extends State<UnlockingWallet> {
                       pinForm(context, pinLenght),
                       ScaledSizedBox(height: isTall ? 16 : 8),
                       if (canUnlock)
-                        Consumer<WalletOptionsProvider>(builder: (context, sub, _) {
+                        Consumer<WalletOptionsProvider>(
+                            builder: (context, sub, _) {
                           return InkWell(
                             key: keyCachePassword,
                             onTap: () {
@@ -155,7 +159,9 @@ class _UnlockingWalletState extends State<UnlockingWallet> {
                               mainAxisSize: MainAxisSize.min,
                               children: [
                                 Icon(
-                                  configBox.get('isCacheChecked') ? Icons.check_box : Icons.check_box_outline_blank,
+                                  configBox.get('isCacheChecked')
+                                      ? Icons.check_box
+                                      : Icons.check_box_outline_blank,
                                   color: orangeC,
                                   size: scaleSize(20),
                                 ),
@@ -193,7 +199,8 @@ class _UnlockingWalletState extends State<UnlockingWallet> {
 
     return Form(
       child: Padding(
-          padding: EdgeInsets.symmetric(vertical: scaleSize(3), horizontal: scaleSize(isTall ? 30 : 20)),
+          padding: EdgeInsets.symmetric(
+              vertical: scaleSize(3), horizontal: scaleSize(isTall ? 30 : 20)),
           child: PinCodeTextField(
             key: keyPinForm,
             textCapitalization: TextCapitalization.characters,
@@ -246,7 +253,8 @@ class _UnlockingWalletState extends State<UnlockingWallet> {
             onCompleted: (pin) async {
               myWalletProvider.isPinLoading = true;
               myWalletProvider.pinCode = pin.toUpperCase();
-              final isValid = await sub.checkPassword(defaultWallet.address, pin.toUpperCase());
+              final isValid = await sub.checkPassword(
+                  defaultWallet.address, pin.toUpperCase());
               if (!isValid) {
                 await Future.delayed(const Duration(milliseconds: 20));
                 pinColor = Colors.red[600]!;
diff --git a/lib/screens/myWallets/wallet_options.dart b/lib/screens/myWallets/wallet_options.dart
index 3b708d5aa144d670b5f4c6e2a6aac7c3c4df939d..95740e028393ed99ea03cb95343ef94a970daf1c 100644
--- a/lib/screens/myWallets/wallet_options.dart
+++ b/lib/screens/myWallets/wallet_options.dart
@@ -2,6 +2,7 @@
 
 import 'dart:async';
 import 'dart:io';
+import 'package:durt2/durt2.dart' show Durt, IdtyStatus, WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_svg/svg.dart';
@@ -11,7 +12,6 @@ import 'package:gecko/models/scale_functions.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/duniter_indexer.dart';
 import 'package:gecko/providers/my_wallets.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/providers/wallet_options.dart';
 import 'package:gecko/providers/wallets_profiles.dart';
@@ -29,25 +29,30 @@ import 'package:gecko/widgets/wallet_header.dart';
 import 'package:gecko/screens/identity/confirm_identity.dart';
 
 class WalletOptions extends StatelessWidget {
-  const WalletOptions({Key? keyMyWallets, required this.wallet}) : super(key: keyMyWallets);
+  const WalletOptions({Key? keyMyWallets, required this.wallet})
+      : super(key: keyMyWallets);
   final WalletData wallet;
 
   @override
   Widget build(BuildContext context) {
-    final walletOptions = Provider.of<WalletOptionsProvider>(context, listen: false);
-    WalletsProfilesProvider historyProvider = Provider.of<WalletsProfilesProvider>(context, listen: false);
-    final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
+    final walletOptions =
+        Provider.of<WalletOptionsProvider>(context, listen: false);
+    WalletsProfilesProvider historyProvider =
+        Provider.of<WalletsProfilesProvider>(context, listen: false);
+    final myWalletProvider =
+        Provider.of<MyWalletsProvider>(context, listen: false);
     final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
 
     walletOptions.address.text = wallet.address;
 
-    final currentChest = myWalletProvider.getCurrentChest();
-    final isWalletNameIndexed = duniterIndexer.walletNameIndexer[walletOptions.address.text] != null;
+    final currentChest = myWalletProvider.getCurrentSafe;
+    final isWalletNameIndexed =
+        duniterIndexer.walletNameIndexer[walletOptions.address.text] != null;
 
     final isAlone = myWalletProvider.listWallets.length == 1;
 
     final defaultWallet = myWalletProvider.getDefaultWallet();
-    walletOptions.isDefaultWallet = (defaultWallet.number == wallet.id[1]);
+    walletOptions.isDefaultWallet = defaultWallet.address == wallet.address;
 
     return PopScope(
       onPopInvokedWithResult: (_, __) {
@@ -58,7 +63,9 @@ class WalletOptions extends StatelessWidget {
         backgroundColor: Colors.white,
         appBar: WalletAppBar(
           address: wallet.address,
-          title: isWalletNameIndexed ? duniterIndexer.walletNameIndexer[walletOptions.address.text]! : wallet.name!,
+          title: isWalletNameIndexed
+              ? duniterIndexer.walletNameIndexer[walletOptions.address.text]!
+              : wallet.name!,
         ),
         body: Stack(
           children: [
@@ -66,8 +73,8 @@ class WalletOptions extends StatelessWidget {
               children: [
                 WalletHeader(
                   address: wallet.address,
-                  customImagePath: wallet.imageCustomPath,
-                  defaultImagePath: wallet.imageDefaultPath,
+                  customImagePath: wallet.imagePath,
+                  defaultImagePath: wallet.imagePath,
                 ),
                 // Corps avec les options
                 Expanded(
@@ -85,24 +92,37 @@ class WalletOptions extends StatelessWidget {
                                 spacing: 8,
                                 children: [
                                   buildConfirmIdentitySection(walletProvider),
-                                  if (wallet.hasIdentity) buildRenewMembershipSection(walletProvider),
-                                  buildOptionsSection(context, walletProvider, historyProvider),
-                                  if (!isAlone) buildDefaultWalletSection(context, walletProvider, myWalletProvider, walletOptions, currentChest),
+                                  if (wallet.hasIdentity)
+                                    buildRenewMembershipSection(walletProvider),
+                                  buildOptionsSection(
+                                      context, walletProvider, historyProvider),
+                                  if (!isAlone)
+                                    buildDefaultWalletSection(
+                                        context,
+                                        walletProvider,
+                                        myWalletProvider,
+                                        walletOptions,
+                                        currentChest),
                                   if (!wallet.hasIdentity)
                                     InkWell(
                                       key: keyRenameWallet,
                                       onTap: () async {
-                                        await walletProvider.editWalletName(context, [wallet.id[0], wallet.id[1]]);
+                                        await walletProvider.editWalletName(
+                                            context, wallet.address);
                                       },
                                       child: Container(
-                                        padding: EdgeInsets.symmetric(horizontal: scaleSize(17), vertical: scaleSize(12)),
+                                        padding: EdgeInsets.symmetric(
+                                            horizontal: scaleSize(17),
+                                            vertical: scaleSize(12)),
                                         child: Row(
-                                          crossAxisAlignment: CrossAxisAlignment.center,
+                                          crossAxisAlignment:
+                                              CrossAxisAlignment.center,
                                           children: [
                                             Image.asset(
                                               'assets/walletOptions/edit.png',
                                               height: scaleSize(22),
-                                              color: const Color(0xFF4A90E2).withValues(alpha: 0.8),
+                                              color: const Color(0xFF4A90E2)
+                                                  .withValues(alpha: 0.8),
                                             ),
                                             ScaledSizedBox(width: 18),
                                             Expanded(
@@ -119,8 +139,12 @@ class WalletOptions extends StatelessWidget {
                                         ),
                                       ),
                                     ),
-                                  if (!walletProvider.isDefaultWallet && !wallet.hasIdentity) deleteWallet(context, walletProvider, currentChest),
-                                  if (wallet.hasIdentity) const ManageMembershipButton(),
+                                  if (!walletProvider.isDefaultWallet &&
+                                      !wallet.hasIdentity)
+                                    deleteWallet(
+                                        context, walletProvider, currentChest),
+                                  if (wallet.hasIdentity)
+                                    const ManageMembershipButton(),
                                   if (isAlone) aloneWalletOptions(),
                                 ],
                               );
@@ -168,13 +192,13 @@ class WalletOptions extends StatelessWidget {
             ],
           ),
           child: ClipOval(
-            child: wallet.imageCustomPath == null || wallet.imageCustomPath == ''
+            child: wallet.imagePath == null || wallet.imagePath == ''
                 ? Image.asset(
-                    'assets/avatars/${wallet.imageDefaultPath}',
+                    'assets/avatars/${wallet.number}.png',
                     fit: BoxFit.cover,
                   )
                 : Image.file(
-                    File(wallet.imageCustomPath!),
+                    File(wallet.imagePath!),
                     fit: BoxFit.cover,
                   ),
           ),
@@ -190,7 +214,7 @@ class WalletOptions extends StatelessWidget {
             ),
             child: InkWell(
               onTap: () async {
-                wallet.imageCustomPath = await walletProvider.changeAvatar();
+                wallet.imagePath = await walletProvider.changeAvatar();
                 walletProvider.reload();
               },
               child: Icon(
@@ -205,17 +229,23 @@ class WalletOptions extends StatelessWidget {
     );
   }
 
-  Widget activityWidget(BuildContext context, WalletsProfilesProvider historyProvider, WalletOptionsProvider walletProvider) {
+  Widget activityWidget(
+      BuildContext context,
+      WalletsProfilesProvider historyProvider,
+      WalletOptionsProvider walletProvider) {
     return InkWell(
       key: keyOpenActivity,
       onTap: () {
         Navigator.push(
           context,
-          PageNoTransit(builder: (context) => ActivityScreen(address: walletProvider.address.text)),
+          PageNoTransit(
+              builder: (context) =>
+                  ActivityScreen(address: walletProvider.address.text)),
         );
       },
       child: Container(
-        padding: EdgeInsets.symmetric(horizontal: scaleSize(16), vertical: scaleSize(12)),
+        padding: EdgeInsets.symmetric(
+            horizontal: scaleSize(16), vertical: scaleSize(12)),
         child: Row(
           crossAxisAlignment: CrossAxisAlignment.center,
           children: [
@@ -242,44 +272,56 @@ class WalletOptions extends StatelessWidget {
   }
 
   Future setDefaultWallet(BuildContext context, int currentChest) async {
-    final sub = Provider.of<SubstrateSdk>(context, listen: false);
-    final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
-    final walletOptions = Provider.of<WalletOptionsProvider>(context, listen: false);
+    final myWalletProvider =
+        Provider.of<MyWalletsProvider>(context, listen: false);
+    final walletOptions =
+        Provider.of<WalletOptionsProvider>(context, listen: false);
 
-    await sub.setCurrentWallet(wallet);
+    await Durt.i.walletService.setDefaultWallet(walletOptions.address.text);
     await myWalletProvider.readAllWallets(currentChest);
     myWalletProvider.reload();
     walletOptions.reload();
   }
 
-  Widget deleteWallet(BuildContext context, WalletOptionsProvider walletOptions, int currentChest) {
+  Widget deleteWallet(BuildContext context, WalletOptionsProvider walletOptions,
+      int currentChest) {
     final sub = Provider.of<SubstrateSdk>(context, listen: false);
-    final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
+    final myWalletProvider =
+        Provider.of<MyWalletsProvider>(context, listen: false);
 
     final defaultWallet = myWalletProvider.getDefaultWallet();
-    final bool isDefaultWallet = walletOptions.address.text == defaultWallet.address;
+    final bool isDefaultWallet =
+        walletOptions.address.text == defaultWallet.address;
     return FutureBuilder(
         future: sub.hasAccountConsumers(wallet.address),
         builder: (BuildContext context, AsyncSnapshot<bool> hasConsumers) {
-          if (hasConsumers.connectionState != ConnectionState.done || hasConsumers.hasError || !hasConsumers.hasData) {
+          if (hasConsumers.connectionState != ConnectionState.done ||
+              hasConsumers.hasError ||
+              !hasConsumers.hasData) {
             return const SizedBox.shrink();
           }
-          final int balance = walletOptions.balanceCache[walletOptions.address.text] ?? -1;
-          final bool canDelete = !isDefaultWallet && !hasConsumers.data! && (balance > 2 || balance == 0) && !wallet.hasIdentity;
+          final int balance =
+              walletOptions.balanceCache[walletOptions.address.text] ?? -1;
+          final bool canDelete = !isDefaultWallet &&
+              !hasConsumers.data! &&
+              (balance > 2 || balance == 0) &&
+              !wallet.hasIdentity;
           return InkWell(
             key: keyDeleteWallet,
             onTap: canDelete
                 ? () async {
                     await walletOptions.deleteWallet(context, wallet);
                     WidgetsBinding.instance.addPostFrameCallback((_) async {
-                      myWalletProvider.listWallets = await myWalletProvider.readAllWallets(currentChest);
+                      myWalletProvider.listWallets =
+                          await myWalletProvider.readAllWallets(currentChest);
                       myWalletProvider.reload();
                     });
                   }
                 : null,
             child: canDelete
                 ? Container(
-                    padding: EdgeInsets.symmetric(horizontal: scaleSize(16), vertical: scaleSize(12)),
+                    padding: EdgeInsets.symmetric(
+                        horizontal: scaleSize(16), vertical: scaleSize(12)),
                     child: Row(
                       crossAxisAlignment: CrossAxisAlignment.center,
                       children: [
@@ -322,8 +364,12 @@ class WalletOptions extends StatelessWidget {
               sub.currencyParameters['membershipRenewalPeriod']!,
             );
 
-            final twentyDaysBeforeExpiration = info.expireDate?.subtract(const Duration(days: 20));
-            final shouldHideButton = !info.canRenew || (info.expireDate != null && !(twentyDaysBeforeExpiration?.isBefore(DateTime.now()) ?? false));
+            final twentyDaysBeforeExpiration =
+                info.expireDate?.subtract(const Duration(days: 20));
+            final shouldHideButton = !info.canRenew ||
+                (info.expireDate != null &&
+                    !(twentyDaysBeforeExpiration?.isBefore(DateTime.now()) ??
+                        false));
 
             if (shouldHideButton) return const SizedBox.shrink();
 
@@ -343,10 +389,12 @@ class WalletOptions extends StatelessWidget {
                           borderRadius: BorderRadius.circular(8),
                         ),
                       ),
-                      onPressed: () => MembershipRenewal.executeRenewal(context, walletProvider.address.text),
+                      onPressed: () => MembershipRenewal.executeRenewal(
+                          context, walletProvider.address.text),
                       child: Text(
                         'renewMembership'.tr(),
-                        style: scaledTextStyle(fontSize: 16, color: Colors.white),
+                        style:
+                            scaledTextStyle(fontSize: 16, color: Colors.white),
                       ),
                     ),
                   ),
@@ -361,12 +409,19 @@ class WalletOptions extends StatelessWidget {
     );
   }
 
-  Widget buildOptionsSection(BuildContext context, WalletOptionsProvider walletProvider, WalletsProfilesProvider historyProvider) {
+  Widget buildOptionsSection(
+      BuildContext context,
+      WalletOptionsProvider walletProvider,
+      WalletsProfilesProvider historyProvider) {
     return activityWidget(context, historyProvider, walletProvider);
   }
 
   Widget buildDefaultWalletSection(
-      BuildContext context, WalletOptionsProvider walletProvider, MyWalletsProvider myWalletProvider, WalletOptionsProvider walletOptions, int currentChest) {
+      BuildContext context,
+      WalletOptionsProvider walletProvider,
+      MyWalletsProvider myWalletProvider,
+      WalletOptionsProvider walletOptions,
+      int currentChest) {
     return Consumer<MyWalletsProvider>(
       builder: (context, myWalletProvider, _) {
         return InkWell(
@@ -378,22 +433,29 @@ class WalletOptions extends StatelessWidget {
                 }
               : null,
           child: Container(
-            padding: EdgeInsets.symmetric(horizontal: scaleSize(16), vertical: scaleSize(12)),
+            padding: EdgeInsets.symmetric(
+                horizontal: scaleSize(16), vertical: scaleSize(12)),
             child: Row(
               crossAxisAlignment: CrossAxisAlignment.center,
               children: [
                 Icon(
                   Icons.check_circle_outline,
                   size: scaleSize(24),
-                  color: walletProvider.isDefaultWallet ? Colors.grey[400] : const Color(0xFF4CAF50).withValues(alpha: 0.8),
+                  color: walletProvider.isDefaultWallet
+                      ? Colors.grey[400]
+                      : const Color(0xFF4CAF50).withValues(alpha: 0.8),
                 ),
                 ScaledSizedBox(width: 16),
                 Expanded(
                   child: Text(
-                    walletProvider.isDefaultWallet ? 'thisWalletIsDefault'.tr() : 'defineWalletAsDefault'.tr(),
+                    walletProvider.isDefaultWallet
+                        ? 'thisWalletIsDefault'.tr()
+                        : 'defineWalletAsDefault'.tr(),
                     style: scaledTextStyle(
                       fontSize: 16,
-                      color: walletProvider.isDefaultWallet ? Colors.grey[500] : Colors.black87,
+                      color: walletProvider.isDefaultWallet
+                          ? Colors.grey[500]
+                          : Colors.black87,
                     ),
                     softWrap: true,
                   ),
@@ -411,9 +473,12 @@ class WalletOptions extends StatelessWidget {
       return FutureBuilder(
         future: sub.idtyStatusMulti([walletProvider.address.text]),
         initialData: const [IdtyStatus.unknown],
-        builder: (BuildContext context, AsyncSnapshot<List<IdtyStatus>> snapshot) {
+        builder:
+            (BuildContext context, AsyncSnapshot<List<IdtyStatus>> snapshot) {
           return Visibility(
-            visible: snapshot.hasData && !snapshot.hasError && snapshot.data!.first == IdtyStatus.unconfirmed,
+            visible: snapshot.hasData &&
+                !snapshot.hasError &&
+                snapshot.data!.first == IdtyStatus.created,
             child: Column(children: [
               ScaledSizedBox(height: 22),
               SizedBox(
@@ -473,20 +538,25 @@ Widget aloneWalletOptions() {
             onTap: () async {
               if (!myWalletProvider.isNewDerivationLoading) {
                 if (!await myWalletProvider.askPinCode()) return;
-                String newDerivationName = '${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}';
-                await myWalletProvider.generateNewDerivation(context, newDerivationName);
+                String newDerivationName =
+                    '${'wallet'.tr()} ${myWalletProvider.listWallets.last.number + 2}';
+                await myWalletProvider.generateNewDerivation(
+                    context, newDerivationName);
                 Navigator.pushReplacementNamed(context, '/mywallets');
               }
             },
             child: Container(
-              padding: EdgeInsets.symmetric(horizontal: scaleSize(16), vertical: scaleSize(12)),
+              padding: EdgeInsets.symmetric(
+                  horizontal: scaleSize(16), vertical: scaleSize(12)),
               child: Row(
                 crossAxisAlignment: CrossAxisAlignment.center,
                 children: [
                   Icon(
                     Icons.add_circle_outline,
                     size: scaleSize(24),
-                    color: sub.nodeConnected ? Color(0xFF4CAF50).withValues(alpha: 0.8) : Colors.grey[400],
+                    color: Durt.i.isConnected
+                        ? Color(0xFF4CAF50).withValues(alpha: 0.8)
+                        : Colors.grey[400],
                   ),
                   ScaledSizedBox(width: 16),
                   Expanded(
@@ -494,7 +564,9 @@ Widget aloneWalletOptions() {
                       'createNewWallet'.tr(),
                       style: scaledTextStyle(
                         fontSize: 16,
-                        color: sub.nodeConnected ? Colors.black87 : Colors.grey[500],
+                        color: Durt.i.isConnected
+                            ? Colors.black87
+                            : Colors.grey[500],
                       ),
                       softWrap: true,
                     ),
@@ -513,7 +585,8 @@ Widget aloneWalletOptions() {
           );
         },
         child: Container(
-          padding: EdgeInsets.symmetric(horizontal: scaleSize(16), vertical: scaleSize(12)),
+          padding: EdgeInsets.symmetric(
+              horizontal: scaleSize(16), vertical: scaleSize(12)),
           child: Row(
             children: [
               SvgPicture.asset(
diff --git a/lib/screens/myWallets/wallets_home.dart b/lib/screens/myWallets/wallets_home.dart
index 882ed481fd37ac93d7572d7b4a1834449e24b7c1..80bd603a49b871fe1c0f260e63f49a769c958662 100644
--- a/lib/screens/myWallets/wallets_home.dart
+++ b/lib/screens/myWallets/wallets_home.dart
@@ -1,8 +1,8 @@
 // ignore_for_file: use_build_context_synchronously
 
+import 'package:durt2/durt2.dart' hide Provider;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:gecko/globals.dart';
-import 'package:gecko/models/chest_data.dart';
 import 'package:gecko/models/scale_functions.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/my_wallets.dart';
@@ -27,13 +27,17 @@ class WalletsHome extends StatefulWidget {
   State<WalletsHome> createState() => _WalletsHomeState();
 }
 
-class _WalletsHomeState extends State<WalletsHome> with SingleTickerProviderStateMixin {
+class _WalletsHomeState extends State<WalletsHome>
+    with SingleTickerProviderStateMixin {
   @override
   Widget build(BuildContext context) {
-    final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
+    final myWalletProvider =
+        Provider.of<MyWalletsProvider>(context, listen: false);
 
     return Scaffold(
-      body: myWalletProvider.listWallets.length == 1 ? WalletOptions(wallet: myWalletProvider.listWallets[0]) : _WalletsHomeContent(),
+      body: myWalletProvider.listWallets.length == 1
+          ? WalletOptions(wallet: myWalletProvider.listWallets[0])
+          : _WalletsHomeContent(),
     );
   }
 }
@@ -41,9 +45,11 @@ class _WalletsHomeState extends State<WalletsHome> with SingleTickerProviderStat
 class _WalletsHomeContent extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
-    final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
-    final currentChestNumber = myWalletProvider.getCurrentChest();
-    final ChestData currentChest = chestBox.get(currentChestNumber)!;
+    final myWalletProvider =
+        Provider.of<MyWalletsProvider>(context, listen: false);
+    final currentChestNumber = myWalletProvider.getCurrentSafe;
+    final SafeBox currentChest =
+        Durt.i.walletService.safeBox.get(currentChestNumber)!;
 
     return Scaffold(
         backgroundColor: backgroundColor,
@@ -52,18 +58,22 @@ class _WalletsHomeContent extends StatelessWidget {
           title: Row(
             children: [
               Image.asset(
-                'assets/chests/${currentChest.imageName}',
+                'assets/chests/${currentChest.number}.png',
                 height: 32,
               ),
               ScaledSizedBox(width: 17),
               Text(
-                currentChest.name!,
-                style: scaledTextStyle(color: Colors.grey[850], fontSize: 16, fontWeight: FontWeight.w500),
+                currentChest.name,
+                style: scaledTextStyle(
+                    color: Colors.grey[850],
+                    fontSize: 16,
+                    fontWeight: FontWeight.w500),
               ),
             ],
           ),
         ),
-        bottomNavigationBar: Consumer<MyWalletsProvider>(builder: (context, _, __) {
+        bottomNavigationBar:
+            Consumer<MyWalletsProvider>(builder: (context, _, __) {
           return myWalletProvider.lastFlyBy == null
               ? const GeckoBottomAppBar(
                   actualRoute: 'safeHome',
@@ -83,7 +93,7 @@ class _WalletsHomeContent extends StatelessWidget {
 
   Widget myWalletsTiles(BuildContext context, int currentChestNumber) {
     final myWalletProvider = Provider.of<MyWalletsProvider>(context);
-    final isWalletsExists = myWalletProvider.isWalletsExists();
+    final isWalletsExists = myWalletProvider.isWalletsExists;
 
     if (!isWalletsExists) {
       return const Text('');
@@ -122,7 +132,8 @@ class _WalletsHomeContent extends StatelessWidget {
                 Text(
                   'explainDraggableWallet'.tr(),
                   textAlign: TextAlign.center,
-                  style: scaledTextStyle(fontSize: 16, fontWeight: FontWeight.w500),
+                  style: scaledTextStyle(
+                      fontSize: 16, fontWeight: FontWeight.w500),
                 ),
               ],
             ))
@@ -138,7 +149,8 @@ class _WalletsHomeContent extends StatelessWidget {
     );
 
     // configBox.delete('showDraggableTutorial');
-    final bool showDraggableTutorial = configBox.get('showDraggableTutorial') ?? true;
+    final bool showDraggableTutorial =
+        configBox.get('showDraggableTutorial') ?? true;
 
     if (myWalletProvider.listWallets.length > 1 && showDraggableTutorial) {
       tutorialCoachMark.show(context: context);
@@ -156,16 +168,25 @@ class _WalletsHomeContent extends StatelessWidget {
               child: WalletTileMembre(wallet: myWalletProvider.idtyWallet!),
             ),
           ),
-        SliverGrid.count(key: keyListWallets, crossAxisCount: nTule, childAspectRatio: 1, crossAxisSpacing: 0, mainAxisSpacing: 0, children: <Widget>[
-          for (final repository in myWalletProvider.listWalletsWithoutIdty)
-            DragTuleAction(
-              wallet: repository,
-              child: WalletTile(repository: repository),
-            ),
-          Consumer<SubstrateSdk>(builder: (context, sub, _) {
-            return sub.nodeConnected && myWalletProvider.listWallets.length < maxWalletsInSafe ? const AddNewDerivationButton() : const Text('');
-          }),
-        ]),
+        SliverGrid.count(
+            key: keyListWallets,
+            crossAxisCount: nTule,
+            childAspectRatio: 1,
+            crossAxisSpacing: 0,
+            mainAxisSpacing: 0,
+            children: <Widget>[
+              for (final repository in myWalletProvider.listWalletsWithoutIdty)
+                DragTuleAction(
+                  wallet: repository,
+                  child: WalletTile(repository: repository),
+                ),
+              Consumer<SubstrateSdk>(builder: (context, sub, _) {
+                return Durt.i.isConnected &&
+                        myWalletProvider.listWallets.length < maxWalletsInSafe
+                    ? const AddNewDerivationButton()
+                    : const Text('');
+              }),
+            ]),
         const SliverToBoxAdapter(child: ChestOptionsButtons()),
       ]),
     );
diff --git a/lib/screens/onBoarding/10.dart b/lib/screens/onBoarding/10.dart
index 96f98e2de72886f751c542ebde1d2d0d7cd2d2e6..619ca93fedfcd853bf9744d29b2d1d483357fbe7 100644
--- a/lib/screens/onBoarding/10.dart
+++ b/lib/screens/onBoarding/10.dart
@@ -1,5 +1,6 @@
 // ignore_for_file: file_names, use_build_context_synchronously
 
+import 'package:durt2/durt2.dart' show Durt, WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
@@ -7,7 +8,6 @@ import 'package:flutter/services.dart';
 import 'package:gecko/extensions.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/generate_wallets.dart';
 import 'package:gecko/providers/my_wallets.dart';
@@ -44,18 +44,19 @@ class _OnboardingStepTenState extends State<OnboardingStepTen> {
   bool hasError = false;
   late final FocusNode pinFocus;
   late final TextEditingController enterPin;
+  final generateWalletProvider = Provider.of<GenerateWalletsProvider>(homeContext);
 
   @override
   void initState() {
     super.initState();
     pinFocus = FocusNode(debugLabel: 'pinFocusNode10');
     enterPin = TextEditingController();
+    generateWalletProvider.scanStatus = ScanDerivationsStatus.none;
   }
 
   @override
   Widget build(BuildContext context) {
     final walletOptions = Provider.of<WalletOptionsProvider>(context);
-    final sub = Provider.of<SubstrateSdk>(context);
     final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
     final pinLenght = widget.pinCode.length;
 
@@ -88,7 +89,7 @@ class _OnboardingStepTenState extends State<OnboardingStepTen> {
                   }),
                   ScaledSizedBox(height: isTall ? 20 : 0),
                   Consumer<SubstrateSdk>(builder: (context, sub, _) {
-                    return sub.nodeConnected
+                    return Durt.i.isConnected
                         ? pinForm(context, walletOptions, pinLenght, 1, 2)
                         : Row(mainAxisAlignment: MainAxisAlignment.center, children: [
                             Text(
@@ -103,7 +104,7 @@ class _OnboardingStepTenState extends State<OnboardingStepTen> {
                           ]);
                   }),
                   Consumer<WalletOptionsProvider>(builder: (context, walletOptions, _) {
-                    return sub.nodeConnected
+                    return Durt.i.isConnected
                         ? InkWell(
                             key: keyCachePassword,
                             onTap: () {
@@ -136,10 +137,8 @@ class _OnboardingStepTenState extends State<OnboardingStepTen> {
 
   Widget pinForm(BuildContext context, WalletOptionsProvider walletOptions, int pinLenght, int walletNbr, int derivation) {
     final myWalletProvider = Provider.of<MyWalletsProvider>(context);
-    final generateWalletProvider = Provider.of<GenerateWalletsProvider>(context);
-    final sub = Provider.of<SubstrateSdk>(context, listen: false);
 
-    final currentChest = myWalletProvider.getCurrentChest();
+    final currentChest = myWalletProvider.getCurrentSafe;
 
     return Form(
       key: formKey,
@@ -204,7 +203,10 @@ class _OnboardingStepTenState extends State<OnboardingStepTen> {
                 myWalletProvider.isPinLoading = false;
                 myWalletProvider.isPinValid = true;
 
-                // await generateWalletProvider.storeHDWChest(context);
+                //TODO: Use int pincode directly instead of cast
+                final pinCodeint = int.parse(widget.pinCode);
+                await Durt.i.walletService.createSafe(mnemonic: generateWalletProvider.generatedMnemonic!, pinCode: pinCodeint);
+
                 ScanDerivationsResult scanStatus = ScanDerivationsResult.none;
                 if (widget.scanDerivation) {
                   scanStatus = await generateWalletProvider.scanDerivations(context, widget.pinCode);
@@ -212,19 +214,18 @@ class _OnboardingStepTenState extends State<OnboardingStepTen> {
                 switch (scanStatus) {
                   case ScanDerivationsResult.none:
                   case ScanDerivationsResult.walletNotFound:
-                    final address = await sub.importAccount(
-                      mnemonic: generateWalletProvider.generatedMnemonic!,
-                      password: widget.pinCode,
-                    );
+                    final walletData = await Durt.i.walletService.importRootWallet(pinCode: widget.pinCode);
+                    final address = Durt.i.walletService.getAddress(walletData.address);
+
                     WalletData myWallet = WalletData(
-                        chest: configBox.get('currentChest'),
-                        address: address,
-                        number: 0,
-                        derivation: -1,
-                        name: 'currentWallet'.tr(),
-                        imageDefaultPath: '0.png',
-                        isOwned: true);
-                    await walletBox.put(myWallet.address, myWallet);
+                      safeBoxNumber: configBox.get('currentChest'),
+                      address: address,
+                      number: 0,
+                      derivation: -1,
+                      name: 'currentWallet'.tr(),
+                      isOwned: true,
+                    );
+                    await Durt.i.walletService.walletDataBox.put(myWallet.address, myWallet);
                     break;
                   case ScanDerivationsResult.timeout:
                   case ScanDerivationsResult.error:
@@ -247,7 +248,10 @@ class _OnboardingStepTenState extends State<OnboardingStepTen> {
                 if (defaultWallet == null && myWalletProvider.listWallets.isNotEmpty) {
                   defaultWallet = myWalletProvider.listWallets.first;
                 }
-                if (defaultWallet != null) await sub.setCurrentWallet(defaultWallet);
+                if (defaultWallet != null) {
+                  final address = Durt.i.walletService.getAddress(defaultWallet.address);
+                  await Durt.i.walletService.setDefaultWallet(address);
+                }
 
                 await Navigator.push(
                   context,
diff --git a/lib/screens/onBoarding/5.dart b/lib/screens/onBoarding/5.dart
index b83780fcda05a74f785f5c950cd362df9556e6a8..8dfd761e07fceee3f0bc6ddcaf63839b236a04df 100644
--- a/lib/screens/onBoarding/5.dart
+++ b/lib/screens/onBoarding/5.dart
@@ -86,24 +86,24 @@ class _ChooseChestState extends State<OnboardingStepFive> {
             crossAxisAlignment: CrossAxisAlignment.center,
             children: <Widget>[
               Row(children: <Widget>[
-                arrayCell(mnemonicList![0]),
-                arrayCell(mnemonicList![1]),
-                arrayCell(mnemonicList![2]),
-                arrayCell(mnemonicList![3]),
+                arrayCell(1, mnemonicList![0]),
+                arrayCell(2, mnemonicList![1]),
+                arrayCell(3, mnemonicList![2]),
+                arrayCell(4, mnemonicList![3]),
               ]),
               ScaledSizedBox(height: 15),
               Row(children: <Widget>[
-                arrayCell(mnemonicList![4]),
-                arrayCell(mnemonicList![5]),
-                arrayCell(mnemonicList![6]),
-                arrayCell(mnemonicList![7]),
+                arrayCell(5, mnemonicList![4]),
+                arrayCell(6, mnemonicList![5]),
+                arrayCell(7, mnemonicList![6]),
+                arrayCell(8, mnemonicList![7]),
               ]),
               ScaledSizedBox(height: 15),
               Row(children: <Widget>[
-                arrayCell(mnemonicList![8]),
-                arrayCell(mnemonicList![9]),
-                arrayCell(mnemonicList![10]),
-                arrayCell(mnemonicList![11]),
+                arrayCell(9, mnemonicList![8]),
+                arrayCell(10, mnemonicList![9]),
+                arrayCell(11, mnemonicList![10]),
+                arrayCell(12, mnemonicList![11]),
               ]),
             ],
           ),
@@ -122,17 +122,17 @@ class _ChooseChestState extends State<OnboardingStepFive> {
     );
   }
 
-  Widget arrayCell(String dataWord) {
+  Widget arrayCell(int index, String dataWord) {
     return ScaledSizedBox(
       width: 82,
       child: Column(children: <Widget>[
         Text(
-          dataWord.split(':')[0],
+          index.toString(),
           style: scaledTextStyle(fontSize: 10, color: const Color(0xff6b6b52)),
         ),
         Text(
-          dataWord.split(':')[1],
-          key: keyMnemonicWord(dataWord.split(':')[0]),
+          dataWord,
+          key: keyMnemonicWord(index.toString()),
           style: scaledTextStyle(fontSize: 15, color: Colors.black),
         ),
       ]),
diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart
index 7170563015f42f3fdfb277372e0045eedea7e1f3..5ff588f8b8bd29c508d3676da59c46b3b7869d55 100644
--- a/lib/screens/settings.dart
+++ b/lib/screens/settings.dart
@@ -1,5 +1,6 @@
 // ignore_for_file: use_build_context_synchronously
 
+import 'package:durt2/durt2.dart' show Durt;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/models/scale_functions.dart';
@@ -41,7 +42,9 @@ class _SettingsScreenState extends State<SettingsScreen> {
     final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
 
     _endpointController = TextEditingController(
-      text: configBox.containsKey('customEndpoint') ? configBox.get('customEndpoint') : sub.getConnectedEndpoint() ?? 'wss://',
+      text: configBox.containsKey('customEndpoint')
+          ? configBox.get('customEndpoint')
+          : sub.getConnectedEndpoint() ?? 'wss://',
     );
 
     _indexerEndpointController = TextEditingController(
@@ -60,7 +63,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
     final duniterIndexer = Provider.of<DuniterIndexer>(context);
 
     // Mise à jour du champ node quand le nœud est connecté
-    if (sub.nodeConnected && !configBox.containsKey('customEndpoint')) {
+    if (Durt.i.isConnected && !configBox.containsKey('customEndpoint')) {
       final endpoint = sub.getConnectedEndpoint();
       if (endpoint != null && endpoint != _endpointController.text) {
         _endpointController.text = endpoint;
@@ -68,7 +71,8 @@ class _SettingsScreenState extends State<SettingsScreen> {
     }
 
     // Mise à jour du champ indexer quand il devient disponible
-    if (duniterIndexer.listIndexerEndpoints.isNotEmpty && !configBox.containsKey('customIndexer')) {
+    if (duniterIndexer.listIndexerEndpoints.isNotEmpty &&
+        !configBox.containsKey('customIndexer')) {
       final indexerEndpoint = duniterIndexer.listIndexerEndpoints[0];
       if (indexerEndpoint != _indexerEndpointController.text) {
         _indexerEndpointController.text = indexerEndpoint;
@@ -129,7 +133,8 @@ class _SettingsScreenState extends State<SettingsScreen> {
                   child: Column(
                     children: [
                       Padding(
-                        padding: EdgeInsets.all(scaleSize(isSmallScreen ? 10 : 14)),
+                        padding:
+                            EdgeInsets.all(scaleSize(isSmallScreen ? 10 : 14)),
                         child: chooseCurrencyUnit(context),
                       ),
                     ],
@@ -176,7 +181,8 @@ class _SettingsScreenState extends State<SettingsScreen> {
                       }
                     },
                     child: Padding(
-                      padding: EdgeInsets.all(scaleSize(isSmallScreen ? 10 : 14)),
+                      padding:
+                          EdgeInsets.all(scaleSize(isSmallScreen ? 10 : 14)),
                       child: Row(
                         children: [
                           Icon(
@@ -226,7 +232,8 @@ class _SettingsScreenState extends State<SettingsScreen> {
                   child: Column(
                     children: [
                       Padding(
-                        padding: EdgeInsets.all(scaleSize(isSmallScreen ? 10 : 14)),
+                        padding:
+                            EdgeInsets.all(scaleSize(isSmallScreen ? 10 : 14)),
                         child: duniterEndpointSelection(context),
                       ),
                     ],
@@ -250,7 +257,8 @@ class _SettingsScreenState extends State<SettingsScreen> {
                   child: Column(
                     children: [
                       Padding(
-                        padding: EdgeInsets.all(scaleSize(isSmallScreen ? 10 : 14)),
+                        padding:
+                            EdgeInsets.all(scaleSize(isSmallScreen ? 10 : 14)),
                         child: indexerEndpointSelection(context),
                       ),
                     ],
@@ -274,7 +282,8 @@ class _SettingsScreenState extends State<SettingsScreen> {
                   decoration: BoxDecoration(
                     color: Colors.white,
                     borderRadius: BorderRadius.circular(12),
-                    border: Border.all(color: const Color(0xffD80000).withValues(alpha: 0.1)),
+                    border: Border.all(
+                        color: const Color(0xffD80000).withValues(alpha: 0.1)),
                     boxShadow: [
                       BoxShadow(
                         color: Colors.black.withValues(alpha: 0.05),
@@ -290,7 +299,8 @@ class _SettingsScreenState extends State<SettingsScreen> {
                       await _myWallets.deleteAllWallet(context);
                     },
                     child: Padding(
-                      padding: EdgeInsets.all(scaleSize(isSmallScreen ? 10 : 14)),
+                      padding:
+                          EdgeInsets.all(scaleSize(isSmallScreen ? 10 : 14)),
                       child: Row(
                         children: [
                           Icon(
@@ -363,7 +373,11 @@ class _SettingsScreenState extends State<SettingsScreen> {
     );
   }
 
-  Future<void> _showNodeSelectionDialog(BuildContext context, List<NetworkParams> nodes, String selectedEndpoint, TextEditingController controller) async {
+  Future<void> _showNodeSelectionDialog(
+      BuildContext context,
+      List<NetworkParams> nodes,
+      String selectedEndpoint,
+      TextEditingController controller) async {
     final sub = Provider.of<SubstrateSdk>(context, listen: false);
     final set = Provider.of<SettingsProvider>(context, listen: false);
 
@@ -397,7 +411,9 @@ class _SettingsScreenState extends State<SettingsScreen> {
                       mainAxisSize: MainAxisSize.min,
                       children: [
                         Icon(
-                          isSelected ? Icons.radio_button_checked : Icons.radio_button_unchecked,
+                          isSelected
+                              ? Icons.radio_button_checked
+                              : Icons.radio_button_unchecked,
                           color: isSelected ? orangeC : Colors.grey[400],
                           size: scaleSize(20),
                         ),
@@ -440,7 +456,8 @@ class _SettingsScreenState extends State<SettingsScreen> {
     String? selectedDuniterEndpoint;
 
     var duniterBootstrapNodes = sub.getDuniterBootstrap();
-    selectedDuniterEndpoint = sub.getConnectedEndpoint() ?? duniterBootstrapNodes.first.endpoint;
+    selectedDuniterEndpoint =
+        sub.getConnectedEndpoint() ?? duniterBootstrapNodes.first.endpoint;
 
     final customEndpoint = NetworkParams();
     customEndpoint.endpoint = 'Personnalisé';
@@ -491,8 +508,12 @@ class _SettingsScreenState extends State<SettingsScreen> {
                     ),
                     ScaledSizedBox(width: 12),
                     Icon(
-                      sub.nodeConnected && !sub.isLoadingEndpoint ? Icons.check_circle : Icons.error,
-                      color: sub.nodeConnected && !sub.isLoadingEndpoint ? Colors.green : Colors.red,
+                      Durt.i.isConnected && !sub.isLoadingEndpoint
+                          ? Icons.check_circle
+                          : Icons.error,
+                      color: Durt.i.isConnected && !sub.isLoadingEndpoint
+                          ? Colors.green
+                          : Colors.red,
                       size: scaleSize(16),
                     ),
                     const Spacer(),
@@ -536,8 +557,12 @@ class _SettingsScreenState extends State<SettingsScreen> {
                               child: Row(
                                 children: [
                                   Icon(
-                                    configBox.get('autoEndpoint') == true ? Icons.radio_button_checked : Icons.radio_button_unchecked,
-                                    color: configBox.get('autoEndpoint') == true ? orangeC : Colors.grey[400],
+                                    configBox.get('autoEndpoint') == true
+                                        ? Icons.radio_button_checked
+                                        : Icons.radio_button_unchecked,
+                                    color: configBox.get('autoEndpoint') == true
+                                        ? orangeC
+                                        : Colors.grey[400],
                                     size: scaleSize(20),
                                   ),
                                   ScaledSizedBox(width: 12),
@@ -557,8 +582,12 @@ class _SettingsScreenState extends State<SettingsScreen> {
                               child: Row(
                                 children: [
                                   Icon(
-                                    configBox.get('autoEndpoint') != true ? Icons.radio_button_checked : Icons.radio_button_unchecked,
-                                    color: configBox.get('autoEndpoint') != true ? orangeC : Colors.grey[400],
+                                    configBox.get('autoEndpoint') != true
+                                        ? Icons.radio_button_checked
+                                        : Icons.radio_button_unchecked,
+                                    color: configBox.get('autoEndpoint') != true
+                                        ? orangeC
+                                        : Colors.grey[400],
                                     size: scaleSize(20),
                                   ),
                                   ScaledSizedBox(width: 12),
@@ -599,7 +628,10 @@ class _SettingsScreenState extends State<SettingsScreen> {
                               await _showNodeSelectionDialog(
                                 context,
                                 duniterBootstrapNodes
-                                    .where((node) => node.endpoint != 'Auto' && node.endpoint != 'Personnalisé' && node.endpoint != 'ws://10.0.2.2:9944')
+                                    .where((node) =>
+                                        node.endpoint != 'Auto' &&
+                                        node.endpoint != 'Personnalisé' &&
+                                        node.endpoint != 'ws://10.0.2.2:9944')
                                     .toList(),
                                 selectedDuniterEndpoint ?? '',
                                 endpointController,
@@ -612,12 +644,15 @@ class _SettingsScreenState extends State<SettingsScreen> {
                             } else {
                               configBox.put('autoEndpoint', false);
                               if (!configBox.containsKey('customEndpoint')) {
-                                configBox.put('customEndpoint', _endpointController.text);
+                                configBox.put(
+                                    'customEndpoint', _endpointController.text);
                               }
                               set.reload();
                               _duniterFocusNode.requestFocus();
-                              _endpointController.selection = TextSelection.fromPosition(
-                                TextPosition(offset: _endpointController.text.length),
+                              _endpointController.selection =
+                                  TextSelection.fromPosition(
+                                TextPosition(
+                                    offset: _endpointController.text.length),
                               );
                             }
                           },
@@ -629,7 +664,8 @@ class _SettingsScreenState extends State<SettingsScreen> {
                 if (sub.isLoadingEndpoint)
                   Padding(
                     padding: EdgeInsets.only(top: scaleSize(16)),
-                    child: Center(child: Loading(size: scaleSize(24), stroke: 2)),
+                    child:
+                        Center(child: Loading(size: scaleSize(24), stroke: 2)),
                   ),
               ],
             );
@@ -713,7 +749,11 @@ class _SettingsScreenState extends State<SettingsScreen> {
     );
   }
 
-  Future<void> _showIndexerSelectionDialog(BuildContext context, List<String> indexers, String selectedEndpoint, TextEditingController controller) async {
+  Future<void> _showIndexerSelectionDialog(
+      BuildContext context,
+      List<String> indexers,
+      String selectedEndpoint,
+      TextEditingController controller) async {
     final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
     final set = Provider.of<SettingsProvider>(context, listen: false);
 
@@ -747,7 +787,9 @@ class _SettingsScreenState extends State<SettingsScreen> {
                       mainAxisSize: MainAxisSize.min,
                       children: [
                         Icon(
-                          isSelected ? Icons.radio_button_checked : Icons.radio_button_unchecked,
+                          isSelected
+                              ? Icons.radio_button_checked
+                              : Icons.radio_button_unchecked,
                           color: isSelected ? orangeC : Colors.grey[400],
                           size: scaleSize(20),
                         ),
@@ -791,7 +833,9 @@ class _SettingsScreenState extends State<SettingsScreen> {
     if (configBox.containsKey('customIndexer')) {
       selectedIndexerEndpoint = configBox.get('customIndexer');
     } else {
-      selectedIndexerEndpoint = duniterIndexer.listIndexerEndpoints.isNotEmpty ? duniterIndexer.listIndexerEndpoints[0] : 'https://';
+      selectedIndexerEndpoint = duniterIndexer.listIndexerEndpoints.isNotEmpty
+          ? duniterIndexer.listIndexerEndpoints[0]
+          : 'https://';
     }
 
     final indexerEndpointController = _indexerEndpointController;
@@ -868,8 +912,13 @@ class _SettingsScreenState extends State<SettingsScreen> {
                               child: Row(
                                 children: [
                                   Icon(
-                                    !configBox.containsKey('customIndexer') ? Icons.radio_button_checked : Icons.radio_button_unchecked,
-                                    color: !configBox.containsKey('customIndexer') ? orangeC : Colors.grey[400],
+                                    !configBox.containsKey('customIndexer')
+                                        ? Icons.radio_button_checked
+                                        : Icons.radio_button_unchecked,
+                                    color:
+                                        !configBox.containsKey('customIndexer')
+                                            ? orangeC
+                                            : Colors.grey[400],
                                     size: scaleSize(20),
                                   ),
                                   ScaledSizedBox(width: 12),
@@ -888,8 +937,13 @@ class _SettingsScreenState extends State<SettingsScreen> {
                               child: Row(
                                 children: [
                                   Icon(
-                                    configBox.containsKey('customIndexer') ? Icons.radio_button_checked : Icons.radio_button_unchecked,
-                                    color: configBox.containsKey('customIndexer') ? orangeC : Colors.grey[400],
+                                    configBox.containsKey('customIndexer')
+                                        ? Icons.radio_button_checked
+                                        : Icons.radio_button_unchecked,
+                                    color:
+                                        configBox.containsKey('customIndexer')
+                                            ? orangeC
+                                            : Colors.grey[400],
                                     size: scaleSize(20),
                                   ),
                                   ScaledSizedBox(width: 12),
@@ -934,19 +988,27 @@ class _SettingsScreenState extends State<SettingsScreen> {
                               );
                             } else if (value == 'Auto') {
                               configBox.delete('customIndexer');
-                              final defaultEndpoint = duniterIndexer.listIndexerEndpoints.isNotEmpty ? duniterIndexer.listIndexerEndpoints[0] : 'https://';
+                              final defaultEndpoint =
+                                  duniterIndexer.listIndexerEndpoints.isNotEmpty
+                                      ? duniterIndexer.listIndexerEndpoints[0]
+                                      : 'https://';
                               selectedIndexerEndpoint = defaultEndpoint;
                               indexerEndpointController.text = defaultEndpoint;
-                              await indexer.checkIndexerEndpoint(defaultEndpoint);
+                              await indexer
+                                  .checkIndexerEndpoint(defaultEndpoint);
                               set.reload();
                             } else {
                               if (!configBox.containsKey('customIndexer')) {
-                                configBox.put('customIndexer', _indexerEndpointController.text);
+                                configBox.put('customIndexer',
+                                    _indexerEndpointController.text);
                               }
                               set.reload();
                               _indexerFocusNode.requestFocus();
-                              _indexerEndpointController.selection = TextSelection.fromPosition(
-                                TextPosition(offset: _indexerEndpointController.text.length),
+                              _indexerEndpointController.selection =
+                                  TextSelection.fromPosition(
+                                TextPosition(
+                                    offset:
+                                        _indexerEndpointController.text.length),
                               );
                             }
                           },
@@ -958,7 +1020,8 @@ class _SettingsScreenState extends State<SettingsScreen> {
                 if (indexer.isLoadingIndexer)
                   Padding(
                     padding: EdgeInsets.only(top: scaleSize(16)),
-                    child: Center(child: Loading(size: scaleSize(24), stroke: 2)),
+                    child:
+                        Center(child: Loading(size: scaleSize(24), stroke: 2)),
                   ),
               ],
             );
diff --git a/lib/screens/wallet_view.dart b/lib/screens/wallet_view.dart
index b5cf4f155ee38d6f8a3e49c430f1fae9d652d9a2..d0ecaf8dd3989fcefcda16452e778b5241a6e462 100644
--- a/lib/screens/wallet_view.dart
+++ b/lib/screens/wallet_view.dart
@@ -1,5 +1,6 @@
 // ignore_for_file: use_build_context_synchronously
 
+import 'package:durt2/durt2.dart' show Durt;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/services.dart';
 import 'package:gecko/globals.dart';
@@ -23,7 +24,8 @@ const double buttonSize = 75;
 const double buttonFontSize = 13;
 
 class WalletViewScreen extends StatefulWidget {
-  const WalletViewScreen({required this.address, required this.username, super.key});
+  const WalletViewScreen(
+      {required this.address, required this.username, super.key});
   final String address;
   final String? username;
 
@@ -44,20 +46,20 @@ class _WalletViewScreenState extends State<WalletViewScreen> {
 
   @override
   Widget build(BuildContext context) {
-    final walletProfile = Provider.of<WalletsProfilesProvider>(context, listen: false);
-    final sub = Provider.of<SubstrateSdk>(context, listen: false);
-    final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
-    final defaultWallet = myWalletProvider.getDefaultWallet();
+    final walletProfile =
+        Provider.of<WalletsProfilesProvider>(context, listen: false);
 
     walletProfile.address = address;
-    sub.setCurrentWallet(defaultWallet);
+    Durt.i.walletService.setDefaultWallet(address);
 
     return Scaffold(
       backgroundColor: backgroundColor,
       resizeToAvoidBottomInset: true,
       appBar: WalletAppBar(
         address: address,
-        titleBuilder: (username) => username == null ? 'seeAWallet'.tr() : 'memberAccountOf'.tr(args: [username]),
+        titleBuilder: (username) => username == null
+            ? 'seeAWallet'.tr()
+            : 'memberAccountOf'.tr(args: [username]),
       ),
       bottomNavigationBar: const GeckoBottomAppBar(),
       body: SafeArea(
@@ -87,7 +89,8 @@ class _WalletViewScreenState extends State<WalletViewScreen> {
                               onTap: () => Navigator.push(
                                 context,
                                 PageNoTransit(
-                                  builder: (context) => ActivityScreen(address: address),
+                                  builder: (context) =>
+                                      ActivityScreen(address: address),
                                 ),
                               ),
                             ),
@@ -95,11 +98,15 @@ class _WalletViewScreenState extends State<WalletViewScreen> {
                               builder: (context, sub, _) {
                                 return FutureBuilder(
                                   future: sub.certState(address),
-                                  builder: (context, AsyncSnapshot<CertState> snapshot) {
-                                    if (!snapshot.hasData) return const SizedBox.shrink();
+                                  builder: (context,
+                                      AsyncSnapshot<CertState> snapshot) {
+                                    if (!snapshot.hasData) {
+                                      return const SizedBox.shrink();
+                                    }
                                     final certState = snapshot.data!;
                                     return Visibility(
-                                      visible: certState.status != CertStatus.none,
+                                      visible:
+                                          certState.status != CertStatus.none,
                                       child: CertStateWidget(
                                         certState: certState,
                                         address: address,
@@ -213,13 +220,15 @@ class _WalletViewScreenState extends State<WalletViewScreen> {
               ),
             ),
             child: Opacity(
-              opacity: sub.nodeConnected ? 1 : 0.5,
+              opacity: Durt.i.isConnected ? 1 : 0.5,
               child: Material(
                 color: Colors.transparent,
                 child: InkWell(
                   key: keyPay,
                   borderRadius: BorderRadius.circular((buttonSize + 5) / 2),
-                  onTap: sub.nodeConnected ? () => _handleTransfer(context) : null,
+                  onTap: Durt.i.isConnected
+                      ? () => _handleTransfer(context)
+                      : null,
                   child: Padding(
                     padding: EdgeInsets.all(scaleSize(15)),
                     child: Image.asset(
@@ -237,7 +246,7 @@ class _WalletViewScreenState extends State<WalletViewScreen> {
             textAlign: TextAlign.center,
             style: Theme.of(context).textTheme.bodySmall?.copyWith(
                   fontWeight: FontWeight.w500,
-                  color: sub.nodeConnected ? Colors.black87 : Colors.grey[500],
+                  color: Durt.i.isConnected ? Colors.black87 : Colors.grey[500],
                 ),
           ),
         ],
@@ -246,7 +255,8 @@ class _WalletViewScreenState extends State<WalletViewScreen> {
   }
 
   Future<void> _handleTransfer(BuildContext context) async {
-    final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
+    final myWalletProvider =
+        Provider.of<MyWalletsProvider>(context, listen: false);
     final defaultWallet = myWalletProvider.getDefaultWallet();
 
     if (myWalletProvider.pinCode == '') {
diff --git a/lib/services/durt.service.dart b/lib/services/durt.service.dart
deleted file mode 100644
index e39aa6275a9468fb1662d760379095950ecf4df8..0000000000000000000000000000000000000000
--- a/lib/services/durt.service.dart
+++ /dev/null
@@ -1,7 +0,0 @@
-import 'package:durt2/durt2.dart' show Durt, Networks;
-
-class DurtService {
-  Future<void> init() async {
-    await Durt().init(network: Networks.gdev);
-  }
-}
diff --git a/lib/services/wallets.service.dart b/lib/services/wallets.service.dart
deleted file mode 100644
index 061cdce1f626813165df9e9b1c8aced216a2dd5c..0000000000000000000000000000000000000000
--- a/lib/services/wallets.service.dart
+++ /dev/null
@@ -1,53 +0,0 @@
-import 'package:durt2/durt2.dart';
-import 'package:gecko/globals.dart';
-
-class WalletsService {
-  Future<void> createSafe({
-    required String mnemonic,
-    required int pinCode,
-  }) async {
-    try {
-      final keypair = await KeyPair.sr25519.fromMnemonic(mnemonic);
-
-      await WalletService.storeMnemonic(
-        address: keypair.address,
-        mnemonic: mnemonic,
-        pinCode: pinCode,
-      );
-    } catch (e) {
-      log.e('Invalid mnemonic: $e');
-    }
-  }
-
-  Future<WalletData?> generateNextDerivation({
-    required String pinCode,
-    int? safeBoxNumber,
-    String? walletName,
-    bool setAsDefault = false,
-  }) async {
-    return await WalletService.generateNextDerivation(
-      pinCode: pinCode,
-      safeBoxNumber: safeBoxNumber,
-      walletName: walletName,
-      setAsDefault: setAsDefault,
-    );
-  }
-
-  Mnemonic generateMnemonic(Language language) => WalletService.generateMnemonic(language);
-
-  Future<KeyPair?> getKeyPairFromMnemonic(String mnemonic, {int? derivation}) async =>
-      await WalletService.getKeyPairFromMnemonic(mnemonic, derivation: derivation);
-
-  Future<List<WalletData>> importDerivations({
-    required String pinCode,
-    required List<int> derivations,
-    int? safeBoxNumber,
-  }) async =>
-      await WalletService.importDerivations(pinCode: pinCode, derivations: derivations, safeBoxNumber: safeBoxNumber);
-
-  Future<WalletData?> importRootWallet({
-    required String pinCode,
-    int? safeBoxNumber,
-  }) async =>
-      await WalletService.importRootWallet(pinCode: pinCode, safeBoxNumber: safeBoxNumber);
-}
diff --git a/lib/widgets/buttons/add_new_derivation_button.dart b/lib/widgets/buttons/add_new_derivation_button.dart
index 0e621f350697e7a117dd6f03c13e96276e6d42db..bec9623e11f874a6439c4f3bcc57197e9b2f2999 100644
--- a/lib/widgets/buttons/add_new_derivation_button.dart
+++ b/lib/widgets/buttons/add_new_derivation_button.dart
@@ -17,7 +17,7 @@ class AddNewDerivationButton extends StatelessWidget {
   Widget build(BuildContext context) {
     final myWalletProvider = Provider.of<MyWalletsProvider>(context);
 
-    String newDerivationName = '${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}';
+    String newDerivationName = '${'wallet'.tr()} ${myWalletProvider.listWallets.last.number + 2}';
     return Padding(
       padding: EdgeInsets.all(scaleSize(11)),
       child: Container(
diff --git a/lib/widgets/buttons/home_buttons.dart b/lib/widgets/buttons/home_buttons.dart
index 16826844cf8a8523ebd97e02e1bf343cd0843aa6..85f54eeddd32fd0d0927ca24fc69d9c4a96ed503 100644
--- a/lib/widgets/buttons/home_buttons.dart
+++ b/lib/widgets/buttons/home_buttons.dart
@@ -1,10 +1,10 @@
 // ignore_for_file: use_build_context_synchronously
 
+import 'package:durt2/durt2.dart' show WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/home.dart';
 import 'package:gecko/providers/my_wallets.dart';
diff --git a/lib/widgets/certify/certify_button.dart b/lib/widgets/certify/certify_button.dart
index 17aaffd72046031cd445f17f3b26a91c29f7960c..195348e95a6c05756a0560ba9ddc75a4d8f812e7 100644
--- a/lib/widgets/certify/certify_button.dart
+++ b/lib/widgets/certify/certify_button.dart
@@ -1,5 +1,6 @@
 // ignore_for_file: use_build_context_synchronously
 
+import 'package:durt2/durt2.dart' show Durt;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/globals.dart';
@@ -24,7 +25,8 @@ class CertifyButton extends StatelessWidget {
   Widget build(BuildContext context) {
     final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
     final sub = Provider.of<SubstrateSdk>(context, listen: false);
-    final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
+    final myWalletProvider =
+        Provider.of<MyWalletsProvider>(context, listen: false);
 
     return Column(
       children: <Widget>[
@@ -44,20 +46,25 @@ class CertifyButton extends StatelessWidget {
 
                   final result = await showConfirmationDialog(
                     context: context,
-                    title: walletName != null ? 'certification'.tr() : 'identityCreation'.tr(),
+                    title: walletName != null
+                        ? 'certification'.tr()
+                        : 'identityCreation'.tr(),
                     message: message,
-                    type: walletName != null ? ConfirmationDialogType.question : ConfirmationDialogType.info,
+                    type: walletName != null
+                        ? ConfirmationDialogType.question
+                        : ConfirmationDialogType.info,
                   );
 
                   if (!result) return;
-                  await sub.setCurrentWallet(myWalletProvider.idtyWallet!);
+                  await Durt.i.walletService.setDefaultWallet(address);
 
                   if (myWalletProvider.pinCode == '') {
                     await Navigator.push(
                       context,
                       MaterialPageRoute(
                         builder: (homeContext) {
-                          return UnlockingWallet(wallet: myWalletProvider.idtyWallet!);
+                          return UnlockingWallet(
+                              wallet: myWalletProvider.idtyWallet!);
                         },
                       ),
                     );
@@ -65,7 +72,9 @@ class CertifyButton extends StatelessWidget {
                   if (myWalletProvider.pinCode == '') {
                     return;
                   }
-                  WalletsProfilesProvider walletViewProvider = Provider.of<WalletsProfilesProvider>(context, listen: false);
+                  WalletsProfilesProvider walletViewProvider =
+                      Provider.of<WalletsProfilesProvider>(context,
+                          listen: false);
                   final acc = sub.getCurrentKeyPair();
                   final transactionId = await sub.certify(
                     acc.address!,
@@ -96,7 +105,8 @@ class CertifyButton extends StatelessWidget {
           child: Text(
             "certify".tr(),
             textAlign: TextAlign.center,
-            style: scaledTextStyle(fontSize: buttonFontSize, fontWeight: FontWeight.w500),
+            style: scaledTextStyle(
+                fontSize: buttonFontSize, fontWeight: FontWeight.w500),
           ),
         ),
       ],
diff --git a/lib/widgets/commons/offline_info.dart b/lib/widgets/commons/offline_info.dart
index 0ace80e91c904c75fdcccaff39696a5cdc1a67e8..6aef7452cfbff72dea51f49d78612d77dbaeee4a 100644
--- a/lib/widgets/commons/offline_info.dart
+++ b/lib/widgets/commons/offline_info.dart
@@ -1,3 +1,4 @@
+import 'package:durt2/durt2.dart' show Durt;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/globals.dart';
@@ -14,7 +15,7 @@ class OfflineInfo extends StatelessWidget {
     final screenWidth = MediaQuery.of(homeContext).size.width;
     return Consumer<SubstrateSdk>(builder: (context, sub, _) {
       return Visibility(
-        visible: !sub.nodeConnected,
+        visible: !Durt.i.isConnected,
         child: Positioned(
           top: 0,
           child: Container(
diff --git a/lib/widgets/contacts_list.dart b/lib/widgets/contacts_list.dart
index caa43a35c7eb2fa98c00949e6f979d2c8882578a..d3478d29fa8789b403c5775e034707ebb8823733 100644
--- a/lib/widgets/contacts_list.dart
+++ b/lib/widgets/contacts_list.dart
@@ -1,9 +1,9 @@
+import 'package:durt2/durt2.dart' show WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/g1_wallets_list.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/duniter_indexer.dart';
 import 'package:gecko/providers/wallets_profiles.dart';
diff --git a/lib/widgets/drag_tule_action.dart b/lib/widgets/drag_tule_action.dart
index 5fc1e07c87b48d90b8e92f002839b97def69c124..184abd4607c6287f09945ac8e1ca5bf602150d89 100644
--- a/lib/widgets/drag_tule_action.dart
+++ b/lib/widgets/drag_tule_action.dart
@@ -1,9 +1,9 @@
 // ignore_for_file: use_build_context_synchronously
 
+import 'package:durt2/durt2.dart' show Durt, WalletData;
 import 'package:flutter/material.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/widgets/payment_popup.dart';
@@ -22,7 +22,8 @@ class DragTuleAction extends StatelessWidget {
     return LongPressDraggable<String>(
       delay: const Duration(milliseconds: 200),
       data: wallet.address,
-      dragAnchorStrategy: (Draggable<Object> _, BuildContext __, Offset ___) => const Offset(55, 55),
+      dragAnchorStrategy: (Draggable<Object> _, BuildContext __, Offset ___) =>
+          const Offset(55, 55),
       onDragStarted: () => myWalletProvider.dragAddress = wallet,
       onDragEnd: (_) {
         myWalletProvider.lastFlyBy = null;
@@ -43,10 +44,12 @@ class DragTuleAction extends StatelessWidget {
       ),
       child: DragTarget<String>(
           onAcceptWithDetails: (senderAddress) async {
-            final walletData = myWalletProvider.getWalletDataByAddress(senderAddress.data);
-            await sub.setCurrentWallet(walletData!);
+            final walletData =
+                myWalletProvider.getWalletDataByAddress(senderAddress.data);
+            await Durt.i.walletService.setDefaultWallet(walletData!.address);
             sub.reload();
-            paymentPopup(context, wallet.address, g1WalletsBox.get(wallet.address)!.username ?? wallet.name!);
+            paymentPopup(context, wallet.address,
+                g1WalletsBox.get(wallet.address)!.username ?? wallet.name!);
           },
           onMove: (details) {
             if (wallet.address != myWalletProvider.lastFlyBy?.address) {
@@ -54,7 +57,8 @@ class DragTuleAction extends StatelessWidget {
               myWalletProvider.reload();
             }
           },
-          onWillAcceptWithDetails: (senderAddress) => senderAddress.data != wallet.address,
+          onWillAcceptWithDetails: (senderAddress) =>
+              senderAddress.data != wallet.address,
           builder: (
             BuildContext context,
             List<dynamic> accepted,
diff --git a/lib/widgets/drag_wallets_info.dart b/lib/widgets/drag_wallets_info.dart
index c02c288e638fbd4b45edfffafca3b36ad6af6546..e567f258e00c0e30b448ce61121f2825f5c58be6 100644
--- a/lib/widgets/drag_wallets_info.dart
+++ b/lib/widgets/drag_wallets_info.dart
@@ -1,15 +1,14 @@
+import 'package:durt2/durt2.dart' show WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_markdown/flutter_markdown.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/duniter_indexer.dart';
 import 'package:provider/provider.dart';
 
 class DragWalletsInfo extends StatelessWidget {
-  const DragWalletsInfo(
-      {super.key, required this.dragAddress, required this.lastFlyBy});
+  const DragWalletsInfo({super.key, required this.dragAddress, required this.lastFlyBy});
 
   final WalletData dragAddress;
   final WalletData lastFlyBy;
@@ -22,11 +21,9 @@ class DragWalletsInfo extends StatelessWidget {
 
     final screenWidth = MediaQuery.of(homeContext).size.width;
 
-    final fromName = duniterIndexer.walletNameIndexer[dragAddress.address] ??
-        dragAddress.name;
+    final fromName = duniterIndexer.walletNameIndexer[dragAddress.address] ?? dragAddress.name;
 
-    final toName =
-        duniterIndexer.walletNameIndexer[lastFlyBy.address] ?? lastFlyBy.name;
+    final toName = duniterIndexer.walletNameIndexer[lastFlyBy.address] ?? lastFlyBy.name;
     final mdStyle = MarkdownStyleSheet(
       p: scaledTextStyle(fontSize: 15, color: Colors.black, letterSpacing: 0.3),
       textAlign: WrapAlignment.spaceBetween,
@@ -44,18 +41,13 @@ class DragWalletsInfo extends StatelessWidget {
             '${'executeATransfer'.tr()}:',
             style: scaledTextStyle(fontSize: 15),
           ),
-          MarkdownBody(
-              data: '${'from'.tr(args: [''])} **$fromName**',
-              styleSheet: mdStyle),
+          MarkdownBody(data: '${'from'.tr(args: [''])} **$fromName**', styleSheet: mdStyle),
           if (isSameAddress)
             Text(
               'chooseATargetWallet'.tr(),
               style: scaledTextStyle(fontSize: 15),
             ),
-          if (!isSameAddress)
-            MarkdownBody(
-                data: '${'to'.tr(args: [''])} **$toName**',
-                styleSheet: mdStyle),
+          if (!isSameAddress) MarkdownBody(data: '${'to'.tr(args: [''])} **$toName**', styleSheet: mdStyle),
         ],
       )),
     );
diff --git a/lib/widgets/idty_status.dart b/lib/widgets/idty_status.dart
index a9fda4baa9c94623b3d3676c74a708f96ad3b751..bd221e0a25b5acc566b969e7f18c842d1f478e6e 100644
--- a/lib/widgets/idty_status.dart
+++ b/lib/widgets/idty_status.dart
@@ -1,21 +1,22 @@
+import 'package:durt2/durt2.dart' show Durt, IdtyStatus, WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
-import 'package:gecko/globals.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
 import 'package:gecko/widgets/commons/animated_text.dart';
 import 'package:gecko/widgets/name_by_address.dart';
 import 'package:provider/provider.dart';
 
 class IdentityStatus extends StatelessWidget {
-  const IdentityStatus({super.key, required this.address, this.color = Colors.black});
+  const IdentityStatus(
+      {super.key, required this.address, this.color = Colors.black});
   final String address;
   final Color color;
 
   @override
   Widget build(BuildContext context) {
-    final walletData = walletBox.get(address) ?? WalletData(address: address);
+    final walletData = Durt.i.walletService.walletDataBox.get(address) ??
+        WalletData(address: address);
 
     return Consumer<SubstrateSdk>(builder: (context, sub, _) {
       return FutureBuilder(
@@ -25,21 +26,31 @@ class IdentityStatus extends StatelessWidget {
             if (snapshot.data != null && !snapshot.hasError) {
               final resStatus = snapshot.data!.first;
               walletData.identityStatus = resStatus;
-              walletBox.put(address, walletData);
+              Durt.i.walletService.walletDataBox.put(address, walletData);
             }
 
             final resStatus = walletData.identityStatus;
 
-            final nameByAddress = resStatus == IdtyStatus.member
-                ? NameByAddress(wallet: walletData, size: 18, color: Colors.black, fontWeight: FontWeight.w500, fontStyle: FontStyle.normal)
-                : NameByAddress(wallet: walletData, size: 16, color: Colors.grey[700]!, fontWeight: FontWeight.w500, fontStyle: FontStyle.italic);
+            final nameByAddress = resStatus == IdtyStatus.validated
+                ? NameByAddress(
+                    wallet: walletData,
+                    size: 18,
+                    color: Colors.black,
+                    fontWeight: FontWeight.w500,
+                    fontStyle: FontStyle.normal)
+                : NameByAddress(
+                    wallet: walletData,
+                    size: 16,
+                    color: Colors.grey[700]!,
+                    fontWeight: FontWeight.w500,
+                    fontStyle: FontStyle.italic);
 
             final Map<IdtyStatus, String> statusText = {
               IdtyStatus.none: '',
-              IdtyStatus.unconfirmed: 'identityCreated'.tr(),
-              IdtyStatus.unvalidated: 'identityConfirmed'.tr(),
-              IdtyStatus.member: 'memberValidated'.tr(),
-              IdtyStatus.notMember: 'identityExpired'.tr(),
+              IdtyStatus.created: 'identityCreated'.tr(),
+              IdtyStatus.confirmed: 'identityConfirmed'.tr(),
+              IdtyStatus.validated: 'memberValidated'.tr(),
+              IdtyStatus.expired: 'identityExpired'.tr(),
               IdtyStatus.revoked: 'identityRevoked'.tr(),
               IdtyStatus.unknown: ''
             };
@@ -48,21 +59,27 @@ class IdentityStatus extends StatelessWidget {
               crossAxisAlignment: CrossAxisAlignment.start,
               children: [
                 nameByAddress,
-                showText(statusText[resStatus]!, bold: resStatus == IdtyStatus.member, size: scaleSize(15)),
+                showText(statusText[resStatus]!,
+                    bold: resStatus == IdtyStatus.validated,
+                    size: scaleSize(15)),
               ],
             );
           });
     });
   }
 
-  AnimatedFadeOutIn showText(String text, {double size = 18, bool bold = false}) {
+  AnimatedFadeOutIn showText(String text,
+      {double size = 18, bool bold = false}) {
     return AnimatedFadeOutIn<String>(
       data: text,
       duration: const Duration(milliseconds: 150),
       builder: (value) => Text(
         value,
         textAlign: TextAlign.center,
-        style: TextStyle(fontSize: size, color: bold ? color : Colors.black, fontWeight: bold ? FontWeight.w500 : FontWeight.w400),
+        style: TextStyle(
+            fontSize: size,
+            color: bold ? color : Colors.black,
+            fontWeight: bold ? FontWeight.w500 : FontWeight.w400),
       ),
     );
   }
diff --git a/lib/widgets/name_by_address.dart b/lib/widgets/name_by_address.dart
index 49ee3ba85da9c351da8202b704b77b9d0018736a..ca2724bca0ab147a197c8a60819416b66b907562 100644
--- a/lib/widgets/name_by_address.dart
+++ b/lib/widgets/name_by_address.dart
@@ -1,10 +1,10 @@
+import 'package:durt2/durt2.dart' show WalletData;
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/g1_wallets_list.dart';
 import 'package:gecko/models/queries_indexer.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/providers/duniter_indexer.dart';
 import 'package:gecko/widgets/commons/loading.dart';
 import 'package:gecko/widgets/wallet_name.dart';
diff --git a/lib/widgets/payment_popup.dart b/lib/widgets/payment_popup.dart
index 7e2cc0a38a70ebf723876016adf7394553eb7585..9727898f8e96f4db0328f24dbb77469056ad50ec 100644
--- a/lib/widgets/payment_popup.dart
+++ b/lib/widgets/payment_popup.dart
@@ -1,12 +1,12 @@
 // ignore_for_file: use_build_context_synchronously
 
+import 'package:durt2/durt2.dart' show Durt, WalletData;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/scale_functions.dart';
 import 'package:gecko/models/text_input_formaters.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/substrate_sdk.dart';
@@ -21,8 +21,10 @@ import 'package:url_launcher/url_launcher.dart';
 import 'package:uuid/uuid.dart';
 
 void paymentPopup(BuildContext context, String toAddress, String? username) {
-  final walletViewProvider = Provider.of<WalletsProfilesProvider>(context, listen: false);
-  final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
+  final walletViewProvider =
+      Provider.of<WalletsProfilesProvider>(context, listen: false);
+  final myWalletProvider =
+      Provider.of<MyWalletsProvider>(context, listen: false);
 
   double fees = 0;
   const double shapeSize = 16;
@@ -77,12 +79,16 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
     if (payAmount.isEmpty) return false;
 
     // Récupération des soldes
-    final walletOptions = Provider.of<WalletOptionsProvider>(context, listen: false);
-    final defaultWalletBalance = walletOptions.balanceCache[defaultWallet.address] ?? 0;
+    final walletOptions =
+        Provider.of<WalletOptionsProvider>(context, listen: false);
+    final defaultWalletBalance =
+        walletOptions.balanceCache[defaultWallet.address] ?? 0;
     final toAddressBalance = walletOptions.balanceCache[toAddress] ?? 0;
 
     // Conversion du montant en unités de base
-    final int payAmountValue = balanceRatio == 1 ? (double.parse(payAmount) * balanceRatio * 100).round() : (double.parse(payAmount) * balanceRatio).round();
+    final int payAmountValue = balanceRatio == 1
+        ? (double.parse(payAmount) * balanceRatio * 100).round()
+        : (double.parse(payAmount) * balanceRatio).round();
 
     // TODO: récupérer la valeur réelle de l'existential deposit depuis le storage de Duniter
     const existentialDeposit = 200;
@@ -90,13 +96,20 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
     // Vérifications de validité
     final bool isAmountValid = payAmountValue > 0;
     final bool isNotSendingToSelf = toAddress != defaultWallet.address;
-    final bool hasEnoughBalance = payAmountValue <= defaultWalletBalance - existentialDeposit || defaultWalletBalance == payAmountValue;
-    final bool respectsExistentialDeposit = toAddressBalance > 0 || payAmountValue >= existentialDeposit;
+    final bool hasEnoughBalance =
+        payAmountValue <= defaultWalletBalance - existentialDeposit ||
+            defaultWalletBalance == payAmountValue;
+    final bool respectsExistentialDeposit =
+        toAddressBalance > 0 || payAmountValue >= existentialDeposit;
 
-    return isAmountValid && isNotSendingToSelf && hasEnoughBalance && respectsExistentialDeposit;
+    return isAmountValid &&
+        isNotSendingToSelf &&
+        hasEnoughBalance &&
+        respectsExistentialDeposit;
   }
 
-  myWalletProvider.readAllWallets().then((value) => myWalletProvider.listWallets.sort((a, b) => (a.derivation ?? -1).compareTo(b.derivation ?? -1)));
+  myWalletProvider.readAllWallets().then((value) => myWalletProvider.listWallets
+      .sort((a, b) => (a.derivation ?? -1).compareTo(b.derivation ?? -1)));
 
   showModalBottomSheet<void>(
     shape: const RoundedRectangleBorder(
@@ -112,7 +125,8 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
       // Si l'écran est trop petit, on utilisera 90% de sa hauteur.
       final screenHeight = MediaQuery.of(context).size.height;
       final double desiredHeight = scaleSize(380);
-      final double bottomSheetHeight = screenHeight < desiredHeight ? screenHeight * 0.9 : desiredHeight;
+      final double bottomSheetHeight =
+          screenHeight < desiredHeight ? screenHeight * 0.9 : desiredHeight;
 
       final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
 
@@ -121,7 +135,8 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
           canValidate = canValidatePayment();
           final bool isUdUnit = configBox.get('isUdUnit') ?? false;
           return Padding(
-            padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
+            padding: EdgeInsets.only(
+                bottom: MediaQuery.of(context).viewInsets.bottom),
             child: Container(
               // On fixe la hauteur maximale du bottom sheet
               height: bottomSheetHeight,
@@ -156,7 +171,8 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                             children: [
                               Text(
                                 'executeATransfer'.tr(),
-                                style: scaledTextStyle(fontSize: 17, fontWeight: FontWeight.w700),
+                                style: scaledTextStyle(
+                                    fontSize: 17, fontWeight: FontWeight.w700),
                               ),
                               IconButton(
                                 key: keyPopButton,
@@ -171,14 +187,20 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                           ScaledSizedBox(height: 4),
                           Text(
                             'from'.tr(args: ['']),
-                            style: scaledTextStyle(fontSize: 14, fontWeight: FontWeight.w500, color: Colors.grey[600]),
+                            style: scaledTextStyle(
+                                fontSize: 14,
+                                fontWeight: FontWeight.w500,
+                                color: Colors.grey[600]),
                           ),
                           ScaledSizedBox(height: 4),
                           Consumer<SubstrateSdk>(builder: (context, sub, _) {
                             return Container(
                               decoration: BoxDecoration(
-                                border: Border.all(color: Colors.blueAccent.shade200, width: 1.5),
-                                borderRadius: const BorderRadius.all(Radius.circular(8)),
+                                border: Border.all(
+                                    color: Colors.blueAccent.shade200,
+                                    width: 1.5),
+                                borderRadius:
+                                    const BorderRadius.all(Radius.circular(8)),
                               ),
                               alignment: Alignment.center,
                               padding: const EdgeInsets.all(0),
@@ -189,17 +211,21 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                                 value: defaultWallet,
                                 menuMaxHeight: scaleSize(270),
                                 onTap: () {
-                                  FocusScope.of(context).requestFocus(amountFocus);
+                                  FocusScope.of(context)
+                                      .requestFocus(amountFocus);
                                 },
                                 selectedItemBuilder: (_) {
-                                  return myWalletProvider.listWallets.map((WalletData wallet) {
+                                  return myWalletProvider.listWallets
+                                      .map((WalletData wallet) {
                                     return Container(
                                       width: scaleSize(isTall ? 315 : 310),
                                       padding: EdgeInsets.all(scaleSize(7)),
                                       child: Visibility(
-                                        visible: wallet.address == defaultWallet.address,
+                                        visible: wallet.address ==
+                                            defaultWallet.address,
                                         child: Row(
-                                          mainAxisAlignment: MainAxisAlignment.center,
+                                          mainAxisAlignment:
+                                              MainAxisAlignment.center,
                                           children: [
                                             NameByAddress(
                                               wallet: wallet,
@@ -207,21 +233,26 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                                               size: 16,
                                             ),
                                             const Spacer(),
-                                            Balance(address: wallet.address, size: 16),
+                                            Balance(
+                                                address: wallet.address,
+                                                size: 16),
                                           ],
                                         ),
                                       ),
                                     );
                                   }).toList();
                                 },
-                                onChanged: (WalletData? newSelectedWallet) async {
+                                onChanged:
+                                    (WalletData? newSelectedWallet) async {
                                   defaultWallet = newSelectedWallet!;
-                                  await sub.setCurrentWallet(newSelectedWallet);
+                                  await Durt.i.walletService.setDefaultWallet(
+                                      newSelectedWallet.address);
                                   sub.reload();
                                   amountFocus.requestFocus();
                                   setState(() {});
                                 },
-                                items: myWalletProvider.listWallets.map((WalletData wallet) {
+                                items: myWalletProvider.listWallets
+                                    .map((WalletData wallet) {
                                   return DropdownMenuItem(
                                     value: wallet,
                                     key: keySelectThisWallet(wallet.address),
@@ -230,7 +261,8 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                                       width: scaleSize(isTall ? 315 : 310),
                                       padding: const EdgeInsets.all(10),
                                       child: Row(
-                                        mainAxisAlignment: MainAxisAlignment.center,
+                                        mainAxisAlignment:
+                                            MainAxisAlignment.center,
                                         children: [
                                           NameByAddress(
                                             wallet: wallet,
@@ -238,7 +270,9 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                                             size: 16,
                                           ),
                                           const Spacer(),
-                                          Balance(address: wallet.address, size: 16),
+                                          Balance(
+                                              address: wallet.address,
+                                              size: 16),
                                         ],
                                       ),
                                     ),
@@ -252,12 +286,16 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                             children: [
                               Text(
                                 'to'.tr(args: ['']),
-                                style: scaledTextStyle(fontSize: 15, fontWeight: FontWeight.w500, color: Colors.grey[600]),
+                                style: scaledTextStyle(
+                                    fontSize: 15,
+                                    fontWeight: FontWeight.w500,
+                                    color: Colors.grey[600]),
                               ),
                               ScaledSizedBox(width: 10),
                               Text(
                                 username ?? getShortPubkey(toAddress),
-                                style: scaledTextStyle(fontSize: 17, fontWeight: FontWeight.w600),
+                                style: scaledTextStyle(
+                                    fontSize: 17, fontWeight: FontWeight.w600),
                               ),
                             ],
                           ),
@@ -266,7 +304,10 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                             children: [
                               Text(
                                 'amount'.tr(),
-                                style: scaledTextStyle(fontSize: 15, fontWeight: FontWeight.w500, color: Colors.grey[600]),
+                                style: scaledTextStyle(
+                                    fontSize: 15,
+                                    fontWeight: FontWeight.w500,
+                                    color: Colors.grey[600]),
                               ),
                               const Spacer(),
                               if (fees > 0)
@@ -274,10 +315,14 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                                   onTap: () => infoFeesPopup(context),
                                   child: Row(
                                     children: [
-                                      Icon(Icons.info_outlined, color: orangeC, size: scaleSize(21)),
+                                      Icon(Icons.info_outlined,
+                                          color: orangeC, size: scaleSize(21)),
                                       ScaledSizedBox(width: 5),
                                       Text(
-                                        'fees'.tr(args: [fees.toString(), currencyName]),
+                                        'fees'.tr(args: [
+                                          fees.toString(),
+                                          currencyName
+                                        ]),
                                         style: scaledTextStyle(
                                           color: orangeC,
                                           fontSize: 13,
@@ -295,7 +340,8 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                             onFocusChange: (focused) {
                               if (!commentFocus.hasFocus) {
                                 setState(() {
-                                  FocusScope.of(context).requestFocus(amountFocus);
+                                  FocusScope.of(context)
+                                      .requestFocus(amountFocus);
                                 });
                               }
                             },
@@ -315,18 +361,25 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                               maxLines: 1,
                               textAlign: TextAlign.center,
                               autocorrect: false,
-                              keyboardType: const TextInputType.numberWithOptions(decimal: true),
+                              keyboardType:
+                                  const TextInputType.numberWithOptions(
+                                      decimal: true),
                               onChanged: (_) async {
                                 fees = await sub.txFees(
                                   defaultWallet.address,
                                   toAddress,
-                                  double.parse(walletViewProvider.payAmount.text == '' ? '0' : walletViewProvider.payAmount.text),
+                                  double.parse(
+                                      walletViewProvider.payAmount.text == ''
+                                          ? '0'
+                                          : walletViewProvider.payAmount.text),
                                 );
                                 setState(() {});
                               },
                               inputFormatters: <TextInputFormatter>[
-                                FilteringTextInputFormatter.deny(',', replacementString: '.'),
-                                FilteringTextInputFormatter.allow(RegExp(r'(^\d+\.?\d{0,2})')),
+                                FilteringTextInputFormatter.deny(',',
+                                    replacementString: '.'),
+                                FilteringTextInputFormatter.allow(
+                                    RegExp(r'(^\d+\.?\d{0,2})')),
                               ],
                               decoration: InputDecoration(
                                 hintText: '0.00',
@@ -337,20 +390,27 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                                 filled: true,
                                 fillColor: Colors.transparent,
                                 focusedBorder: OutlineInputBorder(
-                                  borderSide: BorderSide(color: Colors.grey[500]!, width: 1.5),
+                                  borderSide: BorderSide(
+                                      color: Colors.grey[500]!, width: 1.5),
                                   borderRadius: BorderRadius.circular(8),
                                 ),
                                 contentPadding: EdgeInsets.all(scaleSize(6)),
                               ),
-                              style: scaledTextStyle(fontSize: 22, color: Colors.black, fontWeight: FontWeight.w600),
+                              style: scaledTextStyle(
+                                  fontSize: 22,
+                                  color: Colors.black,
+                                  fontWeight: FontWeight.w600),
                             ),
                           ),
-                          if (walletViewProvider.isCommentVisible) const SizedBox(height: 8),
+                          if (walletViewProvider.isCommentVisible)
+                            const SizedBox(height: 8),
                           Consumer<WalletsProfilesProvider>(
                             builder: (context, provider, _) {
                               return AnimatedCrossFade(
                                 duration: const Duration(milliseconds: 200),
-                                crossFadeState: provider.isCommentVisible ? CrossFadeState.showSecond : CrossFadeState.showFirst,
+                                crossFadeState: provider.isCommentVisible
+                                    ? CrossFadeState.showSecond
+                                    : CrossFadeState.showFirst,
                                 firstChild: TextButton.icon(
                                   style: TextButton.styleFrom(
                                     padding: EdgeInsets.symmetric(
@@ -365,11 +425,15 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                                   ),
                                   label: Text(
                                     'addComment'.tr(),
-                                    style: scaledTextStyle(fontSize: 13, color: Colors.grey[600], fontWeight: FontWeight.w500),
+                                    style: scaledTextStyle(
+                                        fontSize: 13,
+                                        color: Colors.grey[600],
+                                        fontWeight: FontWeight.w500),
                                   ),
                                   onPressed: () {
                                     provider.toggleCommentVisibility();
-                                    Future.delayed(const Duration(milliseconds: 250), () {
+                                    Future.delayed(
+                                        const Duration(milliseconds: 250), () {
                                       if (context.mounted) {
                                         amountFocus.unfocus();
                                         commentFocus.requestFocus();
@@ -384,19 +448,25 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                                     TextField(
                                       controller: provider.payComment,
                                       focusNode: commentFocus,
-                                      onChanged: (value) => provider.comment = value,
+                                      onChanged: (value) =>
+                                          provider.comment = value,
                                       inputFormatters: [
-                                        Utf8LengthLimitingTextInputFormatter(146),
+                                        Utf8LengthLimitingTextInputFormatter(
+                                            146),
                                       ],
                                       textInputAction: TextInputAction.done,
                                       onEditingComplete: () async {
-                                        if (canValidate) await executeTransfert();
+                                        if (canValidate) {
+                                          await executeTransfert();
+                                        }
                                       },
                                       maxLines: 1,
-                                      style: scaledTextStyle(fontSize: 13, color: Colors.black87),
+                                      style: scaledTextStyle(
+                                          fontSize: 13, color: Colors.black87),
                                       decoration: InputDecoration(
                                         hintText: 'optionalComment'.tr(),
-                                        hintStyle: TextStyle(color: Colors.grey[400]),
+                                        hintStyle:
+                                            TextStyle(color: Colors.grey[400]),
                                         filled: true,
                                         fillColor: Colors.white.withAlpha(128),
                                         contentPadding: EdgeInsets.symmetric(
@@ -420,14 +490,16 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                                           },
                                         ),
                                         border: OutlineInputBorder(
-                                          borderRadius: BorderRadius.circular(8),
+                                          borderRadius:
+                                              BorderRadius.circular(8),
                                           borderSide: BorderSide(
                                             color: Colors.grey[300]!,
                                             width: 1,
                                           ),
                                         ),
                                         focusedBorder: OutlineInputBorder(
-                                          borderRadius: BorderRadius.circular(8),
+                                          borderRadius:
+                                              BorderRadius.circular(8),
                                           borderSide: BorderSide(
                                             color: Colors.grey[400]!,
                                             width: 1.5,
@@ -458,7 +530,8 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                                   : null,
                               child: Text(
                                 'executeTheTransfer'.tr(),
-                                style: scaledTextStyle(fontSize: 16, fontWeight: FontWeight.w600),
+                                style: scaledTextStyle(
+                                    fontSize: 16, fontWeight: FontWeight.w600),
                               ),
                             ),
                           ),
@@ -536,7 +609,8 @@ Future<void> infoFeesPopup(BuildContext context) async {
                   padding: const EdgeInsets.all(8),
                   child: Text(
                     'gotit'.tr(),
-                    style: scaledTextStyle(fontSize: 20, color: const Color(0xffD80000)),
+                    style: scaledTextStyle(
+                        fontSize: 20, color: const Color(0xffD80000)),
                   ),
                 ),
                 onPressed: () {
diff --git a/lib/widgets/search_result_list.dart b/lib/widgets/search_result_list.dart
index 752e118c993ccd67235147c9eb0d6a1002ae5692..47c9fe2c80764dde5455260f13ca74b043b1328e 100644
--- a/lib/widgets/search_result_list.dart
+++ b/lib/widgets/search_result_list.dart
@@ -1,7 +1,7 @@
+import 'package:durt2/durt2.dart' show WalletData;
 import 'package:flutter/material.dart';
 import 'package:gecko/models/g1_wallets_list.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/duniter_indexer.dart';
 import 'package:gecko/providers/search.dart';
diff --git a/lib/widgets/wallet_header.dart b/lib/widgets/wallet_header.dart
index fafed280a50f516e2ae5be6c581e298fc804c147..850cec57ed0f1decfa98b5b3029aa8b4216c3fca 100644
--- a/lib/widgets/wallet_header.dart
+++ b/lib/widgets/wallet_header.dart
@@ -1,11 +1,11 @@
 // ignore_for_file: use_build_context_synchronously
 
 import 'dart:io';
+import 'package:durt2/durt2.dart' show IdtyStatus;
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/duniter_indexer.dart';
 import 'package:gecko/providers/my_wallets.dart';
diff --git a/lib/widgets/wallet_name.dart b/lib/widgets/wallet_name.dart
index 735c1fc40bbc33ecd43e405022660cb814e1612c..6d9436dc3bcb7844668ddc01d15ebc09e8d40f7f 100644
--- a/lib/widgets/wallet_name.dart
+++ b/lib/widgets/wallet_name.dart
@@ -1,6 +1,6 @@
+import 'package:durt2/durt2.dart' show WalletData;
 import 'package:flutter/material.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 
 class WalletName extends StatelessWidget {
   const WalletName({
diff --git a/lib/widgets/wallet_tile.dart b/lib/widgets/wallet_tile.dart
index 4340ce249c5aa4f82ce656447ffcb0988e2370e6..72e428862568224b7372b72a093c3b82a20ef186 100644
--- a/lib/widgets/wallet_tile.dart
+++ b/lib/widgets/wallet_tile.dart
@@ -1,8 +1,8 @@
 import 'dart:io';
+import 'package:durt2/durt2.dart' show WalletData;
 import 'package:flutter/material.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/v2s_datapod.dart';
@@ -22,8 +22,6 @@ class WalletTile extends StatelessWidget {
 
   @override
   Widget build(BuildContext context) {
-    repository.getDatapodAvatar();
-
     return Padding(
       padding: EdgeInsets.all(scaleSize(11)),
       child: GestureDetector(
@@ -74,11 +72,11 @@ class WalletTile extends StatelessWidget {
                             ],
                           ),
                         ),
-                        child: repository.imageCustomPath == null || repository.imageCustomPath == ''
+                        child: repository.imagePath == null || repository.imagePath == ''
                             ? Padding(
                                 padding: EdgeInsets.all(scaleSize(16)),
                                 child: Image.asset(
-                                  'assets/avatars/${repository.imageDefaultPath}',
+                                  'assets/avatars/${repository.imagePath}',
                                   alignment: Alignment.bottomCenter,
                                 ),
                               )
@@ -89,7 +87,7 @@ class WalletTile extends StatelessWidget {
                                   image: DecorationImage(
                                     fit: BoxFit.fitHeight,
                                     image: FileImage(
-                                      File(repository.imageCustomPath!),
+                                      File(repository.imagePath!),
                                     ),
                                   ),
                                 ),
diff --git a/lib/widgets/wallet_tile_membre.dart b/lib/widgets/wallet_tile_membre.dart
index 7e9f7e1affd69567265ee4203a88a2f56caf6987..4045fd8944e4a28b6bbae3ecc2f38780ac3859d4 100644
--- a/lib/widgets/wallet_tile_membre.dart
+++ b/lib/widgets/wallet_tile_membre.dart
@@ -1,8 +1,8 @@
 import 'dart:io';
+import 'package:durt2/durt2.dart' show WalletData;
 import 'package:flutter/material.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/models/scale_functions.dart';
-import 'package:gecko/models/wallet_data.dart';
 import 'package:gecko/models/widgets_keys.dart';
 import 'package:gecko/providers/my_wallets.dart';
 import 'package:gecko/providers/v2s_datapod.dart';
@@ -20,8 +20,6 @@ class WalletTileMembre extends StatelessWidget {
 
   @override
   Widget build(BuildContext context) {
-    wallet.getDatapodAvatar();
-
     return Padding(
       padding: EdgeInsets.symmetric(horizontal: scaleSize(52), vertical: scaleSize(15)),
       child: GestureDetector(
@@ -75,11 +73,11 @@ class WalletTileMembre extends StatelessWidget {
                                 ],
                               ),
                             ),
-                            child: wallet.imageCustomPath == null || wallet.imageCustomPath == ''
+                            child: wallet.imagePath == null || wallet.imagePath == ''
                                 ? Padding(
                                     padding: EdgeInsets.all(scaleSize(16)),
                                     child: Image.asset(
-                                      'assets/avatars/${wallet.imageDefaultPath}',
+                                      'assets/avatars/${wallet.imagePath}',
                                       alignment: Alignment.bottomCenter,
                                     ),
                                   )
@@ -90,7 +88,7 @@ class WalletTileMembre extends StatelessWidget {
                                       image: DecorationImage(
                                         fit: BoxFit.fitHeight,
                                         image: FileImage(
-                                          File(wallet.imageCustomPath!),
+                                          File(wallet.imagePath!),
                                         ),
                                       ),
                                     ),
diff --git a/pubspec.lock b/pubspec.lock
index 9b3be6503ebe772b593525abe70799764ef7e18a..b6bd8d5a3e6b75f4c14a90e543168337a50c6a8f 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -346,10 +346,10 @@ packages:
     dependency: transitive
     description:
       name: dart_style
-      sha256: "7306ab8a2359a48d22310ad823521d723acfed60ee1f7e37388e8986853b6820"
+      sha256: "27eb0ae77836989a3bc541ce55595e8ceee0992807f14511552a898ddd0d88ac"
       url: "https://pub.dev"
     source: hosted
-    version: "2.3.8"
+    version: "3.0.1"
   dbus:
     dependency: transitive
     description:
@@ -393,10 +393,10 @@ packages:
   durt2:
     dependency: "direct main"
     description:
-      path: "../../durt2"
+      path: "../durt2"
       relative: true
     source: path
-    version: "0.1.0"
+    version: "0.2.0"
   easy_localization:
     dependency: "direct main"
     description:
@@ -848,10 +848,10 @@ packages:
     dependency: transitive
     description:
       name: graphql
-      sha256: b90f3faa525fed0d8b57f528af913cf1363e1d77f287004d3a15ce699fa866ee
+      sha256: "735bbbaa4db10d38054932e726d291bdd46e46e0575cd482a74b0615b8622e1c"
       url: "https://pub.dev"
     source: hosted
-    version: "5.2.0-beta.9"
+    version: "5.2.1"
   graphql_flutter:
     dependency: "direct main"
     description:
@@ -1445,34 +1445,34 @@ packages:
     dependency: transitive
     description:
       name: polkadart
-      sha256: a3a5d0a3857f1fa4d3413cdeb2cbc3aee8aa8a8860df34236e13350dfe62fe51
+      sha256: b2369eeb33ee155dcdf2a7af18de8961037b9cc28640e200f1475cea497bc3ab
       url: "https://pub.dev"
     source: hosted
-    version: "0.6.1"
+    version: "0.7.1"
   polkadart_cli:
     dependency: transitive
     description:
       name: polkadart_cli
-      sha256: a2aaad2fe19edfc7e2ffc7f27a898b6aef3d2e5a0452f75a8351f54e55779852
+      sha256: "3c2371134031c518b7728e24fd1b5dbcce98a364c97dd5a89518cccfc7222712"
       url: "https://pub.dev"
     source: hosted
-    version: "0.6.1"
+    version: "0.7.1"
   polkadart_keyring:
     dependency: transitive
     description:
       name: polkadart_keyring
-      sha256: "3bb8b0a8053efc5b722a113f3d12842178a832cd3d0733e00bae10c2246c70db"
+      sha256: e99a93c845466dfb53e23bf650bd6ccd772d7cefe7c7ff2c93c6e86d387e5215
       url: "https://pub.dev"
     source: hosted
-    version: "0.6.1"
+    version: "0.7.0"
   polkadart_scale_codec:
     dependency: transitive
     description:
       name: polkadart_scale_codec
-      sha256: "2eec792030deab36e48f035230f235afd3bcf2db4cd4490c9c1f6a51b57594b2"
+      sha256: db0d61adc58d8b395e663558ba6b2aed2ab2291d343733c49c693de62a2498d2
       url: "https://pub.dev"
     source: hosted
-    version: "1.4.2"
+    version: "1.5.0"
   polkawallet_sdk:
     dependency: "direct main"
     description:
@@ -1776,13 +1776,13 @@ packages:
     source: sdk
     version: "0.0.0"
   source_gen:
-    dependency: transitive
+    dependency: "direct overridden"
     description:
       name: source_gen
-      sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832"
+      sha256: "35c8150ece9e8c8d263337a265153c3329667640850b9304861faea59fc98f6b"
       url: "https://pub.dev"
     source: hosted
-    version: "1.5.0"
+    version: "2.0.0"
   source_helper:
     dependency: transitive
     description:
@@ -1811,10 +1811,10 @@ packages:
     dependency: transitive
     description:
       name: sr25519
-      sha256: e4495d8c86d90610931693565c16277503a3799da9814f3745b7123b5f85659d
+      sha256: "122c930a933da6af018ec4a2ccdb853a7d0eb1a0891bfb03467e366b56f86f12"
       url: "https://pub.dev"
     source: hosted
-    version: "0.6.1"
+    version: "0.7.0"
   ss58:
     dependency: transitive
     description:
@@ -1867,18 +1867,18 @@ packages:
     dependency: transitive
     description:
       name: substrate_bip39
-      sha256: "256f440b45e33a37a374eb2a6a83ff879ecefb67b28a0b15599f09c8d920f6e3"
+      sha256: ba880015808079804f40a0fde8c5bff0315ec6792fe3a4281a704e408f1c6bdb
       url: "https://pub.dev"
     source: hosted
-    version: "0.6.1"
+    version: "0.7.0"
   substrate_metadata:
     dependency: transitive
     description:
       name: substrate_metadata
-      sha256: "22d1909dafa574edf279bb46da3cd8e5ce26f8607fd32e40e1371d66dab66c3a"
+      sha256: "6f9e9e3e1078c0c143dd63824043370b9df582d34c431a759253ce2f9cbb7f13"
       url: "https://pub.dev"
     source: hosted
-    version: "1.4.1"
+    version: "1.5.0"
   sync_http:
     dependency: transitive
     description:
@@ -2111,14 +2111,30 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "2.7.3"
+  web_socket:
+    dependency: transitive
+    description:
+      name: web_socket
+      sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
+      url: "https://pub.dev"
+    source: hosted
+    version: "1.0.1"
   web_socket_channel:
     dependency: transitive
     description:
       name: web_socket_channel
-      sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b
+      sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
       url: "https://pub.dev"
     source: hosted
-    version: "2.4.0"
+    version: "3.0.3"
+  web_socket_client:
+    dependency: transitive
+    description:
+      name: web_socket_client
+      sha256: "22264cb5143e9bb55c943d6b051d207fdd6470ffb77ee45778c9a7a0fda100bc"
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.2.0"
   webdriver:
     dependency: transitive
     description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 4cbc2bd7c4092bac5a5dd59182d7ed6ccd3008c9..22129e9f67b4e5c4d751f248f6543b5fc847b618 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -62,12 +62,14 @@ dependencies:
   gif_view: ^1.0.2
   get_it: ^8.0.3
   durt2:
-    path: ../../durt2
+    path: ../durt2
     # git:
     #   url: https://git.duniter.org/libs/durt2
 
 dependency_overrides:
   intl: ^0.19.0
+  # To keep compatibility with polkadart_cli and Hive
+  source_gen: ^2.0.0
 
 dev_dependencies:
   icons_launcher: ^3.0.0
diff --git a/scripts/generatePartFiles.sh b/scripts/build_runner.sh
similarity index 100%
rename from scripts/generatePartFiles.sh
rename to scripts/build_runner.sh