mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-22 11:39:22 +00:00
Sp enhancements (#1672)
* fix: enhance regex, fix multiline * feat: improve scan msg, fix missing txs, use date api * feat: node fixes, enhance send modal, TX list tag & filter, refactors * fix: continuous scanning * fix: missing close * fix: resubscribe tweaks * feat: use mempool api setting toggle * handle any failure of height API and fallback to the old method [skip ci] --------- Co-authored-by: OmarHatem <omarh.ismail1@gmail.com>
This commit is contained in:
parent
b6bc3df622
commit
3a391f10a3
61 changed files with 872 additions and 531 deletions
|
@ -1,14 +0,0 @@
|
||||||
import 'dart:typed_data';
|
|
||||||
import 'package:bitcoin_base/bitcoin_base.dart' as bitcoin;
|
|
||||||
|
|
||||||
List<int> addressToOutputScript(String address, bitcoin.BasedUtxoNetwork network) {
|
|
||||||
try {
|
|
||||||
if (network == bitcoin.BitcoinCashNetwork.mainnet) {
|
|
||||||
return bitcoin.BitcoinCashAddress(address).baseAddress.toScriptPubKey().toBytes();
|
|
||||||
}
|
|
||||||
return bitcoin.addressToOutputScript(address: address, network: network);
|
|
||||||
} catch (err) {
|
|
||||||
print(err);
|
|
||||||
return Uint8List(0);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +1,6 @@
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:bitcoin_base/bitcoin_base.dart';
|
import 'package:bitcoin_base/bitcoin_base.dart';
|
||||||
import 'package:cw_bitcoin/script_hash.dart' as sh;
|
|
||||||
|
|
||||||
abstract class BaseBitcoinAddressRecord {
|
abstract class BaseBitcoinAddressRecord {
|
||||||
BaseBitcoinAddressRecord(
|
BaseBitcoinAddressRecord(
|
||||||
|
@ -65,8 +64,8 @@ class BitcoinAddressRecord extends BaseBitcoinAddressRecord {
|
||||||
required super.type,
|
required super.type,
|
||||||
String? scriptHash,
|
String? scriptHash,
|
||||||
required super.network,
|
required super.network,
|
||||||
}) : scriptHash =
|
}) : scriptHash = scriptHash ??
|
||||||
scriptHash ?? (network != null ? sh.scriptHash(address, network: network) : null);
|
(network != null ? BitcoinAddressUtils.scriptHash(address, network: network) : null);
|
||||||
|
|
||||||
factory BitcoinAddressRecord.fromJSON(String jsonSource, {BasedUtxoNetwork? network}) {
|
factory BitcoinAddressRecord.fromJSON(String jsonSource, {BasedUtxoNetwork? network}) {
|
||||||
final decoded = json.decode(jsonSource) as Map;
|
final decoded = json.decode(jsonSource) as Map;
|
||||||
|
@ -92,7 +91,7 @@ class BitcoinAddressRecord extends BaseBitcoinAddressRecord {
|
||||||
|
|
||||||
String getScriptHash(BasedUtxoNetwork network) {
|
String getScriptHash(BasedUtxoNetwork network) {
|
||||||
if (scriptHash != null) return scriptHash!;
|
if (scriptHash != null) return scriptHash!;
|
||||||
scriptHash = sh.scriptHash(address, network: network);
|
scriptHash = BitcoinAddressUtils.scriptHash(address, network: network);
|
||||||
return scriptHash!;
|
return scriptHash!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ import 'dart:io';
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
import 'package:bitcoin_base/bitcoin_base.dart';
|
import 'package:bitcoin_base/bitcoin_base.dart';
|
||||||
import 'package:cw_bitcoin/bitcoin_amount_format.dart';
|
import 'package:cw_bitcoin/bitcoin_amount_format.dart';
|
||||||
import 'package:cw_bitcoin/script_hash.dart';
|
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:rxdart/rxdart.dart';
|
import 'package:rxdart/rxdart.dart';
|
||||||
|
|
||||||
|
@ -48,6 +47,7 @@ class ElectrumClient {
|
||||||
final Map<String, SocketTask> _tasks;
|
final Map<String, SocketTask> _tasks;
|
||||||
Map<String, SocketTask> get tasks => _tasks;
|
Map<String, SocketTask> get tasks => _tasks;
|
||||||
final Map<String, String> _errors;
|
final Map<String, String> _errors;
|
||||||
|
ConnectionStatus _connectionStatus = ConnectionStatus.disconnected;
|
||||||
bool _isConnected;
|
bool _isConnected;
|
||||||
Timer? _aliveTimer;
|
Timer? _aliveTimer;
|
||||||
String unterminatedString;
|
String unterminatedString;
|
||||||
|
@ -57,11 +57,13 @@ class ElectrumClient {
|
||||||
|
|
||||||
Future<void> connectToUri(Uri uri, {bool? useSSL}) async {
|
Future<void> connectToUri(Uri uri, {bool? useSSL}) async {
|
||||||
this.uri = uri;
|
this.uri = uri;
|
||||||
this.useSSL = useSSL;
|
if (useSSL != null) {
|
||||||
await connect(host: uri.host, port: uri.port, useSSL: useSSL);
|
this.useSSL = useSSL;
|
||||||
|
}
|
||||||
|
await connect(host: uri.host, port: uri.port);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> connect({required String host, required int port, bool? useSSL}) async {
|
Future<void> connect({required String host, required int port}) async {
|
||||||
_setConnectionStatus(ConnectionStatus.connecting);
|
_setConnectionStatus(ConnectionStatus.connecting);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -80,15 +82,26 @@ class ElectrumClient {
|
||||||
onBadCertificate: (_) => true,
|
onBadCertificate: (_) => true,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} catch (_) {
|
} catch (e) {
|
||||||
_setConnectionStatus(ConnectionStatus.failed);
|
if (e is HandshakeException) {
|
||||||
|
useSSL = !(useSSL ?? false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_connectionStatus != ConnectionStatus.connecting) {
|
||||||
|
_setConnectionStatus(ConnectionStatus.failed);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (socket == null) {
|
if (socket == null) {
|
||||||
_setConnectionStatus(ConnectionStatus.failed);
|
if (_connectionStatus != ConnectionStatus.connecting) {
|
||||||
|
_setConnectionStatus(ConnectionStatus.failed);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_setConnectionStatus(ConnectionStatus.connected);
|
_setConnectionStatus(ConnectionStatus.connected);
|
||||||
|
|
||||||
socket!.listen(
|
socket!.listen(
|
||||||
|
@ -118,7 +131,7 @@ class ElectrumClient {
|
||||||
socket?.destroy();
|
socket?.destroy();
|
||||||
_setConnectionStatus(ConnectionStatus.disconnected);
|
_setConnectionStatus(ConnectionStatus.disconnected);
|
||||||
}
|
}
|
||||||
} catch(e) {
|
} catch (e) {
|
||||||
print(e.toString());
|
print(e.toString());
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -217,25 +230,6 @@ class ElectrumClient {
|
||||||
return [];
|
return [];
|
||||||
});
|
});
|
||||||
|
|
||||||
Future<List<Map<String, dynamic>>> getListUnspentWithAddress(
|
|
||||||
String address, BasedUtxoNetwork network) =>
|
|
||||||
call(
|
|
||||||
method: 'blockchain.scripthash.listunspent',
|
|
||||||
params: [scriptHash(address, network: network)]).then((dynamic result) {
|
|
||||||
if (result is List) {
|
|
||||||
return result.map((dynamic val) {
|
|
||||||
if (val is Map<String, dynamic>) {
|
|
||||||
val['address'] = address;
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
return <String, dynamic>{};
|
|
||||||
}).toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
return [];
|
|
||||||
});
|
|
||||||
|
|
||||||
Future<List<Map<String, dynamic>>> getListUnspent(String scriptHash) =>
|
Future<List<Map<String, dynamic>>> getListUnspent(String scriptHash) =>
|
||||||
call(method: 'blockchain.scripthash.listunspent', params: [scriptHash])
|
call(method: 'blockchain.scripthash.listunspent', params: [scriptHash])
|
||||||
.then((dynamic result) {
|
.then((dynamic result) {
|
||||||
|
@ -272,16 +266,12 @@ class ElectrumClient {
|
||||||
try {
|
try {
|
||||||
final result = await callWithTimeout(
|
final result = await callWithTimeout(
|
||||||
method: 'blockchain.transaction.get', params: [hash, verbose], timeout: 10000);
|
method: 'blockchain.transaction.get', params: [hash, verbose], timeout: 10000);
|
||||||
if (result is Map<String, dynamic>) {
|
return result;
|
||||||
return result;
|
|
||||||
}
|
|
||||||
} on RequestFailedTimeoutException catch (_) {
|
} on RequestFailedTimeoutException catch (_) {
|
||||||
return <String, dynamic>{};
|
return <String, dynamic>{};
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print("getTransaction: ${e.toString()}");
|
|
||||||
return <String, dynamic>{};
|
return <String, dynamic>{};
|
||||||
}
|
}
|
||||||
return <String, dynamic>{};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Map<String, dynamic>> getTransactionVerbose({required String hash}) =>
|
Future<Map<String, dynamic>> getTransactionVerbose({required String hash}) =>
|
||||||
|
@ -326,9 +316,8 @@ class ElectrumClient {
|
||||||
await call(method: 'blockchain.block.get_header', params: [height]) as Map<String, dynamic>;
|
await call(method: 'blockchain.block.get_header', params: [height]) as Map<String, dynamic>;
|
||||||
|
|
||||||
BehaviorSubject<Object>? tweaksSubscribe({required int height, required int count}) {
|
BehaviorSubject<Object>? tweaksSubscribe({required int height, required int count}) {
|
||||||
_id += 1;
|
|
||||||
return subscribe<Object>(
|
return subscribe<Object>(
|
||||||
id: 'blockchain.tweaks.subscribe:${height + count}',
|
id: 'blockchain.tweaks.subscribe',
|
||||||
method: 'blockchain.tweaks.subscribe',
|
method: 'blockchain.tweaks.subscribe',
|
||||||
params: [height, count, false],
|
params: [height, count, false],
|
||||||
);
|
);
|
||||||
|
@ -539,6 +528,7 @@ class ElectrumClient {
|
||||||
|
|
||||||
void _setConnectionStatus(ConnectionStatus status) {
|
void _setConnectionStatus(ConnectionStatus status) {
|
||||||
onConnectionStatusChange?.call(status);
|
onConnectionStatusChange?.call(status);
|
||||||
|
_connectionStatus = status;
|
||||||
_isConnected = status == ConnectionStatus.connected;
|
_isConnected = status == ConnectionStatus.connected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,20 +23,24 @@ class ElectrumTransactionBundle {
|
||||||
|
|
||||||
class ElectrumTransactionInfo extends TransactionInfo {
|
class ElectrumTransactionInfo extends TransactionInfo {
|
||||||
List<BitcoinSilentPaymentsUnspent>? unspents;
|
List<BitcoinSilentPaymentsUnspent>? unspents;
|
||||||
|
bool isReceivedSilentPayment;
|
||||||
|
|
||||||
ElectrumTransactionInfo(this.type,
|
ElectrumTransactionInfo(
|
||||||
{required String id,
|
this.type, {
|
||||||
int? height,
|
required String id,
|
||||||
required int amount,
|
int? height,
|
||||||
int? fee,
|
required int amount,
|
||||||
List<String>? inputAddresses,
|
int? fee,
|
||||||
List<String>? outputAddresses,
|
List<String>? inputAddresses,
|
||||||
required TransactionDirection direction,
|
List<String>? outputAddresses,
|
||||||
required bool isPending,
|
required TransactionDirection direction,
|
||||||
required DateTime date,
|
required bool isPending,
|
||||||
required int confirmations,
|
required DateTime date,
|
||||||
String? to,
|
required int confirmations,
|
||||||
this.unspents}) {
|
String? to,
|
||||||
|
this.unspents,
|
||||||
|
this.isReceivedSilentPayment = false,
|
||||||
|
}) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
this.amount = amount;
|
this.amount = amount;
|
||||||
|
@ -202,6 +206,7 @@ class ElectrumTransactionInfo extends TransactionInfo {
|
||||||
.map((unspent) =>
|
.map((unspent) =>
|
||||||
BitcoinSilentPaymentsUnspent.fromJSON(null, unspent as Map<String, dynamic>))
|
BitcoinSilentPaymentsUnspent.fromJSON(null, unspent as Map<String, dynamic>))
|
||||||
.toList(),
|
.toList(),
|
||||||
|
isReceivedSilentPayment: data['isReceivedSilentPayment'] as bool? ?? false,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,6 +257,7 @@ class ElectrumTransactionInfo extends TransactionInfo {
|
||||||
m['unspents'] = unspents?.map((e) => e.toJson()).toList() ?? [];
|
m['unspents'] = unspents?.map((e) => e.toJson()).toList() ?? [];
|
||||||
m['inputAddresses'] = inputAddresses;
|
m['inputAddresses'] = inputAddresses;
|
||||||
m['outputAddresses'] = outputAddresses;
|
m['outputAddresses'] = outputAddresses;
|
||||||
|
m['isReceivedSilentPayment'] = isReceivedSilentPayment;
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,6 @@ import 'package:cw_bitcoin/electrum_transaction_info.dart';
|
||||||
import 'package:cw_bitcoin/electrum_wallet_addresses.dart';
|
import 'package:cw_bitcoin/electrum_wallet_addresses.dart';
|
||||||
import 'package:cw_bitcoin/exceptions.dart';
|
import 'package:cw_bitcoin/exceptions.dart';
|
||||||
import 'package:cw_bitcoin/pending_bitcoin_transaction.dart';
|
import 'package:cw_bitcoin/pending_bitcoin_transaction.dart';
|
||||||
import 'package:cw_bitcoin/script_hash.dart';
|
|
||||||
import 'package:cw_bitcoin/utils.dart';
|
import 'package:cw_bitcoin/utils.dart';
|
||||||
import 'package:cw_core/crypto_currency.dart';
|
import 'package:cw_core/crypto_currency.dart';
|
||||||
import 'package:cw_core/node.dart';
|
import 'package:cw_core/node.dart';
|
||||||
|
@ -51,8 +50,6 @@ part 'electrum_wallet.g.dart';
|
||||||
|
|
||||||
class ElectrumWallet = ElectrumWalletBase with _$ElectrumWallet;
|
class ElectrumWallet = ElectrumWalletBase with _$ElectrumWallet;
|
||||||
|
|
||||||
const int TWEAKS_COUNT = 25;
|
|
||||||
|
|
||||||
abstract class ElectrumWalletBase
|
abstract class ElectrumWalletBase
|
||||||
extends WalletBase<ElectrumBalance, ElectrumTransactionHistory, ElectrumTransactionInfo>
|
extends WalletBase<ElectrumBalance, ElectrumTransactionHistory, ElectrumTransactionInfo>
|
||||||
with Store, WalletKeysFile {
|
with Store, WalletKeysFile {
|
||||||
|
@ -166,12 +163,12 @@ abstract class ElectrumWalletBase
|
||||||
Set<String> get addressesSet => walletAddresses.allAddresses.map((addr) => addr.address).toSet();
|
Set<String> get addressesSet => walletAddresses.allAddresses.map((addr) => addr.address).toSet();
|
||||||
|
|
||||||
List<String> get scriptHashes => walletAddresses.addressesByReceiveType
|
List<String> get scriptHashes => walletAddresses.addressesByReceiveType
|
||||||
.map((addr) => scriptHash(addr.address, network: network))
|
.map((addr) => (addr as BitcoinAddressRecord).getScriptHash(network))
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
List<String> get publicScriptHashes => walletAddresses.allAddresses
|
List<String> get publicScriptHashes => walletAddresses.allAddresses
|
||||||
.where((addr) => !addr.isHidden)
|
.where((addr) => !addr.isHidden)
|
||||||
.map((addr) => scriptHash(addr.address, network: network))
|
.map((addr) => addr.getScriptHash(network))
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
String get xpub => accountHD.publicKey.toExtended;
|
String get xpub => accountHD.publicKey.toExtended;
|
||||||
|
@ -212,7 +209,7 @@ abstract class ElectrumWalletBase
|
||||||
silentPaymentsScanningActive = active;
|
silentPaymentsScanningActive = active;
|
||||||
|
|
||||||
if (active) {
|
if (active) {
|
||||||
syncStatus = StartingScanSyncStatus();
|
syncStatus = AttemptingScanSyncStatus();
|
||||||
|
|
||||||
final tip = await getUpdatedChainTip();
|
final tip = await getUpdatedChainTip();
|
||||||
|
|
||||||
|
@ -290,12 +287,7 @@ abstract class ElectrumWalletBase
|
||||||
}
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
Future<void> _setListeners(
|
Future<void> _setListeners(int height, {int? chainTipParam, bool? doSingleScan}) async {
|
||||||
int height, {
|
|
||||||
int? chainTipParam,
|
|
||||||
bool? doSingleScan,
|
|
||||||
bool? usingSupportedNode,
|
|
||||||
}) async {
|
|
||||||
final chainTip = chainTipParam ?? await getUpdatedChainTip();
|
final chainTip = chainTipParam ?? await getUpdatedChainTip();
|
||||||
|
|
||||||
if (chainTip == height) {
|
if (chainTip == height) {
|
||||||
|
@ -303,7 +295,7 @@ abstract class ElectrumWalletBase
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
syncStatus = StartingScanSyncStatus();
|
syncStatus = AttemptingScanSyncStatus();
|
||||||
|
|
||||||
if (_isolate != null) {
|
if (_isolate != null) {
|
||||||
final runningIsolate = await _isolate!;
|
final runningIsolate = await _isolate!;
|
||||||
|
@ -550,7 +542,8 @@ abstract class ElectrumWalletBase
|
||||||
electrumClient.onConnectionStatusChange = _onConnectionStatusChange;
|
electrumClient.onConnectionStatusChange = _onConnectionStatusChange;
|
||||||
|
|
||||||
await electrumClient.connectToUri(node.uri, useSSL: node.useSSL);
|
await electrumClient.connectToUri(node.uri, useSSL: node.useSSL);
|
||||||
} catch (e) {
|
} catch (e, stacktrace) {
|
||||||
|
print(stacktrace);
|
||||||
print(e.toString());
|
print(e.toString());
|
||||||
syncStatus = FailedSyncStatus();
|
syncStatus = FailedSyncStatus();
|
||||||
}
|
}
|
||||||
|
@ -592,7 +585,7 @@ abstract class ElectrumWalletBase
|
||||||
allInputsAmount += utx.value;
|
allInputsAmount += utx.value;
|
||||||
leftAmount = leftAmount - utx.value;
|
leftAmount = leftAmount - utx.value;
|
||||||
|
|
||||||
final address = addressTypeFromStr(utx.address, network);
|
final address = RegexUtils.addressTypeFromStr(utx.address, network);
|
||||||
ECPrivate? privkey;
|
ECPrivate? privkey;
|
||||||
bool? isSilentPayment = false;
|
bool? isSilentPayment = false;
|
||||||
|
|
||||||
|
@ -796,10 +789,11 @@ abstract class ElectrumWalletBase
|
||||||
}
|
}
|
||||||
|
|
||||||
final changeAddress = await walletAddresses.getChangeAddress();
|
final changeAddress = await walletAddresses.getChangeAddress();
|
||||||
final address = addressTypeFromStr(changeAddress, network);
|
final address = RegexUtils.addressTypeFromStr(changeAddress, network);
|
||||||
outputs.add(BitcoinOutput(
|
outputs.add(BitcoinOutput(
|
||||||
address: address,
|
address: address,
|
||||||
value: BigInt.from(amountLeftForChangeAndFee),
|
value: BigInt.from(amountLeftForChangeAndFee),
|
||||||
|
isChange: true,
|
||||||
));
|
));
|
||||||
|
|
||||||
int estimatedSize;
|
int estimatedSize;
|
||||||
|
@ -833,8 +827,12 @@ abstract class ElectrumWalletBase
|
||||||
|
|
||||||
if (!_isBelowDust(amountLeftForChange)) {
|
if (!_isBelowDust(amountLeftForChange)) {
|
||||||
// Here, lastOutput already is change, return the amount left without the fee to the user's address.
|
// Here, lastOutput already is change, return the amount left without the fee to the user's address.
|
||||||
outputs[outputs.length - 1] =
|
outputs[outputs.length - 1] = BitcoinOutput(
|
||||||
BitcoinOutput(address: lastOutput.address, value: BigInt.from(amountLeftForChange));
|
address: lastOutput.address,
|
||||||
|
value: BigInt.from(amountLeftForChange),
|
||||||
|
isSilentPayment: lastOutput.isSilentPayment,
|
||||||
|
isChange: true,
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
// If has change that is lower than dust, will end up with tx rejected by network rules, so estimate again without the added change
|
// If has change that is lower than dust, will end up with tx rejected by network rules, so estimate again without the added change
|
||||||
outputs.removeLast();
|
outputs.removeLast();
|
||||||
|
@ -938,18 +936,27 @@ abstract class ElectrumWalletBase
|
||||||
|
|
||||||
credentialsAmount += outputAmount;
|
credentialsAmount += outputAmount;
|
||||||
|
|
||||||
final address =
|
final address = RegexUtils.addressTypeFromStr(
|
||||||
addressTypeFromStr(out.isParsedAddress ? out.extractedAddress! : out.address, network);
|
out.isParsedAddress ? out.extractedAddress! : out.address, network);
|
||||||
|
final isSilentPayment = address is SilentPaymentAddress;
|
||||||
|
|
||||||
if (address is SilentPaymentAddress) {
|
if (isSilentPayment) {
|
||||||
hasSilentPayment = true;
|
hasSilentPayment = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sendAll) {
|
if (sendAll) {
|
||||||
// The value will be changed after estimating the Tx size and deducting the fee from the total to be sent
|
// The value will be changed after estimating the Tx size and deducting the fee from the total to be sent
|
||||||
outputs.add(BitcoinOutput(address: address, value: BigInt.from(0)));
|
outputs.add(BitcoinOutput(
|
||||||
|
address: address,
|
||||||
|
value: BigInt.from(0),
|
||||||
|
isSilentPayment: isSilentPayment,
|
||||||
|
));
|
||||||
} else {
|
} else {
|
||||||
outputs.add(BitcoinOutput(address: address, value: BigInt.from(outputAmount)));
|
outputs.add(BitcoinOutput(
|
||||||
|
address: address,
|
||||||
|
value: BigInt.from(outputAmount),
|
||||||
|
isSilentPayment: isSilentPayment,
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1089,7 +1096,8 @@ abstract class ElectrumWalletBase
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
unspentCoins.removeWhere((utxo) => estimatedTx.utxos.any((e) => e.utxo.txHash == utxo.hash));
|
unspentCoins
|
||||||
|
.removeWhere((utxo) => estimatedTx.utxos.any((e) => e.utxo.txHash == utxo.hash));
|
||||||
|
|
||||||
await updateBalance();
|
await updateBalance();
|
||||||
});
|
});
|
||||||
|
@ -1237,12 +1245,7 @@ abstract class ElectrumWalletBase
|
||||||
|
|
||||||
@action
|
@action
|
||||||
@override
|
@override
|
||||||
Future<void> rescan({
|
Future<void> rescan({required int height, bool? doSingleScan}) async {
|
||||||
required int height,
|
|
||||||
int? chainTip,
|
|
||||||
ScanData? scanData,
|
|
||||||
bool? doSingleScan,
|
|
||||||
}) async {
|
|
||||||
silentPaymentsScanningActive = true;
|
silentPaymentsScanningActive = true;
|
||||||
_setListeners(height, doSingleScan: doSingleScan);
|
_setListeners(height, doSingleScan: doSingleScan);
|
||||||
}
|
}
|
||||||
|
@ -1460,7 +1463,7 @@ abstract class ElectrumWalletBase
|
||||||
final addressRecord =
|
final addressRecord =
|
||||||
walletAddresses.allAddresses.firstWhere((element) => element.address == address);
|
walletAddresses.allAddresses.firstWhere((element) => element.address == address);
|
||||||
|
|
||||||
final btcAddress = addressTypeFromStr(addressRecord.address, network);
|
final btcAddress = RegexUtils.addressTypeFromStr(addressRecord.address, network);
|
||||||
final privkey = generateECPrivate(
|
final privkey = generateECPrivate(
|
||||||
hd: addressRecord.isHidden ? walletAddresses.sideHd : walletAddresses.mainHd,
|
hd: addressRecord.isHidden ? walletAddresses.sideHd : walletAddresses.mainHd,
|
||||||
index: addressRecord.index,
|
index: addressRecord.index,
|
||||||
|
@ -1501,7 +1504,7 @@ abstract class ElectrumWalletBase
|
||||||
}
|
}
|
||||||
|
|
||||||
final address = addressFromOutputScript(out.scriptPubKey, network);
|
final address = addressFromOutputScript(out.scriptPubKey, network);
|
||||||
final btcAddress = addressTypeFromStr(address, network);
|
final btcAddress = RegexUtils.addressTypeFromStr(address, network);
|
||||||
outputs.add(BitcoinOutput(address: btcAddress, value: BigInt.from(out.amount.toInt())));
|
outputs.add(BitcoinOutput(address: btcAddress, value: BigInt.from(out.amount.toInt())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1597,8 +1600,6 @@ abstract class ElectrumWalletBase
|
||||||
Future<ElectrumTransactionBundle> getTransactionExpanded(
|
Future<ElectrumTransactionBundle> getTransactionExpanded(
|
||||||
{required String hash, int? height}) async {
|
{required String hash, int? height}) async {
|
||||||
String transactionHex;
|
String transactionHex;
|
||||||
// TODO: time is not always available, and calculating it from height is not always accurate.
|
|
||||||
// Add settings to choose API provider and use and http server instead of electrum for this.
|
|
||||||
int? time;
|
int? time;
|
||||||
int? confirmations;
|
int? confirmations;
|
||||||
|
|
||||||
|
@ -1606,6 +1607,29 @@ abstract class ElectrumWalletBase
|
||||||
|
|
||||||
if (verboseTransaction.isEmpty) {
|
if (verboseTransaction.isEmpty) {
|
||||||
transactionHex = await electrumClient.getTransactionHex(hash: hash);
|
transactionHex = await electrumClient.getTransactionHex(hash: hash);
|
||||||
|
|
||||||
|
if (height != null && await checkIfMempoolAPIIsEnabled()) {
|
||||||
|
final blockHash = await http.get(
|
||||||
|
Uri.parse(
|
||||||
|
"http://mempool.cakewallet.com:8999/api/v1/block-height/$height",
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (blockHash.statusCode == 200 &&
|
||||||
|
blockHash.body.isNotEmpty &&
|
||||||
|
jsonDecode(blockHash.body) != null) {
|
||||||
|
final blockResponse = await http.get(
|
||||||
|
Uri.parse(
|
||||||
|
"http://mempool.cakewallet.com:8999/api/v1/block/${blockHash.body}",
|
||||||
|
),
|
||||||
|
);
|
||||||
|
if (blockResponse.statusCode == 200 &&
|
||||||
|
blockResponse.body.isNotEmpty &&
|
||||||
|
jsonDecode(blockResponse.body)['timestamp'] != null) {
|
||||||
|
time = int.parse(jsonDecode(blockResponse.body)['timestamp'].toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
transactionHex = verboseTransaction['hex'] as String;
|
transactionHex = verboseTransaction['hex'] as String;
|
||||||
time = verboseTransaction['time'] as int?;
|
time = verboseTransaction['time'] as int?;
|
||||||
|
@ -1860,7 +1884,7 @@ abstract class ElectrumWalletBase
|
||||||
final balanceFutures = <Future<Map<String, dynamic>>>[];
|
final balanceFutures = <Future<Map<String, dynamic>>>[];
|
||||||
for (var i = 0; i < addresses.length; i++) {
|
for (var i = 0; i < addresses.length; i++) {
|
||||||
final addressRecord = addresses[i];
|
final addressRecord = addresses[i];
|
||||||
final sh = scriptHash(addressRecord.address, network: network);
|
final sh = addressRecord.getScriptHash(network);
|
||||||
final balanceFuture = electrumClient.getBalance(sh);
|
final balanceFuture = electrumClient.getBalance(sh);
|
||||||
balanceFutures.add(balanceFuture);
|
balanceFutures.add(balanceFuture);
|
||||||
}
|
}
|
||||||
|
@ -1900,7 +1924,10 @@ abstract class ElectrumWalletBase
|
||||||
}
|
}
|
||||||
|
|
||||||
return ElectrumBalance(
|
return ElectrumBalance(
|
||||||
confirmed: totalConfirmed, unconfirmed: totalUnconfirmed, frozen: totalFrozen);
|
confirmed: totalConfirmed,
|
||||||
|
unconfirmed: totalUnconfirmed,
|
||||||
|
frozen: totalFrozen,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> updateBalance() async {
|
Future<void> updateBalance() async {
|
||||||
|
@ -1968,7 +1995,7 @@ abstract class ElectrumWalletBase
|
||||||
|
|
||||||
List<int> possibleRecoverIds = [0, 1];
|
List<int> possibleRecoverIds = [0, 1];
|
||||||
|
|
||||||
final baseAddress = addressTypeFromStr(address, network);
|
final baseAddress = RegexUtils.addressTypeFromStr(address, network);
|
||||||
|
|
||||||
for (int recoveryId in possibleRecoverIds) {
|
for (int recoveryId in possibleRecoverIds) {
|
||||||
final pubKey = sig.recoverPublicKey(messageHash, Curves.generatorSecp256k1, recoveryId);
|
final pubKey = sig.recoverPublicKey(messageHash, Curves.generatorSecp256k1, recoveryId);
|
||||||
|
@ -2061,7 +2088,8 @@ abstract class ElectrumWalletBase
|
||||||
_isTryingToConnect = true;
|
_isTryingToConnect = true;
|
||||||
|
|
||||||
Timer(Duration(seconds: 5), () {
|
Timer(Duration(seconds: 5), () {
|
||||||
if (this.syncStatus is NotConnectedSyncStatus || this.syncStatus is LostConnectionSyncStatus) {
|
if (this.syncStatus is NotConnectedSyncStatus ||
|
||||||
|
this.syncStatus is LostConnectionSyncStatus) {
|
||||||
this.electrumClient.connectToUri(
|
this.electrumClient.connectToUri(
|
||||||
node!.uri,
|
node!.uri,
|
||||||
useSSL: node!.useSSL ?? false,
|
useSSL: node!.useSSL ?? false,
|
||||||
|
@ -2192,21 +2220,22 @@ Future<void> startRefresh(ScanData scanData) async {
|
||||||
|
|
||||||
BehaviorSubject<Object>? tweaksSubscription = null;
|
BehaviorSubject<Object>? tweaksSubscription = null;
|
||||||
|
|
||||||
final syncingStatus = scanData.isSingleScan
|
|
||||||
? SyncingSyncStatus(1, 0)
|
|
||||||
: SyncingSyncStatus.fromHeightValues(scanData.chainTip, initialSyncHeight, syncHeight);
|
|
||||||
|
|
||||||
// Initial status UI update, send how many blocks left to scan
|
|
||||||
scanData.sendPort.send(SyncResponse(syncHeight, syncingStatus));
|
|
||||||
|
|
||||||
final electrumClient = scanData.electrumClient;
|
final electrumClient = scanData.electrumClient;
|
||||||
await electrumClient.connectToUri(
|
await electrumClient.connectToUri(
|
||||||
scanData.node?.uri ?? Uri.parse("tcp://electrs.cakewallet.com:50001"),
|
scanData.node?.uri ?? Uri.parse("tcp://electrs.cakewallet.com:50001"),
|
||||||
useSSL: scanData.node?.useSSL ?? false,
|
useSSL: scanData.node?.useSSL ?? false,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
int getCountPerRequest(int syncHeight) {
|
||||||
|
if (scanData.isSingleScan) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
final amountLeft = scanData.chainTip - syncHeight + 1;
|
||||||
|
return amountLeft;
|
||||||
|
}
|
||||||
|
|
||||||
if (tweaksSubscription == null) {
|
if (tweaksSubscription == null) {
|
||||||
final count = scanData.isSingleScan ? 1 : TWEAKS_COUNT;
|
|
||||||
final receiver = Receiver(
|
final receiver = Receiver(
|
||||||
scanData.silentAddress.b_scan.toHex(),
|
scanData.silentAddress.b_scan.toHex(),
|
||||||
scanData.silentAddress.B_spend.toHex(),
|
scanData.silentAddress.B_spend.toHex(),
|
||||||
|
@ -2215,16 +2244,45 @@ Future<void> startRefresh(ScanData scanData) async {
|
||||||
scanData.labelIndexes.length,
|
scanData.labelIndexes.length,
|
||||||
);
|
);
|
||||||
|
|
||||||
tweaksSubscription = await electrumClient.tweaksSubscribe(height: syncHeight, count: count);
|
// Initial status UI update, send how many blocks in total to scan
|
||||||
tweaksSubscription?.listen((t) async {
|
final initialCount = getCountPerRequest(syncHeight);
|
||||||
final tweaks = t as Map<String, dynamic>;
|
scanData.sendPort.send(SyncResponse(syncHeight, StartingScanSyncStatus(syncHeight)));
|
||||||
|
|
||||||
if (tweaks["message"] != null) {
|
tweaksSubscription = await electrumClient.tweaksSubscribe(
|
||||||
|
height: syncHeight,
|
||||||
|
count: initialCount,
|
||||||
|
);
|
||||||
|
|
||||||
|
Future<void> listenFn(t) async {
|
||||||
|
final tweaks = t as Map<String, dynamic>;
|
||||||
|
final msg = tweaks["message"];
|
||||||
|
// success or error msg
|
||||||
|
final noData = msg != null;
|
||||||
|
|
||||||
|
if (noData) {
|
||||||
// re-subscribe to continue receiving messages, starting from the next unscanned height
|
// re-subscribe to continue receiving messages, starting from the next unscanned height
|
||||||
electrumClient.tweaksSubscribe(height: syncHeight + 1, count: count);
|
final nextHeight = syncHeight + 1;
|
||||||
|
final nextCount = getCountPerRequest(nextHeight);
|
||||||
|
|
||||||
|
if (nextCount > 0) {
|
||||||
|
tweaksSubscription?.close();
|
||||||
|
|
||||||
|
final nextTweaksSubscription = electrumClient.tweaksSubscribe(
|
||||||
|
height: nextHeight,
|
||||||
|
count: nextCount,
|
||||||
|
);
|
||||||
|
nextTweaksSubscription?.listen(listenFn);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Continuous status UI update, send how many blocks left to scan
|
||||||
|
final syncingStatus = scanData.isSingleScan
|
||||||
|
? SyncingSyncStatus(1, 0)
|
||||||
|
: SyncingSyncStatus.fromHeightValues(scanData.chainTip, initialSyncHeight, syncHeight);
|
||||||
|
scanData.sendPort.send(SyncResponse(syncHeight, syncingStatus));
|
||||||
|
|
||||||
final blockHeight = tweaks.keys.first;
|
final blockHeight = tweaks.keys.first;
|
||||||
final tweakHeight = int.parse(blockHeight);
|
final tweakHeight = int.parse(blockHeight);
|
||||||
|
|
||||||
|
@ -2264,6 +2322,7 @@ Future<void> startRefresh(ScanData scanData) async {
|
||||||
: DateTime.now(),
|
: DateTime.now(),
|
||||||
confirmations: scanData.chainTip - tweakHeight + 1,
|
confirmations: scanData.chainTip - tweakHeight + 1,
|
||||||
unspents: [],
|
unspents: [],
|
||||||
|
isReceivedSilentPayment: true,
|
||||||
);
|
);
|
||||||
|
|
||||||
addToWallet.forEach((label, value) {
|
addToWallet.forEach((label, value) {
|
||||||
|
@ -2318,16 +2377,6 @@ Future<void> startRefresh(ScanData scanData) async {
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
|
|
||||||
syncHeight = tweakHeight;
|
syncHeight = tweakHeight;
|
||||||
scanData.sendPort.send(
|
|
||||||
SyncResponse(
|
|
||||||
syncHeight,
|
|
||||||
SyncingSyncStatus.fromHeightValues(
|
|
||||||
scanData.chainTip,
|
|
||||||
initialSyncHeight,
|
|
||||||
syncHeight,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
if (tweakHeight >= scanData.chainTip || scanData.isSingleScan) {
|
if (tweakHeight >= scanData.chainTip || scanData.isSingleScan) {
|
||||||
if (tweakHeight >= scanData.chainTip)
|
if (tweakHeight >= scanData.chainTip)
|
||||||
|
@ -2343,7 +2392,9 @@ Future<void> startRefresh(ScanData scanData) async {
|
||||||
await tweaksSubscription!.close();
|
await tweaksSubscription!.close();
|
||||||
await electrumClient.close();
|
await electrumClient.close();
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
|
tweaksSubscription?.listen(listenFn);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tweaksSubscription == null) {
|
if (tweaksSubscription == null) {
|
||||||
|
@ -2373,6 +2424,7 @@ class EstimatedTxResult {
|
||||||
final int fee;
|
final int fee;
|
||||||
final int amount;
|
final int amount;
|
||||||
final bool spendsSilentPayment;
|
final bool spendsSilentPayment;
|
||||||
|
// final bool sendsToSilentPayment;
|
||||||
final bool hasChange;
|
final bool hasChange;
|
||||||
final bool isSendAll;
|
final bool isSendAll;
|
||||||
final String? memo;
|
final String? memo;
|
||||||
|
@ -2386,31 +2438,6 @@ class PublicKeyWithDerivationPath {
|
||||||
final String publicKey;
|
final String publicKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
BitcoinBaseAddress addressTypeFromStr(String address, BasedUtxoNetwork network) {
|
|
||||||
if (network is BitcoinCashNetwork) {
|
|
||||||
if (!address.startsWith("bitcoincash:") &&
|
|
||||||
(address.startsWith("q") || address.startsWith("p"))) {
|
|
||||||
address = "bitcoincash:$address";
|
|
||||||
}
|
|
||||||
|
|
||||||
return BitcoinCashAddress(address).baseAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (P2pkhAddress.regex.hasMatch(address)) {
|
|
||||||
return P2pkhAddress.fromAddress(address: address, network: network);
|
|
||||||
} else if (P2shAddress.regex.hasMatch(address)) {
|
|
||||||
return P2shAddress.fromAddress(address: address, network: network);
|
|
||||||
} else if (P2wshAddress.regex.hasMatch(address)) {
|
|
||||||
return P2wshAddress.fromAddress(address: address, network: network);
|
|
||||||
} else if (P2trAddress.regex.hasMatch(address)) {
|
|
||||||
return P2trAddress.fromAddress(address: address, network: network);
|
|
||||||
} else if (SilentPaymentAddress.regex.hasMatch(address)) {
|
|
||||||
return SilentPaymentAddress.fromAddress(address);
|
|
||||||
} else {
|
|
||||||
return P2wpkhAddress.fromAddress(address: address, network: network);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BitcoinAddressType _getScriptType(BitcoinBaseAddress type) {
|
BitcoinAddressType _getScriptType(BitcoinBaseAddress type) {
|
||||||
if (type is P2pkhAddress) {
|
if (type is P2pkhAddress) {
|
||||||
return P2pkhAddressType.p2pkh;
|
return P2pkhAddressType.p2pkh;
|
||||||
|
|
|
@ -301,7 +301,7 @@ abstract class LitecoinWalletBase extends ElectrumWallet with Store {
|
||||||
|
|
||||||
List<int> possibleRecoverIds = [0, 1];
|
List<int> possibleRecoverIds = [0, 1];
|
||||||
|
|
||||||
final baseAddress = addressTypeFromStr(address, network);
|
final baseAddress = RegexUtils.addressTypeFromStr(address, network);
|
||||||
|
|
||||||
for (int recoveryId in possibleRecoverIds) {
|
for (int recoveryId in possibleRecoverIds) {
|
||||||
final pubKey = sig.recoverPublicKey(messageHash, Curves.generatorSecp256k1, recoveryId);
|
final pubKey = sig.recoverPublicKey(messageHash, Curves.generatorSecp256k1, recoveryId);
|
||||||
|
|
|
@ -47,6 +47,19 @@ class PendingBitcoinTransaction with PendingTransaction {
|
||||||
@override
|
@override
|
||||||
int? get outputCount => _tx.outputs.length;
|
int? get outputCount => _tx.outputs.length;
|
||||||
|
|
||||||
|
List<TxOutput> get outputs => _tx.outputs;
|
||||||
|
|
||||||
|
bool get hasSilentPayment => _tx.hasSilentPayment;
|
||||||
|
|
||||||
|
PendingChange? get change {
|
||||||
|
try {
|
||||||
|
final change = _tx.outputs.firstWhere((out) => out.isChange);
|
||||||
|
return PendingChange(change.scriptPubKey.toAddress(), BtcUtils.fromSatoshi(change.amount));
|
||||||
|
} catch (_) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final List<void Function(ElectrumTransactionInfo transaction)> _listeners;
|
final List<void Function(ElectrumTransactionInfo transaction)> _listeners;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
import 'package:crypto/crypto.dart';
|
|
||||||
import 'package:cw_bitcoin/address_to_output_script.dart';
|
|
||||||
import 'package:bitcoin_base/bitcoin_base.dart' as bitcoin;
|
|
||||||
|
|
||||||
String scriptHash(String address, {required bitcoin.BasedUtxoNetwork network}) {
|
|
||||||
final outputScript = addressToOutputScript(address, network);
|
|
||||||
final parts = sha256.convert(outputScript).toString().split('');
|
|
||||||
var res = '';
|
|
||||||
|
|
||||||
for (var i = parts.length - 1; i >= 0; i--) {
|
|
||||||
final char = parts[i];
|
|
||||||
i--;
|
|
||||||
final nextChar = parts[i];
|
|
||||||
res += nextChar;
|
|
||||||
res += char;
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
|
@ -70,8 +70,8 @@ packages:
|
||||||
dependency: "direct overridden"
|
dependency: "direct overridden"
|
||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: cake-update-v5
|
ref: cake-update-v7
|
||||||
resolved-ref: ff2b10eb27b0254ce4518d054332d97d77d9b380
|
resolved-ref: bc49e3b1cba601828f8ddc3d016188d8c2499088
|
||||||
url: "https://github.com/cake-tech/bitcoin_base"
|
url: "https://github.com/cake-tech/bitcoin_base"
|
||||||
source: git
|
source: git
|
||||||
version: "4.7.0"
|
version: "4.7.0"
|
||||||
|
|
|
@ -57,7 +57,7 @@ dependency_overrides:
|
||||||
bitcoin_base:
|
bitcoin_base:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/cake-tech/bitcoin_base
|
url: https://github.com/cake-tech/bitcoin_base
|
||||||
ref: cake-update-v5
|
ref: cake-update-v7
|
||||||
|
|
||||||
# For information on the generic Dart part of this file, see the
|
# For information on the generic Dart part of this file, see the
|
||||||
# following page: https://dart.dev/tools/pub/pubspec
|
# following page: https://dart.dev/tools/pub/pubspec
|
||||||
|
|
|
@ -42,7 +42,7 @@ dependency_overrides:
|
||||||
bitcoin_base:
|
bitcoin_base:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/cake-tech/bitcoin_base
|
url: https://github.com/cake-tech/bitcoin_base
|
||||||
ref: cake-update-v5
|
ref: cake-update-v7
|
||||||
|
|
||||||
# For information on the generic Dart part of this file, see the
|
# For information on the generic Dart part of this file, see the
|
||||||
# following page: https://dart.dev/tools/pub/pubspec
|
# following page: https://dart.dev/tools/pub/pubspec
|
||||||
|
|
|
@ -267,6 +267,16 @@ const bitcoinDates = {
|
||||||
"2023-01": 769810,
|
"2023-01": 769810,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Future<int> getBitcoinHeightByDateAPI({required DateTime date}) async {
|
||||||
|
final response = await http.get(
|
||||||
|
Uri.parse(
|
||||||
|
"http://mempool.cakewallet.com:8999/api/v1/mining/blocks/timestamp/${(date.millisecondsSinceEpoch / 1000).round()}",
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
return jsonDecode(response.body)['height'] as int;
|
||||||
|
}
|
||||||
|
|
||||||
int getBitcoinHeightByDate({required DateTime date}) {
|
int getBitcoinHeightByDate({required DateTime date}) {
|
||||||
String dateKey = '${date.year}-${date.month.toString().padLeft(2, '0')}';
|
String dateKey = '${date.year}-${date.month.toString().padLeft(2, '0')}';
|
||||||
final closestKey = bitcoinDates.keys
|
final closestKey = bitcoinDates.keys
|
||||||
|
@ -377,4 +387,3 @@ int getWowneroHeightByDate({required DateTime date}) {
|
||||||
|
|
||||||
return wowDates[closestKey] ?? 0;
|
return wowDates[closestKey] ?? 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
class PendingChange {
|
||||||
|
final String address;
|
||||||
|
final String amount;
|
||||||
|
|
||||||
|
PendingChange(this.address, this.amount);
|
||||||
|
}
|
||||||
|
|
||||||
mixin PendingTransaction {
|
mixin PendingTransaction {
|
||||||
String get id;
|
String get id;
|
||||||
String get amountFormatted;
|
String get amountFormatted;
|
||||||
|
@ -5,6 +12,7 @@ mixin PendingTransaction {
|
||||||
String? feeRate;
|
String? feeRate;
|
||||||
String get hex;
|
String get hex;
|
||||||
int? get outputCount => null;
|
int? get outputCount => null;
|
||||||
|
PendingChange? change;
|
||||||
|
|
||||||
Future<void> commit();
|
Future<void> commit();
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,9 @@ abstract class SyncStatus {
|
||||||
}
|
}
|
||||||
|
|
||||||
class StartingScanSyncStatus extends SyncStatus {
|
class StartingScanSyncStatus extends SyncStatus {
|
||||||
|
StartingScanSyncStatus(this.beginHeight);
|
||||||
|
|
||||||
|
final int beginHeight;
|
||||||
@override
|
@override
|
||||||
double progress() => 0.0;
|
double progress() => 0.0;
|
||||||
}
|
}
|
||||||
|
@ -59,6 +62,11 @@ class AttemptingSyncStatus extends SyncStatus {
|
||||||
double progress() => 0.0;
|
double progress() => 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class AttemptingScanSyncStatus extends SyncStatus {
|
||||||
|
@override
|
||||||
|
double progress() => 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
class FailedSyncStatus extends NotConnectedSyncStatus {}
|
class FailedSyncStatus extends NotConnectedSyncStatus {}
|
||||||
|
|
||||||
class ConnectingSyncStatus extends SyncStatus {
|
class ConnectingSyncStatus extends SyncStatus {
|
||||||
|
|
|
@ -117,10 +117,10 @@ packages:
|
||||||
dependency: "direct overridden"
|
dependency: "direct overridden"
|
||||||
description:
|
description:
|
||||||
name: build_runner_core
|
name: build_runner_core
|
||||||
sha256: "0671ad4162ed510b70d0eb4ad6354c249f8429cab4ae7a4cec86bbc2886eb76e"
|
sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.2.7+1"
|
version: "7.2.7"
|
||||||
built_collection:
|
built_collection:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -361,7 +361,7 @@ class CWBitcoin extends Bitcoin {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
final sh = scriptHash(address, network: network);
|
final sh = BitcoinAddressUtils.scriptHash(address, network: network);
|
||||||
final history = await electrumClient.getHistory(sh);
|
final history = await electrumClient.getHistory(sh);
|
||||||
|
|
||||||
final balance = await electrumClient.getBalance(sh);
|
final balance = await electrumClient.getBalance(sh);
|
||||||
|
@ -522,7 +522,20 @@ class CWBitcoin extends Bitcoin {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int getHeightByDate({required DateTime date}) => getBitcoinHeightByDate(date: date);
|
Future<bool> checkIfMempoolAPIIsEnabled(Object wallet) async {
|
||||||
|
final bitcoinWallet = wallet as ElectrumWallet;
|
||||||
|
return await bitcoinWallet.checkIfMempoolAPIIsEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<int> getHeightByDate({required DateTime date, bool? bitcoinMempoolAPIEnabled}) async {
|
||||||
|
if (bitcoinMempoolAPIEnabled ?? false) {
|
||||||
|
try {
|
||||||
|
return await getBitcoinHeightByDateAPI(date: date);
|
||||||
|
} catch (_) {}
|
||||||
|
}
|
||||||
|
return await getBitcoinHeightByDate(date: date);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> rescan(Object wallet, {required int height, bool? doSingleScan}) async {
|
Future<void> rescan(Object wallet, {required int height, bool? doSingleScan}) async {
|
||||||
|
@ -547,4 +560,35 @@ class CWBitcoin extends Bitcoin {
|
||||||
final bitcoinWallet = wallet as ElectrumWallet;
|
final bitcoinWallet = wallet as ElectrumWallet;
|
||||||
await bitcoinWallet.updateFeeRates();
|
await bitcoinWallet.updateFeeRates();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Output> updateOutputs(PendingTransaction pendingTransaction, List<Output> outputs) {
|
||||||
|
final pendingTx = pendingTransaction as PendingBitcoinTransaction;
|
||||||
|
|
||||||
|
if (!pendingTx.hasSilentPayment) {
|
||||||
|
return outputs;
|
||||||
|
}
|
||||||
|
|
||||||
|
final updatedOutputs = outputs.map((output) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
final pendingOut = pendingTx!.outputs[outputs.indexOf(output)];
|
||||||
|
final updatedOutput = output;
|
||||||
|
|
||||||
|
updatedOutput.stealthAddress = P2trAddress.fromScriptPubkey(script: pendingOut.scriptPubKey)
|
||||||
|
.toAddress(BitcoinNetwork.mainnet);
|
||||||
|
return updatedOutput;
|
||||||
|
} catch (_) {}
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}).toList();
|
||||||
|
|
||||||
|
return updatedOutputs;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool txIsReceivedSilentPayment(TransactionInfo txInfo) {
|
||||||
|
final tx = txInfo as ElectrumTransactionInfo;
|
||||||
|
return tx.isReceivedSilentPayment;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,32 +5,40 @@ import 'package:cake_wallet/solana/solana.dart';
|
||||||
import 'package:cw_core/crypto_currency.dart';
|
import 'package:cw_core/crypto_currency.dart';
|
||||||
import 'package:cw_core/erc20_token.dart';
|
import 'package:cw_core/erc20_token.dart';
|
||||||
|
|
||||||
|
const BEFORE_REGEX = '(^|\s)';
|
||||||
|
const AFTER_REGEX = '(\$|\s)';
|
||||||
|
|
||||||
class AddressValidator extends TextValidator {
|
class AddressValidator extends TextValidator {
|
||||||
AddressValidator({required CryptoCurrency type})
|
AddressValidator({required CryptoCurrency type})
|
||||||
: super(
|
: super(
|
||||||
errorMessage: S.current.error_text_address,
|
errorMessage: S.current.error_text_address,
|
||||||
useAdditionalValidation: type == CryptoCurrency.btc
|
useAdditionalValidation: type == CryptoCurrency.btc
|
||||||
? (String txt) => validateAddress(address: txt, network: BitcoinNetwork.mainnet)
|
? (String txt) => BitcoinAddressUtils.validateAddress(
|
||||||
|
address: txt,
|
||||||
|
network: BitcoinNetwork.mainnet,
|
||||||
|
)
|
||||||
: null,
|
: null,
|
||||||
pattern: getPattern(type),
|
pattern: getPattern(type),
|
||||||
length: getLength(type));
|
length: getLength(type));
|
||||||
|
|
||||||
static String getPattern(CryptoCurrency type) {
|
static String getPattern(CryptoCurrency type) {
|
||||||
|
var pattern = "";
|
||||||
if (type is Erc20Token) {
|
if (type is Erc20Token) {
|
||||||
return '0x[0-9a-zA-Z]';
|
pattern = '0x[0-9a-zA-Z]';
|
||||||
}
|
}
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case CryptoCurrency.xmr:
|
case CryptoCurrency.xmr:
|
||||||
return '^4[0-9a-zA-Z]{94}\$|^8[0-9a-zA-Z]{94}\$|^[0-9a-zA-Z]{106}\$';
|
pattern = '4[0-9a-zA-Z]{94}|8[0-9a-zA-Z]{94}|[0-9a-zA-Z]{106}';
|
||||||
case CryptoCurrency.ada:
|
case CryptoCurrency.ada:
|
||||||
return '^[0-9a-zA-Z]{59}\$|^[0-9a-zA-Z]{92}\$|^[0-9a-zA-Z]{104}\$'
|
pattern = '[0-9a-zA-Z]{59}|[0-9a-zA-Z]{92}|[0-9a-zA-Z]{104}'
|
||||||
'|^[0-9a-zA-Z]{105}\$|^addr1[0-9a-zA-Z]{98}\$';
|
'|[0-9a-zA-Z]{105}|addr1[0-9a-zA-Z]{98}';
|
||||||
case CryptoCurrency.btc:
|
case CryptoCurrency.btc:
|
||||||
return '^${P2pkhAddress.regex.pattern}\$|^${P2shAddress.regex.pattern}\$|^${P2wpkhAddress.regex.pattern}\$|${P2trAddress.regex.pattern}\$|^${P2wshAddress.regex.pattern}\$|^${SilentPaymentAddress.regex.pattern}\$';
|
pattern =
|
||||||
|
'${P2pkhAddress.regex.pattern}|${P2shAddress.regex.pattern}|${P2wpkhAddress.regex.pattern}|${P2trAddress.regex.pattern}|${P2wshAddress.regex.pattern}|${SilentPaymentAddress.regex.pattern}';
|
||||||
case CryptoCurrency.nano:
|
case CryptoCurrency.nano:
|
||||||
return '[0-9a-zA-Z_]';
|
pattern = '[0-9a-zA-Z_]';
|
||||||
case CryptoCurrency.banano:
|
case CryptoCurrency.banano:
|
||||||
return '[0-9a-zA-Z_]';
|
pattern = '[0-9a-zA-Z_]';
|
||||||
case CryptoCurrency.usdc:
|
case CryptoCurrency.usdc:
|
||||||
case CryptoCurrency.usdcpoly:
|
case CryptoCurrency.usdcpoly:
|
||||||
case CryptoCurrency.usdtPoly:
|
case CryptoCurrency.usdtPoly:
|
||||||
|
@ -66,11 +74,11 @@ class AddressValidator extends TextValidator {
|
||||||
case CryptoCurrency.dydx:
|
case CryptoCurrency.dydx:
|
||||||
case CryptoCurrency.steth:
|
case CryptoCurrency.steth:
|
||||||
case CryptoCurrency.shib:
|
case CryptoCurrency.shib:
|
||||||
return '0x[0-9a-zA-Z]';
|
pattern = '0x[0-9a-zA-Z]';
|
||||||
case CryptoCurrency.xrp:
|
case CryptoCurrency.xrp:
|
||||||
return '^[0-9a-zA-Z]{34}\$|^X[0-9a-zA-Z]{46}\$';
|
pattern = '[0-9a-zA-Z]{34}|X[0-9a-zA-Z]{46}';
|
||||||
case CryptoCurrency.xhv:
|
case CryptoCurrency.xhv:
|
||||||
return '^hvx|hvi|hvs[0-9a-zA-Z]';
|
pattern = 'hvx|hvi|hvs[0-9a-zA-Z]';
|
||||||
case CryptoCurrency.xag:
|
case CryptoCurrency.xag:
|
||||||
case CryptoCurrency.xau:
|
case CryptoCurrency.xau:
|
||||||
case CryptoCurrency.xaud:
|
case CryptoCurrency.xaud:
|
||||||
|
@ -92,40 +100,43 @@ class AddressValidator extends TextValidator {
|
||||||
case CryptoCurrency.dash:
|
case CryptoCurrency.dash:
|
||||||
case CryptoCurrency.eos:
|
case CryptoCurrency.eos:
|
||||||
case CryptoCurrency.wow:
|
case CryptoCurrency.wow:
|
||||||
return '[0-9a-zA-Z]';
|
pattern = '[0-9a-zA-Z]';
|
||||||
case CryptoCurrency.bch:
|
case CryptoCurrency.bch:
|
||||||
return '^(?!bitcoincash:)[0-9a-zA-Z]*\$|^(?!bitcoincash:)q|p[0-9a-zA-Z]{41}\$|^(?!bitcoincash:)q|p[0-9a-zA-Z]{42}\$|^bitcoincash:q|p[0-9a-zA-Z]{41}\$|^bitcoincash:q|p[0-9a-zA-Z]{42}\$';
|
pattern =
|
||||||
|
'(?!bitcoincash:)[0-9a-zA-Z]*|(?!bitcoincash:)q|p[0-9a-zA-Z]{41}|(?!bitcoincash:)q|p[0-9a-zA-Z]{42}|bitcoincash:q|p[0-9a-zA-Z]{41}|bitcoincash:q|p[0-9a-zA-Z]{42}';
|
||||||
case CryptoCurrency.bnb:
|
case CryptoCurrency.bnb:
|
||||||
return '[0-9a-zA-Z]';
|
pattern = '[0-9a-zA-Z]';
|
||||||
case CryptoCurrency.ltc:
|
case CryptoCurrency.ltc:
|
||||||
return '^(?!(ltc|LTC)1)[0-9a-zA-Z]*\$|(^LTC1[A-Z0-9]*\$)|(^ltc1[a-z0-9]*\$)';
|
pattern = '(?!(ltc|LTC)1)[0-9a-zA-Z]*|(LTC1[A-Z0-9]*)|(ltc1[a-z0-9]*)';
|
||||||
case CryptoCurrency.hbar:
|
case CryptoCurrency.hbar:
|
||||||
return '[0-9a-zA-Z.]';
|
pattern = '[0-9a-zA-Z.]';
|
||||||
case CryptoCurrency.zaddr:
|
case CryptoCurrency.zaddr:
|
||||||
return '^zs[0-9a-zA-Z]{75}';
|
pattern = 'zs[0-9a-zA-Z]{75}';
|
||||||
case CryptoCurrency.zec:
|
case CryptoCurrency.zec:
|
||||||
return '^t1[0-9a-zA-Z]{33}\$|^t3[0-9a-zA-Z]{33}\$';
|
pattern = 't1[0-9a-zA-Z]{33}|t3[0-9a-zA-Z]{33}';
|
||||||
case CryptoCurrency.dcr:
|
case CryptoCurrency.dcr:
|
||||||
return 'D[ksecS]([0-9a-zA-Z])+';
|
pattern = 'D[ksecS]([0-9a-zA-Z])+';
|
||||||
case CryptoCurrency.rvn:
|
case CryptoCurrency.rvn:
|
||||||
return '[Rr]([1-9a-km-zA-HJ-NP-Z]){33}';
|
pattern = '[Rr]([1-9a-km-zA-HJ-NP-Z]){33}';
|
||||||
case CryptoCurrency.near:
|
case CryptoCurrency.near:
|
||||||
return '[0-9a-f]{64}';
|
pattern = '[0-9a-f]{64}';
|
||||||
case CryptoCurrency.rune:
|
case CryptoCurrency.rune:
|
||||||
return 'thor1[0-9a-z]{38}';
|
pattern = 'thor1[0-9a-z]{38}';
|
||||||
case CryptoCurrency.scrt:
|
case CryptoCurrency.scrt:
|
||||||
return 'secret1[0-9a-z]{38}';
|
pattern = 'secret1[0-9a-z]{38}';
|
||||||
case CryptoCurrency.stx:
|
case CryptoCurrency.stx:
|
||||||
return 'S[MP][0-9a-zA-Z]+';
|
pattern = 'S[MP][0-9a-zA-Z]+';
|
||||||
case CryptoCurrency.kmd:
|
case CryptoCurrency.kmd:
|
||||||
return 'R[0-9a-zA-Z]{33}';
|
pattern = 'R[0-9a-zA-Z]{33}';
|
||||||
case CryptoCurrency.pivx:
|
case CryptoCurrency.pivx:
|
||||||
return 'D([1-9a-km-zA-HJ-NP-Z]){33}';
|
pattern = 'D([1-9a-km-zA-HJ-NP-Z]){33}';
|
||||||
case CryptoCurrency.btcln:
|
case CryptoCurrency.btcln:
|
||||||
return '^(lnbc|LNBC)([0-9]{1,}[a-zA-Z0-9]+)';
|
pattern = '(lnbc|LNBC)([0-9]{1,}[a-zA-Z0-9]+)';
|
||||||
default:
|
default:
|
||||||
return '[0-9a-zA-Z]';
|
pattern = '[0-9a-zA-Z]';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return '$BEFORE_REGEX$pattern$AFTER_REGEX';
|
||||||
}
|
}
|
||||||
|
|
||||||
static List<int>? getLength(CryptoCurrency type) {
|
static List<int>? getLength(CryptoCurrency type) {
|
||||||
|
@ -266,56 +277,54 @@ class AddressValidator extends TextValidator {
|
||||||
}
|
}
|
||||||
|
|
||||||
static String? getAddressFromStringPattern(CryptoCurrency type) {
|
static String? getAddressFromStringPattern(CryptoCurrency type) {
|
||||||
|
String? pattern = null;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case CryptoCurrency.xmr:
|
case CryptoCurrency.xmr:
|
||||||
case CryptoCurrency.wow:
|
case CryptoCurrency.wow:
|
||||||
return '([^0-9a-zA-Z]|^)4[0-9a-zA-Z]{94}([^0-9a-zA-Z]|\$)'
|
pattern = '4[0-9a-zA-Z]{94}'
|
||||||
'|([^0-9a-zA-Z]|^)8[0-9a-zA-Z]{94}([^0-9a-zA-Z]|\$)'
|
'|8[0-9a-zA-Z]{94}'
|
||||||
'|([^0-9a-zA-Z]|^)[0-9a-zA-Z]{106}([^0-9a-zA-Z]|\$)';
|
'|[0-9a-zA-Z]{106}';
|
||||||
case CryptoCurrency.btc:
|
case CryptoCurrency.btc:
|
||||||
return '([^0-9a-zA-Z]|^)([1mn][a-km-zA-HJ-NP-Z1-9]{25,34})([^0-9a-zA-Z]|\$)' //P2pkhAddress type
|
pattern =
|
||||||
'|([^0-9a-zA-Z]|^)([23][a-km-zA-HJ-NP-Z1-9]{25,34})([^0-9a-zA-Z]|\$)' //P2shAddress type
|
'${P2pkhAddress.regex.pattern}|${P2shAddress.regex.pattern}|${P2wpkhAddress.regex.pattern}|${P2trAddress.regex.pattern}|${P2wshAddress.regex.pattern}|${SilentPaymentAddress.regex.pattern}';
|
||||||
'|([^0-9a-zA-Z]|^)((bc|tb)1q[ac-hj-np-z02-9]{25,39})([^0-9a-zA-Z]|\$)' //P2wpkhAddress type
|
|
||||||
'|([^0-9a-zA-Z]|^)((bc|tb)1q[ac-hj-np-z02-9]{40,80})([^0-9a-zA-Z]|\$)' //P2wshAddress type
|
|
||||||
'|([^0-9a-zA-Z]|^)((bc|tb)1p([ac-hj-np-z02-9]{39}|[ac-hj-np-z02-9]{59}|[ac-hj-np-z02-9]{8,89}))([^0-9a-zA-Z]|\$)' //P2trAddress type
|
|
||||||
'|${SilentPaymentAddress.regex.pattern}\$';
|
|
||||||
|
|
||||||
case CryptoCurrency.ltc:
|
case CryptoCurrency.ltc:
|
||||||
return '([^0-9a-zA-Z]|^)^L[a-zA-Z0-9]{26,33}([^0-9a-zA-Z]|\$)'
|
pattern = '^L[a-zA-Z0-9]{26,33}'
|
||||||
'|([^0-9a-zA-Z]|^)[LM][a-km-zA-HJ-NP-Z1-9]{26,33}([^0-9a-zA-Z]|\$)'
|
'|[LM][a-km-zA-HJ-NP-Z1-9]{26,33}'
|
||||||
'|([^0-9a-zA-Z]|^)ltc[a-zA-Z0-9]{26,45}([^0-9a-zA-Z]|\$)';
|
'|ltc[a-zA-Z0-9]{26,45}';
|
||||||
case CryptoCurrency.eth:
|
case CryptoCurrency.eth:
|
||||||
return '0x[0-9a-zA-Z]{42}';
|
pattern = '0x[0-9a-zA-Z]{42}';
|
||||||
case CryptoCurrency.maticpoly:
|
case CryptoCurrency.maticpoly:
|
||||||
return '0x[0-9a-zA-Z]{42}';
|
pattern = '0x[0-9a-zA-Z]{42}';
|
||||||
case CryptoCurrency.nano:
|
case CryptoCurrency.nano:
|
||||||
return 'nano_[0-9a-zA-Z]{60}';
|
pattern = 'nano_[0-9a-zA-Z]{60}';
|
||||||
case CryptoCurrency.banano:
|
case CryptoCurrency.banano:
|
||||||
return 'ban_[0-9a-zA-Z]{60}';
|
pattern = 'ban_[0-9a-zA-Z]{60}';
|
||||||
case CryptoCurrency.bch:
|
case CryptoCurrency.bch:
|
||||||
return 'bitcoincash:q[0-9a-zA-Z]{41}([^0-9a-zA-Z]|\$)'
|
pattern = '(bitcoincash:)?q[0-9a-zA-Z]{41,42}';
|
||||||
'|bitcoincash:q[0-9a-zA-Z]{42}([^0-9a-zA-Z]|\$)'
|
|
||||||
'|([^0-9a-zA-Z]|^)q[0-9a-zA-Z]{41}([^0-9a-zA-Z]|\$)'
|
|
||||||
'|([^0-9a-zA-Z]|^)q[0-9a-zA-Z]{42}([^0-9a-zA-Z]|\$)';
|
|
||||||
case CryptoCurrency.sol:
|
case CryptoCurrency.sol:
|
||||||
return '([^0-9a-zA-Z]|^)[1-9A-HJ-NP-Za-km-z]{43,44}([^0-9a-zA-Z]|\$)';
|
pattern = '[1-9A-HJ-NP-Za-km-z]{43,44}';
|
||||||
case CryptoCurrency.trx:
|
case CryptoCurrency.trx:
|
||||||
return '(T|t)[1-9A-HJ-NP-Za-km-z]{33}';
|
pattern = '(T|t)[1-9A-HJ-NP-Za-km-z]{33}';
|
||||||
default:
|
default:
|
||||||
if (type.tag == CryptoCurrency.eth.title) {
|
if (type.tag == CryptoCurrency.eth.title) {
|
||||||
return '0x[0-9a-zA-Z]{42}';
|
pattern = '0x[0-9a-zA-Z]{42}';
|
||||||
}
|
}
|
||||||
if (type.tag == CryptoCurrency.maticpoly.tag) {
|
if (type.tag == CryptoCurrency.maticpoly.tag) {
|
||||||
return '0x[0-9a-zA-Z]{42}';
|
pattern = '0x[0-9a-zA-Z]{42}';
|
||||||
}
|
}
|
||||||
if (type.tag == CryptoCurrency.sol.title) {
|
if (type.tag == CryptoCurrency.sol.title) {
|
||||||
return '([^0-9a-zA-Z]|^)[1-9A-HJ-NP-Za-km-z]{43,44}([^0-9a-zA-Z]|\$)';
|
pattern = '[1-9A-HJ-NP-Za-km-z]{43,44}';
|
||||||
}
|
}
|
||||||
if (type.tag == CryptoCurrency.trx.title) {
|
if (type.tag == CryptoCurrency.trx.title) {
|
||||||
return '(T|t)[1-9A-HJ-NP-Za-km-z]{33}';
|
pattern = '(T|t)[1-9A-HJ-NP-Za-km-z]{33}';
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pattern != null) {
|
||||||
|
return "$BEFORE_REGEX$pattern$AFTER_REGEX";
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,11 @@ String syncStatusTitle(SyncStatus syncStatus) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (syncStatus is StartingScanSyncStatus) {
|
if (syncStatus is StartingScanSyncStatus) {
|
||||||
return S.current.sync_status_starting_scan;
|
return S.current.sync_status_starting_scan(syncStatus.beginHeight.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (syncStatus is AttemptingScanSyncStatus) {
|
||||||
|
return S.current.sync_status_attempting_scan;
|
||||||
}
|
}
|
||||||
|
|
||||||
return '';
|
return '';
|
||||||
|
|
|
@ -51,7 +51,7 @@ class AddressResolver {
|
||||||
throw Exception('Unexpected token: $type for getAddressFromStringPattern');
|
throw Exception('Unexpected token: $type for getAddressFromStringPattern');
|
||||||
}
|
}
|
||||||
|
|
||||||
final match = RegExp(addressPattern).firstMatch(raw);
|
final match = RegExp(addressPattern, multiLine: true).firstMatch(raw);
|
||||||
return match?.group(0)?.replaceAllMapped(RegExp('[^0-9a-zA-Z]|bitcoincash:|nano_|ban_'),
|
return match?.group(0)?.replaceAllMapped(RegExp('[^0-9a-zA-Z]|bitcoincash:|nano_|ban_'),
|
||||||
(Match match) {
|
(Match match) {
|
||||||
String group = match.group(0)!;
|
String group = match.group(0)!;
|
||||||
|
@ -213,8 +213,7 @@ class AddressResolver {
|
||||||
await NostrProfileHandler.processRelays(context, nostrProfile!, text);
|
await NostrProfileHandler.processRelays(context, nostrProfile!, text);
|
||||||
|
|
||||||
if (nostrUserData != null) {
|
if (nostrUserData != null) {
|
||||||
String? addressFromBio = extractAddressByType(
|
String? addressFromBio = extractAddressByType(raw: nostrUserData.about, type: currency);
|
||||||
raw: nostrUserData.about, type: currency);
|
|
||||||
if (addressFromBio != null) {
|
if (addressFromBio != null) {
|
||||||
return ParsedAddress.nostrAddress(
|
return ParsedAddress.nostrAddress(
|
||||||
address: addressFromBio,
|
address: addressFromBio,
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:cake_wallet/bitcoin/bitcoin.dart';
|
||||||
import 'package:cake_wallet/src/screens/dashboard/widgets/anonpay_transaction_row.dart';
|
import 'package:cake_wallet/src/screens/dashboard/widgets/anonpay_transaction_row.dart';
|
||||||
import 'package:cake_wallet/src/screens/dashboard/widgets/order_row.dart';
|
import 'package:cake_wallet/src/screens/dashboard/widgets/order_row.dart';
|
||||||
import 'package:cake_wallet/themes/extensions/placeholder_theme.dart';
|
import 'package:cake_wallet/themes/extensions/placeholder_theme.dart';
|
||||||
|
@ -52,7 +53,7 @@ class TransactionsPage extends StatelessWidget {
|
||||||
try {
|
try {
|
||||||
final uri = Uri.parse(
|
final uri = Uri.parse(
|
||||||
"https://guides.cakewallet.com/docs/FAQ/why_are_my_funds_not_appearing/");
|
"https://guides.cakewallet.com/docs/FAQ/why_are_my_funds_not_appearing/");
|
||||||
launchUrl(uri, mode: LaunchMode.externalApplication);
|
launchUrl(uri, mode: LaunchMode.externalApplication);
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
},
|
},
|
||||||
title: S.of(context).syncing_wallet_alert_title,
|
title: S.of(context).syncing_wallet_alert_title,
|
||||||
|
@ -84,7 +85,7 @@ class TransactionsPage extends StatelessWidget {
|
||||||
|
|
||||||
final transaction = item.transaction;
|
final transaction = item.transaction;
|
||||||
final transactionType = dashboardViewModel.type == WalletType.ethereum &&
|
final transactionType = dashboardViewModel.type == WalletType.ethereum &&
|
||||||
transaction.evmSignatureName == 'approval'
|
transaction.evmSignatureName == 'approval'
|
||||||
? ' (${transaction.evmSignatureName})'
|
? ' (${transaction.evmSignatureName})'
|
||||||
: '';
|
: '';
|
||||||
|
|
||||||
|
@ -100,8 +101,11 @@ class TransactionsPage extends StatelessWidget {
|
||||||
? ''
|
? ''
|
||||||
: item.formattedFiatAmount,
|
: item.formattedFiatAmount,
|
||||||
isPending: transaction.isPending,
|
isPending: transaction.isPending,
|
||||||
title: item.formattedTitle +
|
title:
|
||||||
item.formattedStatus + ' $transactionType',
|
item.formattedTitle + item.formattedStatus + ' $transactionType',
|
||||||
|
isReceivedSilentPayment:
|
||||||
|
dashboardViewModel.type == WalletType.bitcoin &&
|
||||||
|
bitcoin!.txIsReceivedSilentPayment(transaction),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:cake_wallet/generated/i18n.dart';
|
||||||
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
|
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:cw_core/transaction_direction.dart';
|
import 'package:cw_core/transaction_direction.dart';
|
||||||
|
@ -5,14 +6,16 @@ import 'package:cake_wallet/themes/extensions/dashboard_page_theme.dart';
|
||||||
import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
|
import 'package:cake_wallet/themes/extensions/transaction_trade_theme.dart';
|
||||||
|
|
||||||
class TransactionRow extends StatelessWidget {
|
class TransactionRow extends StatelessWidget {
|
||||||
TransactionRow(
|
TransactionRow({
|
||||||
{required this.direction,
|
required this.direction,
|
||||||
required this.formattedDate,
|
required this.formattedDate,
|
||||||
required this.formattedAmount,
|
required this.formattedAmount,
|
||||||
required this.formattedFiatAmount,
|
required this.formattedFiatAmount,
|
||||||
required this.isPending,
|
required this.isPending,
|
||||||
required this.title,
|
required this.isReceivedSilentPayment,
|
||||||
required this.onTap});
|
required this.title,
|
||||||
|
required this.onTap,
|
||||||
|
});
|
||||||
|
|
||||||
final VoidCallback onTap;
|
final VoidCallback onTap;
|
||||||
final TransactionDirection direction;
|
final TransactionDirection direction;
|
||||||
|
@ -20,6 +23,7 @@ class TransactionRow extends StatelessWidget {
|
||||||
final String formattedAmount;
|
final String formattedAmount;
|
||||||
final String formattedFiatAmount;
|
final String formattedFiatAmount;
|
||||||
final bool isPending;
|
final bool isPending;
|
||||||
|
final bool isReceivedSilentPayment;
|
||||||
final String title;
|
final String title;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -38,50 +42,80 @@ class TransactionRow extends StatelessWidget {
|
||||||
width: 36,
|
width: 36,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
shape: BoxShape.circle,
|
shape: BoxShape.circle,
|
||||||
color: Theme.of(context).extension<TransactionTradeTheme>()!.rowsColor
|
color: Theme.of(context).extension<TransactionTradeTheme>()!.rowsColor),
|
||||||
),
|
child: Image.asset(direction == TransactionDirection.incoming
|
||||||
child: Image.asset(
|
? 'assets/images/down_arrow.png'
|
||||||
direction == TransactionDirection.incoming
|
: 'assets/images/up_arrow.png'),
|
||||||
? 'assets/images/down_arrow.png'
|
|
||||||
: 'assets/images/up_arrow.png'),
|
|
||||||
),
|
),
|
||||||
SizedBox(width: 12),
|
SizedBox(width: 12),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
Row(
|
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
Row(
|
||||||
children: <Widget>[
|
children: [
|
||||||
Text(title,
|
Text(title,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
fontWeight: FontWeight.w500,
|
fontWeight: FontWeight.w500,
|
||||||
color: Theme.of(context).extension<DashboardPageTheme>()!.textColor)),
|
color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
|
||||||
Text(formattedAmount,
|
)),
|
||||||
style: TextStyle(
|
if (isReceivedSilentPayment) TxTag(tag: S.of(context).silent_payment),
|
||||||
fontSize: 16,
|
],
|
||||||
fontWeight: FontWeight.w500,
|
),
|
||||||
color: Theme.of(context).extension<DashboardPageTheme>()!.textColor))
|
Text(formattedAmount,
|
||||||
]),
|
style: TextStyle(
|
||||||
SizedBox(height: 5),
|
fontSize: 16,
|
||||||
Row(
|
fontWeight: FontWeight.w500,
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
color: Theme.of(context).extension<DashboardPageTheme>()!.textColor))
|
||||||
children: <Widget>[
|
]),
|
||||||
Text(formattedDate,
|
SizedBox(height: 5),
|
||||||
style: TextStyle(
|
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[
|
||||||
fontSize: 14,
|
Text(formattedDate,
|
||||||
color: Theme.of(context).extension<CakeTextTheme>()!.dateSectionRowColor)),
|
style: TextStyle(
|
||||||
Text(formattedFiatAmount,
|
fontSize: 14,
|
||||||
style: TextStyle(
|
color:
|
||||||
fontSize: 14,
|
Theme.of(context).extension<CakeTextTheme>()!.dateSectionRowColor)),
|
||||||
color: Theme.of(context).extension<CakeTextTheme>()!.dateSectionRowColor))
|
Text(formattedFiatAmount,
|
||||||
])
|
style: TextStyle(
|
||||||
],
|
fontSize: 14,
|
||||||
)
|
color:
|
||||||
)
|
Theme.of(context).extension<CakeTextTheme>()!.dateSectionRowColor))
|
||||||
|
])
|
||||||
|
],
|
||||||
|
))
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A tag to add context to a transaction
|
||||||
|
// example use: differ silent payments from regular txs
|
||||||
|
class TxTag extends StatelessWidget {
|
||||||
|
TxTag({required this.tag});
|
||||||
|
|
||||||
|
final String tag;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
height: 17,
|
||||||
|
padding: EdgeInsets.only(left: 6, right: 6),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(8.5)),
|
||||||
|
color: Theme.of(context).extension<TransactionTradeTheme>()!.rowsColor,
|
||||||
|
),
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: Text(
|
||||||
|
tag.toLowerCase(),
|
||||||
|
style: TextStyle(
|
||||||
|
color: Theme.of(context).extension<DashboardPageTheme>()!.textColor,
|
||||||
|
fontSize: 9,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ class RescanPage extends BasePage {
|
||||||
toggleSingleScan: () =>
|
toggleSingleScan: () =>
|
||||||
_rescanViewModel.doSingleScan = !_rescanViewModel.doSingleScan,
|
_rescanViewModel.doSingleScan = !_rescanViewModel.doSingleScan,
|
||||||
walletType: _rescanViewModel.wallet.type,
|
walletType: _rescanViewModel.wallet.type,
|
||||||
|
bitcoinMempoolAPIEnabled: _rescanViewModel.isBitcoinMempoolAPIEnabled,
|
||||||
)),
|
)),
|
||||||
Observer(
|
Observer(
|
||||||
builder: (_) => LoadingPrimaryButton(
|
builder: (_) => LoadingPrimaryButton(
|
||||||
|
|
|
@ -68,11 +68,11 @@ class SendPage extends BasePage {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Function(BuildContext)? get pushToNextWidget => (context) {
|
Function(BuildContext)? get pushToNextWidget => (context) {
|
||||||
FocusScopeNode currentFocus = FocusScope.of(context);
|
FocusScopeNode currentFocus = FocusScope.of(context);
|
||||||
if (!currentFocus.hasPrimaryFocus) {
|
if (!currentFocus.hasPrimaryFocus) {
|
||||||
currentFocus.focusedChild?.unfocus();
|
currentFocus.focusedChild?.unfocus();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget? leading(BuildContext context) {
|
Widget? leading(BuildContext context) {
|
||||||
|
@ -212,26 +212,25 @@ class SendPage extends BasePage {
|
||||||
final count = sendViewModel.outputs.length;
|
final count = sendViewModel.outputs.length;
|
||||||
|
|
||||||
return count > 1
|
return count > 1
|
||||||
? Semantics (
|
? Semantics(
|
||||||
label: 'Page Indicator',
|
label: 'Page Indicator',
|
||||||
hint: 'Swipe to change receiver',
|
hint: 'Swipe to change receiver',
|
||||||
excludeSemantics: true,
|
excludeSemantics: true,
|
||||||
child:
|
child: SmoothPageIndicator(
|
||||||
SmoothPageIndicator(
|
controller: controller,
|
||||||
controller: controller,
|
count: count,
|
||||||
count: count,
|
effect: ScrollingDotsEffect(
|
||||||
effect: ScrollingDotsEffect(
|
spacing: 6.0,
|
||||||
spacing: 6.0,
|
radius: 6.0,
|
||||||
radius: 6.0,
|
dotWidth: 6.0,
|
||||||
dotWidth: 6.0,
|
dotHeight: 6.0,
|
||||||
dotHeight: 6.0,
|
dotColor: Theme.of(context)
|
||||||
dotColor: Theme.of(context)
|
.extension<SendPageTheme>()!
|
||||||
.extension<SendPageTheme>()!
|
.indicatorDotColor,
|
||||||
.indicatorDotColor,
|
activeDotColor: Theme.of(context)
|
||||||
activeDotColor: Theme.of(context)
|
.extension<SendPageTheme>()!
|
||||||
.extension<SendPageTheme>()!
|
.templateBackgroundColor),
|
||||||
.templateBackgroundColor),
|
))
|
||||||
))
|
|
||||||
: Offstage();
|
: Offstage();
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
@ -478,6 +477,7 @@ class SendPage extends BasePage {
|
||||||
feeValue: sendViewModel.pendingTransaction!.feeFormatted,
|
feeValue: sendViewModel.pendingTransaction!.feeFormatted,
|
||||||
feeFiatAmount: sendViewModel.pendingTransactionFeeFiatAmountFormatted,
|
feeFiatAmount: sendViewModel.pendingTransactionFeeFiatAmountFormatted,
|
||||||
outputs: sendViewModel.outputs,
|
outputs: sendViewModel.outputs,
|
||||||
|
change: sendViewModel.pendingTransaction!.change,
|
||||||
rightButtonText: S.of(_dialogContext).send,
|
rightButtonText: S.of(_dialogContext).send,
|
||||||
leftButtonText: S.of(_dialogContext).cancel,
|
leftButtonText: S.of(_dialogContext).cancel,
|
||||||
actionRightButton: () async {
|
actionRightButton: () async {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
|
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
|
||||||
import 'package:cake_wallet/palette.dart';
|
import 'package:cake_wallet/palette.dart';
|
||||||
import 'package:cake_wallet/view_model/send/output.dart';
|
import 'package:cake_wallet/view_model/send/output.dart';
|
||||||
|
import 'package:cw_core/pending_transaction.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:cake_wallet/src/widgets/base_alert_dialog.dart';
|
import 'package:cake_wallet/src/widgets/base_alert_dialog.dart';
|
||||||
import 'package:cake_wallet/generated/i18n.dart';
|
import 'package:cake_wallet/generated/i18n.dart';
|
||||||
|
@ -21,6 +22,7 @@ class ConfirmSendingAlert extends BaseAlertDialog {
|
||||||
required this.feeValue,
|
required this.feeValue,
|
||||||
required this.feeFiatAmount,
|
required this.feeFiatAmount,
|
||||||
required this.outputs,
|
required this.outputs,
|
||||||
|
this.change,
|
||||||
required this.leftButtonText,
|
required this.leftButtonText,
|
||||||
required this.rightButtonText,
|
required this.rightButtonText,
|
||||||
required this.actionLeftButton,
|
required this.actionLeftButton,
|
||||||
|
@ -44,6 +46,7 @@ class ConfirmSendingAlert extends BaseAlertDialog {
|
||||||
final String feeValue;
|
final String feeValue;
|
||||||
final String feeFiatAmount;
|
final String feeFiatAmount;
|
||||||
final List<Output> outputs;
|
final List<Output> outputs;
|
||||||
|
final PendingChange? change;
|
||||||
final String leftButtonText;
|
final String leftButtonText;
|
||||||
final String rightButtonText;
|
final String rightButtonText;
|
||||||
final VoidCallback actionLeftButton;
|
final VoidCallback actionLeftButton;
|
||||||
|
@ -101,6 +104,7 @@ class ConfirmSendingAlert extends BaseAlertDialog {
|
||||||
feeValue: feeValue,
|
feeValue: feeValue,
|
||||||
feeFiatAmount: feeFiatAmount,
|
feeFiatAmount: feeFiatAmount,
|
||||||
outputs: outputs,
|
outputs: outputs,
|
||||||
|
change: change,
|
||||||
onDispose: onDispose);
|
onDispose: onDispose);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,6 +121,7 @@ class ConfirmSendingAlertContent extends StatefulWidget {
|
||||||
required this.feeValue,
|
required this.feeValue,
|
||||||
required this.feeFiatAmount,
|
required this.feeFiatAmount,
|
||||||
required this.outputs,
|
required this.outputs,
|
||||||
|
this.change,
|
||||||
required this.onDispose}) {}
|
required this.onDispose}) {}
|
||||||
|
|
||||||
final String? paymentId;
|
final String? paymentId;
|
||||||
|
@ -130,6 +135,7 @@ class ConfirmSendingAlertContent extends StatefulWidget {
|
||||||
final String feeValue;
|
final String feeValue;
|
||||||
final String feeFiatAmount;
|
final String feeFiatAmount;
|
||||||
final List<Output> outputs;
|
final List<Output> outputs;
|
||||||
|
final PendingChange? change;
|
||||||
final Function? onDispose;
|
final Function? onDispose;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -145,6 +151,7 @@ class ConfirmSendingAlertContent extends StatefulWidget {
|
||||||
feeValue: feeValue,
|
feeValue: feeValue,
|
||||||
feeFiatAmount: feeFiatAmount,
|
feeFiatAmount: feeFiatAmount,
|
||||||
outputs: outputs,
|
outputs: outputs,
|
||||||
|
change: change,
|
||||||
onDispose: onDispose);
|
onDispose: onDispose);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,6 +168,7 @@ class ConfirmSendingAlertContentState extends State<ConfirmSendingAlertContent>
|
||||||
required this.feeValue,
|
required this.feeValue,
|
||||||
required this.feeFiatAmount,
|
required this.feeFiatAmount,
|
||||||
required this.outputs,
|
required this.outputs,
|
||||||
|
this.change,
|
||||||
this.onDispose})
|
this.onDispose})
|
||||||
: recipientTitle = '' {
|
: recipientTitle = '' {
|
||||||
recipientTitle = outputs.length > 1
|
recipientTitle = outputs.length > 1
|
||||||
|
@ -179,6 +187,7 @@ class ConfirmSendingAlertContentState extends State<ConfirmSendingAlertContent>
|
||||||
final String feeValue;
|
final String feeValue;
|
||||||
final String feeFiatAmount;
|
final String feeFiatAmount;
|
||||||
final List<Output> outputs;
|
final List<Output> outputs;
|
||||||
|
final PendingChange? change;
|
||||||
final Function? onDispose;
|
final Function? onDispose;
|
||||||
|
|
||||||
final double backgroundHeight = 160;
|
final double backgroundHeight = 160;
|
||||||
|
@ -391,100 +400,57 @@ class ConfirmSendingAlertContentState extends State<ConfirmSendingAlertContent>
|
||||||
decoration: TextDecoration.none,
|
decoration: TextDecoration.none,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
outputs.length > 1
|
ListView.builder(
|
||||||
? ListView.builder(
|
padding: EdgeInsets.only(top: 0),
|
||||||
padding: EdgeInsets.only(top: 0),
|
shrinkWrap: true,
|
||||||
shrinkWrap: true,
|
physics: NeverScrollableScrollPhysics(),
|
||||||
physics: NeverScrollableScrollPhysics(),
|
itemCount: outputs.length,
|
||||||
itemCount: outputs.length,
|
itemBuilder: (context, index) {
|
||||||
itemBuilder: (context, index) {
|
final item = outputs[index];
|
||||||
final item = outputs[index];
|
final _address =
|
||||||
final _address =
|
item.isParsedAddress ? item.extractedAddress : item.address;
|
||||||
item.isParsedAddress ? item.extractedAddress : item.address;
|
final _amount = item.cryptoAmount.replaceAll(',', '.');
|
||||||
final _amount = item.cryptoAmount.replaceAll(',', '.');
|
|
||||||
|
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
if (item.isParsedAddress)
|
if (item.isParsedAddress)
|
||||||
Padding(
|
AddressText(text: item.parsedAddress.name),
|
||||||
padding: EdgeInsets.only(top: 8),
|
AddressText(text: _address, fontSize: 10),
|
||||||
child: Text(
|
if (stealthAddressText(item.stealthAddress) != null)
|
||||||
item.parsedAddress.name,
|
AddressText(
|
||||||
textAlign: TextAlign.center,
|
text: stealthAddressText(item.stealthAddress)!, fontSize: 10),
|
||||||
style: TextStyle(
|
AmountText(text: _amount),
|
||||||
fontSize: 14,
|
],
|
||||||
fontWeight: FontWeight.w600,
|
);
|
||||||
fontFamily: 'Lato',
|
},
|
||||||
color: PaletteDark.pigeonBlue,
|
)
|
||||||
decoration: TextDecoration.none,
|
|
||||||
),
|
|
||||||
)),
|
|
||||||
Padding(
|
|
||||||
padding: EdgeInsets.only(top: 8),
|
|
||||||
child: Text(
|
|
||||||
_address,
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 10,
|
|
||||||
fontWeight: FontWeight.w600,
|
|
||||||
fontFamily: 'Lato',
|
|
||||||
color: PaletteDark.pigeonBlue,
|
|
||||||
decoration: TextDecoration.none,
|
|
||||||
),
|
|
||||||
)),
|
|
||||||
Padding(
|
|
||||||
padding: EdgeInsets.only(top: 8),
|
|
||||||
child: Row(
|
|
||||||
mainAxisSize: MainAxisSize.max,
|
|
||||||
mainAxisAlignment: MainAxisAlignment.end,
|
|
||||||
children: [
|
|
||||||
Text(
|
|
||||||
_amount,
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 10,
|
|
||||||
fontWeight: FontWeight.w600,
|
|
||||||
fontFamily: 'Lato',
|
|
||||||
color: PaletteDark.pigeonBlue,
|
|
||||||
decoration: TextDecoration.none,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
))
|
|
||||||
],
|
|
||||||
);
|
|
||||||
})
|
|
||||||
: Column(children: [
|
|
||||||
if (outputs.first.isParsedAddress)
|
|
||||||
Padding(
|
|
||||||
padding: EdgeInsets.only(top: 8),
|
|
||||||
child: Text(
|
|
||||||
outputs.first.parsedAddress.name,
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 14,
|
|
||||||
fontWeight: FontWeight.w600,
|
|
||||||
fontFamily: 'Lato',
|
|
||||||
color: PaletteDark.pigeonBlue,
|
|
||||||
decoration: TextDecoration.none,
|
|
||||||
),
|
|
||||||
)),
|
|
||||||
Padding(
|
|
||||||
padding: EdgeInsets.only(top: 8),
|
|
||||||
child: Text(
|
|
||||||
outputs.first.isParsedAddress
|
|
||||||
? outputs.first.extractedAddress
|
|
||||||
: outputs.first.address,
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 10,
|
|
||||||
fontWeight: FontWeight.w600,
|
|
||||||
fontFamily: 'Lato',
|
|
||||||
color: PaletteDark.pigeonBlue,
|
|
||||||
decoration: TextDecoration.none,
|
|
||||||
),
|
|
||||||
)),
|
|
||||||
])
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
)
|
),
|
||||||
|
if (change != null)
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.only(top: 16),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
S.of(context).send_change_to_you,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.normal,
|
||||||
|
fontFamily: 'Lato',
|
||||||
|
color: Theme.of(context).extension<CakeTextTheme>()!.titleColor,
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
AddressText(text: change!.address, fontSize: 10),
|
||||||
|
AmountText(text: change!.amount),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
],
|
],
|
||||||
))),
|
))),
|
||||||
if (showScrollbar)
|
if (showScrollbar)
|
||||||
|
@ -539,3 +505,78 @@ class ExpirationTimeWidget extends StatelessWidget {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class AddressText extends StatelessWidget {
|
||||||
|
final String text;
|
||||||
|
final double fontSize;
|
||||||
|
final FontWeight fontWeight;
|
||||||
|
final TextAlign? textAlign;
|
||||||
|
|
||||||
|
const AddressText({
|
||||||
|
required this.text,
|
||||||
|
this.fontSize = 14,
|
||||||
|
this.fontWeight = FontWeight.w600,
|
||||||
|
this.textAlign,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Padding(
|
||||||
|
padding: EdgeInsets.only(top: 8),
|
||||||
|
child: Text(
|
||||||
|
text,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: fontSize,
|
||||||
|
fontWeight: fontWeight,
|
||||||
|
fontFamily: 'Lato',
|
||||||
|
color: PaletteDark.pigeonBlue,
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class AmountText extends StatelessWidget {
|
||||||
|
final String text;
|
||||||
|
final double fontSize;
|
||||||
|
final FontWeight fontWeight;
|
||||||
|
final TextAlign? textAlign;
|
||||||
|
|
||||||
|
const AmountText({
|
||||||
|
required this.text,
|
||||||
|
this.fontSize = 10,
|
||||||
|
this.fontWeight = FontWeight.w600,
|
||||||
|
this.textAlign,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Padding(
|
||||||
|
padding: EdgeInsets.only(top: 8),
|
||||||
|
child: Row(
|
||||||
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
text,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: fontSize,
|
||||||
|
fontWeight: fontWeight,
|
||||||
|
fontFamily: 'Lato',
|
||||||
|
color: PaletteDark.pigeonBlue,
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String? stealthAddressText(String? stealthAddress) {
|
||||||
|
if (stealthAddress == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return stealthAddress.isNotEmpty ? "-> $stealthAddress" : null;
|
||||||
|
}
|
||||||
|
|
|
@ -58,8 +58,8 @@ class PrivacyPage extends BasePage {
|
||||||
if (_privacySettingsViewModel.isAutoGenerateSubaddressesVisible)
|
if (_privacySettingsViewModel.isAutoGenerateSubaddressesVisible)
|
||||||
SettingsSwitcherCell(
|
SettingsSwitcherCell(
|
||||||
title: _privacySettingsViewModel.isMoneroWallet
|
title: _privacySettingsViewModel.isMoneroWallet
|
||||||
? S.current.auto_generate_subaddresses
|
? S.current.auto_generate_subaddresses
|
||||||
: S.current.auto_generate_addresses,
|
: S.current.auto_generate_addresses,
|
||||||
value: _privacySettingsViewModel.isAutoGenerateSubaddressesEnabled,
|
value: _privacySettingsViewModel.isAutoGenerateSubaddressesEnabled,
|
||||||
onValueChange: (BuildContext _, bool value) {
|
onValueChange: (BuildContext _, bool value) {
|
||||||
_privacySettingsViewModel.setAutoGenerateSubaddresses(value);
|
_privacySettingsViewModel.setAutoGenerateSubaddresses(value);
|
||||||
|
@ -115,21 +115,21 @@ class PrivacyPage extends BasePage {
|
||||||
),
|
),
|
||||||
if (_privacySettingsViewModel.canUseMempoolFeeAPI)
|
if (_privacySettingsViewModel.canUseMempoolFeeAPI)
|
||||||
SettingsSwitcherCell(
|
SettingsSwitcherCell(
|
||||||
title: S.current.live_fee_rates,
|
title: S.current.enable_mempool_api,
|
||||||
value: _privacySettingsViewModel.useMempoolFeeAPI,
|
value: _privacySettingsViewModel.useMempoolFeeAPI,
|
||||||
onValueChange: (BuildContext _, bool isEnabled) async {
|
onValueChange: (BuildContext _, bool isEnabled) async {
|
||||||
if (!isEnabled) {
|
if (!isEnabled) {
|
||||||
final bool confirmation = await showPopUp<bool>(
|
final bool confirmation = await showPopUp<bool>(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return AlertWithTwoActions(
|
return AlertWithTwoActions(
|
||||||
alertTitle: S.of(context).warning,
|
alertTitle: S.of(context).warning,
|
||||||
alertContent: S.of(context).disable_fee_api_warning,
|
alertContent: S.of(context).disable_fee_api_warning,
|
||||||
rightButtonText: S.of(context).confirm,
|
rightButtonText: S.of(context).confirm,
|
||||||
leftButtonText: S.of(context).cancel,
|
leftButtonText: S.of(context).cancel,
|
||||||
actionRightButton: () => Navigator.of(context).pop(true),
|
actionRightButton: () => Navigator.of(context).pop(true),
|
||||||
actionLeftButton: () => Navigator.of(context).pop(false));
|
actionLeftButton: () => Navigator.of(context).pop(false));
|
||||||
}) ??
|
}) ??
|
||||||
false;
|
false;
|
||||||
if (confirmation) {
|
if (confirmation) {
|
||||||
_privacySettingsViewModel.setUseMempoolFeeAPI(isEnabled);
|
_privacySettingsViewModel.setUseMempoolFeeAPI(isEnabled);
|
||||||
|
|
|
@ -20,6 +20,7 @@ class BlockchainHeightWidget extends StatefulWidget {
|
||||||
this.isSilentPaymentsScan = false,
|
this.isSilentPaymentsScan = false,
|
||||||
this.toggleSingleScan,
|
this.toggleSingleScan,
|
||||||
this.doSingleScan = false,
|
this.doSingleScan = false,
|
||||||
|
this.bitcoinMempoolAPIEnabled,
|
||||||
required this.walletType,
|
required this.walletType,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
|
@ -29,6 +30,7 @@ class BlockchainHeightWidget extends StatefulWidget {
|
||||||
final bool hasDatePicker;
|
final bool hasDatePicker;
|
||||||
final bool isSilentPaymentsScan;
|
final bool isSilentPaymentsScan;
|
||||||
final bool doSingleScan;
|
final bool doSingleScan;
|
||||||
|
final Future<bool>? bitcoinMempoolAPIEnabled;
|
||||||
final Function()? toggleSingleScan;
|
final Function()? toggleSingleScan;
|
||||||
final WalletType walletType;
|
final WalletType walletType;
|
||||||
|
|
||||||
|
@ -79,7 +81,8 @@ class BlockchainHeightState extends State<BlockchainHeightWidget> {
|
||||||
child: BaseTextFormField(
|
child: BaseTextFormField(
|
||||||
focusNode: widget.focusNode,
|
focusNode: widget.focusNode,
|
||||||
controller: restoreHeightController,
|
controller: restoreHeightController,
|
||||||
keyboardType: TextInputType.numberWithOptions(signed: false, decimal: false),
|
keyboardType:
|
||||||
|
TextInputType.numberWithOptions(signed: false, decimal: false),
|
||||||
hintText: widget.isSilentPaymentsScan
|
hintText: widget.isSilentPaymentsScan
|
||||||
? S.of(context).silent_payments_scan_from_height
|
? S.of(context).silent_payments_scan_from_height
|
||||||
: S.of(context).widgets_restore_from_blockheight,
|
: S.of(context).widgets_restore_from_blockheight,
|
||||||
|
@ -146,7 +149,9 @@ class BlockchainHeightState extends State<BlockchainHeightWidget> {
|
||||||
: S.of(context).restore_from_date_or_blockheight,
|
: S.of(context).restore_from_date_or_blockheight,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 12, fontWeight: FontWeight.normal, color: Theme.of(context).hintColor),
|
fontSize: 12,
|
||||||
|
fontWeight: FontWeight.normal,
|
||||||
|
color: Theme.of(context).hintColor),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
@ -166,7 +171,10 @@ class BlockchainHeightState extends State<BlockchainHeightWidget> {
|
||||||
if (date != null) {
|
if (date != null) {
|
||||||
int height;
|
int height;
|
||||||
if (widget.isSilentPaymentsScan) {
|
if (widget.isSilentPaymentsScan) {
|
||||||
height = bitcoin!.getHeightByDate(date: date);
|
height = await bitcoin!.getHeightByDate(
|
||||||
|
date: date,
|
||||||
|
bitcoinMempoolAPIEnabled: await widget.bitcoinMempoolAPIEnabled,
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
if (widget.walletType == WalletType.monero) {
|
if (widget.walletType == WalletType.monero) {
|
||||||
height = monero!.getHeightByDate(date: date);
|
height = monero!.getHeightByDate(date: date);
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:cake_wallet/bitcoin/bitcoin.dart';
|
||||||
import 'package:cake_wallet/view_model/dashboard/action_list_item.dart';
|
import 'package:cake_wallet/view_model/dashboard/action_list_item.dart';
|
||||||
import 'package:cake_wallet/view_model/dashboard/anonpay_transaction_list_item.dart';
|
import 'package:cake_wallet/view_model/dashboard/anonpay_transaction_list_item.dart';
|
||||||
import 'package:mobx/mobx.dart';
|
import 'package:mobx/mobx.dart';
|
||||||
|
@ -6,12 +7,13 @@ import 'package:cake_wallet/view_model/dashboard/transaction_list_item.dart';
|
||||||
|
|
||||||
part 'transaction_filter_store.g.dart';
|
part 'transaction_filter_store.g.dart';
|
||||||
|
|
||||||
class TransactionFilterStore = TransactionFilterStoreBase
|
class TransactionFilterStore = TransactionFilterStoreBase with _$TransactionFilterStore;
|
||||||
with _$TransactionFilterStore;
|
|
||||||
|
|
||||||
abstract class TransactionFilterStoreBase with Store {
|
abstract class TransactionFilterStoreBase with Store {
|
||||||
TransactionFilterStoreBase() : displayIncoming = true,
|
TransactionFilterStoreBase()
|
||||||
displayOutgoing = true;
|
: displayIncoming = true,
|
||||||
|
displayOutgoing = true,
|
||||||
|
displaySilentPayments = true;
|
||||||
|
|
||||||
@observable
|
@observable
|
||||||
bool displayIncoming;
|
bool displayIncoming;
|
||||||
|
@ -19,6 +21,9 @@ abstract class TransactionFilterStoreBase with Store {
|
||||||
@observable
|
@observable
|
||||||
bool displayOutgoing;
|
bool displayOutgoing;
|
||||||
|
|
||||||
|
@observable
|
||||||
|
bool displaySilentPayments;
|
||||||
|
|
||||||
@observable
|
@observable
|
||||||
DateTime? startDate;
|
DateTime? startDate;
|
||||||
|
|
||||||
|
@ -26,31 +31,36 @@ abstract class TransactionFilterStoreBase with Store {
|
||||||
DateTime? endDate;
|
DateTime? endDate;
|
||||||
|
|
||||||
@computed
|
@computed
|
||||||
bool get displayAll => displayIncoming && displayOutgoing;
|
bool get displayAll => displayIncoming && displayOutgoing && displaySilentPayments;
|
||||||
|
|
||||||
@action
|
@action
|
||||||
void toggleAll() {
|
void toggleAll() {
|
||||||
if (displayAll) {
|
if (displayAll) {
|
||||||
displayOutgoing = false;
|
displayOutgoing = false;
|
||||||
displayIncoming = false;
|
displayIncoming = false;
|
||||||
|
displaySilentPayments = false;
|
||||||
} else {
|
} else {
|
||||||
displayOutgoing = true;
|
displayOutgoing = true;
|
||||||
displayIncoming = true;
|
displayIncoming = true;
|
||||||
|
displaySilentPayments = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@action
|
@action
|
||||||
void toggleIncoming() {
|
void toggleIncoming() {
|
||||||
displayIncoming = !displayIncoming;
|
displayIncoming = !displayIncoming;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@action
|
@action
|
||||||
void toggleOutgoing() {
|
void toggleOutgoing() {
|
||||||
displayOutgoing = !displayOutgoing;
|
displayOutgoing = !displayOutgoing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@action
|
||||||
|
void toggleSilentPayments() {
|
||||||
|
displaySilentPayments = !displaySilentPayments;
|
||||||
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
void changeStartDate(DateTime date) => startDate = date;
|
void changeStartDate(DateTime date) => startDate = date;
|
||||||
|
|
||||||
|
@ -59,34 +69,33 @@ abstract class TransactionFilterStoreBase with Store {
|
||||||
|
|
||||||
List<ActionListItem> filtered({required List<ActionListItem> transactions}) {
|
List<ActionListItem> filtered({required List<ActionListItem> transactions}) {
|
||||||
var _transactions = <ActionListItem>[];
|
var _transactions = <ActionListItem>[];
|
||||||
final needToFilter = !displayAll ||
|
final needToFilter = !displayAll || (startDate != null && endDate != null);
|
||||||
(startDate != null && endDate != null);
|
|
||||||
|
|
||||||
if (needToFilter) {
|
if (needToFilter) {
|
||||||
_transactions = transactions.where((item) {
|
_transactions = transactions.where((item) {
|
||||||
var allowed = true;
|
var allowed = true;
|
||||||
|
|
||||||
if (allowed && startDate != null && endDate != null) {
|
if (allowed && startDate != null && endDate != null) {
|
||||||
if(item is TransactionListItem){
|
if (item is TransactionListItem) {
|
||||||
allowed = (startDate?.isBefore(item.transaction.date) ?? false)
|
allowed = (startDate?.isBefore(item.transaction.date) ?? false) &&
|
||||||
&& (endDate?.isAfter(item.transaction.date) ?? false);
|
(endDate?.isAfter(item.transaction.date) ?? false);
|
||||||
}else if(item is AnonpayTransactionListItem){
|
} else if (item is AnonpayTransactionListItem) {
|
||||||
allowed = (startDate?.isBefore(item.transaction.createdAt) ?? false)
|
allowed = (startDate?.isBefore(item.transaction.createdAt) ?? false) &&
|
||||||
&& (endDate?.isAfter(item.transaction.createdAt) ?? false);
|
(endDate?.isAfter(item.transaction.createdAt) ?? false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (allowed && (!displayAll)) {
|
if (allowed && (!displayAll)) {
|
||||||
if(item is TransactionListItem){
|
if (item is TransactionListItem) {
|
||||||
allowed = (displayOutgoing &&
|
allowed =
|
||||||
item.transaction.direction ==
|
(displayOutgoing && item.transaction.direction == TransactionDirection.outgoing) ||
|
||||||
TransactionDirection.outgoing) ||
|
(displayIncoming &&
|
||||||
(displayIncoming &&
|
item.transaction.direction == TransactionDirection.incoming &&
|
||||||
item.transaction.direction == TransactionDirection.incoming);
|
!bitcoin!.txIsReceivedSilentPayment(item.transaction)) ||
|
||||||
} else if(item is AnonpayTransactionListItem){
|
(displaySilentPayments && bitcoin!.txIsReceivedSilentPayment(item.transaction));
|
||||||
|
} else if (item is AnonpayTransactionListItem) {
|
||||||
allowed = displayIncoming;
|
allowed = displayIncoming;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return allowed;
|
return allowed;
|
||||||
|
@ -97,4 +106,4 @@ abstract class TransactionFilterStoreBase with Store {
|
||||||
|
|
||||||
return _transactions;
|
return _transactions;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,6 +88,11 @@ abstract class DashboardViewModelBase with Store {
|
||||||
value: () => transactionFilterStore.displayOutgoing,
|
value: () => transactionFilterStore.displayOutgoing,
|
||||||
caption: S.current.outgoing,
|
caption: S.current.outgoing,
|
||||||
onChanged: transactionFilterStore.toggleOutgoing),
|
onChanged: transactionFilterStore.toggleOutgoing),
|
||||||
|
FilterItem(
|
||||||
|
value: () => transactionFilterStore.displaySilentPayments,
|
||||||
|
caption: S.current.silent_payments,
|
||||||
|
onChanged: transactionFilterStore.toggleSilentPayments,
|
||||||
|
),
|
||||||
// FilterItem(
|
// FilterItem(
|
||||||
// value: () => false,
|
// value: () => false,
|
||||||
// caption: S.current.transactions_by_date,
|
// caption: S.current.transactions_by_date,
|
||||||
|
@ -376,12 +381,15 @@ abstract class DashboardViewModelBase with Store {
|
||||||
// to not cause work duplication, this will do the job as well, it will be slightly less precise
|
// to not cause work duplication, this will do the job as well, it will be slightly less precise
|
||||||
// about what happened - but still enough.
|
// about what happened - but still enough.
|
||||||
// if (keys['privateSpendKey'] == List.generate(64, (index) => "0").join("")) "Private spend key is 0",
|
// if (keys['privateSpendKey'] == List.generate(64, (index) => "0").join("")) "Private spend key is 0",
|
||||||
if (keys['privateViewKey'] == List.generate(64, (index) => "0").join("")) "private view key is 0",
|
if (keys['privateViewKey'] == List.generate(64, (index) => "0").join(""))
|
||||||
|
"private view key is 0",
|
||||||
// if (keys['publicSpendKey'] == List.generate(64, (index) => "0").join("")) "public spend key is 0",
|
// if (keys['publicSpendKey'] == List.generate(64, (index) => "0").join("")) "public spend key is 0",
|
||||||
if (keys['publicViewKey'] == List.generate(64, (index) => "0").join("")) "public view key is 0",
|
if (keys['publicViewKey'] == List.generate(64, (index) => "0").join(""))
|
||||||
|
"public view key is 0",
|
||||||
// if (wallet.seed == null) "wallet seed is null",
|
// if (wallet.seed == null) "wallet seed is null",
|
||||||
// if (wallet.seed == "") "wallet seed is empty",
|
// if (wallet.seed == "") "wallet seed is empty",
|
||||||
if (monero!.getSubaddressList(wallet).getAll(wallet)[0].address == "41d7FXjswpK1111111111111111111111111111111111111111111111111111111111111111111111111111112KhNi4")
|
if (monero!.getSubaddressList(wallet).getAll(wallet)[0].address ==
|
||||||
|
"41d7FXjswpK1111111111111111111111111111111111111111111111111111111111111111111111111111112KhNi4")
|
||||||
"primary address is invalid, you won't be able to receive / spend funds",
|
"primary address is invalid, you won't be able to receive / spend funds",
|
||||||
];
|
];
|
||||||
return errors;
|
return errors;
|
||||||
|
|
|
@ -29,6 +29,10 @@ abstract class RescanViewModelBase with Store {
|
||||||
@computed
|
@computed
|
||||||
bool get isSilentPaymentsScan => wallet.type == WalletType.bitcoin;
|
bool get isSilentPaymentsScan => wallet.type == WalletType.bitcoin;
|
||||||
|
|
||||||
|
@computed
|
||||||
|
Future<bool> get isBitcoinMempoolAPIEnabled async =>
|
||||||
|
wallet.type == WalletType.bitcoin && await bitcoin!.checkIfMempoolAPIIsEnabled(wallet);
|
||||||
|
|
||||||
@action
|
@action
|
||||||
Future<void> rescanCurrentWallet({required int restoreHeight}) async {
|
Future<void> rescanCurrentWallet({required int restoreHeight}) async {
|
||||||
state = RescanWalletState.rescaning;
|
state = RescanWalletState.rescaning;
|
||||||
|
|
|
@ -79,6 +79,9 @@ abstract class OutputBase with Store {
|
||||||
bool get isParsedAddress =>
|
bool get isParsedAddress =>
|
||||||
parsedAddress.parseFrom != ParseFrom.notParsed && parsedAddress.name.isNotEmpty;
|
parsedAddress.parseFrom != ParseFrom.notParsed && parsedAddress.name.isNotEmpty;
|
||||||
|
|
||||||
|
@observable
|
||||||
|
String? stealthAddress;
|
||||||
|
|
||||||
@computed
|
@computed
|
||||||
int get formattedCryptoAmount {
|
int get formattedCryptoAmount {
|
||||||
int amount = 0;
|
int amount = 0;
|
||||||
|
@ -134,9 +137,8 @@ abstract class OutputBase with Store {
|
||||||
final trc20EstimatedFee = tron!.getTronTRC20EstimatedFee(_wallet) ?? 0;
|
final trc20EstimatedFee = tron!.getTronTRC20EstimatedFee(_wallet) ?? 0;
|
||||||
return double.parse(trc20EstimatedFee.toString());
|
return double.parse(trc20EstimatedFee.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_wallet.type == WalletType.solana) {
|
if (_wallet.type == WalletType.solana) {
|
||||||
return solana!.getEstimateFees(_wallet) ?? 0.0;
|
return solana!.getEstimateFees(_wallet) ?? 0.0;
|
||||||
}
|
}
|
||||||
|
@ -145,16 +147,16 @@ abstract class OutputBase with Store {
|
||||||
_settingsStore.priority[_wallet.type]!, formattedCryptoAmount);
|
_settingsStore.priority[_wallet.type]!, formattedCryptoAmount);
|
||||||
|
|
||||||
if (_wallet.type == WalletType.bitcoin) {
|
if (_wallet.type == WalletType.bitcoin) {
|
||||||
if (_settingsStore.priority[_wallet.type] == bitcoin!.getBitcoinTransactionPriorityCustom()) {
|
if (_settingsStore.priority[_wallet.type] ==
|
||||||
fee = bitcoin!.getEstimatedFeeWithFeeRate(_wallet,
|
bitcoin!.getBitcoinTransactionPriorityCustom()) {
|
||||||
_settingsStore.customBitcoinFeeRate,formattedCryptoAmount);
|
fee = bitcoin!.getEstimatedFeeWithFeeRate(
|
||||||
|
_wallet, _settingsStore.customBitcoinFeeRate, formattedCryptoAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
return bitcoin!.formatterBitcoinAmountToDouble(amount: fee);
|
return bitcoin!.formatterBitcoinAmountToDouble(amount: fee);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_wallet.type == WalletType.litecoin ||
|
if (_wallet.type == WalletType.litecoin || _wallet.type == WalletType.bitcoinCash) {
|
||||||
_wallet.type == WalletType.bitcoinCash) {
|
|
||||||
return bitcoin!.formatterBitcoinAmountToDouble(amount: fee);
|
return bitcoin!.formatterBitcoinAmountToDouble(amount: fee);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,7 +251,8 @@ abstract class OutputBase with Store {
|
||||||
try {
|
try {
|
||||||
final fiat = calculateFiatAmount(
|
final fiat = calculateFiatAmount(
|
||||||
price: _fiatConversationStore.prices[cryptoCurrencyHandler()]!,
|
price: _fiatConversationStore.prices[cryptoCurrencyHandler()]!,
|
||||||
cryptoAmount: sendAll ? cryptoFullBalance.replaceAll(",", ".") : cryptoAmount.replaceAll(',', '.'));
|
cryptoAmount:
|
||||||
|
sendAll ? cryptoFullBalance.replaceAll(",", ".") : cryptoAmount.replaceAll(',', '.'));
|
||||||
if (fiatAmount != fiat) {
|
if (fiatAmount != fiat) {
|
||||||
fiatAmount = fiat;
|
fiatAmount = fiat;
|
||||||
}
|
}
|
||||||
|
|
|
@ -375,6 +375,15 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
|
||||||
throw Exception("THORChain does not support Taproot addresses");
|
throw Exception("THORChain does not support Taproot addresses");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wallet.type == WalletType.bitcoin) {
|
||||||
|
final updatedOutputs = bitcoin!.updateOutputs(pendingTransaction!, outputs);
|
||||||
|
|
||||||
|
if (outputs.length == updatedOutputs.length) {
|
||||||
|
outputs = ObservableList.of(updatedOutputs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
state = ExecutedSuccessfullyState();
|
state = ExecutedSuccessfullyState();
|
||||||
return pendingTransaction;
|
return pendingTransaction;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -414,8 +423,6 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _executeReplaceByFee(TransactionInfo tx, String newFee) async {
|
Future<void> _executeReplaceByFee(TransactionInfo tx, String newFee) async {
|
||||||
|
|
||||||
|
|
||||||
clearOutputs();
|
clearOutputs();
|
||||||
final output = outputs.first;
|
final output = outputs.first;
|
||||||
output.address = tx.outputAddresses?.first ?? '';
|
output.address = tx.outputAddresses?.first ?? '';
|
||||||
|
|
|
@ -100,7 +100,7 @@ dependencies:
|
||||||
bitcoin_base:
|
bitcoin_base:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/cake-tech/bitcoin_base
|
url: https://github.com/cake-tech/bitcoin_base
|
||||||
ref: cake-update-v5
|
ref: cake-update-v7
|
||||||
ledger_flutter: ^1.0.1
|
ledger_flutter: ^1.0.1
|
||||||
hashlib: ^1.19.2
|
hashlib: ^1.19.2
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@ dependency_overrides:
|
||||||
bitcoin_base:
|
bitcoin_base:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/cake-tech/bitcoin_base
|
url: https://github.com/cake-tech/bitcoin_base
|
||||||
ref: cake-update-v5
|
ref: cake-update-v7
|
||||||
|
|
||||||
flutter_icons:
|
flutter_icons:
|
||||||
image_path: "assets/images/app_logo.png"
|
image_path: "assets/images/app_logo.png"
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "تحرير الرمز المميز",
|
"edit_token": "تحرير الرمز المميز",
|
||||||
"electrum_address_disclaimer": "نقوم بإنشاء عناوين جديدة في كل مرة تستخدم فيها عنوانًا ، لكن العناوين السابقة تستمر في العمل",
|
"electrum_address_disclaimer": "نقوم بإنشاء عناوين جديدة في كل مرة تستخدم فيها عنوانًا ، لكن العناوين السابقة تستمر في العمل",
|
||||||
"email_address": "عنوان البريد الالكترونى",
|
"email_address": "عنوان البريد الالكترونى",
|
||||||
|
"enable_mempool_api": "MEMPOOL API للحصول على رسوم وتواريخ دقيقة",
|
||||||
"enable_replace_by_fee": "تمكين الاستبدال",
|
"enable_replace_by_fee": "تمكين الاستبدال",
|
||||||
"enable_silent_payments_scanning": "تمكين المسح الضوئي للمدفوعات الصامتة",
|
"enable_silent_payments_scanning": "ابدأ في مسح المدفوعات الصامتة ، حتى يتم الوصول إلى الطرف",
|
||||||
"enabled": "ممكنة",
|
"enabled": "ممكنة",
|
||||||
"enter_amount": "أدخل المبلغ",
|
"enter_amount": "أدخل المبلغ",
|
||||||
"enter_backup_password": "أدخل كلمة المرور الاحتياطية هنا",
|
"enter_backup_password": "أدخل كلمة المرور الاحتياطية هنا",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "${state_error} فشل المصادقة.",
|
"failed_authentication": "${state_error} فشل المصادقة.",
|
||||||
"faq": "الأسئلة الشائعة",
|
"faq": "الأسئلة الشائعة",
|
||||||
"features": "سمات",
|
"features": "سمات",
|
||||||
|
"fee_rate": "معدل الرسوم",
|
||||||
"fetching": "جار الجلب",
|
"fetching": "جار الجلب",
|
||||||
"fiat_api": "Fiat API",
|
"fiat_api": "Fiat API",
|
||||||
"fiat_balance": "الرصيد فيات",
|
"fiat_balance": "الرصيد فيات",
|
||||||
|
@ -610,6 +612,7 @@
|
||||||
"send": "إرسال",
|
"send": "إرسال",
|
||||||
"send_address": "عنوان ${cryptoCurrency}",
|
"send_address": "عنوان ${cryptoCurrency}",
|
||||||
"send_amount": "مقدار:",
|
"send_amount": "مقدار:",
|
||||||
|
"send_change_to_you": "تغيير لك:",
|
||||||
"send_creating_transaction": " يتم إنشاء المعاملة",
|
"send_creating_transaction": " يتم إنشاء المعاملة",
|
||||||
"send_error_currency": "العملة يجب أن تحتوي على أرقام فقط",
|
"send_error_currency": "العملة يجب أن تحتوي على أرقام فقط",
|
||||||
"send_error_minimum_value": "الحد الأدنى لقيمة المبلغ هو 0.01",
|
"send_error_minimum_value": "الحد الأدنى لقيمة المبلغ هو 0.01",
|
||||||
|
@ -676,6 +679,7 @@
|
||||||
"signature_invalid_error": "التوقيع غير صالح للرسالة المقدمة",
|
"signature_invalid_error": "التوقيع غير صالح للرسالة المقدمة",
|
||||||
"signTransaction": " ﺔﻠﻣﺎﻌﻤﻟﺍ ﻊﻴﻗﻮﺗ",
|
"signTransaction": " ﺔﻠﻣﺎﻌﻤﻟﺍ ﻊﻴﻗﻮﺗ",
|
||||||
"signup_for_card_accept_terms": "قم بالتسجيل للحصول على البطاقة وقبول الشروط.",
|
"signup_for_card_accept_terms": "قم بالتسجيل للحصول على البطاقة وقبول الشروط.",
|
||||||
|
"silent_payment": "الدفع الصامت",
|
||||||
"silent_payments": "مدفوعات صامتة",
|
"silent_payments": "مدفوعات صامتة",
|
||||||
"silent_payments_always_scan": "حدد المدفوعات الصامتة دائمًا المسح الضوئي",
|
"silent_payments_always_scan": "حدد المدفوعات الصامتة دائمًا المسح الضوئي",
|
||||||
"silent_payments_disclaimer": "العناوين الجديدة ليست هويات جديدة. إنها إعادة استخدام هوية موجودة مع ملصق مختلف.",
|
"silent_payments_disclaimer": "العناوين الجديدة ليست هويات جديدة. إنها إعادة استخدام هوية موجودة مع ملصق مختلف.",
|
||||||
|
@ -708,12 +712,13 @@
|
||||||
"switchToEVMCompatibleWallet": " (Ethereum، Polygon) ﻯﺮﺧﺃ ﺓﺮﻣ ﺔﻟﻭﺎﺤﻤﻟﺍﻭ EVM ﻊﻣ ﺔﻘﻓﺍﻮﺘﻣ ﺔﻈﻔﺤﻣ ﻰﻟﺇ ﻞﻳﺪﺒﺘﻟﺍ ﻰﺟﺮﻳ",
|
"switchToEVMCompatibleWallet": " (Ethereum، Polygon) ﻯﺮﺧﺃ ﺓﺮﻣ ﺔﻟﻭﺎﺤﻤﻟﺍﻭ EVM ﻊﻣ ﺔﻘﻓﺍﻮﺘﻣ ﺔﻈﻔﺤﻣ ﻰﻟﺇ ﻞﻳﺪﺒﺘﻟﺍ ﻰﺟﺮﻳ",
|
||||||
"symbol": "ﺰﻣﺭ",
|
"symbol": "ﺰﻣﺭ",
|
||||||
"sync_all_wallets": "مزامنة جميع المحافظ",
|
"sync_all_wallets": "مزامنة جميع المحافظ",
|
||||||
|
"sync_status_attempting_scan": "محاولة المسح",
|
||||||
"sync_status_attempting_sync": "جاري محاولة المزامنة",
|
"sync_status_attempting_sync": "جاري محاولة المزامنة",
|
||||||
"sync_status_connected": "متصل",
|
"sync_status_connected": "متصل",
|
||||||
"sync_status_connecting": "يتم التوصيل",
|
"sync_status_connecting": "يتم التوصيل",
|
||||||
"sync_status_failed_connect": "انقطع الاتصال",
|
"sync_status_failed_connect": "انقطع الاتصال",
|
||||||
"sync_status_not_connected": "غير متصل",
|
"sync_status_not_connected": "غير متصل",
|
||||||
"sync_status_starting_scan": "بدء المسح",
|
"sync_status_starting_scan": "بدء المسح الضوئي (من ${height})",
|
||||||
"sync_status_starting_sync": "بدء المزامنة",
|
"sync_status_starting_sync": "بدء المزامنة",
|
||||||
"sync_status_syncronized": "متزامن",
|
"sync_status_syncronized": "متزامن",
|
||||||
"sync_status_syncronizing": "يتم المزامنة",
|
"sync_status_syncronizing": "يتم المزامنة",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "Редактиране на токена",
|
"edit_token": "Редактиране на токена",
|
||||||
"electrum_address_disclaimer": "Нови адреси се генерират всеки път, когато използвате този, но и предишните продължават да работят",
|
"electrum_address_disclaimer": "Нови адреси се генерират всеки път, когато използвате този, но и предишните продължават да работят",
|
||||||
"email_address": "Имейл адрес",
|
"email_address": "Имейл адрес",
|
||||||
|
"enable_mempool_api": "Mempool API за точни такси и дати",
|
||||||
"enable_replace_by_fee": "Активиране на замяна по забрана",
|
"enable_replace_by_fee": "Активиране на замяна по забрана",
|
||||||
"enable_silent_payments_scanning": "Активирайте безшумните плащания за сканиране",
|
"enable_silent_payments_scanning": "Започнете да сканирате безшумните плащания, докато се достигне съветът",
|
||||||
"enabled": "Активирано",
|
"enabled": "Активирано",
|
||||||
"enter_amount": "Въведете сума",
|
"enter_amount": "Въведете сума",
|
||||||
"enter_backup_password": "Въведете парола за възстановяване",
|
"enter_backup_password": "Въведете парола за възстановяване",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Неуспешно удостоверяване. ${state_error}",
|
"failed_authentication": "Неуспешно удостоверяване. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "Характеристика",
|
"features": "Характеристика",
|
||||||
|
"fee_rate": "Такса ставка",
|
||||||
"fetching": "Обработване",
|
"fetching": "Обработване",
|
||||||
"fiat_api": "Fiat API",
|
"fiat_api": "Fiat API",
|
||||||
"fiat_balance": "Фиат Баланс",
|
"fiat_balance": "Фиат Баланс",
|
||||||
|
@ -610,6 +612,7 @@
|
||||||
"send": "Изпрати",
|
"send": "Изпрати",
|
||||||
"send_address": "${cryptoCurrency} адрес",
|
"send_address": "${cryptoCurrency} адрес",
|
||||||
"send_amount": "Сума:",
|
"send_amount": "Сума:",
|
||||||
|
"send_change_to_you": "Променете, на вас:",
|
||||||
"send_creating_transaction": "Създаване на транзакция",
|
"send_creating_transaction": "Създаване на транзакция",
|
||||||
"send_error_currency": "Валутата може да съдържа само числа",
|
"send_error_currency": "Валутата може да съдържа само числа",
|
||||||
"send_error_minimum_value": "Минималната сума е 0.01",
|
"send_error_minimum_value": "Минималната сума е 0.01",
|
||||||
|
@ -676,6 +679,7 @@
|
||||||
"signature_invalid_error": "Подписът не е валиден за даденото съобщение",
|
"signature_invalid_error": "Подписът не е валиден за даденото съобщение",
|
||||||
"signTransaction": "Подпишете транзакция",
|
"signTransaction": "Подпишете транзакция",
|
||||||
"signup_for_card_accept_terms": "Регистрайте се за картата и приемете условията.",
|
"signup_for_card_accept_terms": "Регистрайте се за картата и приемете условията.",
|
||||||
|
"silent_payment": "Безшумно плащане",
|
||||||
"silent_payments": "Мълчаливи плащания",
|
"silent_payments": "Мълчаливи плащания",
|
||||||
"silent_payments_always_scan": "Задайте мълчаливи плащания винаги сканиране",
|
"silent_payments_always_scan": "Задайте мълчаливи плащания винаги сканиране",
|
||||||
"silent_payments_disclaimer": "Новите адреси не са нови идентичности. Това е повторна употреба на съществуваща идентичност с различен етикет.",
|
"silent_payments_disclaimer": "Новите адреси не са нови идентичности. Това е повторна употреба на съществуваща идентичност с различен етикет.",
|
||||||
|
@ -708,12 +712,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Моля, превключете към портфейл, съвместим с EVM, и опитайте отново (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Моля, превключете към портфейл, съвместим с EVM, и опитайте отново (Ethereum, Polygon)",
|
||||||
"symbol": "Символ",
|
"symbol": "Символ",
|
||||||
"sync_all_wallets": "Синхронизирайте всички портфейли",
|
"sync_all_wallets": "Синхронизирайте всички портфейли",
|
||||||
|
"sync_status_attempting_scan": "Опит за сканиране",
|
||||||
"sync_status_attempting_sync": "ОПИТ ЗА СИНХРОНИЗАЦИЯ",
|
"sync_status_attempting_sync": "ОПИТ ЗА СИНХРОНИЗАЦИЯ",
|
||||||
"sync_status_connected": "СВЪРЗВАНЕ",
|
"sync_status_connected": "СВЪРЗВАНЕ",
|
||||||
"sync_status_connecting": "СВЪРЗВАНЕ",
|
"sync_status_connecting": "СВЪРЗВАНЕ",
|
||||||
"sync_status_failed_connect": "НЕУСПЕШНО СВЪРЗВАНЕ",
|
"sync_status_failed_connect": "НЕУСПЕШНО СВЪРЗВАНЕ",
|
||||||
"sync_status_not_connected": "НЯМА ВРЪЗКА",
|
"sync_status_not_connected": "НЯМА ВРЪЗКА",
|
||||||
"sync_status_starting_scan": "Стартово сканиране",
|
"sync_status_starting_scan": "Стартиране на сканиране (от ${height})",
|
||||||
"sync_status_starting_sync": "ЗАПОЧВАНЕ НА СИНХРОНИЗАЦИЯ",
|
"sync_status_starting_sync": "ЗАПОЧВАНЕ НА СИНХРОНИЗАЦИЯ",
|
||||||
"sync_status_syncronized": "СИНХРОНИЗИРАНО",
|
"sync_status_syncronized": "СИНХРОНИЗИРАНО",
|
||||||
"sync_status_syncronizing": "СИНХРОНИЗИРАНЕ",
|
"sync_status_syncronizing": "СИНХРОНИЗИРАНЕ",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "Upravit token",
|
"edit_token": "Upravit token",
|
||||||
"electrum_address_disclaimer": "Po každém použití je generována nová adresa, ale předchozí adresy také stále fungují",
|
"electrum_address_disclaimer": "Po každém použití je generována nová adresa, ale předchozí adresy také stále fungují",
|
||||||
"email_address": "E-mailová adresa",
|
"email_address": "E-mailová adresa",
|
||||||
|
"enable_mempool_api": "Mempool API pro přesné poplatky a data",
|
||||||
"enable_replace_by_fee": "Povolit výměnu podle poplatku",
|
"enable_replace_by_fee": "Povolit výměnu podle poplatku",
|
||||||
"enable_silent_payments_scanning": "Povolte skenování tichých plateb",
|
"enable_silent_payments_scanning": "Začněte skenovat tiché platby, dokud není dosaženo špičky",
|
||||||
"enabled": "Povoleno",
|
"enabled": "Povoleno",
|
||||||
"enter_amount": "Zadejte částku",
|
"enter_amount": "Zadejte částku",
|
||||||
"enter_backup_password": "Zde zadejte své heslo pro zálohy",
|
"enter_backup_password": "Zde zadejte své heslo pro zálohy",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Ověřování selhalo. ${state_error}",
|
"failed_authentication": "Ověřování selhalo. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "Funkce",
|
"features": "Funkce",
|
||||||
|
"fee_rate": "Sazba poplatků",
|
||||||
"fetching": "Načítá se",
|
"fetching": "Načítá se",
|
||||||
"fiat_api": "Fiat API",
|
"fiat_api": "Fiat API",
|
||||||
"fiat_balance": "Fiat Balance",
|
"fiat_balance": "Fiat Balance",
|
||||||
|
@ -610,6 +612,7 @@
|
||||||
"send": "Poslat",
|
"send": "Poslat",
|
||||||
"send_address": "${cryptoCurrency} adresa",
|
"send_address": "${cryptoCurrency} adresa",
|
||||||
"send_amount": "Částka:",
|
"send_amount": "Částka:",
|
||||||
|
"send_change_to_you": "Změňte, vám:",
|
||||||
"send_creating_transaction": "Vytváření transakce",
|
"send_creating_transaction": "Vytváření transakce",
|
||||||
"send_error_currency": "Měna může obsahovat pouze čísla",
|
"send_error_currency": "Měna může obsahovat pouze čísla",
|
||||||
"send_error_minimum_value": "Minimální částka je 0,01",
|
"send_error_minimum_value": "Minimální částka je 0,01",
|
||||||
|
@ -676,6 +679,7 @@
|
||||||
"signature_invalid_error": "Podpis není platný pro danou zprávu",
|
"signature_invalid_error": "Podpis není platný pro danou zprávu",
|
||||||
"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_payment": "Tichá platba",
|
||||||
"silent_payments": "Tiché platby",
|
"silent_payments": "Tiché platby",
|
||||||
"silent_payments_always_scan": "Nastavit tiché platby vždy skenování",
|
"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.",
|
||||||
|
@ -708,12 +712,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Přepněte na peněženku kompatibilní s EVM a zkuste to znovu (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Přepněte na peněženku kompatibilní s EVM a zkuste to znovu (Ethereum, Polygon)",
|
||||||
"symbol": "Symbol",
|
"symbol": "Symbol",
|
||||||
"sync_all_wallets": "Synchronizovat všechny peněženky",
|
"sync_all_wallets": "Synchronizovat všechny peněženky",
|
||||||
|
"sync_status_attempting_scan": "Pokus o skenování",
|
||||||
"sync_status_attempting_sync": "ZAHAJUJI SYNCHR.",
|
"sync_status_attempting_sync": "ZAHAJUJI SYNCHR.",
|
||||||
"sync_status_connected": "PŘIPOJENO",
|
"sync_status_connected": "PŘIPOJENO",
|
||||||
"sync_status_connecting": "PŘIPOJOVÁNÍ",
|
"sync_status_connecting": "PŘIPOJOVÁNÍ",
|
||||||
"sync_status_failed_connect": "ODPOJENO",
|
"sync_status_failed_connect": "ODPOJENO",
|
||||||
"sync_status_not_connected": "NEPŘIPOJENO",
|
"sync_status_not_connected": "NEPŘIPOJENO",
|
||||||
"sync_status_starting_scan": "Počáteční skenování",
|
"sync_status_starting_scan": "Počáteční skenování (z ${height})",
|
||||||
"sync_status_starting_sync": "SPOUŠTĚNÍ SYNCHRONIZACE",
|
"sync_status_starting_sync": "SPOUŠTĚNÍ SYNCHRONIZACE",
|
||||||
"sync_status_syncronized": "SYNCHRONIZOVÁNO",
|
"sync_status_syncronized": "SYNCHRONIZOVÁNO",
|
||||||
"sync_status_syncronizing": "SYNCHRONIZUJI",
|
"sync_status_syncronizing": "SYNCHRONIZUJI",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "Token bearbeiten",
|
"edit_token": "Token bearbeiten",
|
||||||
"electrum_address_disclaimer": "Wir generieren jedes Mal neue Adressen, wenn Sie eine verwenden, aber vorherige Adressen funktionieren weiterhin",
|
"electrum_address_disclaimer": "Wir generieren jedes Mal neue Adressen, wenn Sie eine verwenden, aber vorherige Adressen funktionieren weiterhin",
|
||||||
"email_address": "E-Mail-Adresse",
|
"email_address": "E-Mail-Adresse",
|
||||||
|
"enable_mempool_api": "Mempool -API für genaue Gebühren und Daten",
|
||||||
"enable_replace_by_fee": "Aktivieren Sie Ersatz für Fee",
|
"enable_replace_by_fee": "Aktivieren Sie Ersatz für Fee",
|
||||||
"enable_silent_payments_scanning": "Aktivieren Sie stille Zahlungen Scannen",
|
"enable_silent_payments_scanning": "Scannen Sie stille Zahlungen, bis die Spitze erreicht ist",
|
||||||
"enabled": "Ermöglicht",
|
"enabled": "Ermöglicht",
|
||||||
"enter_amount": "Betrag eingeben",
|
"enter_amount": "Betrag eingeben",
|
||||||
"enter_backup_password": "Sicherungskennwort hier eingeben",
|
"enter_backup_password": "Sicherungskennwort hier eingeben",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Authentifizierung fehlgeschlagen. ${state_error}",
|
"failed_authentication": "Authentifizierung fehlgeschlagen. ${state_error}",
|
||||||
"faq": "Häufig gestellte Fragen",
|
"faq": "Häufig gestellte Fragen",
|
||||||
"features": "Merkmale",
|
"features": "Merkmale",
|
||||||
|
"fee_rate": "Gebührenpreis",
|
||||||
"fetching": "Frage ab",
|
"fetching": "Frage ab",
|
||||||
"fiat_api": "Fiat API",
|
"fiat_api": "Fiat API",
|
||||||
"fiat_balance": "Fiat Balance",
|
"fiat_balance": "Fiat Balance",
|
||||||
|
@ -611,6 +613,7 @@
|
||||||
"send": "Senden",
|
"send": "Senden",
|
||||||
"send_address": "${cryptoCurrency}-Adresse",
|
"send_address": "${cryptoCurrency}-Adresse",
|
||||||
"send_amount": "Betrag:",
|
"send_amount": "Betrag:",
|
||||||
|
"send_change_to_you": "Verändere dich zu dir:",
|
||||||
"send_creating_transaction": "Erstelle Transaktion",
|
"send_creating_transaction": "Erstelle Transaktion",
|
||||||
"send_error_currency": "Die Währung darf nur Zahlen enthalten",
|
"send_error_currency": "Die Währung darf nur Zahlen enthalten",
|
||||||
"send_error_minimum_value": "Der Mindestbetrag ist 0,01",
|
"send_error_minimum_value": "Der Mindestbetrag ist 0,01",
|
||||||
|
@ -677,6 +680,7 @@
|
||||||
"signature_invalid_error": "Die Signatur gilt nicht für die angegebene Nachricht",
|
"signature_invalid_error": "Die Signatur gilt nicht für die angegebene Nachricht",
|
||||||
"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_payment": "Stille Zahlung",
|
||||||
"silent_payments": "Stille Zahlungen",
|
"silent_payments": "Stille Zahlungen",
|
||||||
"silent_payments_always_scan": "Setzen Sie stille Zahlungen immer scannen",
|
"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.",
|
||||||
|
@ -709,12 +713,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Bitte wechseln Sie zu einem EVM-kompatiblen Wallet und versuchen Sie es erneut (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Bitte wechseln Sie zu einem EVM-kompatiblen Wallet und versuchen Sie es erneut (Ethereum, Polygon)",
|
||||||
"symbol": "Symbol",
|
"symbol": "Symbol",
|
||||||
"sync_all_wallets": "Alle Wallets synchronisieren",
|
"sync_all_wallets": "Alle Wallets synchronisieren",
|
||||||
|
"sync_status_attempting_scan": "Versuch Scan",
|
||||||
"sync_status_attempting_sync": "SYNC VERSUCHEN",
|
"sync_status_attempting_sync": "SYNC VERSUCHEN",
|
||||||
"sync_status_connected": "VERBUNDEN",
|
"sync_status_connected": "VERBUNDEN",
|
||||||
"sync_status_connecting": "VERBINDEN",
|
"sync_status_connecting": "VERBINDEN",
|
||||||
"sync_status_failed_connect": "GETRENNT",
|
"sync_status_failed_connect": "GETRENNT",
|
||||||
"sync_status_not_connected": "NICHT VERBUNDEN",
|
"sync_status_not_connected": "NICHT VERBUNDEN",
|
||||||
"sync_status_starting_scan": "Scan beginnen",
|
"sync_status_starting_scan": "SCAN starten (von ${height})",
|
||||||
"sync_status_starting_sync": "STARTE SYNCHRONISIERUNG",
|
"sync_status_starting_sync": "STARTE SYNCHRONISIERUNG",
|
||||||
"sync_status_syncronized": "SYNCHRONISIERT",
|
"sync_status_syncronized": "SYNCHRONISIERT",
|
||||||
"sync_status_syncronizing": "SYNCHRONISIERE",
|
"sync_status_syncronizing": "SYNCHRONISIERE",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "Edit token",
|
"edit_token": "Edit token",
|
||||||
"electrum_address_disclaimer": "We generate new addresses each time you use one, but previous addresses continue to work",
|
"electrum_address_disclaimer": "We generate new addresses each time you use one, but previous addresses continue to work",
|
||||||
"email_address": "Email Address",
|
"email_address": "Email Address",
|
||||||
|
"enable_mempool_api": "Mempool API for accurate fees and dates",
|
||||||
"enable_replace_by_fee": "Enable Replace-By-Fee",
|
"enable_replace_by_fee": "Enable Replace-By-Fee",
|
||||||
"enable_silent_payments_scanning": "Enable silent payments scanning",
|
"enable_silent_payments_scanning": "Start scanning silent payments, until the tip is reached",
|
||||||
"enabled": "Enabled",
|
"enabled": "Enabled",
|
||||||
"enter_amount": "Enter Amount",
|
"enter_amount": "Enter Amount",
|
||||||
"enter_backup_password": "Enter backup password here",
|
"enter_backup_password": "Enter backup password here",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Failed authentication. ${state_error}",
|
"failed_authentication": "Failed authentication. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "Features",
|
"features": "Features",
|
||||||
|
"fee_rate": "Fee rate",
|
||||||
"fetching": "Fetching",
|
"fetching": "Fetching",
|
||||||
"fiat_api": "Fiat API",
|
"fiat_api": "Fiat API",
|
||||||
"fiat_balance": "Fiat Balance",
|
"fiat_balance": "Fiat Balance",
|
||||||
|
@ -611,6 +613,7 @@
|
||||||
"send": "Send",
|
"send": "Send",
|
||||||
"send_address": "${cryptoCurrency} address",
|
"send_address": "${cryptoCurrency} address",
|
||||||
"send_amount": "Amount:",
|
"send_amount": "Amount:",
|
||||||
|
"send_change_to_you": "Change, to you:",
|
||||||
"send_creating_transaction": "Creating transaction",
|
"send_creating_transaction": "Creating transaction",
|
||||||
"send_error_currency": "Currency can only contain numbers",
|
"send_error_currency": "Currency can only contain numbers",
|
||||||
"send_error_minimum_value": "Minimum value of amount is 0.01",
|
"send_error_minimum_value": "Minimum value of amount is 0.01",
|
||||||
|
@ -677,6 +680,7 @@
|
||||||
"signature_invalid_error": "The signature is not valid for the message given",
|
"signature_invalid_error": "The signature is not valid for the message given",
|
||||||
"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_payment": "Silent Payment",
|
||||||
"silent_payments": "Silent Payments",
|
"silent_payments": "Silent Payments",
|
||||||
"silent_payments_always_scan": "Set Silent Payments always scanning",
|
"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.",
|
||||||
|
@ -709,12 +713,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Please switch to an EVM compatible wallet and try again (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Please switch to an EVM compatible wallet and try again (Ethereum, Polygon)",
|
||||||
"symbol": "Symbol",
|
"symbol": "Symbol",
|
||||||
"sync_all_wallets": "Sync all wallets",
|
"sync_all_wallets": "Sync all wallets",
|
||||||
|
"sync_status_attempting_scan": "ATTEMPTING SCAN",
|
||||||
"sync_status_attempting_sync": "ATTEMPTING SYNC",
|
"sync_status_attempting_sync": "ATTEMPTING SYNC",
|
||||||
"sync_status_connected": "CONNECTED",
|
"sync_status_connected": "CONNECTED",
|
||||||
"sync_status_connecting": "CONNECTING",
|
"sync_status_connecting": "CONNECTING",
|
||||||
"sync_status_failed_connect": "DISCONNECTED",
|
"sync_status_failed_connect": "DISCONNECTED",
|
||||||
"sync_status_not_connected": "NOT CONNECTED",
|
"sync_status_not_connected": "NOT CONNECTED",
|
||||||
"sync_status_starting_scan": "STARTING SCAN",
|
"sync_status_starting_scan": "STARTING SCAN (from ${height})",
|
||||||
"sync_status_starting_sync": "STARTING SYNC",
|
"sync_status_starting_sync": "STARTING SYNC",
|
||||||
"sync_status_syncronized": "SYNCHRONIZED",
|
"sync_status_syncronized": "SYNCHRONIZED",
|
||||||
"sync_status_syncronizing": "SYNCHRONIZING",
|
"sync_status_syncronizing": "SYNCHRONIZING",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "Editar token",
|
"edit_token": "Editar token",
|
||||||
"electrum_address_disclaimer": "Generamos nuevas direcciones cada vez que usa una, pero las direcciones anteriores siguen funcionando",
|
"electrum_address_disclaimer": "Generamos nuevas direcciones cada vez que usa una, pero las direcciones anteriores siguen funcionando",
|
||||||
"email_address": "Dirección de correo electrónico",
|
"email_address": "Dirección de correo electrónico",
|
||||||
|
"enable_mempool_api": "API de Mempool para tarifas y fechas precisas",
|
||||||
"enable_replace_by_fee": "Habilitar reemplazar por tarea",
|
"enable_replace_by_fee": "Habilitar reemplazar por tarea",
|
||||||
"enable_silent_payments_scanning": "Habilitar escaneo de pagos silenciosos",
|
"enable_silent_payments_scanning": "Comience a escanear pagos silenciosos, hasta que se alcance la punta",
|
||||||
"enabled": "Activado",
|
"enabled": "Activado",
|
||||||
"enter_amount": "Ingrese la cantidad",
|
"enter_amount": "Ingrese la cantidad",
|
||||||
"enter_backup_password": "Ingrese la contraseña de respaldo aquí",
|
"enter_backup_password": "Ingrese la contraseña de respaldo aquí",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Autenticación fallida. ${state_error}",
|
"failed_authentication": "Autenticación fallida. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "Características",
|
"features": "Características",
|
||||||
|
"fee_rate": "Tarifa",
|
||||||
"fetching": "Cargando",
|
"fetching": "Cargando",
|
||||||
"fiat_api": "Fiat API",
|
"fiat_api": "Fiat API",
|
||||||
"fiat_balance": "Equilibrio Fiat",
|
"fiat_balance": "Equilibrio Fiat",
|
||||||
|
@ -611,6 +613,7 @@
|
||||||
"send": "Enviar",
|
"send": "Enviar",
|
||||||
"send_address": "Dirección de ${cryptoCurrency}",
|
"send_address": "Dirección de ${cryptoCurrency}",
|
||||||
"send_amount": "Cantidad:",
|
"send_amount": "Cantidad:",
|
||||||
|
"send_change_to_you": "Cambiar, a ti:",
|
||||||
"send_creating_transaction": "Creando transacción",
|
"send_creating_transaction": "Creando transacción",
|
||||||
"send_error_currency": "La moneda solo puede contener números",
|
"send_error_currency": "La moneda solo puede contener números",
|
||||||
"send_error_minimum_value": "El valor mínimo de la cantidad es 0.01",
|
"send_error_minimum_value": "El valor mínimo de la cantidad es 0.01",
|
||||||
|
@ -677,6 +680,7 @@
|
||||||
"signature_invalid_error": "La firma no es válida para el mensaje dado",
|
"signature_invalid_error": "La firma no es válida para el mensaje dado",
|
||||||
"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_payment": "Pago silencioso",
|
||||||
"silent_payments": "Pagos silenciosos",
|
"silent_payments": "Pagos silenciosos",
|
||||||
"silent_payments_always_scan": "Establecer pagos silenciosos siempre escaneando",
|
"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.",
|
||||||
|
@ -709,12 +713,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Cambie a una billetera compatible con EVM e inténtelo nuevamente (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Cambie a una billetera compatible con EVM e inténtelo nuevamente (Ethereum, Polygon)",
|
||||||
"symbol": "Símbolo",
|
"symbol": "Símbolo",
|
||||||
"sync_all_wallets": "Sincronizar todas las billeteras",
|
"sync_all_wallets": "Sincronizar todas las billeteras",
|
||||||
|
"sync_status_attempting_scan": "Intento de escaneo",
|
||||||
"sync_status_attempting_sync": "INTENTAR SINCRONIZAR",
|
"sync_status_attempting_sync": "INTENTAR SINCRONIZAR",
|
||||||
"sync_status_connected": "CONECTADO",
|
"sync_status_connected": "CONECTADO",
|
||||||
"sync_status_connecting": "CONECTANDO",
|
"sync_status_connecting": "CONECTANDO",
|
||||||
"sync_status_failed_connect": "DESCONECTADO",
|
"sync_status_failed_connect": "DESCONECTADO",
|
||||||
"sync_status_not_connected": "NO CONECTADO",
|
"sync_status_not_connected": "NO CONECTADO",
|
||||||
"sync_status_starting_scan": "Escaneo inicial",
|
"sync_status_starting_scan": "Iniciar escaneo (de ${height})",
|
||||||
"sync_status_starting_sync": "EMPEZANDO A SINCRONIZAR",
|
"sync_status_starting_sync": "EMPEZANDO A SINCRONIZAR",
|
||||||
"sync_status_syncronized": "SINCRONIZADO",
|
"sync_status_syncronized": "SINCRONIZADO",
|
||||||
"sync_status_syncronizing": "SINCRONIZANDO",
|
"sync_status_syncronizing": "SINCRONIZANDO",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "Modifier le token",
|
"edit_token": "Modifier le token",
|
||||||
"electrum_address_disclaimer": "Nous générons de nouvelles adresses à chaque fois que vous en utilisez une, mais les adresses précédentes continuent à fonctionner",
|
"electrum_address_disclaimer": "Nous générons de nouvelles adresses à chaque fois que vous en utilisez une, mais les adresses précédentes continuent à fonctionner",
|
||||||
"email_address": "Adresse e-mail",
|
"email_address": "Adresse e-mail",
|
||||||
|
"enable_mempool_api": "API Mempool pour les frais et dates précis",
|
||||||
"enable_replace_by_fee": "Activer Remplace-by-Fee",
|
"enable_replace_by_fee": "Activer Remplace-by-Fee",
|
||||||
"enable_silent_payments_scanning": "Activer la numérisation des paiements silencieux",
|
"enable_silent_payments_scanning": "Commencez à scanner les paiements silencieux, jusqu'à ce que la pointe soit atteinte",
|
||||||
"enabled": "Activé",
|
"enabled": "Activé",
|
||||||
"enter_amount": "Entrez le montant",
|
"enter_amount": "Entrez le montant",
|
||||||
"enter_backup_password": "Entrez le mot de passe de sauvegarde ici",
|
"enter_backup_password": "Entrez le mot de passe de sauvegarde ici",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Échec d'authentification. ${state_error}",
|
"failed_authentication": "Échec d'authentification. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "Caractéristiques",
|
"features": "Caractéristiques",
|
||||||
|
"fee_rate": "Taux de frais",
|
||||||
"fetching": "Récupération",
|
"fetching": "Récupération",
|
||||||
"fiat_api": "Fiat API",
|
"fiat_api": "Fiat API",
|
||||||
"fiat_balance": "Solde fiat",
|
"fiat_balance": "Solde fiat",
|
||||||
|
@ -610,6 +612,7 @@
|
||||||
"send": "Envoyer",
|
"send": "Envoyer",
|
||||||
"send_address": "adresse ${cryptoCurrency}",
|
"send_address": "adresse ${cryptoCurrency}",
|
||||||
"send_amount": "Montant :",
|
"send_amount": "Montant :",
|
||||||
|
"send_change_to_you": "Changer, pour vous:",
|
||||||
"send_creating_transaction": "Création de la transaction",
|
"send_creating_transaction": "Création de la transaction",
|
||||||
"send_error_currency": "La monnaie ne peut contenir que des nombres",
|
"send_error_currency": "La monnaie ne peut contenir que des nombres",
|
||||||
"send_error_minimum_value": "La valeur minimale du montant est 0.01",
|
"send_error_minimum_value": "La valeur minimale du montant est 0.01",
|
||||||
|
@ -676,6 +679,7 @@
|
||||||
"signature_invalid_error": "La signature n'est pas valable pour le message donné",
|
"signature_invalid_error": "La signature n'est pas valable pour le message donné",
|
||||||
"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_payment": "Paiement silencieux",
|
||||||
"silent_payments": "Paiements silencieux",
|
"silent_payments": "Paiements silencieux",
|
||||||
"silent_payments_always_scan": "Définir les paiements silencieux toujours à la scanne",
|
"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.",
|
||||||
|
@ -708,12 +712,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Veuillez passer à un portefeuille compatible EVM et réessayer (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Veuillez passer à un portefeuille compatible EVM et réessayer (Ethereum, Polygon)",
|
||||||
"symbol": "Symbole",
|
"symbol": "Symbole",
|
||||||
"sync_all_wallets": "Synchroniser tous les portefeuilles",
|
"sync_all_wallets": "Synchroniser tous les portefeuilles",
|
||||||
|
"sync_status_attempting_scan": "Tentative de numérisation",
|
||||||
"sync_status_attempting_sync": "TENTATIVE DE SYNCHRONISATION",
|
"sync_status_attempting_sync": "TENTATIVE DE SYNCHRONISATION",
|
||||||
"sync_status_connected": "CONNECTÉ",
|
"sync_status_connected": "CONNECTÉ",
|
||||||
"sync_status_connecting": "CONNEXION EN COURS",
|
"sync_status_connecting": "CONNEXION EN COURS",
|
||||||
"sync_status_failed_connect": "DÉCONNECTÉ",
|
"sync_status_failed_connect": "DÉCONNECTÉ",
|
||||||
"sync_status_not_connected": "NON CONNECTÉ",
|
"sync_status_not_connected": "NON CONNECTÉ",
|
||||||
"sync_status_starting_scan": "Démarrage",
|
"sync_status_starting_scan": "Démarrer la numérisation (à partir de ${height})",
|
||||||
"sync_status_starting_sync": "DÉBUT DE SYNCHRO",
|
"sync_status_starting_sync": "DÉBUT DE SYNCHRO",
|
||||||
"sync_status_syncronized": "SYNCHRONISÉ",
|
"sync_status_syncronized": "SYNCHRONISÉ",
|
||||||
"sync_status_syncronizing": "SYNCHRONISATION EN COURS",
|
"sync_status_syncronizing": "SYNCHRONISATION EN COURS",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "Gyara alamar",
|
"edit_token": "Gyara alamar",
|
||||||
"electrum_address_disclaimer": "Muna samar da sababbin adireshi duk lokacin da kuka yi amfani da ɗaya, amma adiresoshin da suka gabata suna ci gaba da aiki",
|
"electrum_address_disclaimer": "Muna samar da sababbin adireshi duk lokacin da kuka yi amfani da ɗaya, amma adiresoshin da suka gabata suna ci gaba da aiki",
|
||||||
"email_address": "Adireshin i-mel",
|
"email_address": "Adireshin i-mel",
|
||||||
|
"enable_mempool_api": "Mampool API don ingantattun kudade da kwanakin",
|
||||||
"enable_replace_by_fee": "Ba da damar maye gurbin-by-kudin",
|
"enable_replace_by_fee": "Ba da damar maye gurbin-by-kudin",
|
||||||
"enable_silent_payments_scanning": "Kunna biya biya",
|
"enable_silent_payments_scanning": "Fara bincika biya na shiru, har sai tip ɗin ya kai",
|
||||||
"enabled": "An kunna",
|
"enabled": "An kunna",
|
||||||
"enter_amount": "Shigar da Adadi",
|
"enter_amount": "Shigar da Adadi",
|
||||||
"enter_backup_password": "Shigar da kalmar wucewa ta madadin nan",
|
"enter_backup_password": "Shigar da kalmar wucewa ta madadin nan",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Binne wajen shiga. ${state_error}",
|
"failed_authentication": "Binne wajen shiga. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "Fasas",
|
"features": "Fasas",
|
||||||
|
"fee_rate": "Kudi",
|
||||||
"fetching": "Daukewa",
|
"fetching": "Daukewa",
|
||||||
"fiat_api": "API ɗin Fiat",
|
"fiat_api": "API ɗin Fiat",
|
||||||
"fiat_balance": "Fiat Balance",
|
"fiat_balance": "Fiat Balance",
|
||||||
|
@ -612,6 +614,7 @@
|
||||||
"send": "Aika",
|
"send": "Aika",
|
||||||
"send_address": "${cryptoCurrency} address",
|
"send_address": "${cryptoCurrency} address",
|
||||||
"send_amount": "Adadi:",
|
"send_amount": "Adadi:",
|
||||||
|
"send_change_to_you": "Canza, a gare ku:",
|
||||||
"send_creating_transaction": "Ƙirƙirar ciniki",
|
"send_creating_transaction": "Ƙirƙirar ciniki",
|
||||||
"send_error_currency": "Kudi zai iya ƙunsar lambobi kawai",
|
"send_error_currency": "Kudi zai iya ƙunsar lambobi kawai",
|
||||||
"send_error_minimum_value": "Mafi ƙarancin ƙimar adadin shine 0.01",
|
"send_error_minimum_value": "Mafi ƙarancin ƙimar adadin shine 0.01",
|
||||||
|
@ -678,6 +681,7 @@
|
||||||
"signature_invalid_error": "Sa hannu ba shi da inganci ga sakon da aka bayar",
|
"signature_invalid_error": "Sa hannu ba shi da inganci ga sakon da aka bayar",
|
||||||
"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_payment": "Biya silent",
|
||||||
"silent_payments": "Biya silent",
|
"silent_payments": "Biya silent",
|
||||||
"silent_payments_always_scan": "Saita biya na shiru koyaushe",
|
"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.",
|
||||||
|
@ -710,12 +714,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Da fatan za a canza zuwa walat ɗin EVM mai jituwa kuma a sake gwadawa (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Da fatan za a canza zuwa walat ɗin EVM mai jituwa kuma a sake gwadawa (Ethereum, Polygon)",
|
||||||
"symbol": "Alama",
|
"symbol": "Alama",
|
||||||
"sync_all_wallets": "Sync Duk Wallet",
|
"sync_all_wallets": "Sync Duk Wallet",
|
||||||
|
"sync_status_attempting_scan": "Yunƙurin scan",
|
||||||
"sync_status_attempting_sync": "KWAFI",
|
"sync_status_attempting_sync": "KWAFI",
|
||||||
"sync_status_connected": "HANNU",
|
"sync_status_connected": "HANNU",
|
||||||
"sync_status_connecting": "HADA",
|
"sync_status_connecting": "HADA",
|
||||||
"sync_status_failed_connect": "BABU INTERNET",
|
"sync_status_failed_connect": "BABU INTERNET",
|
||||||
"sync_status_not_connected": "BABU INTERNET",
|
"sync_status_not_connected": "BABU INTERNET",
|
||||||
"sync_status_starting_scan": "Fara scan",
|
"sync_status_starting_scan": "Farawa Scan (daga ${height})",
|
||||||
"sync_status_starting_sync": "KWAFI",
|
"sync_status_starting_sync": "KWAFI",
|
||||||
"sync_status_syncronized": "KYAU",
|
"sync_status_syncronized": "KYAU",
|
||||||
"sync_status_syncronizing": "KWAFI",
|
"sync_status_syncronizing": "KWAFI",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "टोकन संपादित करें",
|
"edit_token": "टोकन संपादित करें",
|
||||||
"electrum_address_disclaimer": "हर बार जब आप एक का उपयोग करते हैं तो हम नए पते उत्पन्न करते हैं, लेकिन पिछले पते काम करना जारी रखते हैं",
|
"electrum_address_disclaimer": "हर बार जब आप एक का उपयोग करते हैं तो हम नए पते उत्पन्न करते हैं, लेकिन पिछले पते काम करना जारी रखते हैं",
|
||||||
"email_address": "ईमेल पता",
|
"email_address": "ईमेल पता",
|
||||||
|
"enable_mempool_api": "सटीक शुल्क और तिथियों के लिए मेमपूल एपीआई",
|
||||||
"enable_replace_by_fee": "प्रतिस्थापित-दर-शुल्क सक्षम करें",
|
"enable_replace_by_fee": "प्रतिस्थापित-दर-शुल्क सक्षम करें",
|
||||||
"enable_silent_payments_scanning": "मूक भुगतान स्कैनिंग सक्षम करें",
|
"enable_silent_payments_scanning": "साइलेंट पेमेंट्स को स्कैन करना शुरू करें, जब तक कि टिप तक पहुंच न जाए",
|
||||||
"enabled": "सक्रिय",
|
"enabled": "सक्रिय",
|
||||||
"enter_amount": "राशि दर्ज करें",
|
"enter_amount": "राशि दर्ज करें",
|
||||||
"enter_backup_password": "यहां बैकअप पासवर्ड डालें",
|
"enter_backup_password": "यहां बैकअप पासवर्ड डालें",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "प्रमाणीकरण विफल. ${state_error}",
|
"failed_authentication": "प्रमाणीकरण विफल. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "विशेषताएँ",
|
"features": "विशेषताएँ",
|
||||||
|
"fee_rate": "शुल्क दर",
|
||||||
"fetching": "ला रहा है",
|
"fetching": "ला रहा है",
|
||||||
"fiat_api": "फिएट पैसे API",
|
"fiat_api": "फिएट पैसे API",
|
||||||
"fiat_balance": "फिएट बैलेंस",
|
"fiat_balance": "फिएट बैलेंस",
|
||||||
|
@ -612,6 +614,7 @@
|
||||||
"send": "संदेश",
|
"send": "संदेश",
|
||||||
"send_address": "${cryptoCurrency} पता",
|
"send_address": "${cryptoCurrency} पता",
|
||||||
"send_amount": "रकम:",
|
"send_amount": "रकम:",
|
||||||
|
"send_change_to_you": "बदलो, आप को:",
|
||||||
"send_creating_transaction": "लेन-देन बनाना",
|
"send_creating_transaction": "लेन-देन बनाना",
|
||||||
"send_error_currency": "मुद्रा में केवल संख्याएँ हो सकती हैं",
|
"send_error_currency": "मुद्रा में केवल संख्याएँ हो सकती हैं",
|
||||||
"send_error_minimum_value": "राशि का न्यूनतम मूल्य 0.01 है",
|
"send_error_minimum_value": "राशि का न्यूनतम मूल्य 0.01 है",
|
||||||
|
@ -678,6 +681,7 @@
|
||||||
"signature_invalid_error": "हस्ताक्षर दिए गए संदेश के लिए मान्य नहीं है",
|
"signature_invalid_error": "हस्ताक्षर दिए गए संदेश के लिए मान्य नहीं है",
|
||||||
"signTransaction": "लेन-देन पर हस्ताक्षर करें",
|
"signTransaction": "लेन-देन पर हस्ताक्षर करें",
|
||||||
"signup_for_card_accept_terms": "कार्ड के लिए साइन अप करें और शर्तें स्वीकार करें।",
|
"signup_for_card_accept_terms": "कार्ड के लिए साइन अप करें और शर्तें स्वीकार करें।",
|
||||||
|
"silent_payment": "मूक भुगतान",
|
||||||
"silent_payments": "मूक भुगतान",
|
"silent_payments": "मूक भुगतान",
|
||||||
"silent_payments_always_scan": "मूक भुगतान हमेशा स्कैनिंग सेट करें",
|
"silent_payments_always_scan": "मूक भुगतान हमेशा स्कैनिंग सेट करें",
|
||||||
"silent_payments_disclaimer": "नए पते नई पहचान नहीं हैं। यह एक अलग लेबल के साथ एक मौजूदा पहचान का पुन: उपयोग है।",
|
"silent_payments_disclaimer": "नए पते नई पहचान नहीं हैं। यह एक अलग लेबल के साथ एक मौजूदा पहचान का पुन: उपयोग है।",
|
||||||
|
@ -710,12 +714,13 @@
|
||||||
"switchToEVMCompatibleWallet": "कृपया ईवीएम संगत वॉलेट पर स्विच करें और पुनः प्रयास करें (एथेरियम, पॉलीगॉन)",
|
"switchToEVMCompatibleWallet": "कृपया ईवीएम संगत वॉलेट पर स्विच करें और पुनः प्रयास करें (एथेरियम, पॉलीगॉन)",
|
||||||
"symbol": "प्रतीक",
|
"symbol": "प्रतीक",
|
||||||
"sync_all_wallets": "सभी वॉलेट सिंक करें",
|
"sync_all_wallets": "सभी वॉलेट सिंक करें",
|
||||||
|
"sync_status_attempting_scan": "स्कैन का प्रयास",
|
||||||
"sync_status_attempting_sync": "सिंक करने का प्रयास",
|
"sync_status_attempting_sync": "सिंक करने का प्रयास",
|
||||||
"sync_status_connected": "जुड़े हुए",
|
"sync_status_connected": "जुड़े हुए",
|
||||||
"sync_status_connecting": "कनेक्ट",
|
"sync_status_connecting": "कनेक्ट",
|
||||||
"sync_status_failed_connect": "डिस्कनेक्ट किया गया",
|
"sync_status_failed_connect": "डिस्कनेक्ट किया गया",
|
||||||
"sync_status_not_connected": "जुड़े नहीं हैं",
|
"sync_status_not_connected": "जुड़े नहीं हैं",
|
||||||
"sync_status_starting_scan": "स्कैन शुरू करना",
|
"sync_status_starting_scan": "स्कैन शुरू करना (${height} से)",
|
||||||
"sync_status_starting_sync": "सिताज़ा करना",
|
"sync_status_starting_sync": "सिताज़ा करना",
|
||||||
"sync_status_syncronized": "सिंक्रनाइज़",
|
"sync_status_syncronized": "सिंक्रनाइज़",
|
||||||
"sync_status_syncronizing": "सिंक्रनाइज़ करने",
|
"sync_status_syncronizing": "सिंक्रनाइज़ करने",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "Uredi token",
|
"edit_token": "Uredi token",
|
||||||
"electrum_address_disclaimer": "Minden egyes alkalommal új címeket generálunk, de a korábbi címek továbbra is működnek",
|
"electrum_address_disclaimer": "Minden egyes alkalommal új címeket generálunk, de a korábbi címek továbbra is működnek",
|
||||||
"email_address": "Adresa e-pošte",
|
"email_address": "Adresa e-pošte",
|
||||||
|
"enable_mempool_api": "Mempool API za točne naknade i datume",
|
||||||
"enable_replace_by_fee": "Omogući zamjenu",
|
"enable_replace_by_fee": "Omogući zamjenu",
|
||||||
"enable_silent_payments_scanning": "Omogući skeniranje tihih plaćanja",
|
"enable_silent_payments_scanning": "Započnite skeniranje tihih plaćanja, dok se ne postigne savjet",
|
||||||
"enabled": "Omogućeno",
|
"enabled": "Omogućeno",
|
||||||
"enter_amount": "Unesite iznos",
|
"enter_amount": "Unesite iznos",
|
||||||
"enter_backup_password": "Unesite svoju lozinku za sigurnosnu kopiju ovdje",
|
"enter_backup_password": "Unesite svoju lozinku za sigurnosnu kopiju ovdje",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Autentifikacija neuspješna. ${state_error}",
|
"failed_authentication": "Autentifikacija neuspješna. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "Značajke",
|
"features": "Značajke",
|
||||||
|
"fee_rate": "Stopa naknade",
|
||||||
"fetching": "Dohvaćanje",
|
"fetching": "Dohvaćanje",
|
||||||
"fiat_api": "Fiat API",
|
"fiat_api": "Fiat API",
|
||||||
"fiat_balance": "Fiat Bilans",
|
"fiat_balance": "Fiat Bilans",
|
||||||
|
@ -610,6 +612,7 @@
|
||||||
"send": "Pošalji",
|
"send": "Pošalji",
|
||||||
"send_address": "${cryptoCurrency} adresa",
|
"send_address": "${cryptoCurrency} adresa",
|
||||||
"send_amount": "Iznos:",
|
"send_amount": "Iznos:",
|
||||||
|
"send_change_to_you": "Promijenite, u vas:",
|
||||||
"send_creating_transaction": "Izrada transakcije",
|
"send_creating_transaction": "Izrada transakcije",
|
||||||
"send_error_currency": "Iznos smije sadržavati samo brojeve",
|
"send_error_currency": "Iznos smije sadržavati samo brojeve",
|
||||||
"send_error_minimum_value": "Minimalna vrijednost iznosa je 0.01",
|
"send_error_minimum_value": "Minimalna vrijednost iznosa je 0.01",
|
||||||
|
@ -676,6 +679,7 @@
|
||||||
"signature_invalid_error": "Potpis ne vrijedi za danu poruku",
|
"signature_invalid_error": "Potpis ne vrijedi za danu poruku",
|
||||||
"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_payment": "Tiho plaćanje",
|
||||||
"silent_payments": "Tiha plaćanja",
|
"silent_payments": "Tiha plaćanja",
|
||||||
"silent_payments_always_scan": "Postavite tiho plaćanje uvijek skeniranje",
|
"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.",
|
||||||
|
@ -708,12 +712,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Prijeđite na novčanik kompatibilan s EVM-om i pokušajte ponovno (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Prijeđite na novčanik kompatibilan s EVM-om i pokušajte ponovno (Ethereum, Polygon)",
|
||||||
"symbol": "Simbol",
|
"symbol": "Simbol",
|
||||||
"sync_all_wallets": "Sinkronizirajte sve novčanike",
|
"sync_all_wallets": "Sinkronizirajte sve novčanike",
|
||||||
|
"sync_status_attempting_scan": "Pokušaj skeniranja",
|
||||||
"sync_status_attempting_sync": "POKUŠAJ SINKRONIZACIJE",
|
"sync_status_attempting_sync": "POKUŠAJ SINKRONIZACIJE",
|
||||||
"sync_status_connected": "SPOJENO",
|
"sync_status_connected": "SPOJENO",
|
||||||
"sync_status_connecting": "SPAJANJE",
|
"sync_status_connecting": "SPAJANJE",
|
||||||
"sync_status_failed_connect": "ISKLJUČENO",
|
"sync_status_failed_connect": "ISKLJUČENO",
|
||||||
"sync_status_not_connected": "NIJE POVEZANO",
|
"sync_status_not_connected": "NIJE POVEZANO",
|
||||||
"sync_status_starting_scan": "Početno skeniranje",
|
"sync_status_starting_scan": "Početno skeniranje (od ${height})",
|
||||||
"sync_status_starting_sync": "ZAPOČINJEMO SINKRONIZIRANJE",
|
"sync_status_starting_sync": "ZAPOČINJEMO SINKRONIZIRANJE",
|
||||||
"sync_status_syncronized": "SINKRONIZIRANO",
|
"sync_status_syncronized": "SINKRONIZIRANO",
|
||||||
"sync_status_syncronizing": "SINKRONIZIRANJE",
|
"sync_status_syncronizing": "SINKRONIZIRANJE",
|
||||||
|
|
|
@ -231,8 +231,9 @@
|
||||||
"edit_token": "Փոփոխել տոկեն",
|
"edit_token": "Փոփոխել տոկեն",
|
||||||
"electrum_address_disclaimer": "Մենք ստեղծում ենք նոր հասցե ամեն անգամ, երբ դուք օգտագործում եք այն, բայց նախորդ հասցեները շարունակում են աշխատել",
|
"electrum_address_disclaimer": "Մենք ստեղծում ենք նոր հասցե ամեն անգամ, երբ դուք օգտագործում եք այն, բայց նախորդ հասցեները շարունակում են աշխատել",
|
||||||
"email_address": "Էլ. փոստի հասցե",
|
"email_address": "Էլ. փոստի հասցե",
|
||||||
|
"enable_mempool_api": "Mempool API ճշգրիտ վճարների եւ ամսաթվերի համար",
|
||||||
"enable_replace_by_fee": "Միացնել փոխարինումը միջնորդավճարով",
|
"enable_replace_by_fee": "Միացնել փոխարինումը միջնորդավճարով",
|
||||||
"enable_silent_payments_scanning": "Միացնել Լուռ Վճարումների սկանավորումը",
|
"enable_silent_payments_scanning": "Սկսեք սկանավորել լուռ վճարումները, մինչեւ որ ծայրը հասնի",
|
||||||
"enabled": "Միացված",
|
"enabled": "Միացված",
|
||||||
"enter_amount": "Մուտքագրեք գումար",
|
"enter_amount": "Մուտքագրեք գումար",
|
||||||
"enter_backup_password": "Մուտքագրեք կրկնօրինակի գաղտնաբառը",
|
"enter_backup_password": "Մուտքագրեք կրկնօրինակի գաղտնաբառը",
|
||||||
|
@ -294,6 +295,7 @@
|
||||||
"failed_authentication": "Վավերացումը ձախողվեց. ${state_error}",
|
"failed_authentication": "Վավերացումը ձախողվեց. ${state_error}",
|
||||||
"faq": "Հաճախ տրվող հարցեր",
|
"faq": "Հաճախ տրվող հարցեր",
|
||||||
"features": "Հատկանիշներ",
|
"features": "Հատկանիշներ",
|
||||||
|
"fee_rate": "Վճարման տոկոսադրույքը",
|
||||||
"fetching": "Ստացվում է",
|
"fetching": "Ստացվում է",
|
||||||
"fiat_api": "Fiat API",
|
"fiat_api": "Fiat API",
|
||||||
"fiat_balance": "Fiat մնացորդ",
|
"fiat_balance": "Fiat մնացորդ",
|
||||||
|
@ -610,6 +612,7 @@
|
||||||
"send": "Ուղարկել",
|
"send": "Ուղարկել",
|
||||||
"send_address": "${cryptoCurrency} հասցե",
|
"send_address": "${cryptoCurrency} հասցե",
|
||||||
"send_amount": "Քանակ՝",
|
"send_amount": "Քանակ՝",
|
||||||
|
"send_change_to_you": "Փոփոխություն, ձեզ համար.",
|
||||||
"send_creating_transaction": "Ստեղծել գործարք",
|
"send_creating_transaction": "Ստեղծել գործարք",
|
||||||
"send_error_currency": "Արժույթը կարող է պարունակել միայն թվեր",
|
"send_error_currency": "Արժույթը կարող է պարունակել միայն թվեր",
|
||||||
"send_error_minimum_value": "Քանակի նվազագույն արժեքը 0.01 է",
|
"send_error_minimum_value": "Քանակի նվազագույն արժեքը 0.01 է",
|
||||||
|
@ -676,6 +679,7 @@
|
||||||
"signature_invalid_error": "Կնիքը անվավեր է տրված հաղորդագրության համար",
|
"signature_invalid_error": "Կնիքը անվավեր է տրված հաղորդագրության համար",
|
||||||
"signTransaction": "Կնքել Գործարք",
|
"signTransaction": "Կնքել Գործարք",
|
||||||
"signup_for_card_accept_terms": "Գրանցվել քարտի համար և ընդունել պայմանները",
|
"signup_for_card_accept_terms": "Գրանցվել քարտի համար և ընդունել պայմանները",
|
||||||
|
"silent_payment": "Լուռ վճարում",
|
||||||
"silent_payments": "Լուռ Վճարումներ",
|
"silent_payments": "Լուռ Վճարումներ",
|
||||||
"silent_payments_always_scan": "Միացնել Լուռ Վճարումներ մշտական սկանավորումը",
|
"silent_payments_always_scan": "Միացնել Լուռ Վճարումներ մշտական սկանավորումը",
|
||||||
"silent_payments_disclaimer": "Նոր հասցեները նոր ինքնություն չեն։ Դա այլ պիտակով գոյություն ունեցող ինքնության վերագործածում է",
|
"silent_payments_disclaimer": "Նոր հասցեները նոր ինքնություն չեն։ Դա այլ պիտակով գոյություն ունեցող ինքնության վերագործածում է",
|
||||||
|
@ -708,12 +712,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Խնդրում ենք անցնել EVM համատեղելի դրամապանակ և փորձել կրկին (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Խնդրում ենք անցնել EVM համատեղելի դրամապանակ և փորձել կրկին (Ethereum, Polygon)",
|
||||||
"symbol": "Նշան",
|
"symbol": "Նշան",
|
||||||
"sync_all_wallets": "Համաժամեցնել բոլոր դրամապանակները",
|
"sync_all_wallets": "Համաժամեցնել բոլոր դրամապանակները",
|
||||||
|
"sync_status_attempting_scan": "Փորձի սկան",
|
||||||
"sync_status_attempting_sync": "ՀԱՄԱԺԱՄԵՑՄԱՆ ՓՈՐՁ",
|
"sync_status_attempting_sync": "ՀԱՄԱԺԱՄԵՑՄԱՆ ՓՈՐՁ",
|
||||||
"sync_status_connected": "ՄԻԱՑՎԱԾԷ",
|
"sync_status_connected": "ՄԻԱՑՎԱԾԷ",
|
||||||
"sync_status_connecting": "ՄԻԱՑՎՈՒՄ Է",
|
"sync_status_connecting": "ՄԻԱՑՎՈՒՄ Է",
|
||||||
"sync_status_failed_connect": "ՉՄԻԱՑԱՎ",
|
"sync_status_failed_connect": "ՉՄԻԱՑԱՎ",
|
||||||
"sync_status_not_connected": "ՄԻԱՑՎԱԾ ՉԷ",
|
"sync_status_not_connected": "ՄԻԱՑՎԱԾ ՉԷ",
|
||||||
"sync_status_starting_scan": "ՍԿԱՆԱՎՈՐՈՒՄԸ ՍԿՍՎՈՒՄ Է",
|
"sync_status_starting_scan": "Սկսած սկան (${height})",
|
||||||
"sync_status_starting_sync": "ՀԱՄԱԺԱՄԵՑՈՒՄԸ ՍԿՍՎՈՒՄ Է",
|
"sync_status_starting_sync": "ՀԱՄԱԺԱՄԵՑՈՒՄԸ ՍԿՍՎՈՒՄ Է",
|
||||||
"sync_status_syncronized": "ՀԱՄԱԺԱՄԵՑՎԱԾԷ",
|
"sync_status_syncronized": "ՀԱՄԱԺԱՄԵՑՎԱԾԷ",
|
||||||
"sync_status_syncronizing": "ՀԱՄԱԺԱՄԵՑՎՈՒՄ Է",
|
"sync_status_syncronizing": "ՀԱՄԱԺԱՄԵՑՎՈՒՄ Է",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "Mengedit token",
|
"edit_token": "Mengedit token",
|
||||||
"electrum_address_disclaimer": "Kami menghasilkan alamat baru setiap kali Anda menggunakan satu, tetapi alamat sebelumnya tetap berfungsi",
|
"electrum_address_disclaimer": "Kami menghasilkan alamat baru setiap kali Anda menggunakan satu, tetapi alamat sebelumnya tetap berfungsi",
|
||||||
"email_address": "Alamat Email",
|
"email_address": "Alamat Email",
|
||||||
|
"enable_mempool_api": "API Mempool untuk biaya dan tanggal yang akurat",
|
||||||
"enable_replace_by_fee": "Aktifkan ganti-by-fee",
|
"enable_replace_by_fee": "Aktifkan ganti-by-fee",
|
||||||
"enable_silent_payments_scanning": "Aktifkan pemindaian pembayaran diam",
|
"enable_silent_payments_scanning": "Mulailah memindai pembayaran diam, sampai ujung tercapai",
|
||||||
"enabled": "Diaktifkan",
|
"enabled": "Diaktifkan",
|
||||||
"enter_amount": "Masukkan Jumlah",
|
"enter_amount": "Masukkan Jumlah",
|
||||||
"enter_backup_password": "Masukkan kata sandi cadangan di sini",
|
"enter_backup_password": "Masukkan kata sandi cadangan di sini",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Otentikasi gagal. ${state_error}",
|
"failed_authentication": "Otentikasi gagal. ${state_error}",
|
||||||
"faq": "Pertanyaan yang Sering Diajukan",
|
"faq": "Pertanyaan yang Sering Diajukan",
|
||||||
"features": "Fitur",
|
"features": "Fitur",
|
||||||
|
"fee_rate": "Tarif biaya",
|
||||||
"fetching": "Mengambil",
|
"fetching": "Mengambil",
|
||||||
"fiat_api": "API fiat",
|
"fiat_api": "API fiat",
|
||||||
"fiat_balance": "Saldo Fiat",
|
"fiat_balance": "Saldo Fiat",
|
||||||
|
@ -613,6 +615,7 @@
|
||||||
"send": "Mengirim",
|
"send": "Mengirim",
|
||||||
"send_address": "Alamat ${cryptoCurrency}",
|
"send_address": "Alamat ${cryptoCurrency}",
|
||||||
"send_amount": "Jumlah:",
|
"send_amount": "Jumlah:",
|
||||||
|
"send_change_to_you": "Ubah, untukmu:",
|
||||||
"send_creating_transaction": "Membuat transaksi",
|
"send_creating_transaction": "Membuat transaksi",
|
||||||
"send_error_currency": "Mata uang hanya dapat berisi angka",
|
"send_error_currency": "Mata uang hanya dapat berisi angka",
|
||||||
"send_error_minimum_value": "Nilai minimum jumlah adalah 0.01",
|
"send_error_minimum_value": "Nilai minimum jumlah adalah 0.01",
|
||||||
|
@ -679,6 +682,7 @@
|
||||||
"signature_invalid_error": "Tanda tangan tidak valid untuk pesan yang diberikan",
|
"signature_invalid_error": "Tanda tangan tidak valid untuk pesan yang diberikan",
|
||||||
"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_payment": "Pembayaran diam",
|
||||||
"silent_payments": "Pembayaran diam",
|
"silent_payments": "Pembayaran diam",
|
||||||
"silent_payments_always_scan": "Tetapkan pembayaran diam selalu pemindaian",
|
"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.",
|
||||||
|
@ -711,12 +715,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Silakan beralih ke dompet yang kompatibel dengan EVM dan coba lagi (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Silakan beralih ke dompet yang kompatibel dengan EVM dan coba lagi (Ethereum, Polygon)",
|
||||||
"symbol": "Simbol",
|
"symbol": "Simbol",
|
||||||
"sync_all_wallets": "Sinkronkan semua dompet",
|
"sync_all_wallets": "Sinkronkan semua dompet",
|
||||||
|
"sync_status_attempting_scan": "Mencoba memindai",
|
||||||
"sync_status_attempting_sync": "MENCOBA SINKRONISASI",
|
"sync_status_attempting_sync": "MENCOBA SINKRONISASI",
|
||||||
"sync_status_connected": "TERHUBUNG",
|
"sync_status_connected": "TERHUBUNG",
|
||||||
"sync_status_connecting": "MENGHUBUNGKAN",
|
"sync_status_connecting": "MENGHUBUNGKAN",
|
||||||
"sync_status_failed_connect": "GAGAL TERHUBUNG",
|
"sync_status_failed_connect": "GAGAL TERHUBUNG",
|
||||||
"sync_status_not_connected": "TIDAK TERHUBUNG",
|
"sync_status_not_connected": "TIDAK TERHUBUNG",
|
||||||
"sync_status_starting_scan": "Mulai pindai",
|
"sync_status_starting_scan": "Mulai pemindaian (dari ${height})",
|
||||||
"sync_status_starting_sync": "MULAI SINKRONISASI",
|
"sync_status_starting_sync": "MULAI SINKRONISASI",
|
||||||
"sync_status_syncronized": "SUDAH TERSINKRONISASI",
|
"sync_status_syncronized": "SUDAH TERSINKRONISASI",
|
||||||
"sync_status_syncronizing": "SEDANG SINKRONISASI",
|
"sync_status_syncronizing": "SEDANG SINKRONISASI",
|
||||||
|
|
|
@ -233,8 +233,9 @@
|
||||||
"edit_token": "Modifica token",
|
"edit_token": "Modifica token",
|
||||||
"electrum_address_disclaimer": "Generiamo nuovi indirizzi ogni volta che ne utilizzi uno, ma gli indirizzi precedenti continuano a funzionare",
|
"electrum_address_disclaimer": "Generiamo nuovi indirizzi ogni volta che ne utilizzi uno, ma gli indirizzi precedenti continuano a funzionare",
|
||||||
"email_address": "Indirizzo e-mail",
|
"email_address": "Indirizzo e-mail",
|
||||||
|
"enable_mempool_api": "API di Mempool per commissioni e date accurate",
|
||||||
"enable_replace_by_fee": "Abilita sostituzione per fee",
|
"enable_replace_by_fee": "Abilita sostituzione per fee",
|
||||||
"enable_silent_payments_scanning": "Abilita la scansione dei pagamenti silenziosi",
|
"enable_silent_payments_scanning": "Inizia a scansionare i pagamenti silenziosi, fino a raggiungere la punta",
|
||||||
"enabled": "Abilitato",
|
"enabled": "Abilitato",
|
||||||
"enter_amount": "Inserisci importo",
|
"enter_amount": "Inserisci importo",
|
||||||
"enter_backup_password": "Inserisci la password di backup qui",
|
"enter_backup_password": "Inserisci la password di backup qui",
|
||||||
|
@ -296,6 +297,7 @@
|
||||||
"failed_authentication": "Autenticazione fallita. ${state_error}",
|
"failed_authentication": "Autenticazione fallita. ${state_error}",
|
||||||
"faq": "Domande Frequenti",
|
"faq": "Domande Frequenti",
|
||||||
"features": "Caratteristiche",
|
"features": "Caratteristiche",
|
||||||
|
"fee_rate": "Tasso di commissione",
|
||||||
"fetching": "Recupero",
|
"fetching": "Recupero",
|
||||||
"fiat_api": "Fiat API",
|
"fiat_api": "Fiat API",
|
||||||
"fiat_balance": "Equilibrio fiat",
|
"fiat_balance": "Equilibrio fiat",
|
||||||
|
@ -612,6 +614,7 @@
|
||||||
"send": "Invia",
|
"send": "Invia",
|
||||||
"send_address": "${cryptoCurrency} indirizzo",
|
"send_address": "${cryptoCurrency} indirizzo",
|
||||||
"send_amount": "Ammontare:",
|
"send_amount": "Ammontare:",
|
||||||
|
"send_change_to_you": "Cambiamento, a te:",
|
||||||
"send_creating_transaction": "Creazione della transazione",
|
"send_creating_transaction": "Creazione della transazione",
|
||||||
"send_error_currency": "L'ammontare può contenere solo numeri",
|
"send_error_currency": "L'ammontare può contenere solo numeri",
|
||||||
"send_error_minimum_value": "L'ammontare minimo è 0.01",
|
"send_error_minimum_value": "L'ammontare minimo è 0.01",
|
||||||
|
@ -678,6 +681,7 @@
|
||||||
"signature_invalid_error": "La firma non è valida per il messaggio dato",
|
"signature_invalid_error": "La firma non è valida per il messaggio dato",
|
||||||
"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_payment": "Pagamento silenzioso",
|
||||||
"silent_payments": "Pagamenti silenziosi",
|
"silent_payments": "Pagamenti silenziosi",
|
||||||
"silent_payments_always_scan": "Impostare i pagamenti silenziosi che scansionano sempre",
|
"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.",
|
||||||
|
@ -710,12 +714,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Passa a un portafoglio compatibile con EVM e riprova (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Passa a un portafoglio compatibile con EVM e riprova (Ethereum, Polygon)",
|
||||||
"symbol": "Simbolo",
|
"symbol": "Simbolo",
|
||||||
"sync_all_wallets": "Sincronizza tutti i portafogli",
|
"sync_all_wallets": "Sincronizza tutti i portafogli",
|
||||||
|
"sync_status_attempting_scan": "Tentando la scansione",
|
||||||
"sync_status_attempting_sync": "TENTATIVO DI SINCRONIZZAZIONE",
|
"sync_status_attempting_sync": "TENTATIVO DI SINCRONIZZAZIONE",
|
||||||
"sync_status_connected": "CONNESSO",
|
"sync_status_connected": "CONNESSO",
|
||||||
"sync_status_connecting": "CONNESSIONE",
|
"sync_status_connecting": "CONNESSIONE",
|
||||||
"sync_status_failed_connect": "DISCONNESSO",
|
"sync_status_failed_connect": "DISCONNESSO",
|
||||||
"sync_status_not_connected": "NON CONNESSO",
|
"sync_status_not_connected": "NON CONNESSO",
|
||||||
"sync_status_starting_scan": "Scansione di partenza",
|
"sync_status_starting_scan": "Avvia scansione (da ${height})",
|
||||||
"sync_status_starting_sync": "INIZIO SINC",
|
"sync_status_starting_sync": "INIZIO SINC",
|
||||||
"sync_status_syncronized": "SINCRONIZZATO",
|
"sync_status_syncronized": "SINCRONIZZATO",
|
||||||
"sync_status_syncronizing": "SINCRONIZZAZIONE",
|
"sync_status_syncronizing": "SINCRONIZZAZIONE",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "トークンの編集",
|
"edit_token": "トークンの編集",
|
||||||
"electrum_address_disclaimer": "使用するたびに新しいアドレスが生成されますが、以前のアドレスは引き続き機能します",
|
"electrum_address_disclaimer": "使用するたびに新しいアドレスが生成されますが、以前のアドレスは引き続き機能します",
|
||||||
"email_address": "メールアドレス",
|
"email_address": "メールアドレス",
|
||||||
|
"enable_mempool_api": "正確な料金と日付のMempool API",
|
||||||
"enable_replace_by_fee": "交換ごとに有効にします",
|
"enable_replace_by_fee": "交換ごとに有効にします",
|
||||||
"enable_silent_payments_scanning": "サイレントペイメントスキャンを有効にします",
|
"enable_silent_payments_scanning": "先端に達するまで、サイレント決済のスキャンを開始します",
|
||||||
"enabled": "有効",
|
"enabled": "有効",
|
||||||
"enter_amount": "金額を入力",
|
"enter_amount": "金額を入力",
|
||||||
"enter_backup_password": "ここにバックアップパスワードを入力してください",
|
"enter_backup_password": "ここにバックアップパスワードを入力してください",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "認証失敗. ${state_error}",
|
"failed_authentication": "認証失敗. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "特徴",
|
"features": "特徴",
|
||||||
|
"fee_rate": "料金金利",
|
||||||
"fetching": "フェッチング",
|
"fetching": "フェッチング",
|
||||||
"fiat_api": "不換紙幣 API",
|
"fiat_api": "不換紙幣 API",
|
||||||
"fiat_balance": "フィアットバランス",
|
"fiat_balance": "フィアットバランス",
|
||||||
|
@ -611,6 +613,7 @@
|
||||||
"send": "送る",
|
"send": "送る",
|
||||||
"send_address": "${cryptoCurrency} 住所",
|
"send_address": "${cryptoCurrency} 住所",
|
||||||
"send_amount": "量:",
|
"send_amount": "量:",
|
||||||
|
"send_change_to_you": "あなたに変更:",
|
||||||
"send_creating_transaction": "トランザクションを作成する",
|
"send_creating_transaction": "トランザクションを作成する",
|
||||||
"send_error_currency": "通貨には数字のみを含めることができます",
|
"send_error_currency": "通貨には数字のみを含めることができます",
|
||||||
"send_error_minimum_value": "金額の最小値は0.01です",
|
"send_error_minimum_value": "金額の最小値は0.01です",
|
||||||
|
@ -677,6 +680,7 @@
|
||||||
"signature_invalid_error": "署名は、指定されたメッセージに対して無効です",
|
"signature_invalid_error": "署名は、指定されたメッセージに対して無効です",
|
||||||
"signTransaction": "トランザクションに署名する",
|
"signTransaction": "トランザクションに署名する",
|
||||||
"signup_for_card_accept_terms": "カードにサインアップして、利用規約に同意してください。",
|
"signup_for_card_accept_terms": "カードにサインアップして、利用規約に同意してください。",
|
||||||
|
"silent_payment": "サイレント支払い",
|
||||||
"silent_payments": "サイレント支払い",
|
"silent_payments": "サイレント支払い",
|
||||||
"silent_payments_always_scan": "サイレント決済を常にスキャンします",
|
"silent_payments_always_scan": "サイレント決済を常にスキャンします",
|
||||||
"silent_payments_disclaimer": "新しいアドレスは新しいアイデンティティではありません。これは、異なるラベルを持つ既存のアイデンティティの再利用です。",
|
"silent_payments_disclaimer": "新しいアドレスは新しいアイデンティティではありません。これは、異なるラベルを持つ既存のアイデンティティの再利用です。",
|
||||||
|
@ -709,12 +713,13 @@
|
||||||
"switchToEVMCompatibleWallet": "EVM 互換のウォレットに切り替えて再試行してください (イーサリアム、ポリゴン)",
|
"switchToEVMCompatibleWallet": "EVM 互換のウォレットに切り替えて再試行してください (イーサリアム、ポリゴン)",
|
||||||
"symbol": "シンボル",
|
"symbol": "シンボル",
|
||||||
"sync_all_wallets": "すべてのウォレットを同期",
|
"sync_all_wallets": "すべてのウォレットを同期",
|
||||||
|
"sync_status_attempting_scan": "スキャンの試み",
|
||||||
"sync_status_attempting_sync": "同期を試みています",
|
"sync_status_attempting_sync": "同期を試みています",
|
||||||
"sync_status_connected": "接続済み",
|
"sync_status_connected": "接続済み",
|
||||||
"sync_status_connecting": "接続中",
|
"sync_status_connecting": "接続中",
|
||||||
"sync_status_failed_connect": "切断されました",
|
"sync_status_failed_connect": "切断されました",
|
||||||
"sync_status_not_connected": "接続されていません",
|
"sync_status_not_connected": "接続されていません",
|
||||||
"sync_status_starting_scan": "スキャンを開始します",
|
"sync_status_starting_scan": "スキャンを開始する(${height} から)",
|
||||||
"sync_status_starting_sync": "同期の開始",
|
"sync_status_starting_sync": "同期の開始",
|
||||||
"sync_status_syncronized": "同期された",
|
"sync_status_syncronized": "同期された",
|
||||||
"sync_status_syncronizing": "同期",
|
"sync_status_syncronizing": "同期",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "토큰 편집",
|
"edit_token": "토큰 편집",
|
||||||
"electrum_address_disclaimer": "사용할 때마다 새 주소가 생성되지만 이전 주소는 계속 작동합니다.",
|
"electrum_address_disclaimer": "사용할 때마다 새 주소가 생성되지만 이전 주소는 계속 작동합니다.",
|
||||||
"email_address": "이메일 주소",
|
"email_address": "이메일 주소",
|
||||||
|
"enable_mempool_api": "정확한 수수료 및 날짜에 대한 Mempool API",
|
||||||
"enable_replace_by_fee": "대체별로 활성화하십시오",
|
"enable_replace_by_fee": "대체별로 활성화하십시오",
|
||||||
"enable_silent_payments_scanning": "무음 지불 스캔을 활성화합니다",
|
"enable_silent_payments_scanning": "팁에 도달 할 때까지 사일런트 지불을 스캔하기 시작합니다.",
|
||||||
"enabled": "사용",
|
"enabled": "사용",
|
||||||
"enter_amount": "금액 입력",
|
"enter_amount": "금액 입력",
|
||||||
"enter_backup_password": "여기에 백업 비밀번호를 입력하세요.",
|
"enter_backup_password": "여기에 백업 비밀번호를 입력하세요.",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "인증 실패. ${state_error}",
|
"failed_authentication": "인증 실패. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "특징",
|
"features": "특징",
|
||||||
|
"fee_rate": "수수료",
|
||||||
"fetching": "가져 오는 중",
|
"fetching": "가져 오는 중",
|
||||||
"fiat_api": "명목 화폐 API",
|
"fiat_api": "명목 화폐 API",
|
||||||
"fiat_balance": "피아트 잔액",
|
"fiat_balance": "피아트 잔액",
|
||||||
|
@ -611,6 +613,7 @@
|
||||||
"send": "보내다",
|
"send": "보내다",
|
||||||
"send_address": "${cryptoCurrency} 주소",
|
"send_address": "${cryptoCurrency} 주소",
|
||||||
"send_amount": "양:",
|
"send_amount": "양:",
|
||||||
|
"send_change_to_you": "당신에게 변경 :",
|
||||||
"send_creating_transaction": "거래 생성",
|
"send_creating_transaction": "거래 생성",
|
||||||
"send_error_currency": "통화는 숫자 만 포함 할 수 있습니다",
|
"send_error_currency": "통화는 숫자 만 포함 할 수 있습니다",
|
||||||
"send_error_minimum_value": "금액의 최소값은 0.01입니다",
|
"send_error_minimum_value": "금액의 최소값은 0.01입니다",
|
||||||
|
@ -677,6 +680,7 @@
|
||||||
"signature_invalid_error": "서명은 주어진 메시지에 유효하지 않습니다",
|
"signature_invalid_error": "서명은 주어진 메시지에 유효하지 않습니다",
|
||||||
"signTransaction": "거래 서명",
|
"signTransaction": "거래 서명",
|
||||||
"signup_for_card_accept_terms": "카드에 가입하고 약관에 동의합니다.",
|
"signup_for_card_accept_terms": "카드에 가입하고 약관에 동의합니다.",
|
||||||
|
"silent_payment": "조용한 지불",
|
||||||
"silent_payments": "조용한 지불",
|
"silent_payments": "조용한 지불",
|
||||||
"silent_payments_always_scan": "무음금을 항상 스캔합니다",
|
"silent_payments_always_scan": "무음금을 항상 스캔합니다",
|
||||||
"silent_payments_disclaimer": "새로운 주소는 새로운 정체성이 아닙니다. 다른 레이블로 기존 신원을 재사용하는 것입니다.",
|
"silent_payments_disclaimer": "새로운 주소는 새로운 정체성이 아닙니다. 다른 레이블로 기존 신원을 재사용하는 것입니다.",
|
||||||
|
@ -709,12 +713,13 @@
|
||||||
"switchToEVMCompatibleWallet": "EVM 호환 지갑으로 전환 후 다시 시도해 주세요. (이더리움, 폴리곤)",
|
"switchToEVMCompatibleWallet": "EVM 호환 지갑으로 전환 후 다시 시도해 주세요. (이더리움, 폴리곤)",
|
||||||
"symbol": "상징",
|
"symbol": "상징",
|
||||||
"sync_all_wallets": "모든 지갑 동기화",
|
"sync_all_wallets": "모든 지갑 동기화",
|
||||||
|
"sync_status_attempting_scan": "스캔 시도",
|
||||||
"sync_status_attempting_sync": "동기화 시도 중",
|
"sync_status_attempting_sync": "동기화 시도 중",
|
||||||
"sync_status_connected": "연결됨",
|
"sync_status_connected": "연결됨",
|
||||||
"sync_status_connecting": "연결 중",
|
"sync_status_connecting": "연결 중",
|
||||||
"sync_status_failed_connect": "연결 해제",
|
"sync_status_failed_connect": "연결 해제",
|
||||||
"sync_status_not_connected": "연결되지 않은",
|
"sync_status_not_connected": "연결되지 않은",
|
||||||
"sync_status_starting_scan": "스캔 시작",
|
"sync_status_starting_scan": "시작 스캔 (${height} 에서)",
|
||||||
"sync_status_starting_sync": "동기화 시작",
|
"sync_status_starting_sync": "동기화 시작",
|
||||||
"sync_status_syncronized": "동기화",
|
"sync_status_syncronized": "동기화",
|
||||||
"sync_status_syncronizing": "동기화",
|
"sync_status_syncronizing": "동기화",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "တိုကင်ကို တည်းဖြတ်ပါ။",
|
"edit_token": "တိုကင်ကို တည်းဖြတ်ပါ။",
|
||||||
"electrum_address_disclaimer": "သင်အသုံးပြုသည့်အချိန်တိုင်းတွင် ကျွန်ုပ်တို့သည် လိပ်စာအသစ်များကို ထုတ်ပေးသော်လည်း ယခင်လိပ်စာများသည် ဆက်လက်အလုပ်လုပ်နေပါသည်။",
|
"electrum_address_disclaimer": "သင်အသုံးပြုသည့်အချိန်တိုင်းတွင် ကျွန်ုပ်တို့သည် လိပ်စာအသစ်များကို ထုတ်ပေးသော်လည်း ယခင်လိပ်စာများသည် ဆက်လက်အလုပ်လုပ်နေပါသည်။",
|
||||||
"email_address": "အီးမေးလ်လိပ်စာ",
|
"email_address": "အီးမေးလ်လိပ်စာ",
|
||||||
|
"enable_mempool_api": "Mempool API တိကျသောအခကြေးငွေနှင့်ရက်စွဲများအတွက်",
|
||||||
"enable_replace_by_fee": "အစားထိုး - by- အခကြေးငွေ enable",
|
"enable_replace_by_fee": "အစားထိုး - by- အခကြေးငွေ enable",
|
||||||
"enable_silent_payments_scanning": "အသံတိတ်ငွေပေးချေမှုကို scanable လုပ်ပါ",
|
"enable_silent_payments_scanning": "အစွန်အဖျားသို့ရောက်ရှိသည်အထိအသံတိတ်ငွေပေးချေမှုကိုစကင်ဖတ်စစ်ဆေးပါ",
|
||||||
"enabled": "ဖွင့်ထားသည်။",
|
"enabled": "ဖွင့်ထားသည်။",
|
||||||
"enter_amount": "ပမာဏကို ထည့်ပါ။",
|
"enter_amount": "ပမာဏကို ထည့်ပါ။",
|
||||||
"enter_backup_password": "အရန်စကားဝှက်ကို ဤနေရာတွင် ထည့်ပါ။",
|
"enter_backup_password": "အရန်စကားဝှက်ကို ဤနေရာတွင် ထည့်ပါ။",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "အထောက်အထားစိစစ်ခြင်း မအောင်မြင်ပါ။. ${state_error}",
|
"failed_authentication": "အထောက်အထားစိစစ်ခြင်း မအောင်မြင်ပါ။. ${state_error}",
|
||||||
"faq": "အမြဲမေးလေ့ရှိသောမေးခွန်းများ",
|
"faq": "အမြဲမေးလေ့ရှိသောမေးခွန်းများ",
|
||||||
"features": "အင်္ဂါရပ်များ",
|
"features": "အင်္ဂါရပ်များ",
|
||||||
|
"fee_rate": "ကြေးနှုန်း",
|
||||||
"fetching": "ခေါ်ယူခြင်း။",
|
"fetching": "ခေါ်ယူခြင်း။",
|
||||||
"fiat_api": "Fiat API",
|
"fiat_api": "Fiat API",
|
||||||
"fiat_balance": "Fiat Balance",
|
"fiat_balance": "Fiat Balance",
|
||||||
|
@ -610,6 +612,7 @@
|
||||||
"send": "ပို့ပါ။",
|
"send": "ပို့ပါ။",
|
||||||
"send_address": "${cryptoCurrency} လိပ်စာ",
|
"send_address": "${cryptoCurrency} လိပ်စာ",
|
||||||
"send_amount": "ပမာဏ-",
|
"send_amount": "ပမာဏ-",
|
||||||
|
"send_change_to_you": "ပြောင်းလဲမှု,",
|
||||||
"send_creating_transaction": "အရောင်းအဝယ်ပြုလုပ်ခြင်း။",
|
"send_creating_transaction": "အရောင်းအဝယ်ပြုလုပ်ခြင်း။",
|
||||||
"send_error_currency": "ငွေကြေးတွင် နံပါတ်များသာ ပါဝင်နိုင်သည်။",
|
"send_error_currency": "ငွေကြေးတွင် နံပါတ်များသာ ပါဝင်နိုင်သည်။",
|
||||||
"send_error_minimum_value": "ပမာဏ၏ အနည်းဆုံးတန်ဖိုးမှာ 0.01 ဖြစ်သည်။",
|
"send_error_minimum_value": "ပမာဏ၏ အနည်းဆုံးတန်ဖိုးမှာ 0.01 ဖြစ်သည်။",
|
||||||
|
@ -676,6 +679,7 @@
|
||||||
"signature_invalid_error": "အဆိုပါလက်မှတ်ပေးထားသောမက်ဆေ့ခ်ျကိုများအတွက်မမှန်ကန်ပါ",
|
"signature_invalid_error": "အဆိုပါလက်မှတ်ပေးထားသောမက်ဆေ့ခ်ျကိုများအတွက်မမှန်ကန်ပါ",
|
||||||
"signTransaction": "ငွေလွှဲဝင်ပါ။",
|
"signTransaction": "ငွေလွှဲဝင်ပါ။",
|
||||||
"signup_for_card_accept_terms": "ကတ်အတွက် စာရင်းသွင်းပြီး စည်းကမ်းချက်များကို လက်ခံပါ။",
|
"signup_for_card_accept_terms": "ကတ်အတွက် စာရင်းသွင်းပြီး စည်းကမ်းချက်များကို လက်ခံပါ။",
|
||||||
|
"silent_payment": "အသံတိတ်ငွေပေးချေမှု",
|
||||||
"silent_payments": "အသံတိတ်ငွေပေးချေမှု",
|
"silent_payments": "အသံတိတ်ငွေပေးချေမှု",
|
||||||
"silent_payments_always_scan": "အမြဲတမ်း scanning အမြဲ scanning",
|
"silent_payments_always_scan": "အမြဲတမ်း scanning အမြဲ scanning",
|
||||||
"silent_payments_disclaimer": "လိပ်စာအသစ်များသည်အထောက်အထားအသစ်များမဟုတ်ပါ။ ၎င်းသည်ကွဲပြားခြားနားသောတံဆိပ်ဖြင့်ရှိပြီးသားဝိသေသလက်ခဏာကိုပြန်လည်အသုံးပြုခြင်းဖြစ်သည်။",
|
"silent_payments_disclaimer": "လိပ်စာအသစ်များသည်အထောက်အထားအသစ်များမဟုတ်ပါ။ ၎င်းသည်ကွဲပြားခြားနားသောတံဆိပ်ဖြင့်ရှိပြီးသားဝိသေသလက်ခဏာကိုပြန်လည်အသုံးပြုခြင်းဖြစ်သည်။",
|
||||||
|
@ -708,12 +712,13 @@
|
||||||
"switchToEVMCompatibleWallet": "ကျေးဇူးပြု၍ EVM တွဲဖက်သုံးနိုင်သော ပိုက်ဆံအိတ်သို့ ပြောင်းပြီး ထပ်စမ်းကြည့်ပါ (Ethereum၊ Polygon)",
|
"switchToEVMCompatibleWallet": "ကျေးဇူးပြု၍ EVM တွဲဖက်သုံးနိုင်သော ပိုက်ဆံအိတ်သို့ ပြောင်းပြီး ထပ်စမ်းကြည့်ပါ (Ethereum၊ Polygon)",
|
||||||
"symbol": "သင်္ကေတ",
|
"symbol": "သင်္ကေတ",
|
||||||
"sync_all_wallets": "အားလုံးပိုက်ဆံအိတ်စည်းညှိ",
|
"sync_all_wallets": "အားလုံးပိုက်ဆံအိတ်စည်းညှိ",
|
||||||
|
"sync_status_attempting_scan": "scan ကြိုးစားနေ",
|
||||||
"sync_status_attempting_sync": "ချိန်ကိုက်ခြင်းကို ကြိုးစားနေသည်။",
|
"sync_status_attempting_sync": "ချိန်ကိုက်ခြင်းကို ကြိုးစားနေသည်။",
|
||||||
"sync_status_connected": "ချိတ်ဆက်ထားသည်။",
|
"sync_status_connected": "ချိတ်ဆက်ထားသည်။",
|
||||||
"sync_status_connecting": "ချိတ်ဆက်ခြင်း။",
|
"sync_status_connecting": "ချိတ်ဆက်ခြင်း။",
|
||||||
"sync_status_failed_connect": "အဆက်အသွယ်ဖြတ်ထားသည်။",
|
"sync_status_failed_connect": "အဆက်အသွယ်ဖြတ်ထားသည်။",
|
||||||
"sync_status_not_connected": "မချိတ်ဆက်ပါ။",
|
"sync_status_not_connected": "မချိတ်ဆက်ပါ။",
|
||||||
"sync_status_starting_scan": "စကင်ဖတ်စစ်ဆေးမှု",
|
"sync_status_starting_scan": "စကင်ဖတ်စစ်ဆေးမှုစတင်ခြင်း (${height})",
|
||||||
"sync_status_starting_sync": "စင့်ခ်လုပ်ခြင်း။",
|
"sync_status_starting_sync": "စင့်ခ်လုပ်ခြင်း။",
|
||||||
"sync_status_syncronized": "ထပ်တူပြုထားသည်။",
|
"sync_status_syncronized": "ထပ်တူပြုထားသည်။",
|
||||||
"sync_status_syncronizing": "ထပ်တူပြုခြင်း။",
|
"sync_status_syncronizing": "ထပ်တူပြုခြင်း။",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "Token bewerken",
|
"edit_token": "Token bewerken",
|
||||||
"electrum_address_disclaimer": "We genereren nieuwe adressen elke keer dat u er een gebruikt, maar eerdere adressen blijven werken",
|
"electrum_address_disclaimer": "We genereren nieuwe adressen elke keer dat u er een gebruikt, maar eerdere adressen blijven werken",
|
||||||
"email_address": "E-mailadres",
|
"email_address": "E-mailadres",
|
||||||
|
"enable_mempool_api": "Mempool API voor nauwkeurige kosten en datums",
|
||||||
"enable_replace_by_fee": "Schakel vervangen door een fee",
|
"enable_replace_by_fee": "Schakel vervangen door een fee",
|
||||||
"enable_silent_payments_scanning": "Schakel stille betalingen in scannen in",
|
"enable_silent_payments_scanning": "Begin met het scannen van stille betalingen, totdat de tip is bereikt",
|
||||||
"enabled": "Ingeschakeld",
|
"enabled": "Ingeschakeld",
|
||||||
"enter_amount": "Voer Bedrag in",
|
"enter_amount": "Voer Bedrag in",
|
||||||
"enter_backup_password": "Voer hier een back-upwachtwoord in",
|
"enter_backup_password": "Voer hier een back-upwachtwoord in",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Mislukte authenticatie. ${state_error}",
|
"failed_authentication": "Mislukte authenticatie. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "Functies",
|
"features": "Functies",
|
||||||
|
"fee_rate": "Tarief",
|
||||||
"fetching": "Ophalen",
|
"fetching": "Ophalen",
|
||||||
"fiat_api": "Fiat API",
|
"fiat_api": "Fiat API",
|
||||||
"fiat_balance": "Fiat Balans",
|
"fiat_balance": "Fiat Balans",
|
||||||
|
@ -610,6 +612,7 @@
|
||||||
"send": "Sturen",
|
"send": "Sturen",
|
||||||
"send_address": "${cryptoCurrency}-adres",
|
"send_address": "${cryptoCurrency}-adres",
|
||||||
"send_amount": "Bedrag:",
|
"send_amount": "Bedrag:",
|
||||||
|
"send_change_to_you": "Verander, aan jou:",
|
||||||
"send_creating_transaction": "Transactie maken",
|
"send_creating_transaction": "Transactie maken",
|
||||||
"send_error_currency": "Valuta kan alleen cijfers bevatten",
|
"send_error_currency": "Valuta kan alleen cijfers bevatten",
|
||||||
"send_error_minimum_value": "Minimale waarde van bedrag is 0,01",
|
"send_error_minimum_value": "Minimale waarde van bedrag is 0,01",
|
||||||
|
@ -676,6 +679,7 @@
|
||||||
"signature_invalid_error": "De handtekening is niet geldig voor het gegeven bericht",
|
"signature_invalid_error": "De handtekening is niet geldig voor het gegeven bericht",
|
||||||
"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_payment": "Stille betaling",
|
||||||
"silent_payments": "Stille betalingen",
|
"silent_payments": "Stille betalingen",
|
||||||
"silent_payments_always_scan": "Stel stille betalingen in het scannen",
|
"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.",
|
||||||
|
@ -708,12 +712,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Schakel over naar een EVM-compatibele portemonnee en probeer het opnieuw (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Schakel over naar een EVM-compatibele portemonnee en probeer het opnieuw (Ethereum, Polygon)",
|
||||||
"symbol": "Symbool",
|
"symbol": "Symbool",
|
||||||
"sync_all_wallets": "Alle portemonnees synchroniseren",
|
"sync_all_wallets": "Alle portemonnees synchroniseren",
|
||||||
|
"sync_status_attempting_scan": "Proberen scan",
|
||||||
"sync_status_attempting_sync": "SYNCHRONISATIE PROBEREN",
|
"sync_status_attempting_sync": "SYNCHRONISATIE PROBEREN",
|
||||||
"sync_status_connected": "VERBONDEN",
|
"sync_status_connected": "VERBONDEN",
|
||||||
"sync_status_connecting": "AANSLUITING",
|
"sync_status_connecting": "AANSLUITING",
|
||||||
"sync_status_failed_connect": "LOSGEKOPPELD",
|
"sync_status_failed_connect": "LOSGEKOPPELD",
|
||||||
"sync_status_not_connected": "NIET VERBONDEN",
|
"sync_status_not_connected": "NIET VERBONDEN",
|
||||||
"sync_status_starting_scan": "Startscan",
|
"sync_status_starting_scan": "SCAN starten (van ${height})",
|
||||||
"sync_status_starting_sync": "BEGINNEN MET SYNCHRONISEREN",
|
"sync_status_starting_sync": "BEGINNEN MET SYNCHRONISEREN",
|
||||||
"sync_status_syncronized": "SYNCHRONIZED",
|
"sync_status_syncronized": "SYNCHRONIZED",
|
||||||
"sync_status_syncronizing": "SYNCHRONISEREN",
|
"sync_status_syncronizing": "SYNCHRONISEREN",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "Edytuj token",
|
"edit_token": "Edytuj token",
|
||||||
"electrum_address_disclaimer": "Za każdym razem, gdy wykorzystasz adres, dla wiekszej prywatności generujemy nowy, ale poprzednie adresy nadal działają, i moga odbierać środki",
|
"electrum_address_disclaimer": "Za każdym razem, gdy wykorzystasz adres, dla wiekszej prywatności generujemy nowy, ale poprzednie adresy nadal działają, i moga odbierać środki",
|
||||||
"email_address": "Adres e-mail",
|
"email_address": "Adres e-mail",
|
||||||
|
"enable_mempool_api": "Mempool API dla dokładnych opłat i dat",
|
||||||
"enable_replace_by_fee": "Włącz wymianę po lewej",
|
"enable_replace_by_fee": "Włącz wymianę po lewej",
|
||||||
"enable_silent_payments_scanning": "Włącz skanowanie cichych płatności",
|
"enable_silent_payments_scanning": "Zacznij skanować ciche płatności, aż do osiągnięcia wskazówki",
|
||||||
"enabled": "Włączone",
|
"enabled": "Włączone",
|
||||||
"enter_amount": "Wprowadź kwotę",
|
"enter_amount": "Wprowadź kwotę",
|
||||||
"enter_backup_password": "Wprowadź tutaj hasło kopii zapasowej",
|
"enter_backup_password": "Wprowadź tutaj hasło kopii zapasowej",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Nieudane uwierzytelnienie. ${state_error}",
|
"failed_authentication": "Nieudane uwierzytelnienie. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "Cechy",
|
"features": "Cechy",
|
||||||
|
"fee_rate": "Stawka opłaty",
|
||||||
"fetching": "Pobieranie",
|
"fetching": "Pobieranie",
|
||||||
"fiat_api": "API Walut FIAT",
|
"fiat_api": "API Walut FIAT",
|
||||||
"fiat_balance": "Bilans Fiata",
|
"fiat_balance": "Bilans Fiata",
|
||||||
|
@ -610,6 +612,7 @@
|
||||||
"send": "Wyślij",
|
"send": "Wyślij",
|
||||||
"send_address": "Adres ${cryptoCurrency}",
|
"send_address": "Adres ${cryptoCurrency}",
|
||||||
"send_amount": "Ilość:",
|
"send_amount": "Ilość:",
|
||||||
|
"send_change_to_you": "Zmień do ciebie:",
|
||||||
"send_creating_transaction": "Tworzenie transakcji",
|
"send_creating_transaction": "Tworzenie transakcji",
|
||||||
"send_error_currency": "Waluta może zawierać tylko cyfry",
|
"send_error_currency": "Waluta może zawierać tylko cyfry",
|
||||||
"send_error_minimum_value": "Minimalna wartość to 0,01",
|
"send_error_minimum_value": "Minimalna wartość to 0,01",
|
||||||
|
@ -676,6 +679,7 @@
|
||||||
"signature_invalid_error": "Podpis nie jest ważny dla podanej wiadomości",
|
"signature_invalid_error": "Podpis nie jest ważny dla podanej wiadomości",
|
||||||
"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_payment": "Cicha płatność",
|
||||||
"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_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ą.",
|
||||||
|
@ -708,12 +712,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Przejdź na portfel zgodny z EVM i spróbuj ponownie (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Przejdź na portfel zgodny z EVM i spróbuj ponownie (Ethereum, Polygon)",
|
||||||
"symbol": "Symbol",
|
"symbol": "Symbol",
|
||||||
"sync_all_wallets": "Synchronizuj wszystkie portfele",
|
"sync_all_wallets": "Synchronizuj wszystkie portfele",
|
||||||
|
"sync_status_attempting_scan": "Próba skanowania",
|
||||||
"sync_status_attempting_sync": "PRÓBA SYNCHRONIZACJI",
|
"sync_status_attempting_sync": "PRÓBA SYNCHRONIZACJI",
|
||||||
"sync_status_connected": "POŁĄCZONY",
|
"sync_status_connected": "POŁĄCZONY",
|
||||||
"sync_status_connecting": "ŁĄCZENIE",
|
"sync_status_connecting": "ŁĄCZENIE",
|
||||||
"sync_status_failed_connect": "POŁĄCZENIE NIEUDANE",
|
"sync_status_failed_connect": "POŁĄCZENIE NIEUDANE",
|
||||||
"sync_status_not_connected": "NIE POŁĄCZONY",
|
"sync_status_not_connected": "NIE POŁĄCZONY",
|
||||||
"sync_status_starting_scan": "Rozpoczęcie skanowania",
|
"sync_status_starting_scan": "Rozpoczęcie skanowania (od ${height})",
|
||||||
"sync_status_starting_sync": "ROZPOCZĘCIE SYNCHRONIZACJI",
|
"sync_status_starting_sync": "ROZPOCZĘCIE SYNCHRONIZACJI",
|
||||||
"sync_status_syncronized": "ZSYNCHRONIZOWANO",
|
"sync_status_syncronized": "ZSYNCHRONIZOWANO",
|
||||||
"sync_status_syncronizing": "SYNCHRONIZACJA",
|
"sync_status_syncronizing": "SYNCHRONIZACJA",
|
||||||
|
|
|
@ -143,7 +143,7 @@
|
||||||
"confirm_fee_deduction": "Confirme dedução da taxa",
|
"confirm_fee_deduction": "Confirme dedução da taxa",
|
||||||
"confirm_fee_deduction_content": "Você concorda em deduzir a taxa da saída?",
|
"confirm_fee_deduction_content": "Você concorda em deduzir a taxa da saída?",
|
||||||
"confirm_sending": "Confirmar o envio",
|
"confirm_sending": "Confirmar o envio",
|
||||||
"confirm_silent_payments_switch_node": "Seu nó atual não suporta pagamentos silenciosos \\ Ncake Wallet mudará para um nó compatível, apenas para digitalização",
|
"confirm_silent_payments_switch_node": "Seu nó atual não suporta pagamentos silenciosos \n A Cake Wallet mudará para um nó compatível, apenas para escanear",
|
||||||
"confirmations": "Confirmações",
|
"confirmations": "Confirmações",
|
||||||
"confirmed": "Saldo Confirmado",
|
"confirmed": "Saldo Confirmado",
|
||||||
"confirmed_tx": "Confirmado",
|
"confirmed_tx": "Confirmado",
|
||||||
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "Editar símbolo",
|
"edit_token": "Editar símbolo",
|
||||||
"electrum_address_disclaimer": "Geramos novos endereços cada vez que você usa um, mas os endereços anteriores continuam funcionando",
|
"electrum_address_disclaimer": "Geramos novos endereços cada vez que você usa um, mas os endereços anteriores continuam funcionando",
|
||||||
"email_address": "Endereço de e-mail",
|
"email_address": "Endereço de e-mail",
|
||||||
|
"enable_mempool_api": "Mempool API para taxas e datas precisas",
|
||||||
"enable_replace_by_fee": "Habilite substituir por taxa",
|
"enable_replace_by_fee": "Habilite substituir por taxa",
|
||||||
"enable_silent_payments_scanning": "Ativar escaneamento de pagamentos silenciosos",
|
"enable_silent_payments_scanning": "Comece a escanear pagamentos silenciosos, até que o topo seja alcançada",
|
||||||
"enabled": "Habilitado",
|
"enabled": "Habilitado",
|
||||||
"enter_amount": "Digite o valor",
|
"enter_amount": "Digite o valor",
|
||||||
"enter_backup_password": "Digite a senha de backup aqui",
|
"enter_backup_password": "Digite a senha de backup aqui",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Falha na autenticação. ${state_error}",
|
"failed_authentication": "Falha na autenticação. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "Funcionalidades",
|
"features": "Funcionalidades",
|
||||||
|
"fee_rate": "Taxa de transação",
|
||||||
"fetching": "Buscando",
|
"fetching": "Buscando",
|
||||||
"fiat_api": "API da Fiat",
|
"fiat_api": "API da Fiat",
|
||||||
"fiat_balance": "Equilíbrio Fiat",
|
"fiat_balance": "Equilíbrio Fiat",
|
||||||
|
@ -612,6 +614,7 @@
|
||||||
"send": "Enviar",
|
"send": "Enviar",
|
||||||
"send_address": "Endereço ${cryptoCurrency}",
|
"send_address": "Endereço ${cryptoCurrency}",
|
||||||
"send_amount": "Montante:",
|
"send_amount": "Montante:",
|
||||||
|
"send_change_to_you": "Troco, para você:",
|
||||||
"send_creating_transaction": "Criando transação",
|
"send_creating_transaction": "Criando transação",
|
||||||
"send_error_currency": "A moeda só pode conter números",
|
"send_error_currency": "A moeda só pode conter números",
|
||||||
"send_error_minimum_value": "O valor mínimo da quantia é 0,01",
|
"send_error_minimum_value": "O valor mínimo da quantia é 0,01",
|
||||||
|
@ -678,8 +681,9 @@
|
||||||
"signature_invalid_error": "A assinatura não é válida para a mensagem dada",
|
"signature_invalid_error": "A assinatura não é válida para a mensagem dada",
|
||||||
"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_payment": "Pagamento silencioso",
|
||||||
"silent_payments": "Pagamentos silenciosos",
|
"silent_payments": "Pagamentos silenciosos",
|
||||||
"silent_payments_always_scan": "Defina pagamentos silenciosos sempre digitalizando",
|
"silent_payments_always_scan": "Defina pagamentos silenciosos sempre escaneando",
|
||||||
"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_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",
|
||||||
|
@ -710,12 +714,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Mude para uma carteira compatível com EVM e tente novamente (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Mude para uma carteira compatível com EVM e tente novamente (Ethereum, Polygon)",
|
||||||
"symbol": "Símbolo",
|
"symbol": "Símbolo",
|
||||||
"sync_all_wallets": "Sincronize todas as carteiras",
|
"sync_all_wallets": "Sincronize todas as carteiras",
|
||||||
|
"sync_status_attempting_scan": "TENTANDO ESCANEAR",
|
||||||
"sync_status_attempting_sync": "TENTANDO SINCRONIZAR",
|
"sync_status_attempting_sync": "TENTANDO SINCRONIZAR",
|
||||||
"sync_status_connected": "CONECTADO",
|
"sync_status_connected": "CONECTADO",
|
||||||
"sync_status_connecting": "CONECTANDO",
|
"sync_status_connecting": "CONECTANDO",
|
||||||
"sync_status_failed_connect": "DESCONECTADO",
|
"sync_status_failed_connect": "DESCONECTADO",
|
||||||
"sync_status_not_connected": "DESCONECTADO",
|
"sync_status_not_connected": "DESCONECTADO",
|
||||||
"sync_status_starting_scan": "Diretor inicial",
|
"sync_status_starting_scan": "Começando scan (de ${height})",
|
||||||
"sync_status_starting_sync": "INICIANDO SINCRONIZAÇÃO",
|
"sync_status_starting_sync": "INICIANDO SINCRONIZAÇÃO",
|
||||||
"sync_status_syncronized": "SINCRONIZADO",
|
"sync_status_syncronized": "SINCRONIZADO",
|
||||||
"sync_status_syncronizing": "SINCRONIZANDO",
|
"sync_status_syncronizing": "SINCRONIZANDO",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "Изменить токен",
|
"edit_token": "Изменить токен",
|
||||||
"electrum_address_disclaimer": "Мы генерируем новые адреса каждый раз, когда вы их используете, но предыдущие адреса продолжают работать.",
|
"electrum_address_disclaimer": "Мы генерируем новые адреса каждый раз, когда вы их используете, но предыдущие адреса продолжают работать.",
|
||||||
"email_address": "Адрес электронной почты",
|
"email_address": "Адрес электронной почты",
|
||||||
|
"enable_mempool_api": "Mempool API за точные сборы и даты",
|
||||||
"enable_replace_by_fee": "Включить замену за пикой",
|
"enable_replace_by_fee": "Включить замену за пикой",
|
||||||
"enable_silent_payments_scanning": "Включить сканирование безмолвных платежей",
|
"enable_silent_payments_scanning": "Начните сканировать безмолвные платежи, пока не будет достигнут наконечник",
|
||||||
"enabled": "Включено",
|
"enabled": "Включено",
|
||||||
"enter_amount": "Введите сумму",
|
"enter_amount": "Введите сумму",
|
||||||
"enter_backup_password": "Введите пароль резервной копии",
|
"enter_backup_password": "Введите пароль резервной копии",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Ошибка аутентификации. ${state_error}",
|
"failed_authentication": "Ошибка аутентификации. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "Функции",
|
"features": "Функции",
|
||||||
|
"fee_rate": "Плата",
|
||||||
"fetching": "Загрузка",
|
"fetching": "Загрузка",
|
||||||
"fiat_api": "Фиат API",
|
"fiat_api": "Фиат API",
|
||||||
"fiat_balance": "Фиатный баланс",
|
"fiat_balance": "Фиатный баланс",
|
||||||
|
@ -611,6 +613,7 @@
|
||||||
"send": "Отправить",
|
"send": "Отправить",
|
||||||
"send_address": "${cryptoCurrency} адрес",
|
"send_address": "${cryptoCurrency} адрес",
|
||||||
"send_amount": "Сумма:",
|
"send_amount": "Сумма:",
|
||||||
|
"send_change_to_you": "Изменить, для вас:",
|
||||||
"send_creating_transaction": "Создать транзакцию",
|
"send_creating_transaction": "Создать транзакцию",
|
||||||
"send_error_currency": "Валюта может содержать только цифры",
|
"send_error_currency": "Валюта может содержать только цифры",
|
||||||
"send_error_minimum_value": "Mинимальная сумма 0.01",
|
"send_error_minimum_value": "Mинимальная сумма 0.01",
|
||||||
|
@ -677,6 +680,7 @@
|
||||||
"signature_invalid_error": "Подпись недопустима для данного сообщения",
|
"signature_invalid_error": "Подпись недопустима для данного сообщения",
|
||||||
"signTransaction": "Подписать транзакцию",
|
"signTransaction": "Подписать транзакцию",
|
||||||
"signup_for_card_accept_terms": "Подпишитесь на карту и примите условия.",
|
"signup_for_card_accept_terms": "Подпишитесь на карту и примите условия.",
|
||||||
|
"silent_payment": "Молчаливый платеж",
|
||||||
"silent_payments": "Молчаливые платежи",
|
"silent_payments": "Молчаливые платежи",
|
||||||
"silent_payments_always_scan": "Установить молчаливые платежи всегда сканирование",
|
"silent_payments_always_scan": "Установить молчаливые платежи всегда сканирование",
|
||||||
"silent_payments_disclaimer": "Новые адреса не являются новыми личностями. Это повторное использование существующей идентичности с другой этикеткой.",
|
"silent_payments_disclaimer": "Новые адреса не являются новыми личностями. Это повторное использование существующей идентичности с другой этикеткой.",
|
||||||
|
@ -709,12 +713,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Пожалуйста, переключитесь на кошелек, совместимый с EVM, и повторите попытку (Ethereum, Polygon).",
|
"switchToEVMCompatibleWallet": "Пожалуйста, переключитесь на кошелек, совместимый с EVM, и повторите попытку (Ethereum, Polygon).",
|
||||||
"symbol": "Символ",
|
"symbol": "Символ",
|
||||||
"sync_all_wallets": "Синхронизировать все кошельки",
|
"sync_all_wallets": "Синхронизировать все кошельки",
|
||||||
|
"sync_status_attempting_scan": "Попытка сканирования",
|
||||||
"sync_status_attempting_sync": "ПОПЫТКА СИНХРОНИЗАЦИИ",
|
"sync_status_attempting_sync": "ПОПЫТКА СИНХРОНИЗАЦИИ",
|
||||||
"sync_status_connected": "ПОДКЛЮЧЕНО",
|
"sync_status_connected": "ПОДКЛЮЧЕНО",
|
||||||
"sync_status_connecting": "ПОДКЛЮЧЕНИЕ",
|
"sync_status_connecting": "ПОДКЛЮЧЕНИЕ",
|
||||||
"sync_status_failed_connect": "ОТКЛЮЧЕНО",
|
"sync_status_failed_connect": "ОТКЛЮЧЕНО",
|
||||||
"sync_status_not_connected": "НЕ ПОДКЛЮЧЁН",
|
"sync_status_not_connected": "НЕ ПОДКЛЮЧЁН",
|
||||||
"sync_status_starting_scan": "Начальное сканирование",
|
"sync_status_starting_scan": "Начальное сканирование (от ${height})",
|
||||||
"sync_status_starting_sync": "НАЧАЛО СИНХРОНИЗАЦИИ",
|
"sync_status_starting_sync": "НАЧАЛО СИНХРОНИЗАЦИИ",
|
||||||
"sync_status_syncronized": "СИНХРОНИЗИРОВАН",
|
"sync_status_syncronized": "СИНХРОНИЗИРОВАН",
|
||||||
"sync_status_syncronizing": "СИНХРОНИЗАЦИЯ",
|
"sync_status_syncronizing": "СИНХРОНИЗАЦИЯ",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "แก้ไขโทเค็น",
|
"edit_token": "แก้ไขโทเค็น",
|
||||||
"electrum_address_disclaimer": "เราสร้างที่อยู่ใหม่ทุกครั้งที่คุณใช้หนึ่งอย่าง แต่ที่อยู่เก่ายังสามารถใช้ได้ต่อไป",
|
"electrum_address_disclaimer": "เราสร้างที่อยู่ใหม่ทุกครั้งที่คุณใช้หนึ่งอย่าง แต่ที่อยู่เก่ายังสามารถใช้ได้ต่อไป",
|
||||||
"email_address": "ที่อยู่อีเมล",
|
"email_address": "ที่อยู่อีเมล",
|
||||||
|
"enable_mempool_api": "Mempool API สำหรับค่าธรรมเนียมและวันที่ที่ถูกต้อง",
|
||||||
"enable_replace_by_fee": "เปิดใช้งานการเปลี่ยนโดยค่าธรรมเนียม",
|
"enable_replace_by_fee": "เปิดใช้งานการเปลี่ยนโดยค่าธรรมเนียม",
|
||||||
"enable_silent_payments_scanning": "เปิดใช้งานการสแกนการชำระเงินแบบเงียบ",
|
"enable_silent_payments_scanning": "เริ่มสแกนการชำระเงินแบบเงียบจนกว่าจะถึงปลาย",
|
||||||
"enabled": "เปิดใช้งาน",
|
"enabled": "เปิดใช้งาน",
|
||||||
"enter_amount": "กรอกจำนวน",
|
"enter_amount": "กรอกจำนวน",
|
||||||
"enter_backup_password": "ป้อนรหัสผ่านสำรองที่นี่",
|
"enter_backup_password": "ป้อนรหัสผ่านสำรองที่นี่",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "การยืนยันสิทธิ์ล้มเหลว ${state_error}",
|
"failed_authentication": "การยืนยันสิทธิ์ล้มเหลว ${state_error}",
|
||||||
"faq": "คำถามที่พบบ่อย",
|
"faq": "คำถามที่พบบ่อย",
|
||||||
"features": "คุณสมบัติ",
|
"features": "คุณสมบัติ",
|
||||||
|
"fee_rate": "อัตราค่าธรรมเนียม",
|
||||||
"fetching": "กำลังโหลด",
|
"fetching": "กำลังโหลด",
|
||||||
"fiat_api": "API สกุลเงินตรา",
|
"fiat_api": "API สกุลเงินตรา",
|
||||||
"fiat_balance": "เฟียต บาลานซ์",
|
"fiat_balance": "เฟียต บาลานซ์",
|
||||||
|
@ -610,6 +612,7 @@
|
||||||
"send": "ส่ง",
|
"send": "ส่ง",
|
||||||
"send_address": "ที่อยู่ ${cryptoCurrency}",
|
"send_address": "ที่อยู่ ${cryptoCurrency}",
|
||||||
"send_amount": "จำนวน:",
|
"send_amount": "จำนวน:",
|
||||||
|
"send_change_to_you": "เปลี่ยนเป็นคุณ:",
|
||||||
"send_creating_transaction": "กำลังสร้างธุรกรรม",
|
"send_creating_transaction": "กำลังสร้างธุรกรรม",
|
||||||
"send_error_currency": "สกุลเงินสามารถเป็นเลขเท่านั้น",
|
"send_error_currency": "สกุลเงินสามารถเป็นเลขเท่านั้น",
|
||||||
"send_error_minimum_value": "จำนวนขั้นต่ำของจำนวนเงินคือ 0.01",
|
"send_error_minimum_value": "จำนวนขั้นต่ำของจำนวนเงินคือ 0.01",
|
||||||
|
@ -676,6 +679,7 @@
|
||||||
"signature_invalid_error": "ลายเซ็นไม่ถูกต้องสำหรับข้อความที่ให้ไว้",
|
"signature_invalid_error": "ลายเซ็นไม่ถูกต้องสำหรับข้อความที่ให้ไว้",
|
||||||
"signTransaction": "ลงนามในการทำธุรกรรม",
|
"signTransaction": "ลงนามในการทำธุรกรรม",
|
||||||
"signup_for_card_accept_terms": "ลงทะเบียนสำหรับบัตรและยอมรับเงื่อนไข",
|
"signup_for_card_accept_terms": "ลงทะเบียนสำหรับบัตรและยอมรับเงื่อนไข",
|
||||||
|
"silent_payment": "การชำระเงินแบบเงียบ",
|
||||||
"silent_payments": "การชำระเงินเงียบ",
|
"silent_payments": "การชำระเงินเงียบ",
|
||||||
"silent_payments_always_scan": "ตั้งค่าการชำระเงินแบบเงียบเสมอ",
|
"silent_payments_always_scan": "ตั้งค่าการชำระเงินแบบเงียบเสมอ",
|
||||||
"silent_payments_disclaimer": "ที่อยู่ใหม่ไม่ใช่ตัวตนใหม่ มันเป็นการใช้ซ้ำของตัวตนที่มีอยู่ด้วยฉลากที่แตกต่างกัน",
|
"silent_payments_disclaimer": "ที่อยู่ใหม่ไม่ใช่ตัวตนใหม่ มันเป็นการใช้ซ้ำของตัวตนที่มีอยู่ด้วยฉลากที่แตกต่างกัน",
|
||||||
|
@ -708,12 +712,13 @@
|
||||||
"switchToEVMCompatibleWallet": "โปรดเปลี่ยนไปใช้กระเป๋าเงินที่รองรับ EVM แล้วลองอีกครั้ง (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "โปรดเปลี่ยนไปใช้กระเป๋าเงินที่รองรับ EVM แล้วลองอีกครั้ง (Ethereum, Polygon)",
|
||||||
"symbol": "เครื่องหมาย",
|
"symbol": "เครื่องหมาย",
|
||||||
"sync_all_wallets": "ซิงค์กระเป๋าเงินทั้งหมด",
|
"sync_all_wallets": "ซิงค์กระเป๋าเงินทั้งหมด",
|
||||||
|
"sync_status_attempting_scan": "พยายามสแกน",
|
||||||
"sync_status_attempting_sync": "พยายามซิงโครไนซ์",
|
"sync_status_attempting_sync": "พยายามซิงโครไนซ์",
|
||||||
"sync_status_connected": "เชื่อมต่อแล้ว",
|
"sync_status_connected": "เชื่อมต่อแล้ว",
|
||||||
"sync_status_connecting": "กำลังเชื่อมต่อ",
|
"sync_status_connecting": "กำลังเชื่อมต่อ",
|
||||||
"sync_status_failed_connect": "การเชื่อมต่อล้มเหลว",
|
"sync_status_failed_connect": "การเชื่อมต่อล้มเหลว",
|
||||||
"sync_status_not_connected": "ไม่ได้เชื่อมต่อ",
|
"sync_status_not_connected": "ไม่ได้เชื่อมต่อ",
|
||||||
"sync_status_starting_scan": "เริ่มการสแกน",
|
"sync_status_starting_scan": "การสแกนเริ่มต้น (จาก ${height})",
|
||||||
"sync_status_starting_sync": "กำลังเริ่มซิงโครไนซ์",
|
"sync_status_starting_sync": "กำลังเริ่มซิงโครไนซ์",
|
||||||
"sync_status_syncronized": "ซิงโครไนซ์แล้ว",
|
"sync_status_syncronized": "ซิงโครไนซ์แล้ว",
|
||||||
"sync_status_syncronizing": "กำลังซิงโครไนซ์",
|
"sync_status_syncronizing": "กำลังซิงโครไนซ์",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "I-edit ang token",
|
"edit_token": "I-edit ang token",
|
||||||
"electrum_address_disclaimer": "Bumubuo kami ng mga bagong address sa tuwing gagamit ka ng isa, ngunit ang mga nakaraang address ay patuloy na gumagana",
|
"electrum_address_disclaimer": "Bumubuo kami ng mga bagong address sa tuwing gagamit ka ng isa, ngunit ang mga nakaraang address ay patuloy na gumagana",
|
||||||
"email_address": "Email Address",
|
"email_address": "Email Address",
|
||||||
|
"enable_mempool_api": "Mempool API para sa tumpak na bayad at mga petsa",
|
||||||
"enable_replace_by_fee": "Paganahin ang Replace-By-Fee",
|
"enable_replace_by_fee": "Paganahin ang Replace-By-Fee",
|
||||||
"enable_silent_payments_scanning": "Paganahin ang pag-scan ng mga tahimik na pagbabayad",
|
"enable_silent_payments_scanning": "Simulan ang pag -scan ng tahimik na pagbabayad, hanggang sa maabot ang tip",
|
||||||
"enabled": "Pinagana",
|
"enabled": "Pinagana",
|
||||||
"enter_amount": "Ipasok ang halaga",
|
"enter_amount": "Ipasok ang halaga",
|
||||||
"enter_backup_password": "Ipasok ang backup na password dito",
|
"enter_backup_password": "Ipasok ang backup na password dito",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Nabigo ang pagpapatunay. ${state_error}",
|
"failed_authentication": "Nabigo ang pagpapatunay. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "Mga tampok",
|
"features": "Mga tampok",
|
||||||
|
"fee_rate": "Rate ng bayad",
|
||||||
"fetching": "Pagkuha",
|
"fetching": "Pagkuha",
|
||||||
"fiat_api": "Fiat API",
|
"fiat_api": "Fiat API",
|
||||||
"fiat_balance": "Balanse ng fiat",
|
"fiat_balance": "Balanse ng fiat",
|
||||||
|
@ -610,6 +612,7 @@
|
||||||
"send": "Ipadala",
|
"send": "Ipadala",
|
||||||
"send_address": "${cryptoCurrency} address",
|
"send_address": "${cryptoCurrency} address",
|
||||||
"send_amount": "Halaga:",
|
"send_amount": "Halaga:",
|
||||||
|
"send_change_to_you": "Baguhin, sa iyo:",
|
||||||
"send_creating_transaction": "Paglikha ng transaksyon",
|
"send_creating_transaction": "Paglikha ng transaksyon",
|
||||||
"send_error_currency": "Ang halaga ay maaari lamang maglaman ng mga numero",
|
"send_error_currency": "Ang halaga ay maaari lamang maglaman ng mga numero",
|
||||||
"send_error_minimum_value": "Ang minimum na halaga ay 0.01",
|
"send_error_minimum_value": "Ang minimum na halaga ay 0.01",
|
||||||
|
@ -676,6 +679,7 @@
|
||||||
"signature_invalid_error": "Ang lagda ay hindi wasto para sa ibinigay na mensahe",
|
"signature_invalid_error": "Ang lagda ay hindi wasto para sa ibinigay na mensahe",
|
||||||
"signTransaction": "Mag-sign ang Transaksyon",
|
"signTransaction": "Mag-sign ang Transaksyon",
|
||||||
"signup_for_card_accept_terms": "Mag-sign up para sa card at tanggapin ang mga tuntunin.",
|
"signup_for_card_accept_terms": "Mag-sign up para sa card at tanggapin ang mga tuntunin.",
|
||||||
|
"silent_payment": "Tahimik na pagbabayad",
|
||||||
"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_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.",
|
||||||
|
@ -708,12 +712,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Mangyaring lumipat sa isang EVM compatible na wallet at subukang muli (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Mangyaring lumipat sa isang EVM compatible na wallet at subukang muli (Ethereum, Polygon)",
|
||||||
"symbol": "Simbolo",
|
"symbol": "Simbolo",
|
||||||
"sync_all_wallets": "I-sync ang lahat ng mga wallet",
|
"sync_all_wallets": "I-sync ang lahat ng mga wallet",
|
||||||
|
"sync_status_attempting_scan": "Pagtatangka ng pag -scan",
|
||||||
"sync_status_attempting_sync": "SINUSUBUKANG I-SYNC",
|
"sync_status_attempting_sync": "SINUSUBUKANG I-SYNC",
|
||||||
"sync_status_connected": "KONEKTADO",
|
"sync_status_connected": "KONEKTADO",
|
||||||
"sync_status_connecting": "KUMOKENEKTA",
|
"sync_status_connecting": "KUMOKENEKTA",
|
||||||
"sync_status_failed_connect": "NADISKONEKTA",
|
"sync_status_failed_connect": "NADISKONEKTA",
|
||||||
"sync_status_not_connected": "HINDI KONEKTADO",
|
"sync_status_not_connected": "HINDI KONEKTADO",
|
||||||
"sync_status_starting_scan": "SIMULA SA PAG-SCAN",
|
"sync_status_starting_scan": "Simula sa pag -scan (mula sa ${height})",
|
||||||
"sync_status_starting_sync": "SIMULA SA PAG-SYNC",
|
"sync_status_starting_sync": "SIMULA SA PAG-SYNC",
|
||||||
"sync_status_syncronized": "NAKA-SYNCHRONIZE",
|
"sync_status_syncronized": "NAKA-SYNCHRONIZE",
|
||||||
"sync_status_syncronizing": "PAG-SYNCHRONIZE",
|
"sync_status_syncronizing": "PAG-SYNCHRONIZE",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "Belirteci düzenle",
|
"edit_token": "Belirteci düzenle",
|
||||||
"electrum_address_disclaimer": "Adresini her kullandığında yeni adres oluşturuyoruz, ancak önceki adresler de çalışmaya devam eder",
|
"electrum_address_disclaimer": "Adresini her kullandığında yeni adres oluşturuyoruz, ancak önceki adresler de çalışmaya devam eder",
|
||||||
"email_address": "E-posta Adresi",
|
"email_address": "E-posta Adresi",
|
||||||
|
"enable_mempool_api": "Doğru ücretler ve tarihler için Mempool API'si",
|
||||||
"enable_replace_by_fee": "Farklı Değiştir'i Etkinleştir",
|
"enable_replace_by_fee": "Farklı Değiştir'i Etkinleştir",
|
||||||
"enable_silent_payments_scanning": "Sessiz ödeme taramasını etkinleştirin",
|
"enable_silent_payments_scanning": "Bahşiş ulaşılıncaya kadar sessiz ödemeleri taramaya başlayın",
|
||||||
"enabled": "Etkin",
|
"enabled": "Etkin",
|
||||||
"enter_amount": "Miktar Girin",
|
"enter_amount": "Miktar Girin",
|
||||||
"enter_backup_password": "Yedekleme parolasını buraya gir",
|
"enter_backup_password": "Yedekleme parolasını buraya gir",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Doğrulama başarısız oldu. ${state_error}",
|
"failed_authentication": "Doğrulama başarısız oldu. ${state_error}",
|
||||||
"faq": "SSS",
|
"faq": "SSS",
|
||||||
"features": "Özellikler",
|
"features": "Özellikler",
|
||||||
|
"fee_rate": "Ücret oranı",
|
||||||
"fetching": "Getiriliyor",
|
"fetching": "Getiriliyor",
|
||||||
"fiat_api": "İtibari Para API",
|
"fiat_api": "İtibari Para API",
|
||||||
"fiat_balance": "Fiat Bakiyesi",
|
"fiat_balance": "Fiat Bakiyesi",
|
||||||
|
@ -610,6 +612,7 @@
|
||||||
"send": "Para Gönder",
|
"send": "Para Gönder",
|
||||||
"send_address": "${cryptoCurrency} adresi",
|
"send_address": "${cryptoCurrency} adresi",
|
||||||
"send_amount": "Miktar:",
|
"send_amount": "Miktar:",
|
||||||
|
"send_change_to_you": "Değiştir, size:",
|
||||||
"send_creating_transaction": "İşlem oluşturuluyor",
|
"send_creating_transaction": "İşlem oluşturuluyor",
|
||||||
"send_error_currency": "Para birimi sadece sayı içerebilir",
|
"send_error_currency": "Para birimi sadece sayı içerebilir",
|
||||||
"send_error_minimum_value": "Minimum tutar değeri 0.01'dir",
|
"send_error_minimum_value": "Minimum tutar değeri 0.01'dir",
|
||||||
|
@ -676,6 +679,7 @@
|
||||||
"signature_invalid_error": "İmza verilen mesaj için geçerli değil",
|
"signature_invalid_error": "İmza verilen mesaj için geçerli değil",
|
||||||
"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_payment": "Sessiz Ödeme",
|
||||||
"silent_payments": "Sessiz ödemeler",
|
"silent_payments": "Sessiz ödemeler",
|
||||||
"silent_payments_always_scan": "Sessiz ödemeleri her zaman tarama ayarlayın",
|
"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.",
|
||||||
|
@ -708,12 +712,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Lütfen EVM uyumlu bir cüzdana geçin ve tekrar deneyin (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Lütfen EVM uyumlu bir cüzdana geçin ve tekrar deneyin (Ethereum, Polygon)",
|
||||||
"symbol": "Sembol",
|
"symbol": "Sembol",
|
||||||
"sync_all_wallets": "Tüm cüzdanları senkronize edin",
|
"sync_all_wallets": "Tüm cüzdanları senkronize edin",
|
||||||
|
"sync_status_attempting_scan": "Tarama deneme",
|
||||||
"sync_status_attempting_sync": "SENKRONİZE EDİLMEYE ÇALIŞILIYOR",
|
"sync_status_attempting_sync": "SENKRONİZE EDİLMEYE ÇALIŞILIYOR",
|
||||||
"sync_status_connected": "BAĞLANILDI",
|
"sync_status_connected": "BAĞLANILDI",
|
||||||
"sync_status_connecting": "BAĞLANILIYOR",
|
"sync_status_connecting": "BAĞLANILIYOR",
|
||||||
"sync_status_failed_connect": "BAĞLANTI KESİLDİ",
|
"sync_status_failed_connect": "BAĞLANTI KESİLDİ",
|
||||||
"sync_status_not_connected": "BAĞLI DEĞİL",
|
"sync_status_not_connected": "BAĞLI DEĞİL",
|
||||||
"sync_status_starting_scan": "Başlangıç taraması",
|
"sync_status_starting_scan": "Başlangıç taraması (${height})",
|
||||||
"sync_status_starting_sync": "SENKRONİZE BAŞLATILIYOR",
|
"sync_status_starting_sync": "SENKRONİZE BAŞLATILIYOR",
|
||||||
"sync_status_syncronized": "SENKRONİZE EDİLDİ",
|
"sync_status_syncronized": "SENKRONİZE EDİLDİ",
|
||||||
"sync_status_syncronizing": "SENKRONİZE EDİLİYOR",
|
"sync_status_syncronizing": "SENKRONİZE EDİLİYOR",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "Редагувати маркер",
|
"edit_token": "Редагувати маркер",
|
||||||
"electrum_address_disclaimer": "Ми створюємо нові адреси щоразу, коли ви використовуєте їх, але попередні адреси продовжують працювати",
|
"electrum_address_disclaimer": "Ми створюємо нові адреси щоразу, коли ви використовуєте їх, але попередні адреси продовжують працювати",
|
||||||
"email_address": "Адреса електронної пошти",
|
"email_address": "Адреса електронної пошти",
|
||||||
|
"enable_mempool_api": "API Mempool для точних зборів та дат",
|
||||||
"enable_replace_by_fee": "Увімкнути заміну з комісією",
|
"enable_replace_by_fee": "Увімкнути заміну з комісією",
|
||||||
"enable_silent_payments_scanning": "Увімкнути мовчазні платежі сканування",
|
"enable_silent_payments_scanning": "Почніть сканувати мовчазні платежі, поки не буде досягнуто наконечника",
|
||||||
"enabled": "Увімкнено",
|
"enabled": "Увімкнено",
|
||||||
"enter_amount": "Введіть суму",
|
"enter_amount": "Введіть суму",
|
||||||
"enter_backup_password": "Введіть пароль резервної копії",
|
"enter_backup_password": "Введіть пароль резервної копії",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "Помилка аутентифікації. ${state_error}",
|
"failed_authentication": "Помилка аутентифікації. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "Особливості",
|
"features": "Особливості",
|
||||||
|
"fee_rate": "Ставка плати",
|
||||||
"fetching": "Завантаження",
|
"fetching": "Завантаження",
|
||||||
"fiat_api": "Фіат API",
|
"fiat_api": "Фіат API",
|
||||||
"fiat_balance": "Фіат Баланс",
|
"fiat_balance": "Фіат Баланс",
|
||||||
|
@ -611,6 +613,7 @@
|
||||||
"send": "Відправити",
|
"send": "Відправити",
|
||||||
"send_address": "${cryptoCurrency} адреса",
|
"send_address": "${cryptoCurrency} адреса",
|
||||||
"send_amount": "Сума:",
|
"send_amount": "Сума:",
|
||||||
|
"send_change_to_you": "Зміна, для вас:",
|
||||||
"send_creating_transaction": "Створити транзакцію",
|
"send_creating_transaction": "Створити транзакцію",
|
||||||
"send_error_currency": "Валюта може містити тільки цифри",
|
"send_error_currency": "Валюта може містити тільки цифри",
|
||||||
"send_error_minimum_value": "Мінімальна сума 0.01",
|
"send_error_minimum_value": "Мінімальна сума 0.01",
|
||||||
|
@ -677,6 +680,7 @@
|
||||||
"signature_invalid_error": "Підпис не є дійсним для наведеного повідомлення",
|
"signature_invalid_error": "Підпис не є дійсним для наведеного повідомлення",
|
||||||
"signTransaction": "Підписати транзакцію",
|
"signTransaction": "Підписати транзакцію",
|
||||||
"signup_for_card_accept_terms": "Зареєструйтеся на картку та прийміть умови.",
|
"signup_for_card_accept_terms": "Зареєструйтеся на картку та прийміть умови.",
|
||||||
|
"silent_payment": "Мовчазний платіж",
|
||||||
"silent_payments": "Мовчазні платежі",
|
"silent_payments": "Мовчазні платежі",
|
||||||
"silent_payments_always_scan": "Встановити мовчазні платежі завжди сканувати",
|
"silent_payments_always_scan": "Встановити мовчазні платежі завжди сканувати",
|
||||||
"silent_payments_disclaimer": "Нові адреси - це не нові ідентичності. Це повторне використання існуючої ідентичності з іншою етикеткою.",
|
"silent_payments_disclaimer": "Нові адреси - це не нові ідентичності. Це повторне використання існуючої ідентичності з іншою етикеткою.",
|
||||||
|
@ -709,12 +713,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Перейдіть на гаманець, сумісний з EVM, і повторіть спробу (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Перейдіть на гаманець, сумісний з EVM, і повторіть спробу (Ethereum, Polygon)",
|
||||||
"symbol": "символ",
|
"symbol": "символ",
|
||||||
"sync_all_wallets": "Синхронізувати всі гаманці",
|
"sync_all_wallets": "Синхронізувати всі гаманці",
|
||||||
|
"sync_status_attempting_scan": "Спроба сканування",
|
||||||
"sync_status_attempting_sync": "СПРОБА СИНХРОНІЗАЦІЇ",
|
"sync_status_attempting_sync": "СПРОБА СИНХРОНІЗАЦІЇ",
|
||||||
"sync_status_connected": "ПІДКЛЮЧЕНО",
|
"sync_status_connected": "ПІДКЛЮЧЕНО",
|
||||||
"sync_status_connecting": "ПІДКЛЮЧЕННЯ",
|
"sync_status_connecting": "ПІДКЛЮЧЕННЯ",
|
||||||
"sync_status_failed_connect": "ВІДКЛЮЧЕНО",
|
"sync_status_failed_connect": "ВІДКЛЮЧЕНО",
|
||||||
"sync_status_not_connected": "НЕ ПІДКЛЮЧЕННИЙ",
|
"sync_status_not_connected": "НЕ ПІДКЛЮЧЕННИЙ",
|
||||||
"sync_status_starting_scan": "Початок сканування",
|
"sync_status_starting_scan": "Початок сканування (від ${height})",
|
||||||
"sync_status_starting_sync": "ПОЧАТОК СИНХРОНІЗАЦІЇ",
|
"sync_status_starting_sync": "ПОЧАТОК СИНХРОНІЗАЦІЇ",
|
||||||
"sync_status_syncronized": "СИНХРОНІЗОВАНИЙ",
|
"sync_status_syncronized": "СИНХРОНІЗОВАНИЙ",
|
||||||
"sync_status_syncronizing": "СИНХРОНІЗАЦІЯ",
|
"sync_status_syncronizing": "СИНХРОНІЗАЦІЯ",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "ٹوکن میں ترمیم کریں۔",
|
"edit_token": "ٹوکن میں ترمیم کریں۔",
|
||||||
"electrum_address_disclaimer": "جب بھی آپ ایک کا استعمال کرتے ہیں تو ہم نئے پتے تیار کرتے ہیں، لیکن پچھلے پتے کام کرتے رہتے ہیں۔",
|
"electrum_address_disclaimer": "جب بھی آپ ایک کا استعمال کرتے ہیں تو ہم نئے پتے تیار کرتے ہیں، لیکن پچھلے پتے کام کرتے رہتے ہیں۔",
|
||||||
"email_address": "ای میل اڈریس",
|
"email_address": "ای میل اڈریس",
|
||||||
|
"enable_mempool_api": "درست فیسوں اور تاریخوں کے لئے میمپول API",
|
||||||
"enable_replace_by_fee": "فی فیس کو تبدیل کریں",
|
"enable_replace_by_fee": "فی فیس کو تبدیل کریں",
|
||||||
"enable_silent_payments_scanning": "خاموش ادائیگیوں کو اسکیننگ کے قابل بنائیں",
|
"enable_silent_payments_scanning": "خاموش ادائیگیوں کو اسکین کرنا شروع کریں ، جب تک کہ نوک نہ پہنچ جائے",
|
||||||
"enabled": "فعال",
|
"enabled": "فعال",
|
||||||
"enter_amount": "رقم درج کریں۔",
|
"enter_amount": "رقم درج کریں۔",
|
||||||
"enter_backup_password": "یہاں بیک اپ پاس ورڈ درج کریں۔",
|
"enter_backup_password": "یہاں بیک اپ پاس ورڈ درج کریں۔",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "ناکام تصدیق۔ ${state_error}",
|
"failed_authentication": "ناکام تصدیق۔ ${state_error}",
|
||||||
"faq": "عمومی سوالات",
|
"faq": "عمومی سوالات",
|
||||||
"features": "خصوصیات",
|
"features": "خصوصیات",
|
||||||
|
"fee_rate": "فیس کی شرح",
|
||||||
"fetching": "لا رہا ہے۔",
|
"fetching": "لا رہا ہے۔",
|
||||||
"fiat_api": "Fiat API",
|
"fiat_api": "Fiat API",
|
||||||
"fiat_balance": "فیاٹ بیلنس",
|
"fiat_balance": "فیاٹ بیلنس",
|
||||||
|
@ -612,6 +614,7 @@
|
||||||
"send": "بھیجیں",
|
"send": "بھیجیں",
|
||||||
"send_address": "${cryptoCurrency} پتہ",
|
"send_address": "${cryptoCurrency} پتہ",
|
||||||
"send_amount": "رقم:",
|
"send_amount": "رقم:",
|
||||||
|
"send_change_to_you": "آپ کو تبدیل کریں:",
|
||||||
"send_creating_transaction": "لین دین کی تخلیق",
|
"send_creating_transaction": "لین دین کی تخلیق",
|
||||||
"send_error_currency": "کرنسی صرف نمبروں پر مشتمل ہو سکتی ہے۔",
|
"send_error_currency": "کرنسی صرف نمبروں پر مشتمل ہو سکتی ہے۔",
|
||||||
"send_error_minimum_value": "رقم کی کم از کم قیمت 0.01 ہے۔",
|
"send_error_minimum_value": "رقم کی کم از کم قیمت 0.01 ہے۔",
|
||||||
|
@ -678,6 +681,7 @@
|
||||||
"signature_invalid_error": "دستخط دیئے گئے پیغام کے لئے درست نہیں ہے",
|
"signature_invalid_error": "دستخط دیئے گئے پیغام کے لئے درست نہیں ہے",
|
||||||
"signTransaction": "۔ﮟﯾﺮﮐ ﻂﺨﺘﺳﺩ ﺮﭘ ﻦﯾﺩ ﻦﯿﻟ",
|
"signTransaction": "۔ﮟﯾﺮﮐ ﻂﺨﺘﺳﺩ ﺮﭘ ﻦﯾﺩ ﻦﯿﻟ",
|
||||||
"signup_for_card_accept_terms": "کارڈ کے لیے سائن اپ کریں اور شرائط کو قبول کریں۔",
|
"signup_for_card_accept_terms": "کارڈ کے لیے سائن اپ کریں اور شرائط کو قبول کریں۔",
|
||||||
|
"silent_payment": "خاموش ادائیگی",
|
||||||
"silent_payments": "خاموش ادائیگی",
|
"silent_payments": "خاموش ادائیگی",
|
||||||
"silent_payments_always_scan": "خاموش ادائیگی ہمیشہ اسکیننگ کریں",
|
"silent_payments_always_scan": "خاموش ادائیگی ہمیشہ اسکیننگ کریں",
|
||||||
"silent_payments_disclaimer": "نئے پتے نئی شناخت نہیں ہیں۔ یہ ایک مختلف لیبل کے ساتھ موجودہ شناخت کا دوبارہ استعمال ہے۔",
|
"silent_payments_disclaimer": "نئے پتے نئی شناخت نہیں ہیں۔ یہ ایک مختلف لیبل کے ساتھ موجودہ شناخت کا دوبارہ استعمال ہے۔",
|
||||||
|
@ -710,12 +714,13 @@
|
||||||
"switchToEVMCompatibleWallet": "(Ethereum, Polygon) ﮟﯾﺮﮐ ﺶﺷﻮﮐ ﮦﺭﺎﺑﻭﺩ ﺭﻭﺍ ﮟﯾﺮﮐ ﭻﺋﻮﺳ ﺮﭘ ﭧﯿﻟﺍﻭ ﮯﻟﺍﻭ ﮯﻨﮭﮐﺭ ﺖﻘﺑﺎﻄﻣ ",
|
"switchToEVMCompatibleWallet": "(Ethereum, Polygon) ﮟﯾﺮﮐ ﺶﺷﻮﮐ ﮦﺭﺎﺑﻭﺩ ﺭﻭﺍ ﮟﯾﺮﮐ ﭻﺋﻮﺳ ﺮﭘ ﭧﯿﻟﺍﻭ ﮯﻟﺍﻭ ﮯﻨﮭﮐﺭ ﺖﻘﺑﺎﻄﻣ ",
|
||||||
"symbol": "ﺖﻣﻼﻋ",
|
"symbol": "ﺖﻣﻼﻋ",
|
||||||
"sync_all_wallets": "تمام بٹوے کو ہم آہنگ کریں",
|
"sync_all_wallets": "تمام بٹوے کو ہم آہنگ کریں",
|
||||||
|
"sync_status_attempting_scan": "اسکین کی کوشش کرنا",
|
||||||
"sync_status_attempting_sync": "ہم آہنگی کی کوشش کر رہا ہے۔",
|
"sync_status_attempting_sync": "ہم آہنگی کی کوشش کر رہا ہے۔",
|
||||||
"sync_status_connected": "منسلک",
|
"sync_status_connected": "منسلک",
|
||||||
"sync_status_connecting": "جڑ رہا ہے۔",
|
"sync_status_connecting": "جڑ رہا ہے۔",
|
||||||
"sync_status_failed_connect": "منقطع",
|
"sync_status_failed_connect": "منقطع",
|
||||||
"sync_status_not_connected": "منسلک نہیں",
|
"sync_status_not_connected": "منسلک نہیں",
|
||||||
"sync_status_starting_scan": "اسکین شروع کرنا",
|
"sync_status_starting_scan": "اسکین شروع کرنا (${height})",
|
||||||
"sync_status_starting_sync": "مطابقت پذیری شروع کر رہا ہے۔",
|
"sync_status_starting_sync": "مطابقت پذیری شروع کر رہا ہے۔",
|
||||||
"sync_status_syncronized": "مطابقت پذیر",
|
"sync_status_syncronized": "مطابقت پذیر",
|
||||||
"sync_status_syncronizing": "مطابقت پذیری",
|
"sync_status_syncronizing": "مطابقت پذیری",
|
||||||
|
|
|
@ -140,8 +140,8 @@
|
||||||
"confirm": "Xác nhận",
|
"confirm": "Xác nhận",
|
||||||
"confirm_delete_template": "Thao tác này sẽ xóa mẫu này. Bạn có muốn tiếp tục không?",
|
"confirm_delete_template": "Thao tác này sẽ xóa mẫu này. Bạn có muốn tiếp tục không?",
|
||||||
"confirm_delete_wallet": "Thao tác này sẽ xóa ví này. Bạn có muốn tiếp tục không?",
|
"confirm_delete_wallet": "Thao tác này sẽ xóa ví này. Bạn có muốn tiếp tục không?",
|
||||||
"confirm_fee_deduction": "Xác nhận Khấu trừ Phí",
|
|
||||||
"confirm_fee_dedction_content": "Bạn có đồng ý trừ phí từ đầu ra không?",
|
"confirm_fee_dedction_content": "Bạn có đồng ý trừ phí từ đầu ra không?",
|
||||||
|
"confirm_fee_deduction": "Xác nhận Khấu trừ Phí",
|
||||||
"confirm_sending": "Xác nhận gửi",
|
"confirm_sending": "Xác nhận gửi",
|
||||||
"confirm_silent_payments_switch_node": "Nút hiện tại của bạn không hỗ trợ thanh toán im lặng\\nCake Wallet sẽ chuyển sang một nút tương thích chỉ để quét",
|
"confirm_silent_payments_switch_node": "Nút hiện tại của bạn không hỗ trợ thanh toán im lặng\\nCake Wallet sẽ chuyển sang một nút tương thích chỉ để quét",
|
||||||
"confirmations": "Xác nhận",
|
"confirmations": "Xác nhận",
|
||||||
|
@ -230,6 +230,7 @@
|
||||||
"edit_token": "Chỉnh sửa token",
|
"edit_token": "Chỉnh sửa token",
|
||||||
"electrum_address_disclaimer": "Chúng tôi tạo địa chỉ mới mỗi khi bạn sử dụng, nhưng các địa chỉ cũ vẫn tiếp tục hoạt động",
|
"electrum_address_disclaimer": "Chúng tôi tạo địa chỉ mới mỗi khi bạn sử dụng, nhưng các địa chỉ cũ vẫn tiếp tục hoạt động",
|
||||||
"email_address": "Địa chỉ Email",
|
"email_address": "Địa chỉ Email",
|
||||||
|
"enable_mempool_api": "API Mempool cho các khoản phí và ngày chính xác",
|
||||||
"enable_replace_by_fee": "Bật Thay thế Bằng Phí",
|
"enable_replace_by_fee": "Bật Thay thế Bằng Phí",
|
||||||
"enable_silent_payments_scanning": "Bật quét thanh toán im lặng",
|
"enable_silent_payments_scanning": "Bật quét thanh toán im lặng",
|
||||||
"enabled": "Đã bật",
|
"enabled": "Đã bật",
|
||||||
|
@ -298,7 +299,7 @@
|
||||||
"fiat_balance": "Số dư Fiat",
|
"fiat_balance": "Số dư Fiat",
|
||||||
"field_required": "Trường này là bắt buộc",
|
"field_required": "Trường này là bắt buộc",
|
||||||
"fill_code": "Vui lòng điền mã xác minh được gửi đến email của bạn",
|
"fill_code": "Vui lòng điền mã xác minh được gửi đến email của bạn",
|
||||||
"filter_by": "Lọc theo",
|
"filter_by": "Lọc theo",
|
||||||
"first_wallet_text": "Ví tuyệt vời cho Monero, Bitcoin, Ethereum, Litecoin, và Haven",
|
"first_wallet_text": "Ví tuyệt vời cho Monero, Bitcoin, Ethereum, Litecoin, và Haven",
|
||||||
"fixed_pair_not_supported": "Cặp tỷ giá cố định này không được hỗ trợ với các sàn giao dịch đã chọn",
|
"fixed_pair_not_supported": "Cặp tỷ giá cố định này không được hỗ trợ với các sàn giao dịch đã chọn",
|
||||||
"fixed_rate": "Tỷ giá cố định",
|
"fixed_rate": "Tỷ giá cố định",
|
||||||
|
@ -398,7 +399,7 @@
|
||||||
"new_subaddress_label_name": "Tên nhãn",
|
"new_subaddress_label_name": "Tên nhãn",
|
||||||
"new_subaddress_title": "Địa chỉ mới",
|
"new_subaddress_title": "Địa chỉ mới",
|
||||||
"new_template": "Mẫu mới",
|
"new_template": "Mẫu mới",
|
||||||
"new_wallet": "Ví mới",
|
"new_wallet": "Ví mới",
|
||||||
"newConnection": "Kết nối mới",
|
"newConnection": "Kết nối mới",
|
||||||
"no_cards_found": "Không tìm thấy thẻ",
|
"no_cards_found": "Không tìm thấy thẻ",
|
||||||
"no_id_needed": "Không cần ID!",
|
"no_id_needed": "Không cần ID!",
|
||||||
|
@ -498,7 +499,7 @@
|
||||||
"red_dark_theme": "Chủ đề tối đỏ",
|
"red_dark_theme": "Chủ đề tối đỏ",
|
||||||
"red_light_theme": "Chủ đề sáng đỏ",
|
"red_light_theme": "Chủ đề sáng đỏ",
|
||||||
"redeemed": "Đã đổi",
|
"redeemed": "Đã đổi",
|
||||||
"refund_address": "Địa chỉ hoàn tiền",
|
"refund_address": "Địa chỉ hoàn tiền",
|
||||||
"reject": "Từ chối",
|
"reject": "Từ chối",
|
||||||
"remaining": "còn lại",
|
"remaining": "còn lại",
|
||||||
"remove": "Gỡ bỏ",
|
"remove": "Gỡ bỏ",
|
||||||
|
@ -598,7 +599,7 @@
|
||||||
"seedtype": "Loại hạt giống",
|
"seedtype": "Loại hạt giống",
|
||||||
"seedtype_legacy": "Di sản (25 từ)",
|
"seedtype_legacy": "Di sản (25 từ)",
|
||||||
"seedtype_polyseed": "Polyseed (16 từ)",
|
"seedtype_polyseed": "Polyseed (16 từ)",
|
||||||
"seedtype_wownero": "Wownero (14 từ)",
|
"seedtype_wownero": "Wownero (14 từ)",
|
||||||
"select_backup_file": "Chọn tệp sao lưu",
|
"select_backup_file": "Chọn tệp sao lưu",
|
||||||
"select_buy_provider_notice": "Chọn nhà cung cấp mua ở trên. Bạn có thể bỏ qua màn hình này bằng cách thiết lập nhà cung cấp mua mặc định trong cài đặt ứng dụng.",
|
"select_buy_provider_notice": "Chọn nhà cung cấp mua ở trên. Bạn có thể bỏ qua màn hình này bằng cách thiết lập nhà cung cấp mua mặc định trong cài đặt ứng dụng.",
|
||||||
"select_destination": "Vui lòng chọn đích cho tệp sao lưu.",
|
"select_destination": "Vui lòng chọn đích cho tệp sao lưu.",
|
||||||
|
@ -698,7 +699,7 @@
|
||||||
"support_description_guides": "Tài liệu và hỗ trợ cho các vấn đề phổ biến",
|
"support_description_guides": "Tài liệu và hỗ trợ cho các vấn đề phổ biến",
|
||||||
"support_description_live_chat": "Miễn phí và nhanh chóng! Các đại diện hỗ trợ được đào tạo sẵn sàng hỗ trợ",
|
"support_description_live_chat": "Miễn phí và nhanh chóng! Các đại diện hỗ trợ được đào tạo sẵn sàng hỗ trợ",
|
||||||
"support_description_other_links": "Tham gia cộng đồng của chúng tôi hoặc liên hệ với chúng tôi hoặc các đối tác của chúng tôi qua các phương pháp khác",
|
"support_description_other_links": "Tham gia cộng đồng của chúng tôi hoặc liên hệ với chúng tôi hoặc các đối tác của chúng tôi qua các phương pháp khác",
|
||||||
"support_title_guides": "Hướng dẫn Cake Wallet",
|
"support_title_guides": "Hướng dẫn Cake Wallet",
|
||||||
"support_title_live_chat": "Hỗ trợ trực tiếp",
|
"support_title_live_chat": "Hỗ trợ trực tiếp",
|
||||||
"support_title_other_links": "Liên kết hỗ trợ khác",
|
"support_title_other_links": "Liên kết hỗ trợ khác",
|
||||||
"sweeping_wallet": "Quét ví",
|
"sweeping_wallet": "Quét ví",
|
||||||
|
@ -712,7 +713,7 @@
|
||||||
"sync_status_connecting": "ĐANG KẾT NỐI",
|
"sync_status_connecting": "ĐANG KẾT NỐI",
|
||||||
"sync_status_failed_connect": "ĐÃ NGẮT KẾT NỐI",
|
"sync_status_failed_connect": "ĐÃ NGẮT KẾT NỐI",
|
||||||
"sync_status_not_connected": "CHƯA KẾT NỐI",
|
"sync_status_not_connected": "CHƯA KẾT NỐI",
|
||||||
"sync_status_starting_scan": "ĐANG BẮT ĐẦU QUÉT",
|
"sync_status_starting_scan": "ĐANG BẮT ĐẦU QUÉT (${height})",
|
||||||
"sync_status_starting_sync": "ĐANG BẮT ĐẦU ĐỒNG BỘ",
|
"sync_status_starting_sync": "ĐANG BẮT ĐẦU ĐỒNG BỘ",
|
||||||
"sync_status_syncronized": "ĐÃ ĐỒNG BỘ",
|
"sync_status_syncronized": "ĐÃ ĐỒNG BỘ",
|
||||||
"sync_status_syncronizing": "ĐANG ĐỒNG BỘ",
|
"sync_status_syncronizing": "ĐANG ĐỒNG BỘ",
|
||||||
|
@ -798,7 +799,7 @@
|
||||||
"trongrid_history": "Lịch sử TronGrid",
|
"trongrid_history": "Lịch sử TronGrid",
|
||||||
"trusted": "Đã tin cậy",
|
"trusted": "Đã tin cậy",
|
||||||
"tx_commit_exception_no_dust_on_change": "Giao dịch bị từ chối với số tiền này. Với số tiền này bạn có thể gửi ${min} mà không cần đổi tiền lẻ hoặc ${max} trả lại tiền lẻ.",
|
"tx_commit_exception_no_dust_on_change": "Giao dịch bị từ chối với số tiền này. Với số tiền này bạn có thể gửi ${min} mà không cần đổi tiền lẻ hoặc ${max} trả lại tiền lẻ.",
|
||||||
"tx_commit_failed": "Giao dịch không thành công. Vui lòng liên hệ với hỗ trợ.",
|
"tx_commit_failed": "Giao dịch không thành công. Vui lòng liên hệ với hỗ trợ.",
|
||||||
"tx_invalid_input": "Bạn đang sử dụng loại đầu vào sai cho loại thanh toán này",
|
"tx_invalid_input": "Bạn đang sử dụng loại đầu vào sai cho loại thanh toán này",
|
||||||
"tx_no_dust_exception": "Giao dịch bị từ chối vì gửi một số tiền quá nhỏ. Vui lòng thử tăng số tiền.",
|
"tx_no_dust_exception": "Giao dịch bị từ chối vì gửi một số tiền quá nhỏ. Vui lòng thử tăng số tiền.",
|
||||||
"tx_not_enough_inputs_exception": "Không đủ đầu vào có sẵn. Vui lòng chọn thêm dưới Coin Control",
|
"tx_not_enough_inputs_exception": "Không đủ đầu vào có sẵn. Vui lòng chọn thêm dưới Coin Control",
|
||||||
|
@ -897,4 +898,4 @@
|
||||||
"you_will_get": "Chuyển đổi thành",
|
"you_will_get": "Chuyển đổi thành",
|
||||||
"you_will_send": "Chuyển đổi từ",
|
"you_will_send": "Chuyển đổi từ",
|
||||||
"yy": "YY"
|
"yy": "YY"
|
||||||
}
|
}
|
|
@ -233,8 +233,9 @@
|
||||||
"edit_token": "Ṣatunkọ àmi",
|
"edit_token": "Ṣatunkọ àmi",
|
||||||
"electrum_address_disclaimer": "A dá àwọn àdírẹ́sì títun ní gbogbo àwọn ìgbà t'ẹ́ lo ó kan ṣùgbọ́n ẹ lè tẹ̀síwájú lo àwọn àdírẹ́sì tẹ́lẹ̀tẹ́lẹ̀.",
|
"electrum_address_disclaimer": "A dá àwọn àdírẹ́sì títun ní gbogbo àwọn ìgbà t'ẹ́ lo ó kan ṣùgbọ́n ẹ lè tẹ̀síwájú lo àwọn àdírẹ́sì tẹ́lẹ̀tẹ́lẹ̀.",
|
||||||
"email_address": "Àdírẹ́sì ímeèlì",
|
"email_address": "Àdírẹ́sì ímeèlì",
|
||||||
|
"enable_mempool_api": "Mempool API fun awọn owo deede ati awọn ọjọ",
|
||||||
"enable_replace_by_fee": "Mu ki o rọpo",
|
"enable_replace_by_fee": "Mu ki o rọpo",
|
||||||
"enable_silent_payments_scanning": "Mu ki awọn sisanwo ipalọlọ",
|
"enable_silent_payments_scanning": "Bẹrẹ awọn sisanwo ipalọlọ, titi ti o fi de opin",
|
||||||
"enabled": "Wọ́n tíwọn ti tan",
|
"enabled": "Wọ́n tíwọn ti tan",
|
||||||
"enter_amount": "Tẹ̀ iye",
|
"enter_amount": "Tẹ̀ iye",
|
||||||
"enter_backup_password": "Tẹ̀ ọ̀rọ̀ aṣínà ti ẹ̀dà ḿbí",
|
"enter_backup_password": "Tẹ̀ ọ̀rọ̀ aṣínà ti ẹ̀dà ḿbí",
|
||||||
|
@ -296,6 +297,7 @@
|
||||||
"failed_authentication": "Ìfẹ̀rílàdí pipòfo. ${state_error}",
|
"failed_authentication": "Ìfẹ̀rílàdí pipòfo. ${state_error}",
|
||||||
"faq": "Àwọn ìbéèrè l'a máa ń bèèrè",
|
"faq": "Àwọn ìbéèrè l'a máa ń bèèrè",
|
||||||
"features": "Awọn ẹya",
|
"features": "Awọn ẹya",
|
||||||
|
"fee_rate": "Oṣuwọn owo ọya",
|
||||||
"fetching": "ń wá",
|
"fetching": "ń wá",
|
||||||
"fiat_api": "Ojú ètò áàpù owó tí ìjọba pàṣẹ wa lò",
|
"fiat_api": "Ojú ètò áàpù owó tí ìjọba pàṣẹ wa lò",
|
||||||
"fiat_balance": "Fiat Iwontunws.funfun",
|
"fiat_balance": "Fiat Iwontunws.funfun",
|
||||||
|
@ -611,6 +613,7 @@
|
||||||
"send": "Ránṣẹ́",
|
"send": "Ránṣẹ́",
|
||||||
"send_address": "${cryptoCurrency} àdírẹ́sì",
|
"send_address": "${cryptoCurrency} àdírẹ́sì",
|
||||||
"send_amount": "Iye:",
|
"send_amount": "Iye:",
|
||||||
|
"send_change_to_you": "Yipada, si ọ:",
|
||||||
"send_creating_transaction": "Ńṣe àránṣẹ́",
|
"send_creating_transaction": "Ńṣe àránṣẹ́",
|
||||||
"send_error_currency": "Ó yẹ kí òǹkà dá wà nínu iye",
|
"send_error_currency": "Ó yẹ kí òǹkà dá wà nínu iye",
|
||||||
"send_error_minimum_value": "Ránṣẹ́ owó kò kéré dé 0.01",
|
"send_error_minimum_value": "Ránṣẹ́ owó kò kéré dé 0.01",
|
||||||
|
@ -677,6 +680,7 @@
|
||||||
"signature_invalid_error": "Ibuwọlu ko wulo fun ifiranṣẹ ti a fun",
|
"signature_invalid_error": "Ibuwọlu ko wulo fun ifiranṣẹ ti a fun",
|
||||||
"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_payment": "Isanwo dakẹ",
|
||||||
"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_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.",
|
||||||
|
@ -709,12 +713,13 @@
|
||||||
"switchToEVMCompatibleWallet": "Jọwọ yipada si apamọwọ ibaramu EVM ki o tun gbiyanju lẹẹkansi (Ethereum, Polygon)",
|
"switchToEVMCompatibleWallet": "Jọwọ yipada si apamọwọ ibaramu EVM ki o tun gbiyanju lẹẹkansi (Ethereum, Polygon)",
|
||||||
"symbol": "Aami",
|
"symbol": "Aami",
|
||||||
"sync_all_wallets": "Muṣiṣẹpọ gbogbo awọn Woleti",
|
"sync_all_wallets": "Muṣiṣẹpọ gbogbo awọn Woleti",
|
||||||
|
"sync_status_attempting_scan": "Igbiyanju ọlọjẹ",
|
||||||
"sync_status_attempting_sync": "Ń GBÌYÀNJÚ MÚDỌ́GBA",
|
"sync_status_attempting_sync": "Ń GBÌYÀNJÚ MÚDỌ́GBA",
|
||||||
"sync_status_connected": "TI DÁRAPỌ̀ MỌ́",
|
"sync_status_connected": "TI DÁRAPỌ̀ MỌ́",
|
||||||
"sync_status_connecting": "Ń DÁRAPỌ̀ MỌ́",
|
"sync_status_connecting": "Ń DÁRAPỌ̀ MỌ́",
|
||||||
"sync_status_failed_connect": "ÌKÀNPỌ̀ TI KÚ",
|
"sync_status_failed_connect": "ÌKÀNPỌ̀ TI KÚ",
|
||||||
"sync_status_not_connected": "KÒ TI DÁRAPỌ̀ MỌ́ Ọ",
|
"sync_status_not_connected": "KÒ TI DÁRAPỌ̀ MỌ́ Ọ",
|
||||||
"sync_status_starting_scan": "Bibẹrẹ ọlọjẹ",
|
"sync_status_starting_scan": "Ibẹrẹ ọlọjẹ (lati ${height})",
|
||||||
"sync_status_starting_sync": "Ń BẸ̀RẸ̀ RẸ́",
|
"sync_status_starting_sync": "Ń BẸ̀RẸ̀ RẸ́",
|
||||||
"sync_status_syncronized": "TI MÚDỌ́GBA",
|
"sync_status_syncronized": "TI MÚDỌ́GBA",
|
||||||
"sync_status_syncronizing": "Ń MÚDỌ́GBA",
|
"sync_status_syncronizing": "Ń MÚDỌ́GBA",
|
||||||
|
|
|
@ -232,8 +232,9 @@
|
||||||
"edit_token": "编辑令牌",
|
"edit_token": "编辑令牌",
|
||||||
"electrum_address_disclaimer": "每次您使用一个地址时,我们都会生成新地址,但之前的地址仍然有效",
|
"electrum_address_disclaimer": "每次您使用一个地址时,我们都会生成新地址,但之前的地址仍然有效",
|
||||||
"email_address": "电子邮件地址",
|
"email_address": "电子邮件地址",
|
||||||
|
"enable_mempool_api": "Mempool API获得准确的费用和日期",
|
||||||
"enable_replace_by_fee": "启用by-Fee替换",
|
"enable_replace_by_fee": "启用by-Fee替换",
|
||||||
"enable_silent_payments_scanning": "启用无声付款扫描",
|
"enable_silent_payments_scanning": "开始扫描无声付款,直到达到提示",
|
||||||
"enabled": "启用",
|
"enabled": "启用",
|
||||||
"enter_amount": "输入金额",
|
"enter_amount": "输入金额",
|
||||||
"enter_backup_password": "在此处输入備用密码",
|
"enter_backup_password": "在此处输入備用密码",
|
||||||
|
@ -295,6 +296,7 @@
|
||||||
"failed_authentication": "身份验证失败. ${state_error}",
|
"failed_authentication": "身份验证失败. ${state_error}",
|
||||||
"faq": "FAQ",
|
"faq": "FAQ",
|
||||||
"features": "特征",
|
"features": "特征",
|
||||||
|
"fee_rate": "费率",
|
||||||
"fetching": "正在获取",
|
"fetching": "正在获取",
|
||||||
"fiat_api": "法币API",
|
"fiat_api": "法币API",
|
||||||
"fiat_balance": "法币余额",
|
"fiat_balance": "法币余额",
|
||||||
|
@ -610,6 +612,7 @@
|
||||||
"send": "发送",
|
"send": "发送",
|
||||||
"send_address": "${cryptoCurrency} 地址",
|
"send_address": "${cryptoCurrency} 地址",
|
||||||
"send_amount": "金额:",
|
"send_amount": "金额:",
|
||||||
|
"send_change_to_you": "改变,向您:",
|
||||||
"send_creating_transaction": "创建交易",
|
"send_creating_transaction": "创建交易",
|
||||||
"send_error_currency": "货币只能包含数字",
|
"send_error_currency": "货币只能包含数字",
|
||||||
"send_error_minimum_value": "最小金额为0.01",
|
"send_error_minimum_value": "最小金额为0.01",
|
||||||
|
@ -676,6 +679,7 @@
|
||||||
"signature_invalid_error": "签名对于给出的消息无效",
|
"signature_invalid_error": "签名对于给出的消息无效",
|
||||||
"signTransaction": "签署交易",
|
"signTransaction": "签署交易",
|
||||||
"signup_for_card_accept_terms": "注册卡并接受条款。",
|
"signup_for_card_accept_terms": "注册卡并接受条款。",
|
||||||
|
"silent_payment": "无声付款",
|
||||||
"silent_payments": "无声付款",
|
"silent_payments": "无声付款",
|
||||||
"silent_payments_always_scan": "设置无声付款总是扫描",
|
"silent_payments_always_scan": "设置无声付款总是扫描",
|
||||||
"silent_payments_disclaimer": "新地址不是新的身份。这是重复使用具有不同标签的现有身份。",
|
"silent_payments_disclaimer": "新地址不是新的身份。这是重复使用具有不同标签的现有身份。",
|
||||||
|
@ -708,12 +712,13 @@
|
||||||
"switchToEVMCompatibleWallet": "请切换到 EVM 兼容钱包并重试(以太坊、Polygon)",
|
"switchToEVMCompatibleWallet": "请切换到 EVM 兼容钱包并重试(以太坊、Polygon)",
|
||||||
"symbol": "象征",
|
"symbol": "象征",
|
||||||
"sync_all_wallets": "同步所有钱包",
|
"sync_all_wallets": "同步所有钱包",
|
||||||
|
"sync_status_attempting_scan": "尝试扫描",
|
||||||
"sync_status_attempting_sync": "嘗試同步",
|
"sync_status_attempting_sync": "嘗試同步",
|
||||||
"sync_status_connected": "已连接",
|
"sync_status_connected": "已连接",
|
||||||
"sync_status_connecting": "连接中",
|
"sync_status_connecting": "连接中",
|
||||||
"sync_status_failed_connect": "断线",
|
"sync_status_failed_connect": "断线",
|
||||||
"sync_status_not_connected": "未连接",
|
"sync_status_not_connected": "未连接",
|
||||||
"sync_status_starting_scan": "开始扫描",
|
"sync_status_starting_scan": "启动扫描(来自 ${height})",
|
||||||
"sync_status_starting_sync": "开始同步",
|
"sync_status_starting_sync": "开始同步",
|
||||||
"sync_status_syncronized": "已同步",
|
"sync_status_syncronized": "已同步",
|
||||||
"sync_status_syncronizing": "正在同步",
|
"sync_status_syncronizing": "正在同步",
|
||||||
|
|
|
@ -116,7 +116,7 @@ import 'package:cw_bitcoin/bitcoin_address_record.dart';
|
||||||
import 'package:cw_bitcoin/bitcoin_transaction_credentials.dart';
|
import 'package:cw_bitcoin/bitcoin_transaction_credentials.dart';
|
||||||
import 'package:cw_bitcoin/litecoin_wallet_service.dart';
|
import 'package:cw_bitcoin/litecoin_wallet_service.dart';
|
||||||
import 'package:cw_core/get_height_by_date.dart';
|
import 'package:cw_core/get_height_by_date.dart';
|
||||||
import 'package:cw_bitcoin/script_hash.dart';
|
import 'package:cw_core/transaction_info.dart';
|
||||||
import 'package:cw_bitcoin/bitcoin_hardware_wallet_service.dart';
|
import 'package:cw_bitcoin/bitcoin_hardware_wallet_service.dart';
|
||||||
import 'package:mobx/mobx.dart';
|
import 'package:mobx/mobx.dart';
|
||||||
""";
|
""";
|
||||||
|
@ -211,7 +211,8 @@ abstract class Bitcoin {
|
||||||
int getEstimatedFeeWithFeeRate(Object wallet, int feeRate, int? amount,
|
int getEstimatedFeeWithFeeRate(Object wallet, int feeRate, int? amount,
|
||||||
{int? outputsCount, int? size});
|
{int? outputsCount, int? size});
|
||||||
int feeAmountWithFeeRate(Object wallet, int feeRate, int inputsCount, int outputsCount, {int? size});
|
int feeAmountWithFeeRate(Object wallet, int feeRate, int inputsCount, int outputsCount, {int? size});
|
||||||
int getHeightByDate({required DateTime date});
|
Future<bool> checkIfMempoolAPIIsEnabled(Object wallet);
|
||||||
|
Future<int> getHeightByDate({required DateTime date, bool? bitcoinMempoolAPIEnabled});
|
||||||
Future<void> rescan(Object wallet, {required int height, bool? doSingleScan});
|
Future<void> rescan(Object wallet, {required int height, bool? doSingleScan});
|
||||||
Future<bool> getNodeIsElectrsSPEnabled(Object wallet);
|
Future<bool> getNodeIsElectrsSPEnabled(Object wallet);
|
||||||
void deleteSilentPaymentAddress(Object wallet, String address);
|
void deleteSilentPaymentAddress(Object wallet, String address);
|
||||||
|
@ -220,6 +221,8 @@ abstract class Bitcoin {
|
||||||
|
|
||||||
void setLedger(WalletBase wallet, Ledger ledger, LedgerDevice device);
|
void setLedger(WalletBase wallet, Ledger ledger, LedgerDevice device);
|
||||||
Future<List<HardwareAccountData>> getHardwareWalletAccounts(LedgerViewModel ledgerVM, {int index = 0, int limit = 5});
|
Future<List<HardwareAccountData>> getHardwareWalletAccounts(LedgerViewModel ledgerVM, {int index = 0, int limit = 5});
|
||||||
|
List<Output> updateOutputs(PendingTransaction pendingTransaction, List<Output> outputs);
|
||||||
|
bool txIsReceivedSilentPayment(TransactionInfo txInfo);
|
||||||
}
|
}
|
||||||
""";
|
""";
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue