mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-23 12:09:43 +00:00
feat: sync fixes, sp settings
This commit is contained in:
parent
8b5ab79d29
commit
e72ed496ff
45 changed files with 460 additions and 153 deletions
|
@ -40,23 +40,26 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store {
|
|||
String? passphrase,
|
||||
List<BitcoinSilentPaymentAddressRecord>? initialSilentAddresses,
|
||||
int initialSilentAddressIndex = 0,
|
||||
bool? alwaysScan,
|
||||
}) : super(
|
||||
mnemonic: mnemonic,
|
||||
passphrase: passphrase,
|
||||
xpub: xpub,
|
||||
password: password,
|
||||
walletInfo: walletInfo,
|
||||
unspentCoinsInfo: unspentCoinsInfo,
|
||||
networkType: networkParam == null
|
||||
? bitcoin.bitcoin
|
||||
: networkParam == BitcoinNetwork.mainnet
|
||||
? bitcoin.bitcoin
|
||||
: bitcoin.testnet,
|
||||
initialAddresses: initialAddresses,
|
||||
initialBalance: initialBalance,
|
||||
seedBytes: seedBytes,
|
||||
currency:
|
||||
networkParam == BitcoinNetwork.testnet ? CryptoCurrency.tbtc : CryptoCurrency.btc) {
|
||||
mnemonic: mnemonic,
|
||||
passphrase: passphrase,
|
||||
xpub: xpub,
|
||||
password: password,
|
||||
walletInfo: walletInfo,
|
||||
unspentCoinsInfo: unspentCoinsInfo,
|
||||
networkType: networkParam == null
|
||||
? bitcoin.bitcoin
|
||||
: networkParam == BitcoinNetwork.mainnet
|
||||
? bitcoin.bitcoin
|
||||
: bitcoin.testnet,
|
||||
initialAddresses: initialAddresses,
|
||||
initialBalance: initialBalance,
|
||||
seedBytes: seedBytes,
|
||||
currency:
|
||||
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)
|
||||
// the sideHd derivation path = m/84'/0'/0'/1 (account 1, index unspecified here)
|
||||
// String derivationPath = walletInfo.derivationInfo!.derivationPath!;
|
||||
|
@ -133,6 +136,7 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store {
|
|||
required WalletInfo walletInfo,
|
||||
required Box<UnspentCoinsInfo> unspentCoinsInfo,
|
||||
required String password,
|
||||
required bool alwaysScan,
|
||||
}) async {
|
||||
final network = walletInfo.network != null
|
||||
? BasedUtxoNetwork.fromName(walletInfo.network!)
|
||||
|
@ -181,6 +185,7 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store {
|
|||
initialChangeAddressIndex: snp.changeAddressIndex,
|
||||
addressPageType: snp.addressPageType,
|
||||
networkParam: network,
|
||||
alwaysScan: alwaysScan,
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -19,10 +19,11 @@ class BitcoinWalletService extends WalletService<
|
|||
BitcoinRestoreWalletFromSeedCredentials,
|
||||
BitcoinRestoreWalletFromWIFCredentials,
|
||||
BitcoinRestoreWalletFromHardware> {
|
||||
BitcoinWalletService(this.walletInfoSource, this.unspentCoinsInfoSource);
|
||||
BitcoinWalletService(this.walletInfoSource, this.unspentCoinsInfoSource, this.alwaysScan);
|
||||
|
||||
final Box<WalletInfo> walletInfoSource;
|
||||
final Box<UnspentCoinsInfo> unspentCoinsInfoSource;
|
||||
final bool alwaysScan;
|
||||
|
||||
@override
|
||||
WalletType getType() => WalletType.bitcoin;
|
||||
|
@ -55,20 +56,24 @@ class BitcoinWalletService extends WalletService<
|
|||
.firstWhereOrNull((info) => info.id == WalletBase.idFor(name, getType()))!;
|
||||
try {
|
||||
final wallet = await BitcoinWalletBase.open(
|
||||
password: password,
|
||||
name: name,
|
||||
walletInfo: walletInfo,
|
||||
unspentCoinsInfo: unspentCoinsInfoSource);
|
||||
password: password,
|
||||
name: name,
|
||||
walletInfo: walletInfo,
|
||||
unspentCoinsInfo: unspentCoinsInfoSource,
|
||||
alwaysScan: alwaysScan,
|
||||
);
|
||||
await wallet.init();
|
||||
saveBackup(name);
|
||||
return wallet;
|
||||
} catch (_) {
|
||||
await restoreWalletFilesFromBackup(name);
|
||||
final wallet = await BitcoinWalletBase.open(
|
||||
password: password,
|
||||
name: name,
|
||||
walletInfo: walletInfo,
|
||||
unspentCoinsInfo: unspentCoinsInfoSource);
|
||||
password: password,
|
||||
name: name,
|
||||
walletInfo: walletInfo,
|
||||
unspentCoinsInfo: unspentCoinsInfoSource,
|
||||
alwaysScan: alwaysScan,
|
||||
);
|
||||
await wallet.init();
|
||||
return wallet;
|
||||
}
|
||||
|
@ -87,10 +92,12 @@ class BitcoinWalletService extends WalletService<
|
|||
final currentWalletInfo = walletInfoSource.values
|
||||
.firstWhereOrNull((info) => info.id == WalletBase.idFor(currentName, getType()))!;
|
||||
final currentWallet = await BitcoinWalletBase.open(
|
||||
password: password,
|
||||
name: currentName,
|
||||
walletInfo: currentWalletInfo,
|
||||
unspentCoinsInfo: unspentCoinsInfoSource);
|
||||
password: password,
|
||||
name: currentName,
|
||||
walletInfo: currentWalletInfo,
|
||||
unspentCoinsInfo: unspentCoinsInfoSource,
|
||||
alwaysScan: alwaysScan,
|
||||
);
|
||||
|
||||
await currentWallet.renameWalletFiles(newName);
|
||||
await saveBackup(newName);
|
||||
|
@ -105,12 +112,13 @@ class BitcoinWalletService extends WalletService<
|
|||
@override
|
||||
Future<BitcoinWallet> restoreFromHardwareWallet(BitcoinRestoreWalletFromHardware credentials,
|
||||
{bool? isTestnet}) async {
|
||||
|
||||
final network = isTestnet == true ? BitcoinNetwork.testnet : BitcoinNetwork.mainnet;
|
||||
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,
|
||||
walletInfo: credentials.walletInfo!,
|
||||
unspentCoinsInfo: unspentCoinsInfoSource,
|
||||
|
@ -123,7 +131,7 @@ class BitcoinWalletService extends WalletService<
|
|||
|
||||
@override
|
||||
Future<BitcoinWallet> restoreFromKeys(BitcoinRestoreWalletFromWIFCredentials credentials,
|
||||
{bool? isTestnet}) async =>
|
||||
{bool? isTestnet}) async =>
|
||||
throw UnimplementedError();
|
||||
|
||||
@override
|
||||
|
|
|
@ -54,20 +54,21 @@ const int TWEAKS_COUNT = 25;
|
|||
abstract class ElectrumWalletBase
|
||||
extends WalletBase<ElectrumBalance, ElectrumTransactionHistory, ElectrumTransactionInfo>
|
||||
with Store {
|
||||
ElectrumWalletBase(
|
||||
{required String password,
|
||||
required WalletInfo walletInfo,
|
||||
required Box<UnspentCoinsInfo> unspentCoinsInfo,
|
||||
required this.networkType,
|
||||
String? xpub,
|
||||
String? mnemonic,
|
||||
Uint8List? seedBytes,
|
||||
this.passphrase,
|
||||
List<BitcoinAddressRecord>? initialAddresses,
|
||||
ElectrumClient? electrumClient,
|
||||
ElectrumBalance? initialBalance,
|
||||
CryptoCurrency? currency})
|
||||
: accountHD =
|
||||
ElectrumWalletBase({
|
||||
required String password,
|
||||
required WalletInfo walletInfo,
|
||||
required Box<UnspentCoinsInfo> unspentCoinsInfo,
|
||||
required this.networkType,
|
||||
String? xpub,
|
||||
String? mnemonic,
|
||||
Uint8List? seedBytes,
|
||||
this.passphrase,
|
||||
List<BitcoinAddressRecord>? initialAddresses,
|
||||
ElectrumClient? electrumClient,
|
||||
ElectrumBalance? initialBalance,
|
||||
CryptoCurrency? currency,
|
||||
this.alwaysScan,
|
||||
}) : accountHD =
|
||||
getAccountHDWallet(currency, networkType, seedBytes, xpub, walletInfo.derivationInfo),
|
||||
syncStatus = NotConnectedSyncStatus(),
|
||||
_password = password,
|
||||
|
@ -96,13 +97,20 @@ abstract class ElectrumWalletBase
|
|||
transactionHistory = ElectrumTransactionHistory(walletInfo: walletInfo, password: password);
|
||||
|
||||
reaction((_) => syncStatus, (SyncStatus syncStatus) {
|
||||
if (syncStatus is! AttemptingSyncStatus)
|
||||
if (syncStatus is! AttemptingSyncStatus && syncStatus is! SyncedTipSyncStatus)
|
||||
silentPaymentsScanningActive = syncStatus is SyncingSyncStatus;
|
||||
|
||||
if (syncStatus is NotConnectedSyncStatus) {
|
||||
// Needs to re-subscribe to all scripthashes when reconnected
|
||||
_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) =>
|
||||
inputsCount * 68 + outputsCounts * 34 + 10;
|
||||
|
||||
bool? alwaysScan;
|
||||
|
||||
final bitcoin.HDWallet accountHD;
|
||||
final String? _mnemonic;
|
||||
|
||||
|
@ -192,7 +202,13 @@ abstract class ElectrumWalletBase
|
|||
silentPaymentsScanningActive = 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);
|
||||
}
|
||||
} else {
|
||||
|
@ -245,6 +261,12 @@ abstract class ElectrumWalletBase
|
|||
@action
|
||||
Future<void> _setListeners(int height, {int? chainTipParam, bool? doSingleScan}) async {
|
||||
final chainTip = chainTipParam ?? await getCurrentChainTip();
|
||||
|
||||
if (chainTip == height) {
|
||||
syncStatus = NotConnectedSyncStatus();
|
||||
return;
|
||||
}
|
||||
|
||||
syncStatus = AttemptingSyncStatus();
|
||||
|
||||
if (_isolate != null) {
|
||||
|
@ -416,10 +438,9 @@ abstract class ElectrumWalletBase
|
|||
try {
|
||||
syncStatus = ConnectingSyncStatus();
|
||||
|
||||
electrumClient.onConnectionStatusChange = null;
|
||||
await electrumClient.close();
|
||||
|
||||
await Timer(Duration(seconds: differentNode ? 0 : 10), () async {
|
||||
await Timer(Duration(seconds: differentNode ? 0 : 15), () async {
|
||||
electrumClient.onConnectionStatusChange = (bool isConnected) async {
|
||||
if (syncStatus is SyncingSyncStatus) return;
|
||||
|
||||
|
@ -716,7 +737,6 @@ abstract class ElectrumWalletBase
|
|||
|
||||
// Still has inputs to spend before failing
|
||||
if (!spendingAllCoins) {
|
||||
outputs.removeLast();
|
||||
return estimateTxForAmount(
|
||||
credentialsAmount,
|
||||
outputs,
|
||||
|
@ -760,10 +780,7 @@ abstract class ElectrumWalletBase
|
|||
if (spendingAllCoins) {
|
||||
throw BitcoinTransactionWrongBalanceException();
|
||||
} else {
|
||||
if (amountLeftForChangeAndFee > fee) {
|
||||
outputs.removeLast();
|
||||
}
|
||||
|
||||
outputs.removeLast();
|
||||
return estimateTxForAmount(
|
||||
credentialsAmount,
|
||||
outputs,
|
||||
|
@ -1740,6 +1757,10 @@ abstract class ElectrumWalletBase
|
|||
if (_currentChainTip != null && _currentChainTip! > 0 && walletInfo.restoreHeight == 0) {
|
||||
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) {
|
||||
scanData.sendPort.send(SyncResponse(syncHeight, SyncedSyncStatus()));
|
||||
scanData.sendPort.send(SyncResponse(
|
||||
syncHeight,
|
||||
SyncedTipSyncStatus(scanData.chainTip),
|
||||
));
|
||||
await tweaksSubscription!.close();
|
||||
}
|
||||
});
|
||||
|
|
|
@ -375,7 +375,7 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
|
|||
}
|
||||
|
||||
silentAddresses.forEach((addressRecord) {
|
||||
if (addressRecord.type != SilentPaymentsAddresType.p2sp) {
|
||||
if (addressRecord.type != SilentPaymentsAddresType.p2sp || addressRecord.isHidden) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,12 @@ class SyncedSyncStatus extends SyncStatus {
|
|||
double progress() => 1.0;
|
||||
}
|
||||
|
||||
class SyncedTipSyncStatus extends SyncedSyncStatus {
|
||||
SyncedTipSyncStatus(this.tip);
|
||||
|
||||
final int tip;
|
||||
}
|
||||
|
||||
class SyncronizingSyncStatus extends SyncStatus {
|
||||
@override
|
||||
double progress() => 0.0;
|
||||
|
|
|
@ -211,8 +211,8 @@ class CWBitcoin extends Bitcoin {
|
|||
}
|
||||
|
||||
WalletService createBitcoinWalletService(
|
||||
Box<WalletInfo> walletInfoSource, Box<UnspentCoinsInfo> unspentCoinSource) {
|
||||
return BitcoinWalletService(walletInfoSource, unspentCoinSource);
|
||||
Box<WalletInfo> walletInfoSource, Box<UnspentCoinsInfo> unspentCoinSource, bool alwaysScan) {
|
||||
return BitcoinWalletService(walletInfoSource, unspentCoinSource, alwaysScan);
|
||||
}
|
||||
|
||||
WalletService createLitecoinWalletService(
|
||||
|
|
|
@ -8,6 +8,10 @@ String syncStatusTitle(SyncStatus syncStatus) {
|
|||
: S.current.Blocks_remaining('${syncStatus.blocksLeft}');
|
||||
}
|
||||
|
||||
if (syncStatus is SyncedTipSyncStatus) {
|
||||
return S.current.silent_payments_scanned_tip(syncStatus.tip.toString());
|
||||
}
|
||||
|
||||
if (syncStatus is SyncedSyncStatus) {
|
||||
return S.current.sync_status_syncronized;
|
||||
}
|
||||
|
|
25
lib/di.dart
25
lib/di.dart
|
@ -26,9 +26,11 @@ import 'package:cake_wallet/entities/contact.dart';
|
|||
import 'package:cake_wallet/entities/contact_record.dart';
|
||||
import 'package:cake_wallet/entities/exchange_api_mode.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/tron/tron.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:cake_wallet/entities/qr_view_data.dart';
|
||||
import 'package:cake_wallet/entities/template.dart';
|
||||
|
@ -331,8 +333,7 @@ Future<void> setup({
|
|||
getIt.registerSingleton<ExchangeTemplateStore>(
|
||||
ExchangeTemplateStore(templateSource: _exchangeTemplates));
|
||||
getIt.registerSingleton<YatStore>(
|
||||
YatStore(appStore: getIt.get<AppStore>(), secureStorage: getIt.get<SecureStorage>())
|
||||
..init());
|
||||
YatStore(appStore: getIt.get<AppStore>(), secureStorage: getIt.get<SecureStorage>())..init());
|
||||
getIt.registerSingleton<AnonpayTransactionsStore>(
|
||||
AnonpayTransactionsStore(anonpayInvoiceInfoSource: _anonpayInvoiceInfoSource));
|
||||
|
||||
|
@ -745,6 +746,9 @@ Future<void> setup({
|
|||
return DisplaySettingsViewModel(getIt.get<SettingsStore>());
|
||||
});
|
||||
|
||||
getIt.registerFactory(() =>
|
||||
SilentPaymentsSettingsViewModel(getIt.get<SettingsStore>(), getIt.get<AppStore>().wallet!));
|
||||
|
||||
getIt.registerFactory(() {
|
||||
return PrivacySettingsViewModel(getIt.get<SettingsStore>(), getIt.get<AppStore>().wallet!);
|
||||
});
|
||||
|
@ -806,6 +810,9 @@ Future<void> setup({
|
|||
|
||||
getIt.registerFactory(() => DisplaySettingsPage(getIt.get<DisplaySettingsViewModel>()));
|
||||
|
||||
getIt.registerFactory(
|
||||
() => SilentPaymentsSettingsPage(getIt.get<SilentPaymentsSettingsViewModel>()));
|
||||
|
||||
getIt.registerFactory(() => OtherSettingsPage(getIt.get<OtherSettingsViewModel>()));
|
||||
|
||||
getIt.registerFactory(() => NanoChangeRepPage(
|
||||
|
@ -889,7 +896,11 @@ Future<void> setup({
|
|||
case WalletType.monero:
|
||||
return monero!.createMoneroWalletService(_walletInfoSource, _unspentCoinsInfoSource);
|
||||
case WalletType.bitcoin:
|
||||
return bitcoin!.createBitcoinWalletService(_walletInfoSource, _unspentCoinsInfoSource);
|
||||
return bitcoin!.createBitcoinWalletService(
|
||||
_walletInfoSource,
|
||||
_unspentCoinsInfoSource,
|
||||
getIt.get<SettingsStore>().silentPaymentsAlwaysScan,
|
||||
);
|
||||
case WalletType.litecoin:
|
||||
return bitcoin!.createLitecoinWalletService(_walletInfoSource, _unspentCoinsInfoSource);
|
||||
case WalletType.ethereum:
|
||||
|
@ -987,8 +998,8 @@ Future<void> setup({
|
|||
|
||||
getIt.registerFactory(() => BackupPage(getIt.get<BackupViewModel>()));
|
||||
|
||||
getIt.registerFactory(() =>
|
||||
EditBackupPasswordViewModel(getIt.get<SecureStorage>(), getIt.get<SecretStore>()));
|
||||
getIt.registerFactory(
|
||||
() => EditBackupPasswordViewModel(getIt.get<SecureStorage>(), getIt.get<SecretStore>()));
|
||||
|
||||
getIt.registerFactory(() => EditBackupPasswordPage(getIt.get<EditBackupPasswordViewModel>()));
|
||||
|
||||
|
@ -1036,8 +1047,8 @@ Future<void> setup({
|
|||
|
||||
getIt.registerFactory(() => SupportPage(getIt.get<SupportViewModel>()));
|
||||
|
||||
getIt.registerFactory(() => SupportChatPage(getIt.get<SupportViewModel>(),
|
||||
secureStorage: getIt.get<SecureStorage>()));
|
||||
getIt.registerFactory(() =>
|
||||
SupportChatPage(getIt.get<SupportViewModel>(), secureStorage: getIt.get<SecureStorage>()));
|
||||
|
||||
getIt.registerFactory(() => SupportOtherLinksPage(getIt.get<SupportViewModel>()));
|
||||
|
||||
|
|
|
@ -44,6 +44,8 @@ class PreferencesKey {
|
|||
static const polygonTransactionPriority = 'current_fee_priority_polygon';
|
||||
static const bitcoinCashTransactionPriority = 'current_fee_priority_bitcoin_cash';
|
||||
static const customBitcoinFeeRate = 'custom_electrum_fee_rate';
|
||||
static const silentPaymentsCardDisplay = 'silentPaymentsCardDisplay';
|
||||
static const silentPaymentsAlwaysScan = 'silentPaymentsAlwaysScan';
|
||||
static const shouldShowReceiveWarning = 'should_show_receive_warning';
|
||||
static const shouldShowYatPopup = 'should_show_yat_popup';
|
||||
static const shouldShowRepWarning = 'should_show_rep_warning';
|
||||
|
|
|
@ -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/privacy_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/trocador_providers_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),
|
||||
onWillPop: () async => false));
|
||||
|
||||
case Routes.silentPaymentsSettings:
|
||||
return CupertinoPageRoute<void>(
|
||||
fullscreenDialog: true, builder: (_) => getIt.get<SilentPaymentsSettingsPage>());
|
||||
|
||||
case Routes.connectionSync:
|
||||
return CupertinoPageRoute<void>(
|
||||
fullscreenDialog: true, builder: (_) => getIt.get<ConnectionSyncPage>());
|
||||
|
|
|
@ -81,6 +81,7 @@ class Routes {
|
|||
static const ioniaMoreOptionsPage = '/ionia_more_options_page';
|
||||
static const ioniaCustomRedeemPage = '/ionia_custom_redeem_page';
|
||||
static const webViewPage = '/web_view_page';
|
||||
static const silentPaymentsSettings = '/silent_payments_settings';
|
||||
static const connectionSync = '/connection_sync_page';
|
||||
static const securityBackupPage = '/security_and_backup_page';
|
||||
static const privacyPage = '/privacy_page';
|
||||
|
|
|
@ -247,71 +247,78 @@ class CryptoBalanceWidget extends StatelessWidget {
|
|||
);
|
||||
},
|
||||
),
|
||||
if (dashboardViewModel.hasSilentPayments) ...[
|
||||
SizedBox(height: 10),
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(16, 0, 16, 8),
|
||||
child: DashBoardRoundedCardWidget(
|
||||
customBorder: 30,
|
||||
title: S.of(context).silent_payments,
|
||||
subTitle: S.of(context).enable_silent_payments_scanning,
|
||||
hint: Column(
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: () => launchUrl(
|
||||
// TODO: Update URL
|
||||
Uri.https("guides.cakewallet.com"),
|
||||
mode: LaunchMode.externalApplication,
|
||||
),
|
||||
child: Row(
|
||||
Observer(builder: (context) {
|
||||
return Column(
|
||||
children: [
|
||||
if (dashboardViewModel.showSilentPaymentsCard) ...[
|
||||
SizedBox(height: 10),
|
||||
Padding(
|
||||
padding: const EdgeInsets.fromLTRB(16, 0, 16, 8),
|
||||
child: DashBoardRoundedCardWidget(
|
||||
customBorder: 30,
|
||||
title: S.of(context).silent_payments,
|
||||
subTitle: S.of(context).enable_silent_payments_scanning,
|
||||
hint: Column(
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
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,
|
||||
GestureDetector(
|
||||
behavior: HitTestBehavior.opaque,
|
||||
onTap: () => launchUrl(
|
||||
// TODO: Update URL
|
||||
Uri.https("guides.cakewallet.com"),
|
||||
mode: LaunchMode.externalApplication,
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
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(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 4),
|
||||
child: Icon(Icons.help_outline,
|
||||
size: 16,
|
||||
color: Theme.of(context)
|
||||
.extension<BalancePageTheme>()!
|
||||
.labelTextColor),
|
||||
Observer(
|
||||
builder: (_) => StandardSwitch(
|
||||
value: dashboardViewModel.silentPaymentsScanningActive,
|
||||
onTaped: () => _toggleSilentPaymentsScanning(context),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
Observer(
|
||||
builder: (_) => StandardSwitch(
|
||||
value: dashboardViewModel.silentPaymentsScanningActive,
|
||||
onTaped: () => _toggleSilentPaymentsScanning(context),
|
||||
),
|
||||
)
|
||||
],
|
||||
],
|
||||
),
|
||||
onTap: () => _toggleSilentPaymentsScanning(context),
|
||||
icon: Icon(
|
||||
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,
|
||||
),
|
||||
),
|
||||
),
|
||||
]
|
||||
),
|
||||
]
|
||||
],
|
||||
);
|
||||
}),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
|
@ -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_actions.dart';
|
||||
import 'package:cake_wallet/themes/extensions/menu_theme.dart';
|
||||
|
@ -180,6 +181,11 @@ class MenuWidgetState extends State<MenuWidget> {
|
|||
|
||||
final item = SettingActions.all[index];
|
||||
|
||||
if (!widget.dashboardViewModel.hasSilentPayments &&
|
||||
item.name == S.of(context).silent_payments_settings) {
|
||||
return Container();
|
||||
}
|
||||
|
||||
final isLastTile = index == itemCount - 1;
|
||||
|
||||
return SettingActionButton(
|
||||
|
|
50
lib/src/screens/settings/silent_payments_settings.dart
Normal file
50
lib/src/screens/settings/silent_payments_settings.dart
Normal 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),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -14,6 +14,7 @@ class SettingActions {
|
|||
});
|
||||
|
||||
static List<SettingActions> all = [
|
||||
silentPaymentsSettingAction,
|
||||
connectionSettingAction,
|
||||
walletSettingAction,
|
||||
addressBookSettingAction,
|
||||
|
@ -35,6 +36,15 @@ class SettingActions {
|
|||
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._(
|
||||
name: (context) => S.of(context).connection_sync,
|
||||
image: 'assets/images/nodes_menu.png',
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:cake_wallet/bitcoin/bitcoin.dart';
|
||||
import 'package:cake_wallet/bitcoin_cash/bitcoin_cash.dart';
|
||||
import 'package:cake_wallet/core/secure_storage.dart';
|
||||
|
@ -108,6 +107,8 @@ abstract class SettingsStoreBase with Store {
|
|||
required this.lookupsOpenAlias,
|
||||
required this.lookupsENS,
|
||||
required this.customBitcoinFeeRate,
|
||||
required this.silentPaymentsCardDisplay,
|
||||
required this.silentPaymentsAlwaysScan,
|
||||
TransactionPriority? initialBitcoinTransactionPriority,
|
||||
TransactionPriority? initialMoneroTransactionPriority,
|
||||
TransactionPriority? initialHavenTransactionPriority,
|
||||
|
@ -518,6 +519,16 @@ abstract class SettingsStoreBase with Store {
|
|||
(int 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) {
|
||||
if (change.newValue != null && change.key != null) {
|
||||
_saveCurrentNode(change.newValue!, change.key!);
|
||||
|
@ -713,6 +724,12 @@ abstract class SettingsStoreBase with Store {
|
|||
@observable
|
||||
int customBitcoinFeeRate;
|
||||
|
||||
@observable
|
||||
bool silentPaymentsCardDisplay;
|
||||
|
||||
@observable
|
||||
bool silentPaymentsAlwaysScan;
|
||||
|
||||
final SecureStorage _secureStorage;
|
||||
final SharedPreferences _sharedPreferences;
|
||||
final BackgroundTasks _backgroundTasks;
|
||||
|
@ -859,6 +876,10 @@ abstract class SettingsStoreBase with Store {
|
|||
final lookupsOpenAlias = sharedPreferences.getBool(PreferencesKey.lookupsOpenAlias) ?? true;
|
||||
final lookupsENS = sharedPreferences.getBool(PreferencesKey.lookupsENS) ?? true;
|
||||
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 (pinLength == null || pinLength == 0) {
|
||||
|
@ -1103,6 +1124,8 @@ abstract class SettingsStoreBase with Store {
|
|||
lookupsOpenAlias: lookupsOpenAlias,
|
||||
lookupsENS: lookupsENS,
|
||||
customBitcoinFeeRate: customBitcoinFeeRate,
|
||||
silentPaymentsCardDisplay: silentPaymentsCardDisplay,
|
||||
silentPaymentsAlwaysScan: silentPaymentsAlwaysScan,
|
||||
initialMoneroTransactionPriority: moneroTransactionPriority,
|
||||
initialBitcoinTransactionPriority: bitcoinTransactionPriority,
|
||||
initialHavenTransactionPriority: havenTransactionPriority,
|
||||
|
@ -1242,6 +1265,10 @@ abstract class SettingsStoreBase with Store {
|
|||
lookupsOpenAlias = sharedPreferences.getBool(PreferencesKey.lookupsOpenAlias) ?? true;
|
||||
lookupsENS = sharedPreferences.getBool(PreferencesKey.lookupsENS) ?? true;
|
||||
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 bitcoinElectrumServerId =
|
||||
sharedPreferences.getInt(PreferencesKey.currentBitcoinElectrumSererIdKey);
|
||||
|
|
|
@ -308,6 +308,9 @@ abstract class DashboardViewModelBase with Store {
|
|||
@computed
|
||||
bool get hasSilentPayments => hasRescan && wallet.type == WalletType.bitcoin;
|
||||
|
||||
@computed
|
||||
bool get showSilentPaymentsCard => hasSilentPayments && settingsStore.silentPaymentsCardDisplay;
|
||||
|
||||
final KeyService keyService;
|
||||
final SharedPreferences sharedPreferences;
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -648,11 +648,15 @@
|
|||
"signTransaction": " ﺔﻠﻣﺎﻌﻤﻟﺍ ﻊﻴﻗﻮﺗ",
|
||||
"signup_for_card_accept_terms": "قم بالتسجيل للحصول على البطاقة وقبول الشروط.",
|
||||
"silent_payments": "مدفوعات صامتة",
|
||||
"silent_payments_always_scan": "حدد المدفوعات الصامتة دائمًا المسح الضوئي",
|
||||
"silent_payments_disclaimer": "العناوين الجديدة ليست هويات جديدة. إنها إعادة استخدام هوية موجودة مع ملصق مختلف.",
|
||||
"silent_payments_display_card": "عرض بطاقة المدفوعات الصامتة",
|
||||
"silent_payments_scan_from_date": "فحص من التاريخ",
|
||||
"silent_payments_scan_from_date_or_blockheight": "يرجى إدخال ارتفاع الكتلة الذي تريد بدء المسح الضوئي للمدفوعات الصامتة الواردة ، أو استخدام التاريخ بدلاً من ذلك. يمكنك اختيار ما إذا كانت المحفظة تواصل مسح كل كتلة ، أو تتحقق فقط من الارتفاع المحدد.",
|
||||
"silent_payments_scan_from_height": "فحص من ارتفاع الكتلة",
|
||||
"silent_payments_scanned_tip": "ممسوح ليفحص! (${tip})",
|
||||
"silent_payments_scanning": "المدفوعات الصامتة المسح الضوئي",
|
||||
"silent_payments_settings": "إعدادات المدفوعات الصامتة",
|
||||
"slidable": "قابل للانزلاق",
|
||||
"sort_by": "ترتيب حسب",
|
||||
"spend_key_private": "مفتاح الإنفاق (خاص)",
|
||||
|
@ -857,4 +861,4 @@
|
|||
"you_will_get": "حول الى",
|
||||
"you_will_send": "تحويل من",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -648,11 +648,15 @@
|
|||
"signTransaction": "Подпишете транзакция",
|
||||
"signup_for_card_accept_terms": "Регистрайте се за картата и приемете условията.",
|
||||
"silent_payments": "Мълчаливи плащания",
|
||||
"silent_payments_always_scan": "Задайте мълчаливи плащания винаги сканиране",
|
||||
"silent_payments_disclaimer": "Новите адреси не са нови идентичности. Това е повторна употреба на съществуваща идентичност с различен етикет.",
|
||||
"silent_payments_display_card": "Показване на безшумни плащания карта",
|
||||
"silent_payments_scan_from_date": "Сканиране от дата",
|
||||
"silent_payments_scan_from_date_or_blockheight": "Моля, въведете височината на блока, която искате да започнете да сканирате за входящи безшумни плащания, или вместо това използвайте датата. Можете да изберете дали портфейлът продължава да сканира всеки блок или проверява само определената височина.",
|
||||
"silent_payments_scan_from_height": "Сканиране от височината на блока",
|
||||
"silent_payments_scanned_tip": "Сканиран за съвет! (${tip})",
|
||||
"silent_payments_scanning": "Безшумни плащания за сканиране",
|
||||
"silent_payments_settings": "Настройки за безшумни плащания",
|
||||
"slidable": "Плъзгащ се",
|
||||
"sort_by": "Сортирай по",
|
||||
"spend_key_private": "Spend key (таен)",
|
||||
|
@ -857,4 +861,4 @@
|
|||
"you_will_get": "Обръщане в",
|
||||
"you_will_send": "Обръщане от",
|
||||
"yy": "гг"
|
||||
}
|
||||
}
|
|
@ -648,11 +648,15 @@
|
|||
"signTransaction": "Podepsat transakci",
|
||||
"signup_for_card_accept_terms": "Zaregistrujte se pro kartu a souhlaste s podmínkami.",
|
||||
"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_display_card": "Zobrazit kartu Silent Payments",
|
||||
"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_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_settings": "Nastavení tichých plateb",
|
||||
"slidable": "Posuvné",
|
||||
"sort_by": "Seřazeno podle",
|
||||
"spend_key_private": "Klíč pro platby (soukromý)",
|
||||
|
@ -857,4 +861,4 @@
|
|||
"you_will_get": "Směnit na",
|
||||
"you_will_send": "Směnit z",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -649,11 +649,15 @@
|
|||
"signTransaction": "Transaktion unterzeichnen",
|
||||
"signup_for_card_accept_terms": "Melden Sie sich für die Karte an und akzeptieren Sie die Bedingungen.",
|
||||
"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_display_card": "Zeigen Sie stille Zahlungskarte",
|
||||
"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_height": "Scan aus der Blockhöhe scannen",
|
||||
"silent_payments_scanned_tip": "Gescannt zum Trinkgeld! (${tip})",
|
||||
"silent_payments_scanning": "Stille Zahlungen scannen",
|
||||
"silent_payments_settings": "Einstellungen für stille Zahlungen",
|
||||
"slidable": "Verschiebbar",
|
||||
"sort_by": "Sortiere nach",
|
||||
"spend_key_private": "Spend Key (geheim)",
|
||||
|
@ -860,4 +864,4 @@
|
|||
"you_will_get": "Konvertieren zu",
|
||||
"you_will_send": "Konvertieren von",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -648,11 +648,15 @@
|
|||
"signTransaction": "Sign Transaction",
|
||||
"signup_for_card_accept_terms": "Sign up for the card and accept the terms.",
|
||||
"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_display_card": "Show Silent Payments card",
|
||||
"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_height": "Scan from block height",
|
||||
"silent_payments_scanned_tip": "SCANNED TO 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)",
|
||||
|
@ -857,4 +861,4 @@
|
|||
"you_will_get": "Convert to",
|
||||
"you_will_send": "Convert from",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -649,11 +649,15 @@
|
|||
"signTransaction": "Firmar transacción",
|
||||
"signup_for_card_accept_terms": "Regístrese para obtener la tarjeta y acepte los términos.",
|
||||
"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_display_card": "Mostrar tarjeta de pagos silenciosos",
|
||||
"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_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_settings": "Configuración de pagos silenciosos",
|
||||
"slidable": "deslizable",
|
||||
"sort_by": "Ordenar por",
|
||||
"spend_key_private": "Spend clave (privado)",
|
||||
|
@ -858,4 +862,4 @@
|
|||
"you_will_get": "Convertir a",
|
||||
"you_will_send": "Convertir de",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -648,11 +648,15 @@
|
|||
"signTransaction": "Signer une transaction",
|
||||
"signup_for_card_accept_terms": "Inscrivez-vous pour la carte et acceptez les conditions.",
|
||||
"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_display_card": "Afficher la carte de paiement silencieuse",
|
||||
"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_height": "Scan à partir de la hauteur du bloc",
|
||||
"silent_payments_scanned_tip": "Scanné à la pointe! (${tip})",
|
||||
"silent_payments_scanning": "Payments silencieux SCANNING",
|
||||
"silent_payments_settings": "Paramètres de paiement silencieux",
|
||||
"slidable": "Glissable",
|
||||
"sort_by": "Trier par",
|
||||
"spend_key_private": "Clef de dépense (spend key) (privée)",
|
||||
|
@ -857,4 +861,4 @@
|
|||
"you_will_get": "Convertir vers",
|
||||
"you_will_send": "Convertir depuis",
|
||||
"yy": "AA"
|
||||
}
|
||||
}
|
|
@ -650,11 +650,15 @@
|
|||
"signTransaction": "Sa hannu Ma'amala",
|
||||
"signup_for_card_accept_terms": "Yi rajista don katin kuma karɓi sharuɗɗan.",
|
||||
"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_display_card": "Nuna katin silent",
|
||||
"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_height": "Scan daga tsayin daka",
|
||||
"silent_payments_scanned_tip": "Bincika don tip! (${tip})",
|
||||
"silent_payments_scanning": "Silent biya scanning",
|
||||
"silent_payments_settings": "Saitunan Silent",
|
||||
"slidable": "Mai iya zamewa",
|
||||
"sort_by": "Kasa",
|
||||
"spend_key_private": "makullin biya (maɓallin kalmar sirri)",
|
||||
|
@ -859,4 +863,4 @@
|
|||
"you_will_get": "Maida zuwa",
|
||||
"you_will_send": "Maida daga",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -650,11 +650,15 @@
|
|||
"signTransaction": "लेन-देन पर हस्ताक्षर करें",
|
||||
"signup_for_card_accept_terms": "कार्ड के लिए साइन अप करें और शर्तें स्वीकार करें।",
|
||||
"silent_payments": "मूक भुगतान",
|
||||
"silent_payments_always_scan": "मूक भुगतान हमेशा स्कैनिंग सेट करें",
|
||||
"silent_payments_disclaimer": "नए पते नई पहचान नहीं हैं। यह एक अलग लेबल के साथ एक मौजूदा पहचान का पुन: उपयोग है।",
|
||||
"silent_payments_display_card": "मूक भुगतान कार्ड दिखाएं",
|
||||
"silent_payments_scan_from_date": "तिथि से स्कैन करना",
|
||||
"silent_payments_scan_from_date_or_blockheight": "कृपया उस ब्लॉक ऊंचाई दर्ज करें जिसे आप आने वाले मूक भुगतान के लिए स्कैन करना शुरू करना चाहते हैं, या, इसके बजाय तारीख का उपयोग करें। आप चुन सकते हैं कि क्या वॉलेट हर ब्लॉक को स्कैन करना जारी रखता है, या केवल निर्दिष्ट ऊंचाई की जांच करता है।",
|
||||
"silent_payments_scan_from_height": "ब्लॉक ऊंचाई से स्कैन करें",
|
||||
"silent_payments_scanned_tip": "टिप करने के लिए स्कैन किया! (${tip})",
|
||||
"silent_payments_scanning": "मूक भुगतान स्कैनिंग",
|
||||
"silent_payments_settings": "मूक भुगतान सेटिंग्स",
|
||||
"slidable": "फिसलने लायक",
|
||||
"sort_by": "इसके अनुसार क्रमबद्ध करें",
|
||||
"spend_key_private": "खर्च करना (निजी)",
|
||||
|
@ -859,4 +863,4 @@
|
|||
"you_will_get": "में बदलें",
|
||||
"you_will_send": "से रूपांतरित करें",
|
||||
"yy": "वाईवाई"
|
||||
}
|
||||
}
|
|
@ -648,11 +648,15 @@
|
|||
"signTransaction": "Potpišite transakciju",
|
||||
"signup_for_card_accept_terms": "Prijavite se za karticu i prihvatite uvjete.",
|
||||
"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_display_card": "Prikaži karticu tihih plaćanja",
|
||||
"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_height": "Skeniranje s visine bloka",
|
||||
"silent_payments_scanned_tip": "Skenirano na savjet! (${tip})",
|
||||
"silent_payments_scanning": "Skeniranje tihih plaćanja",
|
||||
"silent_payments_settings": "Postavke tihih plaćanja",
|
||||
"slidable": "Klizna",
|
||||
"sort_by": "Poredaj po",
|
||||
"spend_key_private": "Spend key (privatni)",
|
||||
|
@ -857,4 +861,4 @@
|
|||
"you_will_get": "Razmijeni u",
|
||||
"you_will_send": "Razmijeni iz",
|
||||
"yy": "GG"
|
||||
}
|
||||
}
|
|
@ -651,11 +651,15 @@
|
|||
"signTransaction": "Tandatangani Transaksi",
|
||||
"signup_for_card_accept_terms": "Daftar untuk kartu dan terima syarat dan ketentuan.",
|
||||
"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_display_card": "Tunjukkan kartu pembayaran diam",
|
||||
"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_height": "Pindai dari Tinggi Blok",
|
||||
"silent_payments_scanned_tip": "Pindai untuk memberi tip! (${tip})",
|
||||
"silent_payments_scanning": "Pemindaian pembayaran diam",
|
||||
"silent_payments_settings": "Pengaturan pembayaran diam",
|
||||
"slidable": "Dapat digeser",
|
||||
"sort_by": "Sortir dengan",
|
||||
"spend_key_private": "Kunci pengeluaran (privat)",
|
||||
|
@ -860,4 +864,4 @@
|
|||
"you_will_get": "Konversi ke",
|
||||
"you_will_send": "Konversi dari",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -650,11 +650,15 @@
|
|||
"signTransaction": "Firma la transazione",
|
||||
"signup_for_card_accept_terms": "Registrati per la carta e accetta i termini.",
|
||||
"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_display_card": "Mostra la carta di pagamenti silenziosi",
|
||||
"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_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_settings": "Impostazioni di pagamenti silenziosi",
|
||||
"slidable": "Scorrevole",
|
||||
"sort_by": "Ordina per",
|
||||
"spend_key_private": "Chiave di spesa (privata)",
|
||||
|
@ -860,4 +864,4 @@
|
|||
"you_will_get": "Converti a",
|
||||
"you_will_send": "Conveti da",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -649,11 +649,15 @@
|
|||
"signTransaction": "トランザクションに署名する",
|
||||
"signup_for_card_accept_terms": "カードにサインアップして、利用規約に同意してください。",
|
||||
"silent_payments": "サイレント支払い",
|
||||
"silent_payments_always_scan": "サイレント決済を常にスキャンします",
|
||||
"silent_payments_disclaimer": "新しいアドレスは新しいアイデンティティではありません。これは、異なるラベルを持つ既存のアイデンティティの再利用です。",
|
||||
"silent_payments_display_card": "サイレントペイメントカードを表示します",
|
||||
"silent_payments_scan_from_date": "日付からスキャンします",
|
||||
"silent_payments_scan_from_date_or_blockheight": "着信のサイレント決済のためにスキャンを開始するブロックの高さを入力するか、代わりに日付を使用してください。ウォレットがすべてのブロックをスキャンし続けるか、指定された高さのみをチェックするかどうかを選択できます。",
|
||||
"silent_payments_scan_from_height": "ブロックの高さからスキャンします",
|
||||
"silent_payments_scanned_tip": "チップをスキャンしました! (${tip})",
|
||||
"silent_payments_scanning": "サイレントペイメントスキャン",
|
||||
"silent_payments_settings": "サイレントペイメント設定",
|
||||
"slidable": "スライド可能",
|
||||
"sort_by": "並び替え",
|
||||
"spend_key_private": "キーを使う (プライベート)",
|
||||
|
@ -858,4 +862,4 @@
|
|||
"you_will_get": "に変換",
|
||||
"you_will_send": "から変換",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -649,11 +649,15 @@
|
|||
"signTransaction": "거래 서명",
|
||||
"signup_for_card_accept_terms": "카드에 가입하고 약관에 동의합니다.",
|
||||
"silent_payments": "조용한 지불",
|
||||
"silent_payments_always_scan": "무음금을 항상 스캔합니다",
|
||||
"silent_payments_disclaimer": "새로운 주소는 새로운 정체성이 아닙니다. 다른 레이블로 기존 신원을 재사용하는 것입니다.",
|
||||
"silent_payments_display_card": "사일런트 지불 카드 표시",
|
||||
"silent_payments_scan_from_date": "날짜부터 스캔하십시오",
|
||||
"silent_payments_scan_from_date_or_blockheight": "들어오는 사일런트 결제를 위해 스캔을 시작하려는 블록 높이를 입력하거나 대신 날짜를 사용하십시오. 지갑이 모든 블록을 계속 스캔하는지 여부를 선택하거나 지정된 높이 만 확인할 수 있습니다.",
|
||||
"silent_payments_scan_from_height": "블록 높이에서 스캔하십시오",
|
||||
"silent_payments_scanned_tip": "팁을 스캔했습니다! (${tip})",
|
||||
"silent_payments_scanning": "조용한 지불 스캔",
|
||||
"silent_payments_settings": "조용한 지불 설정",
|
||||
"slidable": "슬라이딩 가능",
|
||||
"sort_by": "정렬 기준",
|
||||
"spend_key_private": "지출 키 (은밀한)",
|
||||
|
@ -859,4 +863,4 @@
|
|||
"you_will_send": "다음에서 변환",
|
||||
"YY": "YY",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -648,11 +648,15 @@
|
|||
"signTransaction": "ငွေလွှဲဝင်ပါ။",
|
||||
"signup_for_card_accept_terms": "ကတ်အတွက် စာရင်းသွင်းပြီး စည်းကမ်းချက်များကို လက်ခံပါ။",
|
||||
"silent_payments": "အသံတိတ်ငွေပေးချေမှု",
|
||||
"silent_payments_always_scan": "အမြဲတမ်း scanning အမြဲ scanning",
|
||||
"silent_payments_disclaimer": "လိပ်စာအသစ်များသည်အထောက်အထားအသစ်များမဟုတ်ပါ။ ၎င်းသည်ကွဲပြားခြားနားသောတံဆိပ်ဖြင့်ရှိပြီးသားဝိသေသလက်ခဏာကိုပြန်လည်အသုံးပြုခြင်းဖြစ်သည်။",
|
||||
"silent_payments_display_card": "အသံတိတ်ငွေပေးချေမှုကဒ်ကိုပြပါ",
|
||||
"silent_payments_scan_from_date": "ရက်စွဲမှစကင်ဖတ်ပါ",
|
||||
"silent_payments_scan_from_date_or_blockheight": "ကျေးဇူးပြု. သင်ဝင်လာသောအသံတိတ်ငွေပေးချေမှုအတွက်သင်စကင်ဖတ်စစ်ဆေးလိုသည့်အမြင့်ကိုဖြည့်ပါ။ သို့မဟုတ်နေ့စွဲကိုသုံးပါ။ Wallet သည်လုပ်ကွက်တိုင်းကိုဆက်လက်စကင်ဖတ်စစ်ဆေးပါကသို့မဟုတ်သတ်မှတ်ထားသောအမြင့်ကိုသာစစ်ဆေးပါကသင်ရွေးချယ်နိုင်သည်။",
|
||||
"silent_payments_scan_from_height": "ပိတ်ပင်တားဆီးမှုအမြင့်ကနေ scan",
|
||||
"silent_payments_scanned_tip": "အစွန်အဖျားမှ scan ဖတ်! (${tip})",
|
||||
"silent_payments_scanning": "အသံတိတ်ငွေပေးချေမှု scanning",
|
||||
"silent_payments_settings": "အသံတိတ်ငွေပေးချေမှုဆက်တင်များ",
|
||||
"slidable": "လျှောချနိုင်သည်။",
|
||||
"sort_by": "အလိုက်စဥ်သည်",
|
||||
"spend_key_private": "သော့သုံးရန် (သီးသန့်)",
|
||||
|
@ -774,7 +778,7 @@
|
|||
"tx_rejected_dust_output_send_all": "Network စည်းမျဉ်းစည်းကမ်းများဖြင့် ပယ်ချ. ငွေပေးချေမှုသည် output output (ဖုန်မှုန့်) ဖြင့်ပယ်ချခဲ့သည်။ ဒင်္ဂါးပြားထိန်းချုပ်မှုအောက်တွင်ရွေးချယ်ထားသောဒင်္ဂါးများ၏လက်ကျန်ငွေကိုစစ်ဆေးပါ။",
|
||||
"tx_rejected_vout_negative": "ဒီငွေပေးငွေယူရဲ့အခကြေးငွေအတွက်ပေးဆောင်ဖို့လုံလောက်တဲ့ဟန်ချက်မလုံလောက်။ ဒင်္ဂါးပြား၏လက်ကျန်ငွေလက်ကျန်ငွေကိုစစ်ဆေးပါ။",
|
||||
"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 ကိုစစ်ဆေးပါ။",
|
||||
"unavailable_balance": "လက်ကျန်ငွေ မရရှိနိုင်ပါ။",
|
||||
"unavailable_balance_description": "မရရှိနိုင်သော လက်ကျန်ငွေ- ဤစုစုပေါင်းတွင် ဆိုင်းငံ့ထားသော ငွေပေးငွေယူများတွင် သော့ခတ်ထားသော ငွေကြေးများနှင့် သင်၏ coin ထိန်းချုပ်မှုဆက်တင်များတွင် သင် တက်ကြွစွာ အေးခဲထားသော ငွေများ ပါဝင်သည်။ သော့ခတ်ထားသော လက်ကျန်ငွေများကို ၎င်းတို့၏ သက်ဆိုင်ရာ ငွေပေးငွေယူများ ပြီးမြောက်သည်နှင့် တပြိုင်နက် ရရှိနိုင်မည်ဖြစ်ပြီး၊ အေးခဲထားသော လက်ကျန်များကို ၎င်းတို့အား ပြန်ဖြုတ်ရန် သင်ဆုံးဖြတ်သည်အထိ ငွေပေးငွေယူများအတွက် ဆက်လက်၍မရနိုင်ပါ။",
|
||||
|
@ -857,4 +861,4 @@
|
|||
"you_will_get": "သို့ပြောင်းပါ။",
|
||||
"you_will_send": "မှပြောင်းပါ။",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -648,11 +648,15 @@
|
|||
"signTransaction": "Transactie ondertekenen",
|
||||
"signup_for_card_accept_terms": "Meld je aan voor de kaart en accepteer de voorwaarden.",
|
||||
"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_display_card": "Toon stille betalingskaart",
|
||||
"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_height": "Scan van blokhoogte",
|
||||
"silent_payments_scanned_tip": "Gescand om te fooien! (${tip})",
|
||||
"silent_payments_scanning": "Stille betalingen scannen",
|
||||
"silent_payments_settings": "Stille betalingsinstellingen",
|
||||
"slidable": "Verschuifbaar",
|
||||
"sort_by": "Sorteer op",
|
||||
"spend_key_private": "Sleutel uitgeven (privaat)",
|
||||
|
@ -858,4 +862,4 @@
|
|||
"you_will_get": "Converteren naar",
|
||||
"you_will_send": "Converteren van",
|
||||
"yy": "JJ"
|
||||
}
|
||||
}
|
|
@ -648,11 +648,15 @@
|
|||
"signTransaction": "Podpisz transakcję",
|
||||
"signup_for_card_accept_terms": "Zarejestruj się, aby otrzymać kartę i zaakceptuj warunki.",
|
||||
"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_display_card": "Pokaż kartę Silent Payments",
|
||||
"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_height": "Skanuj z wysokości bloku",
|
||||
"silent_payments_scanned_tip": "Zeskanowany do napiwku! (${tip})",
|
||||
"silent_payments_scanning": "Skanowanie cichych płatności",
|
||||
"silent_payments_settings": "Ustawienia o cichej płatności",
|
||||
"slidable": "Przesuwne",
|
||||
"sort_by": "Sortuj według",
|
||||
"spend_key_private": "Klucz prywatny",
|
||||
|
@ -857,4 +861,4 @@
|
|||
"you_will_get": "Konwertuj na",
|
||||
"you_will_send": "Konwertuj z",
|
||||
"yy": "RR"
|
||||
}
|
||||
}
|
|
@ -650,11 +650,15 @@
|
|||
"signTransaction": "Assinar transação",
|
||||
"signup_for_card_accept_terms": "Cadastre-se no cartão e aceite os termos.",
|
||||
"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_display_card": "Mostrar cartão de pagamento silencioso",
|
||||
"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_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_settings": "Configurações de pagamentos silenciosos",
|
||||
"slidable": "Deslizável",
|
||||
"sort_by": "Ordenar por",
|
||||
"spend_key_private": "Chave de gastos (privada)",
|
||||
|
|
|
@ -649,11 +649,15 @@
|
|||
"signTransaction": "Подписать транзакцию",
|
||||
"signup_for_card_accept_terms": "Подпишитесь на карту и примите условия.",
|
||||
"silent_payments": "Молчаливые платежи",
|
||||
"silent_payments_always_scan": "Установить молчаливые платежи всегда сканирование",
|
||||
"silent_payments_disclaimer": "Новые адреса не являются новыми личностями. Это повторное использование существующей идентичности с другой этикеткой.",
|
||||
"silent_payments_display_card": "Показать бесшумную платежную карту",
|
||||
"silent_payments_scan_from_date": "Сканирование с даты",
|
||||
"silent_payments_scan_from_date_or_blockheight": "Пожалуйста, введите высоту блока, которую вы хотите начать сканирование для входящих молчаливых платежей, или вместо этого используйте дату. Вы можете выбрать, продолжает ли кошелек сканировать каждый блок или проверять только указанную высоту.",
|
||||
"silent_payments_scan_from_height": "Сканирование с высоты блока",
|
||||
"silent_payments_scanned_tip": "Оканируется, чтобы чаевые! (${tip})",
|
||||
"silent_payments_scanning": "Сканирование безмолвных платежей",
|
||||
"silent_payments_settings": "Silent Payments Settings",
|
||||
"slidable": "Скользящий",
|
||||
"sort_by": "Сортировать по",
|
||||
"spend_key_private": "Приватный ключ траты",
|
||||
|
@ -858,4 +862,4 @@
|
|||
"you_will_get": "Конвертировать в",
|
||||
"you_will_send": "Конвертировать из",
|
||||
"yy": "ГГ"
|
||||
}
|
||||
}
|
|
@ -648,11 +648,15 @@
|
|||
"signTransaction": "ลงนามในการทำธุรกรรม",
|
||||
"signup_for_card_accept_terms": "ลงทะเบียนสำหรับบัตรและยอมรับเงื่อนไข",
|
||||
"silent_payments": "การชำระเงินเงียบ",
|
||||
"silent_payments_always_scan": "ตั้งค่าการชำระเงินแบบเงียบเสมอ",
|
||||
"silent_payments_disclaimer": "ที่อยู่ใหม่ไม่ใช่ตัวตนใหม่ มันเป็นการใช้ซ้ำของตัวตนที่มีอยู่ด้วยฉลากที่แตกต่างกัน",
|
||||
"silent_payments_display_card": "แสดงบัตร Silent Payments",
|
||||
"silent_payments_scan_from_date": "สแกนตั้งแต่วันที่",
|
||||
"silent_payments_scan_from_date_or_blockheight": "โปรดป้อนความสูงของบล็อกที่คุณต้องการเริ่มการสแกนสำหรับการชำระเงินแบบเงียบ ๆ หรือใช้วันที่แทน คุณสามารถเลือกได้ว่ากระเป๋าเงินยังคงสแกนทุกบล็อกหรือตรวจสอบความสูงที่ระบุเท่านั้น",
|
||||
"silent_payments_scan_from_height": "สแกนจากความสูงของบล็อก",
|
||||
"silent_payments_scanned_tip": "สแกนไปที่ปลาย! (${tip})",
|
||||
"silent_payments_scanning": "การสแกนการชำระเงินแบบเงียบ",
|
||||
"silent_payments_settings": "การตั้งค่าการชำระเงินแบบเงียบ",
|
||||
"slidable": "เลื่อนได้",
|
||||
"sort_by": "เรียงตาม",
|
||||
"spend_key_private": "คีย์จ่าย (ส่วนตัว)",
|
||||
|
@ -857,4 +861,4 @@
|
|||
"you_will_get": "แปลงเป็น",
|
||||
"you_will_send": "แปลงจาก",
|
||||
"yy": "ปี"
|
||||
}
|
||||
}
|
|
@ -648,11 +648,15 @@
|
|||
"signTransaction": "Mag-sign Transaksyon",
|
||||
"signup_for_card_accept_terms": "Mag -sign up para sa card at tanggapin ang mga termino.",
|
||||
"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_display_card": "Ipakita ang Silent Payment Card",
|
||||
"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_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_settings": "Mga setting ng tahimik na pagbabayad",
|
||||
"slidable": "Slidable",
|
||||
"sort_by": "Pag -uri -uriin sa pamamagitan ng",
|
||||
"spend_key_private": "Gumastos ng susi (pribado)",
|
||||
|
@ -857,4 +861,4 @@
|
|||
"you_will_get": "Mag -convert sa",
|
||||
"you_will_send": "I -convert mula sa",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -648,11 +648,15 @@
|
|||
"signTransaction": "İşlem İmzala",
|
||||
"signup_for_card_accept_terms": "Kart için kaydol ve koşulları kabul et.",
|
||||
"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_display_card": "Sessiz Ödeme Kartı Göster",
|
||||
"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_height": "Blok yüksekliğinden tarama",
|
||||
"silent_payments_scanned_tip": "Bahşiş için tarandı! (${tip})",
|
||||
"silent_payments_scanning": "Sessiz Ödemeler Taraması",
|
||||
"silent_payments_settings": "Sessiz Ödeme Ayarları",
|
||||
"slidable": "kaydırılabilir",
|
||||
"sort_by": "Göre sırala",
|
||||
"spend_key_private": "Harcama anahtarı (özel)",
|
||||
|
@ -857,4 +861,4 @@
|
|||
"you_will_get": "Biçimine dönüştür:",
|
||||
"you_will_send": "Biçiminden dönüştür:",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -649,11 +649,15 @@
|
|||
"signTransaction": "Підписати транзакцію",
|
||||
"signup_for_card_accept_terms": "Зареєструйтеся на картку та прийміть умови.",
|
||||
"silent_payments": "Мовчазні платежі",
|
||||
"silent_payments_always_scan": "Встановити мовчазні платежі завжди сканувати",
|
||||
"silent_payments_disclaimer": "Нові адреси - це не нові ідентичності. Це повторне використання існуючої ідентичності з іншою етикеткою.",
|
||||
"silent_payments_display_card": "Покажіть безшумну карту платежів",
|
||||
"silent_payments_scan_from_date": "Сканувати з дати",
|
||||
"silent_payments_scan_from_date_or_blockheight": "Введіть висоту блоку, яку ви хочете почати сканувати для вхідних мовчазних платежів, або скористайтеся датою замість цього. Ви можете вибрати, якщо гаманець продовжує сканувати кожен блок, або перевіряє лише вказану висоту.",
|
||||
"silent_payments_scan_from_height": "Сканування від висоти блоку",
|
||||
"silent_payments_scanned_tip": "Сканований на підказку! (${tip})",
|
||||
"silent_payments_scanning": "Мовчазні платежі сканування",
|
||||
"silent_payments_settings": "Налаштування мовчазних платежів",
|
||||
"slidable": "Розсувний",
|
||||
"sort_by": "Сортувати за",
|
||||
"spend_key_private": "Приватний ключ витрати",
|
||||
|
@ -858,4 +862,4 @@
|
|||
"you_will_get": "Конвертувати в",
|
||||
"you_will_send": "Конвертувати з",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -650,11 +650,15 @@
|
|||
"signTransaction": "۔ﮟﯾﺮﮐ ﻂﺨﺘﺳﺩ ﺮﭘ ﻦﯾﺩ ﻦﯿﻟ",
|
||||
"signup_for_card_accept_terms": "کارڈ کے لیے سائن اپ کریں اور شرائط کو قبول کریں۔",
|
||||
"silent_payments": "خاموش ادائیگی",
|
||||
"silent_payments_always_scan": "خاموش ادائیگی ہمیشہ اسکیننگ کریں",
|
||||
"silent_payments_disclaimer": "نئے پتے نئی شناخت نہیں ہیں۔ یہ ایک مختلف لیبل کے ساتھ موجودہ شناخت کا دوبارہ استعمال ہے۔",
|
||||
"silent_payments_display_card": "خاموش ادائیگی کارڈ دکھائیں",
|
||||
"silent_payments_scan_from_date": "تاریخ سے اسکین کریں",
|
||||
"silent_payments_scan_from_date_or_blockheight": "براہ کرم بلاک اونچائی میں داخل ہوں جس سے آپ آنے والی خاموش ادائیگیوں کے لئے اسکیننگ شروع کرنا چاہتے ہیں ، یا اس کے بجائے تاریخ کا استعمال کریں۔ آپ یہ منتخب کرسکتے ہیں کہ اگر پرس ہر بلاک کو اسکیننگ جاری رکھے ہوئے ہے ، یا صرف مخصوص اونچائی کی جانچ پڑتال کرتا ہے۔",
|
||||
"silent_payments_scan_from_height": "بلاک اونچائی سے اسکین کریں",
|
||||
"silent_payments_scanned_tip": "نوکنے کے لئے اسکین! (${tip})",
|
||||
"silent_payments_scanning": "خاموش ادائیگی اسکیننگ",
|
||||
"silent_payments_settings": "خاموش ادائیگی کی ترتیبات",
|
||||
"slidable": "سلائیڈ ایبل",
|
||||
"sort_by": "ترتیب دیں",
|
||||
"spend_key_private": "خرچ کی کلید (نجی)",
|
||||
|
@ -859,4 +863,4 @@
|
|||
"you_will_get": "میں تبدیل کریں۔",
|
||||
"you_will_send": "سے تبدیل کریں۔",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -649,11 +649,15 @@
|
|||
"signTransaction": "Wole Idunadura",
|
||||
"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_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_display_card": "Ṣafihan kaadi isanwo ti o dakẹ",
|
||||
"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_height": "Scan lati Iga Iga",
|
||||
"silent_payments_scanned_tip": "Ṣayẹwo si sample! (${tip})",
|
||||
"silent_payments_scanning": "Awọn sisanwo ipalọlọ",
|
||||
"silent_payments_settings": "Awọn eto isanwo ti o dakẹ",
|
||||
"slidable": "Slidable",
|
||||
"sort_by": "Sa pelu",
|
||||
"spend_key_private": "Kọ́kọ́rọ́ sísan (àdáni)",
|
||||
|
@ -858,4 +862,4 @@
|
|||
"you_will_get": "Ṣe pàṣípààrọ̀ sí",
|
||||
"you_will_send": "Ṣe pàṣípààrọ̀ láti",
|
||||
"yy": "Ọd"
|
||||
}
|
||||
}
|
|
@ -648,11 +648,15 @@
|
|||
"signTransaction": "签署交易",
|
||||
"signup_for_card_accept_terms": "注册卡并接受条款。",
|
||||
"silent_payments": "无声付款",
|
||||
"silent_payments_always_scan": "设置无声付款总是扫描",
|
||||
"silent_payments_disclaimer": "新地址不是新的身份。这是重复使用具有不同标签的现有身份。",
|
||||
"silent_payments_display_card": "显示无声支付卡",
|
||||
"silent_payments_scan_from_date": "从日期开始扫描",
|
||||
"silent_payments_scan_from_date_or_blockheight": "请输入您要开始扫描输入静音付款的块高度,或者使用日期。您可以选择钱包是否继续扫描每个块,或仅检查指定的高度。",
|
||||
"silent_payments_scan_from_height": "从块高度扫描",
|
||||
"silent_payments_scanned_tip": "扫描到小费! (${tip})",
|
||||
"silent_payments_scanning": "无声付款扫描",
|
||||
"silent_payments_settings": "无声付款设置",
|
||||
"slidable": "可滑动",
|
||||
"sort_by": "排序方式",
|
||||
"spend_key_private": "Spend 密钥 (私钥)",
|
||||
|
@ -857,4 +861,4 @@
|
|||
"you_will_get": "转换到",
|
||||
"you_will_send": "转换自",
|
||||
"yy": "YY"
|
||||
}
|
||||
}
|
|
@ -181,7 +181,8 @@ abstract class Bitcoin {
|
|||
|
||||
List<Unspent> getUnspents(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);
|
||||
TransactionPriority getBitcoinTransactionPriorityMedium();
|
||||
TransactionPriority getBitcoinTransactionPriorityCustom();
|
||||
|
|
Loading…
Reference in a new issue