feat: sync fixes, sp settings

This commit is contained in:
Rafael Saes 2024-05-10 19:23:05 -03:00
parent 8b5ab79d29
commit e72ed496ff
45 changed files with 460 additions and 153 deletions

View file

@ -40,23 +40,26 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store {
String? passphrase, String? passphrase,
List<BitcoinSilentPaymentAddressRecord>? initialSilentAddresses, List<BitcoinSilentPaymentAddressRecord>? initialSilentAddresses,
int initialSilentAddressIndex = 0, int initialSilentAddressIndex = 0,
bool? alwaysScan,
}) : super( }) : super(
mnemonic: mnemonic, mnemonic: mnemonic,
passphrase: passphrase, passphrase: passphrase,
xpub: xpub, xpub: xpub,
password: password, password: password,
walletInfo: walletInfo, walletInfo: walletInfo,
unspentCoinsInfo: unspentCoinsInfo, unspentCoinsInfo: unspentCoinsInfo,
networkType: networkParam == null networkType: networkParam == null
? bitcoin.bitcoin ? bitcoin.bitcoin
: networkParam == BitcoinNetwork.mainnet : networkParam == BitcoinNetwork.mainnet
? bitcoin.bitcoin ? bitcoin.bitcoin
: bitcoin.testnet, : bitcoin.testnet,
initialAddresses: initialAddresses, initialAddresses: initialAddresses,
initialBalance: initialBalance, initialBalance: initialBalance,
seedBytes: seedBytes, seedBytes: seedBytes,
currency: currency:
networkParam == BitcoinNetwork.testnet ? CryptoCurrency.tbtc : CryptoCurrency.btc) { networkParam == BitcoinNetwork.testnet ? CryptoCurrency.tbtc : CryptoCurrency.btc,
alwaysScan: alwaysScan,
) {
// in a standard BIP44 wallet, mainHd derivation path = m/84'/0'/0'/0 (account 0, index unspecified here) // in a standard BIP44 wallet, mainHd derivation path = m/84'/0'/0'/0 (account 0, index unspecified here)
// the sideHd derivation path = m/84'/0'/0'/1 (account 1, index unspecified here) // the sideHd derivation path = m/84'/0'/0'/1 (account 1, index unspecified here)
// String derivationPath = walletInfo.derivationInfo!.derivationPath!; // String derivationPath = walletInfo.derivationInfo!.derivationPath!;
@ -133,6 +136,7 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store {
required WalletInfo walletInfo, required WalletInfo walletInfo,
required Box<UnspentCoinsInfo> unspentCoinsInfo, required Box<UnspentCoinsInfo> unspentCoinsInfo,
required String password, required String password,
required bool alwaysScan,
}) async { }) async {
final network = walletInfo.network != null final network = walletInfo.network != null
? BasedUtxoNetwork.fromName(walletInfo.network!) ? BasedUtxoNetwork.fromName(walletInfo.network!)
@ -181,6 +185,7 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store {
initialChangeAddressIndex: snp.changeAddressIndex, initialChangeAddressIndex: snp.changeAddressIndex,
addressPageType: snp.addressPageType, addressPageType: snp.addressPageType,
networkParam: network, networkParam: network,
alwaysScan: alwaysScan,
); );
} }

View file

@ -19,10 +19,11 @@ class BitcoinWalletService extends WalletService<
BitcoinRestoreWalletFromSeedCredentials, BitcoinRestoreWalletFromSeedCredentials,
BitcoinRestoreWalletFromWIFCredentials, BitcoinRestoreWalletFromWIFCredentials,
BitcoinRestoreWalletFromHardware> { BitcoinRestoreWalletFromHardware> {
BitcoinWalletService(this.walletInfoSource, this.unspentCoinsInfoSource); BitcoinWalletService(this.walletInfoSource, this.unspentCoinsInfoSource, this.alwaysScan);
final Box<WalletInfo> walletInfoSource; final Box<WalletInfo> walletInfoSource;
final Box<UnspentCoinsInfo> unspentCoinsInfoSource; final Box<UnspentCoinsInfo> unspentCoinsInfoSource;
final bool alwaysScan;
@override @override
WalletType getType() => WalletType.bitcoin; WalletType getType() => WalletType.bitcoin;
@ -55,20 +56,24 @@ class BitcoinWalletService extends WalletService<
.firstWhereOrNull((info) => info.id == WalletBase.idFor(name, getType()))!; .firstWhereOrNull((info) => info.id == WalletBase.idFor(name, getType()))!;
try { try {
final wallet = await BitcoinWalletBase.open( final wallet = await BitcoinWalletBase.open(
password: password, password: password,
name: name, name: name,
walletInfo: walletInfo, walletInfo: walletInfo,
unspentCoinsInfo: unspentCoinsInfoSource); unspentCoinsInfo: unspentCoinsInfoSource,
alwaysScan: alwaysScan,
);
await wallet.init(); await wallet.init();
saveBackup(name); saveBackup(name);
return wallet; return wallet;
} catch (_) { } catch (_) {
await restoreWalletFilesFromBackup(name); await restoreWalletFilesFromBackup(name);
final wallet = await BitcoinWalletBase.open( final wallet = await BitcoinWalletBase.open(
password: password, password: password,
name: name, name: name,
walletInfo: walletInfo, walletInfo: walletInfo,
unspentCoinsInfo: unspentCoinsInfoSource); unspentCoinsInfo: unspentCoinsInfoSource,
alwaysScan: alwaysScan,
);
await wallet.init(); await wallet.init();
return wallet; return wallet;
} }
@ -87,10 +92,12 @@ class BitcoinWalletService extends WalletService<
final currentWalletInfo = walletInfoSource.values final currentWalletInfo = walletInfoSource.values
.firstWhereOrNull((info) => info.id == WalletBase.idFor(currentName, getType()))!; .firstWhereOrNull((info) => info.id == WalletBase.idFor(currentName, getType()))!;
final currentWallet = await BitcoinWalletBase.open( final currentWallet = await BitcoinWalletBase.open(
password: password, password: password,
name: currentName, name: currentName,
walletInfo: currentWalletInfo, walletInfo: currentWalletInfo,
unspentCoinsInfo: unspentCoinsInfoSource); unspentCoinsInfo: unspentCoinsInfoSource,
alwaysScan: alwaysScan,
);
await currentWallet.renameWalletFiles(newName); await currentWallet.renameWalletFiles(newName);
await saveBackup(newName); await saveBackup(newName);
@ -105,12 +112,13 @@ class BitcoinWalletService extends WalletService<
@override @override
Future<BitcoinWallet> restoreFromHardwareWallet(BitcoinRestoreWalletFromHardware credentials, Future<BitcoinWallet> restoreFromHardwareWallet(BitcoinRestoreWalletFromHardware credentials,
{bool? isTestnet}) async { {bool? isTestnet}) async {
final network = isTestnet == true ? BitcoinNetwork.testnet : BitcoinNetwork.mainnet; final network = isTestnet == true ? BitcoinNetwork.testnet : BitcoinNetwork.mainnet;
credentials.walletInfo?.network = network.value; credentials.walletInfo?.network = network.value;
credentials.walletInfo?.derivationInfo?.derivationPath = credentials.hwAccountData.derivationPath; credentials.walletInfo?.derivationInfo?.derivationPath =
credentials.hwAccountData.derivationPath;
final wallet = await BitcoinWallet(password: credentials.password!, final wallet = await BitcoinWallet(
password: credentials.password!,
xpub: credentials.hwAccountData.xpub, xpub: credentials.hwAccountData.xpub,
walletInfo: credentials.walletInfo!, walletInfo: credentials.walletInfo!,
unspentCoinsInfo: unspentCoinsInfoSource, unspentCoinsInfo: unspentCoinsInfoSource,
@ -123,7 +131,7 @@ class BitcoinWalletService extends WalletService<
@override @override
Future<BitcoinWallet> restoreFromKeys(BitcoinRestoreWalletFromWIFCredentials credentials, Future<BitcoinWallet> restoreFromKeys(BitcoinRestoreWalletFromWIFCredentials credentials,
{bool? isTestnet}) async => {bool? isTestnet}) async =>
throw UnimplementedError(); throw UnimplementedError();
@override @override

View file

@ -54,20 +54,21 @@ const int TWEAKS_COUNT = 25;
abstract class ElectrumWalletBase abstract class ElectrumWalletBase
extends WalletBase<ElectrumBalance, ElectrumTransactionHistory, ElectrumTransactionInfo> extends WalletBase<ElectrumBalance, ElectrumTransactionHistory, ElectrumTransactionInfo>
with Store { with Store {
ElectrumWalletBase( ElectrumWalletBase({
{required String password, required String password,
required WalletInfo walletInfo, required WalletInfo walletInfo,
required Box<UnspentCoinsInfo> unspentCoinsInfo, required Box<UnspentCoinsInfo> unspentCoinsInfo,
required this.networkType, required this.networkType,
String? xpub, String? xpub,
String? mnemonic, String? mnemonic,
Uint8List? seedBytes, Uint8List? seedBytes,
this.passphrase, this.passphrase,
List<BitcoinAddressRecord>? initialAddresses, List<BitcoinAddressRecord>? initialAddresses,
ElectrumClient? electrumClient, ElectrumClient? electrumClient,
ElectrumBalance? initialBalance, ElectrumBalance? initialBalance,
CryptoCurrency? currency}) CryptoCurrency? currency,
: accountHD = this.alwaysScan,
}) : accountHD =
getAccountHDWallet(currency, networkType, seedBytes, xpub, walletInfo.derivationInfo), getAccountHDWallet(currency, networkType, seedBytes, xpub, walletInfo.derivationInfo),
syncStatus = NotConnectedSyncStatus(), syncStatus = NotConnectedSyncStatus(),
_password = password, _password = password,
@ -96,13 +97,20 @@ abstract class ElectrumWalletBase
transactionHistory = ElectrumTransactionHistory(walletInfo: walletInfo, password: password); transactionHistory = ElectrumTransactionHistory(walletInfo: walletInfo, password: password);
reaction((_) => syncStatus, (SyncStatus syncStatus) { reaction((_) => syncStatus, (SyncStatus syncStatus) {
if (syncStatus is! AttemptingSyncStatus) if (syncStatus is! AttemptingSyncStatus && syncStatus is! SyncedTipSyncStatus)
silentPaymentsScanningActive = syncStatus is SyncingSyncStatus; silentPaymentsScanningActive = syncStatus is SyncingSyncStatus;
if (syncStatus is NotConnectedSyncStatus) { if (syncStatus is NotConnectedSyncStatus) {
// Needs to re-subscribe to all scripthashes when reconnected // Needs to re-subscribe to all scripthashes when reconnected
_scripthashesUpdateSubject = {}; _scripthashesUpdateSubject = {};
} }
// Message is shown on the UI for 3 seconds, revert to synced
if (syncStatus is SyncedTipSyncStatus) {
Timer(Duration(seconds: 3), () {
if (this.syncStatus is SyncedTipSyncStatus) this.syncStatus = SyncedSyncStatus();
});
}
}); });
} }
@ -133,6 +141,8 @@ abstract class ElectrumWalletBase
static int estimatedTransactionSize(int inputsCount, int outputsCounts) => static int estimatedTransactionSize(int inputsCount, int outputsCounts) =>
inputsCount * 68 + outputsCounts * 34 + 10; inputsCount * 68 + outputsCounts * 34 + 10;
bool? alwaysScan;
final bitcoin.HDWallet accountHD; final bitcoin.HDWallet accountHD;
final String? _mnemonic; final String? _mnemonic;
@ -192,7 +202,13 @@ abstract class ElectrumWalletBase
silentPaymentsScanningActive = active; silentPaymentsScanningActive = active;
if (active) { if (active) {
if ((await getCurrentChainTip()) > walletInfo.restoreHeight) { final tip = await getCurrentChainTip();
if (tip == walletInfo.restoreHeight) {
syncStatus = SyncedTipSyncStatus(tip);
}
if (tip > walletInfo.restoreHeight) {
_setListeners(walletInfo.restoreHeight, chainTipParam: _currentChainTip); _setListeners(walletInfo.restoreHeight, chainTipParam: _currentChainTip);
} }
} else { } else {
@ -245,6 +261,12 @@ abstract class ElectrumWalletBase
@action @action
Future<void> _setListeners(int height, {int? chainTipParam, bool? doSingleScan}) async { Future<void> _setListeners(int height, {int? chainTipParam, bool? doSingleScan}) async {
final chainTip = chainTipParam ?? await getCurrentChainTip(); final chainTip = chainTipParam ?? await getCurrentChainTip();
if (chainTip == height) {
syncStatus = NotConnectedSyncStatus();
return;
}
syncStatus = AttemptingSyncStatus(); syncStatus = AttemptingSyncStatus();
if (_isolate != null) { if (_isolate != null) {
@ -416,10 +438,9 @@ abstract class ElectrumWalletBase
try { try {
syncStatus = ConnectingSyncStatus(); syncStatus = ConnectingSyncStatus();
electrumClient.onConnectionStatusChange = null;
await electrumClient.close(); await electrumClient.close();
await Timer(Duration(seconds: differentNode ? 0 : 10), () async { await Timer(Duration(seconds: differentNode ? 0 : 15), () async {
electrumClient.onConnectionStatusChange = (bool isConnected) async { electrumClient.onConnectionStatusChange = (bool isConnected) async {
if (syncStatus is SyncingSyncStatus) return; if (syncStatus is SyncingSyncStatus) return;
@ -716,7 +737,6 @@ abstract class ElectrumWalletBase
// Still has inputs to spend before failing // Still has inputs to spend before failing
if (!spendingAllCoins) { if (!spendingAllCoins) {
outputs.removeLast();
return estimateTxForAmount( return estimateTxForAmount(
credentialsAmount, credentialsAmount,
outputs, outputs,
@ -760,10 +780,7 @@ abstract class ElectrumWalletBase
if (spendingAllCoins) { if (spendingAllCoins) {
throw BitcoinTransactionWrongBalanceException(); throw BitcoinTransactionWrongBalanceException();
} else { } else {
if (amountLeftForChangeAndFee > fee) { outputs.removeLast();
outputs.removeLast();
}
return estimateTxForAmount( return estimateTxForAmount(
credentialsAmount, credentialsAmount,
outputs, outputs,
@ -1740,6 +1757,10 @@ abstract class ElectrumWalletBase
if (_currentChainTip != null && _currentChainTip! > 0 && walletInfo.restoreHeight == 0) { if (_currentChainTip != null && _currentChainTip! > 0 && walletInfo.restoreHeight == 0) {
await walletInfo.updateRestoreHeight(_currentChainTip!); await walletInfo.updateRestoreHeight(_currentChainTip!);
} }
if (alwaysScan == true) {
_setListeners(walletInfo.restoreHeight);
}
}); });
} }
@ -1962,7 +1983,10 @@ Future<void> startRefresh(ScanData scanData) async {
); );
if (tweakHeight >= scanData.chainTip || scanData.isSingleScan) { if (tweakHeight >= scanData.chainTip || scanData.isSingleScan) {
scanData.sendPort.send(SyncResponse(syncHeight, SyncedSyncStatus())); scanData.sendPort.send(SyncResponse(
syncHeight,
SyncedTipSyncStatus(scanData.chainTip),
));
await tweaksSubscription!.close(); await tweaksSubscription!.close();
} }
}); });

View file

@ -375,7 +375,7 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
} }
silentAddresses.forEach((addressRecord) { silentAddresses.forEach((addressRecord) {
if (addressRecord.type != SilentPaymentsAddresType.p2sp) { if (addressRecord.type != SilentPaymentsAddresType.p2sp || addressRecord.isHidden) {
return; return;
} }

View file

@ -31,6 +31,12 @@ class SyncedSyncStatus extends SyncStatus {
double progress() => 1.0; double progress() => 1.0;
} }
class SyncedTipSyncStatus extends SyncedSyncStatus {
SyncedTipSyncStatus(this.tip);
final int tip;
}
class SyncronizingSyncStatus extends SyncStatus { class SyncronizingSyncStatus extends SyncStatus {
@override @override
double progress() => 0.0; double progress() => 0.0;

View file

@ -211,8 +211,8 @@ class CWBitcoin extends Bitcoin {
} }
WalletService createBitcoinWalletService( WalletService createBitcoinWalletService(
Box<WalletInfo> walletInfoSource, Box<UnspentCoinsInfo> unspentCoinSource) { Box<WalletInfo> walletInfoSource, Box<UnspentCoinsInfo> unspentCoinSource, bool alwaysScan) {
return BitcoinWalletService(walletInfoSource, unspentCoinSource); return BitcoinWalletService(walletInfoSource, unspentCoinSource, alwaysScan);
} }
WalletService createLitecoinWalletService( WalletService createLitecoinWalletService(

View file

@ -8,6 +8,10 @@ String syncStatusTitle(SyncStatus syncStatus) {
: S.current.Blocks_remaining('${syncStatus.blocksLeft}'); : S.current.Blocks_remaining('${syncStatus.blocksLeft}');
} }
if (syncStatus is SyncedTipSyncStatus) {
return S.current.silent_payments_scanned_tip(syncStatus.tip.toString());
}
if (syncStatus is SyncedSyncStatus) { if (syncStatus is SyncedSyncStatus) {
return S.current.sync_status_syncronized; return S.current.sync_status_syncronized;
} }

View file

@ -26,9 +26,11 @@ 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/src/screens/settings/silent_payments_settings.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';
import 'package:cake_wallet/src/screens/transaction_details/rbf_details_page.dart'; import 'package:cake_wallet/src/screens/transaction_details/rbf_details_page.dart';
import 'package:cake_wallet/view_model/settings/silent_payments_settings_view_model.dart';
import 'package:cw_core/receive_page_option.dart'; import 'package:cw_core/receive_page_option.dart';
import 'package:cake_wallet/entities/qr_view_data.dart'; import 'package:cake_wallet/entities/qr_view_data.dart';
import 'package:cake_wallet/entities/template.dart'; import 'package:cake_wallet/entities/template.dart';
@ -331,8 +333,7 @@ Future<void> setup({
getIt.registerSingleton<ExchangeTemplateStore>( getIt.registerSingleton<ExchangeTemplateStore>(
ExchangeTemplateStore(templateSource: _exchangeTemplates)); ExchangeTemplateStore(templateSource: _exchangeTemplates));
getIt.registerSingleton<YatStore>( getIt.registerSingleton<YatStore>(
YatStore(appStore: getIt.get<AppStore>(), secureStorage: getIt.get<SecureStorage>()) YatStore(appStore: getIt.get<AppStore>(), secureStorage: getIt.get<SecureStorage>())..init());
..init());
getIt.registerSingleton<AnonpayTransactionsStore>( getIt.registerSingleton<AnonpayTransactionsStore>(
AnonpayTransactionsStore(anonpayInvoiceInfoSource: _anonpayInvoiceInfoSource)); AnonpayTransactionsStore(anonpayInvoiceInfoSource: _anonpayInvoiceInfoSource));
@ -745,6 +746,9 @@ Future<void> setup({
return DisplaySettingsViewModel(getIt.get<SettingsStore>()); return DisplaySettingsViewModel(getIt.get<SettingsStore>());
}); });
getIt.registerFactory(() =>
SilentPaymentsSettingsViewModel(getIt.get<SettingsStore>(), getIt.get<AppStore>().wallet!));
getIt.registerFactory(() { getIt.registerFactory(() {
return PrivacySettingsViewModel(getIt.get<SettingsStore>(), getIt.get<AppStore>().wallet!); return PrivacySettingsViewModel(getIt.get<SettingsStore>(), getIt.get<AppStore>().wallet!);
}); });
@ -806,6 +810,9 @@ Future<void> setup({
getIt.registerFactory(() => DisplaySettingsPage(getIt.get<DisplaySettingsViewModel>())); getIt.registerFactory(() => DisplaySettingsPage(getIt.get<DisplaySettingsViewModel>()));
getIt.registerFactory(
() => SilentPaymentsSettingsPage(getIt.get<SilentPaymentsSettingsViewModel>()));
getIt.registerFactory(() => OtherSettingsPage(getIt.get<OtherSettingsViewModel>())); getIt.registerFactory(() => OtherSettingsPage(getIt.get<OtherSettingsViewModel>()));
getIt.registerFactory(() => NanoChangeRepPage( getIt.registerFactory(() => NanoChangeRepPage(
@ -889,7 +896,11 @@ Future<void> setup({
case WalletType.monero: case WalletType.monero:
return monero!.createMoneroWalletService(_walletInfoSource, _unspentCoinsInfoSource); return monero!.createMoneroWalletService(_walletInfoSource, _unspentCoinsInfoSource);
case WalletType.bitcoin: case WalletType.bitcoin:
return bitcoin!.createBitcoinWalletService(_walletInfoSource, _unspentCoinsInfoSource); return bitcoin!.createBitcoinWalletService(
_walletInfoSource,
_unspentCoinsInfoSource,
getIt.get<SettingsStore>().silentPaymentsAlwaysScan,
);
case WalletType.litecoin: case WalletType.litecoin:
return bitcoin!.createLitecoinWalletService(_walletInfoSource, _unspentCoinsInfoSource); return bitcoin!.createLitecoinWalletService(_walletInfoSource, _unspentCoinsInfoSource);
case WalletType.ethereum: case WalletType.ethereum:
@ -987,8 +998,8 @@ Future<void> setup({
getIt.registerFactory(() => BackupPage(getIt.get<BackupViewModel>())); getIt.registerFactory(() => BackupPage(getIt.get<BackupViewModel>()));
getIt.registerFactory(() => getIt.registerFactory(
EditBackupPasswordViewModel(getIt.get<SecureStorage>(), getIt.get<SecretStore>())); () => EditBackupPasswordViewModel(getIt.get<SecureStorage>(), getIt.get<SecretStore>()));
getIt.registerFactory(() => EditBackupPasswordPage(getIt.get<EditBackupPasswordViewModel>())); getIt.registerFactory(() => EditBackupPasswordPage(getIt.get<EditBackupPasswordViewModel>()));
@ -1036,8 +1047,8 @@ Future<void> setup({
getIt.registerFactory(() => SupportPage(getIt.get<SupportViewModel>())); getIt.registerFactory(() => SupportPage(getIt.get<SupportViewModel>()));
getIt.registerFactory(() => SupportChatPage(getIt.get<SupportViewModel>(), getIt.registerFactory(() =>
secureStorage: getIt.get<SecureStorage>())); SupportChatPage(getIt.get<SupportViewModel>(), secureStorage: getIt.get<SecureStorage>()));
getIt.registerFactory(() => SupportOtherLinksPage(getIt.get<SupportViewModel>())); getIt.registerFactory(() => SupportOtherLinksPage(getIt.get<SupportViewModel>()));

View file

@ -44,6 +44,8 @@ class PreferencesKey {
static const polygonTransactionPriority = 'current_fee_priority_polygon'; static const polygonTransactionPriority = 'current_fee_priority_polygon';
static const bitcoinCashTransactionPriority = 'current_fee_priority_bitcoin_cash'; static const bitcoinCashTransactionPriority = 'current_fee_priority_bitcoin_cash';
static const customBitcoinFeeRate = 'custom_electrum_fee_rate'; static const customBitcoinFeeRate = 'custom_electrum_fee_rate';
static const silentPaymentsCardDisplay = 'silentPaymentsCardDisplay';
static const silentPaymentsAlwaysScan = 'silentPaymentsAlwaysScan';
static const shouldShowReceiveWarning = 'should_show_receive_warning'; static const shouldShowReceiveWarning = 'should_show_receive_warning';
static const shouldShowYatPopup = 'should_show_yat_popup'; static const shouldShowYatPopup = 'should_show_yat_popup';
static const shouldShowRepWarning = 'should_show_rep_warning'; static const shouldShowRepWarning = 'should_show_rep_warning';

View file

@ -76,6 +76,7 @@ import 'package:cake_wallet/src/screens/settings/manage_nodes_page.dart';
import 'package:cake_wallet/src/screens/settings/other_settings_page.dart'; import 'package:cake_wallet/src/screens/settings/other_settings_page.dart';
import 'package:cake_wallet/src/screens/settings/privacy_page.dart'; import 'package:cake_wallet/src/screens/settings/privacy_page.dart';
import 'package:cake_wallet/src/screens/settings/security_backup_page.dart'; import 'package:cake_wallet/src/screens/settings/security_backup_page.dart';
import 'package:cake_wallet/src/screens/settings/silent_payments_settings.dart';
import 'package:cake_wallet/src/screens/settings/tor_page.dart'; import 'package:cake_wallet/src/screens/settings/tor_page.dart';
import 'package:cake_wallet/src/screens/settings/trocador_providers_page.dart'; import 'package:cake_wallet/src/screens/settings/trocador_providers_page.dart';
import 'package:cake_wallet/src/screens/setup_2fa/modify_2fa_page.dart'; import 'package:cake_wallet/src/screens/setup_2fa/modify_2fa_page.dart';
@ -366,6 +367,10 @@ Route<dynamic> createRoute(RouteSettings settings) {
param1: settings.arguments as OnAuthenticationFinished, param2: false), param1: settings.arguments as OnAuthenticationFinished, param2: false),
onWillPop: () async => false)); onWillPop: () async => false));
case Routes.silentPaymentsSettings:
return CupertinoPageRoute<void>(
fullscreenDialog: true, builder: (_) => getIt.get<SilentPaymentsSettingsPage>());
case Routes.connectionSync: case Routes.connectionSync:
return CupertinoPageRoute<void>( return CupertinoPageRoute<void>(
fullscreenDialog: true, builder: (_) => getIt.get<ConnectionSyncPage>()); fullscreenDialog: true, builder: (_) => getIt.get<ConnectionSyncPage>());

View file

@ -81,6 +81,7 @@ class Routes {
static const ioniaMoreOptionsPage = '/ionia_more_options_page'; static const ioniaMoreOptionsPage = '/ionia_more_options_page';
static const ioniaCustomRedeemPage = '/ionia_custom_redeem_page'; static const ioniaCustomRedeemPage = '/ionia_custom_redeem_page';
static const webViewPage = '/web_view_page'; static const webViewPage = '/web_view_page';
static const silentPaymentsSettings = '/silent_payments_settings';
static const connectionSync = '/connection_sync_page'; static const connectionSync = '/connection_sync_page';
static const securityBackupPage = '/security_and_backup_page'; static const securityBackupPage = '/security_and_backup_page';
static const privacyPage = '/privacy_page'; static const privacyPage = '/privacy_page';

View file

@ -247,71 +247,78 @@ class CryptoBalanceWidget extends StatelessWidget {
); );
}, },
), ),
if (dashboardViewModel.hasSilentPayments) ...[ Observer(builder: (context) {
SizedBox(height: 10), return Column(
Padding( children: [
padding: const EdgeInsets.fromLTRB(16, 0, 16, 8), if (dashboardViewModel.showSilentPaymentsCard) ...[
child: DashBoardRoundedCardWidget( SizedBox(height: 10),
customBorder: 30, Padding(
title: S.of(context).silent_payments, padding: const EdgeInsets.fromLTRB(16, 0, 16, 8),
subTitle: S.of(context).enable_silent_payments_scanning, child: DashBoardRoundedCardWidget(
hint: Column( customBorder: 30,
children: [ title: S.of(context).silent_payments,
Row( subTitle: S.of(context).enable_silent_payments_scanning,
mainAxisAlignment: MainAxisAlignment.spaceBetween, hint: Column(
children: [ children: [
GestureDetector( Row(
behavior: HitTestBehavior.opaque, mainAxisAlignment: MainAxisAlignment.spaceBetween,
onTap: () => launchUrl(
// TODO: Update URL
Uri.https("guides.cakewallet.com"),
mode: LaunchMode.externalApplication,
),
child: Row(
children: [ children: [
Text( GestureDetector(
S.of(context).what_is_silent_payments, behavior: HitTestBehavior.opaque,
style: TextStyle( onTap: () => launchUrl(
fontSize: 12, // TODO: Update URL
fontFamily: 'Lato', Uri.https("guides.cakewallet.com"),
fontWeight: FontWeight.w400, mode: LaunchMode.externalApplication,
color: Theme.of(context) ),
.extension<BalancePageTheme>()! child: Row(
.labelTextColor, children: [
height: 1, Text(
S.of(context).what_is_silent_payments,
style: TextStyle(
fontSize: 12,
fontFamily: 'Lato',
fontWeight: FontWeight.w400,
color: Theme.of(context)
.extension<BalancePageTheme>()!
.labelTextColor,
height: 1,
),
softWrap: true,
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 4),
child: Icon(Icons.help_outline,
size: 16,
color: Theme.of(context)
.extension<BalancePageTheme>()!
.labelTextColor),
)
],
), ),
softWrap: true,
), ),
Padding( Observer(
padding: const EdgeInsets.symmetric(horizontal: 4), builder: (_) => StandardSwitch(
child: Icon(Icons.help_outline, value: dashboardViewModel.silentPaymentsScanningActive,
size: 16, onTaped: () => _toggleSilentPaymentsScanning(context),
color: Theme.of(context) ),
.extension<BalancePageTheme>()!
.labelTextColor),
) )
], ],
), ),
), ],
Observer( ),
builder: (_) => StandardSwitch( onTap: () => _toggleSilentPaymentsScanning(context),
value: dashboardViewModel.silentPaymentsScanningActive, icon: Icon(
onTaped: () => _toggleSilentPaymentsScanning(context), Icons.lock,
), color:
) Theme.of(context).extension<DashboardPageTheme>()!.pageTitleTextColor,
], size: 50,
),
), ),
], ),
), ]
onTap: () => _toggleSilentPaymentsScanning(context), ],
icon: Icon( );
Icons.lock, }),
color: Theme.of(context).extension<DashboardPageTheme>()!.pageTitleTextColor,
size: 50,
),
),
),
]
], ],
), ),
), ),

View file

@ -1,3 +1,4 @@
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/widgets/setting_action_button.dart'; import 'package:cake_wallet/src/widgets/setting_action_button.dart';
import 'package:cake_wallet/src/widgets/setting_actions.dart'; import 'package:cake_wallet/src/widgets/setting_actions.dart';
import 'package:cake_wallet/themes/extensions/menu_theme.dart'; import 'package:cake_wallet/themes/extensions/menu_theme.dart';
@ -180,6 +181,11 @@ class MenuWidgetState extends State<MenuWidget> {
final item = SettingActions.all[index]; final item = SettingActions.all[index];
if (!widget.dashboardViewModel.hasSilentPayments &&
item.name == S.of(context).silent_payments_settings) {
return Container();
}
final isLastTile = index == itemCount - 1; final isLastTile = index == itemCount - 1;
return SettingActionButton( return SettingActionButton(

View file

@ -0,0 +1,50 @@
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/settings/widgets/settings_cell_with_arrow.dart';
import 'package:cake_wallet/src/screens/settings/widgets/settings_switcher_cell.dart';
import 'package:cake_wallet/view_model/settings/silent_payments_settings_view_model.dart';
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
class SilentPaymentsSettingsPage extends BasePage {
SilentPaymentsSettingsPage(this._silentPaymentsSettingsViewModel);
@override
String get title => S.current.silent_payments_settings;
final SilentPaymentsSettingsViewModel _silentPaymentsSettingsViewModel;
@override
Widget body(BuildContext context) {
return SingleChildScrollView(
child: Observer(builder: (_) {
return Container(
padding: EdgeInsets.only(top: 10),
child: Column(
children: [
SettingsSwitcherCell(
title: S.current.silent_payments_display_card,
value: _silentPaymentsSettingsViewModel.silentPaymentsCardDisplay,
onValueChange: (_, bool value) {
_silentPaymentsSettingsViewModel.setSilentPaymentsCardDisplay(value);
},
),
SettingsSwitcherCell(
title: S.current.silent_payments_always_scan,
value: _silentPaymentsSettingsViewModel.silentPaymentsAlwaysScan,
onValueChange: (_, bool value) {
_silentPaymentsSettingsViewModel.setSilentPaymentsAlwaysScan(value);
},
),
SettingsCellWithArrow(
title: S.current.silent_payments_scanning,
handler: (BuildContext context) => Navigator.of(context).pushNamed(Routes.rescan),
),
],
),
);
}),
);
}
}

View file

@ -14,6 +14,7 @@ class SettingActions {
}); });
static List<SettingActions> all = [ static List<SettingActions> all = [
silentPaymentsSettingAction,
connectionSettingAction, connectionSettingAction,
walletSettingAction, walletSettingAction,
addressBookSettingAction, addressBookSettingAction,
@ -35,6 +36,15 @@ class SettingActions {
supportSettingAction, supportSettingAction,
]; ];
static SettingActions silentPaymentsSettingAction = SettingActions._(
name: (context) => S.of(context).silent_payments_settings,
image: 'assets/images/bitcoin_menu.png',
onTap: (BuildContext context) {
Navigator.pop(context);
Navigator.of(context).pushNamed(Routes.silentPaymentsSettings);
},
);
static SettingActions connectionSettingAction = SettingActions._( static SettingActions connectionSettingAction = SettingActions._(
name: (context) => S.of(context).connection_sync, name: (context) => S.of(context).connection_sync,
image: 'assets/images/nodes_menu.png', image: 'assets/images/nodes_menu.png',

View file

@ -1,5 +1,4 @@
import 'dart:io'; import 'dart:io';
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/secure_storage.dart'; import 'package:cake_wallet/core/secure_storage.dart';
@ -108,6 +107,8 @@ abstract class SettingsStoreBase with Store {
required this.lookupsOpenAlias, required this.lookupsOpenAlias,
required this.lookupsENS, required this.lookupsENS,
required this.customBitcoinFeeRate, required this.customBitcoinFeeRate,
required this.silentPaymentsCardDisplay,
required this.silentPaymentsAlwaysScan,
TransactionPriority? initialBitcoinTransactionPriority, TransactionPriority? initialBitcoinTransactionPriority,
TransactionPriority? initialMoneroTransactionPriority, TransactionPriority? initialMoneroTransactionPriority,
TransactionPriority? initialHavenTransactionPriority, TransactionPriority? initialHavenTransactionPriority,
@ -518,6 +519,16 @@ abstract class SettingsStoreBase with Store {
(int customBitcoinFeeRate) => (int customBitcoinFeeRate) =>
_sharedPreferences.setInt(PreferencesKey.customBitcoinFeeRate, customBitcoinFeeRate)); _sharedPreferences.setInt(PreferencesKey.customBitcoinFeeRate, customBitcoinFeeRate));
reaction((_) => silentPaymentsCardDisplay, (bool silentPaymentsCardDisplay) {
_sharedPreferences.setBool(
PreferencesKey.silentPaymentsCardDisplay, silentPaymentsCardDisplay);
});
reaction(
(_) => silentPaymentsAlwaysScan,
(bool silentPaymentsAlwaysScan) => _sharedPreferences.setBool(
PreferencesKey.silentPaymentsAlwaysScan, silentPaymentsAlwaysScan));
this.nodes.observe((change) { this.nodes.observe((change) {
if (change.newValue != null && change.key != null) { if (change.newValue != null && change.key != null) {
_saveCurrentNode(change.newValue!, change.key!); _saveCurrentNode(change.newValue!, change.key!);
@ -713,6 +724,12 @@ abstract class SettingsStoreBase with Store {
@observable @observable
int customBitcoinFeeRate; int customBitcoinFeeRate;
@observable
bool silentPaymentsCardDisplay;
@observable
bool silentPaymentsAlwaysScan;
final SecureStorage _secureStorage; final SecureStorage _secureStorage;
final SharedPreferences _sharedPreferences; final SharedPreferences _sharedPreferences;
final BackgroundTasks _backgroundTasks; final BackgroundTasks _backgroundTasks;
@ -859,6 +876,10 @@ abstract class SettingsStoreBase with Store {
final lookupsOpenAlias = sharedPreferences.getBool(PreferencesKey.lookupsOpenAlias) ?? true; final lookupsOpenAlias = sharedPreferences.getBool(PreferencesKey.lookupsOpenAlias) ?? true;
final lookupsENS = sharedPreferences.getBool(PreferencesKey.lookupsENS) ?? true; final lookupsENS = sharedPreferences.getBool(PreferencesKey.lookupsENS) ?? true;
final customBitcoinFeeRate = sharedPreferences.getInt(PreferencesKey.customBitcoinFeeRate) ?? 1; final customBitcoinFeeRate = sharedPreferences.getInt(PreferencesKey.customBitcoinFeeRate) ?? 1;
final silentPaymentsCardDisplay =
sharedPreferences.getBool(PreferencesKey.silentPaymentsCardDisplay) ?? true;
final silentPaymentsAlwaysScan =
sharedPreferences.getBool(PreferencesKey.silentPaymentsAlwaysScan) ?? false;
// If no value // If no value
if (pinLength == null || pinLength == 0) { if (pinLength == null || pinLength == 0) {
@ -1103,6 +1124,8 @@ abstract class SettingsStoreBase with Store {
lookupsOpenAlias: lookupsOpenAlias, lookupsOpenAlias: lookupsOpenAlias,
lookupsENS: lookupsENS, lookupsENS: lookupsENS,
customBitcoinFeeRate: customBitcoinFeeRate, customBitcoinFeeRate: customBitcoinFeeRate,
silentPaymentsCardDisplay: silentPaymentsCardDisplay,
silentPaymentsAlwaysScan: silentPaymentsAlwaysScan,
initialMoneroTransactionPriority: moneroTransactionPriority, initialMoneroTransactionPriority: moneroTransactionPriority,
initialBitcoinTransactionPriority: bitcoinTransactionPriority, initialBitcoinTransactionPriority: bitcoinTransactionPriority,
initialHavenTransactionPriority: havenTransactionPriority, initialHavenTransactionPriority: havenTransactionPriority,
@ -1242,6 +1265,10 @@ abstract class SettingsStoreBase with Store {
lookupsOpenAlias = sharedPreferences.getBool(PreferencesKey.lookupsOpenAlias) ?? true; lookupsOpenAlias = sharedPreferences.getBool(PreferencesKey.lookupsOpenAlias) ?? true;
lookupsENS = sharedPreferences.getBool(PreferencesKey.lookupsENS) ?? true; lookupsENS = sharedPreferences.getBool(PreferencesKey.lookupsENS) ?? true;
customBitcoinFeeRate = sharedPreferences.getInt(PreferencesKey.customBitcoinFeeRate) ?? 1; customBitcoinFeeRate = sharedPreferences.getInt(PreferencesKey.customBitcoinFeeRate) ?? 1;
silentPaymentsCardDisplay =
sharedPreferences.getBool(PreferencesKey.silentPaymentsCardDisplay) ?? true;
silentPaymentsAlwaysScan =
sharedPreferences.getBool(PreferencesKey.silentPaymentsAlwaysScan) ?? false;
final nodeId = sharedPreferences.getInt(PreferencesKey.currentNodeIdKey); final nodeId = sharedPreferences.getInt(PreferencesKey.currentNodeIdKey);
final bitcoinElectrumServerId = final bitcoinElectrumServerId =
sharedPreferences.getInt(PreferencesKey.currentBitcoinElectrumSererIdKey); sharedPreferences.getInt(PreferencesKey.currentBitcoinElectrumSererIdKey);

View file

@ -308,6 +308,9 @@ abstract class DashboardViewModelBase with Store {
@computed @computed
bool get hasSilentPayments => hasRescan && wallet.type == WalletType.bitcoin; bool get hasSilentPayments => hasRescan && wallet.type == WalletType.bitcoin;
@computed
bool get showSilentPaymentsCard => hasSilentPayments && settingsStore.silentPaymentsCardDisplay;
final KeyService keyService; final KeyService keyService;
final SharedPreferences sharedPreferences; final SharedPreferences sharedPreferences;

View file

@ -0,0 +1,33 @@
import 'package:cake_wallet/bitcoin/bitcoin.dart';
import 'package:cake_wallet/store/settings_store.dart';
import 'package:cw_core/wallet_base.dart';
import 'package:mobx/mobx.dart';
part 'silent_payments_settings_view_model.g.dart';
class SilentPaymentsSettingsViewModel = SilentPaymentsSettingsViewModelBase
with _$SilentPaymentsSettingsViewModel;
abstract class SilentPaymentsSettingsViewModelBase with Store {
SilentPaymentsSettingsViewModelBase(this._settingsStore, this._wallet);
final SettingsStore _settingsStore;
final WalletBase _wallet;
@computed
bool get silentPaymentsCardDisplay => _settingsStore.silentPaymentsCardDisplay;
@computed
bool get silentPaymentsAlwaysScan => _settingsStore.silentPaymentsAlwaysScan;
@action
void setSilentPaymentsCardDisplay(bool value) {
_settingsStore.silentPaymentsCardDisplay = value;
}
@action
void setSilentPaymentsAlwaysScan(bool value) {
_settingsStore.silentPaymentsAlwaysScan = value;
if (value) bitcoin!.setScanningActive(_wallet, true);
}
}

View file

@ -648,11 +648,15 @@
"signTransaction": " ﺔﻠﻣﺎﻌﻤﻟﺍ ﻊﻴﻗﻮﺗ", "signTransaction": " ﺔﻠﻣﺎﻌﻤﻟﺍ ﻊﻴﻗﻮﺗ",
"signup_for_card_accept_terms": "قم بالتسجيل للحصول على البطاقة وقبول الشروط.", "signup_for_card_accept_terms": "قم بالتسجيل للحصول على البطاقة وقبول الشروط.",
"silent_payments": "مدفوعات صامتة", "silent_payments": "مدفوعات صامتة",
"silent_payments_always_scan": "حدد المدفوعات الصامتة دائمًا المسح الضوئي",
"silent_payments_disclaimer": "العناوين الجديدة ليست هويات جديدة. إنها إعادة استخدام هوية موجودة مع ملصق مختلف.", "silent_payments_disclaimer": "العناوين الجديدة ليست هويات جديدة. إنها إعادة استخدام هوية موجودة مع ملصق مختلف.",
"silent_payments_display_card": "عرض بطاقة المدفوعات الصامتة",
"silent_payments_scan_from_date": "فحص من التاريخ", "silent_payments_scan_from_date": "فحص من التاريخ",
"silent_payments_scan_from_date_or_blockheight": "يرجى إدخال ارتفاع الكتلة الذي تريد بدء المسح الضوئي للمدفوعات الصامتة الواردة ، أو استخدام التاريخ بدلاً من ذلك. يمكنك اختيار ما إذا كانت المحفظة تواصل مسح كل كتلة ، أو تتحقق فقط من الارتفاع المحدد.", "silent_payments_scan_from_date_or_blockheight": "يرجى إدخال ارتفاع الكتلة الذي تريد بدء المسح الضوئي للمدفوعات الصامتة الواردة ، أو استخدام التاريخ بدلاً من ذلك. يمكنك اختيار ما إذا كانت المحفظة تواصل مسح كل كتلة ، أو تتحقق فقط من الارتفاع المحدد.",
"silent_payments_scan_from_height": "فحص من ارتفاع الكتلة", "silent_payments_scan_from_height": "فحص من ارتفاع الكتلة",
"silent_payments_scanned_tip": "ممسوح ليفحص! (${tip})",
"silent_payments_scanning": "المدفوعات الصامتة المسح الضوئي", "silent_payments_scanning": "المدفوعات الصامتة المسح الضوئي",
"silent_payments_settings": "إعدادات المدفوعات الصامتة",
"slidable": "قابل للانزلاق", "slidable": "قابل للانزلاق",
"sort_by": "ترتيب حسب", "sort_by": "ترتيب حسب",
"spend_key_private": "مفتاح الإنفاق (خاص)", "spend_key_private": "مفتاح الإنفاق (خاص)",
@ -857,4 +861,4 @@
"you_will_get": "حول الى", "you_will_get": "حول الى",
"you_will_send": "تحويل من", "you_will_send": "تحويل من",
"yy": "YY" "yy": "YY"
} }

View file

@ -648,11 +648,15 @@
"signTransaction": "Подпишете транзакция", "signTransaction": "Подпишете транзакция",
"signup_for_card_accept_terms": "Регистрайте се за картата и приемете условията.", "signup_for_card_accept_terms": "Регистрайте се за картата и приемете условията.",
"silent_payments": "Мълчаливи плащания", "silent_payments": "Мълчаливи плащания",
"silent_payments_always_scan": "Задайте мълчаливи плащания винаги сканиране",
"silent_payments_disclaimer": "Новите адреси не са нови идентичности. Това е повторна употреба на съществуваща идентичност с различен етикет.", "silent_payments_disclaimer": "Новите адреси не са нови идентичности. Това е повторна употреба на съществуваща идентичност с различен етикет.",
"silent_payments_display_card": "Показване на безшумни плащания карта",
"silent_payments_scan_from_date": "Сканиране от дата", "silent_payments_scan_from_date": "Сканиране от дата",
"silent_payments_scan_from_date_or_blockheight": "Моля, въведете височината на блока, която искате да започнете да сканирате за входящи безшумни плащания, или вместо това използвайте датата. Можете да изберете дали портфейлът продължава да сканира всеки блок или проверява само определената височина.", "silent_payments_scan_from_date_or_blockheight": "Моля, въведете височината на блока, която искате да започнете да сканирате за входящи безшумни плащания, или вместо това използвайте датата. Можете да изберете дали портфейлът продължава да сканира всеки блок или проверява само определената височина.",
"silent_payments_scan_from_height": "Сканиране от височината на блока", "silent_payments_scan_from_height": "Сканиране от височината на блока",
"silent_payments_scanned_tip": "Сканиран за съвет! (${tip})",
"silent_payments_scanning": "Безшумни плащания за сканиране", "silent_payments_scanning": "Безшумни плащания за сканиране",
"silent_payments_settings": "Настройки за безшумни плащания",
"slidable": "Плъзгащ се", "slidable": "Плъзгащ се",
"sort_by": "Сортирай по", "sort_by": "Сортирай по",
"spend_key_private": "Spend key (таен)", "spend_key_private": "Spend key (таен)",
@ -857,4 +861,4 @@
"you_will_get": "Обръщане в", "you_will_get": "Обръщане в",
"you_will_send": "Обръщане от", "you_will_send": "Обръщане от",
"yy": "гг" "yy": "гг"
} }

View file

@ -648,11 +648,15 @@
"signTransaction": "Podepsat transakci", "signTransaction": "Podepsat transakci",
"signup_for_card_accept_terms": "Zaregistrujte se pro kartu a souhlaste s podmínkami.", "signup_for_card_accept_terms": "Zaregistrujte se pro kartu a souhlaste s podmínkami.",
"silent_payments": "Tiché platby", "silent_payments": "Tiché platby",
"silent_payments_always_scan": "Nastavit tiché platby vždy skenování",
"silent_payments_disclaimer": "Nové adresy nejsou nové identity. Je to opětovné použití existující identity s jiným štítkem.", "silent_payments_disclaimer": "Nové adresy nejsou nové identity. Je to opětovné použití existující identity s jiným štítkem.",
"silent_payments_display_card": "Zobrazit kartu Silent Payments",
"silent_payments_scan_from_date": "Skenovat od data", "silent_payments_scan_from_date": "Skenovat od data",
"silent_payments_scan_from_date_or_blockheight": "Zadejte výšku bloku, kterou chcete začít skenovat, zda jsou přicházející tiché platby, nebo místo toho použijte datum. Můžete si vybrat, zda peněženka pokračuje v skenování každého bloku nebo zkontroluje pouze zadanou výšku.", "silent_payments_scan_from_date_or_blockheight": "Zadejte výšku bloku, kterou chcete začít skenovat, zda jsou přicházející tiché platby, nebo místo toho použijte datum. Můžete si vybrat, zda peněženka pokračuje v skenování každého bloku nebo zkontroluje pouze zadanou výšku.",
"silent_payments_scan_from_height": "Skenování z výšky bloku", "silent_payments_scan_from_height": "Skenování z výšky bloku",
"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",
"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ý)",
@ -857,4 +861,4 @@
"you_will_get": "Směnit na", "you_will_get": "Směnit na",
"you_will_send": "Směnit z", "you_will_send": "Směnit z",
"yy": "YY" "yy": "YY"
} }

View file

@ -649,11 +649,15 @@
"signTransaction": "Transaktion unterzeichnen", "signTransaction": "Transaktion unterzeichnen",
"signup_for_card_accept_terms": "Melden Sie sich für die Karte an und akzeptieren Sie die Bedingungen.", "signup_for_card_accept_terms": "Melden Sie sich für die Karte an und akzeptieren Sie die Bedingungen.",
"silent_payments": "Stille Zahlungen", "silent_payments": "Stille Zahlungen",
"silent_payments_always_scan": "Setzen Sie stille Zahlungen immer scannen",
"silent_payments_disclaimer": "Neue Adressen sind keine neuen Identitäten. Es ist eine Wiederverwendung einer bestehenden Identität mit einem anderen Etikett.", "silent_payments_disclaimer": "Neue Adressen sind keine neuen Identitäten. Es ist eine Wiederverwendung einer bestehenden Identität mit einem anderen Etikett.",
"silent_payments_display_card": "Zeigen Sie stille Zahlungskarte",
"silent_payments_scan_from_date": "Scan ab Datum", "silent_payments_scan_from_date": "Scan ab Datum",
"silent_payments_scan_from_date_or_blockheight": "Bitte geben Sie die Blockhöhe ein, die Sie für eingehende stille Zahlungen scannen möchten, oder verwenden Sie stattdessen das Datum. Sie können wählen, ob die Brieftasche jeden Block scannt oder nur die angegebene Höhe überprüft.", "silent_payments_scan_from_date_or_blockheight": "Bitte geben Sie die Blockhöhe ein, die Sie für eingehende stille Zahlungen scannen möchten, oder verwenden Sie stattdessen das Datum. Sie können wählen, ob die Brieftasche jeden Block scannt oder nur die angegebene Höhe überprüft.",
"silent_payments_scan_from_height": "Scan aus der Blockhöhe scannen", "silent_payments_scan_from_height": "Scan aus der Blockhöhe scannen",
"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",
"slidable": "Verschiebbar", "slidable": "Verschiebbar",
"sort_by": "Sortiere nach", "sort_by": "Sortiere nach",
"spend_key_private": "Spend Key (geheim)", "spend_key_private": "Spend Key (geheim)",
@ -860,4 +864,4 @@
"you_will_get": "Konvertieren zu", "you_will_get": "Konvertieren zu",
"you_will_send": "Konvertieren von", "you_will_send": "Konvertieren von",
"yy": "YY" "yy": "YY"
} }

View file

@ -648,11 +648,15 @@
"signTransaction": "Sign Transaction", "signTransaction": "Sign Transaction",
"signup_for_card_accept_terms": "Sign up for the card and accept the terms.", "signup_for_card_accept_terms": "Sign up for the card and accept the terms.",
"silent_payments": "Silent Payments", "silent_payments": "Silent Payments",
"silent_payments_always_scan": "Set Silent Payments always scanning",
"silent_payments_disclaimer": "New addresses are not new identities. It is a re-use of an existing identity with a different label.", "silent_payments_disclaimer": "New addresses are not new identities. It is a re-use of an existing identity with a different label.",
"silent_payments_display_card": "Show Silent Payments card",
"silent_payments_scan_from_date": "Scan from date", "silent_payments_scan_from_date": "Scan from date",
"silent_payments_scan_from_date_or_blockheight": "Please enter the block height you want to start scanning for incoming silent payments, or, use the date instead. You can choose if the wallet continues scanning every block, or checks only the specified height.", "silent_payments_scan_from_date_or_blockheight": "Please enter the block height you want to start scanning for incoming silent payments, or, use the date instead. You can choose if the wallet continues scanning every block, or checks only the specified height.",
"silent_payments_scan_from_height": "Scan from block height", "silent_payments_scan_from_height": "Scan from block height",
"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",
"slidable": "Slidable", "slidable": "Slidable",
"sort_by": "Sort by", "sort_by": "Sort by",
"spend_key_private": "Spend key (private)", "spend_key_private": "Spend key (private)",
@ -857,4 +861,4 @@
"you_will_get": "Convert to", "you_will_get": "Convert to",
"you_will_send": "Convert from", "you_will_send": "Convert from",
"yy": "YY" "yy": "YY"
} }

View file

@ -649,11 +649,15 @@
"signTransaction": "Firmar transacción", "signTransaction": "Firmar transacción",
"signup_for_card_accept_terms": "Regístrese para obtener la tarjeta y acepte los términos.", "signup_for_card_accept_terms": "Regístrese para obtener la tarjeta y acepte los términos.",
"silent_payments": "Pagos silenciosos", "silent_payments": "Pagos silenciosos",
"silent_payments_always_scan": "Establecer pagos silenciosos siempre escaneando",
"silent_payments_disclaimer": "Las nuevas direcciones no son nuevas identidades. Es una reutilización de una identidad existente con una etiqueta diferente.", "silent_payments_disclaimer": "Las nuevas direcciones no son nuevas identidades. Es una reutilización de una identidad existente con una etiqueta diferente.",
"silent_payments_display_card": "Mostrar tarjeta de pagos silenciosos",
"silent_payments_scan_from_date": "Escanear desde la fecha", "silent_payments_scan_from_date": "Escanear desde la fecha",
"silent_payments_scan_from_date_or_blockheight": "Ingrese la altura del bloque que desea comenzar a escanear para pagos silenciosos entrantes, o use la fecha en su lugar. Puede elegir si la billetera continúa escaneando cada bloque, o verifica solo la altura especificada.", "silent_payments_scan_from_date_or_blockheight": "Ingrese la altura del bloque que desea comenzar a escanear para pagos silenciosos entrantes, o use la fecha en su lugar. Puede elegir si la billetera continúa escaneando cada bloque, o verifica solo la altura especificada.",
"silent_payments_scan_from_height": "Escanear desde la altura del bloque", "silent_payments_scan_from_height": "Escanear desde la altura del bloque",
"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",
"slidable": "deslizable", "slidable": "deslizable",
"sort_by": "Ordenar por", "sort_by": "Ordenar por",
"spend_key_private": "Spend clave (privado)", "spend_key_private": "Spend clave (privado)",
@ -858,4 +862,4 @@
"you_will_get": "Convertir a", "you_will_get": "Convertir a",
"you_will_send": "Convertir de", "you_will_send": "Convertir de",
"yy": "YY" "yy": "YY"
} }

View file

@ -648,11 +648,15 @@
"signTransaction": "Signer une transaction", "signTransaction": "Signer une transaction",
"signup_for_card_accept_terms": "Inscrivez-vous pour la carte et acceptez les conditions.", "signup_for_card_accept_terms": "Inscrivez-vous pour la carte et acceptez les conditions.",
"silent_payments": "Paiements silencieux", "silent_payments": "Paiements silencieux",
"silent_payments_always_scan": "Définir les paiements silencieux toujours à la scanne",
"silent_payments_disclaimer": "Les nouvelles adresses ne sont pas de nouvelles identités. Il s'agit d'une réutilisation d'une identité existante avec une étiquette différente.", "silent_payments_disclaimer": "Les nouvelles adresses ne sont pas de nouvelles identités. Il s'agit d'une réutilisation d'une identité existante avec une étiquette différente.",
"silent_payments_display_card": "Afficher la carte de paiement silencieuse",
"silent_payments_scan_from_date": "Analyser à partir de la date", "silent_payments_scan_from_date": "Analyser à partir de la date",
"silent_payments_scan_from_date_or_blockheight": "Veuillez saisir la hauteur du bloc que vous souhaitez commencer à scanner pour les paiements silencieux entrants, ou utilisez la date à la place. Vous pouvez choisir si le portefeuille continue de numériser chaque bloc ou ne vérifie que la hauteur spécifiée.", "silent_payments_scan_from_date_or_blockheight": "Veuillez saisir la hauteur du bloc que vous souhaitez commencer à scanner pour les paiements silencieux entrants, ou utilisez la date à la place. Vous pouvez choisir si le portefeuille continue de numériser chaque bloc ou ne vérifie que la hauteur spécifiée.",
"silent_payments_scan_from_height": "Scan à partir de la hauteur du bloc", "silent_payments_scan_from_height": "Scan à partir de la hauteur du bloc",
"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",
"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)",
@ -857,4 +861,4 @@
"you_will_get": "Convertir vers", "you_will_get": "Convertir vers",
"you_will_send": "Convertir depuis", "you_will_send": "Convertir depuis",
"yy": "AA" "yy": "AA"
} }

View file

@ -650,11 +650,15 @@
"signTransaction": "Sa hannu Ma'amala", "signTransaction": "Sa hannu Ma'amala",
"signup_for_card_accept_terms": "Yi rajista don katin kuma karɓi sharuɗɗan.", "signup_for_card_accept_terms": "Yi rajista don katin kuma karɓi sharuɗɗan.",
"silent_payments": "Biya silent", "silent_payments": "Biya silent",
"silent_payments_always_scan": "Saita biya na shiru koyaushe",
"silent_payments_disclaimer": "Sabbin adiresoshin ba sabon tsari bane. Wannan shine sake amfani da asalin asalin tare da wata alama daban.", "silent_payments_disclaimer": "Sabbin adiresoshin ba sabon tsari bane. Wannan shine sake amfani da asalin asalin tare da wata alama daban.",
"silent_payments_display_card": "Nuna katin silent",
"silent_payments_scan_from_date": "Scan daga kwanan wata", "silent_payments_scan_from_date": "Scan daga kwanan wata",
"silent_payments_scan_from_date_or_blockheight": "Da fatan za a shigar da toshe wurin da kake son fara bincika don biyan silins mai shigowa, ko, yi amfani da kwanan wata. Zaka iya zabar idan walat ɗin ya ci gaba da bincika kowane toshe, ko duba tsinkaye da aka ƙayyade.", "silent_payments_scan_from_date_or_blockheight": "Da fatan za a shigar da toshe wurin da kake son fara bincika don biyan silins mai shigowa, ko, yi amfani da kwanan wata. Zaka iya zabar idan walat ɗin ya ci gaba da bincika kowane toshe, ko duba tsinkaye da aka ƙayyade.",
"silent_payments_scan_from_height": "Scan daga tsayin daka", "silent_payments_scan_from_height": "Scan daga tsayin daka",
"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",
"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)",
@ -859,4 +863,4 @@
"you_will_get": "Maida zuwa", "you_will_get": "Maida zuwa",
"you_will_send": "Maida daga", "you_will_send": "Maida daga",
"yy": "YY" "yy": "YY"
} }

View file

@ -650,11 +650,15 @@
"signTransaction": "लेन-देन पर हस्ताक्षर करें", "signTransaction": "लेन-देन पर हस्ताक्षर करें",
"signup_for_card_accept_terms": "कार्ड के लिए साइन अप करें और शर्तें स्वीकार करें।", "signup_for_card_accept_terms": "कार्ड के लिए साइन अप करें और शर्तें स्वीकार करें।",
"silent_payments": "मूक भुगतान", "silent_payments": "मूक भुगतान",
"silent_payments_always_scan": "मूक भुगतान हमेशा स्कैनिंग सेट करें",
"silent_payments_disclaimer": "नए पते नई पहचान नहीं हैं। यह एक अलग लेबल के साथ एक मौजूदा पहचान का पुन: उपयोग है।", "silent_payments_disclaimer": "नए पते नई पहचान नहीं हैं। यह एक अलग लेबल के साथ एक मौजूदा पहचान का पुन: उपयोग है।",
"silent_payments_display_card": "मूक भुगतान कार्ड दिखाएं",
"silent_payments_scan_from_date": "तिथि से स्कैन करना", "silent_payments_scan_from_date": "तिथि से स्कैन करना",
"silent_payments_scan_from_date_or_blockheight": "कृपया उस ब्लॉक ऊंचाई दर्ज करें जिसे आप आने वाले मूक भुगतान के लिए स्कैन करना शुरू करना चाहते हैं, या, इसके बजाय तारीख का उपयोग करें। आप चुन सकते हैं कि क्या वॉलेट हर ब्लॉक को स्कैन करना जारी रखता है, या केवल निर्दिष्ट ऊंचाई की जांच करता है।", "silent_payments_scan_from_date_or_blockheight": "कृपया उस ब्लॉक ऊंचाई दर्ज करें जिसे आप आने वाले मूक भुगतान के लिए स्कैन करना शुरू करना चाहते हैं, या, इसके बजाय तारीख का उपयोग करें। आप चुन सकते हैं कि क्या वॉलेट हर ब्लॉक को स्कैन करना जारी रखता है, या केवल निर्दिष्ट ऊंचाई की जांच करता है।",
"silent_payments_scan_from_height": "ब्लॉक ऊंचाई से स्कैन करें", "silent_payments_scan_from_height": "ब्लॉक ऊंचाई से स्कैन करें",
"silent_payments_scanned_tip": "टिप करने के लिए स्कैन किया! (${tip})",
"silent_payments_scanning": "मूक भुगतान स्कैनिंग", "silent_payments_scanning": "मूक भुगतान स्कैनिंग",
"silent_payments_settings": "मूक भुगतान सेटिंग्स",
"slidable": "फिसलने लायक", "slidable": "फिसलने लायक",
"sort_by": "इसके अनुसार क्रमबद्ध करें", "sort_by": "इसके अनुसार क्रमबद्ध करें",
"spend_key_private": "खर्च करना (निजी)", "spend_key_private": "खर्च करना (निजी)",
@ -859,4 +863,4 @@
"you_will_get": "में बदलें", "you_will_get": "में बदलें",
"you_will_send": "से रूपांतरित करें", "you_will_send": "से रूपांतरित करें",
"yy": "वाईवाई" "yy": "वाईवाई"
} }

View file

@ -648,11 +648,15 @@
"signTransaction": "Potpišite transakciju", "signTransaction": "Potpišite transakciju",
"signup_for_card_accept_terms": "Prijavite se za karticu i prihvatite uvjete.", "signup_for_card_accept_terms": "Prijavite se za karticu i prihvatite uvjete.",
"silent_payments": "Tiha plaćanja", "silent_payments": "Tiha plaćanja",
"silent_payments_always_scan": "Postavite tiho plaćanje uvijek skeniranje",
"silent_payments_disclaimer": "Nove adrese nisu novi identiteti. To je ponovna upotreba postojećeg identiteta s drugom oznakom.", "silent_payments_disclaimer": "Nove adrese nisu novi identiteti. To je ponovna upotreba postojećeg identiteta s drugom oznakom.",
"silent_payments_display_card": "Prikaži karticu tihih plaćanja",
"silent_payments_scan_from_date": "Skeniranje iz datuma", "silent_payments_scan_from_date": "Skeniranje iz datuma",
"silent_payments_scan_from_date_or_blockheight": "Unesite visinu bloka koju želite započeti skeniranje za dolazna tiha plaćanja ili umjesto toga upotrijebite datum. Možete odabrati da li novčanik nastavlja skenirati svaki blok ili provjerava samo navedenu visinu.", "silent_payments_scan_from_date_or_blockheight": "Unesite visinu bloka koju želite započeti skeniranje za dolazna tiha plaćanja ili umjesto toga upotrijebite datum. Možete odabrati da li novčanik nastavlja skenirati svaki blok ili provjerava samo navedenu visinu.",
"silent_payments_scan_from_height": "Skeniranje s visine bloka", "silent_payments_scan_from_height": "Skeniranje s visine bloka",
"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",
"slidable": "Klizna", "slidable": "Klizna",
"sort_by": "Poredaj po", "sort_by": "Poredaj po",
"spend_key_private": "Spend key (privatni)", "spend_key_private": "Spend key (privatni)",
@ -857,4 +861,4 @@
"you_will_get": "Razmijeni u", "you_will_get": "Razmijeni u",
"you_will_send": "Razmijeni iz", "you_will_send": "Razmijeni iz",
"yy": "GG" "yy": "GG"
} }

View file

@ -651,11 +651,15 @@
"signTransaction": "Tandatangani Transaksi", "signTransaction": "Tandatangani Transaksi",
"signup_for_card_accept_terms": "Daftar untuk kartu dan terima syarat dan ketentuan.", "signup_for_card_accept_terms": "Daftar untuk kartu dan terima syarat dan ketentuan.",
"silent_payments": "Pembayaran diam", "silent_payments": "Pembayaran diam",
"silent_payments_always_scan": "Tetapkan pembayaran diam selalu pemindaian",
"silent_payments_disclaimer": "Alamat baru bukanlah identitas baru. Ini adalah penggunaan kembali identitas yang ada dengan label yang berbeda.", "silent_payments_disclaimer": "Alamat baru bukanlah identitas baru. Ini adalah penggunaan kembali identitas yang ada dengan label yang berbeda.",
"silent_payments_display_card": "Tunjukkan kartu pembayaran diam",
"silent_payments_scan_from_date": "Pindai dari tanggal", "silent_payments_scan_from_date": "Pindai dari tanggal",
"silent_payments_scan_from_date_or_blockheight": "Harap masukkan ketinggian blok yang ingin Anda mulai pemindaian untuk pembayaran diam yang masuk, atau, gunakan tanggal sebagai gantinya. Anda dapat memilih jika dompet terus memindai setiap blok, atau memeriksa hanya ketinggian yang ditentukan.", "silent_payments_scan_from_date_or_blockheight": "Harap masukkan ketinggian blok yang ingin Anda mulai pemindaian untuk pembayaran diam yang masuk, atau, gunakan tanggal sebagai gantinya. Anda dapat memilih jika dompet terus memindai setiap blok, atau memeriksa hanya ketinggian yang ditentukan.",
"silent_payments_scan_from_height": "Pindai dari Tinggi Blok", "silent_payments_scan_from_height": "Pindai dari Tinggi Blok",
"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",
"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)",
@ -860,4 +864,4 @@
"you_will_get": "Konversi ke", "you_will_get": "Konversi ke",
"you_will_send": "Konversi dari", "you_will_send": "Konversi dari",
"yy": "YY" "yy": "YY"
} }

View file

@ -650,11 +650,15 @@
"signTransaction": "Firma la transazione", "signTransaction": "Firma la transazione",
"signup_for_card_accept_terms": "Registrati per la carta e accetta i termini.", "signup_for_card_accept_terms": "Registrati per la carta e accetta i termini.",
"silent_payments": "Pagamenti silenziosi", "silent_payments": "Pagamenti silenziosi",
"silent_payments_always_scan": "Impostare i pagamenti silenziosi che scansionano sempre",
"silent_payments_disclaimer": "I nuovi indirizzi non sono nuove identità. È un riutilizzo di un'identità esistente con un'etichetta diversa.", "silent_payments_disclaimer": "I nuovi indirizzi non sono nuove identità. È un riutilizzo di un'identità esistente con un'etichetta diversa.",
"silent_payments_display_card": "Mostra la carta di pagamenti silenziosi",
"silent_payments_scan_from_date": "Scansionare dalla data", "silent_payments_scan_from_date": "Scansionare dalla data",
"silent_payments_scan_from_date_or_blockheight": "Inserisci l'altezza del blocco che si desidera iniziare la scansione per i pagamenti silenziosi in arrivo o, utilizza invece la data. Puoi scegliere se il portafoglio continua a scansionare ogni blocco o controlla solo l'altezza specificata.", "silent_payments_scan_from_date_or_blockheight": "Inserisci l'altezza del blocco che si desidera iniziare la scansione per i pagamenti silenziosi in arrivo o, utilizza invece la data. Puoi scegliere se il portafoglio continua a scansionare ogni blocco o controlla solo l'altezza specificata.",
"silent_payments_scan_from_height": "Scansione dall'altezza del blocco", "silent_payments_scan_from_height": "Scansione dall'altezza del blocco",
"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",
"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)",
@ -860,4 +864,4 @@
"you_will_get": "Converti a", "you_will_get": "Converti a",
"you_will_send": "Conveti da", "you_will_send": "Conveti da",
"yy": "YY" "yy": "YY"
} }

View file

@ -649,11 +649,15 @@
"signTransaction": "トランザクションに署名する", "signTransaction": "トランザクションに署名する",
"signup_for_card_accept_terms": "カードにサインアップして、利用規約に同意してください。", "signup_for_card_accept_terms": "カードにサインアップして、利用規約に同意してください。",
"silent_payments": "サイレント支払い", "silent_payments": "サイレント支払い",
"silent_payments_always_scan": "サイレント決済を常にスキャンします",
"silent_payments_disclaimer": "新しいアドレスは新しいアイデンティティではありません。これは、異なるラベルを持つ既存のアイデンティティの再利用です。", "silent_payments_disclaimer": "新しいアドレスは新しいアイデンティティではありません。これは、異なるラベルを持つ既存のアイデンティティの再利用です。",
"silent_payments_display_card": "サイレントペイメントカードを表示します",
"silent_payments_scan_from_date": "日付からスキャンします", "silent_payments_scan_from_date": "日付からスキャンします",
"silent_payments_scan_from_date_or_blockheight": "着信のサイレント決済のためにスキャンを開始するブロックの高さを入力するか、代わりに日付を使用してください。ウォレットがすべてのブロックをスキャンし続けるか、指定された高さのみをチェックするかどうかを選択できます。", "silent_payments_scan_from_date_or_blockheight": "着信のサイレント決済のためにスキャンを開始するブロックの高さを入力するか、代わりに日付を使用してください。ウォレットがすべてのブロックをスキャンし続けるか、指定された高さのみをチェックするかどうかを選択できます。",
"silent_payments_scan_from_height": "ブロックの高さからスキャンします", "silent_payments_scan_from_height": "ブロックの高さからスキャンします",
"silent_payments_scanned_tip": "チップをスキャンしました! (${tip})",
"silent_payments_scanning": "サイレントペイメントスキャン", "silent_payments_scanning": "サイレントペイメントスキャン",
"silent_payments_settings": "サイレントペイメント設定",
"slidable": "スライド可能", "slidable": "スライド可能",
"sort_by": "並び替え", "sort_by": "並び替え",
"spend_key_private": "キーを使う (プライベート)", "spend_key_private": "キーを使う (プライベート)",
@ -858,4 +862,4 @@
"you_will_get": "に変換", "you_will_get": "に変換",
"you_will_send": "から変換", "you_will_send": "から変換",
"yy": "YY" "yy": "YY"
} }

View file

@ -649,11 +649,15 @@
"signTransaction": "거래 서명", "signTransaction": "거래 서명",
"signup_for_card_accept_terms": "카드에 가입하고 약관에 동의합니다.", "signup_for_card_accept_terms": "카드에 가입하고 약관에 동의합니다.",
"silent_payments": "조용한 지불", "silent_payments": "조용한 지불",
"silent_payments_always_scan": "무음금을 항상 스캔합니다",
"silent_payments_disclaimer": "새로운 주소는 새로운 정체성이 아닙니다. 다른 레이블로 기존 신원을 재사용하는 것입니다.", "silent_payments_disclaimer": "새로운 주소는 새로운 정체성이 아닙니다. 다른 레이블로 기존 신원을 재사용하는 것입니다.",
"silent_payments_display_card": "사일런트 지불 카드 표시",
"silent_payments_scan_from_date": "날짜부터 스캔하십시오", "silent_payments_scan_from_date": "날짜부터 스캔하십시오",
"silent_payments_scan_from_date_or_blockheight": "들어오는 사일런트 결제를 위해 스캔을 시작하려는 블록 높이를 입력하거나 대신 날짜를 사용하십시오. 지갑이 모든 블록을 계속 스캔하는지 여부를 선택하거나 지정된 높이 만 확인할 수 있습니다.", "silent_payments_scan_from_date_or_blockheight": "들어오는 사일런트 결제를 위해 스캔을 시작하려는 블록 높이를 입력하거나 대신 날짜를 사용하십시오. 지갑이 모든 블록을 계속 스캔하는지 여부를 선택하거나 지정된 높이 만 확인할 수 있습니다.",
"silent_payments_scan_from_height": "블록 높이에서 스캔하십시오", "silent_payments_scan_from_height": "블록 높이에서 스캔하십시오",
"silent_payments_scanned_tip": "팁을 스캔했습니다! (${tip})",
"silent_payments_scanning": "조용한 지불 스캔", "silent_payments_scanning": "조용한 지불 스캔",
"silent_payments_settings": "조용한 지불 설정",
"slidable": "슬라이딩 가능", "slidable": "슬라이딩 가능",
"sort_by": "정렬 기준", "sort_by": "정렬 기준",
"spend_key_private": "지출 키 (은밀한)", "spend_key_private": "지출 키 (은밀한)",
@ -859,4 +863,4 @@
"you_will_send": "다음에서 변환", "you_will_send": "다음에서 변환",
"YY": "YY", "YY": "YY",
"yy": "YY" "yy": "YY"
} }

View file

@ -648,11 +648,15 @@
"signTransaction": "ငွေလွှဲဝင်ပါ။", "signTransaction": "ငွေလွှဲဝင်ပါ။",
"signup_for_card_accept_terms": "ကတ်အတွက် စာရင်းသွင်းပြီး စည်းကမ်းချက်များကို လက်ခံပါ။", "signup_for_card_accept_terms": "ကတ်အတွက် စာရင်းသွင်းပြီး စည်းကမ်းချက်များကို လက်ခံပါ။",
"silent_payments": "အသံတိတ်ငွေပေးချေမှု", "silent_payments": "အသံတိတ်ငွေပေးချေမှု",
"silent_payments_always_scan": "အမြဲတမ်း scanning အမြဲ scanning",
"silent_payments_disclaimer": "လိပ်စာအသစ်များသည်အထောက်အထားအသစ်များမဟုတ်ပါ။ ၎င်းသည်ကွဲပြားခြားနားသောတံဆိပ်ဖြင့်ရှိပြီးသားဝိသေသလက်ခဏာကိုပြန်လည်အသုံးပြုခြင်းဖြစ်သည်။", "silent_payments_disclaimer": "လိပ်စာအသစ်များသည်အထောက်အထားအသစ်များမဟုတ်ပါ။ ၎င်းသည်ကွဲပြားခြားနားသောတံဆိပ်ဖြင့်ရှိပြီးသားဝိသေသလက်ခဏာကိုပြန်လည်အသုံးပြုခြင်းဖြစ်သည်။",
"silent_payments_display_card": "အသံတိတ်ငွေပေးချေမှုကဒ်ကိုပြပါ",
"silent_payments_scan_from_date": "ရက်စွဲမှစကင်ဖတ်ပါ", "silent_payments_scan_from_date": "ရက်စွဲမှစကင်ဖတ်ပါ",
"silent_payments_scan_from_date_or_blockheight": "ကျေးဇူးပြု. သင်ဝင်လာသောအသံတိတ်ငွေပေးချေမှုအတွက်သင်စကင်ဖတ်စစ်ဆေးလိုသည့်အမြင့်ကိုဖြည့်ပါ။ သို့မဟုတ်နေ့စွဲကိုသုံးပါ။ Wallet သည်လုပ်ကွက်တိုင်းကိုဆက်လက်စကင်ဖတ်စစ်ဆေးပါကသို့မဟုတ်သတ်မှတ်ထားသောအမြင့်ကိုသာစစ်ဆေးပါကသင်ရွေးချယ်နိုင်သည်။", "silent_payments_scan_from_date_or_blockheight": "ကျေးဇူးပြု. သင်ဝင်လာသောအသံတိတ်ငွေပေးချေမှုအတွက်သင်စကင်ဖတ်စစ်ဆေးလိုသည့်အမြင့်ကိုဖြည့်ပါ။ သို့မဟုတ်နေ့စွဲကိုသုံးပါ။ Wallet သည်လုပ်ကွက်တိုင်းကိုဆက်လက်စကင်ဖတ်စစ်ဆေးပါကသို့မဟုတ်သတ်မှတ်ထားသောအမြင့်ကိုသာစစ်ဆေးပါကသင်ရွေးချယ်နိုင်သည်။",
"silent_payments_scan_from_height": "ပိတ်ပင်တားဆီးမှုအမြင့်ကနေ scan", "silent_payments_scan_from_height": "ပိတ်ပင်တားဆီးမှုအမြင့်ကနေ scan",
"silent_payments_scanned_tip": "အစွန်အဖျားမှ scan ဖတ်! (${tip})",
"silent_payments_scanning": "အသံတိတ်ငွေပေးချေမှု scanning", "silent_payments_scanning": "အသံတိတ်ငွေပေးချေမှု scanning",
"silent_payments_settings": "အသံတိတ်ငွေပေးချေမှုဆက်တင်များ",
"slidable": "လျှောချနိုင်သည်။", "slidable": "လျှောချနိုင်သည်။",
"sort_by": "အလိုက်စဥ်သည်", "sort_by": "အလိုက်စဥ်သည်",
"spend_key_private": "သော့သုံးရန် (သီးသန့်)", "spend_key_private": "သော့သုံးရန် (သီးသန့်)",
@ -774,7 +778,7 @@
"tx_rejected_dust_output_send_all": "Network စည်းမျဉ်းစည်းကမ်းများဖြင့် ပယ်ချ. ငွေပေးချေမှုသည် output output (ဖုန်မှုန့်) ဖြင့်ပယ်ချခဲ့သည်။ ဒင်္ဂါးပြားထိန်းချုပ်မှုအောက်တွင်ရွေးချယ်ထားသောဒင်္ဂါးများ၏လက်ကျန်ငွေကိုစစ်ဆေးပါ။", "tx_rejected_dust_output_send_all": "Network စည်းမျဉ်းစည်းကမ်းများဖြင့် ပယ်ချ. ငွေပေးချေမှုသည် output output (ဖုန်မှုန့်) ဖြင့်ပယ်ချခဲ့သည်။ ဒင်္ဂါးပြားထိန်းချုပ်မှုအောက်တွင်ရွေးချယ်ထားသောဒင်္ဂါးများ၏လက်ကျန်ငွေကိုစစ်ဆေးပါ။",
"tx_rejected_vout_negative": "ဒီငွေပေးငွေယူရဲ့အခကြေးငွေအတွက်ပေးဆောင်ဖို့လုံလောက်တဲ့ဟန်ချက်မလုံလောက်။ ဒင်္ဂါးပြား၏လက်ကျန်ငွေလက်ကျန်ငွေကိုစစ်ဆေးပါ။", "tx_rejected_vout_negative": "ဒီငွေပေးငွေယူရဲ့အခကြေးငွေအတွက်ပေးဆောင်ဖို့လုံလောက်တဲ့ဟန်ချက်မလုံလောက်။ ဒင်္ဂါးပြား၏လက်ကျန်ငွေလက်ကျန်ငွေကိုစစ်ဆေးပါ။",
"tx_wrong_balance_exception": "ဤငွေပမာဏကိုပေးပို့ရန်သင့်တွင် ${currency} မရှိပါ။", "tx_wrong_balance_exception": "ဤငွေပမာဏကိုပေးပို့ရန်သင့်တွင် ${currency} မရှိပါ။",
"tx_wrong_balance_with_amount_exception": "သင့်တွင်လုံလောက်မှုမရှိပါ${currency} ${amount}", "tx_wrong_balance_with_amount_exception": "သင့်တွင်လုံလောက်မှုမရှိပါ${currency} ${amount}",
"tx_zero_fee_exception": "0 ကြေးနှင့်အတူငွေပေးငွေယူပေးပို့လို့မရပါဘူး။ နှုန်းကိုတိုးမြှင့်ခြင်းသို့မဟုတ်နောက်ဆုံးခန့်မှန်းချက်များအတွက်သင်၏ connection ကိုစစ်ဆေးပါ။", "tx_zero_fee_exception": "0 ကြေးနှင့်အတူငွေပေးငွေယူပေးပို့လို့မရပါဘူး။ နှုန်းကိုတိုးမြှင့်ခြင်းသို့မဟုတ်နောက်ဆုံးခန့်မှန်းချက်များအတွက်သင်၏ connection ကိုစစ်ဆေးပါ။",
"unavailable_balance": "လက်ကျန်ငွေ မရရှိနိုင်ပါ။", "unavailable_balance": "လက်ကျန်ငွေ မရရှိနိုင်ပါ။",
"unavailable_balance_description": "မရရှိနိုင်သော လက်ကျန်ငွေ- ဤစုစုပေါင်းတွင် ဆိုင်းငံ့ထားသော ငွေပေးငွေယူများတွင် သော့ခတ်ထားသော ငွေကြေးများနှင့် သင်၏ coin ထိန်းချုပ်မှုဆက်တင်များတွင် သင် တက်ကြွစွာ အေးခဲထားသော ငွေများ ပါဝင်သည်။ သော့ခတ်ထားသော လက်ကျန်ငွေများကို ၎င်းတို့၏ သက်ဆိုင်ရာ ငွေပေးငွေယူများ ပြီးမြောက်သည်နှင့် တပြိုင်နက် ရရှိနိုင်မည်ဖြစ်ပြီး၊ အေးခဲထားသော လက်ကျန်များကို ၎င်းတို့အား ပြန်ဖြုတ်ရန် သင်ဆုံးဖြတ်သည်အထိ ငွေပေးငွေယူများအတွက် ဆက်လက်၍မရနိုင်ပါ။", "unavailable_balance_description": "မရရှိနိုင်သော လက်ကျန်ငွေ- ဤစုစုပေါင်းတွင် ဆိုင်းငံ့ထားသော ငွေပေးငွေယူများတွင် သော့ခတ်ထားသော ငွေကြေးများနှင့် သင်၏ coin ထိန်းချုပ်မှုဆက်တင်များတွင် သင် တက်ကြွစွာ အေးခဲထားသော ငွေများ ပါဝင်သည်။ သော့ခတ်ထားသော လက်ကျန်ငွေများကို ၎င်းတို့၏ သက်ဆိုင်ရာ ငွေပေးငွေယူများ ပြီးမြောက်သည်နှင့် တပြိုင်နက် ရရှိနိုင်မည်ဖြစ်ပြီး၊ အေးခဲထားသော လက်ကျန်များကို ၎င်းတို့အား ပြန်ဖြုတ်ရန် သင်ဆုံးဖြတ်သည်အထိ ငွေပေးငွေယူများအတွက် ဆက်လက်၍မရနိုင်ပါ။",
@ -857,4 +861,4 @@
"you_will_get": "သို့ပြောင်းပါ။", "you_will_get": "သို့ပြောင်းပါ။",
"you_will_send": "မှပြောင်းပါ။", "you_will_send": "မှပြောင်းပါ။",
"yy": "YY" "yy": "YY"
} }

View file

@ -648,11 +648,15 @@
"signTransaction": "Transactie ondertekenen", "signTransaction": "Transactie ondertekenen",
"signup_for_card_accept_terms": "Meld je aan voor de kaart en accepteer de voorwaarden.", "signup_for_card_accept_terms": "Meld je aan voor de kaart en accepteer de voorwaarden.",
"silent_payments": "Stille betalingen", "silent_payments": "Stille betalingen",
"silent_payments_always_scan": "Stel stille betalingen in het scannen",
"silent_payments_disclaimer": "Nieuwe adressen zijn geen nieuwe identiteiten. Het is een hergebruik van een bestaande identiteit met een ander label.", "silent_payments_disclaimer": "Nieuwe adressen zijn geen nieuwe identiteiten. Het is een hergebruik van een bestaande identiteit met een ander label.",
"silent_payments_display_card": "Toon stille betalingskaart",
"silent_payments_scan_from_date": "Scan vanaf datum", "silent_payments_scan_from_date": "Scan vanaf datum",
"silent_payments_scan_from_date_or_blockheight": "Voer de blokhoogte in die u wilt beginnen met scannen op inkomende stille betalingen, of gebruik in plaats daarvan de datum. U kunt kiezen of de portemonnee elk blok blijft scannen of alleen de opgegeven hoogte controleert.", "silent_payments_scan_from_date_or_blockheight": "Voer de blokhoogte in die u wilt beginnen met scannen op inkomende stille betalingen, of gebruik in plaats daarvan de datum. U kunt kiezen of de portemonnee elk blok blijft scannen of alleen de opgegeven hoogte controleert.",
"silent_payments_scan_from_height": "Scan van blokhoogte", "silent_payments_scan_from_height": "Scan van blokhoogte",
"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",
"slidable": "Verschuifbaar", "slidable": "Verschuifbaar",
"sort_by": "Sorteer op", "sort_by": "Sorteer op",
"spend_key_private": "Sleutel uitgeven (privaat)", "spend_key_private": "Sleutel uitgeven (privaat)",
@ -858,4 +862,4 @@
"you_will_get": "Converteren naar", "you_will_get": "Converteren naar",
"you_will_send": "Converteren van", "you_will_send": "Converteren van",
"yy": "JJ" "yy": "JJ"
} }

View file

@ -648,11 +648,15 @@
"signTransaction": "Podpisz transakcję", "signTransaction": "Podpisz transakcję",
"signup_for_card_accept_terms": "Zarejestruj się, aby otrzymać kartę i zaakceptuj warunki.", "signup_for_card_accept_terms": "Zarejestruj się, aby otrzymać kartę i zaakceptuj warunki.",
"silent_payments": "Ciche płatności", "silent_payments": "Ciche płatności",
"silent_payments_always_scan": "Ustaw ciche płatności zawsze skanowanie",
"silent_payments_disclaimer": "Nowe adresy nie są nową tożsamością. Jest to ponowne wykorzystanie istniejącej tożsamości z inną etykietą.", "silent_payments_disclaimer": "Nowe adresy nie są nową tożsamością. Jest to ponowne wykorzystanie istniejącej tożsamości z inną etykietą.",
"silent_payments_display_card": "Pokaż kartę Silent Payments",
"silent_payments_scan_from_date": "Skanuj z daty", "silent_payments_scan_from_date": "Skanuj z daty",
"silent_payments_scan_from_date_or_blockheight": "Wprowadź wysokość bloku, którą chcesz rozpocząć skanowanie w poszukiwaniu cichej płatności lub zamiast tego skorzystaj z daty. Możesz wybrać, czy portfel kontynuuje skanowanie każdego bloku, lub sprawdza tylko określoną wysokość.", "silent_payments_scan_from_date_or_blockheight": "Wprowadź wysokość bloku, którą chcesz rozpocząć skanowanie w poszukiwaniu cichej płatności lub zamiast tego skorzystaj z daty. Możesz wybrać, czy portfel kontynuuje skanowanie każdego bloku, lub sprawdza tylko określoną wysokość.",
"silent_payments_scan_from_height": "Skanuj z wysokości bloku", "silent_payments_scan_from_height": "Skanuj z wysokości bloku",
"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",
"slidable": "Przesuwne", "slidable": "Przesuwne",
"sort_by": "Sortuj według", "sort_by": "Sortuj według",
"spend_key_private": "Klucz prywatny", "spend_key_private": "Klucz prywatny",
@ -857,4 +861,4 @@
"you_will_get": "Konwertuj na", "you_will_get": "Konwertuj na",
"you_will_send": "Konwertuj z", "you_will_send": "Konwertuj z",
"yy": "RR" "yy": "RR"
} }

View file

@ -650,11 +650,15 @@
"signTransaction": "Assinar transação", "signTransaction": "Assinar transação",
"signup_for_card_accept_terms": "Cadastre-se no cartão e aceite os termos.", "signup_for_card_accept_terms": "Cadastre-se no cartão e aceite os termos.",
"silent_payments": "Pagamentos silenciosos", "silent_payments": "Pagamentos silenciosos",
"silent_payments_always_scan": "Defina pagamentos silenciosos sempre digitalizando",
"silent_payments_disclaimer": "Novos endereços não são novas identidades. É uma reutilização de uma identidade existente com um rótulo diferente.", "silent_payments_disclaimer": "Novos endereços não são novas identidades. É uma reutilização de uma identidade existente com um rótulo diferente.",
"silent_payments_display_card": "Mostrar cartão de pagamento silencioso",
"silent_payments_scan_from_date": "Escanear a partir da data", "silent_payments_scan_from_date": "Escanear a partir da data",
"silent_payments_scan_from_date_or_blockheight": "Por favor, insira a altura do bloco que deseja iniciar o escaneamento para obter pagamentos silenciosos ou use a data. Você pode escolher se a carteira continua escaneando cada bloco ou verifica apenas a altura especificada.", "silent_payments_scan_from_date_or_blockheight": "Por favor, insira a altura do bloco que deseja iniciar o escaneamento para obter pagamentos silenciosos ou use a data. Você pode escolher se a carteira continua escaneando cada bloco ou verifica apenas a altura especificada.",
"silent_payments_scan_from_height": "Escanear a partir da altura do bloco", "silent_payments_scan_from_height": "Escanear a partir da altura do bloco",
"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",
"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)",

View file

@ -649,11 +649,15 @@
"signTransaction": "Подписать транзакцию", "signTransaction": "Подписать транзакцию",
"signup_for_card_accept_terms": "Подпишитесь на карту и примите условия.", "signup_for_card_accept_terms": "Подпишитесь на карту и примите условия.",
"silent_payments": "Молчаливые платежи", "silent_payments": "Молчаливые платежи",
"silent_payments_always_scan": "Установить молчаливые платежи всегда сканирование",
"silent_payments_disclaimer": "Новые адреса не являются новыми личностями. Это повторное использование существующей идентичности с другой этикеткой.", "silent_payments_disclaimer": "Новые адреса не являются новыми личностями. Это повторное использование существующей идентичности с другой этикеткой.",
"silent_payments_display_card": "Показать бесшумную платежную карту",
"silent_payments_scan_from_date": "Сканирование с даты", "silent_payments_scan_from_date": "Сканирование с даты",
"silent_payments_scan_from_date_or_blockheight": "Пожалуйста, введите высоту блока, которую вы хотите начать сканирование для входящих молчаливых платежей, или вместо этого используйте дату. Вы можете выбрать, продолжает ли кошелек сканировать каждый блок или проверять только указанную высоту.", "silent_payments_scan_from_date_or_blockheight": "Пожалуйста, введите высоту блока, которую вы хотите начать сканирование для входящих молчаливых платежей, или вместо этого используйте дату. Вы можете выбрать, продолжает ли кошелек сканировать каждый блок или проверять только указанную высоту.",
"silent_payments_scan_from_height": "Сканирование с высоты блока", "silent_payments_scan_from_height": "Сканирование с высоты блока",
"silent_payments_scanned_tip": "Оканируется, чтобы чаевые! (${tip})",
"silent_payments_scanning": "Сканирование безмолвных платежей", "silent_payments_scanning": "Сканирование безмолвных платежей",
"silent_payments_settings": "Silent Payments Settings",
"slidable": "Скользящий", "slidable": "Скользящий",
"sort_by": "Сортировать по", "sort_by": "Сортировать по",
"spend_key_private": "Приватный ключ траты", "spend_key_private": "Приватный ключ траты",
@ -858,4 +862,4 @@
"you_will_get": "Конвертировать в", "you_will_get": "Конвертировать в",
"you_will_send": "Конвертировать из", "you_will_send": "Конвертировать из",
"yy": "ГГ" "yy": "ГГ"
} }

View file

@ -648,11 +648,15 @@
"signTransaction": "ลงนามในการทำธุรกรรม", "signTransaction": "ลงนามในการทำธุรกรรม",
"signup_for_card_accept_terms": "ลงทะเบียนสำหรับบัตรและยอมรับเงื่อนไข", "signup_for_card_accept_terms": "ลงทะเบียนสำหรับบัตรและยอมรับเงื่อนไข",
"silent_payments": "การชำระเงินเงียบ", "silent_payments": "การชำระเงินเงียบ",
"silent_payments_always_scan": "ตั้งค่าการชำระเงินแบบเงียบเสมอ",
"silent_payments_disclaimer": "ที่อยู่ใหม่ไม่ใช่ตัวตนใหม่ มันเป็นการใช้ซ้ำของตัวตนที่มีอยู่ด้วยฉลากที่แตกต่างกัน", "silent_payments_disclaimer": "ที่อยู่ใหม่ไม่ใช่ตัวตนใหม่ มันเป็นการใช้ซ้ำของตัวตนที่มีอยู่ด้วยฉลากที่แตกต่างกัน",
"silent_payments_display_card": "แสดงบัตร Silent Payments",
"silent_payments_scan_from_date": "สแกนตั้งแต่วันที่", "silent_payments_scan_from_date": "สแกนตั้งแต่วันที่",
"silent_payments_scan_from_date_or_blockheight": "โปรดป้อนความสูงของบล็อกที่คุณต้องการเริ่มการสแกนสำหรับการชำระเงินแบบเงียบ ๆ หรือใช้วันที่แทน คุณสามารถเลือกได้ว่ากระเป๋าเงินยังคงสแกนทุกบล็อกหรือตรวจสอบความสูงที่ระบุเท่านั้น", "silent_payments_scan_from_date_or_blockheight": "โปรดป้อนความสูงของบล็อกที่คุณต้องการเริ่มการสแกนสำหรับการชำระเงินแบบเงียบ ๆ หรือใช้วันที่แทน คุณสามารถเลือกได้ว่ากระเป๋าเงินยังคงสแกนทุกบล็อกหรือตรวจสอบความสูงที่ระบุเท่านั้น",
"silent_payments_scan_from_height": "สแกนจากความสูงของบล็อก", "silent_payments_scan_from_height": "สแกนจากความสูงของบล็อก",
"silent_payments_scanned_tip": "สแกนไปที่ปลาย! (${tip})",
"silent_payments_scanning": "การสแกนการชำระเงินแบบเงียบ", "silent_payments_scanning": "การสแกนการชำระเงินแบบเงียบ",
"silent_payments_settings": "การตั้งค่าการชำระเงินแบบเงียบ",
"slidable": "เลื่อนได้", "slidable": "เลื่อนได้",
"sort_by": "เรียงตาม", "sort_by": "เรียงตาม",
"spend_key_private": "คีย์จ่าย (ส่วนตัว)", "spend_key_private": "คีย์จ่าย (ส่วนตัว)",
@ -857,4 +861,4 @@
"you_will_get": "แปลงเป็น", "you_will_get": "แปลงเป็น",
"you_will_send": "แปลงจาก", "you_will_send": "แปลงจาก",
"yy": "ปี" "yy": "ปี"
} }

View file

@ -648,11 +648,15 @@
"signTransaction": "Mag-sign Transaksyon", "signTransaction": "Mag-sign Transaksyon",
"signup_for_card_accept_terms": "Mag -sign up para sa card at tanggapin ang mga termino.", "signup_for_card_accept_terms": "Mag -sign up para sa card at tanggapin ang mga termino.",
"silent_payments": "Tahimik na pagbabayad", "silent_payments": "Tahimik na pagbabayad",
"silent_payments_always_scan": "Itakda ang mga tahimik na pagbabayad na laging nag -scan",
"silent_payments_disclaimer": "Ang mga bagong address ay hindi mga bagong pagkakakilanlan. Ito ay isang muling paggamit ng isang umiiral na pagkakakilanlan na may ibang label.", "silent_payments_disclaimer": "Ang mga bagong address ay hindi mga bagong pagkakakilanlan. Ito ay isang muling paggamit ng isang umiiral na pagkakakilanlan na may ibang label.",
"silent_payments_display_card": "Ipakita ang Silent Payment Card",
"silent_payments_scan_from_date": "I -scan mula sa petsa", "silent_payments_scan_from_date": "I -scan mula sa petsa",
"silent_payments_scan_from_date_or_blockheight": "Mangyaring ipasok ang taas ng block na nais mong simulan ang pag -scan para sa papasok na tahimik na pagbabayad, o, gamitin ang petsa sa halip. Maaari kang pumili kung ang pitaka ay patuloy na pag -scan sa bawat bloke, o suriin lamang ang tinukoy na taas.", "silent_payments_scan_from_date_or_blockheight": "Mangyaring ipasok ang taas ng block na nais mong simulan ang pag -scan para sa papasok na tahimik na pagbabayad, o, gamitin ang petsa sa halip. Maaari kang pumili kung ang pitaka ay patuloy na pag -scan sa bawat bloke, o suriin lamang ang tinukoy na taas.",
"silent_payments_scan_from_height": "I -scan mula sa taas ng block", "silent_payments_scan_from_height": "I -scan mula sa taas ng block",
"silent_payments_scanned_tip": "Na -scan sa tip! (${tip})",
"silent_payments_scanning": "Tahimik na pag -scan ng mga pagbabayad", "silent_payments_scanning": "Tahimik na pag -scan ng mga pagbabayad",
"silent_payments_settings": "Mga setting ng tahimik na pagbabayad",
"slidable": "Slidable", "slidable": "Slidable",
"sort_by": "Pag -uri -uriin sa pamamagitan ng", "sort_by": "Pag -uri -uriin sa pamamagitan ng",
"spend_key_private": "Gumastos ng susi (pribado)", "spend_key_private": "Gumastos ng susi (pribado)",
@ -857,4 +861,4 @@
"you_will_get": "Mag -convert sa", "you_will_get": "Mag -convert sa",
"you_will_send": "I -convert mula sa", "you_will_send": "I -convert mula sa",
"yy": "YY" "yy": "YY"
} }

View file

@ -648,11 +648,15 @@
"signTransaction": "İşlem İmzala", "signTransaction": "İşlem İmzala",
"signup_for_card_accept_terms": "Kart için kaydol ve koşulları kabul et.", "signup_for_card_accept_terms": "Kart için kaydol ve koşulları kabul et.",
"silent_payments": "Sessiz ödemeler", "silent_payments": "Sessiz ödemeler",
"silent_payments_always_scan": "Sessiz ödemeleri her zaman tarama ayarlayın",
"silent_payments_disclaimer": "Yeni adresler yeni kimlikler değildir. Farklı bir etikete sahip mevcut bir kimliğin yeniden kullanımıdır.", "silent_payments_disclaimer": "Yeni adresler yeni kimlikler değildir. Farklı bir etikete sahip mevcut bir kimliğin yeniden kullanımıdır.",
"silent_payments_display_card": "Sessiz Ödeme Kartı Göster",
"silent_payments_scan_from_date": "Tarihten tarama", "silent_payments_scan_from_date": "Tarihten tarama",
"silent_payments_scan_from_date_or_blockheight": "Lütfen gelen sessiz ödemeler için taramaya başlamak istediğiniz blok yüksekliğini girin veya bunun yerine tarihi kullanın. Cüzdanın her bloğu taramaya devam edip etmediğini veya yalnızca belirtilen yüksekliği kontrol edip etmediğini seçebilirsiniz.", "silent_payments_scan_from_date_or_blockheight": "Lütfen gelen sessiz ödemeler için taramaya başlamak istediğiniz blok yüksekliğini girin veya bunun yerine tarihi kullanın. Cüzdanın her bloğu taramaya devam edip etmediğini veya yalnızca belirtilen yüksekliği kontrol edip etmediğini seçebilirsiniz.",
"silent_payments_scan_from_height": "Blok yüksekliğinden tarama", "silent_payments_scan_from_height": "Blok yüksekliğinden tarama",
"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ı",
"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)",
@ -857,4 +861,4 @@
"you_will_get": "Biçimine dönüştür:", "you_will_get": "Biçimine dönüştür:",
"you_will_send": "Biçiminden dönüştür:", "you_will_send": "Biçiminden dönüştür:",
"yy": "YY" "yy": "YY"
} }

View file

@ -649,11 +649,15 @@
"signTransaction": "Підписати транзакцію", "signTransaction": "Підписати транзакцію",
"signup_for_card_accept_terms": "Зареєструйтеся на картку та прийміть умови.", "signup_for_card_accept_terms": "Зареєструйтеся на картку та прийміть умови.",
"silent_payments": "Мовчазні платежі", "silent_payments": "Мовчазні платежі",
"silent_payments_always_scan": "Встановити мовчазні платежі завжди сканувати",
"silent_payments_disclaimer": "Нові адреси - це не нові ідентичності. Це повторне використання існуючої ідентичності з іншою етикеткою.", "silent_payments_disclaimer": "Нові адреси - це не нові ідентичності. Це повторне використання існуючої ідентичності з іншою етикеткою.",
"silent_payments_display_card": "Покажіть безшумну карту платежів",
"silent_payments_scan_from_date": "Сканувати з дати", "silent_payments_scan_from_date": "Сканувати з дати",
"silent_payments_scan_from_date_or_blockheight": "Введіть висоту блоку, яку ви хочете почати сканувати для вхідних мовчазних платежів, або скористайтеся датою замість цього. Ви можете вибрати, якщо гаманець продовжує сканувати кожен блок, або перевіряє лише вказану висоту.", "silent_payments_scan_from_date_or_blockheight": "Введіть висоту блоку, яку ви хочете почати сканувати для вхідних мовчазних платежів, або скористайтеся датою замість цього. Ви можете вибрати, якщо гаманець продовжує сканувати кожен блок, або перевіряє лише вказану висоту.",
"silent_payments_scan_from_height": "Сканування від висоти блоку", "silent_payments_scan_from_height": "Сканування від висоти блоку",
"silent_payments_scanned_tip": "Сканований на підказку! (${tip})",
"silent_payments_scanning": "Мовчазні платежі сканування", "silent_payments_scanning": "Мовчазні платежі сканування",
"silent_payments_settings": "Налаштування мовчазних платежів",
"slidable": "Розсувний", "slidable": "Розсувний",
"sort_by": "Сортувати за", "sort_by": "Сортувати за",
"spend_key_private": "Приватний ключ витрати", "spend_key_private": "Приватний ключ витрати",
@ -858,4 +862,4 @@
"you_will_get": "Конвертувати в", "you_will_get": "Конвертувати в",
"you_will_send": "Конвертувати з", "you_will_send": "Конвертувати з",
"yy": "YY" "yy": "YY"
} }

View file

@ -650,11 +650,15 @@
"signTransaction": "۔ﮟﯾﺮﮐ ﻂﺨﺘﺳﺩ ﺮﭘ ﻦﯾﺩ ﻦﯿﻟ", "signTransaction": "۔ﮟﯾﺮﮐ ﻂﺨﺘﺳﺩ ﺮﭘ ﻦﯾﺩ ﻦﯿﻟ",
"signup_for_card_accept_terms": "کارڈ کے لیے سائن اپ کریں اور شرائط کو قبول کریں۔", "signup_for_card_accept_terms": "کارڈ کے لیے سائن اپ کریں اور شرائط کو قبول کریں۔",
"silent_payments": "خاموش ادائیگی", "silent_payments": "خاموش ادائیگی",
"silent_payments_always_scan": "خاموش ادائیگی ہمیشہ اسکیننگ کریں",
"silent_payments_disclaimer": "نئے پتے نئی شناخت نہیں ہیں۔ یہ ایک مختلف لیبل کے ساتھ موجودہ شناخت کا دوبارہ استعمال ہے۔", "silent_payments_disclaimer": "نئے پتے نئی شناخت نہیں ہیں۔ یہ ایک مختلف لیبل کے ساتھ موجودہ شناخت کا دوبارہ استعمال ہے۔",
"silent_payments_display_card": "خاموش ادائیگی کارڈ دکھائیں",
"silent_payments_scan_from_date": "تاریخ سے اسکین کریں", "silent_payments_scan_from_date": "تاریخ سے اسکین کریں",
"silent_payments_scan_from_date_or_blockheight": "براہ کرم بلاک اونچائی میں داخل ہوں جس سے آپ آنے والی خاموش ادائیگیوں کے لئے اسکیننگ شروع کرنا چاہتے ہیں ، یا اس کے بجائے تاریخ کا استعمال کریں۔ آپ یہ منتخب کرسکتے ہیں کہ اگر پرس ہر بلاک کو اسکیننگ جاری رکھے ہوئے ہے ، یا صرف مخصوص اونچائی کی جانچ پڑتال کرتا ہے۔", "silent_payments_scan_from_date_or_blockheight": "براہ کرم بلاک اونچائی میں داخل ہوں جس سے آپ آنے والی خاموش ادائیگیوں کے لئے اسکیننگ شروع کرنا چاہتے ہیں ، یا اس کے بجائے تاریخ کا استعمال کریں۔ آپ یہ منتخب کرسکتے ہیں کہ اگر پرس ہر بلاک کو اسکیننگ جاری رکھے ہوئے ہے ، یا صرف مخصوص اونچائی کی جانچ پڑتال کرتا ہے۔",
"silent_payments_scan_from_height": "بلاک اونچائی سے اسکین کریں", "silent_payments_scan_from_height": "بلاک اونچائی سے اسکین کریں",
"silent_payments_scanned_tip": "نوکنے کے لئے اسکین! (${tip})",
"silent_payments_scanning": "خاموش ادائیگی اسکیننگ", "silent_payments_scanning": "خاموش ادائیگی اسکیننگ",
"silent_payments_settings": "خاموش ادائیگی کی ترتیبات",
"slidable": "سلائیڈ ایبل", "slidable": "سلائیڈ ایبل",
"sort_by": "ترتیب دیں", "sort_by": "ترتیب دیں",
"spend_key_private": "خرچ کی کلید (نجی)", "spend_key_private": "خرچ کی کلید (نجی)",
@ -859,4 +863,4 @@
"you_will_get": "میں تبدیل کریں۔", "you_will_get": "میں تبدیل کریں۔",
"you_will_send": "سے تبدیل کریں۔", "you_will_send": "سے تبدیل کریں۔",
"yy": "YY" "yy": "YY"
} }

View file

@ -649,11 +649,15 @@
"signTransaction": "Wole Idunadura", "signTransaction": "Wole Idunadura",
"signup_for_card_accept_terms": "Ẹ f'orúkọ sílẹ̀ láti gba káàdì àti àjọrò.", "signup_for_card_accept_terms": "Ẹ f'orúkọ sílẹ̀ láti gba káàdì àti àjọrò.",
"silent_payments": "Awọn sisanwo ipalọlọ", "silent_payments": "Awọn sisanwo ipalọlọ",
"silent_payments_always_scan": "Ṣeto awọn sisanwo ipalọlọ nigbagbogbo n ṣatunṣe",
"silent_payments_disclaimer": "Awọn adirẹsi tuntun kii ṣe awọn idanimọ tuntun. O jẹ yiyan ti idanimọ ti o wa pẹlu aami oriṣiriṣi.", "silent_payments_disclaimer": "Awọn adirẹsi tuntun kii ṣe awọn idanimọ tuntun. O jẹ yiyan ti idanimọ ti o wa pẹlu aami oriṣiriṣi.",
"silent_payments_display_card": "Ṣafihan kaadi isanwo ti o dakẹ",
"silent_payments_scan_from_date": "Scan lati ọjọ", "silent_payments_scan_from_date": "Scan lati ọjọ",
"silent_payments_scan_from_date_or_blockheight": "Jọwọ tẹ giga idibo ti o fẹ bẹrẹ ọlọjẹ fun awọn sisanwo ipalọlọ, tabi, lo ọjọ dipo. O le yan ti apamọwọ naa tẹsiwaju nṣapẹẹrẹ gbogbo bulọọki, tabi ṣayẹwo nikan giga ti o sọ tẹlẹ.", "silent_payments_scan_from_date_or_blockheight": "Jọwọ tẹ giga idibo ti o fẹ bẹrẹ ọlọjẹ fun awọn sisanwo ipalọlọ, tabi, lo ọjọ dipo. O le yan ti apamọwọ naa tẹsiwaju nṣapẹẹrẹ gbogbo bulọọki, tabi ṣayẹwo nikan giga ti o sọ tẹlẹ.",
"silent_payments_scan_from_height": "Scan lati Iga Iga", "silent_payments_scan_from_height": "Scan lati Iga Iga",
"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ẹ",
"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)",
@ -858,4 +862,4 @@
"you_will_get": "Ṣe pàṣípààrọ̀ sí", "you_will_get": "Ṣe pàṣípààrọ̀ sí",
"you_will_send": "Ṣe pàṣípààrọ̀ láti", "you_will_send": "Ṣe pàṣípààrọ̀ láti",
"yy": "Ọd" "yy": "Ọd"
} }

View file

@ -648,11 +648,15 @@
"signTransaction": "签署交易", "signTransaction": "签署交易",
"signup_for_card_accept_terms": "注册卡并接受条款。", "signup_for_card_accept_terms": "注册卡并接受条款。",
"silent_payments": "无声付款", "silent_payments": "无声付款",
"silent_payments_always_scan": "设置无声付款总是扫描",
"silent_payments_disclaimer": "新地址不是新的身份。这是重复使用具有不同标签的现有身份。", "silent_payments_disclaimer": "新地址不是新的身份。这是重复使用具有不同标签的现有身份。",
"silent_payments_display_card": "显示无声支付卡",
"silent_payments_scan_from_date": "从日期开始扫描", "silent_payments_scan_from_date": "从日期开始扫描",
"silent_payments_scan_from_date_or_blockheight": "请输入您要开始扫描输入静音付款的块高度,或者使用日期。您可以选择钱包是否继续扫描每个块,或仅检查指定的高度。", "silent_payments_scan_from_date_or_blockheight": "请输入您要开始扫描输入静音付款的块高度,或者使用日期。您可以选择钱包是否继续扫描每个块,或仅检查指定的高度。",
"silent_payments_scan_from_height": "从块高度扫描", "silent_payments_scan_from_height": "从块高度扫描",
"silent_payments_scanned_tip": "扫描到小费! (${tip})",
"silent_payments_scanning": "无声付款扫描", "silent_payments_scanning": "无声付款扫描",
"silent_payments_settings": "无声付款设置",
"slidable": "可滑动", "slidable": "可滑动",
"sort_by": "排序方式", "sort_by": "排序方式",
"spend_key_private": "Spend 密钥 (私钥)", "spend_key_private": "Spend 密钥 (私钥)",
@ -857,4 +861,4 @@
"you_will_get": "转换到", "you_will_get": "转换到",
"you_will_send": "转换自", "you_will_send": "转换自",
"yy": "YY" "yy": "YY"
} }

View file

@ -181,7 +181,8 @@ abstract class Bitcoin {
List<Unspent> getUnspents(Object wallet); List<Unspent> getUnspents(Object wallet);
Future<void> updateUnspents(Object wallet); Future<void> updateUnspents(Object wallet);
WalletService createBitcoinWalletService(Box<WalletInfo> walletInfoSource, Box<UnspentCoinsInfo> unspentCoinSource); WalletService createBitcoinWalletService(
Box<WalletInfo> walletInfoSource, Box<UnspentCoinsInfo> unspentCoinSource, bool alwaysScan);
WalletService createLitecoinWalletService(Box<WalletInfo> walletInfoSource, Box<UnspentCoinsInfo> unspentCoinSource); WalletService createLitecoinWalletService(Box<WalletInfo> walletInfoSource, Box<UnspentCoinsInfo> unspentCoinSource);
TransactionPriority getBitcoinTransactionPriorityMedium(); TransactionPriority getBitcoinTransactionPriorityMedium();
TransactionPriority getBitcoinTransactionPriorityCustom(); TransactionPriority getBitcoinTransactionPriorityCustom();