From cff31b298096a11ecbc6d1aa88b8583be91c26c2 Mon Sep 17 00:00:00 2001
From: poka <poka@p2p.legal>
Date: Tue, 13 May 2025 23:35:40 +0200
Subject: [PATCH] BIG WIP

---
 assets/translations/en.json                   |   2 +-
 assets/translations/es.json                   |   2 +-
 assets/translations/fr.json                   |   2 +-
 assets/translations/it.json                   |   2 +-
 integration_test/utility/tests_utility.dart   |  18 +--
 lib/globals.dart                              |   4 -
 lib/main.dart                                 |  21 +--
 lib/models/chest_data.dart                    |  34 ----
 lib/models/chest_data.g.dart                  |  53 -------
 lib/models/membership_renewal.dart            |   4 +-
 lib/models/membership_status.dart             |   2 +-
 lib/models/migrate_wallet_checks.dart         |   2 +-
 lib/models/wallet_data.dart                   | 148 ------------------
 lib/models/wallet_data.g.dart                 | 138 ----------------
 lib/providers/chest_provider.dart             |  26 ++-
 lib/providers/generate_wallets.dart           | 117 ++++++--------
 lib/providers/home.dart                       |  81 +++++++++-
 lib/providers/my_wallets.dart                 |  80 +++++-----
 lib/providers/substrate_sdk.dart              |  53 +++----
 lib/providers/wallet_options.dart             |  29 ++--
 lib/screens/home.dart                         | 136 ++++------------
 lib/screens/myWallets/chest_options.dart      |   7 +-
 lib/screens/myWallets/choose_chest.dart       |  55 +++----
 lib/screens/myWallets/confirm_change_pin.dart |   2 +-
 lib/screens/myWallets/custom_derivations.dart |   4 +-
 lib/screens/myWallets/import_g1_v1.dart       |   2 +-
 lib/screens/myWallets/manage_membership.dart  |   4 +-
 lib/screens/myWallets/show_seed.dart          |   2 +-
 lib/screens/myWallets/unlocking_wallet.dart   |  20 +--
 lib/screens/myWallets/wallet_options.dart     |  27 ++--
 lib/screens/myWallets/wallets_home.dart       |  12 +-
 lib/screens/onBoarding/10.dart                |  38 +++--
 lib/screens/onBoarding/5.dart                 |  32 ++--
 lib/screens/wallet_view.dart                  |   6 +-
 lib/services/durt.service.dart                |   7 -
 lib/services/wallets.service.dart             |  53 -------
 .../buttons/add_new_derivation_button.dart    |   2 +-
 lib/widgets/buttons/home_buttons.dart         |   2 +-
 lib/widgets/certify/certify_button.dart       |   3 +-
 lib/widgets/contacts_list.dart                |   2 +-
 lib/widgets/drag_tule_action.dart             |   4 +-
 lib/widgets/drag_wallets_info.dart            |  20 +--
 lib/widgets/idty_status.dart                  |  19 ++-
 lib/widgets/name_by_address.dart              |   2 +-
 lib/widgets/payment_popup.dart                |   4 +-
 lib/widgets/search_result_list.dart           |   2 +-
 lib/widgets/wallet_header.dart                |   2 +-
 lib/widgets/wallet_name.dart                  |   2 +-
 lib/widgets/wallet_tile.dart                  |  10 +-
 lib/widgets/wallet_tile_membre.dart           |  10 +-
 50 files changed, 397 insertions(+), 912 deletions(-)
 delete mode 100644 lib/models/chest_data.dart
 delete mode 100644 lib/models/chest_data.g.dart
 delete mode 100644 lib/models/wallet_data.dart
 delete mode 100644 lib/models/wallet_data.g.dart
 delete mode 100644 lib/services/durt.service.dart
 delete mode 100644 lib/services/wallets.service.dart

diff --git a/assets/translations/en.json b/assets/translations/en.json
index fdfeae16..306a84bc 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 571c73fb..23e5a273 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 823af693..66ff7443 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 0e2b1cab..7376d21f 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 4fa850ac..eb4a8146 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';
@@ -219,21 +218,21 @@ 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 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 {
+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(chest: chest, address: address, number: number, name: name, derivation: derivation, imageDefaultPath: '${number % 4}.png', isOwned: true);
-  await walletBox.put(myWallet.address, myWallet);
+      WalletData(safeBoxNumber: safeNumber, address: address, name: name, derivation: derivation, imagePath: '${number % 4}.png', isOwned: true);
+  await Durt.instance.walletService.walletDataBox.put(myWallet.address, myWallet);
 
   return myWallet;
 }
@@ -243,8 +242,7 @@ Future bkDeleteAllWallets() async {
   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.instance.walletService.clearWallet();
     await configBox.delete('defaultWallet');
     await configBox.delete('isUdUnit');
     await sub.deleteAllAccounts();
diff --git a/lib/globals.dart b/lib/globals.dart
index 4e4046c3..7b9b826a 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 e18ec904..fc8c3186 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -14,7 +14,6 @@
 // along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 import 'dart:async';
-import 'package:durt2/durt2.dart';
 import 'package:flutter/services.dart';
 import 'package:gecko/globals.dart';
 import 'package:gecko/providers/chest_provider.dart';
@@ -33,10 +32,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,12 +56,10 @@ Future<void> main() async {
   await initHiveForFlutter();
   await homeProvider.initHive();
 
-
-
   appVersion = await homeProvider.getAppVersion();
 
   // Register app dependencies
-  await registerDependencies();
+  // await registerDependencies();
 
   if (kReleaseMode && enableSentry) {
     await SentryFlutter.init((options) {
@@ -191,11 +184,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 ef2d3f72..00000000
--- 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 cf1aa52c..00000000
--- 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 f477f99f..6ff3e231 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 6059351e..a8cab69d 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 5e4f03b9..81a7b86f 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 9f1fc933..00000000
--- 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 71df9617..00000000
--- 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 28f45437..74f35d3f 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,21 @@ 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);
+      await sub.deleteAccounts(getChestWallets(safe));
+      await Durt.instance.walletService.deleteSafe(safe.key);
       final myWalletProvider = Provider.of<MyWalletsProvider>(context, listen: false);
 
       myWalletProvider.pinCode = '';
 
-      if (chestBox.isEmpty) {
-        await configBox.put('currentChest', 0);
+      if (Durt.instance.walletService.safeBox.isEmpty) {
+        await Durt.instance.walletService.setDefaultSafeBoxNumber(0);
       } else {
-        int? lastChest = chestBox.toMap().keys.first;
-        await configBox.put('currentChest', lastChest);
+        final int lastSafe = Durt.instance.walletService.safeBox.toMap().keys.first;
+        await Durt.instance.walletService.setDefaultSafeBoxNumber(lastSafe);
       }
 
       Navigator.popUntil(
@@ -39,10 +37,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.instance.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 9fc83244..656e7c0d 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.instance.walletService.generateMnemonic(language);
 
     generatedMnemonic = generatedMnemonicTyped.sentence;
     return generatedMnemonicTyped.words;
@@ -284,14 +270,9 @@ class GenerateWalletsProvider with ChangeNotifier {
       return await _scanDerivations(context, pinCode).timeout(
         const Duration(seconds: 20),
         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.instance.walletService.defaultSafeBoxNumber;
+          await Durt.instance.walletService.deleteSafe(actualSafeNumber);
 
           // Display error message to user
           // ignore: use_build_context_synchronously
@@ -340,35 +321,34 @@ class GenerateWalletsProvider with ChangeNotifier {
 
     scanStatus = ScanDerivationsStatus.scanning;
     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);
+      final keypair = await Durt.instance.walletService.getKeyPairFromMnemonic(generatedMnemonic!);
+      addressToScan.putIfAbsent(keypair.address, () => derivationNbr);
     }
 
-    final balanceList = await sub.getBalanceMulti(addressToScan.keys.toList()).timeout(
+    final balanceList = await Durt.instance.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;
     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.instance.walletService.importDerivations(pinCode: pinCode, derivations: [addressToScan[scannedWallet]!]);
+      final actualSafeNumber = Durt.instance.walletService.defaultSafeBoxNumber;
 
       WalletData myWallet = WalletData(
-          chest: currentChestNumber,
+          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.instance.walletService.walletDataBox.put(myWallet.address, myWallet);
       scanedWalletNumber++;
       notifyListeners();
     }
@@ -381,31 +361,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.instance.walletService.getKeyPairFromMnemonic(generatedMnemonic!);
+
+    final address = Durt.instance.walletService.getAddress(keypair.address);
 
     // if (addressData.address == null) return false;
-    final balance = await duniterStorage.getBalance(keypair.address).timeout(
+    final balance = await Durt.instance.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.instance.walletService.importRootWallet(pinCode: pinCode);
 
-      // await sub.importAccount(mnemonic: generatedMnemonic!, password: pinCode);
+      final actualSafeNumber = Durt.instance.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.instance.walletService.walletDataBox.put(myWallet.address, myWallet);
       scanedWalletNumber++;
       return true;
     } else {
diff --git a/lib/providers/home.dart b/lib/providers/home.dart
index 5810785f..ef201942 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
@@ -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);
+
+    // Init durt 2
+    await Durt().init(network: Networks.gdev);
+
+    // 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 (sub.sdkReady && !sub.nodeConnected) {
+      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.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 0ea7d5d4..f3d5c45c 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.instance.walletService.defaultSafeBoxNumber;
 
-  bool isWalletsExists() => chestBox.isNotEmpty;
+  bool get isWalletsExists => Durt.instance.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 {
+  Future<List<WalletData>> readAllWallets([int? safe]) async {
     final sub = Provider.of<SubstrateSdk>(homeContext, listen: false);
-    chest = chest ?? getCurrentChest();
+    safe = safe ?? getCurrentSafe;
     listWallets.clear();
-    final wallets = walletBox.toMap().values.toList();
+    final wallets = Durt.instance.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) {
@@ -61,24 +55,24 @@ class MyWalletsProvider with ChangeNotifier {
     final idtyStatusList = await sub.idtyStatusMulti(walletsToScan.keys.toList());
     for (final wallet in walletsToScan.values) {
       wallet.identityStatus = idtyStatusList[n];
-      walletBox.put(wallet.address, wallet);
+      Durt.instance.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.instance.walletService.walletDataBox.toMap().forEach((key, value) {
+      if (value.safeBoxNumber == safe && value.number == nbr) {
         targetedWallet = value;
         return;
       }
@@ -102,15 +96,17 @@ class MyWalletsProvider with ChangeNotifier {
     return pinCode.isNotEmpty;
   }
 
-  WalletData? getWalletDataByAddress(String address) => walletBox.toMap().values.firstWhereOrNull((wallet) => wallet.address == address);
+  WalletData? getWalletDataByAddress(String address) =>
+      Durt.instance.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.instance.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.instance.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);
     }
   }
 
@@ -122,12 +118,12 @@ class MyWalletsProvider with ChangeNotifier {
 
       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.instance.walletService.walletDataBox.clear();
+        await Durt.instance.walletService.safeBox.clear();
         await configBox.delete('defaultWallet');
         await sub.deleteAllAccounts();
 
@@ -156,7 +152,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 +161,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.instance.walletService.walletDataBox.put(newWallet.address, newWallet);
     await readAllWallets();
 
     isNewDerivationLoading = false;
@@ -186,17 +182,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 +201,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.instance.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 +223,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 701cb10a..ae469e97 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 IdtyStatus;
 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';
@@ -393,7 +392,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 +441,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 +481,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,
   };
@@ -767,7 +766,7 @@ class SubstrateSdk with ChangeNotifier {
       nodeConnected = 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}');
@@ -900,20 +899,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() {
@@ -1112,7 +1111,7 @@ class SubstrateSdk with ChangeNotifier {
 
     final toIndex = await _getIdentityIndexOf(destAddress);
 
-    if (myIdtyStatus != IdtyStatus.member) {
+    if (myIdtyStatus != IdtyStatus.validated) {
       return 'notMember';
     }
 
@@ -1134,8 +1133,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 +1410,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 5fa7fbe7..93710aca 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,12 @@ 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.instance.walletService.walletDataBox.put(walletTarget.address, walletTarget);
 
     _newWalletName.text = '';
   }
@@ -71,9 +71,9 @@ class WalletOptionsProvider with ChangeNotifier {
         );
       }
 
-      await walletBox.delete(wallet.address);
-      if (wallet.imageCustomPath != null) {
-        final avatarFile = File(wallet.imageCustomPath!);
+      await Durt.instance.walletService.walletDataBox.delete(wallet.address);
+      if (wallet.imagePath != null) {
+        final avatarFile = File(wallet.imagePath!);
         if (await avatarFile.exists()) {
           await avatarFile.delete();
         }
@@ -134,15 +134,14 @@ class WalletOptionsProvider with ChangeNotifier {
 
       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.instance.walletService.walletDataBox.put(address.text, walletData);
       notifyListeners();
       datapod.setAvatar(address.text, newPath);
 
@@ -219,7 +218,7 @@ class WalletOptionsProvider with ChangeNotifier {
                             if (!await myWalletProvider.askPinCode()) return;
 
                             final wallet = myWalletProvider.getWalletDataByAddress(address.text);
-                            await sub.setCurrentWallet(wallet!);
+                            await Durt.instance.walletService.setDefaultAddress(wallet!.address);
                             final transactionId = await sub.confirmIdentity(walletOptions.address.text, idtyName.text, myWalletProvider.pinCode);
                             Navigator.pop(context);
 
@@ -251,7 +250,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;
 
@@ -296,7 +295,7 @@ class WalletOptionsProvider with ChangeNotifier {
                     onPressed: () async {
                       if (canValidateNameBool) {
                         nameController.text = walletName.text;
-                        _renameWallet(wID, walletName.text, isCesium: false);
+                        _renameWallet(address, walletName.text, isCesium: false);
                         notifyListeners();
                         Navigator.pop(context);
                       }
diff --git a/lib/screens/home.dart b/lib/screens/home.dart
index 4e0fa3b1..716022a2 100644
--- a/lib/screens/home.dart
+++ b/lib/screens/home.dart
@@ -1,134 +1,58 @@
-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/commons/loading.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 {
+class HomeScreen extends StatelessWidget {
   const HomeScreen({super.key});
 
-  @override
-  State<HomeScreen> createState() => _HomeScreenState();
-}
-
-class _HomeScreenState extends State<HomeScreen> {
-  @override
-  void 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);
-      }
-    });
-    super.initState();
-  }
-
   @override
   Widget build(BuildContext context) {
     homeContext = context;
+    final homeProvider = Provider.of<HomeProvider>(context);
+
+    return FutureBuilder(
+        future: homeProvider.initHome(context),
+        builder: (context, snapshot) {
+          if (snapshot.connectionState != ConnectionState.done) {
+            return Scaffold(
+              body: Center(child: const Loading(size: 50)),
+            );
+          }
 
-    final myWalletProvider = Provider.of<MyWalletsProvider>(context);
-    Provider.of<ChestProvider>(context);
-    final isWalletsExists = myWalletProvider.isWalletsExists();
+          if (snapshot.hasError) {
+            return Center(
+                child: Scaffold(
+              body: Center(
+                child: Text(snapshot.error.toString()),
+              ),
+            ));
+          }
 
-    isTall = (MediaQuery.of(context).size.height / MediaQuery.of(context).size.width) > 1.75;
+          final myWalletProvider = Provider.of<MyWalletsProvider>(context);
+          Provider.of<ChestProvider>(context);
+          final isWalletsExists = myWalletProvider.isWalletsExists;
 
-    return Scaffold(
-        resizeToAvoidBottomInset: false,
-        drawer: MainDrawer(isWalletsExists: isWalletsExists),
-        backgroundColor: yellowC,
-        body: isWalletsExists ? geckHome(context) : welcomeHome(context));
+          isTall = (MediaQuery.of(context).size.height / MediaQuery.of(context).size.width) > 1.75;
+          return Scaffold(
+              resizeToAvoidBottomInset: false,
+              drawer: MainDrawer(isWalletsExists: isWalletsExists),
+              backgroundColor: yellowC,
+              body: isWalletsExists ? geckHome(context) : welcomeHome(context));
+        });
   }
 }
 
diff --git a/lib/screens/myWallets/chest_options.dart b/lib/screens/myWallets/chest_options.dart
index 3645fca6..c340a91b 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.instance.walletService.defaultSafeBox;
 
     return Scaffold(
       backgroundColor: backgroundColor,
       resizeToAvoidBottomInset: false,
-      appBar: GeckoAppBar(currentChest.name!),
+      appBar: GeckoAppBar(currentSafe.name),
       bottomNavigationBar: const GeckoBottomAppBar(),
       body: Stack(children: [
         Builder(
@@ -55,7 +56,7 @@ class ChestOptionsContent extends StatelessWidget {
   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 currentChest = Durt.instance.walletService.defaultSafeBox;
     final isAlone = myWalletProvider.listWallets.length == 1;
 
     return Column(
diff --git a/lib/screens/myWallets/choose_chest.dart b/lib/screens/myWallets/choose_chest.dart
index fa1b7d9b..d0e1fab3 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.instance.walletService.defaultSafeBoxNumber;
 
   @override
   Widget build(BuildContext context) {
@@ -31,8 +34,7 @@ class _ChooseChestState extends State<ChooseChest> {
 
     return Scaffold(
         backgroundColor: backgroundColor,
-        appBar: AppBar(
-            toolbarHeight: scaleSize(57), title: Text('selectMyChest'.tr())),
+        appBar: AppBar(toolbarHeight: scaleSize(57), title: Text('selectMyChest'.tr())),
         body: SafeArea(
           child: Column(children: <Widget>[
             const SizedBox(height: 160),
@@ -41,30 +43,30 @@ class _ChooseChestState extends State<ChooseChest> {
               options: CarouselOptions(
                 height: 210,
                 onPageChanged: (index, reason) {
-                  currentChest = chestBox.toMap().keys.toList()[index];
+                  currentChest = Durt.instance.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.instance.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,23 +74,19 @@ class _ChooseChestState extends State<ChooseChest> {
                 );
               }).toList(),
             ),
-            if (chestBox.values.toList().length > 1)
+            if (Durt.instance.walletService.safeBox.values.toList().length > 1)
               Row(
                 mainAxisAlignment: MainAxisAlignment.center,
-                children: chestBox.toMap().entries.map((entry) {
+                children: Durt.instance.walletService.safeBox.values.toList().map((entry) {
                   return GestureDetector(
-                    onTap: () =>
-                        buttonCarouselController.animateToPage(entry.key),
+                    onTap: () => buttonCarouselController.animateToPage(entry.key),
                     child: Container(
                       width: 12.0,
                       height: 12.0,
-                      margin: const EdgeInsets.symmetric(
-                          vertical: 8.0, horizontal: 4.0),
+                      margin: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 4.0),
                       decoration: BoxDecoration(
                           shape: BoxShape.circle,
-                          color: (Theme.of(context).brightness == Brightness.dark
-                                  ? Colors.white
-                                  : Colors.black)
+                          color: (Theme.of(context).brightness == Brightness.dark ? Colors.white : Colors.black)
                               .withValues(alpha: currentChest == entry.key ? 0.9 : 0.4)),
                     ),
                   );
@@ -116,10 +114,7 @@ class _ChooseChestState extends State<ChooseChest> {
                 },
                 child: Text(
                   'openThisChest'.tr(),
-                  style: const TextStyle(
-                      fontSize: 21,
-                      color: backgroundColor,
-                      fontWeight: FontWeight.w600),
+                  style: const TextStyle(fontSize: 21, color: backgroundColor, fontWeight: FontWeight.w600),
                 ),
               ),
             ),
@@ -140,12 +135,7 @@ class _ChooseChestState extends State<ChooseChest> {
                   child: SizedBox(
                     width: 400,
                     height: 50,
-                    child: Center(
-                        child: Text('createChest'.tr(),
-                            style: const TextStyle(
-                                fontSize: 21,
-                                color: orangeC,
-                                fontWeight: FontWeight.w600))),
+                    child: Center(child: Text('createChest'.tr(), style: const TextStyle(fontSize: 21, color: orangeC, fontWeight: FontWeight.w600))),
                   ),
                 ),
               ),
@@ -163,12 +153,7 @@ class _ChooseChestState extends State<ChooseChest> {
                 child: SizedBox(
                   width: 400,
                   height: 50,
-                  child: Center(
-                      child: Text('importChest'.tr(),
-                          style: const TextStyle(
-                              fontSize: 21,
-                              color: orangeC,
-                              fontWeight: FontWeight.w600))),
+                  child: Center(child: Text('importChest'.tr(), style: const TextStyle(fontSize: 21, color: orangeC, fontWeight: FontWeight.w600))),
                 )),
             const SizedBox(height: 20),
           ]),
diff --git a/lib/screens/myWallets/confirm_change_pin.dart b/lib/screens/myWallets/confirm_change_pin.dart
index 8ae690a2..88a57d94 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 d97e94eb..9d60927d 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 98e5ff8c..0704ba6c 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 e60898b9..064118ac 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/show_seed.dart b/lib/screens/myWallets/show_seed.dart
index 78bcac40..15f50526 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 a10337c0..426edc89 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,8 +36,8 @@ class _UnlockingWalletState extends State<UnlockingWallet> {
     super.initState();
     pinFocus = FocusNode(debugLabel: 'pinFocusNode');
     enterPin = TextEditingController();
-    currentChestNumber = configBox.get('currentChest');
-    currentChest = chestBox.get(currentChestNumber)!;
+    currentSafeNumber = Durt.instance.walletService.defaultSafeBoxNumber;
+    currentSafe = Durt.instance.walletService.safeBox.get(currentSafeNumber)!;
   }
 
   @override
@@ -79,19 +79,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,
diff --git a/lib/screens/myWallets/wallet_options.dart b/lib/screens/myWallets/wallet_options.dart
index 3b708d5a..957a02c6 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';
@@ -41,13 +41,13 @@ class WalletOptions extends StatelessWidget {
 
     walletOptions.address.text = wallet.address;
 
-    final currentChest = myWalletProvider.getCurrentChest();
+    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: (_, __) {
@@ -66,8 +66,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(
@@ -92,7 +92,7 @@ class WalletOptions extends StatelessWidget {
                                     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)),
@@ -168,13 +168,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 +190,7 @@ class WalletOptions extends StatelessWidget {
             ),
             child: InkWell(
               onTap: () async {
-                wallet.imageCustomPath = await walletProvider.changeAvatar();
+                wallet.imagePath = await walletProvider.changeAvatar();
                 walletProvider.reload();
               },
               child: Icon(
@@ -242,11 +242,10 @@ 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);
 
-    await sub.setCurrentWallet(wallet);
+    await Durt.instance.walletService.setDefaultWallet(walletOptions.address.text);
     await myWalletProvider.readAllWallets(currentChest);
     myWalletProvider.reload();
     walletOptions.reload();
@@ -413,7 +412,7 @@ class WalletOptions extends StatelessWidget {
         initialData: const [IdtyStatus.unknown],
         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,7 +472,7 @@ Widget aloneWalletOptions() {
             onTap: () async {
               if (!myWalletProvider.isNewDerivationLoading) {
                 if (!await myWalletProvider.askPinCode()) return;
-                String newDerivationName = '${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}';
+                String newDerivationName = '${'wallet'.tr()} ${myWalletProvider.listWallets.last.number + 2}';
                 await myWalletProvider.generateNewDerivation(context, newDerivationName);
                 Navigator.pushReplacementNamed(context, '/mywallets');
               }
diff --git a/lib/screens/myWallets/wallets_home.dart b/lib/screens/myWallets/wallets_home.dart
index 882ed481..6a564568 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';
@@ -42,8 +42,8 @@ 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 currentChestNumber = myWalletProvider.getCurrentSafe;
+    final SafeBox currentChest = Durt.instance.walletService.safeBox.get(currentChestNumber)!;
 
     return Scaffold(
         backgroundColor: backgroundColor,
@@ -52,12 +52,12 @@ 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!,
+                currentChest.name,
                 style: scaledTextStyle(color: Colors.grey[850], fontSize: 16, fontWeight: FontWeight.w500),
               ),
             ],
@@ -83,7 +83,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('');
diff --git a/lib/screens/onBoarding/10.dart b/lib/screens/onBoarding/10.dart
index 96f98e2d..576a1df4 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';
@@ -137,9 +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.instance.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.instance.walletService.importRootWallet(pinCode: widget.pinCode);
+                    final address = Durt.instance.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.instance.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.instance.walletService.getAddress(defaultWallet.address);
+                  await Durt.instance.walletService.setDefaultWallet(address);
+                }
 
                 await Navigator.push(
                   context,
diff --git a/lib/screens/onBoarding/5.dart b/lib/screens/onBoarding/5.dart
index b83780fc..8dfd761e 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/wallet_view.dart b/lib/screens/wallet_view.dart
index b5cf4f15..74576507 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';
@@ -45,12 +46,9 @@ 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();
 
     walletProfile.address = address;
-    sub.setCurrentWallet(defaultWallet);
+    Durt.instance.walletService.setDefaultWallet(address);
 
     return Scaffold(
       backgroundColor: backgroundColor,
diff --git a/lib/services/durt.service.dart b/lib/services/durt.service.dart
deleted file mode 100644
index e39aa627..00000000
--- 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 061cdce1..00000000
--- 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 0e621f35..bec9623e 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 16826844..85f54eed 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 17aaffd7..bc9593dc 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';
@@ -50,7 +51,7 @@ class CertifyButton extends StatelessWidget {
                   );
 
                   if (!result) return;
-                  await sub.setCurrentWallet(myWalletProvider.idtyWallet!);
+                  await Durt.instance.walletService.setDefaultWallet(address);
 
                   if (myWalletProvider.pinCode == '') {
                     await Navigator.push(
diff --git a/lib/widgets/contacts_list.dart b/lib/widgets/contacts_list.dart
index caa43a35..d3478d29 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 5fc1e07c..640d3de2 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';
@@ -44,7 +44,7 @@ class DragTuleAction extends StatelessWidget {
       child: DragTarget<String>(
           onAcceptWithDetails: (senderAddress) async {
             final walletData = myWalletProvider.getWalletDataByAddress(senderAddress.data);
-            await sub.setCurrentWallet(walletData!);
+            await Durt.instance.walletService.setDefaultWallet(walletData!.address);
             sub.reload();
             paymentPopup(context, wallet.address, g1WalletsBox.get(wallet.address)!.username ?? wallet.name!);
           },
diff --git a/lib/widgets/drag_wallets_info.dart b/lib/widgets/drag_wallets_info.dart
index c02c288e..e567f258 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 a9fda4ba..13233a92 100644
--- a/lib/widgets/idty_status.dart
+++ b/lib/widgets/idty_status.dart
@@ -1,8 +1,7 @@
+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';
@@ -15,7 +14,7 @@ class IdentityStatus extends StatelessWidget {
 
   @override
   Widget build(BuildContext context) {
-    final walletData = walletBox.get(address) ?? WalletData(address: address);
+    final walletData = Durt.instance.walletService.walletDataBox.get(address) ?? WalletData(address: address);
 
     return Consumer<SubstrateSdk>(builder: (context, sub, _) {
       return FutureBuilder(
@@ -25,21 +24,21 @@ class IdentityStatus extends StatelessWidget {
             if (snapshot.data != null && !snapshot.hasError) {
               final resStatus = snapshot.data!.first;
               walletData.identityStatus = resStatus;
-              walletBox.put(address, walletData);
+              Durt.instance.walletService.walletDataBox.put(address, walletData);
             }
 
             final resStatus = walletData.identityStatus;
 
-            final nameByAddress = resStatus == IdtyStatus.member
+            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,7 +47,7 @@ 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)),
               ],
             );
           });
diff --git a/lib/widgets/name_by_address.dart b/lib/widgets/name_by_address.dart
index 49ee3ba8..ca2724bc 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 7e2cc0a3..7f9370c5 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';
@@ -216,7 +216,7 @@ void paymentPopup(BuildContext context, String toAddress, String? username) {
                                 },
                                 onChanged: (WalletData? newSelectedWallet) async {
                                   defaultWallet = newSelectedWallet!;
-                                  await sub.setCurrentWallet(newSelectedWallet);
+                                  await Durt.instance.walletService.setDefaultWallet(newSelectedWallet.address);
                                   sub.reload();
                                   amountFocus.requestFocus();
                                   setState(() {});
diff --git a/lib/widgets/search_result_list.dart b/lib/widgets/search_result_list.dart
index 752e118c..47c9fe2c 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 fafed280..850cec57 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 735c1fc4..6d9436dc 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 4340ce24..72e42886 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 7e9f7e1a..4045fd89 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!),
                                         ),
                                       ),
                                     ),
-- 
GitLab