update wallet restore page to be less confusing for nano users (#1186)

* update wallet restore page to be less confusing for nano users

* update translations

* only include private key if seed phrase is null

* restore fixes

* fix default derivation being wrong on restore

* fix default nano derivationType & qr code parameters

* update language on nano restore (hex form)

* support hex seed from qr restore
This commit is contained in:
Matthew Fosse 2023-11-24 18:35:00 -05:00 committed by GitHub
parent fa25a4b224
commit eeb9976d09
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
32 changed files with 125 additions and 81 deletions

View file

@ -44,6 +44,8 @@ abstract class WalletBase<BalanceType extends Balance, HistoryType extends Trans
String? get privateKey => null;
String? get hexSeed => null;
Object get keys;
WalletAddresses get walletAddresses;

View file

@ -58,13 +58,13 @@ abstract class NanoWalletBase
}
}
final String _mnemonic;
String _mnemonic;
final String _password;
final DerivationType _derivationType;
DerivationType _derivationType;
String? _privateKey;
String? _publicAddress;
String? _seedKey;
String? _hexSeed;
String? _representativeAddress;
Timer? _receiveTimer;
@ -85,22 +85,26 @@ abstract class NanoWalletBase
// initialize the different forms of private / public key we'll need:
Future<void> init() async {
if (_derivationType == DerivationType.unknown) {
_derivationType = DerivationType.nano;
}
final String type = (_derivationType == DerivationType.nano) ? "standard" : "hd";
// our "mnemonic" is actually a seedkey:
// our "mnemonic" is actually a hex form seed:
if (!_mnemonic.contains(' ')) {
_seedKey = _mnemonic;
_hexSeed = _mnemonic;
_mnemonic = "";
}
if (_seedKey == null) {
if (_hexSeed == null) {
if (_derivationType == DerivationType.nano) {
_seedKey = bip39.mnemonicToEntropy(_mnemonic).toUpperCase();
_hexSeed = bip39.mnemonicToEntropy(_mnemonic).toUpperCase();
} else {
_seedKey = await NanoUtil.hdMnemonicListToSeed(_mnemonic.split(' '));
_hexSeed = await NanoUtil.hdMnemonicListToSeed(_mnemonic.split(' '));
}
}
_privateKey = await NanoUtil.uniSeedToPrivate(_seedKey!, 0, type);
_publicAddress = await NanoUtil.uniSeedToAddress(_seedKey!, 0, type);
_privateKey = await NanoUtil.uniSeedToPrivate(_hexSeed!, 0, type);
_publicAddress = await NanoUtil.uniSeedToAddress(_hexSeed!, 0, type);
this.walletInfo.address = _publicAddress!;
await walletAddresses.init();
@ -275,11 +279,11 @@ abstract class NanoWalletBase
@override
NanoWalletKeys get keys {
return NanoWalletKeys(seedKey: _seedKey!);
return NanoWalletKeys(seedKey: _hexSeed!);
}
@override
String? get privateKey => _seedKey!;
String? get privateKey => _privateKey!;
@override
Future<void> rescan({required int height}) async {
@ -297,7 +301,9 @@ abstract class NanoWalletBase
}
@override
String get seed => _mnemonic;
String? get seed => _mnemonic.isNotEmpty ? _mnemonic : null;
String get hexSeed => _hexSeed!;
String get representative => _representativeAddress ?? "";
@ -330,7 +336,7 @@ abstract class NanoWalletBase
Future<String> makePath() async => pathForWallet(name: walletInfo.name, type: walletInfo.type);
String toJSON() => json.encode({
'seedKey': _seedKey,
'seedKey': _hexSeed,
'mnemonic': _mnemonic,
'currentBalance': balance[currency]?.currentBalance.toString() ?? "0",
'receivableBalance': balance[currency]?.receivableBalance.toString() ?? "0",
@ -351,9 +357,9 @@ abstract class NanoWalletBase
formattedCurrentBalance: data['currentBalance'] as String? ?? "0",
formattedReceivableBalance: data['receivableBalance'] as String? ?? "0");
DerivationType derivationType = DerivationType.bip39;
if (data['derivationType'] == "DerivationType.nano") {
derivationType = DerivationType.nano;
DerivationType derivationType = DerivationType.nano;
if (data['derivationType'] == "DerivationType.bip39") {
derivationType = DerivationType.bip39;
}
walletInfo.derivationType = derivationType;
@ -390,9 +396,9 @@ abstract class NanoWalletBase
Future<void> regenerateAddress() async {
final String type = (_derivationType == DerivationType.nano) ? "standard" : "hd";
_privateKey =
await NanoUtil.uniSeedToPrivate(_seedKey!, this.walletAddresses.account!.id, type);
await NanoUtil.uniSeedToPrivate(_hexSeed!, this.walletAddresses.account!.id, type);
_publicAddress =
await NanoUtil.uniSeedToAddress(_seedKey!, this.walletAddresses.account!.id, type);
await NanoUtil.uniSeedToAddress(_hexSeed!, this.walletAddresses.account!.id, type);
this.walletInfo.address = _publicAddress!;
this.walletAddresses.address = _publicAddress!;

View file

@ -133,7 +133,7 @@ class WalletRestoreFromKeysFromState extends State<WalletRestoreFromKeysFrom> {
widget.walletRestoreViewModel.type == WalletType.banano;
return AddressTextField(
controller: privateKeyController,
placeholder: nanoBased ? S.of(context).seed_key : S.of(context).private_key,
placeholder: nanoBased ? S.of(context).seed_hex_form : S.of(context).private_key,
options: [AddressTextFieldOption.paste],
buttonColor: Theme.of(context).hintColor,
onPushPasteButton: (_) {

View file

@ -45,7 +45,7 @@ class RestoredWallet {
factory RestoredWallet.fromSeed(Map<String, dynamic> json) {
final height = json['height'] as String?;
final mnemonic_seed = json['mnemonic_seed'] as String?;
final seed = json['seed'] as String?;
final seed = json['seed'] as String? ?? json['hexSeed'] as String?;
return RestoredWallet(
restoreMode: json['mode'] as WalletRestoreMode,
type: json['type'] as WalletType,

View file

@ -151,6 +151,14 @@ class WalletRestoreFromQRCode {
return WalletRestoreMode.keys;
}
if ((type == WalletType.nano || type == WalletType.banano) && credentials.containsKey('hexSeed')) {
final hexSeed = credentials['hexSeed'] as String;
if (hexSeed.isEmpty) {
throw Exception('Unexpected restore mode: hexSeed');
}
return WalletRestoreMode.seed;
}
throw Exception('Unexpected restore mode: restore params are invalid');
}
}

View file

@ -107,19 +107,18 @@ abstract class WalletKeysViewModelBase with Store {
]);
}
if (_appStore.wallet!.type == WalletType.nano || _appStore.wallet!.type == WalletType.banano) {
bool nanoBased =
_appStore.wallet!.type == WalletType.nano || _appStore.wallet!.type == WalletType.banano;
// we don't necessarily have the seed phrase for nano / banano:
if (_appStore.wallet!.seed != null) {
items.addAll([
StandartListItem(title: S.current.wallet_seed, value: _appStore.wallet!.seed!),
]);
}
// we always have the hex version of the seed:
if (nanoBased) {
// we always have the hex version of the seed and private key:
items.addAll([
if (_appStore.wallet!.seed != null)
StandartListItem(title: S.current.wallet_seed, value: _appStore.wallet!.seed!),
if (_appStore.wallet!.hexSeed != null)
StandartListItem(title: S.current.seed_hex_form, value: _appStore.wallet!.hexSeed!),
if (_appStore.wallet!.privateKey != null)
StandartListItem(title: S.current.spend_key_private, value: _appStore.wallet!.privateKey!),
StandartListItem(title: S.current.private_key, value: _appStore.wallet!.privateKey!),
]);
}
}
@ -172,7 +171,10 @@ abstract class WalletKeysViewModelBase with Store {
final restoreHeightResult = await restoreHeight;
return {
if (_appStore.wallet!.seed != null) 'seed': _appStore.wallet!.seed!,
if (_appStore.wallet!.privateKey != null) 'private_key': _appStore.wallet!.privateKey!,
if (_appStore.wallet!.seed == null && _appStore.wallet!.hexSeed != null)
'hexSeed': _appStore.wallet!.hexSeed!,
if (_appStore.wallet!.seed == null && _appStore.wallet!.privateKey != null)
'private_key': _appStore.wallet!.privateKey!,
if (restoreHeightResult != null) ...{'height': restoreHeightResult}
};
}

View file

@ -738,5 +738,6 @@
"unavailable_balance": "ﺮﻓﻮﺘﻣ ﺮﻴﻏ ﺪﻴﺻﺭ",
"unavailable_balance_description": ".ﺎﻫﺪﻴﻤﺠﺗ ءﺎﻐﻟﺇ ﺭﺮﻘﺗ ﻰﺘﺣ ﺕﻼﻣﺎﻌﻤﻠﻟ ﻝﻮﺻﻮﻠﻟ ﺔﻠﺑﺎﻗ ﺮﻴﻏ ﺓﺪﻤﺠﻤﻟﺍ ﺓﺪﺻﺭﻷﺍ ﻞﻈﺗ ﺎﻤﻨﻴﺑ ،ﺎﻬﺑ ﺔﺻﺎﺨﻟﺍ ﺕﻼﻣﺎﻌﻤﻟﺍ ﻝﺎﻤﺘﻛﺍ ﺩﺮﺠﻤﺑ ﺔﺣﺎﺘﻣ ﺔﻠﻔﻘﻤﻟﺍ ﺓﺪﺻﺭﻷﺍ ﺢﺒﺼﺘﺳ .ﻚﺑ ﺔﺻﺎﺨﻟﺍ ﺕﻼﻤﻌﻟﺍ ﻲﻓ ﻢﻜﺤﺘﻟﺍ ﺕﺍﺩﺍﺪﻋﺇ ﻲﻓ ﻂﺸﻧ ﻞﻜﺸﺑ ﺎﻫﺪﻴﻤﺠﺘﺑ ﺖﻤﻗ",
"unspent_change": "يتغير",
"seed_hex_form": "بذور المحفظة (شكل عرافة)",
"tor_connection": "ﺭﻮﺗ ﻝﺎﺼﺗﺍ"
}

View file

@ -734,5 +734,6 @@
"unavailable_balance": "Неналично салдо",
"unavailable_balance_description": "Неналично салдо: Тази обща сума включва средства, които са заключени в чакащи транзакции и тези, които сте замразили активно в настройките за контрол на монетите. Заключените баланси ще станат достъпни, след като съответните им транзакции бъдат завършени, докато замразените баланси остават недостъпни за транзакции, докато не решите да ги размразите.",
"unspent_change": "Промяна",
"tor_connection": "Tor връзка"
}
"tor_connection": "Tor връзка",
"seed_hex_form": "Семена от портфейл (шестнадесетична форма)"
}

View file

@ -734,5 +734,6 @@
"unavailable_balance": "Nedostupný zůstatek",
"unavailable_balance_description": "Nedostupný zůstatek: Tento součet zahrnuje prostředky, které jsou uzamčeny v nevyřízených transakcích a ty, které jste aktivně zmrazili v nastavení kontroly mincí. Uzamčené zůstatky budou k dispozici po dokončení příslušných transakcí, zatímco zmrazené zůstatky zůstanou pro transakce nepřístupné, dokud se nerozhodnete je uvolnit.",
"unspent_change": "Změna",
"tor_connection": "Připojení Tor"
}
"tor_connection": "Připojení Tor",
"seed_hex_form": "Semeno peněženky (hex formulář)"
}

View file

@ -742,5 +742,6 @@
"unavailable_balance": "Nicht verfügbares Guthaben",
"unavailable_balance_description": "Nicht verfügbares Guthaben: Diese Summe umfasst Gelder, die in ausstehenden Transaktionen gesperrt sind, und solche, die Sie in Ihren Münzkontrolleinstellungen aktiv eingefroren haben. Gesperrte Guthaben werden verfügbar, sobald die entsprechenden Transaktionen abgeschlossen sind, während eingefrorene Guthaben für Transaktionen nicht zugänglich bleiben, bis Sie sich dazu entschließen, sie wieder freizugeben.",
"unspent_change": "Wechselgeld",
"tor_connection": "Tor-Verbindung"
}
"tor_connection": "Tor-Verbindung",
"seed_hex_form": "Brieftaschensamen (Sechskantform)"
}

View file

@ -743,5 +743,6 @@
"unavailable_balance": "Unavailable balance",
"unavailable_balance_description": "Unavailable Balance: This total includes funds that are locked in pending transactions and those you have actively frozen in your coin control settings. Locked balances will become available once their respective transactions are completed, while frozen balances remain inaccessible for transactions until you decide to unfreeze them.",
"unspent_change": "Change",
"tor_connection": "Tor connection"
}
"tor_connection": "Tor connection",
"seed_hex_form": "Wallet seed (hex form)"
}

View file

@ -742,5 +742,6 @@
"unavailable_balance": "Saldo no disponible",
"unavailable_balance_description": "Saldo no disponible: este total incluye fondos que están bloqueados en transacciones pendientes y aquellos que usted ha congelado activamente en su configuración de control de monedas. Los saldos bloqueados estarán disponibles una vez que se completen sus respectivas transacciones, mientras que los saldos congelados permanecerán inaccesibles para las transacciones hasta que usted decida descongelarlos.",
"unspent_change": "Cambiar",
"tor_connection": "conexión tor"
}
"tor_connection": "conexión tor",
"seed_hex_form": "Semilla de billetera (forma hexadecimal)"
}

View file

@ -744,5 +744,6 @@
"camera_permission_is_required": "L'autorisation d'accès à la caméra est requise.\nVeuillez l'activer depuis les paramètres de l'application.",
"switchToETHWallet": "Veuillez passer à un portefeuille (wallet) Ethereum et réessayer",
"unspent_change": "Changement",
"tor_connection": "Connexion Tor"
}
"tor_connection": "Connexion Tor",
"seed_hex_form": "Graine du portefeuille (forme hexagonale)"
}

View file

@ -720,5 +720,6 @@
"unavailable_balance": "Ma'aunin da ba ya samuwa",
"unavailable_balance_description": "Ma'auni Babu: Wannan jimlar ya haɗa da kuɗi waɗanda ke kulle a cikin ma'amaloli da ke jiran aiki da waɗanda kuka daskare sosai a cikin saitunan sarrafa kuɗin ku. Ma'auni da aka kulle za su kasance da zarar an kammala ma'amalolinsu, yayin da daskararrun ma'auni ba za su iya samun damar yin ciniki ba har sai kun yanke shawarar cire su.",
"unspent_change": "Canza",
"tor_connection": "Tor haɗin gwiwa"
}
"tor_connection": "Tor haɗin gwiwa",
"seed_hex_form": "Gany Sero (form form)"
}

View file

@ -742,5 +742,6 @@
"unavailable_balance": "अनुपलब्ध शेष",
"unavailable_balance_description": "अनुपलब्ध शेष राशि: इस कुल में वे धनराशि शामिल हैं जो लंबित लेनदेन में बंद हैं और जिन्हें आपने अपनी सिक्का नियंत्रण सेटिंग्स में सक्रिय रूप से जमा कर रखा है। लॉक किए गए शेष उनके संबंधित लेन-देन पूरे होने के बाद उपलब्ध हो जाएंगे, जबकि जमे हुए शेष लेन-देन के लिए अप्राप्य रहेंगे जब तक कि आप उन्हें अनफ्रीज करने का निर्णय नहीं लेते।",
"unspent_change": "परिवर्तन",
"tor_connection": "टोर कनेक्शन"
}
"tor_connection": "टोर कनेक्शन",
"seed_hex_form": "वॉलेट सीड (हेक्स फॉर्म)"
}

View file

@ -740,5 +740,6 @@
"unavailable_balance": "Nedostupno stanje",
"unavailable_balance_description": "Nedostupno stanje: Ovaj ukupni iznos uključuje sredstva koja su zaključana u transakcijama na čekanju i ona koja ste aktivno zamrznuli u postavkama kontrole novčića. Zaključani saldi postat će dostupni kada se dovrše njihove transakcije, dok zamrznuti saldi ostaju nedostupni za transakcije sve dok ih ne odlučite odmrznuti.",
"unspent_change": "Promijeniti",
"tor_connection": "Tor veza"
}
"tor_connection": "Tor veza",
"seed_hex_form": "Sjeme novčanika (šesterokutni oblik)"
}

View file

@ -730,5 +730,6 @@
"unavailable_balance": "Saldo tidak tersedia",
"unavailable_balance_description": "Saldo Tidak Tersedia: Total ini termasuk dana yang terkunci dalam transaksi yang tertunda dan dana yang telah Anda bekukan secara aktif di pengaturan kontrol koin Anda. Saldo yang terkunci akan tersedia setelah transaksi masing-masing selesai, sedangkan saldo yang dibekukan tetap tidak dapat diakses untuk transaksi sampai Anda memutuskan untuk mencairkannya.",
"unspent_change": "Mengubah",
"tor_connection": "koneksi Tor"
}
"tor_connection": "koneksi Tor",
"seed_hex_form": "Biji dompet (bentuk hex)"
}

View file

@ -742,5 +742,6 @@
"unavailable_balance": "Saldo non disponibile",
"unavailable_balance_description": "Saldo non disponibile: questo totale include i fondi bloccati nelle transazioni in sospeso e quelli che hai congelato attivamente nelle impostazioni di controllo delle monete. I saldi bloccati diventeranno disponibili una volta completate le rispettive transazioni, mentre i saldi congelati rimarranno inaccessibili per le transazioni finché non deciderai di sbloccarli.",
"unspent_change": "Modifica",
"tor_connection": "Connessione Tor"
}
"tor_connection": "Connessione Tor",
"seed_hex_form": "Seme di portafoglio (forma esadecimale)"
}

View file

@ -742,5 +742,6 @@
"unavailable_balance": "利用できない残高",
"unavailable_balance_description": "利用不可能な残高: この合計には、保留中のトランザクションにロックされている資金と、コイン管理設定でアクティブに凍結した資金が含まれます。ロックされた残高は、それぞれの取引が完了すると利用可能になりますが、凍結された残高は、凍結を解除するまで取引にアクセスできません。",
"unspent_change": "変化",
"tor_connection": "Tor接続"
}
"tor_connection": "Tor接続",
"seed_hex_form": "ウォレットシード(ヘックスフォーム)"
}

View file

@ -740,5 +740,6 @@
"unavailable_balance": "사용할 수 없는 잔액",
"unavailable_balance_description": "사용할 수 없는 잔액: 이 총계에는 보류 중인 거래에 잠겨 있는 자금과 코인 관리 설정에서 적극적으로 동결된 자금이 포함됩니다. 잠긴 잔액은 해당 거래가 완료되면 사용할 수 있게 되며, 동결된 잔액은 동결을 해제하기 전까지 거래에 액세스할 수 없습니다.",
"unspent_change": "변화",
"tor_connection": "토르 연결"
}
"tor_connection": "토르 연결",
"seed_hex_form": "지갑 씨앗 (16 진 양식)"
}

View file

@ -740,5 +740,6 @@
"unavailable_balance": "လက်ကျန်ငွေ မရရှိနိုင်ပါ။",
"unavailable_balance_description": "မရရှိနိုင်သော လက်ကျန်ငွေ- ဤစုစုပေါင်းတွင် ဆိုင်းငံ့ထားသော ငွေပေးငွေယူများတွင် သော့ခတ်ထားသော ငွေကြေးများနှင့် သင်၏ coin ထိန်းချုပ်မှုဆက်တင်များတွင် သင် တက်ကြွစွာ အေးခဲထားသော ငွေများ ပါဝင်သည်။ သော့ခတ်ထားသော လက်ကျန်ငွေများကို ၎င်းတို့၏ သက်ဆိုင်ရာ ငွေပေးငွေယူများ ပြီးမြောက်သည်နှင့် တပြိုင်နက် ရရှိနိုင်မည်ဖြစ်ပြီး၊ အေးခဲထားသော လက်ကျန်များကို ၎င်းတို့အား ပြန်ဖြုတ်ရန် သင်ဆုံးဖြတ်သည်အထိ ငွေပေးငွေယူများအတွက် ဆက်လက်၍မရနိုင်ပါ။",
"unspent_change": "ပေြာင်းလဲခြင်း",
"tor_connection": "Tor ချိတ်ဆက်မှု"
}
"tor_connection": "Tor ချိတ်ဆက်မှု",
"seed_hex_form": "ပိုက်ဆံအိတ်မျိုးစေ့ (Hex Form)"
}

View file

@ -742,5 +742,6 @@
"unavailable_balance": "Onbeschikbaar saldo",
"unavailable_balance_description": "Niet-beschikbaar saldo: Dit totaal omvat het geld dat is vergrendeld in lopende transacties en het geld dat u actief hebt bevroren in uw muntcontrole-instellingen. Vergrendelde saldi komen beschikbaar zodra de betreffende transacties zijn voltooid, terwijl bevroren saldi ontoegankelijk blijven voor transacties totdat u besluit ze weer vrij te geven.",
"unspent_change": "Wijziging",
"tor_connection": "Tor-verbinding"
}
"tor_connection": "Tor-verbinding",
"seed_hex_form": "Portemonnee zaad (hexvorm)"
}

View file

@ -742,5 +742,6 @@
"unavailable_balance": "Niedostępne saldo",
"unavailable_balance_description": "Niedostępne saldo: Suma ta obejmuje środki zablokowane w transakcjach oczekujących oraz te, które aktywnie zamroziłeś w ustawieniach kontroli monet. Zablokowane salda staną się dostępne po zakończeniu odpowiednich transakcji, natomiast zamrożone salda pozostaną niedostępne dla transakcji, dopóki nie zdecydujesz się ich odblokować.",
"unspent_change": "Zmiana",
"tor_connection": "Połączenie Torem"
}
"tor_connection": "Połączenie Torem",
"seed_hex_form": "Nasiona portfela (forma sześciokątna)"
}

View file

@ -741,5 +741,6 @@
"unavailable_balance": "Saldo indisponível",
"unavailable_balance_description": "Saldo Indisponível: Este total inclui fundos bloqueados em transações pendentes e aqueles que você congelou ativamente nas configurações de controle de moedas. Os saldos bloqueados ficarão disponíveis assim que suas respectivas transações forem concluídas, enquanto os saldos congelados permanecerão inacessíveis para transações até que você decida descongelá-los.",
"unspent_change": "Mudar",
"tor_connection": "Conexão Tor"
}
"tor_connection": "Conexão Tor",
"seed_hex_form": "Semente de carteira (forma hexadecimal)"
}

View file

@ -742,5 +742,6 @@
"unavailable_balance": "Недоступный баланс",
"unavailable_balance_description": "Недоступный баланс: в эту сумму входят средства, заблокированные в ожидающих транзакциях, и средства, которые вы активно заморозили в настройках управления монетами. Заблокированные балансы станут доступны после завершения соответствующих транзакций, а замороженные балансы останутся недоступными для транзакций, пока вы не решите их разморозить.",
"unspent_change": "Изменять",
"tor_connection": "Тор соединение"
}
"tor_connection": "Тор соединение",
"seed_hex_form": "Семя кошелька (шестнадцатеричная форма)"
}

View file

@ -740,5 +740,6 @@
"unavailable_balance": "ยอดคงเหลือไม่พร้อมใช้งาน",
"unavailable_balance_description": "ยอดคงเหลือที่ไม่พร้อมใช้งาน: ยอดรวมนี้รวมถึงเงินทุนที่ถูกล็อคในการทำธุรกรรมที่รอดำเนินการและที่คุณได้แช่แข็งไว้ในการตั้งค่าการควบคุมเหรียญของคุณ ยอดคงเหลือที่ถูกล็อคจะพร้อมใช้งานเมื่อธุรกรรมที่เกี่ยวข้องเสร็จสมบูรณ์ ในขณะที่ยอดคงเหลือที่แช่แข็งจะไม่สามารถเข้าถึงได้สำหรับธุรกรรมจนกว่าคุณจะตัดสินใจยกเลิกการแช่แข็ง",
"unspent_change": "เปลี่ยน",
"tor_connection": "การเชื่อมต่อทอร์"
}
"tor_connection": "การเชื่อมต่อทอร์",
"seed_hex_form": "เมล็ดกระเป๋าเงิน (รูปแบบฐานสิบหก)"
}

View file

@ -737,5 +737,6 @@
"unavailable_balance": "Hindi available na balanse",
"unavailable_balance_description": "Hindi Available na Balanse: Kasama sa kabuuang ito ang mga pondong naka-lock sa mga nakabinbing transaksyon at ang mga aktibong na-freeze mo sa iyong mga setting ng kontrol ng coin. Magiging available ang mga naka-lock na balanse kapag nakumpleto na ang kani-kanilang mga transaksyon, habang ang mga nakapirming balanse ay nananatiling hindi naa-access para sa mga transaksyon hanggang sa magpasya kang i-unfreeze ang mga ito.",
"unspent_change": "Baguhin",
"tor_connection": "Koneksyon ng Tor"
}
"tor_connection": "Koneksyon ng Tor",
"seed_hex_form": "Wallet seed (hex form)"
}

View file

@ -740,5 +740,6 @@
"unavailable_balance": "Kullanılamayan bakiye",
"unavailable_balance_description": "Kullanılamayan Bakiye: Bu toplam, bekleyen işlemlerde kilitlenen fonları ve jeton kontrol ayarlarınızda aktif olarak dondurduğunuz fonları içerir. Kilitli bakiyeler, ilgili işlemleri tamamlandıktan sonra kullanılabilir hale gelir; dondurulmuş bakiyeler ise siz onları dondurmaya karar verene kadar işlemler için erişilemez durumda kalır.",
"unspent_change": "Değiştirmek",
"tor_connection": "Tor bağlantısı"
}
"tor_connection": "Tor bağlantısı",
"seed_hex_form": "Cüzdan tohumu (onaltılık form)"
}

View file

@ -742,5 +742,6 @@
"unavailable_balance": "Недоступний баланс",
"unavailable_balance_description": "Недоступний баланс: ця сума включає кошти, заблоковані в незавершених транзакціях, і ті, які ви активно заморозили в налаштуваннях контролю монет. Заблоковані баланси стануть доступними після завершення відповідних транзакцій, тоді як заморожені баланси залишаються недоступними для транзакцій, доки ви не вирішите їх розморозити.",
"unspent_change": "Зміна",
"tor_connection": "Підключення Tor"
}
"tor_connection": "Підключення Tor",
"seed_hex_form": "Насіння гаманця (шістнадцяткова форма)"
}

View file

@ -734,5 +734,6 @@
"unavailable_balance": "ﺲﻨﻠﯿﺑ ﺏﺎﯿﺘﺳﺩ ﺮﯿﻏ",
"unavailable_balance_description": "۔ﮯﺗﺮﮐ ﮟﯿﮩﻧ ﮧﻠﺼﯿﻓ ﺎﮐ ﮯﻧﺮﮐ ﺪﻤﺠﻨﻣ ﻥﺍ ﮟﯿﮩﻧﺍ ﭖﺁ ﮧﮐ ﮏﺗ ﺐﺟ ﮟﯿﮨ ﮯﺘﮨﺭ ﯽﺋﺎﺳﺭ ﻞﺑﺎﻗﺎﻧ ﮏﺗ ﺖﻗﻭ ﺱﺍ ﮯﯿﻟ ﮯﮐ ﻦﯾﺩ ﻦﯿﻟ ﺲﻨﻠﯿﺑ ﺪﻤﺠﻨﻣ ﮧﮐ ﺐﺟ ،ﮯﮔ ﮟﯿﺋﺎﺟ ﻮﮨ ﺏﺎﯿﺘﺳﺩ ﺲﻨﻠﯿﺑ ﻞﻔﻘﻣ ﺪﻌﺑ ﮯﮐ ﮯﻧﻮﮨ ﻞﻤﮑﻣ ﻦﯾﺩ ﻦﯿﻟ ﮧﻘﻠﻌﺘﻣ ﮯﮐ ﻥﺍ ۔ﮯﮨ ﺎﮭﮐﺭ ﺮ",
"unspent_change": "تبدیل کریں",
"seed_hex_form": "پرس بیج (ہیکس فارم)",
"tor_connection": "ﻦﺸﮑﻨﮐ ﺭﻮﭨ"
}
}

View file

@ -736,5 +736,6 @@
"unavailable_balance": "Iwontunwonsi ti ko si",
"unavailable_balance_description": "Iwontunws.funfun ti ko si: Lapapọ yii pẹlu awọn owo ti o wa ni titiipa ni awọn iṣowo isunmọ ati awọn ti o ti didi ni itara ninu awọn eto iṣakoso owo rẹ. Awọn iwọntunwọnsi titiipa yoo wa ni kete ti awọn iṣowo oniwun wọn ba ti pari, lakoko ti awọn iwọntunwọnsi tio tutunini ko ni iraye si fun awọn iṣowo titi iwọ o fi pinnu lati mu wọn kuro.",
"unspent_change": "Yipada",
"tor_connection": "Tor asopọ"
}
"tor_connection": "Tor asopọ",
"seed_hex_form": "Irú Opamọwọ apamọwọ (HOX)"
}

View file

@ -741,5 +741,6 @@
"unavailable_balance": "不可用余额",
"unavailable_balance_description": "不可用余额:此总额包括锁定在待处理交易中的资金以及您在硬币控制设置中主动冻结的资金。一旦各自的交易完成,锁定的余额将变得可用,而冻结的余额在您决定解冻之前仍然无法进行交易。",
"unspent_change": "改变",
"tor_connection": "Tor连接"
}
"tor_connection": "Tor连接",
"seed_hex_form": "钱包种子(十六进制形式)"
}