CW-580: BIP39 Wallets Shared Seed Implementation: "One Seed - Multiple Wallets" (#1307)

* feat: Implement creating new BIP39 wallet with same seed used for other owned BIP39 wallets

* feat: Use same seed for BIP39 Wallets

* Update pre_existing_seeds_page.dart

* Feat: BIP39 Same seed wallet creation using the Common Parent Wallet Strategy

* feat: Finalize implementing preexisting seeds

* feat: Implement shared bip39 wallet seed for Bitcoin wallet type

* feat: Implement shared bip39 wallet seed for Litecoin wallet type

* feat: Implement shared bip39 wallet seed for BitcoinCash wallet type

* feat: Implement shared bip39 wallet seed for Nano wallet type, although disabled entry for now

* fix: Remove non bip39 seed wallet type from listing

* feat: Implement grouped and single wallets lists in wallets listing page and implement editing and saving group names

* fix: Issue where the ontap always references the leadwallet, also make shared seed wallets section header only display when the multi wallet groups list is not empty

* fix: Add translation and adjust the way the groups display

* feat: Activate bip39 as an option for creating Nano wallet types

* fix: Handle edgecase with creating new wallet with group address, handle case where only bip39 derivation type is allowed with child wallets, activate nano wallet type for shared seed

* chore: Modify the UI to fit adjustment made on figma

* fix: Disposed box triggering error in hive and causing wallet list view to display error

* fix: Switch wallet groups title in wallets list page and also fix issue with renaming groups

* Update lib/reactions/bip39_wallet_utils.dart [skip ci]

Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>

* Update lib/router.dart [skip ci]

Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>

* fix: Review fixes: Combine New Wallet Page Type arguments into a single model

* fix: Review fixes: Add failure guard when fetching mnemonic for selected wallet in pre-existing wallets page

* fix: Review fixes - Add loading indicator when mnemonic is being selected for wallet

* fix: Review fixes - Modify variable name to avoid clashes

* fix: Review fixes - Access WalletManager through dependency injection instead of service location

* fix: Review fixes - Add testnet to convertWalletInfoToWalletlistItem function, and adjust according where used

* fix: Review fixes - Add walletPassword to nano, tron and wownero wallets and confirm it is properly handled as it should be

* fix: Remove leadWallet, modify filtering flow to reflect this and not depend on leadWallet, and adjust privacy settings

* fix: Review Fixes - Modify restore flow to reflect current nature of bip39 as default for majority of wallet types

* fix: QA Fixes - Modify preexisting page to display wallet group names if set, and display them in incremental order if not set

* fix: Add wallet group description page and rename pre-existingseeds page to wallet group display page

* fix: Product Fix - Rename pre-existing seeds file name to wallet group display filename

* fix: Product fix - Separate multiwallets groups from single wallets and display separately

* fix - Product Fix - Add empty state for wallet group listing when creating a new wallet, adjust CTAs across buttons relating to the flow also

---------

Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
This commit is contained in:
David Adegoke 2024-09-20 19:25:08 +01:00 committed by GitHub
parent 3a391f10a3
commit 4e2e5e708c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
87 changed files with 2152 additions and 430 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View file

@ -10,12 +10,17 @@ class BitcoinNewWalletCredentials extends WalletCredentials {
DerivationType? derivationType, DerivationType? derivationType,
String? derivationPath, String? derivationPath,
String? passphrase, String? passphrase,
this.mnemonic,
String? parentAddress,
}) : super( }) : super(
name: name, name: name,
walletInfo: walletInfo, walletInfo: walletInfo,
password: password, password: password,
passphrase: passphrase, passphrase: passphrase,
parentAddress: parentAddress,
); );
final String? mnemonic;
} }
class BitcoinRestoreWalletFromSeedCredentials extends WalletCredentials { class BitcoinRestoreWalletFromSeedCredentials extends WalletCredentials {

View file

@ -41,7 +41,7 @@ class BitcoinWalletService extends WalletService<
case DerivationType.bip39: case DerivationType.bip39:
final strength = credentials.seedPhraseLength == 24 ? 256 : 128; final strength = credentials.seedPhraseLength == 24 ? 256 : 128;
mnemonic = await MnemonicBip39.generate(strength: strength); mnemonic = credentials.mnemonic ?? await MnemonicBip39.generate(strength: strength);
break; break;
case DerivationType.electrum: case DerivationType.electrum:
default: default:

View file

@ -32,11 +32,11 @@ class LitecoinWalletService extends WalletService<
@override @override
Future<LitecoinWallet> create(BitcoinNewWalletCredentials credentials, {bool? isTestnet}) async { Future<LitecoinWallet> create(BitcoinNewWalletCredentials credentials, {bool? isTestnet}) async {
final String mnemonic; final String mnemonic;
switch ( credentials.walletInfo?.derivationInfo?.derivationType) { switch (credentials.walletInfo?.derivationInfo?.derivationType) {
case DerivationType.bip39: case DerivationType.bip39:
final strength = credentials.seedPhraseLength == 24 ? 256 : 128; final strength = credentials.seedPhraseLength == 24 ? 256 : 128;
mnemonic = await MnemonicBip39.generate(strength: strength); mnemonic = credentials.mnemonic ?? await MnemonicBip39.generate(strength: strength);
break; break;
case DerivationType.electrum: case DerivationType.electrum:
default: default:

View file

@ -2,9 +2,21 @@ import 'package:cw_core/wallet_credentials.dart';
import 'package:cw_core/wallet_info.dart'; import 'package:cw_core/wallet_info.dart';
class BitcoinCashNewWalletCredentials extends WalletCredentials { class BitcoinCashNewWalletCredentials extends WalletCredentials {
BitcoinCashNewWalletCredentials( BitcoinCashNewWalletCredentials({
{required String name, WalletInfo? walletInfo, String? password, String? passphrase}) required String name,
: super(name: name, walletInfo: walletInfo, password: password, passphrase: passphrase); WalletInfo? walletInfo,
String? password,
String? passphrase,
this.mnemonic,
String? parentAddress,
}) : super(
name: name,
walletInfo: walletInfo,
password: password,
passphrase: passphrase,
parentAddress: parentAddress
);
final String? mnemonic;
} }
class BitcoinCashRestoreWalletFromSeedCredentials extends WalletCredentials { class BitcoinCashRestoreWalletFromSeedCredentials extends WalletCredentials {

View file

@ -36,7 +36,7 @@ class BitcoinCashWalletService extends WalletService<
final strength = credentials.seedPhraseLength == 24 ? 256 : 128; final strength = credentials.seedPhraseLength == 24 ? 256 : 128;
final wallet = await BitcoinCashWalletBase.create( final wallet = await BitcoinCashWalletBase.create(
mnemonic: await MnemonicBip39.generate(strength: strength), mnemonic: credentials.mnemonic ?? await MnemonicBip39.generate(strength: strength),
password: credentials.password!, password: credentials.password!,
walletInfo: credentials.walletInfo!, walletInfo: credentials.walletInfo!,
unspentCoinsInfo: unspentCoinsInfoSource, unspentCoinsInfo: unspentCoinsInfoSource,

View file

@ -10,6 +10,7 @@ abstract class WalletCredentials {
this.passphrase, this.passphrase,
this.derivationInfo, this.derivationInfo,
this.hardwareWalletType, this.hardwareWalletType,
this.parentAddress,
}) { }) {
if (this.walletInfo != null && derivationInfo != null) { if (this.walletInfo != null && derivationInfo != null) {
this.walletInfo!.derivationInfo = derivationInfo; this.walletInfo!.derivationInfo = derivationInfo;
@ -18,6 +19,7 @@ abstract class WalletCredentials {
final String name; final String name;
final int? height; final int? height;
String? parentAddress;
int? seedPhraseLength; int? seedPhraseLength;
String? password; String? password;
String? passphrase; String? passphrase;

View file

@ -80,6 +80,7 @@ class WalletInfo extends HiveObject {
this.showIntroCakePayCard, this.showIntroCakePayCard,
this.derivationInfo, this.derivationInfo,
this.hardwareWalletType, this.hardwareWalletType,
this.parentAddress,
) : _yatLastUsedAddressController = StreamController<String>.broadcast(); ) : _yatLastUsedAddressController = StreamController<String>.broadcast();
factory WalletInfo.external({ factory WalletInfo.external({
@ -97,6 +98,7 @@ class WalletInfo extends HiveObject {
String yatLastUsedAddressRaw = '', String yatLastUsedAddressRaw = '',
DerivationInfo? derivationInfo, DerivationInfo? derivationInfo,
HardwareWalletType? hardwareWalletType, HardwareWalletType? hardwareWalletType,
String? parentAddress,
}) { }) {
return WalletInfo( return WalletInfo(
id, id,
@ -113,6 +115,7 @@ class WalletInfo extends HiveObject {
showIntroCakePayCard, showIntroCakePayCard,
derivationInfo, derivationInfo,
hardwareWalletType, hardwareWalletType,
parentAddress,
); );
} }
@ -184,6 +187,9 @@ class WalletInfo extends HiveObject {
@HiveField(21) @HiveField(21)
HardwareWalletType? hardwareWalletType; HardwareWalletType? hardwareWalletType;
@HiveField(22)
String? parentAddress;
String get yatLastUsedAddress => yatLastUsedAddressRaw ?? ''; String get yatLastUsedAddress => yatLastUsedAddressRaw ?? '';
set yatLastUsedAddress(String address) { set yatLastUsedAddress(String address) {

View file

@ -21,7 +21,7 @@ class EthereumWalletService extends EVMChainWalletService<EthereumWallet> {
Future<EthereumWallet> create(EVMChainNewWalletCredentials credentials, {bool? isTestnet}) async { Future<EthereumWallet> create(EVMChainNewWalletCredentials credentials, {bool? isTestnet}) async {
final strength = credentials.seedPhraseLength == 24 ? 256 : 128; final strength = credentials.seedPhraseLength == 24 ? 256 : 128;
final mnemonic = bip39.generateMnemonic(strength: strength); final mnemonic = credentials.mnemonic ?? bip39.generateMnemonic(strength: strength);
final wallet = EthereumWallet( final wallet = EthereumWallet(
walletInfo: credentials.walletInfo!, walletInfo: credentials.walletInfo!,

View file

@ -3,8 +3,20 @@ import 'package:cw_core/wallet_credentials.dart';
import 'package:cw_core/wallet_info.dart'; import 'package:cw_core/wallet_info.dart';
class EVMChainNewWalletCredentials extends WalletCredentials { class EVMChainNewWalletCredentials extends WalletCredentials {
EVMChainNewWalletCredentials({required String name, WalletInfo? walletInfo, String? password}) EVMChainNewWalletCredentials({
: super(name: name, walletInfo: walletInfo, password: password); required String name,
WalletInfo? walletInfo,
String? password,
String? parentAddress,
this.mnemonic,
}) : super(
name: name,
walletInfo: walletInfo,
password: password,
parentAddress: parentAddress,
);
final String? mnemonic;
} }
class EVMChainRestoreWalletFromSeedCredentials extends WalletCredentials { class EVMChainRestoreWalletFromSeedCredentials extends WalletCredentials {

View file

@ -4,13 +4,19 @@ import 'package:cw_core/wallet_info.dart';
class NanoNewWalletCredentials extends WalletCredentials { class NanoNewWalletCredentials extends WalletCredentials {
NanoNewWalletCredentials({ NanoNewWalletCredentials({
required String name, required String name,
WalletInfo? walletInfo,
String? password, String? password,
DerivationType? derivationType, DerivationType? derivationType,
this.mnemonic,
String? parentAddress,
}) : super( }) : super(
name: name, name: name,
password: password, password: password,
derivationInfo: DerivationInfo(derivationType: derivationType), walletInfo: walletInfo,
parentAddress: parentAddress,
); );
final String? mnemonic;
} }
class NanoRestoreWalletFromSeedCredentials extends WalletCredentials { class NanoRestoreWalletFromSeedCredentials extends WalletCredentials {

View file

@ -32,15 +32,17 @@ class NanoWalletService extends WalletService<
@override @override
Future<WalletBase> create(NanoNewWalletCredentials credentials, {bool? isTestnet}) async { Future<WalletBase> create(NanoNewWalletCredentials credentials, {bool? isTestnet}) async {
// nano standard: final String mnemonic;
String seedKey = NanoSeeds.generateSeed(); switch (credentials.walletInfo?.derivationInfo?.derivationType) {
String mnemonic = NanoDerivations.standardSeedToMnemonic(seedKey); case DerivationType.nano:
String seedKey = NanoSeeds.generateSeed();
// should never happen but just in case: mnemonic = credentials.mnemonic ?? NanoDerivations.standardSeedToMnemonic(seedKey);
if (credentials.walletInfo!.derivationInfo == null) { break;
credentials.walletInfo!.derivationInfo = DerivationInfo(derivationType: DerivationType.nano); case DerivationType.bip39:
} else if (credentials.walletInfo!.derivationInfo!.derivationType == null) { default:
credentials.walletInfo!.derivationInfo!.derivationType = DerivationType.nano; final strength = credentials.seedPhraseLength == 24 ? 256 : 128;
mnemonic = credentials.mnemonic ?? bip39.generateMnemonic(strength: strength);
break;
} }
final wallet = NanoWallet( final wallet = NanoWallet(

View file

@ -24,7 +24,7 @@ class PolygonWalletService extends EVMChainWalletService<PolygonWallet> {
Future<PolygonWallet> create(EVMChainNewWalletCredentials credentials, {bool? isTestnet}) async { Future<PolygonWallet> create(EVMChainNewWalletCredentials credentials, {bool? isTestnet}) async {
final strength = credentials.seedPhraseLength == 24 ? 256 : 128; final strength = credentials.seedPhraseLength == 24 ? 256 : 128;
final mnemonic = bip39.generateMnemonic(strength: strength); final mnemonic = credentials.mnemonic ?? bip39.generateMnemonic(strength: strength);
final wallet = PolygonWallet( final wallet = PolygonWallet(
walletInfo: credentials.walletInfo!, walletInfo: credentials.walletInfo!,

View file

@ -2,8 +2,19 @@ import 'package:cw_core/wallet_credentials.dart';
import 'package:cw_core/wallet_info.dart'; import 'package:cw_core/wallet_info.dart';
class SolanaNewWalletCredentials extends WalletCredentials { class SolanaNewWalletCredentials extends WalletCredentials {
SolanaNewWalletCredentials({required String name, WalletInfo? walletInfo, String? password}) SolanaNewWalletCredentials({
: super(name: name, walletInfo: walletInfo, password: password); required String name,
WalletInfo? walletInfo,
String? password,
String? parentAddress,
this.mnemonic,
}) : super(
name: name,
walletInfo: walletInfo,
password: password,
parentAddress: parentAddress,
);
final String? mnemonic;
} }
class SolanaRestoreWalletFromSeedCredentials extends WalletCredentials { class SolanaRestoreWalletFromSeedCredentials extends WalletCredentials {

View file

@ -27,7 +27,7 @@ class SolanaWalletService extends WalletService<SolanaNewWalletCredentials,
Future<SolanaWallet> create(SolanaNewWalletCredentials credentials, {bool? isTestnet}) async { Future<SolanaWallet> create(SolanaNewWalletCredentials credentials, {bool? isTestnet}) async {
final strength = credentials.seedPhraseLength == 24 ? 256 : 128; final strength = credentials.seedPhraseLength == 24 ? 256 : 128;
final mnemonic = bip39.generateMnemonic(strength: strength); final mnemonic = credentials.mnemonic ?? bip39.generateMnemonic(strength: strength);
final wallet = SolanaWallet( final wallet = SolanaWallet(
walletInfo: credentials.walletInfo!, walletInfo: credentials.walletInfo!,

View file

@ -2,8 +2,20 @@ import 'package:cw_core/wallet_credentials.dart';
import 'package:cw_core/wallet_info.dart'; import 'package:cw_core/wallet_info.dart';
class TronNewWalletCredentials extends WalletCredentials { class TronNewWalletCredentials extends WalletCredentials {
TronNewWalletCredentials({required String name, WalletInfo? walletInfo, String? password}) TronNewWalletCredentials({
: super(name: name, walletInfo: walletInfo, password: password); required String name,
WalletInfo? walletInfo,
String? password,
this.mnemonic,
String? parentAddress,
}) : super(
name: name,
walletInfo: walletInfo,
password: password,
parentAddress: parentAddress,
);
final String? mnemonic;
} }
class TronRestoreWalletFromSeedCredentials extends WalletCredentials { class TronRestoreWalletFromSeedCredentials extends WalletCredentials {

View file

@ -39,7 +39,7 @@ class TronWalletService extends WalletService<
}) async { }) async {
final strength = credentials.seedPhraseLength == 24 ? 256 : 128; final strength = credentials.seedPhraseLength == 24 ? 256 : 128;
final mnemonic = bip39.generateMnemonic(strength: strength); final mnemonic = credentials.mnemonic ?? bip39.generateMnemonic(strength: strength);
final wallet = TronWallet( final wallet = TronWallet(
walletInfo: credentials.walletInfo!, walletInfo: credentials.walletInfo!,

View file

@ -3,41 +3,10 @@ PODS:
- Flutter - Flutter
- MTBBarcodeScanner - MTBBarcodeScanner
- SwiftProtobuf - SwiftProtobuf
- BigInt (5.2.0)
- connectivity_plus (0.0.1): - connectivity_plus (0.0.1):
- Flutter - Flutter
- ReachabilitySwift - ReachabilitySwift
- CryptoSwift (1.8.2) - CryptoSwift (1.8.2)
- cw_haven (0.0.1):
- cw_haven/Boost (= 0.0.1)
- cw_haven/Haven (= 0.0.1)
- cw_haven/OpenSSL (= 0.0.1)
- cw_haven/Sodium (= 0.0.1)
- cw_shared_external
- Flutter
- cw_haven/Boost (0.0.1):
- cw_shared_external
- Flutter
- cw_haven/Haven (0.0.1):
- cw_shared_external
- Flutter
- cw_haven/OpenSSL (0.0.1):
- cw_shared_external
- Flutter
- cw_haven/Sodium (0.0.1):
- cw_shared_external
- Flutter
- cw_shared_external (0.0.1):
- cw_shared_external/Boost (= 0.0.1)
- cw_shared_external/OpenSSL (= 0.0.1)
- cw_shared_external/Sodium (= 0.0.1)
- Flutter
- cw_shared_external/Boost (0.0.1):
- Flutter
- cw_shared_external/OpenSSL (0.0.1):
- Flutter
- cw_shared_external/Sodium (0.0.1):
- Flutter
- device_display_brightness (0.0.1): - device_display_brightness (0.0.1):
- Flutter - Flutter
- device_info_plus (0.0.1): - device_info_plus (0.0.1):
@ -99,8 +68,6 @@ PODS:
- Flutter - Flutter
- MTBBarcodeScanner (5.0.11) - MTBBarcodeScanner (5.0.11)
- OrderedSet (5.0.0) - OrderedSet (5.0.0)
- package_info (0.0.1):
- Flutter
- package_info_plus (0.4.5): - package_info_plus (0.4.5):
- Flutter - Flutter
- path_provider_foundation (0.0.1): - path_provider_foundation (0.0.1):
@ -131,9 +98,6 @@ PODS:
- Toast (4.1.1) - Toast (4.1.1)
- uni_links (0.0.1): - uni_links (0.0.1):
- Flutter - Flutter
- UnstoppableDomainsResolution (4.0.0):
- BigInt
- CryptoSwift
- url_launcher_ios (0.0.1): - url_launcher_ios (0.0.1):
- Flutter - Flutter
- wakelock_plus (0.0.1): - wakelock_plus (0.0.1):
@ -145,8 +109,6 @@ DEPENDENCIES:
- barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`) - barcode_scan2 (from `.symlinks/plugins/barcode_scan2/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- CryptoSwift - CryptoSwift
- cw_haven (from `.symlinks/plugins/cw_haven/ios`)
- cw_shared_external (from `.symlinks/plugins/cw_shared_external/ios`)
- device_display_brightness (from `.symlinks/plugins/device_display_brightness/ios`) - device_display_brightness (from `.symlinks/plugins/device_display_brightness/ios`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- devicelocale (from `.symlinks/plugins/devicelocale/ios`) - devicelocale (from `.symlinks/plugins/devicelocale/ios`)
@ -158,7 +120,6 @@ DEPENDENCIES:
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- in_app_review (from `.symlinks/plugins/in_app_review/ios`) - in_app_review (from `.symlinks/plugins/in_app_review/ios`)
- package_info (from `.symlinks/plugins/package_info/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
@ -168,14 +129,12 @@ DEPENDENCIES:
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- sp_scanner (from `.symlinks/plugins/sp_scanner/ios`) - sp_scanner (from `.symlinks/plugins/sp_scanner/ios`)
- uni_links (from `.symlinks/plugins/uni_links/ios`) - uni_links (from `.symlinks/plugins/uni_links/ios`)
- UnstoppableDomainsResolution (~> 4.0.0)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
- wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`) - wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`)
- workmanager (from `.symlinks/plugins/workmanager/ios`) - workmanager (from `.symlinks/plugins/workmanager/ios`)
SPEC REPOS: SPEC REPOS:
https://github.com/CocoaPods/Specs.git: https://github.com/CocoaPods/Specs.git:
- BigInt
- CryptoSwift - CryptoSwift
- DKImagePickerController - DKImagePickerController
- DKPhotoGallery - DKPhotoGallery
@ -187,17 +146,12 @@ SPEC REPOS:
- SwiftProtobuf - SwiftProtobuf
- SwiftyGif - SwiftyGif
- Toast - Toast
- UnstoppableDomainsResolution
EXTERNAL SOURCES: EXTERNAL SOURCES:
barcode_scan2: barcode_scan2:
:path: ".symlinks/plugins/barcode_scan2/ios" :path: ".symlinks/plugins/barcode_scan2/ios"
connectivity_plus: connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/ios" :path: ".symlinks/plugins/connectivity_plus/ios"
cw_haven:
:path: ".symlinks/plugins/cw_haven/ios"
cw_shared_external:
:path: ".symlinks/plugins/cw_shared_external/ios"
device_display_brightness: device_display_brightness:
:path: ".symlinks/plugins/device_display_brightness/ios" :path: ".symlinks/plugins/device_display_brightness/ios"
device_info_plus: device_info_plus:
@ -220,8 +174,6 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/fluttertoast/ios" :path: ".symlinks/plugins/fluttertoast/ios"
in_app_review: in_app_review:
:path: ".symlinks/plugins/in_app_review/ios" :path: ".symlinks/plugins/in_app_review/ios"
package_info:
:path: ".symlinks/plugins/package_info/ios"
package_info_plus: package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios" :path: ".symlinks/plugins/package_info_plus/ios"
path_provider_foundation: path_provider_foundation:
@ -249,11 +201,8 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS: SPEC CHECKSUMS:
barcode_scan2: 0af2bb63c81b4565aab6cd78278e4c0fa136dbb0 barcode_scan2: 0af2bb63c81b4565aab6cd78278e4c0fa136dbb0
BigInt: f668a80089607f521586bbe29513d708491ef2f7
connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d
CryptoSwift: c63a805d8bb5e5538e88af4e44bb537776af11ea CryptoSwift: c63a805d8bb5e5538e88af4e44bb537776af11ea
cw_haven: b3e54e1fbe7b8e6fda57a93206bc38f8e89b898a
cw_shared_external: 2972d872b8917603478117c9957dfca611845a92
device_display_brightness: 1510e72c567a1f6ce6ffe393dcd9afd1426034f7 device_display_brightness: 1510e72c567a1f6ce6ffe393dcd9afd1426034f7
device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6 device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6
devicelocale: b22617f40038496deffba44747101255cee005b0 devicelocale: b22617f40038496deffba44747101255cee005b0
@ -269,7 +218,6 @@ SPEC CHECKSUMS:
in_app_review: 318597b3a06c22bb46dc454d56828c85f444f99d in_app_review: 318597b3a06c22bb46dc454d56828c85f444f99d
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6 permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
@ -285,11 +233,10 @@ SPEC CHECKSUMS:
SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e
uni_links: d97da20c7701486ba192624d99bffaaffcfc298a uni_links: d97da20c7701486ba192624d99bffaaffcfc298a
UnstoppableDomainsResolution: c3c67f4d0a5e2437cb00d4bd50c2e00d6e743841
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1 wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1
workmanager: 0afdcf5628bbde6924c21af7836fed07b42e30e6 workmanager: 0afdcf5628bbde6924c21af7836fed07b42e30e6
PODFILE CHECKSUM: a2fe518be61cdbdc5b0e2da085ab543d556af2d3 PODFILE CHECKSUM: e448f662d4c41f0c0b1ccbb78afd57dbf895a597
COCOAPODS: 1.15.2 COCOAPODS: 1.15.2

View file

@ -28,10 +28,22 @@ class CWBitcoin extends Bitcoin {
name: name, password: password, wif: wif, walletInfo: walletInfo); name: name, password: password, wif: wif, walletInfo: walletInfo);
@override @override
WalletCredentials createBitcoinNewWalletCredentials( WalletCredentials createBitcoinNewWalletCredentials({
{required String name, WalletInfo? walletInfo, String? password, String? passphrase}) => required String name,
WalletInfo? walletInfo,
String? password,
String? passphrase,
String? mnemonic,
String? parentAddress,
}) =>
BitcoinNewWalletCredentials( BitcoinNewWalletCredentials(
name: name, walletInfo: walletInfo, password: password, passphrase: passphrase); name: name,
walletInfo: walletInfo,
password: password,
passphrase: passphrase,
mnemonic: mnemonic,
parentAddress: parentAddress,
);
@override @override
WalletCredentials createBitcoinHardwareWalletCredentials( WalletCredentials createBitcoinHardwareWalletCredentials(

View file

@ -16,9 +16,17 @@ class CWBitcoinCash extends BitcoinCash {
WalletInfo? walletInfo, WalletInfo? walletInfo,
String? password, String? password,
String? passphrase, String? passphrase,
String? mnemonic,
String? parentAddress,
}) => }) =>
BitcoinCashNewWalletCredentials( BitcoinCashNewWalletCredentials(
name: name, walletInfo: walletInfo, password: password, passphrase: passphrase); name: name,
walletInfo: walletInfo,
password: password,
passphrase: passphrase,
parentAddress: parentAddress,
mnemonic: mnemonic,
);
@override @override
WalletCredentials createBitcoinCashRestoreWalletFromSeedCredentials( WalletCredentials createBitcoinCashRestoreWalletFromSeedCredentials(

View file

@ -0,0 +1,15 @@
import 'package:cw_core/wallet_type.dart';
class NewWalletArguments {
final WalletType type;
final String? mnemonic;
final String? parentAddress;
final bool isChildWallet;
NewWalletArguments({
required this.type,
this.parentAddress,
this.mnemonic,
this.isChildWallet = false,
});
}

View file

@ -0,0 +1,14 @@
import 'package:cw_core/wallet_type.dart';
import 'package:flutter/material.dart';
class NewWalletTypeArguments {
final void Function(BuildContext, WalletType)? onTypeSelected;
final bool isCreate;
final bool isHardwareWallet;
NewWalletTypeArguments({
required this.onTypeSelected,
required this.isCreate,
required this.isHardwareWallet,
});
}

View file

@ -12,10 +12,12 @@ import 'package:cake_wallet/buy/moonpay/moonpay_provider.dart';
import 'package:cake_wallet/buy/onramper/onramper_buy_provider.dart'; import 'package:cake_wallet/buy/onramper/onramper_buy_provider.dart';
import 'package:cake_wallet/buy/order.dart'; import 'package:cake_wallet/buy/order.dart';
import 'package:cake_wallet/buy/payfura/payfura_buy_provider.dart'; import 'package:cake_wallet/buy/payfura/payfura_buy_provider.dart';
import 'package:cake_wallet/core/new_wallet_arguments.dart';
import 'package:cake_wallet/buy/robinhood/robinhood_buy_provider.dart'; import 'package:cake_wallet/buy/robinhood/robinhood_buy_provider.dart';
import 'package:cake_wallet/core/auth_service.dart'; import 'package:cake_wallet/core/auth_service.dart';
import 'package:cake_wallet/core/backup_service.dart'; import 'package:cake_wallet/core/backup_service.dart';
import 'package:cake_wallet/core/key_service.dart'; import 'package:cake_wallet/core/key_service.dart';
import 'package:cake_wallet/core/new_wallet_type_arguments.dart';
import 'package:cake_wallet/core/secure_storage.dart'; import 'package:cake_wallet/core/secure_storage.dart';
import 'package:cake_wallet/core/totp_request_details.dart'; import 'package:cake_wallet/core/totp_request_details.dart';
import 'package:cake_wallet/core/wallet_connect/wallet_connect_key_service.dart'; import 'package:cake_wallet/core/wallet_connect/wallet_connect_key_service.dart';
@ -30,6 +32,8 @@ import 'package:cake_wallet/entities/contact.dart';
import 'package:cake_wallet/entities/contact_record.dart'; import 'package:cake_wallet/entities/contact_record.dart';
import 'package:cake_wallet/entities/exchange_api_mode.dart'; import 'package:cake_wallet/entities/exchange_api_mode.dart';
import 'package:cake_wallet/entities/parse_address_from_domain.dart'; import 'package:cake_wallet/entities/parse_address_from_domain.dart';
import 'package:cake_wallet/entities/wallet_edit_page_arguments.dart';
import 'package:cake_wallet/entities/wallet_manager.dart';
import 'package:cake_wallet/src/screens/receive/address_list_page.dart'; import 'package:cake_wallet/src/screens/receive/address_list_page.dart';
import 'package:cake_wallet/view_model/link_view_model.dart'; import 'package:cake_wallet/view_model/link_view_model.dart';
import 'package:cake_wallet/tron/tron.dart'; import 'package:cake_wallet/tron/tron.dart';
@ -145,7 +149,9 @@ import 'package:cake_wallet/view_model/cake_pay/cake_pay_cards_list_view_model.d
import 'package:cake_wallet/view_model/cake_pay/cake_pay_purchase_view_model.dart'; import 'package:cake_wallet/view_model/cake_pay/cake_pay_purchase_view_model.dart';
import 'package:cake_wallet/view_model/nano_account_list/nano_account_edit_or_create_view_model.dart'; import 'package:cake_wallet/view_model/nano_account_list/nano_account_edit_or_create_view_model.dart';
import 'package:cake_wallet/view_model/nano_account_list/nano_account_list_view_model.dart'; import 'package:cake_wallet/view_model/nano_account_list/nano_account_list_view_model.dart';
import 'package:cake_wallet/view_model/new_wallet_type_view_model.dart';
import 'package:cake_wallet/view_model/node_list/pow_node_list_view_model.dart'; import 'package:cake_wallet/view_model/node_list/pow_node_list_view_model.dart';
import 'package:cake_wallet/view_model/wallet_groups_display_view_model.dart';
import 'package:cake_wallet/view_model/seed_settings_view_model.dart'; import 'package:cake_wallet/view_model/seed_settings_view_model.dart';
import 'package:cake_wallet/view_model/set_up_2fa_viewmodel.dart'; import 'package:cake_wallet/view_model/set_up_2fa_viewmodel.dart';
import 'package:cake_wallet/view_model/restore/restore_from_qr_vm.dart'; import 'package:cake_wallet/view_model/restore/restore_from_qr_vm.dart';
@ -157,7 +163,6 @@ import 'package:cake_wallet/view_model/advanced_privacy_settings_view_model.dart
import 'package:cake_wallet/view_model/settings/trocador_providers_view_model.dart'; import 'package:cake_wallet/view_model/settings/trocador_providers_view_model.dart';
import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_item.dart'; import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_item.dart';
import 'package:cake_wallet/view_model/wallet_list/wallet_edit_view_model.dart'; import 'package:cake_wallet/view_model/wallet_list/wallet_edit_view_model.dart';
import 'package:cake_wallet/view_model/wallet_list/wallet_list_item.dart';
import 'package:cake_wallet/view_model/wallet_restore_choose_derivation_view_model.dart'; import 'package:cake_wallet/view_model/wallet_restore_choose_derivation_view_model.dart';
import 'package:cw_core/nano_account.dart'; import 'package:cw_core/nano_account.dart';
import 'package:cw_core/unspent_coins_info.dart'; import 'package:cw_core/unspent_coins_info.dart';
@ -358,13 +363,31 @@ Future<void> setup({
getIt.get<KeyService>(), getIt.get<KeyService>(),
(WalletType type) => getIt.get<WalletService>(param1: type))); (WalletType type) => getIt.get<WalletService>(param1: type)));
getIt.registerFactoryParam<WalletNewVM, WalletType, void>((type, _) => WalletNewVM( getIt.registerFactoryParam<WalletNewVM, NewWalletArguments, void>(
(newWalletArgs, _) => WalletNewVM(
getIt.get<AppStore>(), getIt.get<AppStore>(),
getIt.get<WalletCreationService>(param1: type), getIt.get<WalletCreationService>(param1:newWalletArgs.type),
_walletInfoSource, _walletInfoSource,
getIt.get<AdvancedPrivacySettingsViewModel>(param1: type), getIt.get<AdvancedPrivacySettingsViewModel>(param1: newWalletArgs.type),
getIt.get<SeedSettingsViewModel>(), getIt.get<SeedSettingsViewModel>(),
type: type)); newWalletArguments: newWalletArgs,));
getIt.registerFactory<NewWalletTypeViewModel>(() => NewWalletTypeViewModel(_walletInfoSource));
getIt.registerFactory<WalletManager>(
() => WalletManager(_walletInfoSource, getIt.get<SharedPreferences>()),
);
getIt.registerFactoryParam<WalletGroupsDisplayViewModel, WalletType, void>(
(type, _) => WalletGroupsDisplayViewModel(
getIt.get<AppStore>(),
getIt.get<WalletLoadingService>(),
getIt.get<WalletManager>(),
getIt.get<WalletListViewModel>(),
type: type,
),
);
getIt.registerFactoryParam<WalletUnlockPage, WalletUnlockArguments, bool>((args, closable) { getIt.registerFactoryParam<WalletUnlockPage, WalletUnlockArguments, bool>((args, closable) {
return WalletUnlockPage( return WalletUnlockPage(
@ -723,6 +746,7 @@ Future<void> setup({
_walletInfoSource, _walletInfoSource,
getIt.get<AppStore>(), getIt.get<AppStore>(),
getIt.get<WalletLoadingService>(), getIt.get<WalletLoadingService>(),
getIt.get<WalletManager>(),
), ),
); );
} else { } else {
@ -733,6 +757,7 @@ Future<void> setup({
_walletInfoSource, _walletInfoSource,
getIt.get<AppStore>(), getIt.get<AppStore>(),
getIt.get<WalletLoadingService>(), getIt.get<WalletLoadingService>(),
getIt.get<WalletManager>(),
), ),
); );
} }
@ -743,17 +768,28 @@ Future<void> setup({
)); ));
getIt.registerFactoryParam<WalletEditViewModel, WalletListViewModel, void>( getIt.registerFactoryParam<WalletEditViewModel, WalletListViewModel, void>(
(WalletListViewModel walletListViewModel, _) => (WalletListViewModel walletListViewModel, _) => WalletEditViewModel(
WalletEditViewModel(walletListViewModel, getIt.get<WalletLoadingService>())); walletListViewModel,
getIt.get<WalletLoadingService>(),
getIt.get<WalletManager>(),
),
);
getIt.registerFactoryParam<WalletEditPage, WalletEditPageArguments, void>((arguments, _) {
getIt.registerFactoryParam<WalletEditPage, List<dynamic>, void>((args, _) {
final walletListViewModel = args.first as WalletListViewModel;
final editingWallet = args.last as WalletListItem;
return WalletEditPage( return WalletEditPage(
walletEditViewModel: getIt.get<WalletEditViewModel>(param1: walletListViewModel), pageArguments: WalletEditPageArguments(
walletEditViewModel: getIt.get<WalletEditViewModel>(param1: arguments.walletListViewModel),
authService: getIt.get<AuthService>(), authService: getIt.get<AuthService>(),
walletNewVM: getIt.get<WalletNewVM>(param1: editingWallet.type), walletNewVM: getIt.get<WalletNewVM>(
editingWallet: editingWallet); param1: NewWalletArguments(type: arguments.editingWallet.type),
),
editingWallet: arguments.editingWallet,
isWalletGroup: arguments.isWalletGroup,
groupName: arguments.groupName,
parentAddress: arguments.parentAddress,
),
);
}); });
getIt.registerFactory<NanoAccountListViewModel>(() { getIt.registerFactory<NanoAccountListViewModel>(() {
@ -1060,15 +1096,11 @@ Future<void> setup({
transactionDetailsViewModel: transactionDetailsViewModel:
getIt.get<TransactionDetailsViewModel>(param1: transactionInfo))); getIt.get<TransactionDetailsViewModel>(param1: transactionInfo)));
getIt.registerFactoryParam<NewWalletTypePage, void Function(BuildContext, WalletType), getIt.registerFactoryParam<NewWalletTypePage, NewWalletTypeArguments, void>(
List<bool>?>((param1, additionalParams) { (newWalletTypeArguments, _) {
final isCreate = additionalParams?[0] ?? true;
final isHardwareWallet = additionalParams?[1] ?? false;
return NewWalletTypePage( return NewWalletTypePage(
onTypeSelected: param1, newWalletTypeArguments: newWalletTypeArguments,
isCreate: isCreate, newWalletTypeViewModel: getIt.get<NewWalletTypeViewModel>(),
isHardwareWallet: isHardwareWallet,
); );
}); });

View file

@ -79,6 +79,7 @@ class PreferencesKey {
static const autoGenerateSubaddressStatusKey = 'auto_generate_subaddress_status'; static const autoGenerateSubaddressStatusKey = 'auto_generate_subaddress_status';
static const moneroSeedType = 'monero_seed_type'; static const moneroSeedType = 'monero_seed_type';
static const bitcoinSeedType = 'bitcoin_seed_type'; static const bitcoinSeedType = 'bitcoin_seed_type';
static const nanoSeedType = 'nano_seed_type';
static const clearnetDonationLink = 'clearnet_donation_link'; static const clearnetDonationLink = 'clearnet_donation_link';
static const onionDonationLink = 'onion_donation_link'; static const onionDonationLink = 'onion_donation_link';
static const donationLinkWalletName = 'donation_link_wallet_name'; static const donationLinkWalletName = 'donation_link_wallet_name';

View file

@ -65,3 +65,28 @@ class BitcoinSeedType extends EnumerableItem<int> with Serializable<int> {
} }
} }
} }
class NanoSeedType extends EnumerableItem<int> with Serializable<int> {
const NanoSeedType(this.type, {required String title, required int raw})
: super(title: title, raw: raw);
final DerivationType type;
static const all = [NanoSeedType.nanoStandard, NanoSeedType.bip39];
static const defaultDerivationType = bip39;
static const nanoStandard = NanoSeedType(DerivationType.nano, raw: 0, title: 'Nano');
static const bip39 = NanoSeedType(DerivationType.bip39, raw: 1, title: 'BIP39');
static NanoSeedType deserialize({required int raw}) {
switch (raw) {
case 0:
return nanoStandard;
case 1:
return bip39;
default:
throw Exception('Unexpected token: $raw for SeedType deserialize');
}
}
}

View file

@ -0,0 +1,28 @@
import 'package:cake_wallet/core/auth_service.dart';
import 'package:cake_wallet/view_model/wallet_list/wallet_edit_view_model.dart';
import 'package:cake_wallet/view_model/wallet_list/wallet_list_item.dart';
import 'package:cake_wallet/view_model/wallet_list/wallet_list_view_model.dart';
import 'package:cake_wallet/view_model/wallet_new_vm.dart';
class WalletEditPageArguments {
WalletEditPageArguments({
required this.editingWallet,
this.isWalletGroup = false,
this.walletListViewModel,
this.groupName = '',
this.parentAddress = '',
this.walletEditViewModel,
this.walletNewVM,
this.authService,
});
final WalletListItem editingWallet;
final bool isWalletGroup;
final String groupName;
final String parentAddress;
final WalletListViewModel? walletListViewModel;
final WalletEditViewModel? walletEditViewModel;
final WalletNewVM? walletNewVM;
final AuthService? authService;
}

View file

@ -0,0 +1,21 @@
import 'package:cw_core/wallet_info.dart';
class WalletGroup {
WalletGroup(this.parentAddress) : wallets = [];
/// Main identifier for each group, compulsory.
final String parentAddress;
/// Child wallets that share the same parent address within this group
List<WalletInfo> wallets;
/// Custom name for the group, editable for multi-child wallet groups
String? groupName;
/// Allows editing of the group name (only for multi-child groups).
void setCustomName(String name) {
if (wallets.length > 1) {
groupName = name;
}
}
}

View file

@ -0,0 +1,110 @@
import 'package:cake_wallet/entities/wallet_group.dart';
import 'package:cw_core/wallet_info.dart';
import 'package:hive/hive.dart';
import 'package:shared_preferences/shared_preferences.dart';
class WalletManager {
WalletManager(
this._walletInfoSource,
this._sharedPreferences,
);
final Box<WalletInfo> _walletInfoSource;
final SharedPreferences _sharedPreferences;
final List<WalletGroup> walletGroups = [];
/// Categorize wallets into groups based on their parentAddress.
///
/// Update the lead wallet for each group and clean up empty groups
/// i.e remove group if there's no lead wallet (i.e, no wallets left)
void updateWalletGroups() {
walletGroups.clear();
for (var walletInfo in _walletInfoSource.values) {
final group = _getOrCreateGroup(_resolveParentAddress(walletInfo));
group.wallets.add(walletInfo);
}
walletGroups.removeWhere((group) => group.wallets.isEmpty);
_loadCustomGroupNames();
}
/// Function to determine the correct parentAddress for a wallet.
///
/// If it's a parent wallet (parentAddress is null),
/// use its own address as parentAddress.
String _resolveParentAddress(WalletInfo walletInfo) {
return walletInfo.parentAddress ?? walletInfo.address;
}
/// Check if a group with the parentAddress already exists,
/// If no group exists, create a new one.
///
WalletGroup _getOrCreateGroup(String parentAddress) {
return walletGroups.firstWhere(
(group) => group.parentAddress == parentAddress,
orElse: () {
final newGroup = WalletGroup(parentAddress);
walletGroups.add(newGroup);
return newGroup;
},
);
}
/// Add a new wallet and update lead wallet after adding.
void addWallet(WalletInfo walletInfo) {
final group = _getOrCreateGroup(_resolveParentAddress(walletInfo));
group.wallets.add(walletInfo);
}
/// Removes a wallet from a group i.e when it's deleted.
///
/// Update lead wallet after removing,
/// Remove the group if it's empty (i.e., no lead wallet).
void removeWallet(WalletInfo walletInfo) {
final group = _getOrCreateGroup(_resolveParentAddress(walletInfo));
group.wallets.remove(walletInfo);
if (group.wallets.isEmpty) {
walletGroups.remove(group);
}
}
/// Returns all the child wallets within a group.
///
/// If the group is not found, returns an empty group with no wallets.
List<WalletInfo> getWalletsInGroup(String parentAddress) {
return walletGroups
.firstWhere(
(group) => group.parentAddress == parentAddress,
orElse: () => WalletGroup(parentAddress),
)
.wallets;
}
/// Iterate through all groups and load their custom names from storage
void _loadCustomGroupNames() {
for (var group in walletGroups) {
final groupName = _sharedPreferences.getString('wallet_group_name_${group.parentAddress}');
if (groupName != null && group.wallets.length > 1) {
group.groupName = groupName; // Restore custom name
}
}
}
/// Save custom name for a group
void _saveCustomGroupName(String parentAddress, String name) {
_sharedPreferences.setString('wallet_group_name_$parentAddress', name);
}
// Set custom group name and persist it
void setGroupName(String parentAddress, String name) {
if (parentAddress.isEmpty || name.isEmpty) return;
final group = walletGroups.firstWhere((group) => group.parentAddress == parentAddress);
group.setCustomName(name);
_saveCustomGroupName(parentAddress, name); // Persist the custom name
}
}

View file

@ -10,10 +10,18 @@ class CWEthereum extends Ethereum {
@override @override
WalletCredentials createEthereumNewWalletCredentials({ WalletCredentials createEthereumNewWalletCredentials({
required String name, required String name,
String? mnemonic,
String? parentAddress,
WalletInfo? walletInfo, WalletInfo? walletInfo,
String? password, String? password,
}) => }) =>
EVMChainNewWalletCredentials(name: name, walletInfo: walletInfo, password: password); EVMChainNewWalletCredentials(
name: name,
walletInfo: walletInfo,
password: password,
parentAddress: parentAddress,
mnemonic: mnemonic,
);
@override @override
WalletCredentials createEthereumRestoreWalletFromSeedCredentials({ WalletCredentials createEthereumRestoreWalletFromSeedCredentials({

View file

@ -91,12 +91,17 @@ class CWNano extends Nano {
@override @override
WalletCredentials createNanoNewWalletCredentials({ WalletCredentials createNanoNewWalletCredentials({
required String name, required String name,
WalletInfo? walletInfo,
String? password, String? password,
String? mnemonic,
String? parentAddress,
}) => }) =>
NanoNewWalletCredentials( NanoNewWalletCredentials(
name: name, name: name,
password: password, password: password,
derivationType: DerivationType.nano, mnemonic: mnemonic,
parentAddress: parentAddress,
walletInfo: walletInfo,
); );
@override @override

View file

@ -8,12 +8,19 @@ class CWPolygon extends Polygon {
PolygonWalletService(walletInfoSource, isDirect, client: PolygonClient()); PolygonWalletService(walletInfoSource, isDirect, client: PolygonClient());
@override @override
WalletCredentials createPolygonNewWalletCredentials({ WalletCredentials createPolygonNewWalletCredentials(
required String name, {required String name,
WalletInfo? walletInfo, String? mnemonic,
String? password String? parentAddress,
}) => WalletInfo? walletInfo,
EVMChainNewWalletCredentials(name: name, walletInfo: walletInfo, password: password); String? password}) =>
EVMChainNewWalletCredentials(
name: name,
walletInfo: walletInfo,
password: password,
mnemonic: mnemonic,
parentAddress: parentAddress,
);
@override @override
WalletCredentials createPolygonRestoreWalletFromSeedCredentials({ WalletCredentials createPolygonRestoreWalletFromSeedCredentials({
@ -77,21 +84,21 @@ class CWPolygon extends Polygon {
int? feeRate, int? feeRate,
}) => }) =>
EVMChainTransactionCredentials( EVMChainTransactionCredentials(
outputs outputs
.map((out) => OutputInfo( .map((out) => OutputInfo(
fiatAmount: out.fiatAmount, fiatAmount: out.fiatAmount,
cryptoAmount: out.cryptoAmount, cryptoAmount: out.cryptoAmount,
address: out.address, address: out.address,
note: out.note, note: out.note,
sendAll: out.sendAll, sendAll: out.sendAll,
extractedAddress: out.extractedAddress, extractedAddress: out.extractedAddress,
isParsedAddress: out.isParsedAddress, isParsedAddress: out.isParsedAddress,
formattedCryptoAmount: out.formattedCryptoAmount)) formattedCryptoAmount: out.formattedCryptoAmount))
.toList(), .toList(),
priority: priority as EVMChainTransactionPriority, priority: priority as EVMChainTransactionPriority,
currency: currency, currency: currency,
feeRate: feeRate, feeRate: feeRate,
); );
Object createPolygonTransactionCredentialsRaw( Object createPolygonTransactionCredentialsRaw(
List<OutputInfo> outputs, { List<OutputInfo> outputs, {

View file

@ -0,0 +1,21 @@
import 'package:cw_core/wallet_type.dart';
bool isBIP39Wallet(WalletType walletType) {
switch (walletType) {
case WalletType.ethereum:
case WalletType.polygon:
case WalletType.solana:
case WalletType.tron:
case WalletType.bitcoin:
case WalletType.litecoin:
case WalletType.bitcoinCash:
case WalletType.nano:
case WalletType.banano:
return true;
case WalletType.monero:
case WalletType.wownero:
case WalletType.haven:
case WalletType.none:
return false;
}
}

View file

@ -1,11 +1,14 @@
import 'package:cake_wallet/anonpay/anonpay_info_base.dart'; import 'package:cake_wallet/anonpay/anonpay_info_base.dart';
import 'package:cake_wallet/anonpay/anonpay_invoice_info.dart'; import 'package:cake_wallet/anonpay/anonpay_invoice_info.dart';
import 'package:cake_wallet/core/new_wallet_arguments.dart';
import 'package:cake_wallet/buy/order.dart'; import 'package:cake_wallet/buy/order.dart';
import 'package:cake_wallet/core/new_wallet_type_arguments.dart';
import 'package:cake_wallet/core/totp_request_details.dart'; import 'package:cake_wallet/core/totp_request_details.dart';
import 'package:cake_wallet/core/wallet_connect/web3wallet_service.dart'; import 'package:cake_wallet/core/wallet_connect/web3wallet_service.dart';
import 'package:cake_wallet/di.dart'; import 'package:cake_wallet/di.dart';
import 'package:cake_wallet/entities/contact_record.dart'; import 'package:cake_wallet/entities/contact_record.dart';
import 'package:cake_wallet/entities/qr_view_data.dart'; import 'package:cake_wallet/entities/qr_view_data.dart';
import 'package:cake_wallet/entities/wallet_edit_page_arguments.dart';
import 'package:cake_wallet/entities/wallet_nft_response.dart'; import 'package:cake_wallet/entities/wallet_nft_response.dart';
import 'package:cake_wallet/exchange/trade.dart'; import 'package:cake_wallet/exchange/trade.dart';
import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/generated/i18n.dart';
@ -40,9 +43,11 @@ import 'package:cake_wallet/src/screens/faq/faq_page.dart';
import 'package:cake_wallet/src/screens/monero_accounts/monero_account_edit_or_create_page.dart'; import 'package:cake_wallet/src/screens/monero_accounts/monero_account_edit_or_create_page.dart';
import 'package:cake_wallet/src/screens/nano/nano_change_rep_page.dart'; import 'package:cake_wallet/src/screens/nano/nano_change_rep_page.dart';
import 'package:cake_wallet/src/screens/nano_accounts/nano_account_edit_or_create_page.dart'; import 'package:cake_wallet/src/screens/nano_accounts/nano_account_edit_or_create_page.dart';
import 'package:cake_wallet/src/screens/new_wallet/wallet_group_display_page.dart';
import 'package:cake_wallet/src/screens/new_wallet/advanced_privacy_settings_page.dart'; import 'package:cake_wallet/src/screens/new_wallet/advanced_privacy_settings_page.dart';
import 'package:cake_wallet/src/screens/new_wallet/new_wallet_page.dart'; import 'package:cake_wallet/src/screens/new_wallet/new_wallet_page.dart';
import 'package:cake_wallet/src/screens/new_wallet/new_wallet_type_page.dart'; import 'package:cake_wallet/src/screens/new_wallet/new_wallet_type_page.dart';
import 'package:cake_wallet/src/screens/new_wallet/wallet_group_description_page.dart';
import 'package:cake_wallet/src/screens/nodes/node_create_or_edit_page.dart'; import 'package:cake_wallet/src/screens/nodes/node_create_or_edit_page.dart';
import 'package:cake_wallet/src/screens/nodes/pow_node_create_or_edit_page.dart'; import 'package:cake_wallet/src/screens/nodes/pow_node_create_or_edit_page.dart';
import 'package:cake_wallet/src/screens/order_details/order_details_page.dart'; import 'package:cake_wallet/src/screens/order_details/order_details_page.dart';
@ -104,6 +109,7 @@ import 'package:cake_wallet/view_model/dashboard/sign_view_model.dart';
import 'package:cake_wallet/view_model/hardware_wallet/ledger_view_model.dart'; import 'package:cake_wallet/view_model/hardware_wallet/ledger_view_model.dart';
import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart'; import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart';
import 'package:cake_wallet/view_model/node_list/node_create_or_edit_view_model.dart'; import 'package:cake_wallet/view_model/node_list/node_create_or_edit_view_model.dart';
import 'package:cake_wallet/view_model/wallet_groups_display_view_model.dart';
import 'package:cake_wallet/view_model/seed_settings_view_model.dart'; import 'package:cake_wallet/view_model/seed_settings_view_model.dart';
import 'package:cake_wallet/view_model/wallet_hardware_restore_view_model.dart'; import 'package:cake_wallet/view_model/wallet_hardware_restore_view_model.dart';
import 'package:cake_wallet/view_model/wallet_new_vm.dart'; import 'package:cake_wallet/view_model/wallet_new_vm.dart';
@ -134,7 +140,11 @@ Route<dynamic> createRoute(RouteSettings settings) {
if (SettingsStoreBase.walletPasswordDirectInput) { if (SettingsStoreBase.walletPasswordDirectInput) {
if (availableWalletTypes.length == 1) { if (availableWalletTypes.length == 1) {
return createRoute( return createRoute(
RouteSettings(name: Routes.newWallet, arguments: availableWalletTypes.first)); RouteSettings(
name: Routes.newWallet,
arguments: NewWalletArguments(type: availableWalletTypes.first),
),
);
} else { } else {
return createRoute(RouteSettings(name: Routes.newWalletType)); return createRoute(RouteSettings(name: Routes.newWalletType));
} }
@ -144,8 +154,10 @@ Route<dynamic> createRoute(RouteSettings settings) {
builder: (_) => builder: (_) =>
getIt.get<SetupPinCodePage>(param1: (PinCodeState<PinCodeWidget> context, dynamic _) { getIt.get<SetupPinCodePage>(param1: (PinCodeState<PinCodeWidget> context, dynamic _) {
if (availableWalletTypes.length == 1) { if (availableWalletTypes.length == 1) {
Navigator.of(context.context) Navigator.of(context.context).pushNamed(
.pushNamed(Routes.newWallet, arguments: availableWalletTypes.first); Routes.newWallet,
arguments: NewWalletArguments(type: availableWalletTypes.first),
);
} else { } else {
Navigator.of(context.context).pushNamed(Routes.newWalletType); Navigator.of(context.context).pushNamed(Routes.newWalletType);
} }
@ -154,17 +166,38 @@ Route<dynamic> createRoute(RouteSettings settings) {
case Routes.newWalletType: case Routes.newWalletType:
return CupertinoPageRoute<void>( return CupertinoPageRoute<void>(
builder: (_) => getIt.get<NewWalletTypePage>( builder: (_) => getIt.get<NewWalletTypePage>(
param1: (BuildContext context, WalletType type) => param1: NewWalletTypeArguments(
Navigator.of(context).pushNamed(Routes.newWallet, arguments: type))); onTypeSelected: (BuildContext context, WalletType type) =>
Navigator.of(context).pushNamed(
Routes.newWallet,
arguments: NewWalletArguments(type: type),
),
isCreate: true,
isHardwareWallet: false,
),
),
);
case Routes.walletGroupsDisplayPage:
final type = settings.arguments as WalletType;
final walletGroupsDisplayVM = getIt.get<WalletGroupsDisplayViewModel>(param1: type);
return CupertinoPageRoute<void>(builder: (_) => WalletGroupsDisplayPage(walletGroupsDisplayVM));
case Routes.newWallet: case Routes.newWallet:
final type = settings.arguments as WalletType; final args = settings.arguments as NewWalletArguments;
final walletNewVM = getIt.get<WalletNewVM>(param1: type);
final walletNewVM = getIt.get<WalletNewVM>(param1: args);
final seedSettingsViewModel = getIt.get<SeedSettingsViewModel>(); final seedSettingsViewModel = getIt.get<SeedSettingsViewModel>();
return CupertinoPageRoute<void>( return CupertinoPageRoute<void>(
builder: (_) => NewWalletPage(walletNewVM, seedSettingsViewModel)); builder: (_) => NewWalletPage(
walletNewVM,
seedSettingsViewModel,
isChildWallet: args.isChildWallet,
),
);
case Routes.chooseHardwareWalletAccount: case Routes.chooseHardwareWalletAccount:
final arguments = settings.arguments as List<dynamic>; final arguments = settings.arguments as List<dynamic>;
@ -185,10 +218,15 @@ Route<dynamic> createRoute(RouteSettings settings) {
case Routes.restoreWalletType: case Routes.restoreWalletType:
return CupertinoPageRoute<void>( return CupertinoPageRoute<void>(
builder: (_) => getIt.get<NewWalletTypePage>( builder: (_) => getIt.get<NewWalletTypePage>(
param1: (BuildContext context, WalletType type) => param1: NewWalletTypeArguments(
Navigator.of(context).pushNamed(Routes.restoreWallet, arguments: type), onTypeSelected: (BuildContext context, WalletType type) =>
param2: [false, false])); Navigator.of(context).pushNamed(Routes.restoreWallet, arguments: type),
isCreate: false,
isHardwareWallet: false,
),
),
);
case Routes.restoreOptions: case Routes.restoreOptions:
if (SettingsStoreBase.walletPasswordDirectInput) { if (SettingsStoreBase.walletPasswordDirectInput) {
@ -220,10 +258,15 @@ Route<dynamic> createRoute(RouteSettings settings) {
builder: (_) => getIt.get<WalletRestorePage>(param1: availableWalletTypes.first)); builder: (_) => getIt.get<WalletRestorePage>(param1: availableWalletTypes.first));
} else { } else {
return CupertinoPageRoute<void>( return CupertinoPageRoute<void>(
builder: (_) => getIt.get<NewWalletTypePage>( builder: (_) => getIt.get<NewWalletTypePage>(
param1: (BuildContext context, WalletType type) => param1: NewWalletTypeArguments(
Navigator.of(context).pushNamed(Routes.restoreWallet, arguments: type), onTypeSelected: (BuildContext context, WalletType type) =>
param2: [false, false])); Navigator.of(context).pushNamed(Routes.restoreWallet, arguments: type),
isCreate: false,
isHardwareWallet: false,
),
),
);
} }
case Routes.restoreWalletFromHardwareWallet: case Routes.restoreWalletFromHardwareWallet:
@ -252,23 +295,35 @@ Route<dynamic> createRoute(RouteSettings settings) {
)); ));
} else { } else {
return CupertinoPageRoute<void>( return CupertinoPageRoute<void>(
builder: (_) => getIt.get<NewWalletTypePage>( builder: (_) => getIt.get<NewWalletTypePage>(
param1: (BuildContext context, WalletType type) { param1: NewWalletTypeArguments(
final arguments = ConnectDevicePageParams( onTypeSelected: (BuildContext context, WalletType type) {
walletType: type, final arguments = ConnectDevicePageParams(
onConnectDevice: (BuildContext context, _) => Navigator.of(context) walletType: type,
.pushNamed(Routes.chooseHardwareWalletAccount, arguments: [type]), onConnectDevice: (BuildContext context, _) => Navigator.of(context)
); .pushNamed(Routes.chooseHardwareWalletAccount, arguments: [type]),
);
Navigator.of(context).pushNamed(Routes.connectDevices, arguments: arguments); Navigator.of(context).pushNamed(Routes.connectDevices, arguments: arguments);
}, },
param2: [false, true])); isCreate: false,
isHardwareWallet: true,
),
),
);
} }
case Routes.restoreWalletTypeFromQR: case Routes.restoreWalletTypeFromQR:
return CupertinoPageRoute<void>( return CupertinoPageRoute<void>(
builder: (_) => getIt.get<NewWalletTypePage>( builder: (_) => getIt.get<NewWalletTypePage>(
param1: (BuildContext context, WalletType type) => Navigator.of(context).pop(type))); param1: NewWalletTypeArguments(
onTypeSelected: (BuildContext context, WalletType type) =>
Navigator.of(context).pop(type),
isCreate: false,
isHardwareWallet: false,
),
),
);
case Routes.seed: case Routes.seed:
return MaterialPageRoute<void>( return MaterialPageRoute<void>(
@ -341,8 +396,10 @@ Route<dynamic> createRoute(RouteSettings settings) {
case Routes.walletEdit: case Routes.walletEdit:
return MaterialPageRoute<void>( return MaterialPageRoute<void>(
fullscreenDialog: true, fullscreenDialog: true,
builder: (_) => getIt.get<WalletEditPage>(param1: settings.arguments as List<dynamic>)); builder: (_) =>
getIt.get<WalletEditPage>(param1: settings.arguments as WalletEditPageArguments),
);
case Routes.auth: case Routes.auth:
return MaterialPageRoute<void>( return MaterialPageRoute<void>(
@ -592,12 +649,14 @@ Route<dynamic> createRoute(RouteSettings settings) {
final args = settings.arguments as Map<String, dynamic>; final args = settings.arguments as Map<String, dynamic>;
final type = args['type'] as WalletType; final type = args['type'] as WalletType;
final isFromRestore = args['isFromRestore'] as bool? ?? false; final isFromRestore = args['isFromRestore'] as bool? ?? false;
final isChildWallet = args['isChildWallet'] as bool? ?? false;
final useTestnet = args['useTestnet'] as bool; final useTestnet = args['useTestnet'] as bool;
final toggleTestnet = args['toggleTestnet'] as Function(bool? val); final toggleTestnet = args['toggleTestnet'] as Function(bool? val);
return CupertinoPageRoute<void>( return CupertinoPageRoute<void>(
builder: (_) => AdvancedPrivacySettingsPage( builder: (_) => AdvancedPrivacySettingsPage(
isFromRestore: isFromRestore, isFromRestore: isFromRestore,
isChildWallet: isChildWallet,
useTestnet: useTestnet, useTestnet: useTestnet,
toggleUseTestnet: toggleTestnet, toggleUseTestnet: toggleTestnet,
advancedPrivacySettingsViewModel: advancedPrivacySettingsViewModel:
@ -712,6 +771,15 @@ Route<dynamic> createRoute(RouteSettings settings) {
return MaterialPageRoute<void>( return MaterialPageRoute<void>(
builder: (_) => ConnectDevicePage(params, getIt.get<LedgerViewModel>())); builder: (_) => ConnectDevicePage(params, getIt.get<LedgerViewModel>()));
case Routes.walletGroupDescription:
final walletType = settings.arguments as WalletType;
return MaterialPageRoute<void>(
builder: (_) => WalletGroupDescriptionPage(
selectedWalletType: walletType,
),
);
default: default:
return MaterialPageRoute<void>( return MaterialPageRoute<void>(
builder: (_) => Scaffold( builder: (_) => Scaffold(

View file

@ -8,8 +8,7 @@ class Routes {
static const restoreWalletFromSeedKeys = '/restore_wallet_from_seeds_keys'; static const restoreWalletFromSeedKeys = '/restore_wallet_from_seeds_keys';
static const restoreWalletFromHardwareWallet = '/restore/hardware_wallet'; static const restoreWalletFromHardwareWallet = '/restore/hardware_wallet';
static const restoreWalletTypeFromQR = '/restore_wallet_from_qr_code'; static const restoreWalletTypeFromQR = '/restore_wallet_from_qr_code';
static const restoreWalletChooseDerivation = static const restoreWalletChooseDerivation = '/restore_wallet_choose_derivation';
'/restore_wallet_choose_derivation';
static const chooseHardwareWalletAccount = '/restore/hardware_wallet/accounts'; static const chooseHardwareWalletAccount = '/restore/hardware_wallet/accounts';
static const dashboard = '/dashboard'; static const dashboard = '/dashboard';
static const send = '/send'; static const send = '/send';
@ -99,11 +98,13 @@ class Routes {
static const editToken = '/edit_token'; static const editToken = '/edit_token';
static const manageNodes = '/manage_nodes'; static const manageNodes = '/manage_nodes';
static const managePowNodes = '/manage_pow_nodes'; static const managePowNodes = '/manage_pow_nodes';
static const walletConnectConnectionsListing = static const walletConnectConnectionsListing = '/wallet-connect-connections-listing';
'/wallet-connect-connections-listing';
static const nftDetailsPage = '/nft_details_page'; static const nftDetailsPage = '/nft_details_page';
static const importNFTPage = '/import_nft_page'; static const importNFTPage = '/import_nft_page';
static const torPage = '/tor_page'; static const torPage = '/tor_page';
static const signPage = '/sign_page'; static const signPage = '/sign_page';
static const connectDevices = '/device/connect'; static const connectDevices = '/device/connect';
static const walletGroupsDisplayPage = '/wallet_groups_display_page';
static const walletGroupDescription = '/wallet_group_description';
} }

View file

@ -10,10 +10,18 @@ class CWSolana extends Solana {
@override @override
WalletCredentials createSolanaNewWalletCredentials({ WalletCredentials createSolanaNewWalletCredentials({
required String name, required String name,
String? mnemonic,
String? parentAddress,
WalletInfo? walletInfo, WalletInfo? walletInfo,
String? password, String? password,
}) => }) =>
SolanaNewWalletCredentials(name: name, walletInfo: walletInfo, password: password); SolanaNewWalletCredentials(
name: name,
walletInfo: walletInfo,
password: password,
mnemonic: mnemonic,
parentAddress: parentAddress,
);
@override @override
WalletCredentials createSolanaRestoreWalletFromSeedCredentials({ WalletCredentials createSolanaRestoreWalletFromSeedCredentials({

View file

@ -1,4 +1,6 @@
import 'package:another_flushbar/flushbar.dart'; import 'package:another_flushbar/flushbar.dart';
import 'package:cake_wallet/core/new_wallet_arguments.dart';
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:cake_wallet/core/auth_service.dart'; import 'package:cake_wallet/core/auth_service.dart';
import 'package:cake_wallet/entities/desktop_dropdown_item.dart'; import 'package:cake_wallet/entities/desktop_dropdown_item.dart';
import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/generated/i18n.dart';
@ -219,7 +221,7 @@ class _DesktopWalletSelectionDropDownState extends State<DesktopWalletSelectionD
widget._authService.authenticateAction( widget._authService.authenticateAction(
context, context,
route: Routes.newWallet, route: Routes.newWallet,
arguments: widget.walletListViewModel.currentWalletType, arguments: NewWalletArguments(type: widget.walletListViewModel.currentWalletType),
conditionToDetermineIfToUse2FA: conditionToDetermineIfToUse2FA:
widget.walletListViewModel.shouldRequireTOTP2FAForCreatingNewWallets, widget.walletListViewModel.shouldRequireTOTP2FAForCreatingNewWallets,
); );

View file

@ -9,10 +9,12 @@ import 'package:cake_wallet/src/screens/nodes/widgets/node_form.dart';
import 'package:cake_wallet/src/screens/settings/widgets/settings_choices_cell.dart'; import 'package:cake_wallet/src/screens/settings/widgets/settings_choices_cell.dart';
import 'package:cake_wallet/src/screens/settings/widgets/settings_picker_cell.dart'; import 'package:cake_wallet/src/screens/settings/widgets/settings_picker_cell.dart';
import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart'; import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart';
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
import 'package:cake_wallet/src/widgets/base_text_form_field.dart'; import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
import 'package:cake_wallet/themes/extensions/new_wallet_theme.dart'; import 'package:cake_wallet/themes/extensions/new_wallet_theme.dart';
import 'package:cake_wallet/utils/show_pop_up.dart';
import 'package:cake_wallet/view_model/advanced_privacy_settings_view_model.dart'; import 'package:cake_wallet/view_model/advanced_privacy_settings_view_model.dart';
import 'package:cake_wallet/view_model/node_list/node_create_or_edit_view_model.dart'; import 'package:cake_wallet/view_model/node_list/node_create_or_edit_view_model.dart';
import 'package:cake_wallet/view_model/seed_settings_view_model.dart'; import 'package:cake_wallet/view_model/seed_settings_view_model.dart';
@ -24,6 +26,7 @@ import 'package:flutter_mobx/flutter_mobx.dart';
class AdvancedPrivacySettingsPage extends BasePage { class AdvancedPrivacySettingsPage extends BasePage {
AdvancedPrivacySettingsPage({ AdvancedPrivacySettingsPage({
required this.isFromRestore, required this.isFromRestore,
required this.isChildWallet,
required this.useTestnet, required this.useTestnet,
required this.toggleUseTestnet, required this.toggleUseTestnet,
required this.advancedPrivacySettingsViewModel, required this.advancedPrivacySettingsViewModel,
@ -39,25 +42,40 @@ class AdvancedPrivacySettingsPage extends BasePage {
String get title => S.current.privacy_settings; String get title => S.current.privacy_settings;
final bool isFromRestore; final bool isFromRestore;
final bool isChildWallet;
final bool useTestnet; final bool useTestnet;
final Function(bool? val) toggleUseTestnet; final Function(bool? val) toggleUseTestnet;
@override @override
Widget body(BuildContext context) => _AdvancedPrivacySettingsBody(isFromRestore, useTestnet, Widget body(BuildContext context) => _AdvancedPrivacySettingsBody(
toggleUseTestnet, advancedPrivacySettingsViewModel, nodeViewModel, seedSettingsViewModel); isFromRestore,
isChildWallet,
useTestnet,
toggleUseTestnet,
advancedPrivacySettingsViewModel,
nodeViewModel,
seedSettingsViewModel,
);
} }
class _AdvancedPrivacySettingsBody extends StatefulWidget { class _AdvancedPrivacySettingsBody extends StatefulWidget {
const _AdvancedPrivacySettingsBody(this.isFromRestore, this.useTestnet, this.toggleUseTestnet, const _AdvancedPrivacySettingsBody(
this.privacySettingsViewModel, this.nodeViewModel, this.seedTypeViewModel, this.isFromRestore,
{Key? key}) this.isChildWallet,
: super(key: key); this.useTestnet,
this.toggleUseTestnet,
this.privacySettingsViewModel,
this.nodeViewModel,
this.seedTypeViewModel, {
Key? key,
}) : super(key: key);
final AdvancedPrivacySettingsViewModel privacySettingsViewModel; final AdvancedPrivacySettingsViewModel privacySettingsViewModel;
final NodeCreateOrEditViewModel nodeViewModel; final NodeCreateOrEditViewModel nodeViewModel;
final SeedSettingsViewModel seedTypeViewModel; final SeedSettingsViewModel seedTypeViewModel;
final bool isFromRestore; final bool isFromRestore;
final bool isChildWallet;
final bool useTestnet; final bool useTestnet;
final Function(bool? val) toggleUseTestnet; final Function(bool? val) toggleUseTestnet;
@ -78,6 +96,16 @@ class _AdvancedPrivacySettingsBodyState extends State<_AdvancedPrivacySettingsBo
passphraseController passphraseController
.addListener(() => widget.seedTypeViewModel.setPassphrase(passphraseController.text)); .addListener(() => widget.seedTypeViewModel.setPassphrase(passphraseController.text));
if (widget.isChildWallet) {
if (widget.privacySettingsViewModel.type == WalletType.bitcoin) {
widget.seedTypeViewModel.setBitcoinSeedType(BitcoinSeedType.bip39);
}
if (widget.privacySettingsViewModel.type == WalletType.nano) {
widget.seedTypeViewModel.setNanoSeedType(NanoSeedType.bip39);
}
}
super.initState(); super.initState();
} }
@ -116,7 +144,7 @@ class _AdvancedPrivacySettingsBodyState extends State<_AdvancedPrivacySettingsBo
), ),
); );
}), }),
if (widget.privacySettingsViewModel.hasSeedTypeOption) if (widget.privacySettingsViewModel.isMoneroSeedTypeOptionsEnabled)
Observer(builder: (_) { Observer(builder: (_) {
return SettingsChoicesCell( return SettingsChoicesCell(
ChoicesListItem<MoneroSeedType>( ChoicesListItem<MoneroSeedType>(
@ -127,15 +155,37 @@ class _AdvancedPrivacySettingsBodyState extends State<_AdvancedPrivacySettingsBo
), ),
); );
}), }),
if ([WalletType.bitcoin, WalletType.litecoin] if (widget.privacySettingsViewModel.isBitcoinSeedTypeOptionsEnabled)
.contains(widget.privacySettingsViewModel.type))
Observer(builder: (_) { Observer(builder: (_) {
return SettingsChoicesCell( return SettingsChoicesCell(
ChoicesListItem<BitcoinSeedType>( ChoicesListItem<BitcoinSeedType>(
title: S.current.seedtype, title: S.current.seedtype,
items: BitcoinSeedType.all, items: BitcoinSeedType.all,
selectedItem: widget.seedTypeViewModel.bitcoinSeedType, selectedItem: widget.seedTypeViewModel.bitcoinSeedType,
onItemSelected: widget.seedTypeViewModel.setBitcoinSeedType, onItemSelected: (type) {
if (widget.isChildWallet && type != BitcoinSeedType.bip39) {
showAlertForSelectingNonBIP39DerivationTypeForChildWallets();
} else {
widget.seedTypeViewModel.setBitcoinSeedType(type);
}
},
),
);
}),
if (widget.privacySettingsViewModel.isNanoSeedTypeOptionsEnabled)
Observer(builder: (_) {
return SettingsChoicesCell(
ChoicesListItem<NanoSeedType>(
title: S.current.seedtype,
items: NanoSeedType.all,
selectedItem: widget.seedTypeViewModel.nanoSeedType,
onItemSelected: (type) {
if (widget.isChildWallet && type != NanoSeedType.bip39) {
showAlertForSelectingNonBIP39DerivationTypeForChildWallets();
} else {
widget.seedTypeViewModel.setNanoSeedType(type);
}
},
), ),
); );
}), }),
@ -256,6 +306,19 @@ class _AdvancedPrivacySettingsBodyState extends State<_AdvancedPrivacySettingsBo
); );
} }
void showAlertForSelectingNonBIP39DerivationTypeForChildWallets() {
showPopUp<void>(
context: context,
builder: (BuildContext context) {
return AlertWithOneAction(
alertTitle: S.current.seedtype_alert_title,
alertContent: S.current.seedtype_alert_content,
buttonText: S.of(context).ok,
buttonAction: () => Navigator.of(context).pop(),
);
});
}
@override @override
void dispose() { void dispose() {
passphraseController passphraseController

View file

@ -26,10 +26,15 @@ import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:mobx/mobx.dart'; import 'package:mobx/mobx.dart';
class NewWalletPage extends BasePage { class NewWalletPage extends BasePage {
NewWalletPage(this._walletNewVM, this._seedSettingsViewModel); NewWalletPage(
this._walletNewVM,
this._seedSettingsViewModel, {
this.isChildWallet = false,
});
final WalletNewVM _walletNewVM; final WalletNewVM _walletNewVM;
final SeedSettingsViewModel _seedSettingsViewModel; final SeedSettingsViewModel _seedSettingsViewModel;
final bool isChildWallet;
final walletNameImage = Image.asset('assets/images/wallet_name.png'); final walletNameImage = Image.asset('assets/images/wallet_name.png');
@ -48,15 +53,23 @@ class NewWalletPage extends BasePage {
@override @override
Widget body(BuildContext context) => WalletNameForm( Widget body(BuildContext context) => WalletNameForm(
_walletNewVM, _walletNewVM,
currentTheme.type == ThemeType.dark ? walletNameImage : walletNameLightImage, currentTheme.type == ThemeType.dark ? walletNameImage : walletNameLightImage,
_seedSettingsViewModel); _seedSettingsViewModel,
isChildWallet,
);
} }
class WalletNameForm extends StatefulWidget { class WalletNameForm extends StatefulWidget {
WalletNameForm(this._walletNewVM, this.walletImage, this._seedSettingsViewModel); WalletNameForm(
this._walletNewVM,
this.walletImage,
this._seedSettingsViewModel,
this.isChildWallet,
);
final WalletNewVM _walletNewVM; final WalletNewVM _walletNewVM;
final bool isChildWallet;
final Image walletImage; final Image walletImage;
final SeedSettingsViewModel _seedSettingsViewModel; final SeedSettingsViewModel _seedSettingsViewModel;
@ -338,7 +351,8 @@ class _WalletNameFormState extends State<WalletNameForm> {
Navigator.of(context).pushNamed(Routes.advancedPrivacySettings, arguments: { Navigator.of(context).pushNamed(Routes.advancedPrivacySettings, arguments: {
"type": _walletNewVM.type, "type": _walletNewVM.type,
"useTestnet": _walletNewVM.useTestnet, "useTestnet": _walletNewVM.useTestnet,
"toggleTestnet": _walletNewVM.toggleUseTestnet "toggleTestnet": _walletNewVM.toggleUseTestnet,
"isChildWallet": widget.isChildWallet,
}); });
}, },
child: Text(S.of(context).advanced_settings), child: Text(S.of(context).advanced_settings),

View file

@ -1,6 +1,10 @@
import 'package:cake_wallet/core/new_wallet_arguments.dart';
import 'package:cake_wallet/core/new_wallet_type_arguments.dart';
import 'dart:io'; import 'dart:io';
import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/reactions/bip39_wallet_utils.dart';
import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/screens/new_wallet/widgets/select_button.dart'; import 'package:cake_wallet/src/screens/new_wallet/widgets/select_button.dart';
import 'package:cake_wallet/src/screens/setup_2fa/widgets/popup_cancellable_alert.dart'; import 'package:cake_wallet/src/screens/setup_2fa/widgets/popup_cancellable_alert.dart';
@ -11,6 +15,7 @@ import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:cake_wallet/themes/theme_base.dart'; import 'package:cake_wallet/themes/theme_base.dart';
import 'package:cake_wallet/utils/responsive_layout_util.dart'; import 'package:cake_wallet/utils/responsive_layout_util.dart';
import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:cake_wallet/utils/show_pop_up.dart';
import 'package:cake_wallet/view_model/new_wallet_type_view_model.dart';
import 'package:cake_wallet/wallet_types.g.dart'; import 'package:cake_wallet/wallet_types.g.dart';
import 'package:cw_core/hardware/device_connection_type.dart'; import 'package:cw_core/hardware/device_connection_type.dart';
import 'package:cw_core/wallet_type.dart'; import 'package:cw_core/wallet_type.dart';
@ -18,21 +23,20 @@ import 'package:flutter/material.dart';
class NewWalletTypePage extends BasePage { class NewWalletTypePage extends BasePage {
NewWalletTypePage({ NewWalletTypePage({
required this.onTypeSelected, required this.newWalletTypeViewModel,
required this.isCreate, required this.newWalletTypeArguments,
required this.isHardwareWallet,
}); });
final void Function(BuildContext, WalletType) onTypeSelected; final NewWalletTypeViewModel newWalletTypeViewModel;
final bool isCreate; final NewWalletTypeArguments newWalletTypeArguments;
final bool isHardwareWallet;
final walletTypeImage = Image.asset('assets/images/wallet_type.png'); final walletTypeImage = Image.asset('assets/images/wallet_type.png');
final walletTypeLightImage = Image.asset('assets/images/wallet_type_light.png'); final walletTypeLightImage = Image.asset('assets/images/wallet_type_light.png');
@override @override
String get title => String get title => newWalletTypeArguments.isCreate
isCreate ? S.current.wallet_list_create_new_wallet : S.current.wallet_list_restore_wallet; ? S.current.wallet_list_create_new_wallet
: S.current.wallet_list_restore_wallet;
@override @override
Function(BuildContext)? get pushToNextWidget => (context) { Function(BuildContext)? get pushToNextWidget => (context) {
@ -44,24 +48,27 @@ class NewWalletTypePage extends BasePage {
@override @override
Widget body(BuildContext context) => WalletTypeForm( Widget body(BuildContext context) => WalletTypeForm(
onTypeSelected: onTypeSelected,
walletImage: currentTheme.type == ThemeType.dark ? walletTypeImage : walletTypeLightImage, walletImage: currentTheme.type == ThemeType.dark ? walletTypeImage : walletTypeLightImage,
isCreate: isCreate, isCreate: newWalletTypeArguments.isCreate,
isHardwareWallet: isHardwareWallet, newWalletTypeViewModel: newWalletTypeViewModel,
onTypeSelected: newWalletTypeArguments.onTypeSelected,
isHardwareWallet: newWalletTypeArguments.isHardwareWallet,
); );
} }
class WalletTypeForm extends StatefulWidget { class WalletTypeForm extends StatefulWidget {
WalletTypeForm({ WalletTypeForm({
required this.onTypeSelected,
required this.walletImage, required this.walletImage,
required this.isCreate, required this.isCreate,
required this.newWalletTypeViewModel,
this.onTypeSelected,
required this.isHardwareWallet, required this.isHardwareWallet,
}); });
final void Function(BuildContext, WalletType) onTypeSelected;
final Image walletImage;
final bool isCreate; final bool isCreate;
final Image walletImage;
final NewWalletTypeViewModel newWalletTypeViewModel;
final void Function(BuildContext, WalletType)? onTypeSelected;
final bool isHardwareWallet; final bool isHardwareWallet;
@override @override
@ -179,6 +186,18 @@ class WalletTypeFormState extends State<WalletTypeForm> {
); );
} }
widget.onTypeSelected(context, selected!); // If it's a restore flow, trigger the external callback
// If it's not a BIP39 Wallet or if there are no other wallets, route to the newWallet page
// Any other scenario, route to pre-existing seed page
if (!widget.isCreate) {
widget.onTypeSelected!(context, selected!);
} else if (!isBIP39Wallet(selected!) || !widget.newWalletTypeViewModel.hasExisitingWallet) {
Navigator.of(context).pushNamed(
Routes.newWallet,
arguments: NewWalletArguments(type: selected!),
);
} else {
Navigator.of(context).pushNamed(Routes.walletGroupDescription, arguments: selected!);
}
} }
} }

View file

@ -0,0 +1,90 @@
import 'package:cake_wallet/core/new_wallet_arguments.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:cw_core/wallet_type.dart';
import 'package:flutter/material.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
class WalletGroupDescriptionPage extends BasePage {
WalletGroupDescriptionPage({required this.selectedWalletType});
final WalletType selectedWalletType;
@override
String get title => S.current.wallet_group;
@override
Widget body(BuildContext context) {
return Container(
alignment: Alignment.center,
padding: EdgeInsets.all(24),
child: Column(
children: [
Image.asset(
'assets/images/wallet_group.png',
scale: 0.8,
),
SizedBox(height: 32),
Expanded(
child: Text.rich(
TextSpan(
children: [
TextSpan(text: '${S.of(context).wallet_group_description_one} '),
TextSpan(
text: '${S.of(context).wallet_group.toLowerCase()} ',
style: TextStyle(fontWeight: FontWeight.w700),
),
TextSpan(
text: '${S.of(context).wallet_group_description_two} ',
),
TextSpan(
text: '${S.of(context).choose_wallet_group} ',
style: TextStyle(fontWeight: FontWeight.w700),
),
TextSpan(
text: '${S.of(context).wallet_group_description_three} ',
),
TextSpan(
text: '${S.of(context).create_new_seed} ',
style: TextStyle(fontWeight: FontWeight.w700),
),
TextSpan(text: S.of(context).wallet_group_description_four),
],
),
textAlign: TextAlign.center,
style: TextStyle(
height: 1.5,
fontSize: 16,
fontWeight: FontWeight.w400,
color: Theme.of(context).extension<CakeTextTheme>()!.secondaryTextColor,
),
),
),
PrimaryButton(
onPressed: () => Navigator.of(context).pushNamed(
Routes.newWallet,
arguments: NewWalletArguments(type: selectedWalletType),
),
text: S.of(context).create_new_seed,
color: Theme.of(context).cardColor,
textColor: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
),
SizedBox(height: 12),
PrimaryButton(
onPressed: () => Navigator.of(context).pushNamed(
Routes.walletGroupsDisplayPage,
arguments: selectedWalletType,
),
text: S.of(context).choose_wallet_group,
color: Theme.of(context).primaryColor,
textColor: Colors.white,
),
SizedBox(height: 32),
],
),
);
}
}

View file

@ -0,0 +1,192 @@
import 'package:cake_wallet/core/new_wallet_arguments.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/screens/new_wallet/widgets/grouped_wallet_expansion_tile.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/view_model/wallet_groups_display_view_model.dart';
import 'package:cw_core/wallet_type.dart';
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import '../../../themes/extensions/cake_text_theme.dart';
class WalletGroupsDisplayPage extends BasePage {
WalletGroupsDisplayPage(this.walletGroupsDisplayViewModel);
final WalletGroupsDisplayViewModel walletGroupsDisplayViewModel;
final walletTypeImage = Image.asset('assets/images/wallet_type.png');
final walletTypeLightImage = Image.asset('assets/images/wallet_type_light.png');
@override
String get title => S.current.wallet_group;
@override
Widget body(BuildContext context) => WalletGroupsDisplayBody(
walletGroupsDisplayViewModel: walletGroupsDisplayViewModel,
);
}
class WalletGroupsDisplayBody extends StatelessWidget {
WalletGroupsDisplayBody({required this.walletGroupsDisplayViewModel});
final WalletGroupsDisplayViewModel walletGroupsDisplayViewModel;
@override
Widget build(BuildContext context) {
return Center(
child: Padding(
padding: EdgeInsets.all(24),
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
child: Observer(
builder: (context) {
return Column(
children: [
if (walletGroupsDisplayViewModel.hasNoFilteredWallet) ...{
WalletGroupEmptyStateWidget(),
},
...walletGroupsDisplayViewModel.multiWalletGroups.map(
(walletGroup) {
return Observer(builder: (context) {
final index = walletGroupsDisplayViewModel.multiWalletGroups
.indexOf(walletGroup);
final group = walletGroupsDisplayViewModel.multiWalletGroups[index];
final groupName =
group.groupName ?? '${S.of(context).wallet_group} ${index + 1}';
return GroupedWalletExpansionTile(
leadingWidget:
Icon(Icons.account_balance_wallet_outlined, size: 28),
borderRadius: BorderRadius.all(Radius.circular(16)),
title: groupName,
childWallets: group.wallets.map((walletInfo) {
return walletGroupsDisplayViewModel
.convertWalletInfoToWalletListItem(walletInfo);
}).toList(),
isSelected:
walletGroupsDisplayViewModel.selectedWalletGroup == group,
onTitleTapped: () =>
walletGroupsDisplayViewModel.selectWalletGroup(group),
onChildItemTapped: (_) =>
walletGroupsDisplayViewModel.selectWalletGroup(group),
);
});
},
).toList(),
...walletGroupsDisplayViewModel.singleWalletsList.map((singleWallet) {
return Observer(
builder: (context) {
final index = walletGroupsDisplayViewModel.singleWalletsList
.indexOf(singleWallet);
final wallet = walletGroupsDisplayViewModel.singleWalletsList[index];
return GroupedWalletExpansionTile(
borderRadius: BorderRadius.all(Radius.circular(16)),
title: wallet.name,
isSelected:
walletGroupsDisplayViewModel.selectedSingleWallet == wallet,
leadingWidget: Image.asset(
walletTypeToCryptoCurrency(wallet.type).iconPath!,
width: 32,
height: 32,
),
onTitleTapped: () =>
walletGroupsDisplayViewModel.selectSingleWallet(wallet),
);
},
);
}).toList(),
],
);
},
),
),
),
Observer(
builder: (context) {
return LoadingPrimaryButton(
isLoading: walletGroupsDisplayViewModel.isFetchingMnemonic,
onPressed: () {
if (walletGroupsDisplayViewModel.hasNoFilteredWallet) {
Navigator.of(context).pushNamed(
Routes.newWallet,
arguments: NewWalletArguments(type: walletGroupsDisplayViewModel.type),
);
} else {
onTypeSelected(context);
}
},
text: walletGroupsDisplayViewModel.hasNoFilteredWallet
? S.of(context).create_new_seed
: S.of(context).seed_language_next,
color: Theme.of(context).primaryColor,
textColor: Colors.white,
isDisabled: !walletGroupsDisplayViewModel.hasNoFilteredWallet
? (walletGroupsDisplayViewModel.selectedWalletGroup == null &&
walletGroupsDisplayViewModel.selectedSingleWallet == null)
: false,
);
},
),
SizedBox(height: 32),
],
),
),
);
}
Future<void> onTypeSelected(BuildContext context) async {
final mnemonic = await walletGroupsDisplayViewModel.getSelectedWalletMnemonic();
Navigator.of(context).pushNamed(
Routes.newWallet,
arguments: NewWalletArguments(
type: walletGroupsDisplayViewModel.type,
mnemonic: mnemonic,
parentAddress: walletGroupsDisplayViewModel.parentAddress,
isChildWallet: true,
),
);
}
}
class WalletGroupEmptyStateWidget extends StatelessWidget {
const WalletGroupEmptyStateWidget({
super.key,
});
@override
Widget build(BuildContext context) {
return Column(
children: [
Image.asset(
'assets/images/wallet_group.png',
scale: 0.8,
),
SizedBox(height: 32),
Text.rich(
TextSpan(
children: [
TextSpan(
text: '${S.of(context).wallet_group_empty_state_text_one} ',
),
TextSpan(
text: '${S.of(context).create_new_seed} ',
style: TextStyle(fontWeight: FontWeight.w700),
),
TextSpan(text: S.of(context).wallet_group_empty_state_text_two),
],
),
textAlign: TextAlign.center,
style: TextStyle(
height: 1.5,
fontSize: 16,
fontWeight: FontWeight.w400,
color: Theme.of(context).extension<CakeTextTheme>()!.secondaryTextColor,
),
),
],
);
}
}

View file

@ -0,0 +1,119 @@
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:cake_wallet/themes/extensions/filter_theme.dart';
import 'package:cake_wallet/themes/extensions/wallet_list_theme.dart';
import 'package:cake_wallet/view_model/wallet_list/wallet_list_item.dart';
import 'package:cw_core/wallet_type.dart';
import 'package:flutter/material.dart';
class GroupedWalletExpansionTile extends StatelessWidget {
GroupedWalletExpansionTile({
required this.title,
required this.isSelected,
this.childWallets = const [],
this.onTitleTapped,
this.onChildItemTapped = _defaultVoidCallback,
this.leadingWidget,
this.trailingWidget,
this.childTrailingWidget,
this.decoration,
this.color,
this.textColor,
this.arrowColor,
this.borderRadius,
this.margin,
this.tileKey,
}) : super(key: tileKey);
final Key? tileKey;
final bool isSelected;
final VoidCallback? onTitleTapped;
final void Function(WalletListItem item) onChildItemTapped;
final String title;
final Widget? leadingWidget;
final Widget? trailingWidget;
final Widget Function(WalletListItem)? childTrailingWidget;
final List<WalletListItem> childWallets;
final Color? color;
final Color? textColor;
final Color? arrowColor;
final EdgeInsets? margin;
final Decoration? decoration;
final BorderRadius? borderRadius;
static void _defaultVoidCallback(WalletListItem ITEM) {}
@override
Widget build(BuildContext context) {
final backgroundColor = color ?? (isSelected ? Colors.green : Theme.of(context).cardColor);
final effectiveTextColor = textColor ??
(isSelected
? Theme.of(context).extension<WalletListTheme>()!.restoreWalletButtonTextColor
: Theme.of(context).extension<CakeTextTheme>()!.buttonTextColor);
final effectiveArrowColor = arrowColor ??
(isSelected
? Theme.of(context).extension<WalletListTheme>()!.restoreWalletButtonTextColor
: Theme.of(context).extension<FilterTheme>()!.titlesColor);
return Container(
decoration: BoxDecoration(
borderRadius: borderRadius ?? BorderRadius.all(Radius.circular(30)),
color: backgroundColor,
),
margin: margin ?? const EdgeInsets.only(bottom: 12.0),
child: Theme(
data: Theme.of(context).copyWith(
dividerColor: Colors.transparent,
splashFactory: NoSplash.splashFactory,
),
child: ExpansionTile(
key: tileKey,
tilePadding: EdgeInsets.symmetric(vertical: 1, horizontal: 16),
iconColor: effectiveArrowColor,
collapsedIconColor: effectiveArrowColor,
leading: leadingWidget,
trailing: trailingWidget ?? (childWallets.isEmpty ? SizedBox.shrink() : null),
title: GestureDetector(
onTap: onTitleTapped,
child: Text(
title,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w500,
color: effectiveTextColor,
),
textAlign: TextAlign.left,
),
),
children: childWallets.map(
(item) {
final walletTypeToCrypto = walletTypeToCryptoCurrency(item.type);
return ListTile(
key: ValueKey(item.name),
trailing: childTrailingWidget?.call(item),
onTap: () => onChildItemTapped(item),
leading: Image.asset(
walletTypeToCrypto.iconPath!,
width: 32,
height: 32,
),
title: Text(
item.name,
maxLines: 1,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w500,
color: effectiveTextColor,
),
),
);
},
).toList(),
),
),
);
}
}

View file

@ -18,9 +18,11 @@ class SelectButton extends StatelessWidget {
this.arrowColor, this.arrowColor,
this.borderColor, this.borderColor,
this.deviceConnectionTypes, this.deviceConnectionTypes,
this.borderRadius,
this.padding,
}); });
final Image? image; final Widget? image;
final String text; final String text;
final double textSize; final double textSize;
final bool isSelected; final bool isSelected;
@ -32,6 +34,8 @@ class SelectButton extends StatelessWidget {
final Color? textColor; final Color? textColor;
final Color? arrowColor; final Color? arrowColor;
final Color? borderColor; final Color? borderColor;
final BorderRadius? borderRadius;
final EdgeInsets? padding;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -62,10 +66,10 @@ class SelectButton extends StatelessWidget {
child: Container( child: Container(
width: double.infinity, width: double.infinity,
height: height, height: height,
padding: EdgeInsets.only(left: 30, right: 30), padding: padding ?? EdgeInsets.only(left: 30, right: 30),
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(30)), borderRadius: borderRadius ?? BorderRadius.all(Radius.circular(30)),
color: backgroundColor, color: backgroundColor,
border: borderColor != null ? Border.all(color: borderColor!) : null, border: borderColor != null ? Border.all(color: borderColor!) : null,
), ),

View file

@ -281,16 +281,9 @@ class WalletRestorePage extends BasePage {
return false; return false;
} }
if ((walletRestoreViewModel.type == WalletType.litecoin) &&
(seedWords.length != WalletRestoreViewModelBase.electrumSeedMnemonicLength &&
seedWords.length != WalletRestoreViewModelBase.electrumShortSeedMnemonicLength)) {
return false;
}
// bip39: // bip39:
const validSeedLengths = [12, 18, 24]; const validSeedLengths = [12, 18, 24];
if (walletRestoreViewModel.type == WalletType.bitcoin && if (!(validSeedLengths.contains(seedWords.length))) {
!(validSeedLengths.contains(seedWords.length))) {
return false; return false;
} }

View file

@ -1,20 +1,16 @@
import 'package:another_flushbar/flushbar.dart'; import 'package:another_flushbar/flushbar.dart';
import 'package:cake_wallet/core/auth_service.dart';
import 'package:cake_wallet/core/wallet_name_validator.dart'; import 'package:cake_wallet/core/wallet_name_validator.dart';
import 'package:cake_wallet/entities/wallet_edit_page_arguments.dart';
import 'package:cake_wallet/palette.dart'; import 'package:cake_wallet/palette.dart';
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart'; import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/src/screens/auth/auth_page.dart'; import 'package:cake_wallet/src/screens/auth/auth_page.dart';
import 'package:cake_wallet/src/screens/wallet_unlock/wallet_unlock_arguments.dart'; import 'package:cake_wallet/src/screens/wallet_unlock/wallet_unlock_arguments.dart';
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/store/settings_store.dart';
import 'package:cake_wallet/utils/show_bar.dart'; import 'package:cake_wallet/utils/show_bar.dart';
import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:cake_wallet/utils/show_pop_up.dart';
import 'package:cake_wallet/view_model/wallet_list/wallet_edit_view_model.dart'; import 'package:cake_wallet/view_model/wallet_list/wallet_edit_view_model.dart';
import 'package:cake_wallet/view_model/wallet_list/wallet_list_item.dart';
import 'package:cake_wallet/view_model/wallet_new_vm.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart';
@ -22,29 +18,29 @@ import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:flutter_mobx/flutter_mobx.dart';
class WalletEditPage extends BasePage { class WalletEditPage extends BasePage {
WalletEditPage( WalletEditPage({
{required this.walletEditViewModel, required this.pageArguments,
required this.editingWallet, }) : _formKey = GlobalKey<FormState>(),
required this.walletNewVM,
required this.authService})
: _formKey = GlobalKey<FormState>(),
_labelController = TextEditingController(), _labelController = TextEditingController(),
walletEditViewModel = pageArguments.walletEditViewModel!,
super() { super() {
_labelController.text = editingWallet.name; _labelController.text =
pageArguments.isWalletGroup ? pageArguments.groupName : pageArguments.editingWallet.name;
_labelController.addListener(() => walletEditViewModel.newName = _labelController.text); _labelController.addListener(() => walletEditViewModel.newName = _labelController.text);
} }
final GlobalKey<FormState> _formKey; final GlobalKey<FormState> _formKey;
final TextEditingController _labelController; final TextEditingController _labelController;
final WalletEditPageArguments pageArguments;
final WalletEditViewModel walletEditViewModel; final WalletEditViewModel walletEditViewModel;
final WalletNewVM walletNewVM;
final WalletListItem editingWallet;
final AuthService authService;
@override @override
String get title => S.current.wallet_list_edit_wallet; String get title => pageArguments.isWalletGroup
? S.current.wallet_list_edit_group_name
: S.current.wallet_list_edit_wallet;
Flushbar<void>? _progressBar; Flushbar<void>? _progressBar;
@ -57,11 +53,14 @@ class WalletEditPage extends BasePage {
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
Expanded( Expanded(
child: Center( child: Center(
child: BaseTextFormField( child: BaseTextFormField(
controller: _labelController, controller: _labelController,
hintText: S.of(context).wallet_list_wallet_name, hintText: S.of(context).wallet_list_wallet_name,
validator: WalletNameValidator()))), validator: WalletNameValidator(),
),
),
),
Observer( Observer(
builder: (_) { builder: (_) {
final isLoading = walletEditViewModel.state is WalletEditRenamePending || final isLoading = walletEditViewModel.state is WalletEditRenamePending ||
@ -69,24 +68,26 @@ class WalletEditPage extends BasePage {
return Row( return Row(
children: <Widget>[ children: <Widget>[
Flexible( if (!pageArguments.isWalletGroup)
child: Container( Flexible(
padding: EdgeInsets.only(right: 8.0), child: Container(
child: LoadingPrimaryButton( padding: EdgeInsets.only(right: 8.0),
isDisabled: isLoading, child: LoadingPrimaryButton(
onPressed: () => _removeWallet(context), isDisabled: isLoading,
text: S.of(context).delete, onPressed: () => _removeWallet(context),
color: Palette.red, text: S.of(context).delete,
textColor: Colors.white), color: Palette.red,
textColor: Colors.white),
),
), ),
),
Flexible( Flexible(
child: Container( child: Container(
padding: EdgeInsets.only(left: 8.0), padding: EdgeInsets.only(left: 8.0),
child: LoadingPrimaryButton( child: LoadingPrimaryButton(
onPressed: () async { onPressed: () async {
if (_formKey.currentState?.validate() ?? false) { if (_formKey.currentState?.validate() ?? false) {
if (walletNewVM.nameExists(walletEditViewModel.newName)) { if (pageArguments.walletNewVM!
.nameExists(walletEditViewModel.newName)) {
showPopUp<void>( showPopUp<void>(
context: context, context: context,
builder: (_) { builder: (_) {
@ -102,29 +103,33 @@ class WalletEditPage extends BasePage {
try { try {
bool confirmed = false; bool confirmed = false;
if (SettingsStoreBase if (SettingsStoreBase.walletPasswordDirectInput) {
.walletPasswordDirectInput) {
await Navigator.of(context).pushNamed( await Navigator.of(context).pushNamed(
Routes.walletUnlockLoadable, Routes.walletUnlockLoadable,
arguments: WalletUnlockArguments( arguments: WalletUnlockArguments(
authPasswordHandler: authPasswordHandler: (String password) async {
(String password) async { await walletEditViewModel.changeName(
await walletEditViewModel pageArguments.editingWallet,
.changeName(editingWallet, password: password,
password: password); isWalletGroup: pageArguments.isWalletGroup,
groupParentAddress: pageArguments.parentAddress,
);
}, },
callback: (bool callback: (bool isAuthenticatedSuccessfully,
isAuthenticatedSuccessfully,
AuthPageState auth) async { AuthPageState auth) async {
if (isAuthenticatedSuccessfully) { if (isAuthenticatedSuccessfully) {
auth.close(); auth.close();
confirmed = true; confirmed = true;
} }
}, },
walletName: editingWallet.name, walletName: pageArguments.editingWallet.name,
walletType: editingWallet.type)); walletType: pageArguments.editingWallet.type));
} else { } else {
await walletEditViewModel.changeName(editingWallet); await walletEditViewModel.changeName(
pageArguments.editingWallet,
isWalletGroup: pageArguments.isWalletGroup,
groupParentAddress: pageArguments.parentAddress,
);
confirmed = true; confirmed = true;
} }
@ -154,7 +159,9 @@ class WalletEditPage extends BasePage {
} }
Future<void> _removeWallet(BuildContext context) async { Future<void> _removeWallet(BuildContext context) async {
authService.authenticateAction(context, onAuthSuccess: (isAuthenticatedSuccessfully) async { pageArguments.authService!.authenticateAction(
context,
onAuthSuccess: (isAuthenticatedSuccessfully) async {
if (!isAuthenticatedSuccessfully) { if (!isAuthenticatedSuccessfully) {
return; return;
} }
@ -173,7 +180,8 @@ class WalletEditPage extends BasePage {
builder: (BuildContext dialogContext) { builder: (BuildContext dialogContext) {
return AlertWithTwoActions( return AlertWithTwoActions(
alertTitle: S.of(context).delete_wallet, alertTitle: S.of(context).delete_wallet,
alertContent: S.of(context).delete_wallet_confirm_message(editingWallet.name), alertContent:
S.of(context).delete_wallet_confirm_message(pageArguments.editingWallet.name),
leftButtonText: S.of(context).cancel, leftButtonText: S.of(context).cancel,
rightButtonText: S.of(context).delete, rightButtonText: S.of(context).delete,
actionLeftButton: () => Navigator.of(dialogContext).pop(), actionLeftButton: () => Navigator.of(dialogContext).pop(),
@ -187,13 +195,16 @@ class WalletEditPage extends BasePage {
Navigator.of(context).pop(); Navigator.of(context).pop();
try { try {
changeProcessText(context, S.of(context).wallet_list_removing_wallet(editingWallet.name)); changeProcessText(
await walletEditViewModel.remove(editingWallet); context, S.of(context).wallet_list_removing_wallet(pageArguments.editingWallet.name));
await walletEditViewModel.remove(pageArguments.editingWallet);
hideProgressText(); hideProgressText();
} catch (e) { } catch (e) {
changeProcessText( changeProcessText(
context, context,
S.of(context).wallet_list_failed_to_remove(editingWallet.name, e.toString()), S
.of(context)
.wallet_list_failed_to_remove(pageArguments.editingWallet.name, e.toString()),
); );
} }
} }

View file

@ -0,0 +1,54 @@
import 'package:cake_wallet/themes/extensions/filter_theme.dart';
import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
import 'package:flutter/material.dart';
class EditWalletButtonWidget extends StatelessWidget {
const EditWalletButtonWidget({
required this.width,
required this.onTap,
this.isGroup = false,
super.key,
});
final bool isGroup;
final double width;
final VoidCallback onTap;
@override
Widget build(BuildContext context) {
return Container(
width: width,
child: Row(
children: [
GestureDetector(
onTap: onTap,
child: Center(
child: Container(
height: 40,
width: 44,
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Theme.of(context).extension<ReceivePageTheme>()!.iconsBackgroundColor,
),
child: Icon(
Icons.edit,
size: 14,
color: Theme.of(context).extension<ReceivePageTheme>()!.iconsColor,
),
),
),
),
if (isGroup) ...{
SizedBox(width: 6),
Icon(
Icons.keyboard_arrow_down,
size: 24,
color: Theme.of(context).extension<FilterTheme>()!.titlesColor,
),
},
],
),
);
}
}

View file

@ -7,11 +7,13 @@ class FilteredList extends StatefulWidget {
required this.list, required this.list,
required this.itemBuilder, required this.itemBuilder,
required this.updateFunction, required this.updateFunction,
this.shrinkWrap = false,
}); });
final ObservableList<dynamic> list; final ObservableList<dynamic> list;
final Widget Function(BuildContext, int) itemBuilder; final Widget Function(BuildContext, int) itemBuilder;
final Function updateFunction; final Function updateFunction;
final bool shrinkWrap;
@override @override
FilteredListState createState() => FilteredListState(); FilteredListState createState() => FilteredListState();
@ -22,6 +24,7 @@ class FilteredListState extends State<FilteredList> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Observer( return Observer(
builder: (_) => ReorderableListView.builder( builder: (_) => ReorderableListView.builder(
shrinkWrap: widget.shrinkWrap,
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
itemBuilder: widget.itemBuilder, itemBuilder: widget.itemBuilder,
itemCount: widget.list.length, itemCount: widget.list.length,

View file

@ -1,5 +1,9 @@
import 'package:cake_wallet/core/new_wallet_arguments.dart';
import 'package:cake_wallet/entities/wallet_edit_page_arguments.dart';
import 'package:cake_wallet/entities/wallet_list_order_types.dart'; import 'package:cake_wallet/entities/wallet_list_order_types.dart';
import 'package:cake_wallet/src/screens/dashboard/widgets/filter_list_widget.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/filter_list_widget.dart';
import 'package:cake_wallet/src/screens/new_wallet/widgets/grouped_wallet_expansion_tile.dart';
import 'package:cake_wallet/src/screens/wallet_list/edit_wallet_button_widget.dart';
import 'package:cake_wallet/src/screens/wallet_list/filtered_list.dart'; import 'package:cake_wallet/src/screens/wallet_list/filtered_list.dart';
import 'package:cake_wallet/src/screens/wallet_unlock/wallet_unlock_arguments.dart'; import 'package:cake_wallet/src/screens/wallet_unlock/wallet_unlock_arguments.dart';
import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/store/settings_store.dart';
@ -7,8 +11,6 @@ import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:cake_wallet/src/screens/auth/auth_page.dart'; import 'package:cake_wallet/src/screens/auth/auth_page.dart';
import 'package:cake_wallet/core/auth_service.dart'; import 'package:cake_wallet/core/auth_service.dart';
import 'package:cake_wallet/themes/extensions/filter_theme.dart'; import 'package:cake_wallet/themes/extensions/filter_theme.dart';
import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
import 'package:cake_wallet/utils/device_info.dart';
import 'package:cake_wallet/utils/responsive_layout_util.dart'; import 'package:cake_wallet/utils/responsive_layout_util.dart';
import 'package:cake_wallet/utils/show_bar.dart'; import 'package:cake_wallet/utils/show_bar.dart';
import 'package:cake_wallet/utils/show_pop_up.dart'; import 'package:cake_wallet/utils/show_pop_up.dart';
@ -23,7 +25,6 @@ import 'package:cake_wallet/view_model/wallet_list/wallet_list_view_model.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/wallet_type_utils.dart'; import 'package:cake_wallet/wallet_type_utils.dart';
import 'package:cake_wallet/themes/extensions/wallet_list_theme.dart';
class WalletListPage extends BasePage { class WalletListPage extends BasePage {
WalletListPage({required this.walletListViewModel, required this.authService}); WalletListPage({required this.walletListViewModel, required this.authService});
@ -128,112 +129,143 @@ class WalletListBodyState extends State<WalletListBody> {
child: Column( child: Column(
children: [ children: [
Expanded( Expanded(
child: Container( child: SingleChildScrollView(
child: Observer( child: Column(
builder: (_) => FilteredList( crossAxisAlignment: CrossAxisAlignment.start,
list: widget.walletListViewModel.wallets, children: [
updateFunction: widget.walletListViewModel.reorderAccordingToWalletList, if (widget.walletListViewModel.multiWalletGroups.isNotEmpty) ...{
itemBuilder: (__, index) { Padding(
final wallet = widget.walletListViewModel.wallets[index]; padding: const EdgeInsets.only(left: 24),
final currentColor = wallet.isCurrent child: Text(
? Theme.of(context) S.current.shared_seed_wallet_groups,
.extension<WalletListTheme>()! style: TextStyle(
.createNewWalletButtonBackgroundColor fontSize: 18,
: Theme.of(context).colorScheme.background; fontWeight: FontWeight.w500,
final row = GestureDetector( color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
key: ValueKey(wallet.name),
onTap: () => wallet.isCurrent ? null : _loadWallet(wallet),
child: Container(
height: tileHeight,
width: double.infinity,
child: Row(
children: <Widget>[
Container(
height: tileHeight,
width: 4,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topRight: Radius.circular(4),
bottomRight: Radius.circular(4)),
color: currentColor),
),
Expanded(
child: Container(
height: tileHeight,
padding: EdgeInsets.only(left: 20, right: 20),
color: Theme.of(context).colorScheme.background,
alignment: Alignment.centerLeft,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
wallet.isEnabled
? _imageFor(
type: wallet.type,
isTestnet: wallet.isTestnet,
)
: nonWalletTypeIcon,
SizedBox(width: 10),
Flexible(
child: Text(
wallet.name,
maxLines: null,
softWrap: true,
style: TextStyle(
fontSize: DeviceInfo.instance.isDesktop ? 18 : 20,
fontWeight: FontWeight.w500,
color: Theme.of(context)
.extension<CakeTextTheme>()!
.titleColor,
),
),
),
],
),
),
),
],
), ),
), ),
); ),
SizedBox(height: 16),
return wallet.isCurrent Container(
? row child: Observer(
: Row( builder: (_) => FilteredList(
key: ValueKey(wallet.name), shrinkWrap: true,
children: [ list: widget.walletListViewModel.multiWalletGroups,
Expanded(child: row), updateFunction: widget.walletListViewModel.reorderAccordingToWalletList,
GestureDetector( itemBuilder: (context, index) {
onTap: () => Navigator.of(context).pushNamed(Routes.walletEdit, final group = widget.walletListViewModel.multiWalletGroups[index];
arguments: [widget.walletListViewModel, wallet]), final groupName = group.groupName ??
child: Container( '${S.current.wallet_group} ${index + 1}';
padding: EdgeInsets.only( return GroupedWalletExpansionTile(
right: DeviceInfo.instance.isMobile ? 20 : 40), borderRadius: BorderRadius.all(Radius.circular(16)),
child: Center( margin: EdgeInsets.only(left: 20, right: 20, bottom: 12),
child: Container( title: groupName,
height: 40, tileKey: ValueKey('group_wallets_expansion_tile_widget_$index'),
width: 44, leadingWidget: Icon(
padding: EdgeInsets.all(10), Icons.account_balance_wallet_outlined,
decoration: BoxDecoration( size: 28,
shape: BoxShape.circle,
color: Theme.of(context)
.extension<ReceivePageTheme>()!
.iconsBackgroundColor,
),
child: Icon(
Icons.edit,
size: 14,
color: Theme.of(context)
.extension<ReceivePageTheme>()!
.iconsColor,
),
),
),
),
), ),
], trailingWidget: EditWalletButtonWidget(
); width: 74,
isGroup: true,
onTap: () {
final wallet = widget.walletListViewModel
.convertWalletInfoToWalletListItem(group.wallets.first);
Navigator.of(context).pushNamed(
Routes.walletEdit,
arguments: WalletEditPageArguments(
walletListViewModel: widget.walletListViewModel,
editingWallet: wallet,
isWalletGroup: true,
groupName: groupName,
parentAddress: group.parentAddress,
),
);
},
),
childWallets: group.wallets.map((walletInfo) {
return widget.walletListViewModel
.convertWalletInfoToWalletListItem(walletInfo);
}).toList(),
isSelected: false,
onChildItemTapped: (wallet) =>
wallet.isCurrent ? null : _loadWallet(wallet),
childTrailingWidget: (item) {
return item.isCurrent
? SizedBox.shrink()
: EditWalletButtonWidget(
width: 44,
onTap: () => Navigator.of(context).pushNamed(
Routes.walletEdit,
arguments: WalletEditPageArguments(
walletListViewModel: widget.walletListViewModel,
editingWallet: item,
),
),
);
},
);
},
),
),
),
SizedBox(height: 24),
}, },
), if (widget.walletListViewModel.singleWalletsList.isNotEmpty) ...{
Padding(
padding: const EdgeInsets.only(left: 24),
child: Text(
S.current.single_seed_wallets_group,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w500,
color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
),
),
),
SizedBox(height: 16),
Container(
child: Observer(
builder: (_) => FilteredList(
shrinkWrap: true,
list: widget.walletListViewModel.singleWalletsList,
updateFunction: widget.walletListViewModel.reorderAccordingToWalletList,
itemBuilder: (context, index) {
final wallet = widget.walletListViewModel.singleWalletsList[index];
return GroupedWalletExpansionTile(
tileKey: ValueKey('single_wallets_expansion_tile_widget_$index'),
leadingWidget: Image.asset(
walletTypeToCryptoCurrency(wallet.type).iconPath!,
width: 32,
height: 32,
),
title: wallet.name,
isSelected: false,
borderRadius: BorderRadius.all(Radius.circular(16)),
margin: EdgeInsets.only(left: 20, right: 20, bottom: 12),
onTitleTapped: () => wallet.isCurrent ? null : _loadWallet(wallet),
trailingWidget: wallet.isCurrent
? null
: EditWalletButtonWidget(
width: 44,
onTap: () {
Navigator.of(context).pushNamed(
Routes.walletEdit,
arguments: WalletEditPageArguments(
walletListViewModel: widget.walletListViewModel,
editingWallet: wallet,
),
);
},
),
);
},
),
),
),
},
],
), ),
), ),
), ),
@ -249,14 +281,18 @@ class WalletListBodyState extends State<WalletListBody> {
widget.authService.authenticateAction( widget.authService.authenticateAction(
context, context,
route: Routes.newWallet, route: Routes.newWallet,
arguments: widget.walletListViewModel.currentWalletType, arguments: NewWalletArguments(
type: widget.walletListViewModel.currentWalletType,
),
conditionToDetermineIfToUse2FA: conditionToDetermineIfToUse2FA:
widget.walletListViewModel.shouldRequireTOTP2FAForCreatingNewWallets, widget.walletListViewModel.shouldRequireTOTP2FAForCreatingNewWallets,
); );
} else { } else {
Navigator.of(context).pushNamed( Navigator.of(context).pushNamed(
Routes.newWallet, Routes.newWallet,
arguments: widget.walletListViewModel.currentWalletType, arguments: NewWalletArguments(
type: widget.walletListViewModel.currentWalletType,
),
); );
} }
} else { } else {
@ -340,15 +376,15 @@ class WalletListBodyState extends State<WalletListBody> {
Future<void> _loadWallet(WalletListItem wallet) async { Future<void> _loadWallet(WalletListItem wallet) async {
if (SettingsStoreBase.walletPasswordDirectInput) { if (SettingsStoreBase.walletPasswordDirectInput) {
Navigator.of(context).pushNamed( Navigator.of(context).pushNamed(Routes.walletUnlockLoadable,
Routes.walletUnlockLoadable,
arguments: WalletUnlockArguments( arguments: WalletUnlockArguments(
callback: (bool isAuthenticatedSuccessfully, AuthPageState auth) async { callback: (bool isAuthenticatedSuccessfully, AuthPageState auth) async {
if (isAuthenticatedSuccessfully) { if (isAuthenticatedSuccessfully) {
auth.close(); auth.close();
setState(() {}); setState(() {});
} }
}, walletName: wallet.name, },
walletName: wallet.name,
walletType: wallet.type)); walletType: wallet.type));
return; return;
} }

View file

@ -58,6 +58,7 @@ abstract class SettingsStoreBase with Store {
required AutoGenerateSubaddressStatus initialAutoGenerateSubaddressStatus, required AutoGenerateSubaddressStatus initialAutoGenerateSubaddressStatus,
required MoneroSeedType initialMoneroSeedType, required MoneroSeedType initialMoneroSeedType,
required BitcoinSeedType initialBitcoinSeedType, required BitcoinSeedType initialBitcoinSeedType,
required NanoSeedType initialNanoSeedType,
required bool initialAppSecure, required bool initialAppSecure,
required bool initialDisableBuy, required bool initialDisableBuy,
required bool initialDisableSell, required bool initialDisableSell,
@ -132,6 +133,7 @@ abstract class SettingsStoreBase with Store {
autoGenerateSubaddressStatus = initialAutoGenerateSubaddressStatus, autoGenerateSubaddressStatus = initialAutoGenerateSubaddressStatus,
moneroSeedType = initialMoneroSeedType, moneroSeedType = initialMoneroSeedType,
bitcoinSeedType = initialBitcoinSeedType, bitcoinSeedType = initialBitcoinSeedType,
nanoSeedType = initialNanoSeedType,
fiatApiMode = initialFiatMode, fiatApiMode = initialFiatMode,
allowBiometricalAuthentication = initialAllowBiometricalAuthentication, allowBiometricalAuthentication = initialAllowBiometricalAuthentication,
selectedCake2FAPreset = initialCake2FAPresetOptions, selectedCake2FAPreset = initialCake2FAPresetOptions,
@ -341,6 +343,11 @@ abstract class SettingsStoreBase with Store {
(BitcoinSeedType bitcoinSeedType) => sharedPreferences.setInt( (BitcoinSeedType bitcoinSeedType) => sharedPreferences.setInt(
PreferencesKey.bitcoinSeedType, bitcoinSeedType.raw)); PreferencesKey.bitcoinSeedType, bitcoinSeedType.raw));
reaction(
(_) => nanoSeedType,
(NanoSeedType nanoSeedType) =>
sharedPreferences.setInt(PreferencesKey.nanoSeedType, nanoSeedType.raw));
reaction( reaction(
(_) => fiatApiMode, (_) => fiatApiMode,
(FiatApiMode mode) => (FiatApiMode mode) =>
@ -569,6 +576,7 @@ abstract class SettingsStoreBase with Store {
static const defaultSeedPhraseLength = SeedPhraseLength.twelveWords; static const defaultSeedPhraseLength = SeedPhraseLength.twelveWords;
static const defaultMoneroSeedType = MoneroSeedType.defaultSeedType; static const defaultMoneroSeedType = MoneroSeedType.defaultSeedType;
static const defaultBitcoinSeedType = BitcoinSeedType.defaultDerivationType; static const defaultBitcoinSeedType = BitcoinSeedType.defaultDerivationType;
static const defaultNanoSeedType = NanoSeedType.defaultDerivationType;
@observable @observable
FiatCurrency fiatCurrency; FiatCurrency fiatCurrency;
@ -603,6 +611,9 @@ abstract class SettingsStoreBase with Store {
@observable @observable
BitcoinSeedType bitcoinSeedType; BitcoinSeedType bitcoinSeedType;
@observable
NanoSeedType nanoSeedType;
@observable @observable
bool isAppSecure; bool isAppSecure;
@ -974,6 +985,11 @@ abstract class SettingsStoreBase with Store {
? BitcoinSeedType.deserialize(raw: _bitcoinSeedType) ? BitcoinSeedType.deserialize(raw: _bitcoinSeedType)
: defaultBitcoinSeedType; : defaultBitcoinSeedType;
final _nanoSeedType = sharedPreferences.getInt(PreferencesKey.nanoSeedType);
final nanoSeedType =
_nanoSeedType != null ? NanoSeedType.deserialize(raw: _nanoSeedType) : defaultNanoSeedType;
final nodes = <WalletType, Node>{}; final nodes = <WalletType, Node>{};
final powNodes = <WalletType, Node>{}; final powNodes = <WalletType, Node>{};
@ -1138,6 +1154,7 @@ abstract class SettingsStoreBase with Store {
initialAutoGenerateSubaddressStatus: autoGenerateSubaddressStatus, initialAutoGenerateSubaddressStatus: autoGenerateSubaddressStatus,
initialMoneroSeedType: moneroSeedType, initialMoneroSeedType: moneroSeedType,
initialBitcoinSeedType: bitcoinSeedType, initialBitcoinSeedType: bitcoinSeedType,
initialNanoSeedType: nanoSeedType,
initialAppSecure: isAppSecure, initialAppSecure: isAppSecure,
initialDisableBuy: disableBuy, initialDisableBuy: disableBuy,
initialDisableSell: disableSell, initialDisableSell: disableSell,
@ -1270,6 +1287,11 @@ abstract class SettingsStoreBase with Store {
? BitcoinSeedType.deserialize(raw: _bitcoinSeedType) ? BitcoinSeedType.deserialize(raw: _bitcoinSeedType)
: defaultBitcoinSeedType; : defaultBitcoinSeedType;
final _nanoSeedType = sharedPreferences.getInt(PreferencesKey.nanoSeedType);
nanoSeedType =
_nanoSeedType != null ? NanoSeedType.deserialize(raw: _nanoSeedType) : defaultNanoSeedType;
balanceDisplayMode = BalanceDisplayMode.deserialize( balanceDisplayMode = BalanceDisplayMode.deserialize(
raw: sharedPreferences.getInt(PreferencesKey.currentBalanceDisplayModeKey)!); raw: sharedPreferences.getInt(PreferencesKey.currentBalanceDisplayModeKey)!);
shouldSaveRecipientAddress = shouldSaveRecipientAddress =

View file

@ -13,8 +13,15 @@ class CWTron extends Tron {
required String name, required String name,
WalletInfo? walletInfo, WalletInfo? walletInfo,
String? password, String? password,
String? mnemonic,
String? parentAddress,
}) => }) =>
TronNewWalletCredentials(name: name, walletInfo: walletInfo, password: password); TronNewWalletCredentials(
name: name,
walletInfo: walletInfo,
password: password,
mnemonic: mnemonic,
parentAddress: parentAddress);
@override @override
WalletCredentials createTronRestoreWalletFromSeedCredentials({ WalletCredentials createTronRestoreWalletFromSeedCredentials({
@ -63,10 +70,10 @@ class CWTron extends Tron {
@override @override
Future<void> addTronToken(WalletBase wallet, CryptoCurrency token, String contractAddress) async { Future<void> addTronToken(WalletBase wallet, CryptoCurrency token, String contractAddress) async {
final tronToken = TronToken( final tronToken = TronToken(
name: token.name, name: token.name,
symbol: token.title, symbol: token.title,
contractAddress: contractAddress, contractAddress: contractAddress,
decimal: token.decimals, decimal: token.decimals,
enabled: token.enabled, enabled: token.enabled,
iconPath: token.iconPath, iconPath: token.iconPath,

View file

@ -46,17 +46,30 @@ abstract class AdvancedPrivacySettingsViewModelBase with Store {
case WalletType.litecoin: case WalletType.litecoin:
return _settingsStore.bitcoinSeedType == BitcoinSeedType.bip39; return _settingsStore.bitcoinSeedType == BitcoinSeedType.bip39;
case WalletType.nano:
case WalletType.banano:
return _settingsStore.nanoSeedType == NanoSeedType.bip39;
case WalletType.monero: case WalletType.monero:
case WalletType.wownero: case WalletType.wownero:
case WalletType.none: case WalletType.none:
case WalletType.haven: case WalletType.haven:
case WalletType.nano:
case WalletType.banano:
return false; return false;
} }
} }
bool get hasSeedTypeOption => [WalletType.monero, WalletType.wownero].contains(type);
bool get isMoneroSeedTypeOptionsEnabled => [
WalletType.monero,
WalletType.wownero,
].contains(type);
bool get isBitcoinSeedTypeOptionsEnabled => [
WalletType.bitcoin,
WalletType.litecoin,
].contains(type);
bool get isNanoSeedTypeOptionsEnabled => [WalletType.nano].contains(type);
bool get hasPassphraseOption => [ bool get hasPassphraseOption => [
WalletType.bitcoin, WalletType.bitcoin,

View file

@ -0,0 +1,16 @@
import 'package:cw_core/wallet_info.dart';
import 'package:hive/hive.dart';
import 'package:mobx/mobx.dart';
part 'new_wallet_type_view_model.g.dart';
class NewWalletTypeViewModel = NewWalletTypeViewModelBase with _$NewWalletTypeViewModel;
abstract class NewWalletTypeViewModelBase with Store {
NewWalletTypeViewModelBase(this._walletInfoSource);
@computed
bool get hasExisitingWallet => _walletInfoSource.isNotEmpty;
final Box<WalletInfo> _walletInfoSource;
}

View file

@ -23,6 +23,13 @@ abstract class SeedSettingsViewModelBase with Store {
void setBitcoinSeedType(BitcoinSeedType derivationType) => void setBitcoinSeedType(BitcoinSeedType derivationType) =>
_appStore.settingsStore.bitcoinSeedType = derivationType; _appStore.settingsStore.bitcoinSeedType = derivationType;
@computed
NanoSeedType get nanoSeedType => _appStore.settingsStore.nanoSeedType;
@action
void setNanoSeedType(NanoSeedType derivationType) =>
_appStore.settingsStore.nanoSeedType = derivationType;
@computed @computed
String? get passphrase => this._seedSettingsStore.passphrase; String? get passphrase => this._seedSettingsStore.passphrase;

View file

@ -99,6 +99,7 @@ abstract class WalletCreationVMBase with Store {
showIntroCakePayCard: (!walletCreationService.typeExists(type)) && type != WalletType.haven, showIntroCakePayCard: (!walletCreationService.typeExists(type)) && type != WalletType.haven,
derivationInfo: credentials.derivationInfo ?? getDefaultCreateDerivation(), derivationInfo: credentials.derivationInfo ?? getDefaultCreateDerivation(),
hardwareWalletType: credentials.hardwareWalletType, hardwareWalletType: credentials.hardwareWalletType,
parentAddress: credentials.parentAddress,
); );
credentials.walletInfo = walletInfo; credentials.walletInfo = walletInfo;
@ -117,12 +118,16 @@ abstract class WalletCreationVMBase with Store {
} }
DerivationInfo? getDefaultCreateDerivation() { DerivationInfo? getDefaultCreateDerivation() {
final useBip39 = seedSettingsViewModel.bitcoinSeedType.type == DerivationType.bip39; final useBip39ForBitcoin = seedSettingsViewModel.bitcoinSeedType.type == DerivationType.bip39;
final useBip39ForNano = seedSettingsViewModel.nanoSeedType.type == DerivationType.bip39;
switch (type) { switch (type) {
case WalletType.nano: case WalletType.nano:
if (useBip39ForNano) {
return DerivationInfo(derivationType: DerivationType.bip39);
}
return DerivationInfo(derivationType: DerivationType.nano); return DerivationInfo(derivationType: DerivationType.nano);
case WalletType.bitcoin: case WalletType.bitcoin:
if (useBip39) { if (useBip39ForBitcoin) {
return DerivationInfo( return DerivationInfo(
derivationType: DerivationType.bip39, derivationType: DerivationType.bip39,
derivationPath: "m/84'/0'/0'", derivationPath: "m/84'/0'/0'",
@ -132,7 +137,7 @@ abstract class WalletCreationVMBase with Store {
} }
return bitcoin!.getElectrumDerivations()[DerivationType.electrum]!.first; return bitcoin!.getElectrumDerivations()[DerivationType.electrum]!.first;
case WalletType.litecoin: case WalletType.litecoin:
if (useBip39) { if (useBip39ForBitcoin) {
return DerivationInfo( return DerivationInfo(
derivationType: DerivationType.bip39, derivationType: DerivationType.bip39,
derivationPath: "m/84'/2'/0'", derivationPath: "m/84'/2'/0'",
@ -148,9 +153,13 @@ abstract class WalletCreationVMBase with Store {
DerivationInfo? getCommonRestoreDerivation() { DerivationInfo? getCommonRestoreDerivation() {
final useElectrum = seedSettingsViewModel.bitcoinSeedType.type == DerivationType.electrum; final useElectrum = seedSettingsViewModel.bitcoinSeedType.type == DerivationType.electrum;
final useNanoStandard = seedSettingsViewModel.nanoSeedType.type == DerivationType.nano;
switch (this.type) { switch (this.type) {
case WalletType.nano: case WalletType.nano:
return DerivationInfo(derivationType: DerivationType.nano); if (useNanoStandard) {
return DerivationInfo(derivationType: DerivationType.nano);
}
return DerivationInfo(derivationType: DerivationType.bip39);
case WalletType.bitcoin: case WalletType.bitcoin:
if (useElectrum) { if (useElectrum) {
return bitcoin!.getElectrumDerivations()[DerivationType.electrum]!.first; return bitcoin!.getElectrumDerivations()[DerivationType.electrum]!.first;

View file

@ -0,0 +1,165 @@
import 'package:cake_wallet/core/wallet_loading_service.dart';
import 'package:cake_wallet/entities/wallet_group.dart';
import 'package:cake_wallet/entities/wallet_manager.dart';
import 'package:cake_wallet/reactions/bip39_wallet_utils.dart';
import 'package:cake_wallet/store/app_store.dart';
import 'package:cake_wallet/view_model/wallet_list/wallet_list_item.dart';
import 'package:cake_wallet/view_model/wallet_list/wallet_list_view_model.dart';
import 'package:cake_wallet/wallet_types.g.dart';
import 'package:cw_core/wallet_info.dart';
import 'package:cw_core/wallet_type.dart';
import 'package:mobx/mobx.dart';
part 'wallet_groups_display_view_model.g.dart';
class WalletGroupsDisplayViewModel = WalletGroupsDisplayViewModelBase
with _$WalletGroupsDisplayViewModel;
abstract class WalletGroupsDisplayViewModelBase with Store {
WalletGroupsDisplayViewModelBase(
this._appStore,
this._walletLoadingService,
this._walletManager,
this.walletListViewModel, {
required this.type,
}) : isFetchingMnemonic = false,
multiWalletGroups = ObservableList<WalletGroup>(),
singleWalletsList = ObservableList<WalletInfo>() {
reaction((_) => _appStore.wallet, (_) => updateWalletInfoSourceList());
updateWalletInfoSourceList();
}
final WalletType type;
final AppStore _appStore;
final WalletManager _walletManager;
final WalletLoadingService _walletLoadingService;
final WalletListViewModel walletListViewModel;
@observable
ObservableList<WalletGroup> multiWalletGroups;
@observable
ObservableList<WalletInfo> singleWalletsList;
@observable
WalletGroup? selectedWalletGroup;
@observable
WalletInfo? selectedSingleWallet;
@observable
String? parentAddress;
@observable
bool isFetchingMnemonic;
@computed
bool get hasNoFilteredWallet {
return singleWalletsList.isEmpty && multiWalletGroups.isEmpty;
}
@action
Future<String?> getSelectedWalletMnemonic() async {
WalletListItem walletToUse;
bool isGroupSelected = selectedWalletGroup != null;
if (isGroupSelected) {
walletToUse = convertWalletInfoToWalletListItem(selectedWalletGroup!.wallets.first);
} else {
walletToUse = convertWalletInfoToWalletListItem(selectedSingleWallet!);
}
try {
isFetchingMnemonic = true;
final wallet = await _walletLoadingService.load(
walletToUse.type,
walletToUse.name,
);
parentAddress =
isGroupSelected ? selectedWalletGroup!.parentAddress : selectedSingleWallet!.address;
return wallet.seed;
} catch (e) {
return null;
} finally {
isFetchingMnemonic = false;
}
}
@action
void selectWalletGroup(WalletGroup walletGroup) {
selectedWalletGroup = walletGroup;
selectedSingleWallet = null;
}
@action
void selectSingleWallet(WalletInfo singleWallet) {
selectedSingleWallet = singleWallet;
selectedWalletGroup = null;
}
@action
void updateWalletInfoSourceList() {
List<WalletGroup> wallets = [];
multiWalletGroups.clear();
singleWalletsList.clear();
_walletManager.updateWalletGroups();
final walletGroups = _walletManager.walletGroups;
// Iterate through the wallet groups to filter and categorize wallets
for (var group in walletGroups) {
// Handle group wallet filtering
bool shouldExcludeGroup = group.wallets.any((wallet) {
// Check for non-BIP39 wallet types
bool isNonBIP39Wallet = !isBIP39Wallet(wallet.type);
// Check for nano derivation type
bool isNanoDerivationType = wallet.type == WalletType.nano &&
wallet.derivationInfo?.derivationType == DerivationType.nano;
// Check for electrum derivation type
bool isElectrumDerivationType =
(wallet.type == WalletType.bitcoin || wallet.type == WalletType.litecoin) &&
wallet.derivationInfo?.derivationType == DerivationType.electrum;
// Check that selected wallet type is not present already in group
bool isSameTypeAsSelectedWallet = wallet.type == type;
// Exclude if any of these conditions are true
return isNonBIP39Wallet ||
isNanoDerivationType ||
isElectrumDerivationType ||
isSameTypeAsSelectedWallet;
});
if (shouldExcludeGroup) continue;
// If the group passes the filters, add it to the wallets list
wallets.add(group);
}
for (var group in wallets) {
if (group.wallets.length == 1) {
singleWalletsList.add(group.wallets.first);
} else {
multiWalletGroups.add(group);
}
}
}
WalletListItem convertWalletInfoToWalletListItem(WalletInfo info) {
return WalletListItem(
name: info.name,
type: info.type,
key: info.key,
isCurrent: info.name == _appStore.wallet?.name && info.type == _appStore.wallet?.type,
isEnabled: availableWalletTypes.contains(info.type),
isTestnet: info.network?.toLowerCase().contains('testnet') ?? false,
);
}
}

View file

@ -1,4 +1,5 @@
import 'package:cake_wallet/core/wallet_loading_service.dart'; import 'package:cake_wallet/core/wallet_loading_service.dart';
import 'package:cake_wallet/entities/wallet_manager.dart';
import 'package:cake_wallet/view_model/wallet_list/wallet_list_view_model.dart'; import 'package:cake_wallet/view_model/wallet_list/wallet_list_view_model.dart';
import 'package:mobx/mobx.dart'; import 'package:mobx/mobx.dart';
import 'package:cake_wallet/di.dart'; import 'package:cake_wallet/di.dart';
@ -18,8 +19,11 @@ class WalletEditRenamePending extends WalletEditViewModelState {}
class WalletEditDeletePending extends WalletEditViewModelState {} class WalletEditDeletePending extends WalletEditViewModelState {}
abstract class WalletEditViewModelBase with Store { abstract class WalletEditViewModelBase with Store {
WalletEditViewModelBase(this._walletListViewModel, this._walletLoadingService) WalletEditViewModelBase(
: state = WalletEditViewModelInitialState(), this._walletListViewModel,
this._walletLoadingService,
this._walletManager,
) : state = WalletEditViewModelInitialState(),
newName = ''; newName = '';
@observable @observable
@ -30,13 +34,30 @@ abstract class WalletEditViewModelBase with Store {
final WalletListViewModel _walletListViewModel; final WalletListViewModel _walletListViewModel;
final WalletLoadingService _walletLoadingService; final WalletLoadingService _walletLoadingService;
final WalletManager _walletManager;
@action @action
Future<void> changeName(WalletListItem walletItem, {String? password}) async { Future<void> changeName(
WalletListItem walletItem, {
String? password,
String? groupParentAddress,
bool isWalletGroup = false,
}) async {
state = WalletEditRenamePending(); state = WalletEditRenamePending();
await _walletLoadingService.renameWallet(
walletItem.type, walletItem.name, newName, if (isWalletGroup) {
password: password); _walletManager.updateWalletGroups();
_walletManager.setGroupName(groupParentAddress!, newName);
} else {
await _walletLoadingService.renameWallet(
walletItem.type,
walletItem.name,
newName,
password: password,
);
}
_walletListViewModel.updateList(); _walletListViewModel.updateList();
} }

View file

@ -1,5 +1,7 @@
import 'package:cake_wallet/core/wallet_loading_service.dart'; import 'package:cake_wallet/core/wallet_loading_service.dart';
import 'package:cake_wallet/entities/wallet_group.dart';
import 'package:cake_wallet/entities/wallet_list_order_types.dart'; import 'package:cake_wallet/entities/wallet_list_order_types.dart';
import 'package:cake_wallet/entities/wallet_manager.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:mobx/mobx.dart'; import 'package:mobx/mobx.dart';
import 'package:cake_wallet/store/app_store.dart'; import 'package:cake_wallet/store/app_store.dart';
@ -17,7 +19,10 @@ abstract class WalletListViewModelBase with Store {
this._walletInfoSource, this._walletInfoSource,
this._appStore, this._appStore,
this._walletLoadingService, this._walletLoadingService,
) : wallets = ObservableList<WalletListItem>() { this._walletManager,
) : wallets = ObservableList<WalletListItem>(),
multiWalletGroups = ObservableList<WalletGroup>(),
singleWalletsList = ObservableList<WalletListItem>() {
setOrderType(_appStore.settingsStore.walletListOrder); setOrderType(_appStore.settingsStore.walletListOrder);
reaction((_) => _appStore.wallet, (_) => updateList()); reaction((_) => _appStore.wallet, (_) => updateList());
updateList(); updateList();
@ -26,6 +31,15 @@ abstract class WalletListViewModelBase with Store {
@observable @observable
ObservableList<WalletListItem> wallets; ObservableList<WalletListItem> wallets;
// @observable
// ObservableList<WalletGroup> walletGroups;
@observable
ObservableList<WalletGroup> multiWalletGroups;
@observable
ObservableList<WalletListItem> singleWalletsList;
@computed @computed
bool get shouldRequireTOTP2FAForAccessingWallet => bool get shouldRequireTOTP2FAForAccessingWallet =>
_appStore.settingsStore.shouldRequireTOTP2FAForAccessingWallet; _appStore.settingsStore.shouldRequireTOTP2FAForAccessingWallet;
@ -35,6 +49,7 @@ abstract class WalletListViewModelBase with Store {
_appStore.settingsStore.shouldRequireTOTP2FAForCreatingNewWallets; _appStore.settingsStore.shouldRequireTOTP2FAForCreatingNewWallets;
final AppStore _appStore; final AppStore _appStore;
final WalletManager _walletManager;
final Box<WalletInfo> _walletInfoSource; final Box<WalletInfo> _walletInfoSource;
final WalletLoadingService _walletLoadingService; final WalletLoadingService _walletLoadingService;
@ -53,18 +68,23 @@ abstract class WalletListViewModelBase with Store {
@action @action
void updateList() { void updateList() {
wallets.clear(); wallets.clear();
multiWalletGroups.clear();
singleWalletsList.clear();
wallets.addAll( wallets.addAll(
_walletInfoSource.values.map( _walletInfoSource.values.map((info) => convertWalletInfoToWalletListItem(info)),
(info) => WalletListItem(
name: info.name,
type: info.type,
key: info.key,
isCurrent: info.name == _appStore.wallet?.name && info.type == _appStore.wallet?.type,
isEnabled: availableWalletTypes.contains(info.type),
isTestnet: info.network?.toLowerCase().contains('testnet') ?? false,
),
),
); );
//========== Split into shared seed groups and single wallets list
_walletManager.updateWalletGroups();
for (var group in _walletManager.walletGroups) {
if (group.wallets.length == 1) {
singleWalletsList.add(convertWalletInfoToWalletListItem(group.wallets.first));
} else {
multiWalletGroups.add(group);
}
}
} }
Future<void> reorderAccordingToWalletList() async { Future<void> reorderAccordingToWalletList() async {
@ -158,4 +178,15 @@ abstract class WalletListViewModelBase with Store {
break; break;
} }
} }
WalletListItem convertWalletInfoToWalletListItem(WalletInfo info) {
return WalletListItem(
name: info.name,
type: info.type,
key: info.key,
isCurrent: info.name == _appStore.wallet?.name && info.type == _appStore.wallet?.type,
isEnabled: availableWalletTypes.contains(info.type),
isTestnet: info.network?.toLowerCase().contains('testnet') ?? false,
);
}
} }

View file

@ -1,8 +1,9 @@
import 'package:cake_wallet/core/new_wallet_arguments.dart';
import 'package:cake_wallet/ethereum/ethereum.dart';
import 'package:cake_wallet/bitcoin/bitcoin.dart'; import 'package:cake_wallet/bitcoin/bitcoin.dart';
import 'package:cake_wallet/bitcoin_cash/bitcoin_cash.dart'; import 'package:cake_wallet/bitcoin_cash/bitcoin_cash.dart';
import 'package:cake_wallet/core/wallet_creation_service.dart'; import 'package:cake_wallet/core/wallet_creation_service.dart';
import 'package:cake_wallet/entities/seed_type.dart'; import 'package:cake_wallet/entities/seed_type.dart';
import 'package:cake_wallet/ethereum/ethereum.dart';
import 'package:cake_wallet/haven/haven.dart'; import 'package:cake_wallet/haven/haven.dart';
import 'package:cake_wallet/monero/monero.dart'; import 'package:cake_wallet/monero/monero.dart';
import 'package:cake_wallet/nano/nano.dart'; import 'package:cake_wallet/nano/nano.dart';
@ -28,16 +29,17 @@ class WalletNewVM = WalletNewVMBase with _$WalletNewVM;
abstract class WalletNewVMBase extends WalletCreationVM with Store { abstract class WalletNewVMBase extends WalletCreationVM with Store {
WalletNewVMBase( WalletNewVMBase(
AppStore appStore, AppStore appStore,
WalletCreationService walletCreationService, WalletCreationService walletCreationService,
Box<WalletInfo> walletInfoSource, Box<WalletInfo> walletInfoSource,
this.advancedPrivacySettingsViewModel, this.advancedPrivacySettingsViewModel,
SeedSettingsViewModel seedSettingsViewModel, SeedSettingsViewModel seedSettingsViewModel, {
{required WalletType type}) required this.newWalletArguments,
: selectedMnemonicLanguage = '', }) : selectedMnemonicLanguage = '',
super(appStore, walletInfoSource, walletCreationService, seedSettingsViewModel, super(appStore, walletInfoSource, walletCreationService, seedSettingsViewModel,
type: type, isRecovery: false); type: newWalletArguments!.type, isRecovery: false);
final NewWalletArguments? newWalletArguments;
final AdvancedPrivacySettingsViewModel advancedPrivacySettingsViewModel; final AdvancedPrivacySettingsViewModel advancedPrivacySettingsViewModel;
@observable @observable
@ -62,6 +64,10 @@ abstract class WalletNewVMBase extends WalletCreationVM with Store {
return seedSettingsViewModel.bitcoinSeedType == BitcoinSeedType.bip39 return seedSettingsViewModel.bitcoinSeedType == BitcoinSeedType.bip39
? advancedPrivacySettingsViewModel.seedPhraseLength.value ? advancedPrivacySettingsViewModel.seedPhraseLength.value
: 24; : 24;
case WalletType.nano:
return seedSettingsViewModel.nanoSeedType == NanoSeedType.bip39
? advancedPrivacySettingsViewModel.seedPhraseLength.value
: 24;
default: default:
return 24; return 24;
} }
@ -83,31 +89,68 @@ abstract class WalletNewVMBase extends WalletCreationVM with Store {
password: walletPassword, password: walletPassword,
isPolyseed: options.last as bool); isPolyseed: options.last as bool);
case WalletType.bitcoin: case WalletType.bitcoin:
return bitcoin!.createBitcoinNewWalletCredentials(
name: name, password: walletPassword, passphrase: passphrase);
case WalletType.litecoin: case WalletType.litecoin:
return bitcoin!.createBitcoinNewWalletCredentials( return bitcoin!.createBitcoinNewWalletCredentials(
name: name, password: walletPassword, passphrase: passphrase); name: name,
password: walletPassword,
passphrase: passphrase,
mnemonic: newWalletArguments!.mnemonic,
parentAddress: newWalletArguments!.parentAddress,
);
case WalletType.haven: case WalletType.haven:
return haven!.createHavenNewWalletCredentials( return haven!.createHavenNewWalletCredentials(
name: name, language: options!.first as String, password: walletPassword); name: name, language: options!.first as String, password: walletPassword);
case WalletType.ethereum: case WalletType.ethereum:
return ethereum!.createEthereumNewWalletCredentials(name: name, password: walletPassword); return ethereum!.createEthereumNewWalletCredentials(
name: name,
password: walletPassword,
mnemonic: newWalletArguments!.mnemonic,
parentAddress: newWalletArguments!.parentAddress,
);
case WalletType.bitcoinCash: case WalletType.bitcoinCash:
return bitcoinCash!.createBitcoinCashNewWalletCredentials( return bitcoinCash!.createBitcoinCashNewWalletCredentials(
name: name, password: walletPassword, passphrase: passphrase); name: name,
password: walletPassword,
passphrase: passphrase,
mnemonic: newWalletArguments!.mnemonic,
parentAddress: newWalletArguments!.parentAddress,
);
case WalletType.nano: case WalletType.nano:
case WalletType.banano: case WalletType.banano:
return nano!.createNanoNewWalletCredentials(name: name); return nano!.createNanoNewWalletCredentials(
name: name,
password: walletPassword,
mnemonic: newWalletArguments!.mnemonic,
parentAddress: newWalletArguments!.parentAddress,
);
case WalletType.polygon: case WalletType.polygon:
return polygon!.createPolygonNewWalletCredentials(name: name, password: walletPassword); return polygon!.createPolygonNewWalletCredentials(
name: name,
password: walletPassword,
mnemonic: newWalletArguments!.mnemonic,
parentAddress: newWalletArguments!.parentAddress,
);
case WalletType.solana: case WalletType.solana:
return solana!.createSolanaNewWalletCredentials(name: name, password: walletPassword); return solana!.createSolanaNewWalletCredentials(
name: name,
password: walletPassword,
mnemonic: newWalletArguments!.mnemonic,
parentAddress: newWalletArguments!.parentAddress,
);
case WalletType.tron: case WalletType.tron:
return tron!.createTronNewWalletCredentials(name: name); return tron!.createTronNewWalletCredentials(
name: name,
password: walletPassword,
mnemonic: newWalletArguments!.mnemonic,
parentAddress: newWalletArguments!.parentAddress,
);
case WalletType.wownero: case WalletType.wownero:
return wownero!.createWowneroNewWalletCredentials( return wownero!.createWowneroNewWalletCredentials(
name: name, language: options!.first as String, isPolyseed: options.last as bool); name: name,
password: walletPassword,
language: options!.first as String,
isPolyseed: options.last as bool,
);
case WalletType.none: case WalletType.none:
throw Exception('Unexpected type: ${type.toString()}'); throw Exception('Unexpected type: ${type.toString()}');
} }

View file

@ -129,7 +129,7 @@
"choose_from_available_options": "اختر من بين الخيارات المتاحة:", "choose_from_available_options": "اختر من بين الخيارات المتاحة:",
"choose_one": "اختر واحدة", "choose_one": "اختر واحدة",
"choose_relay": "ﻡﺍﺪﺨﺘﺳﻼﻟ ﻊﺑﺎﺘﺘﻟﺍ ﺭﺎﻴﺘﺧﺍ ءﺎﺟﺮﻟﺍ", "choose_relay": "ﻡﺍﺪﺨﺘﺳﻼﻟ ﻊﺑﺎﺘﺘﻟﺍ ﺭﺎﻴﺘﺧﺍ ءﺎﺟﺮﻟﺍ",
"choose_wallet_currency": "الرجاء اختيار عملة المحفظة:", "choose_wallet_group": "اختر مجموعة المحفظة",
"clear": "مسح", "clear": "مسح",
"clearnet_link": "رابط Clearnet", "clearnet_link": "رابط Clearnet",
"close": "يغلق", "close": "يغلق",
@ -176,6 +176,7 @@
"create_invoice": "إنشاء فاتورة", "create_invoice": "إنشاء فاتورة",
"create_new": "إنشاء محفظة جديدة", "create_new": "إنشاء محفظة جديدة",
"create_new_account": "انشاء حساب جديد", "create_new_account": "انشاء حساب جديد",
"create_new_seed": "إنشاء بذرة جديدة",
"creating_new_wallet": "يتم إنشاء محفظة جديدة", "creating_new_wallet": "يتم إنشاء محفظة جديدة",
"creating_new_wallet_error": "خطأ: ${description}", "creating_new_wallet_error": "خطأ: ${description}",
"creation_date": "تاريخ الإنشاء", "creation_date": "تاريخ الإنشاء",
@ -600,6 +601,8 @@
"seed_share": "شارك السييد", "seed_share": "شارك السييد",
"seed_title": "سييد", "seed_title": "سييد",
"seedtype": "البذور", "seedtype": "البذور",
"seedtype_alert_content": "مشاركة البذور مع محافظ أخرى ممكن فقط مع BIP39 Seedtype.",
"seedtype_alert_title": "تنبيه البذور",
"seedtype_legacy": "إرث (25 كلمة)", "seedtype_legacy": "إرث (25 كلمة)",
"seedtype_polyseed": "بوليسيد (16 كلمة)", "seedtype_polyseed": "بوليسيد (16 كلمة)",
"select_backup_file": "حدد ملف النسخ الاحتياطي", "select_backup_file": "حدد ملف النسخ الاحتياطي",
@ -666,6 +669,7 @@
"setup_your_debit_card": "قم بإعداد بطاقة ائتمان الخاصة بك", "setup_your_debit_card": "قم بإعداد بطاقة ائتمان الخاصة بك",
"share": "يشارك", "share": "يشارك",
"share_address": "شارك العنوان", "share_address": "شارك العنوان",
"shared_seed_wallet_groups": "مجموعات محفظة البذور المشتركة",
"show_details": "اظهر التفاصيل", "show_details": "اظهر التفاصيل",
"show_keys": "اظهار السييد / المفاتيح", "show_keys": "اظهار السييد / المفاتيح",
"show_market_place": "إظهار السوق", "show_market_place": "إظهار السوق",
@ -690,6 +694,7 @@
"silent_payments_scanned_tip": "ممسوح ليفحص! (${tip})", "silent_payments_scanned_tip": "ممسوح ليفحص! (${tip})",
"silent_payments_scanning": "المدفوعات الصامتة المسح الضوئي", "silent_payments_scanning": "المدفوعات الصامتة المسح الضوئي",
"silent_payments_settings": "إعدادات المدفوعات الصامتة", "silent_payments_settings": "إعدادات المدفوعات الصامتة",
"single_seed_wallets_group": "محافظ بذرة واحدة",
"slidable": "قابل للانزلاق", "slidable": "قابل للانزلاق",
"sort_by": "ترتيب حسب", "sort_by": "ترتيب حسب",
"spend_key_private": "مفتاح الإنفاق (خاص)", "spend_key_private": "مفتاح الإنفاق (خاص)",
@ -849,8 +854,16 @@
"view_transaction_on": "عرض العملية على", "view_transaction_on": "عرض العملية على",
"voting_weight": "وزن التصويت", "voting_weight": "وزن التصويت",
"waitFewSecondForTxUpdate": "ﺕﻼﻣﺎﻌﻤﻟﺍ ﻞﺠﺳ ﻲﻓ ﺔﻠﻣﺎﻌﻤﻟﺍ ﺲﻜﻌﻨﺗ ﻰﺘﺣ ﻥﺍﻮﺛ ﻊﻀﺒﻟ ﺭﺎﻈﺘﻧﻻﺍ ﻰﺟﺮﻳ", "waitFewSecondForTxUpdate": "ﺕﻼﻣﺎﻌﻤﻟﺍ ﻞﺠﺳ ﻲﻓ ﺔﻠﻣﺎﻌﻤﻟﺍ ﺲﻜﻌﻨﺗ ﻰﺘﺣ ﻥﺍﻮﺛ ﻊﻀﺒﻟ ﺭﺎﻈﺘﻧﻻﺍ ﻰﺟﺮﻳ",
"wallet_group": "مجموعة محفظة",
"wallet_group_description_four": "لإنشاء محفظة مع بذرة جديدة تماما.",
"wallet_group_description_one": "في محفظة الكيك ، يمكنك إنشاء ملف",
"wallet_group_description_three": "لرؤية المحافظ المتاحة و/أو شاشة مجموعات المحفظة. أو اختر",
"wallet_group_description_two": "عن طريق اختيار محفظة موجودة لتبادل البذور مع. يمكن أن تحتوي كل مجموعة محفظة على محفظة واحدة من كل نوع من العملة. \n\n يمكنك تحديدها",
"wallet_group_empty_state_text_one": "يبدو أنه ليس لديك أي مجموعات محفظة متوافقة !\n\n انقر",
"wallet_group_empty_state_text_two": "أدناه لجعل واحدة جديدة.",
"wallet_keys": "سييد المحفظة / المفاتيح", "wallet_keys": "سييد المحفظة / المفاتيح",
"wallet_list_create_new_wallet": "إنشاء محفظة جديدة", "wallet_list_create_new_wallet": "إنشاء محفظة جديدة",
"wallet_list_edit_group_name": "تحرير اسم المجموعة",
"wallet_list_edit_wallet": "تحرير المحفظة", "wallet_list_edit_wallet": "تحرير المحفظة",
"wallet_list_failed_to_load": "فشل تحميل محفظة ${wallet_name}. ${error}", "wallet_list_failed_to_load": "فشل تحميل محفظة ${wallet_name}. ${error}",
"wallet_list_failed_to_remove": "فشلت إزالة محفظة ${wallet_name}. ${error}", "wallet_list_failed_to_remove": "فشلت إزالة محفظة ${wallet_name}. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Изберете едно", "choose_one": "Изберете едно",
"choose_relay": "Моля, изберете реле, което да използвате", "choose_relay": "Моля, изберете реле, което да използвате",
"choose_wallet_currency": "Изберете валута за портфейла:", "choose_wallet_currency": "Изберете валута за портфейла:",
"choose_wallet_group": "Изберете Group Wallet",
"clear": "Изчисти", "clear": "Изчисти",
"clearnet_link": "Clearnet връзка", "clearnet_link": "Clearnet връзка",
"close": "затвори", "close": "затвори",
@ -176,6 +177,7 @@
"create_invoice": "Създайте фактура", "create_invoice": "Създайте фактура",
"create_new": "Създаване на нов портфейл", "create_new": "Създаване на нов портфейл",
"create_new_account": "Създаване на нов профил", "create_new_account": "Създаване на нов профил",
"create_new_seed": "Създайте нови семена",
"creating_new_wallet": "Създаване на нов портфейл", "creating_new_wallet": "Създаване на нов портфейл",
"creating_new_wallet_error": "Грешка: ${description}", "creating_new_wallet_error": "Грешка: ${description}",
"creation_date": "Дата на създаване", "creation_date": "Дата на създаване",
@ -600,6 +602,8 @@
"seed_share": "Споделяне на seed", "seed_share": "Споделяне на seed",
"seed_title": "Seed", "seed_title": "Seed",
"seedtype": "Семенна тип", "seedtype": "Семенна тип",
"seedtype_alert_content": "Споделянето на семена с други портфейли е възможно само с BIP39 Seedtype.",
"seedtype_alert_title": "Сигнал за семена",
"seedtype_legacy": "Наследство (25 думи)", "seedtype_legacy": "Наследство (25 думи)",
"seedtype_polyseed": "Поли семе (16 думи)", "seedtype_polyseed": "Поли семе (16 думи)",
"select_backup_file": "Избор на резервно копие", "select_backup_file": "Избор на резервно копие",
@ -666,6 +670,7 @@
"setup_your_debit_card": "Настройте своята дебитна карта", "setup_your_debit_card": "Настройте своята дебитна карта",
"share": "Дял", "share": "Дял",
"share_address": "Сподели адрес", "share_address": "Сподели адрес",
"shared_seed_wallet_groups": "Споделени групи за портфейли за семена",
"show_details": "Показване на подробностите", "show_details": "Показване на подробностите",
"show_keys": "Покажи seed/keys", "show_keys": "Покажи seed/keys",
"show_market_place": "Покажи пазар", "show_market_place": "Покажи пазар",
@ -690,6 +695,7 @@
"silent_payments_scanned_tip": "Сканиран за съвет! (${tip})", "silent_payments_scanned_tip": "Сканиран за съвет! (${tip})",
"silent_payments_scanning": "Безшумни плащания за сканиране", "silent_payments_scanning": "Безшумни плащания за сканиране",
"silent_payments_settings": "Настройки за безшумни плащания", "silent_payments_settings": "Настройки за безшумни плащания",
"single_seed_wallets_group": "Портфейли с единични семена",
"slidable": "Плъзгащ се", "slidable": "Плъзгащ се",
"sort_by": "Сортирай по", "sort_by": "Сортирай по",
"spend_key_private": "Spend key (таен)", "spend_key_private": "Spend key (таен)",
@ -849,8 +855,16 @@
"view_transaction_on": "Вижте транзакция на ", "view_transaction_on": "Вижте транзакция на ",
"voting_weight": "Тегло на гласуване", "voting_weight": "Тегло на гласуване",
"waitFewSecondForTxUpdate": "Моля, изчакайте няколко секунди, докато транзакцията се отрази в историята на транзакциите", "waitFewSecondForTxUpdate": "Моля, изчакайте няколко секунди, докато транзакцията се отрази в историята на транзакциите",
"wallet_group": "Група на портфейла",
"wallet_group_description_four": "За да създадете портфейл с изцяло ново семе.",
"wallet_group_description_one": "В портфейла за торта можете да създадете a",
"wallet_group_description_three": "За да видите наличния екран за портфейли и/или групи за портфейли. Или изберете",
"wallet_group_description_two": "Чрез избора на съществуващ портфейл, с който да споделите семе. Всяка група за портфейл може да съдържа по един портфейл от всеки тип валута. \n\n Можете да изберете",
"wallet_group_empty_state_text_one": "Изглежда, че нямате съвместими групи портфейли !\n\n tap",
"wallet_group_empty_state_text_two": "по -долу, за да се направи нов.",
"wallet_keys": "Seed/keys на портфейла", "wallet_keys": "Seed/keys на портфейла",
"wallet_list_create_new_wallet": "Създаване на нов портфейл", "wallet_list_create_new_wallet": "Създаване на нов портфейл",
"wallet_list_edit_group_name": "Редактиране на име на групата",
"wallet_list_edit_wallet": "Редактиране на портфейла", "wallet_list_edit_wallet": "Редактиране на портфейла",
"wallet_list_failed_to_load": "Грешка при зареждането на портфейл ${wallet_name}. ${error}", "wallet_list_failed_to_load": "Грешка при зареждането на портфейл ${wallet_name}. ${error}",
"wallet_list_failed_to_remove": "Грешка при премахването на портфейл${wallet_name}. ${error}", "wallet_list_failed_to_remove": "Грешка при премахването на портфейл${wallet_name}. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Zvolte si", "choose_one": "Zvolte si",
"choose_relay": "Vyberte relé, které chcete použít", "choose_relay": "Vyberte relé, které chcete použít",
"choose_wallet_currency": "Prosím zvolte si měnu pro peněženku:", "choose_wallet_currency": "Prosím zvolte si měnu pro peněženku:",
"choose_wallet_group": "Vyberte skupinu peněženky",
"clear": "Smazat", "clear": "Smazat",
"clearnet_link": "Odkaz na Clearnet", "clearnet_link": "Odkaz na Clearnet",
"close": "zavřít", "close": "zavřít",
@ -176,6 +177,7 @@
"create_invoice": "Vytvořit fakturu", "create_invoice": "Vytvořit fakturu",
"create_new": "Vytvořit novou peněženku", "create_new": "Vytvořit novou peněženku",
"create_new_account": "Vytvořit nový účet", "create_new_account": "Vytvořit nový účet",
"create_new_seed": "Vytvořte nové semeno",
"creating_new_wallet": "Vytvářím novou peněženku", "creating_new_wallet": "Vytvářím novou peněženku",
"creating_new_wallet_error": "Chyba: ${description}", "creating_new_wallet_error": "Chyba: ${description}",
"creation_date": "Datum vzniku", "creation_date": "Datum vzniku",
@ -600,6 +602,8 @@
"seed_share": "Sdílet seed", "seed_share": "Sdílet seed",
"seed_title": "Seed", "seed_title": "Seed",
"seedtype": "SeedType", "seedtype": "SeedType",
"seedtype_alert_content": "Sdílení semen s jinými peněženkami je možné pouze u BIP39 SeedType.",
"seedtype_alert_title": "Upozornění seedtype",
"seedtype_legacy": "Legacy (25 slov)", "seedtype_legacy": "Legacy (25 slov)",
"seedtype_polyseed": "Polyseed (16 slov)", "seedtype_polyseed": "Polyseed (16 slov)",
"select_backup_file": "Vybrat soubor se zálohou", "select_backup_file": "Vybrat soubor se zálohou",
@ -666,6 +670,7 @@
"setup_your_debit_card": "Nastavit debetní kartu", "setup_your_debit_card": "Nastavit debetní kartu",
"share": "Podíl", "share": "Podíl",
"share_address": "Sdílet adresu", "share_address": "Sdílet adresu",
"shared_seed_wallet_groups": "Skupiny sdílených semen",
"show_details": "Zobrazit detaily", "show_details": "Zobrazit detaily",
"show_keys": "Zobrazit seed/klíče", "show_keys": "Zobrazit seed/klíče",
"show_market_place": "Zobrazit trh", "show_market_place": "Zobrazit trh",
@ -690,6 +695,7 @@
"silent_payments_scanned_tip": "Naskenované na tip! (${tip})", "silent_payments_scanned_tip": "Naskenované na tip! (${tip})",
"silent_payments_scanning": "Skenování tichých plateb", "silent_payments_scanning": "Skenování tichých plateb",
"silent_payments_settings": "Nastavení tichých plateb", "silent_payments_settings": "Nastavení tichých plateb",
"single_seed_wallets_group": "Jednorázové peněženky",
"slidable": "Posuvné", "slidable": "Posuvné",
"sort_by": "Seřazeno podle", "sort_by": "Seřazeno podle",
"spend_key_private": "Klíč pro platby (soukromý)", "spend_key_private": "Klíč pro platby (soukromý)",
@ -849,8 +855,16 @@
"view_transaction_on": "Zobrazit transakci na ", "view_transaction_on": "Zobrazit transakci na ",
"voting_weight": "Hlasová váha", "voting_weight": "Hlasová váha",
"waitFewSecondForTxUpdate": "Počkejte několik sekund, než se transakce projeví v historii transakcí", "waitFewSecondForTxUpdate": "Počkejte několik sekund, než se transakce projeví v historii transakcí",
"wallet_group": "Skupina peněženky",
"wallet_group_description_four": "Vytvoření peněženky s zcela novým semenem.",
"wallet_group_description_one": "V peněžence dortu můžete vytvořit a",
"wallet_group_description_three": "Chcete -li zobrazit dostupnou obrazovku Skupina skupin peněženek a/nebo skupin peněženek. Nebo zvolit",
"wallet_group_description_two": "Výběrem existující peněženky pro sdílení semeno. Každá skupina peněženek může obsahovat jednu peněženku každého typu měny. \n\n Můžete si vybrat",
"wallet_group_empty_state_text_one": "Vypadá to, že nemáte žádné kompatibilní skupiny peněženky !\n\n",
"wallet_group_empty_state_text_two": "Níže vytvořit nový.",
"wallet_keys": "Seed/klíče peněženky", "wallet_keys": "Seed/klíče peněženky",
"wallet_list_create_new_wallet": "Vytvořit novou peněženku", "wallet_list_create_new_wallet": "Vytvořit novou peněženku",
"wallet_list_edit_group_name": "Upravit název skupiny",
"wallet_list_edit_wallet": "Upravit peněženku", "wallet_list_edit_wallet": "Upravit peněženku",
"wallet_list_failed_to_load": "Chyba při načítání ${wallet_name} peněženky. ${error}", "wallet_list_failed_to_load": "Chyba při načítání ${wallet_name} peněženky. ${error}",
"wallet_list_failed_to_remove": "Chyba při odstraňování ${wallet_name} peněženky. ${error}", "wallet_list_failed_to_remove": "Chyba při odstraňování ${wallet_name} peněženky. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Wähle ein", "choose_one": "Wähle ein",
"choose_relay": "Bitte wählen Sie ein zu verwendendes Relais aus", "choose_relay": "Bitte wählen Sie ein zu verwendendes Relais aus",
"choose_wallet_currency": "Bitte wählen Sie die Währung der Wallet:", "choose_wallet_currency": "Bitte wählen Sie die Währung der Wallet:",
"choose_wallet_group": "Wählen Sie Brieftaschengruppe",
"clear": "Zurücksetzen", "clear": "Zurücksetzen",
"clearnet_link": "Clearnet-Link", "clearnet_link": "Clearnet-Link",
"close": "Schließen", "close": "Schließen",
@ -176,6 +177,7 @@
"create_invoice": "Rechnung erstellen", "create_invoice": "Rechnung erstellen",
"create_new": "Neue Wallet erstellen", "create_new": "Neue Wallet erstellen",
"create_new_account": "Neues Konto erstellen", "create_new_account": "Neues Konto erstellen",
"create_new_seed": "Neue Samen erstellen",
"creating_new_wallet": "Neue Wallet erstellen", "creating_new_wallet": "Neue Wallet erstellen",
"creating_new_wallet_error": "Fehler: ${description}", "creating_new_wallet_error": "Fehler: ${description}",
"creation_date": "Erstellungsdatum", "creation_date": "Erstellungsdatum",
@ -601,6 +603,8 @@
"seed_share": "Seed teilen", "seed_share": "Seed teilen",
"seed_title": "Seed", "seed_title": "Seed",
"seedtype": "Seedtyp", "seedtype": "Seedtyp",
"seedtype_alert_content": "Das Teilen von Samen mit anderen Brieftaschen ist nur mit bip39 Seedype möglich.",
"seedtype_alert_title": "Seedype -Alarm",
"seedtype_legacy": "Veraltet (25 Wörter)", "seedtype_legacy": "Veraltet (25 Wörter)",
"seedtype_polyseed": "Polyseed (16 Wörter)", "seedtype_polyseed": "Polyseed (16 Wörter)",
"select_backup_file": "Sicherungsdatei auswählen", "select_backup_file": "Sicherungsdatei auswählen",
@ -667,6 +671,7 @@
"setup_your_debit_card": "Richten Sie Ihre Debitkarte ein", "setup_your_debit_card": "Richten Sie Ihre Debitkarte ein",
"share": "Teilen", "share": "Teilen",
"share_address": "Adresse teilen ", "share_address": "Adresse teilen ",
"shared_seed_wallet_groups": "Gemeinsame Samenbrieftaschengruppen",
"show_details": "Details anzeigen", "show_details": "Details anzeigen",
"show_keys": "Seed/Schlüssel anzeigen", "show_keys": "Seed/Schlüssel anzeigen",
"show_market_place": "Marktplatz anzeigen", "show_market_place": "Marktplatz anzeigen",
@ -691,6 +696,7 @@
"silent_payments_scanned_tip": "Gescannt zum Trinkgeld! (${tip})", "silent_payments_scanned_tip": "Gescannt zum Trinkgeld! (${tip})",
"silent_payments_scanning": "Stille Zahlungen scannen", "silent_payments_scanning": "Stille Zahlungen scannen",
"silent_payments_settings": "Einstellungen für stille Zahlungen", "silent_payments_settings": "Einstellungen für stille Zahlungen",
"single_seed_wallets_group": "Einzelne Samenbriefen",
"slidable": "Verschiebbar", "slidable": "Verschiebbar",
"sort_by": "Sortiere nach", "sort_by": "Sortiere nach",
"spend_key_private": "Spend Key (geheim)", "spend_key_private": "Spend Key (geheim)",
@ -852,8 +858,16 @@
"voting_weight": "Stimmgewicht", "voting_weight": "Stimmgewicht",
"waitFewSecondForTxUpdate": "Bitte warten Sie einige Sekunden, bis die Transaktion im Transaktionsverlauf angezeigt wird", "waitFewSecondForTxUpdate": "Bitte warten Sie einige Sekunden, bis die Transaktion im Transaktionsverlauf angezeigt wird",
"waiting_payment_confirmation": "Warte auf Zahlungsbestätigung", "waiting_payment_confirmation": "Warte auf Zahlungsbestätigung",
"wallet_group": "Brieftaschengruppe",
"wallet_group_description_four": "eine Brieftasche mit einem völlig neuen Samen schaffen.",
"wallet_group_description_one": "In Kuchenbrieftasche können Sie eine erstellen",
"wallet_group_description_three": "Sehen Sie den Bildschirm zur verfügbaren Brieftaschen und/oder Brieftaschengruppen. Oder wählen",
"wallet_group_description_two": "Durch die Auswahl einer vorhandenen Brieftasche, mit der ein Samen geteilt werden kann. Jede Brieftaschengruppe kann eine einzelne Brieftasche jedes Währungstyps enthalten. \n\n Sie können auswählen",
"wallet_group_empty_state_text_one": "Sieht so aus, als hätten Sie keine kompatiblen Brieftaschengruppen !\n\n TAP",
"wallet_group_empty_state_text_two": "unten, um einen neuen zu machen.",
"wallet_keys": "Wallet-Seed/-Schlüssel", "wallet_keys": "Wallet-Seed/-Schlüssel",
"wallet_list_create_new_wallet": "Neue Wallet erstellen", "wallet_list_create_new_wallet": "Neue Wallet erstellen",
"wallet_list_edit_group_name": "Gruppenname bearbeiten",
"wallet_list_edit_wallet": "Wallet bearbeiten", "wallet_list_edit_wallet": "Wallet bearbeiten",
"wallet_list_failed_to_load": "Laden der Wallet ${wallet_name} fehlgeschlagen. ${error}", "wallet_list_failed_to_load": "Laden der Wallet ${wallet_name} fehlgeschlagen. ${error}",
"wallet_list_failed_to_remove": "Fehler beim Entfernen der Wallet ${wallet_name}. ${error}", "wallet_list_failed_to_remove": "Fehler beim Entfernen der Wallet ${wallet_name}. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Choose one", "choose_one": "Choose one",
"choose_relay": "Please choose a relay to use", "choose_relay": "Please choose a relay to use",
"choose_wallet_currency": "Please choose wallet currency:", "choose_wallet_currency": "Please choose wallet currency:",
"choose_wallet_group": "Choose Wallet Group",
"clear": "Clear", "clear": "Clear",
"clearnet_link": "Clearnet link", "clearnet_link": "Clearnet link",
"close": "Close", "close": "Close",
@ -176,6 +177,7 @@
"create_invoice": "Create invoice", "create_invoice": "Create invoice",
"create_new": "Create New Wallet", "create_new": "Create New Wallet",
"create_new_account": "Create new account", "create_new_account": "Create new account",
"create_new_seed": "Create New Seed",
"creating_new_wallet": "Creating new wallet", "creating_new_wallet": "Creating new wallet",
"creating_new_wallet_error": "Error: ${description}", "creating_new_wallet_error": "Error: ${description}",
"creation_date": "Creation Date", "creation_date": "Creation Date",
@ -600,6 +602,8 @@
"seed_share": "Share seed", "seed_share": "Share seed",
"seed_title": "Seed", "seed_title": "Seed",
"seedtype": "Seedtype", "seedtype": "Seedtype",
"seedtype_alert_content": "Sharing seeds with other wallets is only possible with BIP39 SeedType.",
"seedtype_alert_title": "SeedType Alert",
"seedtype_legacy": "Legacy (25 words)", "seedtype_legacy": "Legacy (25 words)",
"seedtype_polyseed": "Polyseed (16 words)", "seedtype_polyseed": "Polyseed (16 words)",
"seedtype_wownero": "Wownero (14 words)", "seedtype_wownero": "Wownero (14 words)",
@ -667,6 +671,7 @@
"setup_your_debit_card": "Set up your debit card", "setup_your_debit_card": "Set up your debit card",
"share": "Share", "share": "Share",
"share_address": "Share address", "share_address": "Share address",
"shared_seed_wallet_groups": "Shared Seed Wallet Groups",
"show_details": "Show Details", "show_details": "Show Details",
"show_keys": "Show seed/keys", "show_keys": "Show seed/keys",
"show_market_place": "Show Marketplace", "show_market_place": "Show Marketplace",
@ -691,6 +696,7 @@
"silent_payments_scanned_tip": "SCANNED TO TIP! (${tip})", "silent_payments_scanned_tip": "SCANNED TO TIP! (${tip})",
"silent_payments_scanning": "Silent Payments Scanning", "silent_payments_scanning": "Silent Payments Scanning",
"silent_payments_settings": "Silent Payments settings", "silent_payments_settings": "Silent Payments settings",
"single_seed_wallets_group": "Single Seed Wallets",
"slidable": "Slidable", "slidable": "Slidable",
"sort_by": "Sort by", "sort_by": "Sort by",
"spend_key_private": "Spend key (private)", "spend_key_private": "Spend key (private)",
@ -850,8 +856,16 @@
"view_transaction_on": "View Transaction on ", "view_transaction_on": "View Transaction on ",
"voting_weight": "Voting Weight", "voting_weight": "Voting Weight",
"waitFewSecondForTxUpdate": "Kindly wait for a few seconds for transaction to reflect in transactions history", "waitFewSecondForTxUpdate": "Kindly wait for a few seconds for transaction to reflect in transactions history",
"wallet_group": "Wallet Group",
"wallet_group_description_four": "to create a wallet with an entirely new seed.",
"wallet_group_description_one": "In Cake Wallet, you can create a",
"wallet_group_description_three": "to see the available wallets and/or wallet groups screen. Or choose",
"wallet_group_description_two": "by selecting an existing wallet to share a seed with. Each wallet group can contain a single wallet of each currency type.\n\nYou can select",
"wallet_group_empty_state_text_one": "Looks like you don't have any compatible wallet groups!\n\nTap",
"wallet_group_empty_state_text_two": "below to make a new one.",
"wallet_keys": "Wallet seed/keys", "wallet_keys": "Wallet seed/keys",
"wallet_list_create_new_wallet": "Create New Wallet", "wallet_list_create_new_wallet": "Create New Wallet",
"wallet_list_edit_group_name": "Edit Group Name",
"wallet_list_edit_wallet": "Edit wallet", "wallet_list_edit_wallet": "Edit wallet",
"wallet_list_failed_to_load": "Failed to load ${wallet_name} wallet. ${error}", "wallet_list_failed_to_load": "Failed to load ${wallet_name} wallet. ${error}",
"wallet_list_failed_to_remove": "Failed to remove ${wallet_name} wallet. ${error}", "wallet_list_failed_to_remove": "Failed to remove ${wallet_name} wallet. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Elige uno", "choose_one": "Elige uno",
"choose_relay": "Por favor elija un relé para usar", "choose_relay": "Por favor elija un relé para usar",
"choose_wallet_currency": "Por favor, elija la moneda de la billetera:", "choose_wallet_currency": "Por favor, elija la moneda de la billetera:",
"choose_wallet_group": "Elija el grupo de billetera",
"clear": "Claro", "clear": "Claro",
"clearnet_link": "enlace Clearnet", "clearnet_link": "enlace Clearnet",
"close": "Cerca", "close": "Cerca",
@ -176,6 +177,7 @@
"create_invoice": "Crear factura", "create_invoice": "Crear factura",
"create_new": "Crear nueva billetera", "create_new": "Crear nueva billetera",
"create_new_account": "Crear una nueva cuenta", "create_new_account": "Crear una nueva cuenta",
"create_new_seed": "Crear nueva semilla",
"creating_new_wallet": "Creando nueva billetera", "creating_new_wallet": "Creando nueva billetera",
"creating_new_wallet_error": "Error: ${description}", "creating_new_wallet_error": "Error: ${description}",
"creation_date": "Fecha de creación", "creation_date": "Fecha de creación",
@ -601,6 +603,8 @@
"seed_share": "Compartir semillas", "seed_share": "Compartir semillas",
"seed_title": "Semilla", "seed_title": "Semilla",
"seedtype": "Type de semillas", "seedtype": "Type de semillas",
"seedtype_alert_content": "Compartir semillas con otras billeteras solo es posible con Bip39 Seed Type.",
"seedtype_alert_title": "Alerta de type de semillas",
"seedtype_legacy": "Legado (25 palabras)", "seedtype_legacy": "Legado (25 palabras)",
"seedtype_polyseed": "Polieta (16 palabras)", "seedtype_polyseed": "Polieta (16 palabras)",
"select_backup_file": "Seleccionar archivo de respaldo", "select_backup_file": "Seleccionar archivo de respaldo",
@ -667,6 +671,7 @@
"setup_your_debit_card": "Configura tu tarjeta de débito", "setup_your_debit_card": "Configura tu tarjeta de débito",
"share": "Compartir", "share": "Compartir",
"share_address": "Compartir dirección", "share_address": "Compartir dirección",
"shared_seed_wallet_groups": "Grupos de billetera de semillas compartidas",
"show_details": "Mostrar detalles", "show_details": "Mostrar detalles",
"show_keys": "Mostrar semilla/claves", "show_keys": "Mostrar semilla/claves",
"show_market_place": "Mostrar mercado", "show_market_place": "Mostrar mercado",
@ -691,6 +696,7 @@
"silent_payments_scanned_tip": "Escaneado hasta la punta! (${tip})", "silent_payments_scanned_tip": "Escaneado hasta la punta! (${tip})",
"silent_payments_scanning": "Escaneo de pagos silenciosos", "silent_payments_scanning": "Escaneo de pagos silenciosos",
"silent_payments_settings": "Configuración de pagos silenciosos", "silent_payments_settings": "Configuración de pagos silenciosos",
"single_seed_wallets_group": "Billeteras de semillas individuales",
"slidable": "deslizable", "slidable": "deslizable",
"sort_by": "Ordenar por", "sort_by": "Ordenar por",
"spend_key_private": "Spend clave (privado)", "spend_key_private": "Spend clave (privado)",
@ -850,8 +856,16 @@
"view_transaction_on": "View Transaction on ", "view_transaction_on": "View Transaction on ",
"voting_weight": "Peso de votación", "voting_weight": "Peso de votación",
"waitFewSecondForTxUpdate": "Espere unos segundos para que la transacción se refleje en el historial de transacciones.", "waitFewSecondForTxUpdate": "Espere unos segundos para que la transacción se refleje en el historial de transacciones.",
"wallet_group": "Grupo de billetera",
"wallet_group_description_four": "para crear una billetera con una semilla completamente nueva.",
"wallet_group_description_one": "En la billetera de pastel, puedes crear un",
"wallet_group_description_three": "Para ver las billeteras disponibles y/o la pantalla de grupos de billeteras. O elegir",
"wallet_group_description_two": "seleccionando una billetera existente para compartir una semilla con. Cada grupo de billetera puede contener una sola billetera de cada tipo de moneda. \n\n puede seleccionar",
"wallet_group_empty_state_text_one": "Parece que no tienes ningún grupo de billetera compatible !\n\n toque",
"wallet_group_empty_state_text_two": "a continuación para hacer uno nuevo.",
"wallet_keys": "Billetera semilla/claves", "wallet_keys": "Billetera semilla/claves",
"wallet_list_create_new_wallet": "Crear nueva billetera", "wallet_list_create_new_wallet": "Crear nueva billetera",
"wallet_list_edit_group_name": "Editar nombre de grupo",
"wallet_list_edit_wallet": "Editar billetera", "wallet_list_edit_wallet": "Editar billetera",
"wallet_list_failed_to_load": "No se pudo cargar ${wallet_name} la billetera. ${error}", "wallet_list_failed_to_load": "No se pudo cargar ${wallet_name} la billetera. ${error}",
"wallet_list_failed_to_remove": "Error al elimina ${wallet_name} billetera. ${error}", "wallet_list_failed_to_remove": "Error al elimina ${wallet_name} billetera. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Choisissez-en un", "choose_one": "Choisissez-en un",
"choose_relay": "Veuillez choisir un relais à utiliser", "choose_relay": "Veuillez choisir un relais à utiliser",
"choose_wallet_currency": "Merci de choisir la devise du portefeuille (wallet) :", "choose_wallet_currency": "Merci de choisir la devise du portefeuille (wallet) :",
"choose_wallet_group": "Choisissez un groupe de portefeuille",
"clear": "Effacer", "clear": "Effacer",
"clearnet_link": "Lien Clearnet", "clearnet_link": "Lien Clearnet",
"close": "Fermer", "close": "Fermer",
@ -176,6 +177,7 @@
"create_invoice": "Créer une facture", "create_invoice": "Créer une facture",
"create_new": "Créer un Nouveau Portefeuille (Wallet)", "create_new": "Créer un Nouveau Portefeuille (Wallet)",
"create_new_account": "Créer un nouveau compte", "create_new_account": "Créer un nouveau compte",
"create_new_seed": "Créer de nouvelles graines",
"creating_new_wallet": "Création d'un nouveau portefeuille (wallet)", "creating_new_wallet": "Création d'un nouveau portefeuille (wallet)",
"creating_new_wallet_error": "Erreur : ${description}", "creating_new_wallet_error": "Erreur : ${description}",
"creation_date": "Date de création", "creation_date": "Date de création",
@ -600,6 +602,8 @@
"seed_share": "Partager la phrase secrète (seed)", "seed_share": "Partager la phrase secrète (seed)",
"seed_title": "Phrase secrète (seed)", "seed_title": "Phrase secrète (seed)",
"seedtype": "Type de type graine", "seedtype": "Type de type graine",
"seedtype_alert_content": "Le partage de graines avec d'autres portefeuilles n'est possible qu'avec Bip39 SeedType.",
"seedtype_alert_title": "Alerte de type SeedType",
"seedtype_legacy": "Héritage (25 mots)", "seedtype_legacy": "Héritage (25 mots)",
"seedtype_polyseed": "Polyseed (16 mots)", "seedtype_polyseed": "Polyseed (16 mots)",
"select_backup_file": "Sélectionnez le fichier de sauvegarde", "select_backup_file": "Sélectionnez le fichier de sauvegarde",
@ -666,6 +670,7 @@
"setup_your_debit_card": "Configurer votre carte de débit", "setup_your_debit_card": "Configurer votre carte de débit",
"share": "Partager", "share": "Partager",
"share_address": "Partager l'adresse", "share_address": "Partager l'adresse",
"shared_seed_wallet_groups": "Groupes de portefeuilles partagés",
"show_details": "Afficher les détails", "show_details": "Afficher les détails",
"show_keys": "Visualiser la phrase secrète (seed) et les clefs", "show_keys": "Visualiser la phrase secrète (seed) et les clefs",
"show_market_place": "Afficher la place de marché", "show_market_place": "Afficher la place de marché",
@ -690,6 +695,7 @@
"silent_payments_scanned_tip": "Scanné à la pointe! (${tip})", "silent_payments_scanned_tip": "Scanné à la pointe! (${tip})",
"silent_payments_scanning": "Payments silencieux SCANNING", "silent_payments_scanning": "Payments silencieux SCANNING",
"silent_payments_settings": "Paramètres de paiement silencieux", "silent_payments_settings": "Paramètres de paiement silencieux",
"single_seed_wallets_group": "Portefeuilles de semences simples",
"slidable": "Glissable", "slidable": "Glissable",
"sort_by": "Trier par", "sort_by": "Trier par",
"spend_key_private": "Clef de dépense (spend key) (privée)", "spend_key_private": "Clef de dépense (spend key) (privée)",
@ -849,8 +855,16 @@
"view_transaction_on": "Voir la Transaction sur ", "view_transaction_on": "Voir la Transaction sur ",
"voting_weight": "Poids de vote", "voting_weight": "Poids de vote",
"waitFewSecondForTxUpdate": "Veuillez attendre quelques secondes pour que la transaction soit reflétée dans l'historique des transactions.", "waitFewSecondForTxUpdate": "Veuillez attendre quelques secondes pour que la transaction soit reflétée dans l'historique des transactions.",
"wallet_group": "Groupe de portefeuille",
"wallet_group_description_four": "Pour créer un portefeuille avec une graine entièrement nouvelle.",
"wallet_group_description_one": "Dans Cake Wallet, vous pouvez créer un",
"wallet_group_description_three": "Pour voir les portefeuilles et / ou les groupes de portefeuilles disponibles. Ou choisir",
"wallet_group_description_two": "En sélectionnant un portefeuille existant pour partager une graine avec. Chaque groupe de portefeuille peut contenir un seul portefeuille de chaque type de devise. \n\n Vous pouvez sélectionner",
"wallet_group_empty_state_text_one": "On dirait que vous n'avez pas de groupes de portefeuilles compatibles !\n\n Tap",
"wallet_group_empty_state_text_two": "Ci-dessous pour en faire un nouveau.",
"wallet_keys": "Phrase secrète (seed)/Clefs du portefeuille (wallet)", "wallet_keys": "Phrase secrète (seed)/Clefs du portefeuille (wallet)",
"wallet_list_create_new_wallet": "Créer un Nouveau Portefeuille (Wallet)", "wallet_list_create_new_wallet": "Créer un Nouveau Portefeuille (Wallet)",
"wallet_list_edit_group_name": "Modifier le nom du groupe",
"wallet_list_edit_wallet": "Modifier le portefeuille", "wallet_list_edit_wallet": "Modifier le portefeuille",
"wallet_list_failed_to_load": "Échec de chargement du portefeuille (wallet) ${wallet_name}. ${error}", "wallet_list_failed_to_load": "Échec de chargement du portefeuille (wallet) ${wallet_name}. ${error}",
"wallet_list_failed_to_remove": "Échec de la suppression du portefeuille (wallet) ${wallet_name}. ${error}", "wallet_list_failed_to_remove": "Échec de la suppression du portefeuille (wallet) ${wallet_name}. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Zaɓi ɗaya", "choose_one": "Zaɓi ɗaya",
"choose_relay": "Da fatan za a zaɓi gudun ba da sanda don amfani", "choose_relay": "Da fatan za a zaɓi gudun ba da sanda don amfani",
"choose_wallet_currency": "Da fatan za a zaɓi kuɗin walat:", "choose_wallet_currency": "Da fatan za a zaɓi kuɗin walat:",
"choose_wallet_group": "Zabi kungiyar walat",
"clear": "Share", "clear": "Share",
"clearnet_link": "Lambar makomar kwayoyi", "clearnet_link": "Lambar makomar kwayoyi",
"close": "Rufa", "close": "Rufa",
@ -176,6 +177,7 @@
"create_invoice": "Sanya bayanin wadannan", "create_invoice": "Sanya bayanin wadannan",
"create_new": "Ƙirƙira Sabon Kwalinku", "create_new": "Ƙirƙira Sabon Kwalinku",
"create_new_account": "Ƙirƙiri sabon asusu", "create_new_account": "Ƙirƙiri sabon asusu",
"create_new_seed": "Irƙiri sabon iri",
"creating_new_wallet": "Haliccin walat sabuwa", "creating_new_wallet": "Haliccin walat sabuwa",
"creating_new_wallet_error": "Kuskure: ${description}", "creating_new_wallet_error": "Kuskure: ${description}",
"creation_date": "Ranar halitta", "creation_date": "Ranar halitta",
@ -602,6 +604,8 @@
"seed_share": "Raba iri", "seed_share": "Raba iri",
"seed_title": "iri", "seed_title": "iri",
"seedtype": "Seedtype", "seedtype": "Seedtype",
"seedtype_alert_content": "Raba tsaba tare da sauran wallets yana yiwuwa ne kawai tare da Bip39 seedtype.",
"seedtype_alert_title": "Seedtype farke",
"seedtype_legacy": "Legacy (25 kalmomi)", "seedtype_legacy": "Legacy (25 kalmomi)",
"seedtype_polyseed": "Polyseed (16 kalmomi)", "seedtype_polyseed": "Polyseed (16 kalmomi)",
"select_backup_file": "Zaɓi fayil ɗin madadin", "select_backup_file": "Zaɓi fayil ɗin madadin",
@ -668,6 +672,7 @@
"setup_your_debit_card": "Saita katin zare kudi", "setup_your_debit_card": "Saita katin zare kudi",
"share": "Raba", "share": "Raba",
"share_address": "Raba adireshin", "share_address": "Raba adireshin",
"shared_seed_wallet_groups": "Raba ƙungiya walat",
"show_details": "Nuna Cikakkun bayanai", "show_details": "Nuna Cikakkun bayanai",
"show_keys": "Nuna iri/maɓallai", "show_keys": "Nuna iri/maɓallai",
"show_market_place": "Nuna dan kasuwa", "show_market_place": "Nuna dan kasuwa",
@ -692,6 +697,7 @@
"silent_payments_scanned_tip": "Bincika don tip! (${tip})", "silent_payments_scanned_tip": "Bincika don tip! (${tip})",
"silent_payments_scanning": "Silent biya scanning", "silent_payments_scanning": "Silent biya scanning",
"silent_payments_settings": "Saitunan Silent", "silent_payments_settings": "Saitunan Silent",
"single_seed_wallets_group": "Guaro",
"slidable": "Mai iya zamewa", "slidable": "Mai iya zamewa",
"sort_by": "Kasa", "sort_by": "Kasa",
"spend_key_private": "makullin biya (maɓallin kalmar sirri)", "spend_key_private": "makullin biya (maɓallin kalmar sirri)",
@ -851,8 +857,16 @@
"view_transaction_on": "Dubo aikace-aikacen akan", "view_transaction_on": "Dubo aikace-aikacen akan",
"voting_weight": "Nauyi mai nauyi", "voting_weight": "Nauyi mai nauyi",
"waitFewSecondForTxUpdate": "Da fatan za a jira ƴan daƙiƙa don ciniki don yin tunani a tarihin ma'amala", "waitFewSecondForTxUpdate": "Da fatan za a jira ƴan daƙiƙa don ciniki don yin tunani a tarihin ma'amala",
"wallet_group": "Wallet kungiyar",
"wallet_group_description_four": "Don ƙirƙirar walat tare da sabon iri.",
"wallet_group_description_one": "A cikin walat walat, zaka iya ƙirƙirar",
"wallet_group_description_three": "Don ganin wallets da / ko allon walat din. Ko zabi",
"wallet_group_description_two": "ta hanyar zabar walat mai gudana don raba iri tare da. Kowane rukunin walat na iya ƙunsar watsarin kowane nau'in kuɗi. \n\n Zaka iya zaɓar",
"wallet_group_empty_state_text_one": "Kamar dai ba ku da wata ƙungiya matattara !\n\n Taɓa",
"wallet_group_empty_state_text_two": "da ke ƙasa don yin sabo.",
"wallet_keys": "Iri/maɓalli na walat", "wallet_keys": "Iri/maɓalli na walat",
"wallet_list_create_new_wallet": "Ƙirƙiri Sabon Wallet", "wallet_list_create_new_wallet": "Ƙirƙiri Sabon Wallet",
"wallet_list_edit_group_name": "Shirya sunan rukuni",
"wallet_list_edit_wallet": "Gyara walat", "wallet_list_edit_wallet": "Gyara walat",
"wallet_list_failed_to_load": "An kasa loda ${wallet_name} walat. ${error}", "wallet_list_failed_to_load": "An kasa loda ${wallet_name} walat. ${error}",
"wallet_list_failed_to_remove": "Ba a iya cirewa ${wallet_name} walat. ${error}", "wallet_list_failed_to_remove": "Ba a iya cirewa ${wallet_name} walat. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "एक का चयन", "choose_one": "एक का चयन",
"choose_relay": "कृपया उपयोग करने के लिए एक रिले चुनें", "choose_relay": "कृपया उपयोग करने के लिए एक रिले चुनें",
"choose_wallet_currency": "कृपया बटुआ मुद्रा चुनें:", "choose_wallet_currency": "कृपया बटुआ मुद्रा चुनें:",
"choose_wallet_group": "वॉलेट ग्रुप चुनें",
"clear": "स्पष्ट", "clear": "स्पष्ट",
"clearnet_link": "क्लियरनेट लिंक", "clearnet_link": "क्लियरनेट लिंक",
"close": "बंद करना", "close": "बंद करना",
@ -176,6 +177,7 @@
"create_invoice": "इनवॉयस बनाएँ", "create_invoice": "इनवॉयस बनाएँ",
"create_new": "नया बटुआ बनाएँ", "create_new": "नया बटुआ बनाएँ",
"create_new_account": "नया खाता बनाएँ", "create_new_account": "नया खाता बनाएँ",
"create_new_seed": "नया बीज बनाएं",
"creating_new_wallet": "नया बटुआ बनाना", "creating_new_wallet": "नया बटुआ बनाना",
"creating_new_wallet_error": "त्रुटि: ${description}", "creating_new_wallet_error": "त्रुटि: ${description}",
"creation_date": "निर्माण तिथि", "creation_date": "निर्माण तिथि",
@ -602,6 +604,8 @@
"seed_share": "बीज साझा करें", "seed_share": "बीज साझा करें",
"seed_title": "बीज", "seed_title": "बीज",
"seedtype": "बीज", "seedtype": "बीज",
"seedtype_alert_content": "अन्य बटुए के साथ बीज साझा करना केवल BIP39 SEEDTYPE के साथ संभव है।",
"seedtype_alert_title": "बीजगणित अलर्ट",
"seedtype_legacy": "विरासत (25 शब्द)", "seedtype_legacy": "विरासत (25 शब्द)",
"seedtype_polyseed": "पॉलीसीड (16 शब्द)", "seedtype_polyseed": "पॉलीसीड (16 शब्द)",
"select_backup_file": "बैकअप फ़ाइल का चयन करें", "select_backup_file": "बैकअप फ़ाइल का चयन करें",
@ -668,6 +672,7 @@
"setup_your_debit_card": "अपना डेबिट कार्ड सेट करें", "setup_your_debit_card": "अपना डेबिट कार्ड सेट करें",
"share": "शेयर करना", "share": "शेयर करना",
"share_address": "पता साझा करें", "share_address": "पता साझा करें",
"shared_seed_wallet_groups": "साझा बीज बटुए समूह",
"show_details": "विवरण दिखाएं", "show_details": "विवरण दिखाएं",
"show_keys": "बीज / कुंजियाँ दिखाएँ", "show_keys": "बीज / कुंजियाँ दिखाएँ",
"show_market_place": "बाज़ार दिखाएँ", "show_market_place": "बाज़ार दिखाएँ",
@ -692,6 +697,7 @@
"silent_payments_scanned_tip": "टिप करने के लिए स्कैन किया! (${tip})", "silent_payments_scanned_tip": "टिप करने के लिए स्कैन किया! (${tip})",
"silent_payments_scanning": "मूक भुगतान स्कैनिंग", "silent_payments_scanning": "मूक भुगतान स्कैनिंग",
"silent_payments_settings": "मूक भुगतान सेटिंग्स", "silent_payments_settings": "मूक भुगतान सेटिंग्स",
"single_seed_wallets_group": "एकल बीज बटुए",
"slidable": "फिसलने लायक", "slidable": "फिसलने लायक",
"sort_by": "इसके अनुसार क्रमबद्ध करें", "sort_by": "इसके अनुसार क्रमबद्ध करें",
"spend_key_private": "खर्च करना (निजी)", "spend_key_private": "खर्च करना (निजी)",
@ -851,8 +857,16 @@
"view_transaction_on": "View Transaction on ", "view_transaction_on": "View Transaction on ",
"voting_weight": "वोटिंग वेट", "voting_weight": "वोटिंग वेट",
"waitFewSecondForTxUpdate": "लेन-देन इतिहास में लेन-देन प्रतिबिंबित होने के लिए कृपया कुछ सेकंड प्रतीक्षा करें", "waitFewSecondForTxUpdate": "लेन-देन इतिहास में लेन-देन प्रतिबिंबित होने के लिए कृपया कुछ सेकंड प्रतीक्षा करें",
"wallet_group": "बटुए समूह",
"wallet_group_description_four": "एक पूरी तरह से नए बीज के साथ एक बटुआ बनाने के लिए।",
"wallet_group_description_one": "केक बटुए में, आप एक बना सकते हैं",
"wallet_group_description_three": "उपलब्ध वॉलेट और/या वॉलेट समूह स्क्रीन देखने के लिए। या चुनें",
"wallet_group_description_two": "एक बीज साझा करने के लिए एक मौजूदा बटुए का चयन करके। प्रत्येक वॉलेट समूह में प्रत्येक मुद्रा प्रकार का एक एकल वॉलेट हो सकता है। \n\n आप चयन कर सकते हैं",
"wallet_group_empty_state_text_one": "लगता है कि आपके पास कोई संगत बटुआ समूह नहीं है !\n\n टैप करें",
"wallet_group_empty_state_text_two": "नीचे एक नया बनाने के लिए।",
"wallet_keys": "बटुआ बीज / चाबियाँ", "wallet_keys": "बटुआ बीज / चाबियाँ",
"wallet_list_create_new_wallet": "नया बटुआ बनाएँ", "wallet_list_create_new_wallet": "नया बटुआ बनाएँ",
"wallet_list_edit_group_name": "समूह का नाम संपादित करें",
"wallet_list_edit_wallet": "बटुआ संपादित करें", "wallet_list_edit_wallet": "बटुआ संपादित करें",
"wallet_list_failed_to_load": "लोड करने में विफल ${wallet_name} बटुआ. ${error}", "wallet_list_failed_to_load": "लोड करने में विफल ${wallet_name} बटुआ. ${error}",
"wallet_list_failed_to_remove": "निकालने में विफल ${wallet_name} बटुआ. ${error}", "wallet_list_failed_to_remove": "निकालने में विफल ${wallet_name} बटुआ. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Izaberi jedan", "choose_one": "Izaberi jedan",
"choose_relay": "Odaberite relej za korištenje", "choose_relay": "Odaberite relej za korištenje",
"choose_wallet_currency": "Molimo odaberite valutu novčanika:", "choose_wallet_currency": "Molimo odaberite valutu novčanika:",
"choose_wallet_group": "Odaberite grupu novčanika",
"clear": "Izbriši", "clear": "Izbriši",
"clearnet_link": "Clearnet veza", "clearnet_link": "Clearnet veza",
"close": "Zatvoriti", "close": "Zatvoriti",
@ -176,6 +177,7 @@
"create_invoice": "Izradite fakturu", "create_invoice": "Izradite fakturu",
"create_new": "Izradi novi novčanik", "create_new": "Izradi novi novčanik",
"create_new_account": "Izradi novi račun", "create_new_account": "Izradi novi račun",
"create_new_seed": "Stvorite novo sjeme",
"creating_new_wallet": "Stvaranje novog novčanika", "creating_new_wallet": "Stvaranje novog novčanika",
"creating_new_wallet_error": "Greška: ${description}", "creating_new_wallet_error": "Greška: ${description}",
"creation_date": "Datum stvaranja", "creation_date": "Datum stvaranja",
@ -600,6 +602,8 @@
"seed_share": "Podijeli pristupni izraz", "seed_share": "Podijeli pristupni izraz",
"seed_title": "Prisupni izraz", "seed_title": "Prisupni izraz",
"seedtype": "Sjemenska vrsta", "seedtype": "Sjemenska vrsta",
"seedtype_alert_content": "Dijeljenje sjemena s drugim novčanicima moguće je samo s BIP39 sjemenom.",
"seedtype_alert_title": "Upozorenje o sjemenu",
"seedtype_legacy": "Nasljeđe (25 riječi)", "seedtype_legacy": "Nasljeđe (25 riječi)",
"seedtype_polyseed": "Poliseed (16 riječi)", "seedtype_polyseed": "Poliseed (16 riječi)",
"select_backup_file": "Odaberite datoteku sigurnosne kopije", "select_backup_file": "Odaberite datoteku sigurnosne kopije",
@ -666,6 +670,7 @@
"setup_your_debit_card": "Postavite svoju debitnu karticu", "setup_your_debit_card": "Postavite svoju debitnu karticu",
"share": "Udio", "share": "Udio",
"share_address": "Podijeli adresu", "share_address": "Podijeli adresu",
"shared_seed_wallet_groups": "Zajedničke grupe za sjeme novčanika",
"show_details": "Prikaži pojedinosti", "show_details": "Prikaži pojedinosti",
"show_keys": "Prikaži pristupni izraz/ključ", "show_keys": "Prikaži pristupni izraz/ključ",
"show_market_place": "Prikaži tržište", "show_market_place": "Prikaži tržište",
@ -690,6 +695,7 @@
"silent_payments_scanned_tip": "Skenirano na savjet! (${tip})", "silent_payments_scanned_tip": "Skenirano na savjet! (${tip})",
"silent_payments_scanning": "Skeniranje tihih plaćanja", "silent_payments_scanning": "Skeniranje tihih plaćanja",
"silent_payments_settings": "Postavke tihih plaćanja", "silent_payments_settings": "Postavke tihih plaćanja",
"single_seed_wallets_group": "Jednostruki novčanici",
"slidable": "Klizna", "slidable": "Klizna",
"sort_by": "Poredaj po", "sort_by": "Poredaj po",
"spend_key_private": "Spend key (privatni)", "spend_key_private": "Spend key (privatni)",
@ -849,8 +855,16 @@
"view_transaction_on": "View Transaction on ", "view_transaction_on": "View Transaction on ",
"voting_weight": "Težina glasanja", "voting_weight": "Težina glasanja",
"waitFewSecondForTxUpdate": "Pričekajte nekoliko sekundi da se transakcija prikaže u povijesti transakcija", "waitFewSecondForTxUpdate": "Pričekajte nekoliko sekundi da se transakcija prikaže u povijesti transakcija",
"wallet_group": "Skupina novčanika",
"wallet_group_description_four": "Da biste stvorili novčanik s potpuno novim sjemenom.",
"wallet_group_description_one": "U novčaniku kolača možete stvoriti a",
"wallet_group_description_three": "Da biste vidjeli zaslon dostupnih novčanika i/ili grupa novčanika. Ili odaberite",
"wallet_group_description_two": "Odabirom postojećeg novčanika s kojim ćete dijeliti sjeme. Svaka grupa novčanika može sadržavati jedan novčanik svake vrste valute. \n\n",
"wallet_group_empty_state_text_one": "Izgleda da nemate nikakve kompatibilne grupe novčanika !\n\n",
"wallet_group_empty_state_text_two": "Ispod da napravite novi.",
"wallet_keys": "Pristupni izraz/ključ novčanika", "wallet_keys": "Pristupni izraz/ključ novčanika",
"wallet_list_create_new_wallet": "Izradi novi novčanik", "wallet_list_create_new_wallet": "Izradi novi novčanik",
"wallet_list_edit_group_name": "Uredi naziv grupe",
"wallet_list_edit_wallet": "Uredi novčanik", "wallet_list_edit_wallet": "Uredi novčanik",
"wallet_list_failed_to_load": "Neuspješno učitavanje novčanika ${wallet_name}. ${error}", "wallet_list_failed_to_load": "Neuspješno učitavanje novčanika ${wallet_name}. ${error}",
"wallet_list_failed_to_remove": "Neuspješno uklanjanje novčanika ${wallet_name}. ${error}", "wallet_list_failed_to_remove": "Neuspješno uklanjanje novčanika ${wallet_name}. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Ընտրեք մեկը", "choose_one": "Ընտրեք մեկը",
"choose_relay": "Խնդրում ենք ընտրեք փոխանցման կետ", "choose_relay": "Խնդրում ենք ընտրեք փոխանցման կետ",
"choose_wallet_currency": "Խնդրում ենք ընտրեք դրամապանակի արժույթը", "choose_wallet_currency": "Խնդրում ենք ընտրեք դրամապանակի արժույթը",
"choose_wallet_group": "Ընտրեք դրամապանակների խումբ",
"clear": "Մաքրել", "clear": "Մաքրել",
"clearnet_link": "Բաց ցանցի հղում", "clearnet_link": "Բաց ցանցի հղում",
"close": "Փակել", "close": "Փակել",
@ -176,6 +177,7 @@
"create_invoice": "Ստեղծել հաշիվ-ապրանքագիր", "create_invoice": "Ստեղծել հաշիվ-ապրանքագիր",
"create_new": "Ստեղծել նոր դրամապանակ", "create_new": "Ստեղծել նոր դրամապանակ",
"create_new_account": "Ստեղծել նոր հաշիվ", "create_new_account": "Ստեղծել նոր հաշիվ",
"create_new_seed": "Ստեղծեք նոր սերունդ",
"creating_new_wallet": "Նոր դրամապանակ ստեղծվում է", "creating_new_wallet": "Նոր դրամապանակ ստեղծվում է",
"creating_new_wallet_error": "Սխալ: ${description}", "creating_new_wallet_error": "Սխալ: ${description}",
"creation_date": "Ստեղծման ամսաթիվ", "creation_date": "Ստեղծման ամսաթիվ",
@ -599,6 +601,8 @@
"seed_share": "Կիսվել սերմով", "seed_share": "Կիսվել սերմով",
"seed_title": "Սերմ", "seed_title": "Սերմ",
"seedtype": "Սերմի տեսակ", "seedtype": "Սերմի տեսակ",
"seedtype_alert_content": "Այլ դրամապանակներով սերմերի փոխանակումը հնարավոր է միայն BIP39 SEEDTYPE- ով:",
"seedtype_alert_title": "SEEDTYPE ALERT",
"seedtype_legacy": "Legacy (25 բառ)", "seedtype_legacy": "Legacy (25 բառ)",
"seedtype_polyseed": "Polyseed (16 բառ)", "seedtype_polyseed": "Polyseed (16 բառ)",
"seedtype_wownero": "Wownero (14 բառ)", "seedtype_wownero": "Wownero (14 բառ)",
@ -666,6 +670,7 @@
"setup_your_debit_card": "Հավատարմագրել ձեր դեբետային քարտ", "setup_your_debit_card": "Հավատարմագրել ձեր դեբետային քարտ",
"share": "Կիսվել", "share": "Կիսվել",
"share_address": "Կիսվել հասցեով", "share_address": "Կիսվել հասցեով",
"shared_seed_wallet_groups": "Համօգտագործված սերմերի դրամապանակների խմբեր",
"show_details": "Ցուցադրել մանրամասներ", "show_details": "Ցուցադրել մանրամասներ",
"show_keys": "Ցուցադրել բանալիներ", "show_keys": "Ցուցադրել բանալիներ",
"show_market_place": "Ցուցադրել շուկան", "show_market_place": "Ցուցադրել շուկան",
@ -690,6 +695,7 @@
"silent_payments_scanned_tip": "ՍԿԱՆԱՎՈՐՎԵՑ ԹԵՅԱՎՃԱՐ! (${tip})", "silent_payments_scanned_tip": "ՍԿԱՆԱՎՈՐՎԵՑ ԹԵՅԱՎՃԱՐ! (${tip})",
"silent_payments_scanning": "Լուռ Վճարումներ Սկանավորում", "silent_payments_scanning": "Լուռ Վճարումներ Սկանավորում",
"silent_payments_settings": "Լուռ Վճարումներ Կարգավորումներ", "silent_payments_settings": "Լուռ Վճարումներ Կարգավորումներ",
"single_seed_wallets_group": "Մեկ սերմերի դրամապանակներ",
"slidable": "Սահելի", "slidable": "Սահելի",
"sort_by": "Դասավորել ըստ", "sort_by": "Դասավորել ըստ",
"spend_key_private": "Վճարման բանալի (գախտնի)", "spend_key_private": "Վճարման բանալի (գախտնի)",
@ -849,8 +855,16 @@
"view_transaction_on": "Դիտել Գործարքը ", "view_transaction_on": "Դիտել Գործարքը ",
"voting_weight": "Քվեարկության Քաշ", "voting_weight": "Քվեարկության Քաշ",
"waitFewSecondForTxUpdate": "Խնդրում ենք սպասել մի քանի վայրկյան, որպեսզի գործարքը արտացոլվի գործարքների պատմության մեջ", "waitFewSecondForTxUpdate": "Խնդրում ենք սպասել մի քանի վայրկյան, որպեսզի գործարքը արտացոլվի գործարքների պատմության մեջ",
"wallet_group": "Դրամապանակների խումբ",
"wallet_group_description_four": "Ամբողջովին նոր սերմով դրամապանակ ստեղծելու համար:",
"wallet_group_description_one": "Տորթի դրամապանակում կարող եք ստեղծել ա",
"wallet_group_description_three": "Տեսնել առկա դրամապանակներն ու (կամ) դրամապանակների խմբերի էկրանը: Կամ ընտրել",
"wallet_group_description_two": "ընտրելով գոյություն ունեցող դրամապանակ `սերմը կիսելու համար: Դրամապանակների յուրաքանչյուր խումբ կարող է պարունակել յուրաքանչյուր արժույթի տիպի մեկ դրամապանակ: \n\n Կարող եք ընտրել",
"wallet_group_empty_state_text_one": "Կարծես թե դուք չունեք որեւէ համատեղելի դրամապանակների խմբեր !\n\n թակել",
"wallet_group_empty_state_text_two": "ներքեւում `նորը կազմելու համար:",
"wallet_keys": "Դրամապանակի սերմ/բանալիներ", "wallet_keys": "Դրամապանակի սերմ/բանալիներ",
"wallet_list_create_new_wallet": "Ստեղծել Նոր Դրամապանակ", "wallet_list_create_new_wallet": "Ստեղծել Նոր Դրամապանակ",
"wallet_list_edit_group_name": "Խմբագրել խմբի անվանումը",
"wallet_list_edit_wallet": "Խմբագրել դրամապանակը", "wallet_list_edit_wallet": "Խմբագրել դրամապանակը",
"wallet_list_failed_to_load": "Չհաջողվեց բեռնել ${wallet_name} դրամապանակը։ ${error}", "wallet_list_failed_to_load": "Չհաջողվեց բեռնել ${wallet_name} դրամապանակը։ ${error}",
"wallet_list_failed_to_remove": "Չհաջողվեց հեռացնել ${wallet_name} դրամապանակը։ ${error}", "wallet_list_failed_to_remove": "Չհաջողվեց հեռացնել ${wallet_name} դրամապանակը։ ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Pilih satu", "choose_one": "Pilih satu",
"choose_relay": "Silakan pilih relai yang akan digunakan", "choose_relay": "Silakan pilih relai yang akan digunakan",
"choose_wallet_currency": "Silahkan pilih mata uang dompet:", "choose_wallet_currency": "Silahkan pilih mata uang dompet:",
"choose_wallet_group": "Pilih Grup Dompet",
"clear": "Hapus", "clear": "Hapus",
"clearnet_link": "Tautan clearnet", "clearnet_link": "Tautan clearnet",
"close": "Menutup", "close": "Menutup",
@ -176,6 +177,7 @@
"create_invoice": "Buat faktur", "create_invoice": "Buat faktur",
"create_new": "Buat Dompet Baru", "create_new": "Buat Dompet Baru",
"create_new_account": "Buat akun baru", "create_new_account": "Buat akun baru",
"create_new_seed": "Buat benih baru",
"creating_new_wallet": "Membuat dompet baru", "creating_new_wallet": "Membuat dompet baru",
"creating_new_wallet_error": "Error: ${description}", "creating_new_wallet_error": "Error: ${description}",
"creation_date": "Tanggal Pembuatan", "creation_date": "Tanggal Pembuatan",
@ -603,6 +605,8 @@
"seed_share": "Bagikan bibit", "seed_share": "Bagikan bibit",
"seed_title": "Bibit", "seed_title": "Bibit",
"seedtype": "Seedtype", "seedtype": "Seedtype",
"seedtype_alert_content": "Berbagi biji dengan dompet lain hanya dimungkinkan dengan BIP39 seedtype.",
"seedtype_alert_title": "Peringatan seedtype",
"seedtype_legacy": "Legacy (25 kata)", "seedtype_legacy": "Legacy (25 kata)",
"seedtype_polyseed": "Polyseed (16 kata)", "seedtype_polyseed": "Polyseed (16 kata)",
"select_backup_file": "Pilih file cadangan", "select_backup_file": "Pilih file cadangan",
@ -669,6 +673,7 @@
"setup_your_debit_card": "Pasang kartu debit Anda", "setup_your_debit_card": "Pasang kartu debit Anda",
"share": "Membagikan", "share": "Membagikan",
"share_address": "Bagikan alamat", "share_address": "Bagikan alamat",
"shared_seed_wallet_groups": "Kelompok dompet benih bersama",
"show_details": "Tampilkan Rincian", "show_details": "Tampilkan Rincian",
"show_keys": "Tampilkan seed/kunci", "show_keys": "Tampilkan seed/kunci",
"show_market_place": "Tampilkan Pasar", "show_market_place": "Tampilkan Pasar",
@ -693,6 +698,7 @@
"silent_payments_scanned_tip": "Pindai untuk memberi tip! (${tip})", "silent_payments_scanned_tip": "Pindai untuk memberi tip! (${tip})",
"silent_payments_scanning": "Pemindaian pembayaran diam", "silent_payments_scanning": "Pemindaian pembayaran diam",
"silent_payments_settings": "Pengaturan pembayaran diam", "silent_payments_settings": "Pengaturan pembayaran diam",
"single_seed_wallets_group": "Dompet biji tunggal",
"slidable": "Dapat digeser", "slidable": "Dapat digeser",
"sort_by": "Sortir dengan", "sort_by": "Sortir dengan",
"spend_key_private": "Kunci pengeluaran (privat)", "spend_key_private": "Kunci pengeluaran (privat)",
@ -852,8 +858,16 @@
"view_transaction_on": "Lihat Transaksi di ", "view_transaction_on": "Lihat Transaksi di ",
"voting_weight": "Berat voting", "voting_weight": "Berat voting",
"waitFewSecondForTxUpdate": "Mohon tunggu beberapa detik hingga transaksi terlihat di riwayat transaksi", "waitFewSecondForTxUpdate": "Mohon tunggu beberapa detik hingga transaksi terlihat di riwayat transaksi",
"wallet_group": "Kelompok dompet",
"wallet_group_description_four": "Untuk membuat dompet dengan benih yang sama sekali baru.",
"wallet_group_description_one": "Di dompet kue, Anda dapat membuat file",
"wallet_group_description_three": "Untuk melihat layar dompet dan/atau grup dompet yang tersedia. Atau pilih",
"wallet_group_description_two": "dengan memilih dompet yang ada untuk berbagi benih dengan. Setiap grup dompet dapat berisi satu dompet dari setiap jenis mata uang. \n\n Anda dapat memilih",
"wallet_group_empty_state_text_one": "Sepertinya Anda tidak memiliki grup dompet yang kompatibel !\n\n tap",
"wallet_group_empty_state_text_two": "di bawah ini untuk membuat yang baru.",
"wallet_keys": "Seed/kunci dompet", "wallet_keys": "Seed/kunci dompet",
"wallet_list_create_new_wallet": "Buat Dompet Baru", "wallet_list_create_new_wallet": "Buat Dompet Baru",
"wallet_list_edit_group_name": "Edit Nama Grup",
"wallet_list_edit_wallet": "Edit dompet", "wallet_list_edit_wallet": "Edit dompet",
"wallet_list_failed_to_load": "Gagal memuat ${wallet_name} dompet. ${error}", "wallet_list_failed_to_load": "Gagal memuat ${wallet_name} dompet. ${error}",
"wallet_list_failed_to_remove": "Gagal menghapus ${wallet_name} dompet. ${error}", "wallet_list_failed_to_remove": "Gagal menghapus ${wallet_name} dompet. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Scegline uno", "choose_one": "Scegline uno",
"choose_relay": "Scegli un relè da utilizzare", "choose_relay": "Scegli un relè da utilizzare",
"choose_wallet_currency": "Gentilmente scegli la moneta del portafoglio:", "choose_wallet_currency": "Gentilmente scegli la moneta del portafoglio:",
"choose_wallet_group": "Scegli il gruppo del portafoglio",
"clear": "Pulisci", "clear": "Pulisci",
"clearnet_link": "Collegamento Clearnet", "clearnet_link": "Collegamento Clearnet",
"close": "Chiudere", "close": "Chiudere",
@ -177,6 +178,7 @@
"create_invoice": "Crea fattura", "create_invoice": "Crea fattura",
"create_new": "Genera nuovo Portafoglio", "create_new": "Genera nuovo Portafoglio",
"create_new_account": "Crea nuovo account", "create_new_account": "Crea nuovo account",
"create_new_seed": "Crea nuovo seme",
"creating_new_wallet": "Creazione nuovo portafoglio", "creating_new_wallet": "Creazione nuovo portafoglio",
"creating_new_wallet_error": "Errore: ${description}", "creating_new_wallet_error": "Errore: ${description}",
"creation_date": "Data di creazione", "creation_date": "Data di creazione",
@ -602,6 +604,8 @@
"seed_share": "Condividi seme", "seed_share": "Condividi seme",
"seed_title": "Seme", "seed_title": "Seme",
"seedtype": "Seedtype", "seedtype": "Seedtype",
"seedtype_alert_content": "La condivisione di semi con altri portafogli è possibile solo con Bip39 SeedType.",
"seedtype_alert_title": "Avviso seedType",
"seedtype_legacy": "Legacy (25 parole)", "seedtype_legacy": "Legacy (25 parole)",
"seedtype_polyseed": "Polyseed (16 parole)", "seedtype_polyseed": "Polyseed (16 parole)",
"select_backup_file": "Seleziona file di backup", "select_backup_file": "Seleziona file di backup",
@ -668,6 +672,7 @@
"setup_your_debit_card": "Configura la tua carta di debito", "setup_your_debit_card": "Configura la tua carta di debito",
"share": "Condividere", "share": "Condividere",
"share_address": "Condividi indirizzo", "share_address": "Condividi indirizzo",
"shared_seed_wallet_groups": "Gruppi di portafoglio di semi condivisi",
"show_details": "Mostra dettagli", "show_details": "Mostra dettagli",
"show_keys": "Mostra seme/chiavi", "show_keys": "Mostra seme/chiavi",
"show_market_place": "Mostra mercato", "show_market_place": "Mostra mercato",
@ -692,6 +697,7 @@
"silent_payments_scanned_tip": "Scansionato per dare la mancia! (${tip})", "silent_payments_scanned_tip": "Scansionato per dare la mancia! (${tip})",
"silent_payments_scanning": "Scansione di pagamenti silenziosi", "silent_payments_scanning": "Scansione di pagamenti silenziosi",
"silent_payments_settings": "Impostazioni di pagamenti silenziosi", "silent_payments_settings": "Impostazioni di pagamenti silenziosi",
"single_seed_wallets_group": "Portafogli singoli",
"slidable": "Scorrevole", "slidable": "Scorrevole",
"sort_by": "Ordina per", "sort_by": "Ordina per",
"spend_key_private": "Chiave di spesa (privata)", "spend_key_private": "Chiave di spesa (privata)",
@ -852,8 +858,16 @@
"voting_weight": "Peso di voto", "voting_weight": "Peso di voto",
"waitFewSecondForTxUpdate": "Attendi qualche secondo affinché la transazione venga riflessa nella cronologia delle transazioni", "waitFewSecondForTxUpdate": "Attendi qualche secondo affinché la transazione venga riflessa nella cronologia delle transazioni",
"waiting_payment_confirmation": "In attesa di conferma del pagamento", "waiting_payment_confirmation": "In attesa di conferma del pagamento",
"wallet_group": "Gruppo di portafoglio",
"wallet_group_description_four": "Per creare un portafoglio con un seme completamente nuovo.",
"wallet_group_description_one": "Nel portafoglio di torte, puoi creare un",
"wallet_group_description_three": "Per vedere la schermata di portafogli e/o gruppi di portafogli disponibili. O scegli",
"wallet_group_description_two": "Selezionando un portafoglio esistente con cui condividere un seme. Ogni gruppo di portafoglio può contenere un singolo portafoglio di ciascun tipo di valuta. \n\n È possibile selezionare",
"wallet_group_empty_state_text_one": "Sembra che tu non abbia alcun gruppo di portafoglio compatibile !\n\n TAP",
"wallet_group_empty_state_text_two": "Di seguito per crearne uno nuovo.",
"wallet_keys": "Seme Portafoglio /chiavi", "wallet_keys": "Seme Portafoglio /chiavi",
"wallet_list_create_new_wallet": "Crea Nuovo Portafoglio", "wallet_list_create_new_wallet": "Crea Nuovo Portafoglio",
"wallet_list_edit_group_name": "Modifica nome del gruppo",
"wallet_list_edit_wallet": "Modifica portafoglio", "wallet_list_edit_wallet": "Modifica portafoglio",
"wallet_list_failed_to_load": "Caricamento portafoglio ${wallet_name} fallito. ${error}", "wallet_list_failed_to_load": "Caricamento portafoglio ${wallet_name} fallito. ${error}",
"wallet_list_failed_to_remove": "Rimozione portafoglio ${wallet_name} fallita. ${error}", "wallet_list_failed_to_remove": "Rimozione portafoglio ${wallet_name} fallita. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "1 つ選択してください", "choose_one": "1 つ選択してください",
"choose_relay": "使用するリレーを選択してください", "choose_relay": "使用するリレーを選択してください",
"choose_wallet_currency": "ウォレット通貨を選択してください:", "choose_wallet_currency": "ウォレット通貨を選択してください:",
"choose_wallet_group": "ウォレットグループを選択してください",
"clear": "クリア", "clear": "クリア",
"clearnet_link": "クリアネット リンク", "clearnet_link": "クリアネット リンク",
"close": "近い", "close": "近い",
@ -176,6 +177,7 @@
"create_invoice": "請求書の作成", "create_invoice": "請求書の作成",
"create_new": "新しいウォレットを作成", "create_new": "新しいウォレットを作成",
"create_new_account": "新しいアカウントを作成する", "create_new_account": "新しいアカウントを作成する",
"create_new_seed": "新しい種を作成します",
"creating_new_wallet": "新しいウォレットの作成", "creating_new_wallet": "新しいウォレットの作成",
"creating_new_wallet_error": "エラー: ${description}", "creating_new_wallet_error": "エラー: ${description}",
"creation_date": "作成日", "creation_date": "作成日",
@ -601,6 +603,8 @@
"seed_share": "シードを共有する", "seed_share": "シードを共有する",
"seed_title": "シード", "seed_title": "シード",
"seedtype": "SeedType", "seedtype": "SeedType",
"seedtype_alert_content": "他の財布と種子を共有することは、BIP39 SeedTypeでのみ可能です。",
"seedtype_alert_title": "SeedTypeアラート",
"seedtype_legacy": "レガシー25語", "seedtype_legacy": "レガシー25語",
"seedtype_polyseed": "ポリシード16語", "seedtype_polyseed": "ポリシード16語",
"select_backup_file": "バックアップファイルを選択", "select_backup_file": "バックアップファイルを選択",
@ -667,6 +671,7 @@
"setup_your_debit_card": "デビットカードを設定してください", "setup_your_debit_card": "デビットカードを設定してください",
"share": "共有", "share": "共有",
"share_address": "住所を共有する", "share_address": "住所を共有する",
"shared_seed_wallet_groups": "共有シードウォレットグループ",
"show_details": "詳細を表示", "show_details": "詳細を表示",
"show_keys": "シード/キーを表示する", "show_keys": "シード/キーを表示する",
"show_market_place": "マーケットプレイスを表示", "show_market_place": "マーケットプレイスを表示",
@ -691,6 +696,7 @@
"silent_payments_scanned_tip": "チップをスキャンしました! (${tip})", "silent_payments_scanned_tip": "チップをスキャンしました! (${tip})",
"silent_payments_scanning": "サイレントペイメントスキャン", "silent_payments_scanning": "サイレントペイメントスキャン",
"silent_payments_settings": "サイレントペイメント設定", "silent_payments_settings": "サイレントペイメント設定",
"single_seed_wallets_group": "シングルシードウォレット",
"slidable": "スライド可能", "slidable": "スライド可能",
"sort_by": "並び替え", "sort_by": "並び替え",
"spend_key_private": "キーを使う (プライベート)", "spend_key_private": "キーを使う (プライベート)",
@ -850,8 +856,16 @@
"view_transaction_on": "View Transaction on ", "view_transaction_on": "View Transaction on ",
"voting_weight": "投票重み", "voting_weight": "投票重み",
"waitFewSecondForTxUpdate": "取引履歴に取引が反映されるまで数秒お待ちください。", "waitFewSecondForTxUpdate": "取引履歴に取引が反映されるまで数秒お待ちください。",
"wallet_group": "ウォレットグループ",
"wallet_group_description_four": "まったく新しい種子の財布を作成します。",
"wallet_group_description_one": "ケーキウォレットでは、aを作成できます",
"wallet_group_description_three": "利用可能なウォレットおよび/またはウォレットグループの画面を表示します。または選択します",
"wallet_group_description_two": "既存のウォレットを選択して種子を共有します。各ウォレットグループには、各通貨タイプの単一のウォレットを含めることができます。\n\n選択できます",
"wallet_group_empty_state_text_one": "互換性のあるウォレットグループがないようです!\n\nタップ",
"wallet_group_empty_state_text_two": "以下に新しいものを作るために。",
"wallet_keys": "ウォレットシード/キー", "wallet_keys": "ウォレットシード/キー",
"wallet_list_create_new_wallet": "新しいウォレットを作成", "wallet_list_create_new_wallet": "新しいウォレットを作成",
"wallet_list_edit_group_name": "グループ名を編集します",
"wallet_list_edit_wallet": "ウォレットを編集する", "wallet_list_edit_wallet": "ウォレットを編集する",
"wallet_list_failed_to_load": "読み込みに失敗しました ${wallet_name} 財布. ${error}", "wallet_list_failed_to_load": "読み込みに失敗しました ${wallet_name} 財布. ${error}",
"wallet_list_failed_to_remove": "削除できませんでした ${wallet_name} 財布. ${error}", "wallet_list_failed_to_remove": "削除できませんでした ${wallet_name} 財布. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "하나 선택", "choose_one": "하나 선택",
"choose_relay": "사용할 릴레이를 선택해주세요", "choose_relay": "사용할 릴레이를 선택해주세요",
"choose_wallet_currency": "지갑 통화를 선택하십시오:", "choose_wallet_currency": "지갑 통화를 선택하십시오:",
"choose_wallet_group": "지갑 그룹을 선택하십시오",
"clear": "명확한", "clear": "명확한",
"clearnet_link": "클리어넷 링크", "clearnet_link": "클리어넷 링크",
"close": "닫다", "close": "닫다",
@ -176,6 +177,7 @@
"create_invoice": "인보이스 생성", "create_invoice": "인보이스 생성",
"create_new": "새 월렛 만들기", "create_new": "새 월렛 만들기",
"create_new_account": "새 계정을 만들", "create_new_account": "새 계정을 만들",
"create_new_seed": "새 씨앗을 만듭니다",
"creating_new_wallet": "새 지갑 생성", "creating_new_wallet": "새 지갑 생성",
"creating_new_wallet_error": "오류: ${description}", "creating_new_wallet_error": "오류: ${description}",
"creation_date": "생산 일", "creation_date": "생산 일",
@ -601,6 +603,8 @@
"seed_share": "시드 공유", "seed_share": "시드 공유",
"seed_title": "씨", "seed_title": "씨",
"seedtype": "시드 타입", "seedtype": "시드 타입",
"seedtype_alert_content": "다른 지갑과 씨앗을 공유하는 것은 BIP39 SeedType에서만 가능합니다.",
"seedtype_alert_title": "종자 경보",
"seedtype_legacy": "레거시 (25 단어)", "seedtype_legacy": "레거시 (25 단어)",
"seedtype_polyseed": "다문 (16 단어)", "seedtype_polyseed": "다문 (16 단어)",
"select_backup_file": "백업 파일 선택", "select_backup_file": "백업 파일 선택",
@ -667,6 +671,7 @@
"setup_your_debit_card": "직불카드 설정", "setup_your_debit_card": "직불카드 설정",
"share": "공유하다", "share": "공유하다",
"share_address": "주소 공유", "share_address": "주소 공유",
"shared_seed_wallet_groups": "공유 종자 지갑 그룹",
"show_details": "세부정보 표시", "show_details": "세부정보 표시",
"show_keys": "시드 / 키 표시", "show_keys": "시드 / 키 표시",
"show_market_place": "마켓플레이스 표시", "show_market_place": "마켓플레이스 표시",
@ -691,6 +696,7 @@
"silent_payments_scanned_tip": "팁을 스캔했습니다! (${tip})", "silent_payments_scanned_tip": "팁을 스캔했습니다! (${tip})",
"silent_payments_scanning": "조용한 지불 스캔", "silent_payments_scanning": "조용한 지불 스캔",
"silent_payments_settings": "조용한 지불 설정", "silent_payments_settings": "조용한 지불 설정",
"single_seed_wallets_group": "단일 씨앗 지갑",
"slidable": "슬라이딩 가능", "slidable": "슬라이딩 가능",
"sort_by": "정렬 기준", "sort_by": "정렬 기준",
"spend_key_private": "지출 키 (은밀한)", "spend_key_private": "지출 키 (은밀한)",
@ -850,8 +856,16 @@
"view_transaction_on": "View Transaction on ", "view_transaction_on": "View Transaction on ",
"voting_weight": "투표 중량", "voting_weight": "투표 중량",
"waitFewSecondForTxUpdate": "거래 내역에 거래가 반영될 때까지 몇 초 정도 기다려 주세요.", "waitFewSecondForTxUpdate": "거래 내역에 거래가 반영될 때까지 몇 초 정도 기다려 주세요.",
"wallet_group": "지갑 그룹",
"wallet_group_description_four": "완전히 새로운 씨앗으로 지갑을 만듭니다.",
"wallet_group_description_one": "케이크 지갑에서는 a를 만들 수 있습니다",
"wallet_group_description_three": "사용 가능한 지갑 및/또는 지갑 그룹 스크린을 볼 수 있습니다. 또는 선택하십시오",
"wallet_group_description_two": "씨앗을 공유 할 기존 지갑을 선택함으로써. 각 지갑 그룹은 각 통화 유형의 단일 지갑을 포함 할 수 있습니다. \n\n",
"wallet_group_empty_state_text_one": "호환 지갑 그룹이없는 것 같습니다 !\n\n TAP",
"wallet_group_empty_state_text_two": "아래에서 새로운 것을 만들기 위해.",
"wallet_keys": "지갑 시드 / 키", "wallet_keys": "지갑 시드 / 키",
"wallet_list_create_new_wallet": "새 월렛 만들기", "wallet_list_create_new_wallet": "새 월렛 만들기",
"wallet_list_edit_group_name": "그룹 이름 편집",
"wallet_list_edit_wallet": "지갑 수정", "wallet_list_edit_wallet": "지갑 수정",
"wallet_list_failed_to_load": "불러 오지 못했습니다 ${wallet_name} 지갑. ${error}", "wallet_list_failed_to_load": "불러 오지 못했습니다 ${wallet_name} 지갑. ${error}",
"wallet_list_failed_to_remove": "제거하지 못했습니다 ${wallet_name} 지갑. ${error}", "wallet_list_failed_to_remove": "제거하지 못했습니다 ${wallet_name} 지갑. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "တစ်ခုရွေးပါ။", "choose_one": "တစ်ခုရွေးပါ။",
"choose_relay": "အသုံးပြုရန် relay ကိုရွေးချယ်ပါ။", "choose_relay": "အသုံးပြုရန် relay ကိုရွေးချယ်ပါ။",
"choose_wallet_currency": "ပိုက်ဆံအိတ်ငွေကြေးကို ရွေးပါ-", "choose_wallet_currency": "ပိုက်ဆံအိတ်ငွေကြေးကို ရွေးပါ-",
"choose_wallet_group": "ပိုက်ဆံအိတ်အုပ်စုရွေးပါ",
"clear": "ရှင်းလင်းသော", "clear": "ရှင်းလင်းသော",
"clearnet_link": "Clearnet လင့်ခ်", "clearnet_link": "Clearnet လင့်ခ်",
"close": "အနီးကပ်", "close": "အနီးကပ်",
@ -176,6 +177,7 @@
"create_invoice": "ပြေစာဖန်တီးပါ။", "create_invoice": "ပြေစာဖန်တီးပါ။",
"create_new": "Wallet အသစ်ဖန်တီးပါ။", "create_new": "Wallet အသစ်ဖန်တီးပါ။",
"create_new_account": "အကောင့်အသစ်ဖန်တီးပါ။", "create_new_account": "အကောင့်အသစ်ဖန်တီးပါ။",
"create_new_seed": "မျိုးစေ့အသစ်ကိုဖန်တီးပါ",
"creating_new_wallet": "ပိုက်ဆံအိတ်အသစ်ဖန်တီးခြင်း။", "creating_new_wallet": "ပိုက်ဆံအိတ်အသစ်ဖန်တီးခြင်း။",
"creating_new_wallet_error": "အမှား- ${description}", "creating_new_wallet_error": "အမှား- ${description}",
"creation_date": "ဖန်တီးမှုနေ့စွဲ", "creation_date": "ဖန်တီးမှုနေ့စွဲ",
@ -600,6 +602,8 @@
"seed_share": "မျိုးစေ့မျှဝေပါ။", "seed_share": "မျိုးစေ့မျှဝေပါ။",
"seed_title": "မျိုးစေ့", "seed_title": "မျိုးစေ့",
"seedtype": "မျိုးပွားခြင်း", "seedtype": "မျိုးပွားခြင်း",
"seedtype_alert_content": "အခြားပိုက်ဆံအိတ်များနှင့်မျိုးစေ့များကိုမျှဝေခြင်းသည် BIP39 sebyspe ဖြင့်သာဖြစ်သည်။",
"seedtype_alert_title": "ပျိုးပင်သတိပေးချက်",
"seedtype_legacy": "အမွေအနှစ် (စကားလုံး 25 လုံး)", "seedtype_legacy": "အမွေအနှစ် (စကားလုံး 25 လုံး)",
"seedtype_polyseed": "polyseed (စကားလုံး 16 လုံး)", "seedtype_polyseed": "polyseed (စကားလုံး 16 လုံး)",
"select_backup_file": "အရန်ဖိုင်ကို ရွေးပါ။", "select_backup_file": "အရန်ဖိုင်ကို ရွေးပါ။",
@ -666,6 +670,7 @@
"setup_your_debit_card": "သင့်ဒက်ဘစ်ကတ်ကို စနစ်ထည့်သွင်းပါ။", "setup_your_debit_card": "သင့်ဒက်ဘစ်ကတ်ကို စနစ်ထည့်သွင်းပါ။",
"share": "မျှဝေပါ။", "share": "မျှဝေပါ။",
"share_address": "လိပ်စာမျှဝေပါ။", "share_address": "လိပ်စာမျှဝေပါ။",
"shared_seed_wallet_groups": "shared မျိုးစေ့ပိုက်ဆံအိတ်အုပ်စုများ",
"show_details": "အသေးစိတ်ပြ", "show_details": "အသေးစိတ်ပြ",
"show_keys": "မျိုးစေ့ /သော့များကို ပြပါ။", "show_keys": "မျိုးစေ့ /သော့များကို ပြပါ။",
"show_market_place": "စျေးကွက်ကိုပြသပါ။", "show_market_place": "စျေးကွက်ကိုပြသပါ။",
@ -690,6 +695,7 @@
"silent_payments_scanned_tip": "အစွန်အဖျားမှ scan ဖတ်! (${tip})", "silent_payments_scanned_tip": "အစွန်အဖျားမှ scan ဖတ်! (${tip})",
"silent_payments_scanning": "အသံတိတ်ငွေပေးချေမှု scanning", "silent_payments_scanning": "အသံတိတ်ငွေပေးချေမှု scanning",
"silent_payments_settings": "အသံတိတ်ငွေပေးချေမှုဆက်တင်များ", "silent_payments_settings": "အသံတိတ်ငွေပေးချေမှုဆက်တင်များ",
"single_seed_wallets_group": "တစ်ခုတည်းမျိုးစေ့ပိုက်ဆံအိတ်",
"slidable": "လျှောချနိုင်သည်။", "slidable": "လျှောချနိုင်သည်။",
"sort_by": "အလိုက်စဥ်သည်", "sort_by": "အလိုက်စဥ်သည်",
"spend_key_private": "သော့သုံးရန် (သီးသန့်)", "spend_key_private": "သော့သုံးရန် (သီးသန့်)",
@ -849,8 +855,16 @@
"view_transaction_on": "ငွေလွှဲခြင်းကို ဖွင့်ကြည့်ပါ။", "view_transaction_on": "ငွေလွှဲခြင်းကို ဖွင့်ကြည့်ပါ။",
"voting_weight": "မဲပေးအလေးချိန်", "voting_weight": "မဲပေးအလေးချိန်",
"waitFewSecondForTxUpdate": "ငွေပေးငွေယူ မှတ်တမ်းတွင် ရောင်ပြန်ဟပ်ရန် စက္ကန့်အနည်းငယ်စောင့်ပါ။", "waitFewSecondForTxUpdate": "ငွေပေးငွေယူ မှတ်တမ်းတွင် ရောင်ပြန်ဟပ်ရန် စက္ကန့်အနည်းငယ်စောင့်ပါ။",
"wallet_group": "ပိုက်ဆံအိတ်အုပ်စု",
"wallet_group_description_four": "လုံးဝအသစ်သောမျိုးစေ့နှင့်အတူပိုက်ဆံအိတ်ဖန်တီးရန်။",
"wallet_group_description_one": "ကိတ်မုန့်၌, သင်တစ် ဦး ဖန်တီးနိုင်ပါတယ်",
"wallet_group_description_three": "ရရှိနိုင်သည့်ပိုက်ဆံအိတ်နှင့် / သို့မဟုတ်ပိုက်ဆံအိတ်အုပ်စုများမြင်ကွင်းကိုကြည့်ရှုရန်။ သို့မဟုတ်ရွေးချယ်ပါ",
"wallet_group_description_two": "နှင့်အတူမျိုးစေ့ဝေမျှဖို့ရှိပြီးသားပိုက်ဆံအိတ်တစ်ခုရွေးချယ်ခြင်းအားဖြင့်။ ပိုက်ဆံအိတ်အုပ်စုတစ်ခုစီတွင်ငွေကြေးအမျိုးအစားတစ်ခုစီ၏တစ်ခုတည်းသောပိုက်ဆံအိတ်တစ်ခုပါ 0 င်နိုင်သည်။ \n\n သင်ရွေးချယ်နိုင်သည်",
"wallet_group_empty_state_text_one": "သင့်တွင်သဟဇာတဖြစ်သောပိုက်ဆံအိတ်အုပ်စုများမရှိပါ။ !\n\n ကိုအသာပုတ်ပါ",
"wallet_group_empty_state_text_two": "အသစ်တစ်ခုကိုတစ်ခုလုပ်ဖို့အောက်တွင်ဖော်ပြထားသော။",
"wallet_keys": "ပိုက်ဆံအိတ် အစေ့/သော့များ", "wallet_keys": "ပိုက်ဆံအိတ် အစေ့/သော့များ",
"wallet_list_create_new_wallet": "Wallet အသစ်ဖန်တီးပါ။", "wallet_list_create_new_wallet": "Wallet အသစ်ဖန်တီးပါ။",
"wallet_list_edit_group_name": "အုပ်စုအမည်ကိုတည်းဖြတ်ပါ",
"wallet_list_edit_wallet": "ပိုက်ဆံအိတ်ကို တည်းဖြတ်ပါ။", "wallet_list_edit_wallet": "ပိုက်ဆံအိတ်ကို တည်းဖြတ်ပါ။",
"wallet_list_failed_to_load": "${wallet_name} ပိုက်ဆံအိတ်ကို ဖွင့်၍မရပါ။ ${error}", "wallet_list_failed_to_load": "${wallet_name} ပိုက်ဆံအိတ်ကို ဖွင့်၍မရပါ။ ${error}",
"wallet_list_failed_to_remove": "${wallet_name} ပိုက်ဆံအိတ်ကို ဖယ်ရှား၍မရပါ။ ${error}", "wallet_list_failed_to_remove": "${wallet_name} ပိုက်ဆံအိတ်ကို ဖယ်ရှား၍မရပါ။ ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Kies er een", "choose_one": "Kies er een",
"choose_relay": "Kies een relais dat u wilt gebruiken", "choose_relay": "Kies een relais dat u wilt gebruiken",
"choose_wallet_currency": "Kies een portemonnee-valuta:", "choose_wallet_currency": "Kies een portemonnee-valuta:",
"choose_wallet_group": "Kies portemonnee groep",
"clear": "Duidelijk", "clear": "Duidelijk",
"clearnet_link": "Clearnet-link", "clearnet_link": "Clearnet-link",
"close": "Dichtbij", "close": "Dichtbij",
@ -176,6 +177,7 @@
"create_invoice": "Factuur maken", "create_invoice": "Factuur maken",
"create_new": "Maak een nieuwe portemonnee", "create_new": "Maak een nieuwe portemonnee",
"create_new_account": "Creëer een nieuw account", "create_new_account": "Creëer een nieuw account",
"create_new_seed": "Maak nieuw zaadje",
"creating_new_wallet": "Nieuwe portemonnee aanmaken", "creating_new_wallet": "Nieuwe portemonnee aanmaken",
"creating_new_wallet_error": "Fout: ${description}", "creating_new_wallet_error": "Fout: ${description}",
"creation_date": "Aanmaakdatum", "creation_date": "Aanmaakdatum",
@ -600,6 +602,8 @@
"seed_share": "Deel zaad", "seed_share": "Deel zaad",
"seed_title": "Zaad", "seed_title": "Zaad",
"seedtype": "Zaadtype", "seedtype": "Zaadtype",
"seedtype_alert_content": "Het delen van zaden met andere portefeuilles is alleen mogelijk met BIP39 SeedType.",
"seedtype_alert_title": "Zaadtype alert",
"seedtype_legacy": "Legacy (25 woorden)", "seedtype_legacy": "Legacy (25 woorden)",
"seedtype_polyseed": "Polyseed (16 woorden)", "seedtype_polyseed": "Polyseed (16 woorden)",
"select_backup_file": "Selecteer een back-upbestand", "select_backup_file": "Selecteer een back-upbestand",
@ -666,6 +670,7 @@
"setup_your_debit_card": "Stel uw debetkaart in", "setup_your_debit_card": "Stel uw debetkaart in",
"share": "Deel", "share": "Deel",
"share_address": "Deel adres", "share_address": "Deel adres",
"shared_seed_wallet_groups": "Gedeelde zaadportelgroepen",
"show_details": "Toon details", "show_details": "Toon details",
"show_keys": "Toon zaad/sleutels", "show_keys": "Toon zaad/sleutels",
"show_market_place": "Toon Marktplaats", "show_market_place": "Toon Marktplaats",
@ -690,6 +695,7 @@
"silent_payments_scanned_tip": "Gescand om te fooien! (${tip})", "silent_payments_scanned_tip": "Gescand om te fooien! (${tip})",
"silent_payments_scanning": "Stille betalingen scannen", "silent_payments_scanning": "Stille betalingen scannen",
"silent_payments_settings": "Stille betalingsinstellingen", "silent_payments_settings": "Stille betalingsinstellingen",
"single_seed_wallets_group": "Enkele zaadportefeuilles",
"slidable": "Verschuifbaar", "slidable": "Verschuifbaar",
"sort_by": "Sorteer op", "sort_by": "Sorteer op",
"spend_key_private": "Sleutel uitgeven (privaat)", "spend_key_private": "Sleutel uitgeven (privaat)",
@ -850,8 +856,16 @@
"voting_weight": "Stemgewicht", "voting_weight": "Stemgewicht",
"waitFewSecondForTxUpdate": "Wacht een paar seconden totdat de transactie wordt weergegeven in de transactiegeschiedenis", "waitFewSecondForTxUpdate": "Wacht een paar seconden totdat de transactie wordt weergegeven in de transactiegeschiedenis",
"waiting_payment_confirmation": "In afwachting van betalingsbevestiging", "waiting_payment_confirmation": "In afwachting van betalingsbevestiging",
"wallet_group": "Portemonnee",
"wallet_group_description_four": "om een portemonnee te maken met een geheel nieuw zaadje.",
"wallet_group_description_one": "In cakeballet kun je een",
"wallet_group_description_three": "Om de beschikbare portefeuilles en/of portefeuillegroepen te zien. Of kies",
"wallet_group_description_two": "Door een bestaande portemonnee te selecteren om een zaadje mee te delen. Elke portemonnee -groep kan een enkele portemonnee van elk valutietype bevatten. \n\n U kunt selecteren",
"wallet_group_empty_state_text_one": "Het lijkt erop dat je geen compatibele portemonnee -groepen hebt !\n\n TAP",
"wallet_group_empty_state_text_two": "hieronder om een nieuwe te maken.",
"wallet_keys": "Portemonnee zaad/sleutels", "wallet_keys": "Portemonnee zaad/sleutels",
"wallet_list_create_new_wallet": "Maak een nieuwe portemonnee", "wallet_list_create_new_wallet": "Maak een nieuwe portemonnee",
"wallet_list_edit_group_name": "Groepsnaam bewerken",
"wallet_list_edit_wallet": "Portemonnee bewerken", "wallet_list_edit_wallet": "Portemonnee bewerken",
"wallet_list_failed_to_load": "Laden mislukt ${wallet_name} portemonnee. ${error}", "wallet_list_failed_to_load": "Laden mislukt ${wallet_name} portemonnee. ${error}",
"wallet_list_failed_to_remove": "Verwijderen mislukt ${wallet_name} portemonnee. ${error}", "wallet_list_failed_to_remove": "Verwijderen mislukt ${wallet_name} portemonnee. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Wybierz jeden", "choose_one": "Wybierz jeden",
"choose_relay": "Wybierz przekaźnik, którego chcesz użyć", "choose_relay": "Wybierz przekaźnik, którego chcesz użyć",
"choose_wallet_currency": "Wybierz walutę portfela:", "choose_wallet_currency": "Wybierz walutę portfela:",
"choose_wallet_group": "Wybierz grupę portfela",
"clear": "Wyczyść", "clear": "Wyczyść",
"clearnet_link": "łącze Clearnet", "clearnet_link": "łącze Clearnet",
"close": "Zamknąć", "close": "Zamknąć",
@ -176,6 +177,7 @@
"create_invoice": "Wystaw fakturę", "create_invoice": "Wystaw fakturę",
"create_new": "Utwórz nowy portfel", "create_new": "Utwórz nowy portfel",
"create_new_account": "Stwórz nowe konto", "create_new_account": "Stwórz nowe konto",
"create_new_seed": "Utwórz nowe ziarno",
"creating_new_wallet": "Tworzenie nowego portfela", "creating_new_wallet": "Tworzenie nowego portfela",
"creating_new_wallet_error": "Błąd: ${description}", "creating_new_wallet_error": "Błąd: ${description}",
"creation_date": "Data utworzenia", "creation_date": "Data utworzenia",
@ -600,6 +602,8 @@
"seed_share": "Udostępnij seed", "seed_share": "Udostępnij seed",
"seed_title": "Seed", "seed_title": "Seed",
"seedtype": "Sedtype", "seedtype": "Sedtype",
"seedtype_alert_content": "Dzielenie się nasionami z innymi portfelami jest możliwe tylko z BIP39 sededType.",
"seedtype_alert_title": "Ustanowienie typu sedype",
"seedtype_legacy": "Dziedzictwo (25 słów)", "seedtype_legacy": "Dziedzictwo (25 słów)",
"seedtype_polyseed": "Poliqueed (16 słów)", "seedtype_polyseed": "Poliqueed (16 słów)",
"select_backup_file": "Wybierz plik kopii zapasowej", "select_backup_file": "Wybierz plik kopii zapasowej",
@ -666,6 +670,7 @@
"setup_your_debit_card": "Skonfiguruj swoją kartę debetową", "setup_your_debit_card": "Skonfiguruj swoją kartę debetową",
"share": "Udział", "share": "Udział",
"share_address": "Udostępnij adres", "share_address": "Udostępnij adres",
"shared_seed_wallet_groups": "Wspólne grupy portfeli nasion",
"show_details": "Pokaż szczegóły", "show_details": "Pokaż szczegóły",
"show_keys": "Pokaż seed/klucze", "show_keys": "Pokaż seed/klucze",
"show_market_place": "Pokaż rynek", "show_market_place": "Pokaż rynek",
@ -690,6 +695,7 @@
"silent_payments_scanned_tip": "Zeskanowany do napiwku! (${tip})", "silent_payments_scanned_tip": "Zeskanowany do napiwku! (${tip})",
"silent_payments_scanning": "Skanowanie cichych płatności", "silent_payments_scanning": "Skanowanie cichych płatności",
"silent_payments_settings": "Ustawienia o cichej płatności", "silent_payments_settings": "Ustawienia o cichej płatności",
"single_seed_wallets_group": "Pojedyncze portfele nasion",
"slidable": "Przesuwne", "slidable": "Przesuwne",
"sort_by": "Sortuj według", "sort_by": "Sortuj według",
"spend_key_private": "Klucz prywatny", "spend_key_private": "Klucz prywatny",
@ -849,8 +855,16 @@
"view_transaction_on": "Zobacz transakcje na ", "view_transaction_on": "Zobacz transakcje na ",
"voting_weight": "Waga głosu", "voting_weight": "Waga głosu",
"waitFewSecondForTxUpdate": "Poczekaj kilka sekund, aż transakcja zostanie odzwierciedlona w historii transakcji", "waitFewSecondForTxUpdate": "Poczekaj kilka sekund, aż transakcja zostanie odzwierciedlona w historii transakcji",
"wallet_group": "Grupa portfela",
"wallet_group_description_four": "Aby stworzyć portfel z zupełnie nowym ziarnem.",
"wallet_group_description_one": "W portfelu ciasta możesz stworzyć",
"wallet_group_description_three": "Aby zobaczyć dostępny ekran portfeli i/lub grup portfeli. Lub wybierz",
"wallet_group_description_two": "Wybierając istniejący portfel do podzielenia nasion. Każda grupa portfela może zawierać pojedynczy portfel każdego typu waluty. \n\n możesz wybrać",
"wallet_group_empty_state_text_one": "Wygląda na to, że nie masz żadnych kompatybilnych grup portfeli !\n\n Tap",
"wallet_group_empty_state_text_two": "poniżej, aby zrobić nowy.",
"wallet_keys": "Klucze portfela", "wallet_keys": "Klucze portfela",
"wallet_list_create_new_wallet": "Utwórz nowy portfel", "wallet_list_create_new_wallet": "Utwórz nowy portfel",
"wallet_list_edit_group_name": "Edytuj nazwę grupy",
"wallet_list_edit_wallet": "Edytuj portfel", "wallet_list_edit_wallet": "Edytuj portfel",
"wallet_list_failed_to_load": "Nie udało się załadować ${wallet_name} portfel. ${error}", "wallet_list_failed_to_load": "Nie udało się załadować ${wallet_name} portfel. ${error}",
"wallet_list_failed_to_remove": "Nie udało się usunąć ${wallet_name} portfel. ${error}", "wallet_list_failed_to_remove": "Nie udało się usunąć ${wallet_name} portfel. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Escolha um", "choose_one": "Escolha um",
"choose_relay": "Escolha um relé para usar", "choose_relay": "Escolha um relé para usar",
"choose_wallet_currency": "Escolha a moeda da carteira:", "choose_wallet_currency": "Escolha a moeda da carteira:",
"choose_wallet_group": "Escolha o Grupo de Wallet",
"clear": "Limpar", "clear": "Limpar",
"clearnet_link": "link clear net", "clearnet_link": "link clear net",
"close": "Fechar", "close": "Fechar",
@ -176,6 +177,7 @@
"create_invoice": "Criar recibo", "create_invoice": "Criar recibo",
"create_new": "Criar nova carteira", "create_new": "Criar nova carteira",
"create_new_account": "Criar nova conta", "create_new_account": "Criar nova conta",
"create_new_seed": "Crie nova semente",
"creating_new_wallet": "Criando nova carteira", "creating_new_wallet": "Criando nova carteira",
"creating_new_wallet_error": "Erro: ${description}", "creating_new_wallet_error": "Erro: ${description}",
"creation_date": "Data de criação", "creation_date": "Data de criação",
@ -602,6 +604,8 @@
"seed_share": "Compartilhar semente", "seed_share": "Compartilhar semente",
"seed_title": "Semente", "seed_title": "Semente",
"seedtype": "SeedType", "seedtype": "SeedType",
"seedtype_alert_content": "Compartilhar sementes com outras carteiras só é possível com o BIP39 SeedType.",
"seedtype_alert_title": "Alerta de SeedType",
"seedtype_legacy": "Legado (25 palavras)", "seedtype_legacy": "Legado (25 palavras)",
"seedtype_polyseed": "Polyseed (16 palavras)", "seedtype_polyseed": "Polyseed (16 palavras)",
"select_backup_file": "Selecione o arquivo de backup", "select_backup_file": "Selecione o arquivo de backup",
@ -668,6 +672,7 @@
"setup_your_debit_card": "Configure seu cartão de débito", "setup_your_debit_card": "Configure seu cartão de débito",
"share": "Compartilhar", "share": "Compartilhar",
"share_address": "Compartilhar endereço", "share_address": "Compartilhar endereço",
"shared_seed_wallet_groups": "Grupos de carteira de sementes compartilhados",
"show_details": "Mostrar detalhes", "show_details": "Mostrar detalhes",
"show_keys": "Mostrar semente/chaves", "show_keys": "Mostrar semente/chaves",
"show_market_place": "Mostrar mercado", "show_market_place": "Mostrar mercado",
@ -692,6 +697,7 @@
"silent_payments_scanned_tip": "Escaneado até o fim! (${tip})", "silent_payments_scanned_tip": "Escaneado até o fim! (${tip})",
"silent_payments_scanning": "Escanear Pagamentos Silenciosos", "silent_payments_scanning": "Escanear Pagamentos Silenciosos",
"silent_payments_settings": "Configurações de pagamentos silenciosos", "silent_payments_settings": "Configurações de pagamentos silenciosos",
"single_seed_wallets_group": "Carteiras de sementes únicas",
"slidable": "Deslizável", "slidable": "Deslizável",
"sort_by": "Ordenar por", "sort_by": "Ordenar por",
"spend_key_private": "Chave de gastos (privada)", "spend_key_private": "Chave de gastos (privada)",
@ -852,8 +858,16 @@
"voting_weight": "Peso de votação", "voting_weight": "Peso de votação",
"waitFewSecondForTxUpdate": "Aguarde alguns segundos para que a transação seja refletida no histórico de transações", "waitFewSecondForTxUpdate": "Aguarde alguns segundos para que a transação seja refletida no histórico de transações",
"waiting_payment_confirmation": "Aguardando confirmação de pagamento", "waiting_payment_confirmation": "Aguardando confirmação de pagamento",
"wallet_group": "Grupo de carteira",
"wallet_group_description_four": "Para criar uma carteira com uma semente totalmente nova.",
"wallet_group_description_one": "Na carteira de bolo, você pode criar um",
"wallet_group_description_three": "Para ver as carteiras disponíveis e/ou os grupos de carteiras. Ou escolha",
"wallet_group_description_two": "Selecionando uma carteira existente para compartilhar uma semente. Cada grupo de carteira pode conter uma única carteira de cada tipo de moeda. \n\n você pode selecionar",
"wallet_group_empty_state_text_one": "Parece que você não tem nenhum grupo de carteira compatível !\n\n Toque",
"wallet_group_empty_state_text_two": "abaixo para fazer um novo.",
"wallet_keys": "Semente/chaves da carteira", "wallet_keys": "Semente/chaves da carteira",
"wallet_list_create_new_wallet": "Criar nova carteira", "wallet_list_create_new_wallet": "Criar nova carteira",
"wallet_list_edit_group_name": "Editar o nome do grupo",
"wallet_list_edit_wallet": "Editar carteira", "wallet_list_edit_wallet": "Editar carteira",
"wallet_list_failed_to_load": "Falha ao abrir a carteira ${wallet_name}. ${error}", "wallet_list_failed_to_load": "Falha ao abrir a carteira ${wallet_name}. ${error}",
"wallet_list_failed_to_remove": "Falha ao remover a carteira ${wallet_name}. ${error}", "wallet_list_failed_to_remove": "Falha ao remover a carteira ${wallet_name}. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Выбери один", "choose_one": "Выбери один",
"choose_relay": "Пожалуйста, выберите реле для использования", "choose_relay": "Пожалуйста, выберите реле для использования",
"choose_wallet_currency": "Пожалуйста, выберите валюту кошелька:", "choose_wallet_currency": "Пожалуйста, выберите валюту кошелька:",
"choose_wallet_group": "Выберите группу кошелька",
"clear": "Очистить", "clear": "Очистить",
"clearnet_link": "Клирнет ссылка", "clearnet_link": "Клирнет ссылка",
"close": "Закрывать", "close": "Закрывать",
@ -176,6 +177,7 @@
"create_invoice": "Создать счет", "create_invoice": "Создать счет",
"create_new": "Создать новый кошелёк", "create_new": "Создать новый кошелёк",
"create_new_account": "Создать новый аккаунт", "create_new_account": "Создать новый аккаунт",
"create_new_seed": "Создать новое семя",
"creating_new_wallet": "Создание нового кошелька", "creating_new_wallet": "Создание нового кошелька",
"creating_new_wallet_error": "Ошибка: ${description}", "creating_new_wallet_error": "Ошибка: ${description}",
"creation_date": "Дата создания", "creation_date": "Дата создания",
@ -601,6 +603,8 @@
"seed_share": "Поделиться мнемонической фразой", "seed_share": "Поделиться мнемонической фразой",
"seed_title": "Мнемоническая фраза", "seed_title": "Мнемоническая фраза",
"seedtype": "SEEDTYPE", "seedtype": "SEEDTYPE",
"seedtype_alert_content": "Обмен семенами с другими кошельками возможно только с BIP39 SeedType.",
"seedtype_alert_title": "SEEDTYPE ALERT",
"seedtype_legacy": "Наследие (25 слов)", "seedtype_legacy": "Наследие (25 слов)",
"seedtype_polyseed": "Полиса (16 слов)", "seedtype_polyseed": "Полиса (16 слов)",
"select_backup_file": "Выберите файл резервной копии", "select_backup_file": "Выберите файл резервной копии",
@ -667,6 +671,7 @@
"setup_your_debit_card": "Настройте свою дебетовую карту", "setup_your_debit_card": "Настройте свою дебетовую карту",
"share": "Делиться", "share": "Делиться",
"share_address": "Поделиться адресом", "share_address": "Поделиться адресом",
"shared_seed_wallet_groups": "Общие группы кошелька семян",
"show_details": "Показать детали", "show_details": "Показать детали",
"show_keys": "Показать мнемоническую фразу/ключи", "show_keys": "Показать мнемоническую фразу/ключи",
"show_market_place": "Показать торговую площадку", "show_market_place": "Показать торговую площадку",
@ -691,6 +696,7 @@
"silent_payments_scanned_tip": "Оканируется, чтобы чаевые! (${tip})", "silent_payments_scanned_tip": "Оканируется, чтобы чаевые! (${tip})",
"silent_payments_scanning": "Сканирование безмолвных платежей", "silent_payments_scanning": "Сканирование безмолвных платежей",
"silent_payments_settings": "Silent Payments Settings", "silent_payments_settings": "Silent Payments Settings",
"single_seed_wallets_group": "Одиночные кошельки",
"slidable": "Скользящий", "slidable": "Скользящий",
"sort_by": "Сортировать по", "sort_by": "Сортировать по",
"spend_key_private": "Приватный ключ траты", "spend_key_private": "Приватный ключ траты",
@ -850,8 +856,16 @@
"view_transaction_on": "View Transaction on ", "view_transaction_on": "View Transaction on ",
"voting_weight": "Вес голоса", "voting_weight": "Вес голоса",
"waitFewSecondForTxUpdate": "Пожалуйста, подождите несколько секунд, чтобы транзакция отразилась в истории транзакций.", "waitFewSecondForTxUpdate": "Пожалуйста, подождите несколько секунд, чтобы транзакция отразилась в истории транзакций.",
"wallet_group": "Группа кошелька",
"wallet_group_description_four": "создать кошелек с совершенно новым семенем.",
"wallet_group_description_one": "В кошельке для торта вы можете создать",
"wallet_group_description_three": "Чтобы увидеть доступные кошельки и/или экраны групп кошельков. Или выберите",
"wallet_group_description_two": "выбирая существующий кошелек, чтобы поделиться семенами. Каждая группа кошелька может содержать один кошелек каждого типа валюты. \n\n Вы можете выбрать",
"wallet_group_empty_state_text_one": "Похоже, у вас нет никаких совместимых групп кошелька !\n\n tap",
"wallet_group_empty_state_text_two": "ниже, чтобы сделать новый.",
"wallet_keys": "Мнемоническая фраза/ключи кошелька", "wallet_keys": "Мнемоническая фраза/ключи кошелька",
"wallet_list_create_new_wallet": "Создать новый кошелёк", "wallet_list_create_new_wallet": "Создать новый кошелёк",
"wallet_list_edit_group_name": "Редактировать название группы",
"wallet_list_edit_wallet": "Изменить кошелек", "wallet_list_edit_wallet": "Изменить кошелек",
"wallet_list_failed_to_load": "Ошибка при загрузке ${wallet_name} кошелька. ${error}", "wallet_list_failed_to_load": "Ошибка при загрузке ${wallet_name} кошелька. ${error}",
"wallet_list_failed_to_remove": "Ошибка при удалении ${wallet_name} кошелька. ${error}", "wallet_list_failed_to_remove": "Ошибка при удалении ${wallet_name} кошелька. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "เลือกหนึ่งรายการ", "choose_one": "เลือกหนึ่งรายการ",
"choose_relay": "กรุณาเลือกรีเลย์ที่จะใช้", "choose_relay": "กรุณาเลือกรีเลย์ที่จะใช้",
"choose_wallet_currency": "โปรดเลือกสกุลเงินของกระเป๋า:", "choose_wallet_currency": "โปรดเลือกสกุลเงินของกระเป๋า:",
"choose_wallet_group": "เลือกกลุ่มกระเป๋าเงิน",
"clear": "ล้าง", "clear": "ล้าง",
"clearnet_link": "ลิงค์เคลียร์เน็ต", "clearnet_link": "ลิงค์เคลียร์เน็ต",
"close": "ปิด", "close": "ปิด",
@ -176,6 +177,7 @@
"create_invoice": "สร้างใบแจ้งหนี้", "create_invoice": "สร้างใบแจ้งหนี้",
"create_new": "สร้างกระเป๋าใหม่", "create_new": "สร้างกระเป๋าใหม่",
"create_new_account": "สร้างบัญชีใหม่", "create_new_account": "สร้างบัญชีใหม่",
"create_new_seed": "สร้างเมล็ดพันธุ์ใหม่",
"creating_new_wallet": "กำลังสร้างกระเป๋าใหม่", "creating_new_wallet": "กำลังสร้างกระเป๋าใหม่",
"creating_new_wallet_error": "ข้อผิดพลาด: ${description}", "creating_new_wallet_error": "ข้อผิดพลาด: ${description}",
"creation_date": "วันที่สร้าง", "creation_date": "วันที่สร้าง",
@ -600,6 +602,8 @@
"seed_share": "แบ่งปัน seed", "seed_share": "แบ่งปัน seed",
"seed_title": "Seed", "seed_title": "Seed",
"seedtype": "เมล็ดพันธุ์", "seedtype": "เมล็ดพันธุ์",
"seedtype_alert_content": "การแบ่งปันเมล็ดกับกระเป๋าเงินอื่น ๆ เป็นไปได้เฉพาะกับ bip39 seedtype",
"seedtype_alert_title": "การแจ้งเตือน seedtype",
"seedtype_legacy": "มรดก (25 คำ)", "seedtype_legacy": "มรดก (25 คำ)",
"seedtype_polyseed": "โพลีส (16 คำ)", "seedtype_polyseed": "โพลีส (16 คำ)",
"select_backup_file": "เลือกไฟล์สำรอง", "select_backup_file": "เลือกไฟล์สำรอง",
@ -666,6 +670,7 @@
"setup_your_debit_card": "ตั้งค่าบัตรเดบิตของคุณ", "setup_your_debit_card": "ตั้งค่าบัตรเดบิตของคุณ",
"share": "แบ่งปัน", "share": "แบ่งปัน",
"share_address": "แชร์ที่อยู่", "share_address": "แชร์ที่อยู่",
"shared_seed_wallet_groups": "กลุ่มกระเป๋าเงินที่ใช้ร่วมกัน",
"show_details": "แสดงรายละเอียด", "show_details": "แสดงรายละเอียด",
"show_keys": "แสดงซีด/คีย์", "show_keys": "แสดงซีด/คีย์",
"show_market_place": "แสดงตลาดกลาง", "show_market_place": "แสดงตลาดกลาง",
@ -690,6 +695,7 @@
"silent_payments_scanned_tip": "สแกนไปที่ปลาย! (${tip})", "silent_payments_scanned_tip": "สแกนไปที่ปลาย! (${tip})",
"silent_payments_scanning": "การสแกนการชำระเงินแบบเงียบ", "silent_payments_scanning": "การสแกนการชำระเงินแบบเงียบ",
"silent_payments_settings": "การตั้งค่าการชำระเงินแบบเงียบ", "silent_payments_settings": "การตั้งค่าการชำระเงินแบบเงียบ",
"single_seed_wallets_group": "กระเป๋าเงินเดียว",
"slidable": "เลื่อนได้", "slidable": "เลื่อนได้",
"sort_by": "เรียงตาม", "sort_by": "เรียงตาม",
"spend_key_private": "คีย์จ่าย (ส่วนตัว)", "spend_key_private": "คีย์จ่าย (ส่วนตัว)",
@ -849,8 +855,16 @@
"view_transaction_on": "ดูการทำธุรกรรมบน ", "view_transaction_on": "ดูการทำธุรกรรมบน ",
"voting_weight": "น้ำหนักโหวต", "voting_weight": "น้ำหนักโหวต",
"waitFewSecondForTxUpdate": "กรุณารอสักครู่เพื่อให้ธุรกรรมปรากฏในประวัติการทำธุรกรรม", "waitFewSecondForTxUpdate": "กรุณารอสักครู่เพื่อให้ธุรกรรมปรากฏในประวัติการทำธุรกรรม",
"wallet_group": "กลุ่มกระเป๋าเงิน",
"wallet_group_description_four": "เพื่อสร้างกระเป๋าเงินที่มีเมล็ดพันธุ์ใหม่ทั้งหมด",
"wallet_group_description_one": "ในกระเป๋าเงินเค้กคุณสามารถสร้างไฟล์",
"wallet_group_description_three": "หากต้องการดูกระเป๋าเงินและ/หรือกลุ่มกระเป๋าเงินที่มีอยู่ หรือเลือก",
"wallet_group_description_two": "โดยการเลือกกระเป๋าเงินที่มีอยู่เพื่อแบ่งปันเมล็ดด้วย แต่ละกลุ่มกระเป๋าเงินสามารถมีกระเป๋าเงินเดียวของแต่ละประเภทสกุลเงิน \n\n คุณสามารถเลือกได้",
"wallet_group_empty_state_text_one": "ดูเหมือนว่าคุณจะไม่มีกลุ่มกระเป๋าเงินที่เข้ากันได้ !\n\n แตะ",
"wallet_group_empty_state_text_two": "ด้านล่างเพื่อสร้างใหม่",
"wallet_keys": "ซีดของกระเป๋า/คีย์", "wallet_keys": "ซีดของกระเป๋า/คีย์",
"wallet_list_create_new_wallet": "สร้างกระเป๋าใหม่", "wallet_list_create_new_wallet": "สร้างกระเป๋าใหม่",
"wallet_list_edit_group_name": "แก้ไขชื่อกลุ่ม",
"wallet_list_edit_wallet": "แก้ไขกระเป๋าสตางค์", "wallet_list_edit_wallet": "แก้ไขกระเป๋าสตางค์",
"wallet_list_failed_to_load": "ไม่สามารถโหลดกระเป๋า ${wallet_name} ได้ ${error}", "wallet_list_failed_to_load": "ไม่สามารถโหลดกระเป๋า ${wallet_name} ได้ ${error}",
"wallet_list_failed_to_remove": "ไม่สามารถลบกระเป๋า ${wallet_name} ได้ ${error}", "wallet_list_failed_to_remove": "ไม่สามารถลบกระเป๋า ${wallet_name} ได้ ${error}",

View file

@ -129,8 +129,9 @@
"choose_from_available_options": "Pumili mula sa magagamit na mga pagpipilian:", "choose_from_available_options": "Pumili mula sa magagamit na mga pagpipilian:",
"choose_one": "Pumili ng isa", "choose_one": "Pumili ng isa",
"choose_relay": "Mangyaring pumili ng relay na gagamitin", "choose_relay": "Mangyaring pumili ng relay na gagamitin",
"choose_wallet_currency": "Mangyaring piliin ang pera ng wallet:", "choose_wallet_currency": "Mangyaring piliin ang Pera ng Wallet:",
"clear": "Burahin", "choose_wallet_group": "Piliin ang pangkat ng Wallet",
"clear": "Malinaw",
"clearnet_link": "Link ng Clearnet", "clearnet_link": "Link ng Clearnet",
"close": "Isara", "close": "Isara",
"coin_control": "Coin control (opsyonal)", "coin_control": "Coin control (opsyonal)",
@ -176,6 +177,7 @@
"create_invoice": "Lumikha ng invoice", "create_invoice": "Lumikha ng invoice",
"create_new": "Lumikha ng Bagong Wallet", "create_new": "Lumikha ng Bagong Wallet",
"create_new_account": "Lumikha ng bagong account", "create_new_account": "Lumikha ng bagong account",
"create_new_seed": "Lumikha ng bagong binhi",
"creating_new_wallet": "Lumikha ng bagong wallet", "creating_new_wallet": "Lumikha ng bagong wallet",
"creating_new_wallet_error": "Error: ${description}", "creating_new_wallet_error": "Error: ${description}",
"creation_date": "Petsa ng paglikha", "creation_date": "Petsa ng paglikha",
@ -469,13 +471,13 @@
"please_try_to_connect_to_another_node": "Pakisubukang kumonekta sa iba pang node", "please_try_to_connect_to_another_node": "Pakisubukang kumonekta sa iba pang node",
"please_wait": "Mangyaring maghintay", "please_wait": "Mangyaring maghintay",
"polygonscan_history": "Kasaysayan ng PolygonScan", "polygonscan_history": "Kasaysayan ng PolygonScan",
"powered_by": "Pinapatakbo ng${title}", "powered_by": "Pinapagana ng ${title}",
"pre_seed_button_text": "Naiitindihan ko. Ipakita ang aking seed", "pre_seed_button_text": "Naiintindihan ko. Ipakita sa akin ang aking binhi",
"pre_seed_description": "Sa susunod na pahina ay makikita mo ang isang serye ng ${words} na salita. Ito ang iyong natatangi at pribadong seed at ito ang tanging paraan upang mabawi ang iyong wallet kung sakaling mawala o hindi gumana. Responsibilidad mong isulat ito sa isang ligtas na lugar sa labas ng Cake Wallet app.", "pre_seed_description": "Sa susunod na pahina makikita mo ang isang serye ng mga ${words} na mga salita. Ito ang iyong natatangi at pribadong binhi at ito ang tanging paraan upang mabawi ang iyong pitaka kung sakaling mawala o madepektong paggawa. Responsibilidad mong isulat ito at itago ito sa isang ligtas na lugar sa labas ng cake wallet app.",
"pre_seed_title": "MAHALAGA", "pre_seed_title": "Mahalaga",
"prepaid_cards": "Mga Prepaid Card", "prepaid_cards": "Mga Prepaid Card",
"prevent_screenshots": "Maiwasan ang mga screenshot at pag-record ng screen", "prevent_screenshots": "Maiwasan ang mga screenshot at pag -record ng screen",
"privacy": "Pagkapribado", "privacy": "Privacy",
"privacy_policy": "Patakaran sa Pagkapribado", "privacy_policy": "Patakaran sa Pagkapribado",
"privacy_settings": "Settings para sa pagsasa-pribado", "privacy_settings": "Settings para sa pagsasa-pribado",
"private_key": "Private key", "private_key": "Private key",
@ -600,6 +602,8 @@
"seed_share": "Ibahagi ang seed", "seed_share": "Ibahagi ang seed",
"seed_title": "Seed", "seed_title": "Seed",
"seedtype": "Seed type", "seedtype": "Seed type",
"seedtype_alert_content": "Ang pagbabahagi ng mga buto sa iba pang mga pitaka ay posible lamang sa bip39 seedtype.",
"seedtype_alert_title": "Alerto ng Seedtype",
"seedtype_legacy": "Legacy (25 na salita)", "seedtype_legacy": "Legacy (25 na salita)",
"seedtype_polyseed": "Polyseed (16 na salita)", "seedtype_polyseed": "Polyseed (16 na salita)",
"select_backup_file": "Piliin ang backup na file", "select_backup_file": "Piliin ang backup na file",
@ -666,6 +670,7 @@
"setup_your_debit_card": "I-set up ang iyong debit card", "setup_your_debit_card": "I-set up ang iyong debit card",
"share": "Ibahagi", "share": "Ibahagi",
"share_address": "Ibahagi ang address", "share_address": "Ibahagi ang address",
"shared_seed_wallet_groups": "Ibinahaging mga pangkat ng pitaka ng binhi",
"show_details": "Ipakita ang mga detalye", "show_details": "Ipakita ang mga detalye",
"show_keys": "Ipakita ang mga seed/key", "show_keys": "Ipakita ang mga seed/key",
"show_market_place": "Ipakita ang Marketplace", "show_market_place": "Ipakita ang Marketplace",
@ -690,6 +695,7 @@
"silent_payments_scanned_tip": "Na-scan sa tip! (${tip})", "silent_payments_scanned_tip": "Na-scan sa tip! (${tip})",
"silent_payments_scanning": "Pag-scan ng tahimik na pagbabayad", "silent_payments_scanning": "Pag-scan ng tahimik na pagbabayad",
"silent_payments_settings": "Mga setting ng tahimik na pagbabayad", "silent_payments_settings": "Mga setting ng tahimik na pagbabayad",
"single_seed_wallets_group": "Solong mga pitaka ng binhi",
"slidable": "Slidable", "slidable": "Slidable",
"sort_by": "Pag-uri-uriin sa pamamagitan ng", "sort_by": "Pag-uri-uriin sa pamamagitan ng",
"spend_key_private": "Spend key (private)", "spend_key_private": "Spend key (private)",
@ -849,8 +855,16 @@
"view_transaction_on": "Tingnan ang transaksyon sa ", "view_transaction_on": "Tingnan ang transaksyon sa ",
"voting_weight": "Bigat ng pagboto", "voting_weight": "Bigat ng pagboto",
"waitFewSecondForTxUpdate": "Mangyaring maghintay ng ilang segundo para makita ang transaksyon sa history ng mga transaksyon", "waitFewSecondForTxUpdate": "Mangyaring maghintay ng ilang segundo para makita ang transaksyon sa history ng mga transaksyon",
"wallet_group": "Group ng Wallet",
"wallet_group_description_four": "Upang lumikha ng isang pitaka na may ganap na bagong binhi.",
"wallet_group_description_one": "Sa cake wallet, maaari kang lumikha ng isang",
"wallet_group_description_three": "Upang makita ang magagamit na mga wallets at/o screen ng mga pangkat ng pitaka. O pumili",
"wallet_group_description_two": "Sa pamamagitan ng pagpili ng isang umiiral na pitaka upang magbahagi ng isang binhi. Ang bawat pangkat ng pitaka ay maaaring maglaman ng isang solong pitaka ng bawat uri ng pera.\n\nMaaari kang pumili",
"wallet_group_empty_state_text_one": "Mukhang wala kang anumang mga katugmang pangkat ng pitaka!\n\ntap",
"wallet_group_empty_state_text_two": "sa ibaba upang gumawa ng bago.",
"wallet_keys": "Wallet seed/keys", "wallet_keys": "Wallet seed/keys",
"wallet_list_create_new_wallet": "Lumikha ng bagong wallet", "wallet_list_create_new_wallet": "Lumikha ng bagong wallet",
"wallet_list_edit_group_name": "I -edit ang Pangalan ng Grupo",
"wallet_list_edit_wallet": "I-edit ang wallet", "wallet_list_edit_wallet": "I-edit ang wallet",
"wallet_list_failed_to_load": "Nabigong na-load ang ${wallet_name} na wallet. ${error}", "wallet_list_failed_to_load": "Nabigong na-load ang ${wallet_name} na wallet. ${error}",
"wallet_list_failed_to_remove": "Nabigong alisin ang ${wallet_name} wallet. ${error}", "wallet_list_failed_to_remove": "Nabigong alisin ang ${wallet_name} wallet. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Birini seç", "choose_one": "Birini seç",
"choose_relay": "Lütfen kullanmak için bir röle seçin", "choose_relay": "Lütfen kullanmak için bir röle seçin",
"choose_wallet_currency": "Lütfen cüzdanın para birimini seç:", "choose_wallet_currency": "Lütfen cüzdanın para birimini seç:",
"choose_wallet_group": "Cüzdan Grubu Seçin",
"clear": "Temizle", "clear": "Temizle",
"clearnet_link": "Net bağlantı", "clearnet_link": "Net bağlantı",
"close": "Kapalı", "close": "Kapalı",
@ -176,6 +177,7 @@
"create_invoice": "Fatura oluşturmak", "create_invoice": "Fatura oluşturmak",
"create_new": "Yeni Cüzdan Oluştur", "create_new": "Yeni Cüzdan Oluştur",
"create_new_account": "Yeni hesap oluştur", "create_new_account": "Yeni hesap oluştur",
"create_new_seed": "Yeni Tohum Oluştur",
"creating_new_wallet": "Cüzdan oluşturuluyor", "creating_new_wallet": "Cüzdan oluşturuluyor",
"creating_new_wallet_error": "Hata: ${description}", "creating_new_wallet_error": "Hata: ${description}",
"creation_date": "Oluşturulma tarihi", "creation_date": "Oluşturulma tarihi",
@ -600,6 +602,8 @@
"seed_share": "Tohumu paylaş", "seed_share": "Tohumu paylaş",
"seed_title": "Tohum", "seed_title": "Tohum",
"seedtype": "Tohum", "seedtype": "Tohum",
"seedtype_alert_content": "Tohumları diğer cüzdanlarla paylaşmak sadece BIP39 tohumu ile mümkündür.",
"seedtype_alert_title": "SeedType uyarısı",
"seedtype_legacy": "Miras (25 kelime)", "seedtype_legacy": "Miras (25 kelime)",
"seedtype_polyseed": "Polyseed (16 kelime)", "seedtype_polyseed": "Polyseed (16 kelime)",
"select_backup_file": "Yedek dosyası seç", "select_backup_file": "Yedek dosyası seç",
@ -666,6 +670,7 @@
"setup_your_debit_card": "Banka kartını ayarla", "setup_your_debit_card": "Banka kartını ayarla",
"share": "Paylaşmak", "share": "Paylaşmak",
"share_address": "Adresi paylaş", "share_address": "Adresi paylaş",
"shared_seed_wallet_groups": "Paylaşılan tohum cüzdan grupları",
"show_details": "Detayları Göster", "show_details": "Detayları Göster",
"show_keys": "Tohumları/anahtarları göster", "show_keys": "Tohumları/anahtarları göster",
"show_market_place": "Pazar Yerini Göster", "show_market_place": "Pazar Yerini Göster",
@ -690,6 +695,7 @@
"silent_payments_scanned_tip": "Bahşiş için tarandı! (${tip})", "silent_payments_scanned_tip": "Bahşiş için tarandı! (${tip})",
"silent_payments_scanning": "Sessiz Ödemeler Taraması", "silent_payments_scanning": "Sessiz Ödemeler Taraması",
"silent_payments_settings": "Sessiz Ödeme Ayarları", "silent_payments_settings": "Sessiz Ödeme Ayarları",
"single_seed_wallets_group": "Tek tohum cüzdanları",
"slidable": "kaydırılabilir", "slidable": "kaydırılabilir",
"sort_by": "Göre sırala", "sort_by": "Göre sırala",
"spend_key_private": "Harcama anahtarı (özel)", "spend_key_private": "Harcama anahtarı (özel)",
@ -849,8 +855,16 @@
"view_transaction_on": "İşlemi şurada görüntüle ", "view_transaction_on": "İşlemi şurada görüntüle ",
"voting_weight": "Oy kullanma", "voting_weight": "Oy kullanma",
"waitFewSecondForTxUpdate": "İşlemin işlem geçmişine yansıması için lütfen birkaç saniye bekleyin", "waitFewSecondForTxUpdate": "İşlemin işlem geçmişine yansıması için lütfen birkaç saniye bekleyin",
"wallet_group": "Cüzdan grubu",
"wallet_group_description_four": "Tamamen yeni bir tohumla bir cüzdan oluşturmak için.",
"wallet_group_description_one": "Kek cüzdanında bir",
"wallet_group_description_three": "Mevcut cüzdan ve/veya cüzdan grupları ekranını görmek için. Veya seç",
"wallet_group_description_two": "Bir tohumu paylaşmak için mevcut bir cüzdan seçerek. Her cüzdan grubu, her para türünün tek bir cüzdanı içerebilir. \n\n Seçebilirsiniz",
"wallet_group_empty_state_text_one": "Herhangi bir uyumlu cüzdan grubunuz yok gibi görünüyor !\n\n TAP",
"wallet_group_empty_state_text_two": "Yeni bir tane yapmak için aşağıda.",
"wallet_keys": "Cüzdan tohumu/anahtarları", "wallet_keys": "Cüzdan tohumu/anahtarları",
"wallet_list_create_new_wallet": "Yeni Cüzdan Oluştur", "wallet_list_create_new_wallet": "Yeni Cüzdan Oluştur",
"wallet_list_edit_group_name": "Grup Adını Düzenle",
"wallet_list_edit_wallet": "Cüzdanı düzenle", "wallet_list_edit_wallet": "Cüzdanı düzenle",
"wallet_list_failed_to_load": "Failed to load ${wallet_name} wallet. ${error}", "wallet_list_failed_to_load": "Failed to load ${wallet_name} wallet. ${error}",
"wallet_list_failed_to_remove": "${wallet_name} cüzdanı yüklenirken hata oluştu. ${error}", "wallet_list_failed_to_remove": "${wallet_name} cüzdanı yüklenirken hata oluştu. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Вибери один", "choose_one": "Вибери один",
"choose_relay": "Будь ласка, виберіть реле для використання", "choose_relay": "Будь ласка, виберіть реле для використання",
"choose_wallet_currency": "Будь ласка, виберіть валюту гаманця:", "choose_wallet_currency": "Будь ласка, виберіть валюту гаманця:",
"choose_wallet_group": "Виберіть групу гаманця",
"clear": "Очистити", "clear": "Очистити",
"clearnet_link": "Посилання Clearnet", "clearnet_link": "Посилання Clearnet",
"close": "Закрити", "close": "Закрити",
@ -176,6 +177,7 @@
"create_invoice": "Створити рахунок-фактуру", "create_invoice": "Створити рахунок-фактуру",
"create_new": "Створити новий гаманець", "create_new": "Створити новий гаманець",
"create_new_account": "Створити новий акаунт", "create_new_account": "Створити новий акаунт",
"create_new_seed": "Створіть нове насіння",
"creating_new_wallet": "Створення нового гаманця", "creating_new_wallet": "Створення нового гаманця",
"creating_new_wallet_error": "Помилка: ${description}", "creating_new_wallet_error": "Помилка: ${description}",
"creation_date": "Дата створення", "creation_date": "Дата створення",
@ -601,6 +603,8 @@
"seed_share": "Поділитися мнемонічною фразою", "seed_share": "Поділитися мнемонічною фразою",
"seed_title": "Мнемонічна фраза", "seed_title": "Мнемонічна фраза",
"seedtype": "Насіннєвий тип", "seedtype": "Насіннєвий тип",
"seedtype_alert_content": "Спільний доступ до інших гаманців можливе лише за допомогою BIP39 Seedtype.",
"seedtype_alert_title": "Попередження насінника",
"seedtype_legacy": "Спадщина (25 слів)", "seedtype_legacy": "Спадщина (25 слів)",
"seedtype_polyseed": "Полісей (16 слів)", "seedtype_polyseed": "Полісей (16 слів)",
"select_backup_file": "Виберіть файл резервної копії", "select_backup_file": "Виберіть файл резервної копії",
@ -667,6 +671,7 @@
"setup_your_debit_card": "Налаштуйте свою дебетову картку", "setup_your_debit_card": "Налаштуйте свою дебетову картку",
"share": "Поділіться", "share": "Поділіться",
"share_address": "Поділитися адресою", "share_address": "Поділитися адресою",
"shared_seed_wallet_groups": "Спільні групи насіннєвих гаманців",
"show_details": "Показати деталі", "show_details": "Показати деталі",
"show_keys": "Показати мнемонічну фразу/ключі", "show_keys": "Показати мнемонічну фразу/ключі",
"show_market_place": "Відображати маркетплейс", "show_market_place": "Відображати маркетплейс",
@ -691,6 +696,7 @@
"silent_payments_scanned_tip": "Сканований на підказку! (${tip})", "silent_payments_scanned_tip": "Сканований на підказку! (${tip})",
"silent_payments_scanning": "Мовчазні платежі сканування", "silent_payments_scanning": "Мовчазні платежі сканування",
"silent_payments_settings": "Налаштування мовчазних платежів", "silent_payments_settings": "Налаштування мовчазних платежів",
"single_seed_wallets_group": "Поодинокі насінні гаманці",
"slidable": "Розсувний", "slidable": "Розсувний",
"sort_by": "Сортувати за", "sort_by": "Сортувати за",
"spend_key_private": "Приватний ключ витрати", "spend_key_private": "Приватний ключ витрати",
@ -850,8 +856,16 @@
"view_transaction_on": "View Transaction on ", "view_transaction_on": "View Transaction on ",
"voting_weight": "Вага голосування", "voting_weight": "Вага голосування",
"waitFewSecondForTxUpdate": "Будь ласка, зачекайте кілька секунд, поки транзакція відобразиться в історії транзакцій", "waitFewSecondForTxUpdate": "Будь ласка, зачекайте кілька секунд, поки транзакція відобразиться в історії транзакцій",
"wallet_group": "Група гаманців",
"wallet_group_description_four": "створити гаманець з абсолютно новим насінням.",
"wallet_group_description_one": "У гаманці тортів ви можете створити a",
"wallet_group_description_three": "Щоб побачити наявні гаманці та/або екран групи гаманців. Або вибрати",
"wallet_group_description_two": "Вибираючи існуючий гаманець, щоб поділитися насінням. Кожна група гаманця може містити один гаманець кожного типу валюти. \n\n Ви можете вибрати",
"wallet_group_empty_state_text_one": "Схоже, у вас немає сумісних груп гаманця !\n\n Торкніться",
"wallet_group_empty_state_text_two": "нижче, щоб зробити новий.",
"wallet_keys": "Мнемонічна фраза/ключі гаманця", "wallet_keys": "Мнемонічна фраза/ключі гаманця",
"wallet_list_create_new_wallet": "Створити новий гаманець", "wallet_list_create_new_wallet": "Створити новий гаманець",
"wallet_list_edit_group_name": "Назва групи редагування",
"wallet_list_edit_wallet": "Редагувати гаманець", "wallet_list_edit_wallet": "Редагувати гаманець",
"wallet_list_failed_to_load": "Помилка при завантаженні ${wallet_name} гаманця. ${error}", "wallet_list_failed_to_load": "Помилка при завантаженні ${wallet_name} гаманця. ${error}",
"wallet_list_failed_to_remove": "Помилка при видаленні ${wallet_name} гаманця. ${error}", "wallet_list_failed_to_remove": "Помилка при видаленні ${wallet_name} гаманця. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "ایک کا انتخاب کریں", "choose_one": "ایک کا انتخاب کریں",
"choose_relay": "۔ﮟﯾﺮﮐ ﺏﺎﺨﺘﻧﺍ ﺎﮐ ﮯﻠﯾﺭ ﮯﯿﻟ ﮯﮐ ﮯﻧﺮﮐ ﻝﺎﻤﻌﺘﺳﺍ ﻡﺮﮐ ﮦﺍﺮﺑ", "choose_relay": "۔ﮟﯾﺮﮐ ﺏﺎﺨﺘﻧﺍ ﺎﮐ ﮯﻠﯾﺭ ﮯﯿﻟ ﮯﮐ ﮯﻧﺮﮐ ﻝﺎﻤﻌﺘﺳﺍ ﻡﺮﮐ ﮦﺍﺮﺑ",
"choose_wallet_currency": "براہ کرم والیٹ کرنسی کا انتخاب کریں:", "choose_wallet_currency": "براہ کرم والیٹ کرنسی کا انتخاب کریں:",
"choose_wallet_group": "پرس گروپ کا انتخاب کریں",
"clear": "صاف", "clear": "صاف",
"clearnet_link": "کلیرنیٹ لنک", "clearnet_link": "کلیرنیٹ لنک",
"close": "بند کریں", "close": "بند کریں",
@ -176,6 +177,7 @@
"create_invoice": "انوائس بنائیں", "create_invoice": "انوائس بنائیں",
"create_new": "نیا والیٹ بنائیں", "create_new": "نیا والیٹ بنائیں",
"create_new_account": "نیا اکاؤنٹ بنانے", "create_new_account": "نیا اکاؤنٹ بنانے",
"create_new_seed": "نیا بیج بنائیں",
"creating_new_wallet": "نیا پرس بنانا", "creating_new_wallet": "نیا پرس بنانا",
"creating_new_wallet_error": "خرابی: ${description}", "creating_new_wallet_error": "خرابی: ${description}",
"creation_date": "بنانے کی تاریخ", "creation_date": "بنانے کی تاریخ",
@ -602,6 +604,8 @@
"seed_share": "بیج بانٹیں۔", "seed_share": "بیج بانٹیں۔",
"seed_title": "بیج", "seed_title": "بیج",
"seedtype": "سیڈ ٹائپ", "seedtype": "سیڈ ٹائپ",
"seedtype_alert_content": "دوسرے بٹوے کے ساتھ بیجوں کا اشتراک صرف BIP39 بیج ٹائپ کے ساتھ ہی ممکن ہے۔",
"seedtype_alert_title": "سیڈ ٹائپ الرٹ",
"seedtype_legacy": "میراث (25 الفاظ)", "seedtype_legacy": "میراث (25 الفاظ)",
"seedtype_polyseed": "پالیسیڈ (16 الفاظ)", "seedtype_polyseed": "پالیسیڈ (16 الفاظ)",
"select_backup_file": "بیک اپ فائل کو منتخب کریں۔", "select_backup_file": "بیک اپ فائل کو منتخب کریں۔",
@ -668,6 +672,7 @@
"setup_your_debit_card": "اپنا ڈیبٹ کارڈ ترتیب دیں۔", "setup_your_debit_card": "اپنا ڈیبٹ کارڈ ترتیب دیں۔",
"share": "بانٹیں", "share": "بانٹیں",
"share_address": "پتہ شیئر کریں۔", "share_address": "پتہ شیئر کریں۔",
"shared_seed_wallet_groups": "مشترکہ بیج پرس گروپ",
"show_details": "تفصیلات دکھائیں", "show_details": "تفصیلات دکھائیں",
"show_keys": "بیج / چابیاں دکھائیں۔", "show_keys": "بیج / چابیاں دکھائیں۔",
"show_market_place": "بازار دکھائیں۔", "show_market_place": "بازار دکھائیں۔",
@ -692,6 +697,7 @@
"silent_payments_scanned_tip": "نوکنے کے لئے اسکین! (${tip})", "silent_payments_scanned_tip": "نوکنے کے لئے اسکین! (${tip})",
"silent_payments_scanning": "خاموش ادائیگی اسکیننگ", "silent_payments_scanning": "خاموش ادائیگی اسکیننگ",
"silent_payments_settings": "خاموش ادائیگی کی ترتیبات", "silent_payments_settings": "خاموش ادائیگی کی ترتیبات",
"single_seed_wallets_group": "سنگل بیج کے بٹوے",
"slidable": "سلائیڈ ایبل", "slidable": "سلائیڈ ایبل",
"sort_by": "ترتیب دیں", "sort_by": "ترتیب دیں",
"spend_key_private": "خرچ کی کلید (نجی)", "spend_key_private": "خرچ کی کلید (نجی)",
@ -851,8 +857,16 @@
"view_transaction_on": "لین دین دیکھیں آن", "view_transaction_on": "لین دین دیکھیں آن",
"voting_weight": "ووٹ کا وزن", "voting_weight": "ووٹ کا وزن",
"waitFewSecondForTxUpdate": "۔ﮟﯾﺮﮐ ﺭﺎﻈﺘﻧﺍ ﺎﮐ ﮉﻨﮑﯿﺳ ﺪﻨﭼ ﻡﺮﮐ ﮦﺍﺮﺑ ﮯﯿﻟ ﮯﮐ ﮯﻧﺮﮐ ﯽﺳﺎﮑﻋ ﯽﮐ ﻦﯾﺩ ﻦﯿﻟ ﮟﯿﻣ ﺦﯾﺭﺎﺗ ﯽﮐ ﻦ", "waitFewSecondForTxUpdate": "۔ﮟﯾﺮﮐ ﺭﺎﻈﺘﻧﺍ ﺎﮐ ﮉﻨﮑﯿﺳ ﺪﻨﭼ ﻡﺮﮐ ﮦﺍﺮﺑ ﮯﯿﻟ ﮯﮐ ﮯﻧﺮﮐ ﯽﺳﺎﮑﻋ ﯽﮐ ﻦﯾﺩ ﻦﯿﻟ ﮟﯿﻣ ﺦﯾﺭﺎﺗ ﯽﮐ ﻦ",
"wallet_group": "پرس گروپ",
"wallet_group_description_four": "مکمل طور پر نئے بیج کے ساتھ پرس بنانے کے ل.",
"wallet_group_description_one": "کیک پرس میں ، آپ بنا سکتے ہیں",
"wallet_group_description_three": "دستیاب بٹوے اور/یا پرس گروپوں کی اسکرین کو دیکھنے کے لئے۔ یا منتخب کریں",
"wallet_group_description_two": "بیج کے ساتھ بانٹنے کے لئے موجودہ پرس کا انتخاب کرکے۔ ہر بٹوے گروپ میں ہر کرنسی کی قسم کا ایک بٹوے شامل ہوسکتا ہے۔ \n\n آپ منتخب کرسکتے ہیں",
"wallet_group_empty_state_text_one": "ایسا لگتا ہے کہ آپ کے پاس کوئی مطابقت پذیر والیٹ گروپس نہیں ہیں !\n\n نل",
"wallet_group_empty_state_text_two": "ایک نیا بنانے کے لئے ذیل میں.",
"wallet_keys": "بٹوے کے بیج / چابیاں", "wallet_keys": "بٹوے کے بیج / چابیاں",
"wallet_list_create_new_wallet": "نیا والیٹ بنائیں", "wallet_list_create_new_wallet": "نیا والیٹ بنائیں",
"wallet_list_edit_group_name": "گروپ کے نام میں ترمیم کریں",
"wallet_list_edit_wallet": "بٹوے میں ترمیم کریں۔", "wallet_list_edit_wallet": "بٹوے میں ترمیم کریں۔",
"wallet_list_failed_to_load": "${wallet_name} والیٹ لوڈ کرنے میں ناکام۔ ${error}", "wallet_list_failed_to_load": "${wallet_name} والیٹ لوڈ کرنے میں ناکام۔ ${error}",
"wallet_list_failed_to_remove": "${wallet_name} والیٹ کو ہٹانے میں ناکام۔ ${error}", "wallet_list_failed_to_remove": "${wallet_name} والیٹ کو ہٹانے میں ناکام۔ ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "Chọn một", "choose_one": "Chọn một",
"choose_relay": "Vui lòng chọn một relay để sử dụng", "choose_relay": "Vui lòng chọn một relay để sử dụng",
"choose_wallet_currency": "Vui lòng chọn tiền tệ của ví:", "choose_wallet_currency": "Vui lòng chọn tiền tệ của ví:",
"choose_wallet_group": "Chọn nhóm ví",
"clear": "Xóa", "clear": "Xóa",
"clearnet_link": "Liên kết Clearnet", "clearnet_link": "Liên kết Clearnet",
"close": "Đóng", "close": "Đóng",
@ -175,6 +176,7 @@
"create_invoice": "Tạo hóa đơn", "create_invoice": "Tạo hóa đơn",
"create_new": "Tạo Ví Mới", "create_new": "Tạo Ví Mới",
"create_new_account": "Tạo tài khoản mới", "create_new_account": "Tạo tài khoản mới",
"create_new_seed": "Tạo hạt giống mới",
"creating_new_wallet": "Đang tạo ví mới", "creating_new_wallet": "Đang tạo ví mới",
"creating_new_wallet_error": "Lỗi: ${description}", "creating_new_wallet_error": "Lỗi: ${description}",
"creation_date": "Ngày Tạo", "creation_date": "Ngày Tạo",
@ -844,6 +846,12 @@
"view_transaction_on": "Xem giao dịch trên", "view_transaction_on": "Xem giao dịch trên",
"voting_weight": "Trọng số bỏ phiếu", "voting_weight": "Trọng số bỏ phiếu",
"waitFewSecondForTxUpdate": "Vui lòng đợi vài giây để giao dịch được phản ánh trong lịch sử giao dịch", "waitFewSecondForTxUpdate": "Vui lòng đợi vài giây để giao dịch được phản ánh trong lịch sử giao dịch",
"wallet_group_description_four": "Để tạo ra một ví với một hạt giống hoàn toàn mới.",
"wallet_group_description_one": "Trong ví bánh, bạn có thể tạo",
"wallet_group_description_three": "Để xem ví trên ví và/hoặc màn hình nhóm ví. Hoặc chọn",
"wallet_group_description_two": "Bằng cách chọn một ví hiện có để chia sẻ một hạt giống với. Mỗi nhóm ví có thể chứa một ví của mỗi loại tiền tệ. \n\n Bạn có thể chọn",
"wallet_group_empty_state_text_one": "Có vẻ như bạn không có bất kỳ nhóm ví tương thích nào !\n\n Tap",
"wallet_group_empty_state_text_two": "Dưới đây để làm một cái mới.",
"wallet_keys": "Hạt giống/khóa ví", "wallet_keys": "Hạt giống/khóa ví",
"wallet_list_create_new_wallet": "Tạo ví mới", "wallet_list_create_new_wallet": "Tạo ví mới",
"wallet_list_edit_wallet": "Chỉnh sửa ví", "wallet_list_edit_wallet": "Chỉnh sửa ví",

View file

@ -130,6 +130,7 @@
"choose_one": "Ẹ yàn kan", "choose_one": "Ẹ yàn kan",
"choose_relay": "Jọwọ yan yii lati lo", "choose_relay": "Jọwọ yan yii lati lo",
"choose_wallet_currency": "Ẹ jọ̀wọ́, yàn irú owó ti àpamọ́wọ́ yín:", "choose_wallet_currency": "Ẹ jọ̀wọ́, yàn irú owó ti àpamọ́wọ́ yín:",
"choose_wallet_group": "Yan ẹgbẹ ogiri",
"clear": "Pa gbogbo nǹkan", "clear": "Pa gbogbo nǹkan",
"clearnet_link": "Kọja ilọ oke", "clearnet_link": "Kọja ilọ oke",
"close": "sunmo", "close": "sunmo",
@ -176,6 +177,7 @@
"create_invoice": "Ṣe iwe iwe", "create_invoice": "Ṣe iwe iwe",
"create_new": "Dá àpamọ́wọ́ tuntun", "create_new": "Dá àpamọ́wọ́ tuntun",
"create_new_account": "Dá àkáǹtì títun", "create_new_account": "Dá àkáǹtì títun",
"create_new_seed": "Ṣẹda irugbin tuntun",
"creating_new_wallet": "Ń dá àpamọ́wọ́ títun", "creating_new_wallet": "Ń dá àpamọ́wọ́ títun",
"creating_new_wallet_error": "Àṣìṣe: ${description}", "creating_new_wallet_error": "Àṣìṣe: ${description}",
"creation_date": "Ọjọ ẹda", "creation_date": "Ọjọ ẹda",
@ -601,6 +603,8 @@
"seed_share": "Pín hóró", "seed_share": "Pín hóró",
"seed_title": "Hóró", "seed_title": "Hóró",
"seedtype": "Irugbin-seetypu", "seedtype": "Irugbin-seetypu",
"seedtype_alert_content": "Pinpin awọn irugbin pẹlu awọn gedo miiran ṣee ṣe pẹlu Bip39 irugbin.",
"seedtype_alert_title": "Ṣajọpọ Seeytype",
"seedtype_legacy": "Legacy (awọn ọrọ 25)", "seedtype_legacy": "Legacy (awọn ọrọ 25)",
"seedtype_polyseed": "Polyseed (awọn ọrọ 16)", "seedtype_polyseed": "Polyseed (awọn ọrọ 16)",
"select_backup_file": "Select backup file", "select_backup_file": "Select backup file",
@ -667,6 +671,7 @@
"setup_your_debit_card": "Dá àwọn káàdì ìrajà yín", "setup_your_debit_card": "Dá àwọn káàdì ìrajà yín",
"share": "Pinpin", "share": "Pinpin",
"share_address": "Pín àdírẹ́sì", "share_address": "Pín àdírẹ́sì",
"shared_seed_wallet_groups": "Awọn ẹgbẹ ti a pin irugbin",
"show_details": "Fi ìsọfúnni kékeré hàn", "show_details": "Fi ìsọfúnni kékeré hàn",
"show_keys": "Wo hóró / àwọn kọ́kọ́rọ́", "show_keys": "Wo hóró / àwọn kọ́kọ́rọ́",
"show_market_place": "Wa Sopọ Pataki", "show_market_place": "Wa Sopọ Pataki",
@ -691,6 +696,7 @@
"silent_payments_scanned_tip": "Ṣayẹwo si sample! (${tip})", "silent_payments_scanned_tip": "Ṣayẹwo si sample! (${tip})",
"silent_payments_scanning": "Awọn sisanwo ipalọlọ", "silent_payments_scanning": "Awọn sisanwo ipalọlọ",
"silent_payments_settings": "Awọn eto isanwo ti o dakẹ", "silent_payments_settings": "Awọn eto isanwo ti o dakẹ",
"single_seed_wallets_group": "Awọn Wowei Awọn gige",
"slidable": "Slidable", "slidable": "Slidable",
"sort_by": "Sa pelu", "sort_by": "Sa pelu",
"spend_key_private": "Kọ́kọ́rọ́ sísan (àdáni)", "spend_key_private": "Kọ́kọ́rọ́ sísan (àdáni)",
@ -850,8 +856,16 @@
"view_transaction_on": "Wo pàṣípààrọ̀ lórí ", "view_transaction_on": "Wo pàṣípààrọ̀ lórí ",
"voting_weight": "Idibo iwuwo", "voting_weight": "Idibo iwuwo",
"waitFewSecondForTxUpdate": "Fi inurere duro fun awọn iṣeju diẹ fun idunadura lati ṣe afihan ninu itan-akọọlẹ iṣowo", "waitFewSecondForTxUpdate": "Fi inurere duro fun awọn iṣeju diẹ fun idunadura lati ṣe afihan ninu itan-akọọlẹ iṣowo",
"wallet_group": "Ẹgbẹ apamọwọ",
"wallet_group_description_four": "Lati ṣẹda apamọwọ kan pẹlu irugbin tuntun tuntun.",
"wallet_group_description_one": "Ni apamọwọ akara oyinbo, o le ṣẹda a",
"wallet_group_description_three": "Lati wo awọn Woleti ti o wa ati / tabi Iboju Wallt. Tabi yan",
"wallet_group_description_two": "nipa yiyan apamọwọ ti o wa tẹlẹ lati pin irugbin kan pẹlu. Ẹgbẹ apamọwọ kọọkan le ni apamọwọ kan ti iru owo kọọkan. \n\n O le yan",
"wallet_group_empty_state_text_one": "O dabi pe o ko ni eyikeyi awọn ẹgbẹ ti o ni ibamu!\n\ntẹ ni kia kia",
"wallet_group_empty_state_text_two": "ni isalẹ lati ṣe ọkan titun.",
"wallet_keys": "Hóró/kọ́kọ́rọ́ àpamọ́wọ́", "wallet_keys": "Hóró/kọ́kọ́rọ́ àpamọ́wọ́",
"wallet_list_create_new_wallet": "Ṣe àpamọ́wọ́ títun", "wallet_list_create_new_wallet": "Ṣe àpamọ́wọ́ títun",
"wallet_list_edit_group_name": "Ṣatunṣe Orukọ Ẹgbẹ",
"wallet_list_edit_wallet": "Ṣatunkọ apamọwọ", "wallet_list_edit_wallet": "Ṣatunkọ apamọwọ",
"wallet_list_failed_to_load": "Ti kùnà ṣí́ àpamọ́wọ́ ${wallet_name}. ${error}", "wallet_list_failed_to_load": "Ti kùnà ṣí́ àpamọ́wọ́ ${wallet_name}. ${error}",
"wallet_list_failed_to_remove": "Ti kùnà yọ ${wallet_name} àpamọ́wọ́ kúrò. ${error}", "wallet_list_failed_to_remove": "Ti kùnà yọ ${wallet_name} àpamọ́wọ́ kúrò. ${error}",

View file

@ -130,6 +130,7 @@
"choose_one": "选一个", "choose_one": "选一个",
"choose_relay": "请选择要使用的继电器", "choose_relay": "请选择要使用的继电器",
"choose_wallet_currency": "请选择钱包货币:", "choose_wallet_currency": "请选择钱包货币:",
"choose_wallet_group": "选择钱包组",
"clear": "清空", "clear": "清空",
"clearnet_link": "明网链接", "clearnet_link": "明网链接",
"close": "关闭", "close": "关闭",
@ -176,6 +177,7 @@
"create_invoice": "创建发票", "create_invoice": "创建发票",
"create_new": "创建新钱包", "create_new": "创建新钱包",
"create_new_account": "建立新账户", "create_new_account": "建立新账户",
"create_new_seed": "创建新种子",
"creating_new_wallet": "创建新钱包", "creating_new_wallet": "创建新钱包",
"creating_new_wallet_error": "错误: ${description}", "creating_new_wallet_error": "错误: ${description}",
"creation_date": "创建日期", "creation_date": "创建日期",
@ -600,6 +602,8 @@
"seed_share": "分享种子", "seed_share": "分享种子",
"seed_title": "种子", "seed_title": "种子",
"seedtype": "籽粒", "seedtype": "籽粒",
"seedtype_alert_content": "只有BIP39籽粒可以与其他钱包共享种子。",
"seedtype_alert_title": "籽粒警报",
"seedtype_legacy": "遗产25个单词", "seedtype_legacy": "遗产25个单词",
"seedtype_polyseed": "多种物品16个单词", "seedtype_polyseed": "多种物品16个单词",
"select_backup_file": "选择备份文件", "select_backup_file": "选择备份文件",
@ -666,6 +670,7 @@
"setup_your_debit_card": "设置你的借记卡", "setup_your_debit_card": "设置你的借记卡",
"share": "分享", "share": "分享",
"share_address": "分享地址", "share_address": "分享地址",
"shared_seed_wallet_groups": "共享种子钱包组",
"show_details": "显示详细信息", "show_details": "显示详细信息",
"show_keys": "显示种子/密钥", "show_keys": "显示种子/密钥",
"show_market_place": "显示市场", "show_market_place": "显示市场",
@ -690,6 +695,7 @@
"silent_payments_scanned_tip": "扫描到小费! (${tip})", "silent_payments_scanned_tip": "扫描到小费! (${tip})",
"silent_payments_scanning": "无声付款扫描", "silent_payments_scanning": "无声付款扫描",
"silent_payments_settings": "无声付款设置", "silent_payments_settings": "无声付款设置",
"single_seed_wallets_group": "单个种子钱包",
"slidable": "可滑动", "slidable": "可滑动",
"sort_by": "排序方式", "sort_by": "排序方式",
"spend_key_private": "Spend 密钥 (私钥)", "spend_key_private": "Spend 密钥 (私钥)",
@ -849,8 +855,16 @@
"view_transaction_on": "View Transaction on ", "view_transaction_on": "View Transaction on ",
"voting_weight": "投票权重", "voting_weight": "投票权重",
"waitFewSecondForTxUpdate": "请等待几秒钟,交易才会反映在交易历史记录中", "waitFewSecondForTxUpdate": "请等待几秒钟,交易才会反映在交易历史记录中",
"wallet_group": "钱包组",
"wallet_group_description_four": "创建一个带有全新种子的钱包。",
"wallet_group_description_one": "在蛋糕钱包中,您可以创建一个",
"wallet_group_description_three": "查看可用的钱包和/或钱包组屏幕。或选择",
"wallet_group_description_two": "通过选择现有的钱包与种子共享。每个钱包组都可以包含每种货币类型的单个钱包。\n\n您可以选择",
"wallet_group_empty_state_text_one": "看起来您没有任何兼容的钱包组!\n\n tap",
"wallet_group_empty_state_text_two": "下面是一个新的。",
"wallet_keys": "钱包种子/密钥", "wallet_keys": "钱包种子/密钥",
"wallet_list_create_new_wallet": "创建新钱包", "wallet_list_create_new_wallet": "创建新钱包",
"wallet_list_edit_group_name": "编辑组名称",
"wallet_list_edit_wallet": "编辑钱包", "wallet_list_edit_wallet": "编辑钱包",
"wallet_list_failed_to_load": "加载失败 ${wallet_name} 钱包. ${error}", "wallet_list_failed_to_load": "加载失败 ${wallet_name} 钱包. ${error}",
"wallet_list_failed_to_remove": "删除失败 ${wallet_name} 钱包. ${error}", "wallet_list_failed_to_remove": "删除失败 ${wallet_name} 钱包. ${error}",

View file

@ -151,7 +151,7 @@ abstract class Bitcoin {
String? passphrase, String? passphrase,
}); });
WalletCredentials createBitcoinRestoreWalletFromWIFCredentials({required String name, required String password, required String wif, WalletInfo? walletInfo}); WalletCredentials createBitcoinRestoreWalletFromWIFCredentials({required String name, required String password, required String wif, WalletInfo? walletInfo});
WalletCredentials createBitcoinNewWalletCredentials({required String name, WalletInfo? walletInfo, String? password, String? passphrase}); WalletCredentials createBitcoinNewWalletCredentials({required String name, WalletInfo? walletInfo, String? password, String? passphrase, String? mnemonic, String? parentAddress});
WalletCredentials createBitcoinHardwareWalletCredentials({required String name, required HardwareAccountData accountData, WalletInfo? walletInfo}); WalletCredentials createBitcoinHardwareWalletCredentials({required String name, required HardwareAccountData accountData, WalletInfo? walletInfo});
List<String> getWordList(); List<String> getWordList();
Map<String, String> getWalletKeys(Object wallet); Map<String, String> getWalletKeys(Object wallet);
@ -558,7 +558,7 @@ abstract class Wownero {
required String language, required String language,
required int height}); required int height});
WalletCredentials createWowneroRestoreWalletFromSeedCredentials({required String name, required String password, required int height, required String mnemonic}); WalletCredentials createWowneroRestoreWalletFromSeedCredentials({required String name, required String password, required int height, required String mnemonic});
WalletCredentials createWowneroNewWalletCredentials({required String name, required String language, required bool isPolyseed, String password}); WalletCredentials createWowneroNewWalletCredentials({required String name, required String language, required bool isPolyseed, String? password});
Map<String, String> getKeys(Object wallet); Map<String, String> getKeys(Object wallet);
Object createWowneroTransactionCreationCredentials({required List<Output> outputs, required TransactionPriority priority}); Object createWowneroTransactionCreationCredentials({required List<Output> outputs, required TransactionPriority priority});
Object createWowneroTransactionCreationCredentialsRaw({required List<OutputInfo> outputs, required TransactionPriority priority}); Object createWowneroTransactionCreationCredentialsRaw({required List<OutputInfo> outputs, required TransactionPriority priority});
@ -833,7 +833,7 @@ import 'package:eth_sig_util/util/utils.dart';
abstract class Ethereum { abstract class Ethereum {
List<String> getEthereumWordList(String language); List<String> getEthereumWordList(String language);
WalletService createEthereumWalletService(Box<WalletInfo> walletInfoSource, bool isDirect); WalletService createEthereumWalletService(Box<WalletInfo> walletInfoSource, bool isDirect);
WalletCredentials createEthereumNewWalletCredentials({required String name, WalletInfo? walletInfo, String? password}); WalletCredentials createEthereumNewWalletCredentials({required String name, WalletInfo? walletInfo, String? password, String? mnemonic, String? parentAddress});
WalletCredentials createEthereumRestoreWalletFromSeedCredentials({required String name, required String mnemonic, required String password}); WalletCredentials createEthereumRestoreWalletFromSeedCredentials({required String name, required String mnemonic, required String password});
WalletCredentials createEthereumRestoreWalletFromPrivateKey({required String name, required String privateKey, required String password}); WalletCredentials createEthereumRestoreWalletFromPrivateKey({required String name, required String privateKey, required String password});
WalletCredentials createEthereumHardwareWalletCredentials({required String name, required HardwareAccountData hwAccountData, WalletInfo? walletInfo}); WalletCredentials createEthereumHardwareWalletCredentials({required String name, required HardwareAccountData hwAccountData, WalletInfo? walletInfo});
@ -937,7 +937,7 @@ import 'package:eth_sig_util/util/utils.dart';
abstract class Polygon { abstract class Polygon {
List<String> getPolygonWordList(String language); List<String> getPolygonWordList(String language);
WalletService createPolygonWalletService(Box<WalletInfo> walletInfoSource, bool isDirect); WalletService createPolygonWalletService(Box<WalletInfo> walletInfoSource, bool isDirect);
WalletCredentials createPolygonNewWalletCredentials({required String name, WalletInfo? walletInfo, String? password}); WalletCredentials createPolygonNewWalletCredentials({required String name, WalletInfo? walletInfo, String? password, String? mnemonic, String? parentAddress});
WalletCredentials createPolygonRestoreWalletFromSeedCredentials({required String name, required String mnemonic, required String password}); WalletCredentials createPolygonRestoreWalletFromSeedCredentials({required String name, required String mnemonic, required String password});
WalletCredentials createPolygonRestoreWalletFromPrivateKey({required String name, required String privateKey, required String password}); WalletCredentials createPolygonRestoreWalletFromPrivateKey({required String name, required String privateKey, required String password});
WalletCredentials createPolygonHardwareWalletCredentials({required String name, required HardwareAccountData hwAccountData, WalletInfo? walletInfo}); WalletCredentials createPolygonHardwareWalletCredentials({required String name, required HardwareAccountData hwAccountData, WalletInfo? walletInfo});
@ -1024,7 +1024,7 @@ abstract class BitcoinCash {
Box<WalletInfo> walletInfoSource, Box<UnspentCoinsInfo> unspentCoinSource, bool isDirect); Box<WalletInfo> walletInfoSource, Box<UnspentCoinsInfo> unspentCoinSource, bool isDirect);
WalletCredentials createBitcoinCashNewWalletCredentials( WalletCredentials createBitcoinCashNewWalletCredentials(
{required String name, WalletInfo? walletInfo, String? password, String? passphrase}); {required String name, WalletInfo? walletInfo, String? password, String? passphrase, String? mnemonic, String? parentAddress});
WalletCredentials createBitcoinCashRestoreWalletFromSeedCredentials( WalletCredentials createBitcoinCashRestoreWalletFromSeedCredentials(
{required String name, required String mnemonic, required String password, String? passphrase}); {required String name, required String mnemonic, required String password, String? passphrase});
@ -1106,6 +1106,9 @@ abstract class Nano {
WalletCredentials createNanoNewWalletCredentials({ WalletCredentials createNanoNewWalletCredentials({
required String name, required String name,
String? password, String? password,
String? mnemonic,
String? parentAddress,
WalletInfo? walletInfo,
}); });
WalletCredentials createNanoRestoreWalletFromSeedCredentials({ WalletCredentials createNanoRestoreWalletFromSeedCredentials({
@ -1221,7 +1224,7 @@ abstract class Solana {
List<String> getSolanaWordList(String language); List<String> getSolanaWordList(String language);
WalletService createSolanaWalletService(Box<WalletInfo> walletInfoSource, bool isDirect); WalletService createSolanaWalletService(Box<WalletInfo> walletInfoSource, bool isDirect);
WalletCredentials createSolanaNewWalletCredentials( WalletCredentials createSolanaNewWalletCredentials(
{required String name, WalletInfo? walletInfo, String? password}); {required String name, WalletInfo? walletInfo, String? password, String? mnemonic, String? parentAddress,});
WalletCredentials createSolanaRestoreWalletFromSeedCredentials( WalletCredentials createSolanaRestoreWalletFromSeedCredentials(
{required String name, required String mnemonic, required String password}); {required String name, required String mnemonic, required String password});
WalletCredentials createSolanaRestoreWalletFromPrivateKey( WalletCredentials createSolanaRestoreWalletFromPrivateKey(
@ -1307,7 +1310,8 @@ import 'package:cw_tron/tron_wallet_service.dart';
abstract class Tron { abstract class Tron {
List<String> getTronWordList(String language); List<String> getTronWordList(String language);
WalletService createTronWalletService(Box<WalletInfo> walletInfoSource, bool isDirect); WalletService createTronWalletService(Box<WalletInfo> walletInfoSource, bool isDirect);
WalletCredentials createTronNewWalletCredentials({required String name, WalletInfo? walletInfo, String? password}); WalletCredentials createTronNewWalletCredentials({required String name, WalletInfo? walletInfo, String? password, String? mnemonic,
String? parentAddress});
WalletCredentials createTronRestoreWalletFromSeedCredentials({required String name, required String mnemonic, required String password}); WalletCredentials createTronRestoreWalletFromSeedCredentials({required String name, required String mnemonic, required String password});
WalletCredentials createTronRestoreWalletFromPrivateKey({required String name, required String privateKey, required String password}); WalletCredentials createTronRestoreWalletFromPrivateKey({required String name, required String privateKey, required String password});
String getAddress(WalletBase wallet); String getAddress(WalletBase wallet);