Merge branch 'main' into add-gnosis

This commit is contained in:
Konstantin Ullrich 2025-06-17 17:17:14 +02:00
commit e5e8bc8205
No known key found for this signature in database
GPG key ID: 6B3199AD9B3D23B8
47 changed files with 471 additions and 220 deletions

BIN
assets/images/qr-cake.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

View file

@ -5,6 +5,8 @@ import 'package:path/path.dart' as p;
import 'package:cw_core/exceptions.dart'; import 'package:cw_core/exceptions.dart';
import 'package:cw_core/transaction_direction.dart'; import 'package:cw_core/transaction_direction.dart';
import 'package:cw_core/utils/print_verbose.dart'; import 'package:cw_core/utils/print_verbose.dart';
import 'package:cw_core/pathForWallet.dart';
import 'package:cw_core/wallet_type.dart';
import 'package:cw_decred/amount_format.dart'; import 'package:cw_decred/amount_format.dart';
import 'package:cw_decred/pending_transaction.dart'; import 'package:cw_decred/pending_transaction.dart';
import 'package:cw_decred/transaction_credentials.dart'; import 'package:cw_decred/transaction_credentials.dart';
@ -307,9 +309,10 @@ abstract class DecredWalletBase
persistantPeer = addr; persistantPeer = addr;
await _libwallet.closeWallet(walletInfo.name); await _libwallet.closeWallet(walletInfo.name);
final network = isTestnet ? "testnet" : "mainnet"; final network = isTestnet ? "testnet" : "mainnet";
final dirPath = await pathForWalletDir(name: walletInfo.name, type: WalletType.decred);
final config = { final config = {
"name": walletInfo.name, "name": walletInfo.name,
"datadir": walletInfo.dirPath, "datadir": dirPath,
"net": network, "net": network,
"unsyncedaddrs": true, "unsyncedaddrs": true,
}; };
@ -611,7 +614,7 @@ abstract class DecredWalletBase
} }
await for (final entity in sourceDir.list(recursive: true)) { await for (final entity in sourceDir.list(recursive: true)) {
final relativePath = entity.path.substring(sourceDir.path.length+1); final relativePath = entity.path.substring(sourceDir.path.length + 1);
final targetPath = p.join(targetDir.path, relativePath); final targetPath = p.join(targetDir.path, relativePath);
if (entity is File) { if (entity is File) {

View file

@ -8,6 +8,7 @@ import 'package:cw_core/wallet_service.dart';
import 'package:cw_core/pathForWallet.dart'; import 'package:cw_core/pathForWallet.dart';
import 'package:cw_core/wallet_info.dart'; import 'package:cw_core/wallet_info.dart';
import 'package:cw_core/wallet_type.dart'; import 'package:cw_core/wallet_type.dart';
import 'package:path/path.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:cw_core/unspent_coins_info.dart'; import 'package:cw_core/unspent_coins_info.dart';
@ -57,42 +58,93 @@ class DecredWalletService extends WalletService<
@override @override
Future<DecredWallet> create(DecredNewWalletCredentials credentials, {bool? isTestnet}) async { Future<DecredWallet> create(DecredNewWalletCredentials credentials, {bool? isTestnet}) async {
await this.init(); await this.init();
final dirPath = await pathForWalletDir(name: credentials.walletInfo!.name, type: getType());
final network = isTestnet == true ? testnet : mainnet;
final config = { final config = {
"name": credentials.walletInfo!.name, "name": credentials.walletInfo!.name,
"datadir": credentials.walletInfo!.dirPath, "datadir": dirPath,
"pass": credentials.password!, "pass": credentials.password!,
"net": isTestnet == true ? testnet : mainnet, "net": network,
"unsyncedaddrs": true, "unsyncedaddrs": true,
}; };
await libwallet!.createWallet(jsonEncode(config)); await libwallet!.createWallet(jsonEncode(config));
final di = DerivationInfo( final di = DerivationInfo(
derivationPath: isTestnet == true ? seedRestorePathTestnet : seedRestorePath); derivationPath: isTestnet == true ? seedRestorePathTestnet : seedRestorePath);
credentials.walletInfo!.derivationInfo = di; credentials.walletInfo!.derivationInfo = di;
credentials.walletInfo!.network = network;
// ios will move our wallet directory when updating. Since we must
// recalculate the new path every time we open the wallet, ensure this path
// is not used. An older wallet will have a directory here which is a
// condition for moving the wallet when opening, so this must be kept blank
// going forward.
credentials.walletInfo!.dirPath = "";
credentials.walletInfo!.path = "";
final wallet = DecredWallet(credentials.walletInfo!, credentials.password!, final wallet = DecredWallet(credentials.walletInfo!, credentials.password!,
this.unspentCoinsInfoSource, libwallet!, closeLibwallet); this.unspentCoinsInfoSource, libwallet!, closeLibwallet);
await wallet.init(); await wallet.init();
return wallet; return wallet;
} }
void copyDirectorySync(Directory source, Directory destination) {
/// create destination folder if not exist
if (!destination.existsSync()) {
destination.createSync(recursive: true);
}
/// get all files from source (recursive: false is important here)
source.listSync(recursive: false).forEach((entity) {
final newPath = destination.path + Platform.pathSeparator + basename(entity.path);
if (entity is File) {
entity.rename(newPath);
} else if (entity is Directory) {
copyDirectorySync(entity, Directory(newPath));
}
});
}
Future<void> moveWallet(String fromPath, String toPath) async {
final oldWalletDir = new Directory(fromPath);
final newWalletDir = new Directory(toPath);
copyDirectorySync(oldWalletDir, newWalletDir);
// It would be ideal to delete the old directory here, but ios will error
// sometimes with "OS Error: No such file or directory, errno = 2" even
// after checking if it exists.
}
@override @override
Future<DecredWallet> openWallet(String name, String password) async { Future<DecredWallet> openWallet(String name, String password) async {
final walletInfo = walletInfoSource.values final walletInfo = walletInfoSource.values
.firstWhereOrNull((info) => info.id == WalletBase.idFor(name, getType()))!; .firstWhereOrNull((info) => info.id == WalletBase.idFor(name, getType()))!;
final network = walletInfo.derivationInfo?.derivationPath == seedRestorePathTestnet || if (walletInfo.network == null || walletInfo.network == "") {
walletInfo.derivationInfo?.derivationPath == pubkeyRestorePathTestnet walletInfo.network = walletInfo.derivationInfo?.derivationPath == seedRestorePathTestnet ||
? testnet walletInfo.derivationInfo?.derivationPath == pubkeyRestorePathTestnet
: mainnet; ? testnet
: mainnet;
}
await this.init(); await this.init();
final walletDirExists = Directory(walletInfo.dirPath).existsSync();
if (!walletDirExists) { // Cake wallet version 4.27.0 and earlier gave a wallet dir that did not
walletInfo.dirPath = await pathForWalletDir(name: name, type: getType()); // match the name. Move those to the correct place.
final dirPath = await pathForWalletDir(name: name, type: getType());
if (walletInfo.path != "") {
// On ios the stored dir no longer exists. We can only trust the basename.
// dirPath may already be updated and lost the basename, so look at path.
final randomBasename = basename(walletInfo.path);
final oldDir = await pathForWalletDir(name: randomBasename, type: getType());
if (oldDir != dirPath) {
await this.moveWallet(oldDir, dirPath);
}
// Clear the path so this does not trigger again.
walletInfo.dirPath = "";
walletInfo.path = "";
await walletInfo.save();
} }
final config = { final config = {
"name": walletInfo.name, "name": name,
"datadir": walletInfo.dirPath, "datadir": dirPath,
"net": network, "net": walletInfo.network,
"unsyncedaddrs": true, "unsyncedaddrs": true,
}; };
await libwallet!.loadWallet(jsonEncode(config)); await libwallet!.loadWallet(jsonEncode(config));
@ -127,12 +179,11 @@ class DecredWalletService extends WalletService<
await currentWallet.renameWalletFiles(newName); await currentWallet.renameWalletFiles(newName);
final newDirPath = await pathForWalletDir(name: newName, type: getType());
final newWalletInfo = currentWalletInfo; final newWalletInfo = currentWalletInfo;
newWalletInfo.id = WalletBase.idFor(newName, getType()); newWalletInfo.id = WalletBase.idFor(newName, getType());
newWalletInfo.name = newName; newWalletInfo.name = newName;
newWalletInfo.dirPath = newDirPath; newWalletInfo.dirPath = "";
newWalletInfo.network = network; newWalletInfo.path = "";
await walletInfoSource.put(currentWalletInfo.key, newWalletInfo); await walletInfoSource.put(currentWalletInfo.key, newWalletInfo);
} }
@ -141,18 +192,23 @@ class DecredWalletService extends WalletService<
Future<DecredWallet> restoreFromSeed(DecredRestoreWalletFromSeedCredentials credentials, Future<DecredWallet> restoreFromSeed(DecredRestoreWalletFromSeedCredentials credentials,
{bool? isTestnet}) async { {bool? isTestnet}) async {
await this.init(); await this.init();
final network = isTestnet == true ? testnet : mainnet;
final dirPath = await pathForWalletDir(name: credentials.walletInfo!.name, type: getType());
final config = { final config = {
"name": credentials.walletInfo!.name, "name": credentials.walletInfo!.name,
"datadir": credentials.walletInfo!.dirPath, "datadir": dirPath,
"pass": credentials.password!, "pass": credentials.password!,
"mnemonic": credentials.mnemonic, "mnemonic": credentials.mnemonic,
"net": isTestnet == true ? testnet : mainnet, "net": network,
"unsyncedaddrs": true, "unsyncedaddrs": true,
}; };
await libwallet!.createWallet(jsonEncode(config)); await libwallet!.createWallet(jsonEncode(config));
final di = DerivationInfo( final di = DerivationInfo(
derivationPath: isTestnet == true ? seedRestorePathTestnet : seedRestorePath); derivationPath: isTestnet == true ? seedRestorePathTestnet : seedRestorePath);
credentials.walletInfo!.derivationInfo = di; credentials.walletInfo!.derivationInfo = di;
credentials.walletInfo!.network = network;
credentials.walletInfo!.dirPath = "";
credentials.walletInfo!.path = "";
final wallet = DecredWallet(credentials.walletInfo!, credentials.password!, final wallet = DecredWallet(credentials.walletInfo!, credentials.password!,
this.unspentCoinsInfoSource, libwallet!, closeLibwallet); this.unspentCoinsInfoSource, libwallet!, closeLibwallet);
await wallet.init(); await wallet.init();
@ -165,17 +221,22 @@ class DecredWalletService extends WalletService<
Future<DecredWallet> restoreFromKeys(DecredRestoreWalletFromPubkeyCredentials credentials, Future<DecredWallet> restoreFromKeys(DecredRestoreWalletFromPubkeyCredentials credentials,
{bool? isTestnet}) async { {bool? isTestnet}) async {
await this.init(); await this.init();
final network = isTestnet == true ? testnet : mainnet;
final dirPath = await pathForWalletDir(name: credentials.walletInfo!.name, type: getType());
final config = { final config = {
"name": credentials.walletInfo!.name, "name": credentials.walletInfo!.name,
"datadir": credentials.walletInfo!.dirPath, "datadir": dirPath,
"pubkey": credentials.pubkey, "pubkey": credentials.pubkey,
"net": isTestnet == true ? testnet : mainnet, "net": network,
"unsyncedaddrs": true, "unsyncedaddrs": true,
}; };
await libwallet!.createWatchOnlyWallet(jsonEncode(config)); await libwallet!.createWatchOnlyWallet(jsonEncode(config));
final di = DerivationInfo( final di = DerivationInfo(
derivationPath: isTestnet == true ? pubkeyRestorePathTestnet : pubkeyRestorePath); derivationPath: isTestnet == true ? pubkeyRestorePathTestnet : pubkeyRestorePath);
credentials.walletInfo!.derivationInfo = di; credentials.walletInfo!.derivationInfo = di;
credentials.walletInfo!.network = network;
credentials.walletInfo!.dirPath = "";
credentials.walletInfo!.path = "";
final wallet = DecredWallet(credentials.walletInfo!, credentials.password!, final wallet = DecredWallet(credentials.walletInfo!, credentials.password!,
this.unspentCoinsInfoSource, libwallet!, closeLibwallet); this.unspentCoinsInfoSource, libwallet!, closeLibwallet);
await wallet.init(); await wallet.init();

View file

@ -5,13 +5,11 @@ class PendingTransactionDescription {
required this.fee, required this.fee,
required this.hash, required this.hash,
required this.hex, required this.hex,
required this.txKey,
required this.pointerAddress}); required this.pointerAddress});
final int amount; final int amount;
final int fee; final int fee;
final String hash; final String hash;
final String hex; final String hex;
final String txKey;
final int pointerAddress; final int pointerAddress;
} }

View file

@ -1,3 +1,4 @@
import 'dart:async';
import 'dart:ffi'; import 'dart:ffi';
import 'dart:isolate'; import 'dart:isolate';
@ -194,14 +195,12 @@ Future<PendingTransactionDescription> createTransactionSync(
final rFee = pendingTx.fee(); final rFee = pendingTx.fee();
final rHash = pendingTx.txid(''); final rHash = pendingTx.txid('');
final rHex = pendingTx.hex(''); final rHex = pendingTx.hex('');
final rTxKey = rHash;
return PendingTransactionDescription( return PendingTransactionDescription(
amount: rAmt, amount: rAmt,
fee: rFee, fee: rFee,
hash: rHash, hash: rHash,
hex: rHex, hex: rHex,
txKey: rTxKey,
pointerAddress: pendingTx.ffiAddress(), pointerAddress: pendingTx.ffiAddress(),
); );
} }
@ -246,7 +245,6 @@ Future<PendingTransactionDescription> createTransactionMultDest(
fee: tx.fee(), fee: tx.fee(),
hash: tx.txid(''), hash: tx.txid(''),
hex: tx.hex(''), hex: tx.hex(''),
txKey: tx.txid(''),
pointerAddress: tx.ffiAddress(), pointerAddress: tx.ffiAddress(),
); );
} }
@ -263,6 +261,7 @@ Future<String?> commitTransaction({required Wallet2PendingTransaction tx, requir
filename: '', filename: '',
overwrite: false, overwrite: false,
); );
return null;
}); });
String? error = (() { String? error = (() {
@ -285,11 +284,12 @@ Future<String?> commitTransaction({required Wallet2PendingTransaction tx, requir
if (error != null && error != "no tx keys found for this txid") { if (error != null && error != "no tx keys found for this txid") {
throw CreationTransactionException(message: error); throw CreationTransactionException(message: error);
} }
if (useUR) { unawaited(() async {
return Future.value(txCommit as String?); storeSync(force: true);
} else { await Future.delayed(Duration(seconds: 5));
return Future.value(null); storeSync(force: true);
} }());
return Future.value(txCommit);
} }
class Transaction { class Transaction {

View file

@ -31,8 +31,6 @@ class PendingMoneroTransaction with PendingTransaction {
@override @override
String get hex => pendingTransactionDescription.hex; String get hex => pendingTransactionDescription.hex;
String get txKey => pendingTransactionDescription.txKey;
@override @override
String get amountFormatted => AmountConverter.amountIntToString( String get amountFormatted => AmountConverter.amountIntToString(
CryptoCurrency.xmr, pendingTransactionDescription.amount); CryptoCurrency.xmr, pendingTransactionDescription.amount);

View file

@ -13,13 +13,17 @@ import 'package:cw_solana/solana_transaction_model.dart';
import 'package:cw_solana/spl_token.dart'; import 'package:cw_solana/spl_token.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:on_chain/solana/solana.dart'; import 'package:on_chain/solana/solana.dart';
import 'package:on_chain/solana/src/instructions/associated_token_account/constant.dart';
import 'package:on_chain/solana/src/models/pda/pda.dart'; import 'package:on_chain/solana/src/models/pda/pda.dart';
import 'package:blockchain_utils/blockchain_utils.dart'; import 'package:blockchain_utils/blockchain_utils.dart';
import 'package:on_chain/solana/src/rpc/models/models/confirmed_transaction_meta.dart';
import '.secrets.g.dart' as secrets; import '.secrets.g.dart' as secrets;
class SolanaWalletClient { class SolanaWalletClient {
final httpClient = http.Client(); final httpClient = http.Client();
SolanaRPC? _provider; SolanaRPC? _provider;
// Minimum amount in SOL to consider a transaction valid (to filter spam)
static const double minValidAmount = 0.00000003;
bool connect(Node node) { bool connect(Node node) {
try { try {
@ -155,170 +159,88 @@ class SolanaWalletClient {
if (meta == null || transaction == null) return null; if (meta == null || transaction == null) return null;
final int fee = meta.fee; final int fee = meta.fee;
final feeInSol = fee / SolanaUtils.lamportsPerSol;
final message = transaction.message; final message = transaction.message;
final instructions = message.compiledInstructions; final instructions = message.compiledInstructions;
String sender = "";
String receiver = "";
String signature = (txResponse.transaction?.signatures.isEmpty ?? true) String signature = (txResponse.transaction?.signatures.isEmpty ?? true)
? "" ? ""
: Base58Encoder.encode(txResponse.transaction!.signatures.first); : Base58Encoder.encode(txResponse.transaction!.signatures.first);
for (final instruction in instructions) { for (final instruction in instructions) {
final programId = message.accountKeys[instruction.programIdIndex]; final programId = message.accountKeys[instruction.programIdIndex];
if (programId == SystemProgramConst.programId) { if (programId == SystemProgramConst.programId ||
programId == ComputeBudgetConst.programId) {
// For native solana transactions // For native solana transactions
if (instruction.accounts.length < 2) continue;
if (txResponse.version == TransactionType.legacy) { // Get the fee payer index based on transaction type
// For legacy transfers, the fee payer (index 0) is the sender. // For legacy transfers, the first account is usually the fee payer
sender = message.accountKeys[0].address; // For versioned, the first account in instruction is usually the fee payer
final feePayerIndex =
txResponse.version == TransactionType.legacy ? 0 : instruction.accounts[0];
final senderPreBalance = meta.preBalances[0]; final transactionModel = await _parseNativeTransaction(
final senderPostBalance = meta.postBalances[0]; message: message,
final feeForTx = fee / SolanaUtils.lamportsPerSol; meta: meta,
fee: fee,
feeInSol: feeInSol,
feePayerIndex: feePayerIndex,
walletAddress: walletAddress,
signature: signature,
blockTime: blockTime,
);
// The loss on the sender's account would include both the transfer amount and the fee. if (transactionModel != null) {
// So we would subtract the fee to calculate the actual amount that was transferred (in lamports). return transactionModel;
final transferLamports = (senderPreBalance - senderPostBalance) - BigInt.from(fee);
// Next, we attempt to find the receiver by comparing the balance changes.
// (The index 0 is for the sender so we skip it.)
bool foundReceiver = false;
for (int i = 1; i < meta.preBalances.length; i++) {
// The increase in balance on the receiver account should correspond to the transfer amount we calculated earlieer.
final pre = meta.preBalances[i];
final post = meta.postBalances[i];
if ((post - pre) == transferLamports) {
receiver = message.accountKeys[i].address;
foundReceiver = true;
break;
}
}
if (!foundReceiver) {
// Optionally (and rarely), if no account shows the exact expected change,
// we set the receiver address to unknown.
receiver = "unknown";
}
final amount = transferLamports / BigInt.from(1e9);
return SolanaTransactionModel(
isOutgoingTx: sender == walletAddress,
from: sender,
to: receiver,
id: signature,
amount: amount.abs(),
programId: SystemProgramConst.programId.address,
tokenSymbol: 'SOL',
blockTimeInInt: blockTime?.toInt() ?? 0,
fee: feeForTx,
);
} else {
if (instruction.accounts.length < 2) continue;
final senderIndex = instruction.accounts[0];
final receiverIndex = instruction.accounts[1];
sender = message.accountKeys[senderIndex].address;
receiver = message.accountKeys[receiverIndex].address;
final feeForTx = fee / SolanaUtils.lamportsPerSol;
final preBalances = meta.preBalances;
final postBalances = meta.postBalances;
final amountInString =
(((preBalances[senderIndex] - postBalances[senderIndex]) / BigInt.from(1e9))
.toDouble() -
feeForTx)
.toStringAsFixed(6);
final amount = double.parse(amountInString);
return SolanaTransactionModel(
isOutgoingTx: sender == walletAddress,
from: sender,
to: receiver,
id: signature,
amount: amount.abs(),
programId: SystemProgramConst.programId.address,
tokenSymbol: 'SOL',
blockTimeInInt: blockTime?.toInt() ?? 0,
fee: feeForTx,
);
} }
} else if (programId == SPLTokenProgramConst.tokenProgramId) { } else if (programId == SPLTokenProgramConst.tokenProgramId) {
// For SPL Token transactions // For SPL Token transactions
if (instruction.accounts.length < 2) continue; if (instruction.accounts.length < 2) continue;
final preBalances = meta.preTokenBalances; final transactionModel = await _parseSPLTokenTransaction(
final postBalances = meta.postTokenBalances; message: message,
meta: meta,
double amount = 0.0; fee: fee,
bool isOutgoing = false; feeInSol: feeInSol,
String? mintAddress; instruction: instruction,
walletAddress: walletAddress,
double userPreAmount = 0.0; signature: signature,
if (preBalances != null && preBalances.isNotEmpty) { blockTime: blockTime,
for (final preBal in preBalances) { splTokenSymbol: splTokenSymbol,
if (preBal.owner?.address == walletAddress) {
userPreAmount = preBal.uiTokenAmount.uiAmount ?? 0.0;
mintAddress = preBal.mint.address;
break;
}
}
}
double userPostAmount = 0.0;
if (postBalances != null && postBalances.isNotEmpty) {
for (final postBal in postBalances) {
if (postBal.owner?.address == walletAddress) {
userPostAmount = postBal.uiTokenAmount.uiAmount ?? 0.0;
mintAddress ??= postBal.mint.address;
break;
}
}
}
final diff = userPreAmount - userPostAmount;
final rawAmount = diff.abs();
final amountInString = rawAmount.toStringAsFixed(6);
amount = double.parse(amountInString);
isOutgoing = diff > 0;
if (mintAddress == null && instruction.accounts.length >= 4) {
final mintIndex = instruction.accounts[3];
mintAddress = message.accountKeys[mintIndex].address;
}
final sender = message.accountKeys[instruction.accounts[0]].address;
final receiver = message.accountKeys[instruction.accounts[1]].address;
String? tokenSymbol = splTokenSymbol;
if (tokenSymbol == null && mintAddress != null) {
final token = await getTokenInfo(mintAddress);
tokenSymbol = token?.symbol;
}
return SolanaTransactionModel(
isOutgoingTx: isOutgoing,
from: sender,
to: receiver,
id: signature,
amount: amount,
programId: SPLTokenProgramConst.tokenProgramId.address,
blockTimeInInt: blockTime?.toInt() ?? 0,
tokenSymbol: tokenSymbol ?? '',
fee: fee / SolanaUtils.lamportsPerSol,
); );
if (transactionModel != null) {
return transactionModel;
}
} else if (programId == AssociatedTokenAccountProgramConst.associatedTokenProgramId) {
// For ATA program, we need to check if this is a create account transaction
// or if it's part of a normal token transfer
// We skip this transaction if this is the only instruction (this means that it's a create account transaction)
if (instructions.length == 1) {
return null;
}
// We look for a token transfer instruction in the same transaction
bool hasTokenTransfer = false;
for (final otherInstruction in instructions) {
final otherProgramId = message.accountKeys[otherInstruction.programIdIndex];
if (otherProgramId == SPLTokenProgramConst.tokenProgramId) {
hasTokenTransfer = true;
break;
}
}
// If there's no token transfer instruction, it means this is just an ATA creation transaction
if (!hasTokenTransfer) {
return null;
}
continue;
} else { } else {
return null; return null;
} }
@ -330,6 +252,144 @@ class SolanaWalletClient {
return null; return null;
} }
Future<SolanaTransactionModel?> _parseNativeTransaction({
required VersionedMessage message,
required ConfirmedTransactionMeta meta,
required int fee,
required double feeInSol,
required int feePayerIndex,
required String walletAddress,
required String signature,
required BigInt? blockTime,
}) async {
// Calculate total balance changes across all accounts
BigInt totalBalanceChange = BigInt.zero;
String? sender;
String? receiver;
for (int i = 0; i < meta.preBalances.length; i++) {
final preBalance = meta.preBalances[i];
final postBalance = meta.postBalances[i];
final balanceChange = preBalance - postBalance;
if (balanceChange > BigInt.zero) {
// This account sent funds
sender = message.accountKeys[i].address;
totalBalanceChange += balanceChange;
} else if (balanceChange < BigInt.zero) {
// This account received funds
receiver = message.accountKeys[i].address;
}
}
// We subtract the fee from total balance change if the fee payer is the sender
if (sender == message.accountKeys[feePayerIndex].address) {
totalBalanceChange -= BigInt.from(fee);
}
if (sender == null || receiver == null) {
return null;
}
final amount = totalBalanceChange / BigInt.from(1e9);
final amountInSol = amount.abs().toDouble();
// Skip transactions with very small amounts (likely spam)
if (amountInSol < minValidAmount) {
return null;
}
return SolanaTransactionModel(
isOutgoingTx: sender == walletAddress,
from: sender,
to: receiver,
id: signature,
amount: amountInSol,
programId: SystemProgramConst.programId.address,
tokenSymbol: 'SOL',
blockTimeInInt: blockTime?.toInt() ?? 0,
fee: feeInSol,
);
}
Future<SolanaTransactionModel?> _parseSPLTokenTransaction({
required VersionedMessage message,
required ConfirmedTransactionMeta meta,
required int fee,
required double feeInSol,
required CompiledInstruction instruction,
required String walletAddress,
required String signature,
required BigInt? blockTime,
String? splTokenSymbol,
}) async {
final preBalances = meta.preTokenBalances;
final postBalances = meta.postTokenBalances;
double amount = 0.0;
bool isOutgoing = false;
String? mintAddress;
double userPreAmount = 0.0;
if (preBalances != null && preBalances.isNotEmpty) {
for (final preBal in preBalances) {
if (preBal.owner?.address == walletAddress) {
userPreAmount = preBal.uiTokenAmount.uiAmount ?? 0.0;
mintAddress = preBal.mint.address;
break;
}
}
}
double userPostAmount = 0.0;
if (postBalances != null && postBalances.isNotEmpty) {
for (final postBal in postBalances) {
if (postBal.owner?.address == walletAddress) {
userPostAmount = postBal.uiTokenAmount.uiAmount ?? 0.0;
mintAddress ??= postBal.mint.address;
break;
}
}
}
final diff = userPreAmount - userPostAmount;
final rawAmount = diff.abs();
final amountInString = rawAmount.toStringAsFixed(6);
amount = double.parse(amountInString);
isOutgoing = diff > 0;
if (mintAddress == null && instruction.accounts.length >= 4) {
final mintIndex = instruction.accounts[3];
mintAddress = message.accountKeys[mintIndex].address;
}
final sender = message.accountKeys[instruction.accounts[0]].address;
final receiver = message.accountKeys[instruction.accounts[1]].address;
String? tokenSymbol = splTokenSymbol;
if (tokenSymbol == null && mintAddress != null) {
final token = await getTokenInfo(mintAddress);
tokenSymbol = token?.symbol;
}
return SolanaTransactionModel(
isOutgoingTx: isOutgoing,
from: sender,
to: receiver,
id: signature,
amount: amount,
programId: SPLTokenProgramConst.tokenProgramId.address,
blockTimeInInt: blockTime?.toInt() ?? 0,
tokenSymbol: tokenSymbol ?? '',
fee: feeInSol,
);
}
/// Load the Address's transactions into the account /// Load the Address's transactions into the account
Future<List<SolanaTransactionModel>> fetchTransactions( Future<List<SolanaTransactionModel>> fetchTransactions(
SolAddress address, { SolAddress address, {
@ -381,11 +441,13 @@ class SolanaWalletClient {
transactions.addAll(parsedTransactions.whereType<SolanaTransactionModel>().toList()); transactions.addAll(parsedTransactions.whereType<SolanaTransactionModel>().toList());
// Calling the callback after each batch is processed, therefore passing the current list of transactions. // Only update UI if we have new valid transactions
onUpdate(List<SolanaTransactionModel>.from(transactions)); if (parsedTransactions.isNotEmpty) {
onUpdate(List<SolanaTransactionModel>.from(transactions));
}
if (i + batchSize < signatures.length) { if (i + batchSize < signatures.length) {
await Future.delayed(const Duration(milliseconds: 500)); await Future.delayed(const Duration(milliseconds: 300));
} }
} }
@ -732,19 +794,24 @@ class SolanaWalletClient {
SolanaAccountInfo? accountInfo; SolanaAccountInfo? accountInfo;
try { try {
accountInfo = await _provider!.request( accountInfo = await _provider!.request(
SolanaRPCGetAccountInfo(account: associatedTokenAccount.address), SolanaRPCGetAccountInfo(
account: associatedTokenAccount.address,
commitment: Commitment.confirmed,
),
); );
} catch (e) { } catch (e) {
accountInfo = null; accountInfo = null;
} }
// If aacountInfo is null, signifies that the associatedTokenAccount has only been created locally and not been broadcasted to the blockchain. // If account exists, we return the associated token account
if (accountInfo != null) return associatedTokenAccount; if (accountInfo != null) return associatedTokenAccount;
if (!shouldCreateATA) return null; if (!shouldCreateATA) return null;
final payerAddress = payerPrivateKey.publicKey().toAddress();
final createAssociatedTokenAccount = AssociatedTokenAccountProgram.associatedTokenAccount( final createAssociatedTokenAccount = AssociatedTokenAccountProgram.associatedTokenAccount(
payer: payerPrivateKey.publicKey().toAddress(), payer: payerAddress,
associatedToken: associatedTokenAccount.address, associatedToken: associatedTokenAccount.address,
owner: ownerAddress, owner: ownerAddress,
mint: mintAddress, mint: mintAddress,
@ -753,19 +820,23 @@ class SolanaWalletClient {
final blockhash = await _getLatestBlockhash(Commitment.confirmed); final blockhash = await _getLatestBlockhash(Commitment.confirmed);
final transaction = SolanaTransaction( final transaction = SolanaTransaction(
payerKey: payerPrivateKey.publicKey().toAddress(), payerKey: payerAddress,
instructions: [createAssociatedTokenAccount], instructions: [createAssociatedTokenAccount],
recentBlockhash: blockhash, recentBlockhash: blockhash,
type: TransactionType.v0,
); );
transaction.sign([payerPrivateKey]); final serializedTransaction = await _signTransactionInternal(
ownerPrivateKey: payerPrivateKey,
transaction: transaction,
);
await sendTransaction( await sendTransaction(
serializedTransaction: transaction.serializeString(), serializedTransaction: serializedTransaction,
commitment: Commitment.confirmed, commitment: Commitment.confirmed,
); );
// Delay for propagation on the blockchain for newly created associated token addresses // Wait for confirmation
await Future.delayed(const Duration(seconds: 2)); await Future.delayed(const Duration(seconds: 2));
return associatedTokenAccount; return associatedTokenAccount;

View file

@ -110,7 +110,7 @@ class $BackupService {
} }
Future<void> verifyWallets() async { Future<void> verifyWallets() async {
final walletInfoSource = await _reloadHiveWalletInfoBox(); final walletInfoSource = await reloadHiveWalletInfoBox();
correctWallets = correctWallets =
walletInfoSource.values.where((info) => availableWalletTypes.contains(info.type)).toList(); walletInfoSource.values.where((info) => availableWalletTypes.contains(info.type)).toList();
@ -119,7 +119,7 @@ class $BackupService {
} }
} }
Future<Box<WalletInfo>> _reloadHiveWalletInfoBox() async { Future<Box<WalletInfo>> reloadHiveWalletInfoBox() async {
final appDir = await getAppDir(); final appDir = await getAppDir();
await CakeHive.close(); await CakeHive.close();
CakeHive.init(appDir.path); CakeHive.init(appDir.path);
@ -288,13 +288,15 @@ class $BackupService {
return { return {
'name': walletInfo.name, 'name': walletInfo.name,
'type': walletInfo.type.toString(), 'type': walletInfo.type.toString(),
'password': await keyService.getWalletPassword(walletName: walletInfo.name) 'password': await keyService.getWalletPassword(walletName: walletInfo.name),
'hardwareWalletType': walletInfo.hardwareWalletType?.index,
}; };
} catch (e) { } catch (e) {
return { return {
'name': walletInfo.name, 'name': walletInfo.name,
'type': walletInfo.type.toString(), 'type': walletInfo.type.toString(),
'password': '' 'password': '',
'hardwareWalletType': walletInfo.hardwareWalletType?.index,
}; };
} }
})); }));

View file

@ -10,6 +10,7 @@ import 'package:cake_wallet/utils/package_info.dart';
import 'package:crypto/crypto.dart'; import 'package:crypto/crypto.dart';
import 'package:cw_core/root_dir.dart'; import 'package:cw_core/root_dir.dart';
import 'package:cw_core/utils/print_verbose.dart'; import 'package:cw_core/utils/print_verbose.dart';
import 'package:cw_core/wallet_info.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
enum BackupVersion { enum BackupVersion {
@ -305,6 +306,7 @@ class BackupServiceV3 extends $BackupService {
// Continue importing the backup the old way // Continue importing the backup the old way
await super.verifyWallets(); await super.verifyWallets();
await verifyHardwareWallets(password);
await super.importKeychainDumpV2(password); await super.importKeychainDumpV2(password);
await super.importPreferencesDump(); await super.importPreferencesDump();
await super.importTransactionDescriptionDump(); await super.importTransactionDescriptionDump();
@ -313,6 +315,39 @@ class BackupServiceV3 extends $BackupService {
decryptedData.deleteSync(); decryptedData.deleteSync();
} }
Future<void> verifyHardwareWallets(String password,
{String keychainSalt = secrets.backupKeychainSalt}) async {
final walletInfoSource = await reloadHiveWalletInfoBox();
final appDir = await getAppDir();
final keychainDumpFile = File('${appDir.path}/~_keychain_dump');
final decryptedKeychainDumpFileData = await decryptV2(
keychainDumpFile.readAsBytesSync(), '$keychainSalt$password');
final keychainJSON = json.decode(utf8.decode(decryptedKeychainDumpFileData))
as Map<String, dynamic>;
final keychainWalletsInfo = keychainJSON['wallets'] as List;
final expectedHardwareWallets = keychainWalletsInfo
.where((e) =>
(e as Map<String, dynamic>).containsKey("hardwareWalletType") &&
e["hardwareWalletType"] != null)
.toList();
for (final expectedHardwareWallet in expectedHardwareWallets) {
final info = expectedHardwareWallet as Map<String, dynamic>;
final actualWalletInfo = walletInfoSource.values
.where((e) =>
e.name == info['name'] && e.type.toString() == info['type'])
.firstOrNull;
if (actualWalletInfo != null &&
info["hardwareWalletType"] !=
actualWalletInfo.hardwareWalletType?.index) {
actualWalletInfo.hardwareWalletType =
HardwareWalletType.values[info["hardwareWalletType"] as int];
await actualWalletInfo.save();
}
}
}
Future<File> exportBackupFileV3(String password, {String nonce = secrets.backupSalt}) async { Future<File> exportBackupFileV3(String password, {String nonce = secrets.backupSalt}) async {
final metadata = BackupMetadata( final metadata = BackupMetadata(
version: BackupVersion.v3, version: BackupVersion.v3,

View file

@ -5,7 +5,7 @@ part 'transaction_description.g.dart';
@HiveType(typeId: TransactionDescription.typeId) @HiveType(typeId: TransactionDescription.typeId)
class TransactionDescription extends HiveObject { class TransactionDescription extends HiveObject {
TransactionDescription({required this.id, this.recipientAddress, this.transactionNote}); TransactionDescription({required this.id, this.recipientAddress, this.transactionNote, this.transactionKey});
static const typeId = TRANSACTION_TYPE_ID; static const typeId = TRANSACTION_TYPE_ID;
static const boxName = 'TransactionDescriptions'; static const boxName = 'TransactionDescriptions';
@ -20,12 +20,16 @@ class TransactionDescription extends HiveObject {
@HiveField(2) @HiveField(2)
String? transactionNote; String? transactionNote;
@HiveField(3)
String? transactionKey;
String get note => transactionNote ?? ''; String get note => transactionNote ?? '';
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
'id': id, 'id': id,
'recipientAddress': recipientAddress, 'recipientAddress': recipientAddress,
'transactionNote': transactionNote, 'transactionNote': transactionNote,
'transactionKey': transactionKey,
}; };
factory TransactionDescription.fromJson(Map<String, dynamic> json) { factory TransactionDescription.fromJson(Map<String, dynamic> json) {
@ -33,6 +37,7 @@ class TransactionDescription extends HiveObject {
id: json['id'] as String, id: json['id'] as String,
recipientAddress: json['recipientAddress'] as String?, recipientAddress: json['recipientAddress'] as String?,
transactionNote: json['transactionNote'] as String?, transactionNote: json['transactionNote'] as String?,
transactionKey: json['transactionKey'] as String?,
); );
} }
} }

View file

@ -230,6 +230,7 @@ class TrocadorExchangeProvider extends ExchangeProvider {
final providerName = responseJSON['provider'] as String; final providerName = responseJSON['provider'] as String;
final amount = responseJSON['amount_from']?.toString(); final amount = responseJSON['amount_from']?.toString();
final receiveAmount = responseJSON['amount_to']?.toString(); final receiveAmount = responseJSON['amount_to']?.toString();
final addressProviderMemo = responseJSON['address_provider_memo'] as String?;
return Trade( return Trade(
id: id, id: id,
@ -247,6 +248,7 @@ class TrocadorExchangeProvider extends ExchangeProvider {
receiveAmount: receiveAmount ?? request.toAmount, receiveAmount: receiveAmount ?? request.toAmount,
payoutAddress: payoutAddress, payoutAddress: payoutAddress,
isSendAll: isSendAll, isSendAll: isSendAll,
extraId: addressProviderMemo,
); );
} }

View file

@ -365,7 +365,7 @@ class CWMonero extends Monero {
@override @override
Map<String, String> pendingTransactionInfo(Object transaction) { Map<String, String> pendingTransactionInfo(Object transaction) {
final ptx = transaction as PendingMoneroTransaction; final ptx = transaction as PendingMoneroTransaction;
return {'id': ptx.id, 'hex': ptx.hex, 'key': ptx.txKey}; return {'id': ptx.id, 'hex': ptx.hex};
} }
@override @override

View file

@ -1,3 +1,4 @@
import 'package:cake_wallet/wallet_type_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:qr_flutter/qr_flutter.dart' as qr; import 'package:qr_flutter/qr_flutter.dart' as qr;
@ -8,7 +9,7 @@ class QrImage extends StatelessWidget {
this.backgroundColor = Colors.white, this.backgroundColor = Colors.white,
this.size = 100.0, this.size = 100.0,
this.version, this.version,
this.errorCorrectionLevel = qr.QrErrorCorrectLevel.L, this.errorCorrectionLevel = qr.QrErrorCorrectLevel.H,
}); });
final double size; final double size;
@ -28,6 +29,7 @@ class QrImage extends StatelessWidget {
foregroundColor: foregroundColor, foregroundColor: foregroundColor,
backgroundColor: backgroundColor, backgroundColor: backgroundColor,
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
embeddedImage: AssetImage('assets/images/qr-cake.png'),
); );
} }
} }

View file

@ -96,11 +96,12 @@ abstract class ExchangeTradeViewModelBase with Store {
bool isSendable; bool isSendable;
@computed @computed
String get extraInfo => trade.from == CryptoCurrency.xlm String get extraInfo => switch (trade.from) {
? '\n\n' + S.current.xlm_extra_info CryptoCurrency.xlm => '\n\n' + S.current.xlm_extra_info,
: trade.from == CryptoCurrency.xrp CryptoCurrency.xrp => '\n\n' + S.current.xrp_extra_info,
? '\n\n' + S.current.xrp_extra_info CryptoCurrency.ton => '\n\n' + S.current.ton_extra_info,
: ''; _ => ''
};
@computed @computed
String get pendingTransactionFiatAmountValueFormatted => sendViewModel.isFiatDisabled String get pendingTransactionFiatAmountValueFormatted => sendViewModel.isFiatDisabled
@ -203,12 +204,12 @@ abstract class ExchangeTradeViewModelBase with Store {
]); ]);
if (trade.extraId != null) { if (trade.extraId != null) {
final shouldAddExtraId = trade.from == CryptoCurrency.xrp || trade.from == CryptoCurrency.xlm; final shouldAddExtraId = trade.from == CryptoCurrency.xrp || trade.from == CryptoCurrency.xlm || trade.from == CryptoCurrency.ton;
if (shouldAddExtraId) { if (shouldAddExtraId) {
final title = trade.from == CryptoCurrency.xrp final title = trade.from == CryptoCurrency.xrp
? S.current.destination_tag ? S.current.destination_tag
: trade.from == CryptoCurrency.xlm : trade.from == CryptoCurrency.xlm || trade.from == CryptoCurrency.ton
? S.current.memo ? S.current.memo
: S.current.extra_id; : S.current.extra_id;
@ -217,13 +218,8 @@ abstract class ExchangeTradeViewModelBase with Store {
title: title, title: title,
data: '${trade.extraId}', data: '${trade.extraId}',
isCopied: true, isCopied: true,
isReceiveDetail: (trade.from == CryptoCurrency.xrp || trade.from == CryptoCurrency.xlm) isReceiveDetail: !shouldAddExtraId,
? false isExternalSendDetail: shouldAddExtraId
: true,
isExternalSendDetail:
(trade.from == CryptoCurrency.xrp || trade.from == CryptoCurrency.xlm)
? true
: false,
), ),
); );
} }

View file

@ -590,16 +590,25 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
} }
if (pendingTransaction!.id.isNotEmpty) { if (pendingTransaction!.id.isNotEmpty) {
TransactionInfo? tx;
if (walletType == WalletType.monero) {
await Future.delayed(Duration(milliseconds: 450));
await wallet.fetchTransactions();
final txhistory = monero!.getTransactionHistory(wallet);
tx = txhistory.transactions.values.last;
}
final descriptionKey = '${pendingTransaction!.id}_${wallet.walletAddresses.primaryAddress}'; final descriptionKey = '${pendingTransaction!.id}_${wallet.walletAddresses.primaryAddress}';
_settingsStore.shouldSaveRecipientAddress _settingsStore.shouldSaveRecipientAddress
? await transactionDescriptionBox.add(TransactionDescription( ? await transactionDescriptionBox.add(TransactionDescription(
id: descriptionKey, id: descriptionKey,
recipientAddress: address, recipientAddress: address,
transactionNote: note, transactionNote: note,
transactionKey: tx?.additionalInfo["key"] as String?,
)) ))
: await transactionDescriptionBox.add(TransactionDescription( : await transactionDescriptionBox.add(TransactionDescription(
id: descriptionKey, id: descriptionKey,
transactionNote: note, transactionNote: note,
transactionKey: tx?.additionalInfo["key"] as String?,
)); ));
} }
final sharedPreferences = await SharedPreferences.getInstance(); final sharedPreferences = await SharedPreferences.getInstance();
@ -767,8 +776,15 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
return S.current.solana_no_associated_token_account_exception; return S.current.solana_no_associated_token_account_exception;
} }
if (errorMessage.contains('insufficient funds for rent')) { if (errorMessage.contains('insufficient funds for rent') &&
return S.current.insufficientFundsForRentError; errorMessage.contains('Transaction simulation failed') &&
errorMessage.contains('account_index')) {
final accountIndexMatch = RegExp(r'account_index: (\d+)').firstMatch(errorMessage);
if (accountIndexMatch != null) {
return int.parse(accountIndexMatch.group(1)!) == 0
? S.current.insufficientFundsForRentError
: S.current.insufficientFundsForRentErrorReceiver;
}
} }
return errorMessage; return errorMessage;

View file

@ -240,7 +240,13 @@ abstract class TransactionDetailsViewModelBase with Store {
} }
void _addMoneroListItems(TransactionInfo tx, DateFormat dateFormat) { void _addMoneroListItems(TransactionInfo tx, DateFormat dateFormat) {
final key = tx.additionalInfo['key'] as String?; final descriptionKey = '${transactionInfo.txHash}_${wallet.walletAddresses.primaryAddress}';
final description = transactionDescriptionBox.values.firstWhere(
(val) => val.id == descriptionKey || val.id == transactionInfo.txHash,
orElse: () => TransactionDescription(id: descriptionKey));
final key = tx.additionalInfo['key'] as String? ?? description.transactionKey;
final accountIndex = tx.additionalInfo['accountIndex'] as int; final accountIndex = tx.additionalInfo['accountIndex'] as int;
final addressIndex = tx.additionalInfo['addressIndex'] as int; final addressIndex = tx.additionalInfo['addressIndex'] as int;
final feeFormatted = tx.feeFormatted(); final feeFormatted = tx.feeFormatted();

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "ليس لديك ما يكفي من SOL لتغطية المعاملة ورسوم المعاملات الخاصة بها. يرجى إضافة المزيد من SOL إلى محفظتك أو تقليل كمية SOL التي ترسلها.", "insufficient_lamport_for_tx": "ليس لديك ما يكفي من SOL لتغطية المعاملة ورسوم المعاملات الخاصة بها. يرجى إضافة المزيد من SOL إلى محفظتك أو تقليل كمية SOL التي ترسلها.",
"insufficient_lamports": "ليس لديك ما يكفي من SOL لتغطية المعاملة ورسوم المعاملات الخاصة بها. تحتاج على الأقل ${solValueNeeded} sol. يرجى إضافة المزيد من sol إلى محفظتك أو تقليل مبلغ sol الذي ترسله", "insufficient_lamports": "ليس لديك ما يكفي من SOL لتغطية المعاملة ورسوم المعاملات الخاصة بها. تحتاج على الأقل ${solValueNeeded} sol. يرجى إضافة المزيد من sol إلى محفظتك أو تقليل مبلغ sol الذي ترسله",
"insufficientFundsForRentError": "ليس لديك ما يكفي من SOL لتغطية رسوم المعاملة والإيجار للحساب. يرجى إضافة المزيد من sol إلى محفظتك أو تقليل مبلغ sol الذي ترسله", "insufficientFundsForRentError": "ليس لديك ما يكفي من SOL لتغطية رسوم المعاملة والإيجار للحساب. يرجى إضافة المزيد من sol إلى محفظتك أو تقليل مبلغ sol الذي ترسله",
"insufficientFundsForRentErrorReceiver": "لا يحتوي حساب المتلقي على ما يكفي من SOL لتغطية الإيجار. يرجى اطلب من المتلقي إضافة المزيد من SOL إلى حسابه.",
"introducing_cake_pay": "نقدم لكم Cake Pay!", "introducing_cake_pay": "نقدم لكم Cake Pay!",
"invalid_input": "مدخل غير صالح", "invalid_input": "مدخل غير صالح",
"invalid_password": "رمز مرور خاطئ", "invalid_password": "رمز مرور خاطئ",
@ -903,6 +904,7 @@
"token_name": "اسم الرمز ، على سبيل المثال: Tether", "token_name": "اسم الرمز ، على سبيل المثال: Tether",
"token_symbol": "رمز العملة ، على سبيل المثال: USDT", "token_symbol": "رمز العملة ، على سبيل المثال: USDT",
"tokenID": "ﻒﻳﺮﻌﺗ ﺔﻗﺎﻄﺑ", "tokenID": "ﻒﻳﺮﻌﺗ ﺔﻗﺎﻄﺑ",
"ton_extra_info": "يرجى عدم نسيان تحديد معرف المذكرة أثناء إرسال معاملة TON للتبادل",
"tor_connection": "ﺭﻮﺗ ﻝﺎﺼﺗﺍ", "tor_connection": "ﺭﻮﺗ ﻝﺎﺼﺗﺍ",
"tor_only": "Tor فقط", "tor_only": "Tor فقط",
"total": "المجموع", "total": "المجموع",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "Нямате достатъчно SOL, за да покриете транзакцията и таксата му за транзакция. Моля, добавете повече SOL към портфейла си или намалете сумата на SOL, която изпращате.", "insufficient_lamport_for_tx": "Нямате достатъчно SOL, за да покриете транзакцията и таксата му за транзакция. Моля, добавете повече SOL към портфейла си или намалете сумата на SOL, която изпращате.",
"insufficient_lamports": "Нямате достатъчно SOL, за да покриете транзакцията и таксата му за транзакция. Имате нужда от поне ${solValueNeeded} sol. Моля, добавете повече SOL към портфейла си или намалете сумата на SOL, която изпращате", "insufficient_lamports": "Нямате достатъчно SOL, за да покриете транзакцията и таксата му за транзакция. Имате нужда от поне ${solValueNeeded} sol. Моля, добавете повече SOL към портфейла си или намалете сумата на SOL, която изпращате",
"insufficientFundsForRentError": "Нямате достатъчно SOL, за да покриете таксата за транзакцията и наемането на сметката. Моля, добавете повече SOL към портфейла си или намалете сумата на SOL, която изпращате", "insufficientFundsForRentError": "Нямате достатъчно SOL, за да покриете таксата за транзакцията и наемането на сметката. Моля, добавете повече SOL към портфейла си или намалете сумата на SOL, която изпращате",
"insufficientFundsForRentErrorReceiver": "Сметката на приемника няма достатъчно SOL, за да покрие наема. Моля, помолете приемника да добави още SOL към техния акаунт.",
"introducing_cake_pay": "Запознайте се с Cake Pay!", "introducing_cake_pay": "Запознайте се с Cake Pay!",
"invalid_input": "Невалиден вход", "invalid_input": "Невалиден вход",
"invalid_password": "Невалидна парола", "invalid_password": "Невалидна парола",
@ -903,6 +904,7 @@
"token_name": "Име на токена, напр.: Tether", "token_name": "Име на токена, напр.: Tether",
"token_symbol": "Символ на токена, напр.: USDT", "token_symbol": "Символ на токена, напр.: USDT",
"tokenID": "документ за самоличност", "tokenID": "документ за самоличност",
"ton_extra_info": "Моля, не забравяйте да посочите идентификационния номер на бележката, докато изпращате транзакцията TON за борсата",
"tor_connection": "Tor връзка", "tor_connection": "Tor връзка",
"tor_only": "Само чрез Tor", "tor_only": "Само чрез Tor",
"total": "Обща сума", "total": "Обща сума",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "Nemáte dostatek SOL na pokrytí transakce a jejího transakčního poplatku. Laskavě přidejte do své peněženky více solu nebo snižte množství Sol, kterou odesíláte.", "insufficient_lamport_for_tx": "Nemáte dostatek SOL na pokrytí transakce a jejího transakčního poplatku. Laskavě přidejte do své peněženky více solu nebo snižte množství Sol, kterou odesíláte.",
"insufficient_lamports": "Nemáte dostatek SOL na pokrytí transakce a jejího transakčního poplatku. Potřebujete alespoň ${solValueNeeded} sol. Laskavě přidejte do své peněženky více SOL nebo snižte množství Sol, kterou odesíláte", "insufficient_lamports": "Nemáte dostatek SOL na pokrytí transakce a jejího transakčního poplatku. Potřebujete alespoň ${solValueNeeded} sol. Laskavě přidejte do své peněženky více SOL nebo snižte množství Sol, kterou odesíláte",
"insufficientFundsForRentError": "Nemáte dostatek SOL na pokrytí transakčního poplatku a nájemného za účet. Laskavě přidejte do své peněženky více SOL nebo snižte množství Sol, kterou odesíláte", "insufficientFundsForRentError": "Nemáte dostatek SOL na pokrytí transakčního poplatku a nájemného za účet. Laskavě přidejte do své peněženky více SOL nebo snižte množství Sol, kterou odesíláte",
"insufficientFundsForRentErrorReceiver": "Účet přijímače nemá dostatek SOL na pokrytí nájemného. Požádejte přijímač, aby na jejich účet přidal další SOL.",
"introducing_cake_pay": "Představujeme Cake Pay!", "introducing_cake_pay": "Představujeme Cake Pay!",
"invalid_input": "Neplatný vstup", "invalid_input": "Neplatný vstup",
"invalid_password": "Neplatné heslo", "invalid_password": "Neplatné heslo",
@ -903,6 +904,7 @@
"token_name": "Název tokenu např.: Tether", "token_name": "Název tokenu např.: Tether",
"token_symbol": "Symbol tokenu, např.: USDT", "token_symbol": "Symbol tokenu, např.: USDT",
"tokenID": "ID", "tokenID": "ID",
"ton_extra_info": "Při odeslání TON transakce pro výměnu nezapomeňte zadat ID Memo ID",
"tor_connection": "Připojení Tor", "tor_connection": "Připojení Tor",
"tor_only": "Pouze Tor", "tor_only": "Pouze Tor",
"total": "Celkový", "total": "Celkový",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "Sie haben nicht genug SOL, um die Transaktion und ihre Transaktionsgebühr abzudecken. Bitte fügen Sie Ihrer Wallet mehr Sol hinzu oder reduzieren Sie die SOL-Menge, die Sie senden.", "insufficient_lamport_for_tx": "Sie haben nicht genug SOL, um die Transaktion und ihre Transaktionsgebühr abzudecken. Bitte fügen Sie Ihrer Wallet mehr Sol hinzu oder reduzieren Sie die SOL-Menge, die Sie senden.",
"insufficient_lamports": "Sie haben nicht genug SOL, um die Transaktion und ihre Transaktionsgebühr abzudecken. Sie brauchen mindestens ${solValueNeeded} Sol. Bitte fügen Sie mehr Sol zu Ihrer Wallet hinzu oder reduzieren Sie den von Ihnen gesendeten Sol-Betrag", "insufficient_lamports": "Sie haben nicht genug SOL, um die Transaktion und ihre Transaktionsgebühr abzudecken. Sie brauchen mindestens ${solValueNeeded} Sol. Bitte fügen Sie mehr Sol zu Ihrer Wallet hinzu oder reduzieren Sie den von Ihnen gesendeten Sol-Betrag",
"insufficientFundsForRentError": "Sie haben nicht genug SOL, um die Transaktionsgebühr und die Miete für das Konto zu decken. Bitte fügen Sie mehr Sol zu Ihrer Wallet hinzu oder reduzieren Sie den von Ihnen gesendeten Sol-Betrag", "insufficientFundsForRentError": "Sie haben nicht genug SOL, um die Transaktionsgebühr und die Miete für das Konto zu decken. Bitte fügen Sie mehr Sol zu Ihrer Wallet hinzu oder reduzieren Sie den von Ihnen gesendeten Sol-Betrag",
"insufficientFundsForRentErrorReceiver": "Das Konto des Empfängers hat nicht genug SOL, um die Miete zu decken. Bitte bitten Sie den Empfänger, ihr Konto mehr Sol hinzuzufügen.",
"introducing_cake_pay": "Einführung von Cake Pay!", "introducing_cake_pay": "Einführung von Cake Pay!",
"invalid_input": "Ungültige Eingabe", "invalid_input": "Ungültige Eingabe",
"invalid_password": "Ungültiges Passwort", "invalid_password": "Ungültiges Passwort",
@ -904,6 +905,7 @@
"token_name": "Token-Name, z. B.: Tether", "token_name": "Token-Name, z. B.: Tether",
"token_symbol": "Token-Symbol, z. B.: USDT", "token_symbol": "Token-Symbol, z. B.: USDT",
"tokenID": "AUSWEIS", "tokenID": "AUSWEIS",
"ton_extra_info": "Bitte vergessen Sie nicht, die Memo -ID anzugeben, während Sie die TON -Transaktion für den Austausch senden",
"tor_connection": "Tor-Verbindung", "tor_connection": "Tor-Verbindung",
"tor_only": "Nur Tor", "tor_only": "Nur Tor",
"total": "Gesamt", "total": "Gesamt",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "You do not have enough SOL to cover the transaction and its transaction fee. Kindly add more SOL to your wallet or reduce the SOL amount you\\'re sending.", "insufficient_lamport_for_tx": "You do not have enough SOL to cover the transaction and its transaction fee. Kindly add more SOL to your wallet or reduce the SOL amount you\\'re sending.",
"insufficient_lamports": "You do not have enough SOL to cover the transaction and its transaction fee. You need at least ${solValueNeeded} SOL. Kindly add more SOL to your wallet or reduce the SOL amount you\\'re sending", "insufficient_lamports": "You do not have enough SOL to cover the transaction and its transaction fee. You need at least ${solValueNeeded} SOL. Kindly add more SOL to your wallet or reduce the SOL amount you\\'re sending",
"insufficientFundsForRentError": "You do not have enough SOL to cover the transaction fee and rent for the account. Kindly add more SOL to your wallet or reduce the SOL amount you\\'re sending", "insufficientFundsForRentError": "You do not have enough SOL to cover the transaction fee and rent for the account. Kindly add more SOL to your wallet or reduce the SOL amount you\\'re sending",
"insufficientFundsForRentErrorReceiver": "The receiver's account does not have enough SOL to cover the rent. Please ask the receiver to add more SOL to their account.",
"introducing_cake_pay": "Introducing Cake Pay!", "introducing_cake_pay": "Introducing Cake Pay!",
"invalid_input": "Invalid input", "invalid_input": "Invalid input",
"invalid_password": "Invalid password", "invalid_password": "Invalid password",
@ -904,6 +905,7 @@
"token_name": "Token name eg: Tether", "token_name": "Token name eg: Tether",
"token_symbol": "Token symbol eg: USDT", "token_symbol": "Token symbol eg: USDT",
"tokenID": "ID", "tokenID": "ID",
"ton_extra_info": "Please dont forget to specify the Memo ID while sending the TON transaction for the exchange",
"tor_connection": "Tor connection", "tor_connection": "Tor connection",
"tor_only": "Tor only", "tor_only": "Tor only",
"total": "Total", "total": "Total",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "No tienes suficiente SOL para cubrir la transacción y su tarifa de transacción. Por favor, agrega más SOL a su billetera o reduce la cantidad de sol que está enviando.", "insufficient_lamport_for_tx": "No tienes suficiente SOL para cubrir la transacción y su tarifa de transacción. Por favor, agrega más SOL a su billetera o reduce la cantidad de sol que está enviando.",
"insufficient_lamports": "No tienes suficiente SOL para cubrir la transacción y su tarifa de transacción. Necesita al menos ${solValueNeeded} sol. Por favor, agrega más sol a su billetera o reduzca la cantidad de sol que está enviando", "insufficient_lamports": "No tienes suficiente SOL para cubrir la transacción y su tarifa de transacción. Necesita al menos ${solValueNeeded} sol. Por favor, agrega más sol a su billetera o reduzca la cantidad de sol que está enviando",
"insufficientFundsForRentError": "No tienes suficiente SOL para cubrir la tarifa de transacción y alquilar para la cuenta. Por favor, agrega más sol a su billetera o reduce la cantidad de sol que está enviando", "insufficientFundsForRentError": "No tienes suficiente SOL para cubrir la tarifa de transacción y alquilar para la cuenta. Por favor, agrega más sol a su billetera o reduce la cantidad de sol que está enviando",
"insufficientFundsForRentErrorReceiver": "La cuenta del receptor no tiene suficiente SOL para cubrir el alquiler. Pida al receptor que agregue más SOL a su cuenta.",
"introducing_cake_pay": "¡Presentamos Cake Pay!", "introducing_cake_pay": "¡Presentamos Cake Pay!",
"invalid_input": "Entrada inválida", "invalid_input": "Entrada inválida",
"invalid_password": "Contraseña invalida", "invalid_password": "Contraseña invalida",
@ -904,6 +905,7 @@
"token_name": "Nombre del token, por ejemplo: Tether", "token_name": "Nombre del token, por ejemplo: Tether",
"token_symbol": "Símbolo de token, por ejemplo: USDT", "token_symbol": "Símbolo de token, por ejemplo: USDT",
"tokenID": "IDENTIFICACIÓN", "tokenID": "IDENTIFICACIÓN",
"ton_extra_info": "No olvide especificar el ID de memo mientras envía la transacción TON para el intercambio",
"tor_connection": "conexión tor", "tor_connection": "conexión tor",
"tor_only": "solo Tor", "tor_only": "solo Tor",
"total": "Total", "total": "Total",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "Vous n'avez pas assez de sol pour couvrir la transaction et ses frais de transaction. Veuillez ajouter plus de Sol à votre portefeuille ou réduire la quantité de Sol que vous envoyez.", "insufficient_lamport_for_tx": "Vous n'avez pas assez de sol pour couvrir la transaction et ses frais de transaction. Veuillez ajouter plus de Sol à votre portefeuille ou réduire la quantité de Sol que vous envoyez.",
"insufficient_lamports": "Vous n'avez pas assez de sol pour couvrir la transaction et ses frais de transaction. Vous avez besoin d'au moins ${solValueNeeded} sol. Veuillez ajouter plus de Sol à votre portefeuille ou réduire la quantité de sol que vous envoyez", "insufficient_lamports": "Vous n'avez pas assez de sol pour couvrir la transaction et ses frais de transaction. Vous avez besoin d'au moins ${solValueNeeded} sol. Veuillez ajouter plus de Sol à votre portefeuille ou réduire la quantité de sol que vous envoyez",
"insufficientFundsForRentError": "Vous n'avez pas assez de SOL pour couvrir les frais de transaction et le loyer pour le compte. Veuillez ajouter plus de Sol à votre portefeuille ou réduire la quantité de sol que vous envoyez", "insufficientFundsForRentError": "Vous n'avez pas assez de SOL pour couvrir les frais de transaction et le loyer pour le compte. Veuillez ajouter plus de Sol à votre portefeuille ou réduire la quantité de sol que vous envoyez",
"insufficientFundsForRentErrorReceiver": "Le compte du récepteur n'a pas assez de sol pour couvrir le loyer. Veuillez demander au récepteur d'ajouter plus de Sol à son compte.",
"introducing_cake_pay": "Présentation de Cake Pay !", "introducing_cake_pay": "Présentation de Cake Pay !",
"invalid_input": "Entrée invalide", "invalid_input": "Entrée invalide",
"invalid_password": "Mot de passe incorrect", "invalid_password": "Mot de passe incorrect",
@ -903,6 +904,7 @@
"token_name": "Nom du token, par exemple : Tether", "token_name": "Nom du token, par exemple : Tether",
"token_symbol": "Symbole de token, par exemple : USDT", "token_symbol": "Symbole de token, par exemple : USDT",
"tokenID": "IDENTIFIANT", "tokenID": "IDENTIFIANT",
"ton_extra_info": "N'oubliez pas de spécifier l'identification de la note lors de l'envoi de la transaction TON pour l'échange",
"tor_connection": "Connexion Tor", "tor_connection": "Connexion Tor",
"tor_only": "Tor uniquement", "tor_only": "Tor uniquement",
"total": "Total", "total": "Total",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "Ba ku da isasshen sool don rufe ma'amala da kuɗin ma'amala. Da unara ƙara ƙarin sool a cikin walat ɗinku ko rage adadin Sol ɗin da kuke aikawa.", "insufficient_lamport_for_tx": "Ba ku da isasshen sool don rufe ma'amala da kuɗin ma'amala. Da unara ƙara ƙarin sool a cikin walat ɗinku ko rage adadin Sol ɗin da kuke aikawa.",
"insufficient_lamports": "Ba ku da isasshen sool don rufe ma'amala da kuɗin ma'amala. Kuna buƙatar aƙalla ${solValueNeeded} Sol. Da kyau ƙara ƙarin sool zuwa walat ɗinku ko rage adadin Sol ɗin da kuke aikawa", "insufficient_lamports": "Ba ku da isasshen sool don rufe ma'amala da kuɗin ma'amala. Kuna buƙatar aƙalla ${solValueNeeded} Sol. Da kyau ƙara ƙarin sool zuwa walat ɗinku ko rage adadin Sol ɗin da kuke aikawa",
"insufficientFundsForRentError": "Ba ku da isasshen Sol don rufe kuɗin ma'amala da haya don asusun. Da kyau ƙara ƙarin sool zuwa walat ɗinku ko rage adadin Sol ɗin da kuke aikawa", "insufficientFundsForRentError": "Ba ku da isasshen Sol don rufe kuɗin ma'amala da haya don asusun. Da kyau ƙara ƙarin sool zuwa walat ɗinku ko rage adadin Sol ɗin da kuke aikawa",
"insufficientFundsForRentErrorReceiver": "Asusun mai karba bashi da isasshen soya don rufe haya. Da fatan za a nemi mai karba don ƙara ƙarin sol zuwa asusun su.",
"introducing_cake_pay": "Gabatar da Cake Pay!", "introducing_cake_pay": "Gabatar da Cake Pay!",
"invalid_input": "Shigar da ba daidai ba", "invalid_input": "Shigar da ba daidai ba",
"invalid_password": "Kalmar sirri mara inganci", "invalid_password": "Kalmar sirri mara inganci",
@ -905,6 +906,7 @@
"token_name": "Alamar sunan misali: Tether", "token_name": "Alamar sunan misali: Tether",
"token_symbol": "Alamar alama misali: USDT", "token_symbol": "Alamar alama misali: USDT",
"tokenID": "ID", "tokenID": "ID",
"ton_extra_info": "Don Allah kar a manta su saka ID na Memo yayin aikawa da ma'amala don musayar",
"tor_connection": "Tor haɗin gwiwa", "tor_connection": "Tor haɗin gwiwa",
"tor_only": "Tor kawai", "tor_only": "Tor kawai",
"total": "Duka", "total": "Duka",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "आपके पास लेनदेन और इसके लेनदेन शुल्क को कवर करने के लिए पर्याप्त सोल नहीं है। कृपया अपने बटुए में अधिक सोल जोड़ें या आपके द्वारा भेजे जा रहे सोल राशि को कम करें।", "insufficient_lamport_for_tx": "आपके पास लेनदेन और इसके लेनदेन शुल्क को कवर करने के लिए पर्याप्त सोल नहीं है। कृपया अपने बटुए में अधिक सोल जोड़ें या आपके द्वारा भेजे जा रहे सोल राशि को कम करें।",
"insufficient_lamports": "आपके पास लेनदेन और इसके लेनदेन शुल्क को कवर करने के लिए पर्याप्त सोल नहीं है। आपको कम से कम ${solValueNeeded} सोल की आवश्यकता है। कृपया अपने बटुए में अधिक सोल जोड़ें या सोल राशि को कम करें जिसे आप भेज रहे हैं", "insufficient_lamports": "आपके पास लेनदेन और इसके लेनदेन शुल्क को कवर करने के लिए पर्याप्त सोल नहीं है। आपको कम से कम ${solValueNeeded} सोल की आवश्यकता है। कृपया अपने बटुए में अधिक सोल जोड़ें या सोल राशि को कम करें जिसे आप भेज रहे हैं",
"insufficientFundsForRentError": "आपके पास लेन -देन शुल्क और खाते के लिए किराए को कवर करने के लिए पर्याप्त सोल नहीं है। कृपया अपने बटुए में अधिक सोल जोड़ें या सोल राशि को कम करें जिसे आप भेज रहे हैं", "insufficientFundsForRentError": "आपके पास लेन -देन शुल्क और खाते के लिए किराए को कवर करने के लिए पर्याप्त सोल नहीं है। कृपया अपने बटुए में अधिक सोल जोड़ें या सोल राशि को कम करें जिसे आप भेज रहे हैं",
"insufficientFundsForRentErrorReceiver": "रिसीवर के खाते में किराए को कवर करने के लिए पर्याप्त सोल नहीं है। कृपया रिसीवर को उनके खाते में अधिक सोल जोड़ने के लिए कहें।",
"introducing_cake_pay": "परिचय Cake Pay!", "introducing_cake_pay": "परिचय Cake Pay!",
"invalid_input": "अमान्य निवेश", "invalid_input": "अमान्य निवेश",
"invalid_password": "अवैध पासवर्ड", "invalid_password": "अवैध पासवर्ड",
@ -569,8 +570,8 @@
"payjoin_unavailable_sheet_title": "Payjoin अनुपलब्ध क्यों है?", "payjoin_unavailable_sheet_title": "Payjoin अनुपलब्ध क्यों है?",
"payment_id": "भुगतान ID: ", "payment_id": "भुगतान ID: ",
"payment_made_easy": "भुगतान आसान किया गया", "payment_made_easy": "भुगतान आसान किया गया",
"payment_was_received": "आपका भुगतान प्राप्त हुआ था।",
"Payment_was_received": "आपका भुगतान प्राप्त हो गया था।", "Payment_was_received": "आपका भुगतान प्राप्त हो गया था।",
"payment_was_received": "आपका भुगतान प्राप्त हुआ था।",
"payments": "भुगतान", "payments": "भुगतान",
"pending": " (अपूर्ण)", "pending": " (अपूर्ण)",
"percentageOf": "${amount} का", "percentageOf": "${amount} का",
@ -905,6 +906,7 @@
"token_name": "टोकन नाम जैसे: टीथर", "token_name": "टोकन नाम जैसे: टीथर",
"token_symbol": "टोकन प्रतीक जैसे: यूएसडीटी", "token_symbol": "टोकन प्रतीक जैसे: यूएसडीटी",
"tokenID": "पहचान", "tokenID": "पहचान",
"ton_extra_info": "कृपया एक्सचेंज के लिए टन लेनदेन भेजते समय मेमो आईडी निर्दिष्ट करना न भूलें",
"tor_connection": "टोर कनेक्शन", "tor_connection": "टोर कनेक्शन",
"tor_only": "Tor केवल", "tor_only": "Tor केवल",
"total": "कुल", "total": "कुल",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "Nemate dovoljno SOL -a da pokriva transakciju i njegovu transakcijsku naknadu. Ljubazno dodajte više sol u svoj novčanik ili smanjite količinu SOL -a koju šaljete.", "insufficient_lamport_for_tx": "Nemate dovoljno SOL -a da pokriva transakciju i njegovu transakcijsku naknadu. Ljubazno dodajte više sol u svoj novčanik ili smanjite količinu SOL -a koju šaljete.",
"insufficient_lamports": "Nemate dovoljno SOL -a da pokriva transakciju i njegovu transakcijsku naknadu. Trebate najmanje ${solValueNeeded} sol. Ljubazno dodajte više sol u svoj novčanik ili smanjite količinu SOL -a koju šaljete", "insufficient_lamports": "Nemate dovoljno SOL -a da pokriva transakciju i njegovu transakcijsku naknadu. Trebate najmanje ${solValueNeeded} sol. Ljubazno dodajte više sol u svoj novčanik ili smanjite količinu SOL -a koju šaljete",
"insufficientFundsForRentError": "Nemate dovoljno SOL -a za pokrivanje naknade za transakciju i najamninu za račun. Ljubazno dodajte više sol u svoj novčanik ili smanjite količinu SOL -a koju šaljete", "insufficientFundsForRentError": "Nemate dovoljno SOL -a za pokrivanje naknade za transakciju i najamninu za račun. Ljubazno dodajte više sol u svoj novčanik ili smanjite količinu SOL -a koju šaljete",
"insufficientFundsForRentErrorReceiver": "Račun prijemnika nema dovoljno SOL -a da pokriva najamninu. Molimo zamolite prijemnika da doda više SOL -a na svoj račun.",
"introducing_cake_pay": "Predstavljamo Cake Pay!", "introducing_cake_pay": "Predstavljamo Cake Pay!",
"invalid_input": "Pogrešan unos", "invalid_input": "Pogrešan unos",
"invalid_password": "Netočna zaporka", "invalid_password": "Netočna zaporka",
@ -903,6 +904,7 @@
"token_name": "Naziv tokena npr.: Tether", "token_name": "Naziv tokena npr.: Tether",
"token_symbol": "Simbol tokena npr.: USDT", "token_symbol": "Simbol tokena npr.: USDT",
"tokenID": "iskaznica", "tokenID": "iskaznica",
"ton_extra_info": "Ne zaboravite navesti ID memorandu",
"tor_connection": "Tor veza", "tor_connection": "Tor veza",
"tor_only": "Samo Tor", "tor_only": "Samo Tor",
"total": "Ukupno", "total": "Ukupno",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "Դուք չունեք բավարար SOL՝ գործարքն և գործարքի վարձը ծածկելու համար։ Խնդրում ենք ավելացնել ավելի շատ SOL ձեր դրամապանակում կամ նվազեցնել ուղարկվող SOL-ի քանակը։", "insufficient_lamport_for_tx": "Դուք չունեք բավարար SOL՝ գործարքն և գործարքի վարձը ծածկելու համար։ Խնդրում ենք ավելացնել ավելի շատ SOL ձեր դրամապանակում կամ նվազեցնել ուղարկվող SOL-ի քանակը։",
"insufficient_lamports": "Դուք չունեք բավարար SOL՝ գործարքն և գործարքի վարձը ծածկելու համար։ Ձեզ անհրաժեշտ է առնվազն ${solValueNeeded} SOL։ Խնդրում ենք ավելացնել ավելի շատ SOL ձեր դրամապանակում կամ նվազեցնել ուղարկվող SOL-ի քանակը։", "insufficient_lamports": "Դուք չունեք բավարար SOL՝ գործարքն և գործարքի վարձը ծածկելու համար։ Ձեզ անհրաժեշտ է առնվազն ${solValueNeeded} SOL։ Խնդրում ենք ավելացնել ավելի շատ SOL ձեր դրամապանակում կամ նվազեցնել ուղարկվող SOL-ի քանակը։",
"insufficientFundsForRentError": "Ձեր մնացորդը բավարար չէ վարձակալության համար: Խնդրում ենք ավելացնել մնացորդը կամ նվազեցնել ուղարկվող գումարը", "insufficientFundsForRentError": "Ձեր մնացորդը բավարար չէ վարձակալության համար: Խնդրում ենք ավելացնել մնացորդը կամ նվազեցնել ուղարկվող գումարը",
"insufficientFundsForRentErrorReceiver": "Ստացողի հաշիվը չունի բավարար SOL, վարձավճարը ծածկելու համար: Խնդրում ենք ստանալ ստացողին ավելի շատ սոլ ավելացնել իրենց հաշվին:",
"introducing_cake_pay": "Ներկայացնում ենք Cake Pay!", "introducing_cake_pay": "Ներկայացնում ենք Cake Pay!",
"invalid_input": "Սխալ մուտք", "invalid_input": "Սխալ մուտք",
"invalid_password": "Սխալ գաղտնաբառ", "invalid_password": "Սխալ գաղտնաբառ",
@ -901,6 +902,7 @@
"token_name": "Token-ի անուն, օրինակ՝ Tether", "token_name": "Token-ի անուն, օրինակ՝ Tether",
"token_symbol": "Token-ի նշան, օրինակ՝ USDT", "token_symbol": "Token-ի նշան, օրինակ՝ USDT",
"tokenID": "ID", "tokenID": "ID",
"ton_extra_info": "Խնդրում ենք մի մոռացեք նշել MEMO ID- ն, երբ փոխանակման համար տոննա գործարքը ուղարկեք",
"tor_connection": "Tor կապ", "tor_connection": "Tor կապ",
"tor_only": "Միայն Tor", "tor_only": "Միայն Tor",
"total": "Ընդհանուր", "total": "Ընդհանուր",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "Anda tidak memiliki cukup SOL untuk menutupi transaksi dan biaya transaksinya. Mohon tambahkan lebih banyak sol ke dompet Anda atau kurangi jumlah sol yang Anda kirim.", "insufficient_lamport_for_tx": "Anda tidak memiliki cukup SOL untuk menutupi transaksi dan biaya transaksinya. Mohon tambahkan lebih banyak sol ke dompet Anda atau kurangi jumlah sol yang Anda kirim.",
"insufficient_lamports": "Anda tidak memiliki cukup SOL untuk menutupi transaksi dan biaya transaksinya. Anda membutuhkan setidaknya ${solValueNeeded} sol. Mohon tambahkan lebih banyak sol ke dompet Anda atau kurangi jumlah sol yang Anda kirim", "insufficient_lamports": "Anda tidak memiliki cukup SOL untuk menutupi transaksi dan biaya transaksinya. Anda membutuhkan setidaknya ${solValueNeeded} sol. Mohon tambahkan lebih banyak sol ke dompet Anda atau kurangi jumlah sol yang Anda kirim",
"insufficientFundsForRentError": "Anda tidak memiliki cukup SOL untuk menutupi biaya transaksi dan menyewa untuk akun tersebut. Mohon tambahkan lebih banyak sol ke dompet Anda atau kurangi jumlah sol yang Anda kirim", "insufficientFundsForRentError": "Anda tidak memiliki cukup SOL untuk menutupi biaya transaksi dan menyewa untuk akun tersebut. Mohon tambahkan lebih banyak sol ke dompet Anda atau kurangi jumlah sol yang Anda kirim",
"insufficientFundsForRentErrorReceiver": "Akun penerima tidak memiliki cukup SOL untuk menutupi sewa. Silakan minta penerima untuk menambahkan lebih banyak SOL ke akun mereka.",
"introducing_cake_pay": "Perkenalkan Cake Pay!", "introducing_cake_pay": "Perkenalkan Cake Pay!",
"invalid_input": "Masukan tidak valid", "invalid_input": "Masukan tidak valid",
"invalid_password": "Kata sandi salah", "invalid_password": "Kata sandi salah",
@ -906,6 +907,7 @@
"token_name": "Nama token misalnya: Tether", "token_name": "Nama token misalnya: Tether",
"token_symbol": "Simbol token misalnya: USDT", "token_symbol": "Simbol token misalnya: USDT",
"tokenID": "PENGENAL", "tokenID": "PENGENAL",
"ton_extra_info": "Harap jangan lupa untuk menentukan ID memo saat mengirim transaksi ton untuk pertukaran",
"tor_connection": "koneksi Tor", "tor_connection": "koneksi Tor",
"tor_only": "Hanya Tor", "tor_only": "Hanya Tor",
"total": "Total", "total": "Total",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "Non hai abbastanza SOL per coprire la transazione e la sua quota di transazione. Aggiungi più SOL al tuo portafoglio, o riduci l'importo di SOL che stai inviando.", "insufficient_lamport_for_tx": "Non hai abbastanza SOL per coprire la transazione e la sua quota di transazione. Aggiungi più SOL al tuo portafoglio, o riduci l'importo di SOL che stai inviando.",
"insufficient_lamports": "Non hai abbastanza SOL per coprire la transazione e la sua quota di transazione. Hai bisogno di almeno ${solValueNeeded} SOL. Aggiungi più SOL al tuo portafoglio, o riduci l'importo di SOL che stai inviando", "insufficient_lamports": "Non hai abbastanza SOL per coprire la transazione e la sua quota di transazione. Hai bisogno di almeno ${solValueNeeded} SOL. Aggiungi più SOL al tuo portafoglio, o riduci l'importo di SOL che stai inviando",
"insufficientFundsForRentError": "Non hai abbastanza SOL per coprire la tassa di transazione e l'affitto per il conto. Aggiungi più SOL al tuo portafoglio, o riduci l'importo di SOL che stai inviando", "insufficientFundsForRentError": "Non hai abbastanza SOL per coprire la tassa di transazione e l'affitto per il conto. Aggiungi più SOL al tuo portafoglio, o riduci l'importo di SOL che stai inviando",
"insufficientFundsForRentErrorReceiver": "L'account del destinatario non ha abbastanza SOL per coprire l'affitto. Si prega di chiedere al destinatario di aggiungere più SOL al loro account.",
"introducing_cake_pay": "Vi presentiamo Cake Pay!", "introducing_cake_pay": "Vi presentiamo Cake Pay!",
"invalid_input": "Inserimento non valido", "invalid_input": "Inserimento non valido",
"invalid_password": "Password non valida", "invalid_password": "Password non valida",
@ -904,6 +905,7 @@
"token_name": "Nome del token, ad esempio: Tether", "token_name": "Nome del token, ad esempio: Tether",
"token_symbol": "Simbolo del token, ad esempio: USDT", "token_symbol": "Simbolo del token, ad esempio: USDT",
"tokenID": "ID", "tokenID": "ID",
"ton_extra_info": "Non dimenticare di specificare l'ID memo durante l'invio della transazione Ton per lo scambio",
"tor_connection": "Connessione Tor", "tor_connection": "Connessione Tor",
"tor_only": "Solo Tor", "tor_only": "Solo Tor",
"total": "Totale", "total": "Totale",

View file

@ -419,6 +419,7 @@
"insufficient_lamport_for_tx": "トランザクションとその取引手数料をカバーするのに十分なSOLがありません。財布にソルを追加するか、送信するソル量を減らしてください。", "insufficient_lamport_for_tx": "トランザクションとその取引手数料をカバーするのに十分なSOLがありません。財布にソルを追加するか、送信するソル量を減らしてください。",
"insufficient_lamports": "トランザクションとその取引手数料をカバーするのに十分なSOLがありません。少なくとも${solValueNeeded} solが必要です。財布にソルを追加するか、送信するソル量を減らしてください", "insufficient_lamports": "トランザクションとその取引手数料をカバーするのに十分なSOLがありません。少なくとも${solValueNeeded} solが必要です。財布にソルを追加するか、送信するソル量を減らしてください",
"insufficientFundsForRentError": "アカウントの取引料金とレンタルをカバーするのに十分なソルがありません。財布にソルを追加するか、送信するソル量を減らしてください", "insufficientFundsForRentError": "アカウントの取引料金とレンタルをカバーするのに十分なソルがありません。財布にソルを追加するか、送信するソル量を減らしてください",
"insufficientFundsForRentErrorReceiver": "受信者のアカウントには、家賃をカバーするのに十分なソルがありません。レシーバーにアカウントにソルを追加するように依頼してください。",
"introducing_cake_pay": "序章Cake Pay", "introducing_cake_pay": "序章Cake Pay",
"invalid_input": "無効入力", "invalid_input": "無効入力",
"invalid_password": "無効なパスワード", "invalid_password": "無効なパスワード",
@ -904,6 +905,7 @@
"token_name": "トークン名 例: Tether", "token_name": "トークン名 例: Tether",
"token_symbol": "トークンシンボル 例: USDT", "token_symbol": "トークンシンボル 例: USDT",
"tokenID": "ID", "tokenID": "ID",
"ton_extra_info": "Exchangeのトントランザクションを送信しながら、メモIDを指定することを忘れないでください",
"tor_connection": "Tor接続", "tor_connection": "Tor接続",
"tor_only": "Torのみ", "tor_only": "Torのみ",
"total": "合計", "total": "合計",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "트랜잭션 및 트랜잭션 수수료를 충당하기에 SOL이 부족합니다. 지갑에 SOL을 더 추가하거나 보내는 SOL 금액을 줄이세요.", "insufficient_lamport_for_tx": "트랜잭션 및 트랜잭션 수수료를 충당하기에 SOL이 부족합니다. 지갑에 SOL을 더 추가하거나 보내는 SOL 금액을 줄이세요.",
"insufficient_lamports": "트랜잭션 및 트랜잭션 수수료를 충당하기에 SOL이 부족합니다. 최소 ${solValueNeeded} SOL이 필요합니다. 지갑에 SOL을 더 추가하거나 보내는 SOL 금액을 줄이세요.", "insufficient_lamports": "트랜잭션 및 트랜잭션 수수료를 충당하기에 SOL이 부족합니다. 최소 ${solValueNeeded} SOL이 필요합니다. 지갑에 SOL을 더 추가하거나 보내는 SOL 금액을 줄이세요.",
"insufficientFundsForRentError": "계정의 트랜잭션 수수료 및 렌트를 충당하기에 SOL이 부족합니다. 지갑에 SOL을 더 추가하거나 보내는 SOL 금액을 줄이세요.", "insufficientFundsForRentError": "계정의 트랜잭션 수수료 및 렌트를 충당하기에 SOL이 부족합니다. 지갑에 SOL을 더 추가하거나 보내는 SOL 금액을 줄이세요.",
"insufficientFundsForRentErrorReceiver": "수신기의 계정에는 임대료를 충당하기에 충분한 SOL이 없습니다. 수신기에게 계정에 더 많은 솔을 추가하도록 요청하십시오.",
"introducing_cake_pay": "Cake Pay를 소개합니다!", "introducing_cake_pay": "Cake Pay를 소개합니다!",
"invalid_input": "잘못된 입력", "invalid_input": "잘못된 입력",
"invalid_password": "잘못된 비밀번호", "invalid_password": "잘못된 비밀번호",
@ -904,6 +905,7 @@
"token_name": "토큰 이름 (예: Tether)", "token_name": "토큰 이름 (예: Tether)",
"token_symbol": "토큰 심볼 (예: USDT)", "token_symbol": "토큰 심볼 (예: USDT)",
"tokenID": "ID", "tokenID": "ID",
"ton_extra_info": "교환을 위해 TON 트랜잭션을 보내는 동안 메모 ID를 지정하는 것을 잊지 마십시오.",
"tor_connection": "Tor 연결", "tor_connection": "Tor 연결",
"tor_only": "Tor 전용", "tor_only": "Tor 전용",
"total": "합계", "total": "합계",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "သငျသညျငွေပေးငွေယူနှင့်၎င်း၏ငွေပေးငွေယူကြေးကိုဖုံးလွှမ်းရန် sol ရှိသည်မဟုတ်ကြဘူး။ ကြင်နာစွာသင်၏ပိုက်ဆံအိတ်သို့ပိုမို sol ကိုထပ်ထည့်ပါသို့မဟုတ်သင်ပို့လွှတ်ခြင်း sol ပမာဏကိုလျှော့ချပါ။", "insufficient_lamport_for_tx": "သငျသညျငွေပေးငွေယူနှင့်၎င်း၏ငွေပေးငွေယူကြေးကိုဖုံးလွှမ်းရန် sol ရှိသည်မဟုတ်ကြဘူး။ ကြင်နာစွာသင်၏ပိုက်ဆံအိတ်သို့ပိုမို sol ကိုထပ်ထည့်ပါသို့မဟုတ်သင်ပို့လွှတ်ခြင်း sol ပမာဏကိုလျှော့ချပါ။",
"insufficient_lamports": "သငျသညျငွေပေးငွေယူနှင့်၎င်း၏ငွေပေးငွေယူကြေးကိုဖုံးလွှမ်းရန် sol ရှိသည်မဟုတ်ကြဘူး။ သင်အနည်းဆုံး ${solValueNeeded} s ကိုလိုအပ်ပါတယ်။ ကြင်နာစွာသင်၏ပိုက်ဆံအိတ်သို့ပိုမို sol ကိုထပ်ထည့်ပါသို့မဟုတ်သင်ပို့နေသော sol ပမာဏကိုလျှော့ချပါ", "insufficient_lamports": "သငျသညျငွေပေးငွေယူနှင့်၎င်း၏ငွေပေးငွေယူကြေးကိုဖုံးလွှမ်းရန် sol ရှိသည်မဟုတ်ကြဘူး။ သင်အနည်းဆုံး ${solValueNeeded} s ကိုလိုအပ်ပါတယ်။ ကြင်နာစွာသင်၏ပိုက်ဆံအိတ်သို့ပိုမို sol ကိုထပ်ထည့်ပါသို့မဟုတ်သင်ပို့နေသော sol ပမာဏကိုလျှော့ချပါ",
"insufficientFundsForRentError": "သင်ငွေပေးချေမှုအခကြေးငွေကိုဖုံးအုပ်ရန်နှင့်အကောင့်ငှားရန်လုံလောက်သော sol ရှိသည်မဟုတ်ကြဘူး။ ကြင်နာစွာသင်၏ပိုက်ဆံအိတ်သို့ပိုမို sol ကိုပိုမိုထည့်ပါသို့မဟုတ်သင်ပို့ခြင်း sol ပမာဏကိုလျှော့ချပါ", "insufficientFundsForRentError": "သင်ငွေပေးချေမှုအခကြေးငွေကိုဖုံးအုပ်ရန်နှင့်အကောင့်ငှားရန်လုံလောက်သော sol ရှိသည်မဟုတ်ကြဘူး။ ကြင်နာစွာသင်၏ပိုက်ဆံအိတ်သို့ပိုမို sol ကိုပိုမိုထည့်ပါသို့မဟုတ်သင်ပို့ခြင်း sol ပမာဏကိုလျှော့ချပါ",
"insufficientFundsForRentErrorReceiver": "လက်ခံသူ၏အကောင့်တွင်အိမ်ငှားခကိုဖုံးအုပ်ရန်အစွမ်းမရှိနိုင်ပါ။ ကျေးဇူးပြု. လက်ခံသူအားသူတို့၏အကောင့်သို့ထပ်မံထည့်သွင်းရန်တောင်းဆိုပါ။",
"introducing_cake_pay": "Cake Pay ကို မိတ်ဆက်ခြင်း။", "introducing_cake_pay": "Cake Pay ကို မိတ်ဆက်ခြင်း။",
"invalid_input": "ထည့်သွင်းမှု မမှန်ကန်ပါ။", "invalid_input": "ထည့်သွင်းမှု မမှန်ကန်ပါ။",
"invalid_password": "မမှန်ကန်သောစကားဝှက်", "invalid_password": "မမှန်ကန်သောစကားဝှက်",
@ -903,6 +904,7 @@
"token_name": "တိုကင်အမည် ဥပမာ- Tether", "token_name": "တိုကင်အမည် ဥပမာ- Tether",
"token_symbol": "တိုကင်သင်္ကေတ ဥပမာ- USDT", "token_symbol": "တိုကင်သင်္ကေတ ဥပမာ- USDT",
"tokenID": "အမှတ်သညာ", "tokenID": "အမှတ်သညာ",
"ton_extra_info": "ငွေလဲလှယ်မှုအတွက်တန်ပြန်ငွေပေးငွေယူကိုပို့နေစဉ် Memo ID ကိုသတ်မှတ်ရန်မမေ့ပါနှင့်",
"tor_connection": "Tor ချိတ်ဆက်မှု", "tor_connection": "Tor ချိတ်ဆက်မှု",
"tor_only": "Tor သာ", "tor_only": "Tor သာ",
"total": "လုံးဝသော", "total": "လုံးဝသော",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "U hebt niet genoeg SOL om de transactie en de transactiekosten te dekken. Voeg vriendelijk meer SOL toe aan uw portemonnee of verminder de SOL -hoeveelheid die u verzendt.", "insufficient_lamport_for_tx": "U hebt niet genoeg SOL om de transactie en de transactiekosten te dekken. Voeg vriendelijk meer SOL toe aan uw portemonnee of verminder de SOL -hoeveelheid die u verzendt.",
"insufficient_lamports": "U hebt niet genoeg SOL om de transactie en de transactiekosten te dekken. Je hebt minstens ${solValueNeeded} sol nodig. Voeg vriendelijk meer Sol toe aan uw portemonnee of verminder de SOL -hoeveelheid die u verzendt", "insufficient_lamports": "U hebt niet genoeg SOL om de transactie en de transactiekosten te dekken. Je hebt minstens ${solValueNeeded} sol nodig. Voeg vriendelijk meer Sol toe aan uw portemonnee of verminder de SOL -hoeveelheid die u verzendt",
"insufficientFundsForRentError": "U hebt niet genoeg SOL om de transactiekosten en huur voor de rekening te dekken. Voeg vriendelijk meer SOL toe aan uw portemonnee of verminder de SOL -hoeveelheid die u verzendt", "insufficientFundsForRentError": "U hebt niet genoeg SOL om de transactiekosten en huur voor de rekening te dekken. Voeg vriendelijk meer SOL toe aan uw portemonnee of verminder de SOL -hoeveelheid die u verzendt",
"insufficientFundsForRentErrorReceiver": "De account van de ontvanger heeft niet genoeg SOL om de huur te dekken. Vraag de ontvanger om meer SOL aan hun account toe te voegen.",
"introducing_cake_pay": "Introductie van Cake Pay!", "introducing_cake_pay": "Introductie van Cake Pay!",
"invalid_input": "Ongeldige invoer", "invalid_input": "Ongeldige invoer",
"invalid_password": "Ongeldig wachtwoord", "invalid_password": "Ongeldig wachtwoord",
@ -903,6 +904,7 @@
"token_name": "Tokennaam bijv.: Tether", "token_name": "Tokennaam bijv.: Tether",
"token_symbol": "Tokensymbool bijv.: USDT", "token_symbol": "Tokensymbool bijv.: USDT",
"tokenID": "ID kaart", "tokenID": "ID kaart",
"ton_extra_info": "Vergeet niet om de memo -ID op te geven tijdens het verzenden van de ton -transactie voor de uitwisseling",
"tor_connection": "Tor-verbinding", "tor_connection": "Tor-verbinding",
"tor_only": "Alleen Tor", "tor_only": "Alleen Tor",
"total": "Totaal", "total": "Totaal",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "Nie masz wystarczającej ilości SOL, aby pokryć transakcję i opłatę za transakcję. Dodaj więcej SOL do portfela lub zmniejsz wysyłaną kwotę SOL.", "insufficient_lamport_for_tx": "Nie masz wystarczającej ilości SOL, aby pokryć transakcję i opłatę za transakcję. Dodaj więcej SOL do portfela lub zmniejsz wysyłaną kwotę SOL.",
"insufficient_lamports": "Nie masz wystarczającej ilości SOL, aby pokryć transakcję i opłatę za transakcję. Potrzebujesz przynajmniej ${solValueNeeded} SOL. Uprzejmie dodaj więcej SOL do portfela lub zmniejsz wysyłaną kwotę SOL, którą wysyłasz", "insufficient_lamports": "Nie masz wystarczającej ilości SOL, aby pokryć transakcję i opłatę za transakcję. Potrzebujesz przynajmniej ${solValueNeeded} SOL. Uprzejmie dodaj więcej SOL do portfela lub zmniejsz wysyłaną kwotę SOL, którą wysyłasz",
"insufficientFundsForRentError": "Nie masz wystarczającej ilości SOL, aby pokryć opłatę za transakcję i czynsz za konto. Dodaj więcej SOL do portfela lub zmniejsz kwotę, którą wysyłasz", "insufficientFundsForRentError": "Nie masz wystarczającej ilości SOL, aby pokryć opłatę za transakcję i czynsz za konto. Dodaj więcej SOL do portfela lub zmniejsz kwotę, którą wysyłasz",
"insufficientFundsForRentErrorReceiver": "Konto odbiorcy nie ma wystarczającej ilości SOL, aby pokryć czynsz. Poproś odbiorcę o dodanie więcej SOL do ich konta.",
"introducing_cake_pay": "Przedstawiamy Cake Pay!", "introducing_cake_pay": "Przedstawiamy Cake Pay!",
"invalid_input": "Nieprawidłowe dane wejściowe", "invalid_input": "Nieprawidłowe dane wejściowe",
"invalid_password": "Nieprawidłowe hasło", "invalid_password": "Nieprawidłowe hasło",
@ -903,6 +904,7 @@
"token_name": "Nazwa tokena, np.: Tether", "token_name": "Nazwa tokena, np.: Tether",
"token_symbol": "Symbol tokena np.: USDT", "token_symbol": "Symbol tokena np.: USDT",
"tokenID": "ID", "tokenID": "ID",
"ton_extra_info": "Nie zapomnij określić identyfikatora notatki podczas wysyłania transakcji TON dla wymiany",
"tor_connection": "Połączenie przez Tor", "tor_connection": "Połączenie przez Tor",
"tor_only": "Tylko sieć Tor", "tor_only": "Tylko sieć Tor",
"total": "Całkowity", "total": "Całkowity",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "Você não tem Sol suficiente para cobrir a transação e sua taxa de transação. Por favor, adicione mais sol à sua carteira ou reduza a quantidade de sol que você envia.", "insufficient_lamport_for_tx": "Você não tem Sol suficiente para cobrir a transação e sua taxa de transação. Por favor, adicione mais sol à sua carteira ou reduza a quantidade de sol que você envia.",
"insufficient_lamports": "Você não tem Sol suficiente para cobrir a transação e sua taxa de transação. Você precisa de pelo menos ${solValueNeeded} sol. Por favor, adicione mais sol à sua carteira ou reduza a quantidade de sol que você está enviando", "insufficient_lamports": "Você não tem Sol suficiente para cobrir a transação e sua taxa de transação. Você precisa de pelo menos ${solValueNeeded} sol. Por favor, adicione mais sol à sua carteira ou reduza a quantidade de sol que você está enviando",
"insufficientFundsForRentError": "Você não tem Sol suficiente para cobrir a taxa de transação e o aluguel da conta. Por favor, adicione mais sol à sua carteira ou reduza a quantidade de sol que você envia", "insufficientFundsForRentError": "Você não tem Sol suficiente para cobrir a taxa de transação e o aluguel da conta. Por favor, adicione mais sol à sua carteira ou reduza a quantidade de sol que você envia",
"insufficientFundsForRentErrorReceiver": "A conta do receptor não possui SOL suficiente para cobrir o aluguel. Por favor, peça ao destinatário que adicione mais sol à sua conta.",
"introducing_cake_pay": "Apresentando o Cake Pay!", "introducing_cake_pay": "Apresentando o Cake Pay!",
"invalid_input": "Entrada inválida", "invalid_input": "Entrada inválida",
"invalid_password": "Senha inválida", "invalid_password": "Senha inválida",
@ -905,6 +906,7 @@
"token_name": "Nome do token, por exemplo: Tether", "token_name": "Nome do token, por exemplo: Tether",
"token_symbol": "Símbolo de token, por exemplo: USDT", "token_symbol": "Símbolo de token, por exemplo: USDT",
"tokenID": "EU IA", "tokenID": "EU IA",
"ton_extra_info": "Não se esqueça de especificar o ID do memorando ao enviar a transação TON para a troca",
"tor_connection": "Conexão Tor", "tor_connection": "Conexão Tor",
"tor_only": "Tor apenas", "tor_only": "Tor apenas",
"total": "Total", "total": "Total",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "У вас недостаточно Sol, чтобы покрыть транзакцию и плату за транзакцию. Пожалуйста, добавьте больше Sol в свой кошелек или уменьшите сумму Sol, которую вы отправляете.", "insufficient_lamport_for_tx": "У вас недостаточно Sol, чтобы покрыть транзакцию и плату за транзакцию. Пожалуйста, добавьте больше Sol в свой кошелек или уменьшите сумму Sol, которую вы отправляете.",
"insufficient_lamports": "У вас недостаточно Sol, чтобы покрыть транзакцию и плату за транзакцию. Вам нужен как минимум ${solValueNeeded} sol. Пожалуйста, добавьте больше Sol в свой кошелек или уменьшите сумму Sol, которую вы отправляете", "insufficient_lamports": "У вас недостаточно Sol, чтобы покрыть транзакцию и плату за транзакцию. Вам нужен как минимум ${solValueNeeded} sol. Пожалуйста, добавьте больше Sol в свой кошелек или уменьшите сумму Sol, которую вы отправляете",
"insufficientFundsForRentError": "У вас недостаточно Sol, чтобы покрыть плату за транзакцию и аренду для счета. Пожалуйста, добавьте больше Sol в свой кошелек или уменьшите сумму Sol, которую вы отправляете", "insufficientFundsForRentError": "У вас недостаточно Sol, чтобы покрыть плату за транзакцию и аренду для счета. Пожалуйста, добавьте больше Sol в свой кошелек или уменьшите сумму Sol, которую вы отправляете",
"insufficientFundsForRentErrorReceiver": "У счета приемника не хватает Sol, чтобы покрыть арендную плату. Пожалуйста, попросите приемника добавить больше SOL в свою учетную запись.",
"introducing_cake_pay": "Представляем Cake Pay!", "introducing_cake_pay": "Представляем Cake Pay!",
"invalid_input": "Неверный Ввод", "invalid_input": "Неверный Ввод",
"invalid_password": "Неверный пароль", "invalid_password": "Неверный пароль",
@ -904,6 +905,7 @@
"token_name": "Имя токена, например: Tether", "token_name": "Имя токена, например: Tether",
"token_symbol": "Символ токена, например: USDT", "token_symbol": "Символ токена, например: USDT",
"tokenID": "ИДЕНТИФИКАТОР", "tokenID": "ИДЕНТИФИКАТОР",
"ton_extra_info": "Пожалуйста, не забудьте указать идентификатор записки при отправке TON транзакции для обмена",
"tor_connection": "Тор соединение", "tor_connection": "Тор соединение",
"tor_only": "Только Tor", "tor_only": "Только Tor",
"total": "Общий", "total": "Общий",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "คุณไม่มีโซลเพียงพอที่จะครอบคลุมการทำธุรกรรมและค่าธรรมเนียมการทำธุรกรรม กรุณาเพิ่มโซลให้มากขึ้นลงในกระเป๋าเงินของคุณหรือลดจำนวนโซลที่คุณส่งมา", "insufficient_lamport_for_tx": "คุณไม่มีโซลเพียงพอที่จะครอบคลุมการทำธุรกรรมและค่าธรรมเนียมการทำธุรกรรม กรุณาเพิ่มโซลให้มากขึ้นลงในกระเป๋าเงินของคุณหรือลดจำนวนโซลที่คุณส่งมา",
"insufficient_lamports": "คุณไม่มีโซลเพียงพอที่จะครอบคลุมการทำธุรกรรมและค่าธรรมเนียมการทำธุรกรรม คุณต้องการอย่างน้อย ${solValueNeeded} SOL กรุณาเพิ่มโซลให้มากขึ้นลงในกระเป๋าเงินของคุณหรือลดจำนวนโซลที่คุณกำลังส่ง", "insufficient_lamports": "คุณไม่มีโซลเพียงพอที่จะครอบคลุมการทำธุรกรรมและค่าธรรมเนียมการทำธุรกรรม คุณต้องการอย่างน้อย ${solValueNeeded} SOL กรุณาเพิ่มโซลให้มากขึ้นลงในกระเป๋าเงินของคุณหรือลดจำนวนโซลที่คุณกำลังส่ง",
"insufficientFundsForRentError": "คุณไม่มีโซลเพียงพอที่จะครอบคลุมค่าธรรมเนียมการทำธุรกรรมและค่าเช่าสำหรับบัญชี กรุณาเพิ่มโซลให้มากขึ้นลงในกระเป๋าเงินของคุณหรือลดจำนวนโซลที่คุณส่งมา", "insufficientFundsForRentError": "คุณไม่มีโซลเพียงพอที่จะครอบคลุมค่าธรรมเนียมการทำธุรกรรมและค่าเช่าสำหรับบัญชี กรุณาเพิ่มโซลให้มากขึ้นลงในกระเป๋าเงินของคุณหรือลดจำนวนโซลที่คุณส่งมา",
"insufficientFundsForRentErrorReceiver": "บัญชีของผู้รับไม่เพียงพอที่จะครอบคลุมค่าเช่า โปรดขอให้ผู้รับเพิ่ม SOL เพิ่มเติมในบัญชีของพวกเขา",
"introducing_cake_pay": "ยินดีต้อนรับสู่ Cake Pay!", "introducing_cake_pay": "ยินดีต้อนรับสู่ Cake Pay!",
"invalid_input": "อินพุตไม่ถูกต้อง", "invalid_input": "อินพุตไม่ถูกต้อง",
"invalid_password": "รหัสผ่านไม่ถูกต้อง", "invalid_password": "รหัสผ่านไม่ถูกต้อง",
@ -903,6 +904,7 @@
"token_name": "ชื่อโทเค็น เช่น Tether", "token_name": "ชื่อโทเค็น เช่น Tether",
"token_symbol": "สัญลักษณ์โทเค็น เช่น USDT", "token_symbol": "สัญลักษณ์โทเค็น เช่น USDT",
"tokenID": "บัตรประจำตัวประชาชน", "tokenID": "บัตรประจำตัวประชาชน",
"ton_extra_info": "โปรดอย่าลืมระบุรหัสบันทึกในขณะที่ส่งธุรกรรม TON สำหรับการแลกเปลี่ยน",
"tor_connection": "การเชื่อมต่อทอร์", "tor_connection": "การเชื่อมต่อทอร์",
"tor_only": "Tor เท่านั้น", "tor_only": "Tor เท่านั้น",
"total": "ทั้งหมด", "total": "ทั้งหมด",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "Wala kang sapat na SOL upang masakop ang transaksyon at ang bayad sa transaksyon nito. Mabuting magdagdag ng higit pa sa iyong pitaka o bawasan ang sol na halaga na iyong ipinapadala.", "insufficient_lamport_for_tx": "Wala kang sapat na SOL upang masakop ang transaksyon at ang bayad sa transaksyon nito. Mabuting magdagdag ng higit pa sa iyong pitaka o bawasan ang sol na halaga na iyong ipinapadala.",
"insufficient_lamports": "Wala kang sapat na SOL upang masakop ang transaksyon at ang bayad sa transaksyon nito. Kailangan mo ng hindi bababa sa ${solValueNeeded} sol. Mabait na magdagdag ng higit pang sol sa iyong pitaka o bawasan ang dami ng iyong ipinapadala", "insufficient_lamports": "Wala kang sapat na SOL upang masakop ang transaksyon at ang bayad sa transaksyon nito. Kailangan mo ng hindi bababa sa ${solValueNeeded} sol. Mabait na magdagdag ng higit pang sol sa iyong pitaka o bawasan ang dami ng iyong ipinapadala",
"insufficientFundsForRentError": "Wala kang sapat na SOL upang masakop ang fee sa transaksyon at upa para sa account. Mabait na magdagdag ng higit pa sa iyong wallet o bawasan ang halaga ng SOL na iyong ipinapadala", "insufficientFundsForRentError": "Wala kang sapat na SOL upang masakop ang fee sa transaksyon at upa para sa account. Mabait na magdagdag ng higit pa sa iyong wallet o bawasan ang halaga ng SOL na iyong ipinapadala",
"insufficientFundsForRentErrorReceiver": "Ang account ng tatanggap ay walang sapat na sol upang masakop ang upa. Mangyaring hilingin sa tatanggap na magdagdag ng higit pang SOL sa kanilang account.",
"introducing_cake_pay": "Pagpapakilala ng Cake Pay!", "introducing_cake_pay": "Pagpapakilala ng Cake Pay!",
"invalid_input": "Di-wastong input", "invalid_input": "Di-wastong input",
"invalid_password": "Di-wastong password", "invalid_password": "Di-wastong password",
@ -903,6 +904,7 @@
"token_name": "Pangalan ng token, halimbawa: Tether", "token_name": "Pangalan ng token, halimbawa: Tether",
"token_symbol": "Simbolo ng token, halimbawa: USDT", "token_symbol": "Simbolo ng token, halimbawa: USDT",
"tokenID": "ID", "tokenID": "ID",
"ton_extra_info": "Mangyaring huwag kalimutan na tukuyin ang memo ID habang nagpapadala ng toneladang transaksyon para sa palitan",
"tor_connection": "Koneksyon ng Tor", "tor_connection": "Koneksyon ng Tor",
"tor_only": "Tor lamang", "tor_only": "Tor lamang",
"total": "Kabuuan", "total": "Kabuuan",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "İşlemi ve işlem ücretini karşılamak için yeterli SOL'unuz yok. Lütfen cüzdanınıza daha fazla SOL ekleyin veya gönderdiğiniz sol miktarını azaltın.", "insufficient_lamport_for_tx": "İşlemi ve işlem ücretini karşılamak için yeterli SOL'unuz yok. Lütfen cüzdanınıza daha fazla SOL ekleyin veya gönderdiğiniz sol miktarını azaltın.",
"insufficient_lamports": "İşlemi ve işlem ücretini karşılamak için yeterli SOL'unuz yok. En az ${solValueNeeded} Sol'a ihtiyacınız var. Lütfen cüzdanınıza daha fazla sol ekleyin veya gönderdiğiniz sol miktarını azaltın", "insufficient_lamports": "İşlemi ve işlem ücretini karşılamak için yeterli SOL'unuz yok. En az ${solValueNeeded} Sol'a ihtiyacınız var. Lütfen cüzdanınıza daha fazla sol ekleyin veya gönderdiğiniz sol miktarını azaltın",
"insufficientFundsForRentError": "İşlem ücretini karşılamak ve hesap için kiralamak için yeterli SOL'nuz yok. Lütfen cüzdanınıza daha fazla sol ekleyin veya gönderdiğiniz sol miktarını azaltın", "insufficientFundsForRentError": "İşlem ücretini karşılamak ve hesap için kiralamak için yeterli SOL'nuz yok. Lütfen cüzdanınıza daha fazla sol ekleyin veya gönderdiğiniz sol miktarını azaltın",
"insufficientFundsForRentErrorReceiver": "Alıcının hesabının kirayı karşılamak için yeterli SOL yoktur. Lütfen alıcıdan hesaplarına daha fazla SOL eklemesini isteyin.",
"introducing_cake_pay": "Cake Pay ile tanışın!", "introducing_cake_pay": "Cake Pay ile tanışın!",
"invalid_input": "Geçersiz Giriş", "invalid_input": "Geçersiz Giriş",
"invalid_password": "Geçersiz şifre", "invalid_password": "Geçersiz şifre",
@ -903,6 +904,7 @@
"token_name": "Belirteç adı, örneğin: Tether", "token_name": "Belirteç adı, örneğin: Tether",
"token_symbol": "Jeton sembolü, örneğin: USDT", "token_symbol": "Jeton sembolü, örneğin: USDT",
"tokenID": "İD", "tokenID": "İD",
"ton_extra_info": "Lütfen değişim için ton işlemini gönderirken not kimliğini belirtmeyi unutmayın",
"tor_connection": "Tor bağlantısı", "tor_connection": "Tor bağlantısı",
"tor_only": "Yalnızca Tor", "tor_only": "Yalnızca Tor",
"total": "Toplam", "total": "Toplam",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "У вас недостатньо SOL, щоб покрити транзакцію та її плату за трансакцію. Будь ласка, додайте до свого гаманця більше SOL або зменшіть суму, яку ви надсилаєте.", "insufficient_lamport_for_tx": "У вас недостатньо SOL, щоб покрити транзакцію та її плату за трансакцію. Будь ласка, додайте до свого гаманця більше SOL або зменшіть суму, яку ви надсилаєте.",
"insufficient_lamports": "У вас недостатньо SOL, щоб покрити транзакцію та її плату за трансакцію. Вам потрібно щонайменше ${solValueNeeded} sol. Будь ласка, додайте до свого гаманця більше SOL або зменшіть суму Sol, яку ви надсилаєте", "insufficient_lamports": "У вас недостатньо SOL, щоб покрити транзакцію та її плату за трансакцію. Вам потрібно щонайменше ${solValueNeeded} sol. Будь ласка, додайте до свого гаманця більше SOL або зменшіть суму Sol, яку ви надсилаєте",
"insufficientFundsForRentError": "У вас недостатньо SOL, щоб покрити плату за транзакцію та оренду на рахунок. Будь ласка, додайте до свого гаманця більше SOL або зменшіть суму, яку ви надсилаєте", "insufficientFundsForRentError": "У вас недостатньо SOL, щоб покрити плату за транзакцію та оренду на рахунок. Будь ласка, додайте до свого гаманця більше SOL або зменшіть суму, яку ви надсилаєте",
"insufficientFundsForRentErrorReceiver": "На рахунку одержувача не вистачає SOL, щоб покрити оренду. Будь ласка, попросіть одержувача додати більше SOL до свого рахунку.",
"introducing_cake_pay": "Представляємо Cake Pay!", "introducing_cake_pay": "Представляємо Cake Pay!",
"invalid_input": "Неправильні дані", "invalid_input": "Неправильні дані",
"invalid_password": "Недійсний пароль", "invalid_password": "Недійсний пароль",
@ -904,6 +905,7 @@
"token_name": "Назва токена, наприклад: Tether", "token_name": "Назва токена, наприклад: Tether",
"token_symbol": "Символ маркера, наприклад: USDT", "token_symbol": "Символ маркера, наприклад: USDT",
"tokenID": "ID", "tokenID": "ID",
"ton_extra_info": "Не забудьте вказати ідентифікатор пам’яті під час надсилання транзакції TON для обміну",
"tor_connection": "Підключення Tor", "tor_connection": "Підключення Tor",
"tor_only": "Тільки Tor", "tor_only": "Тільки Tor",
"total": "Загальний", "total": "Загальний",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "آپ کے پاس ٹرانزیکشن اور اس کے لین دین کی فیس کا احاطہ کرنے کے لئے کافی SOL نہیں ہے۔ برائے مہربانی اپنے بٹوے میں مزید سول شامل کریں یا آپ کو بھیجنے والی سول رقم کو کم کریں۔", "insufficient_lamport_for_tx": "آپ کے پاس ٹرانزیکشن اور اس کے لین دین کی فیس کا احاطہ کرنے کے لئے کافی SOL نہیں ہے۔ برائے مہربانی اپنے بٹوے میں مزید سول شامل کریں یا آپ کو بھیجنے والی سول رقم کو کم کریں۔",
"insufficient_lamports": "آپ کے پاس ٹرانزیکشن اور اس کے لین دین کی فیس کا احاطہ کرنے کے لئے کافی SOL نہیں ہے۔ آپ کو کم از کم ${solValueNeeded} sol کی ضرورت ہے۔ برائے مہربانی اپنے بٹوے میں مزید SOL شامل کریں یا آپ جس SOL رقم کو بھیج رہے ہو اسے کم کریں", "insufficient_lamports": "آپ کے پاس ٹرانزیکشن اور اس کے لین دین کی فیس کا احاطہ کرنے کے لئے کافی SOL نہیں ہے۔ آپ کو کم از کم ${solValueNeeded} sol کی ضرورت ہے۔ برائے مہربانی اپنے بٹوے میں مزید SOL شامل کریں یا آپ جس SOL رقم کو بھیج رہے ہو اسے کم کریں",
"insufficientFundsForRentError": "آپ کے پاس ٹرانزیکشن فیس اور اکاؤنٹ کے لئے کرایہ لینے کے ل enough اتنا SOL نہیں ہے۔ برائے مہربانی اپنے بٹوے میں مزید سول شامل کریں یا آپ کو بھیجنے والی سول رقم کو کم کریں", "insufficientFundsForRentError": "آپ کے پاس ٹرانزیکشن فیس اور اکاؤنٹ کے لئے کرایہ لینے کے ل enough اتنا SOL نہیں ہے۔ برائے مہربانی اپنے بٹوے میں مزید سول شامل کریں یا آپ کو بھیجنے والی سول رقم کو کم کریں",
"insufficientFundsForRentErrorReceiver": "وصول کنندہ کے اکاؤنٹ میں کرایہ کا احاطہ کرنے کے لئے کافی SOL نہیں ہے۔ براہ کرم وصول کنندہ سے ان کے اکاؤنٹ میں مزید SOL شامل کرنے کو کہیں۔",
"introducing_cake_pay": "Cake پے کا تعارف!", "introducing_cake_pay": "Cake پے کا تعارف!",
"invalid_input": "غلط ان پٹ", "invalid_input": "غلط ان پٹ",
"invalid_password": "غلط پاسورڈ", "invalid_password": "غلط پاسورڈ",
@ -905,6 +906,7 @@
"token_name": "ٹوکن کا نام جیسے: Tether", "token_name": "ٹوکن کا نام جیسے: Tether",
"token_symbol": "ٹوکن کی علامت جیسے: USDT", "token_symbol": "ٹوکن کی علامت جیسے: USDT",
"tokenID": "ID", "tokenID": "ID",
"ton_extra_info": "ایکسچینج کے لئے ٹن ٹرانزیکشن بھیجتے وقت براہ کرم میمو آئی ڈی کی وضاحت کرنا نہ بھولیں",
"tor_connection": "ﻦﺸﮑﻨﮐ ﺭﻮﭨ", "tor_connection": "ﻦﺸﮑﻨﮐ ﺭﻮﭨ",
"tor_only": "صرف Tor", "tor_only": "صرف Tor",
"total": "کل", "total": "کل",

View file

@ -417,6 +417,7 @@
"insufficient_lamport_for_tx": "Bạn không có đủ SOL để thanh toán giao dịch và phí giao dịch. Vui lòng thêm SOL vào ví của bạn hoặc giảm số lượng SOL bạn đang gửi.", "insufficient_lamport_for_tx": "Bạn không có đủ SOL để thanh toán giao dịch và phí giao dịch. Vui lòng thêm SOL vào ví của bạn hoặc giảm số lượng SOL bạn đang gửi.",
"insufficient_lamports": "Bạn không có đủ SOL để thanh toán giao dịch và phí giao dịch. Bạn cần ít nhất ${solValueNeeded} SOL. Vui lòng thêm SOL vào ví của bạn hoặc giảm số lượng SOL bạn đang gửi", "insufficient_lamports": "Bạn không có đủ SOL để thanh toán giao dịch và phí giao dịch. Bạn cần ít nhất ${solValueNeeded} SOL. Vui lòng thêm SOL vào ví của bạn hoặc giảm số lượng SOL bạn đang gửi",
"insufficientFundsForRentError": "Bạn không có đủ SOL để thanh toán phí giao dịch và phí thuê cho tài khoản. Vui lòng thêm SOL vào ví của bạn hoặc giảm số lượng SOL bạn đang gửi", "insufficientFundsForRentError": "Bạn không có đủ SOL để thanh toán phí giao dịch và phí thuê cho tài khoản. Vui lòng thêm SOL vào ví của bạn hoặc giảm số lượng SOL bạn đang gửi",
"insufficientFundsForRentErrorReceiver": "Tài khoản của người nhận không có đủ SOL để trang trải tiền thuê nhà. Vui lòng yêu cầu người nhận thêm SOL vào tài khoản của họ.",
"introducing_cake_pay": "Giới thiệu Cake Pay!", "introducing_cake_pay": "Giới thiệu Cake Pay!",
"invalid_input": "Nhập không hợp lệ", "invalid_input": "Nhập không hợp lệ",
"invalid_password": "Mật khẩu không hợp lệ", "invalid_password": "Mật khẩu không hợp lệ",
@ -900,6 +901,7 @@
"token_name": "Tên token ví dụ: Tether", "token_name": "Tên token ví dụ: Tether",
"token_symbol": "Ký hiệu token ví dụ: USDT", "token_symbol": "Ký hiệu token ví dụ: USDT",
"tokenID": "ID", "tokenID": "ID",
"ton_extra_info": "Xin đừng quên chỉ định ID ghi nhớ trong khi gửi giao dịch tấn cho trao đổi",
"tor_connection": "Kết nối Tor", "tor_connection": "Kết nối Tor",
"tor_only": "Chỉ Tor", "tor_only": "Chỉ Tor",
"total": "Tổng cộng", "total": "Tổng cộng",

View file

@ -419,6 +419,7 @@
"insufficient_lamport_for_tx": "O ko ni sosi to lati bo idunadura ati idiyele iṣowo rẹ. Fi agbara kun Sol diẹ sii si apamọwọ rẹ tabi dinku sodo naa ti o \\ 'tun n firanṣẹ.", "insufficient_lamport_for_tx": "O ko ni sosi to lati bo idunadura ati idiyele iṣowo rẹ. Fi agbara kun Sol diẹ sii si apamọwọ rẹ tabi dinku sodo naa ti o \\ 'tun n firanṣẹ.",
"insufficient_lamports": "O ko ni sosi to lati bo idunadura ati idiyele iṣowo rẹ. O nilo o kere ju ${solValueNeeded}. Fi agbara kun Sol diẹ sii si apamọwọ rẹ tabi dinku soso ti o n firanṣẹ", "insufficient_lamports": "O ko ni sosi to lati bo idunadura ati idiyele iṣowo rẹ. O nilo o kere ju ${solValueNeeded}. Fi agbara kun Sol diẹ sii si apamọwọ rẹ tabi dinku soso ti o n firanṣẹ",
"insufficientFundsForRentError": "O ko ni Sol kan lati bo owo isanwo naa ki o yalo fun iroyin naa. Fi agbara kun Sol diẹ sii si apamọwọ rẹ tabi dinku soso naa ti o \\ 'tun n firanṣẹ", "insufficientFundsForRentError": "O ko ni Sol kan lati bo owo isanwo naa ki o yalo fun iroyin naa. Fi agbara kun Sol diẹ sii si apamọwọ rẹ tabi dinku soso naa ti o \\ 'tun n firanṣẹ",
"insufficientFundsForRentErrorReceiver": "Akọọlẹ olugba ko ni Sol lati bo iyalo naa. Jọwọ beere olugba lati ṣafikun Sol diẹ sii si akọọlẹ wọn.",
"introducing_cake_pay": "Ẹ bá Cake Pay!", "introducing_cake_pay": "Ẹ bá Cake Pay!",
"invalid_input": "Iṣawọle ti ko tọ", "invalid_input": "Iṣawọle ti ko tọ",
"invalid_password": "Ọrọ igbaniwọle ti ko wulo", "invalid_password": "Ọrọ igbaniwọle ti ko wulo",
@ -904,6 +905,7 @@
"token_name": "Orukọ àmi fun apẹẹrẹ: Tether", "token_name": "Orukọ àmi fun apẹẹrẹ: Tether",
"token_symbol": "Aami aami fun apẹẹrẹ: USDT", "token_symbol": "Aami aami fun apẹẹrẹ: USDT",
"tokenID": "ID", "tokenID": "ID",
"ton_extra_info": "Jọwọ maṣe gbagbe lati tokasi ID akọsilẹ lakoko fifiranṣẹ idunadura pupọ fun paṣipaarọ naa",
"tor_connection": "Tor asopọ", "tor_connection": "Tor asopọ",
"tor_only": "Tor nìkan", "tor_only": "Tor nìkan",
"total": "Apapọ", "total": "Apapọ",

View file

@ -418,6 +418,7 @@
"insufficient_lamport_for_tx": "您没有足够的溶胶来支付交易及其交易费用。请在您的钱包中添加更多溶胶或减少您发送的溶胶量。", "insufficient_lamport_for_tx": "您没有足够的溶胶来支付交易及其交易费用。请在您的钱包中添加更多溶胶或减少您发送的溶胶量。",
"insufficient_lamports": "您没有足够的溶胶来支付交易及其交易费用。您至少需要${solValueNeeded} sol。请在您的钱包中添加更多溶胶或减少您发送的溶胶量", "insufficient_lamports": "您没有足够的溶胶来支付交易及其交易费用。您至少需要${solValueNeeded} sol。请在您的钱包中添加更多溶胶或减少您发送的溶胶量",
"insufficientFundsForRentError": "您没有足够的溶胶来支付该帐户的交易费和租金。请在钱包中添加更多溶胶或减少您发送的溶胶量", "insufficientFundsForRentError": "您没有足够的溶胶来支付该帐户的交易费和租金。请在钱包中添加更多溶胶或减少您发送的溶胶量",
"insufficientFundsForRentErrorReceiver": "接收器的帐户没有足够的溶胶来支付租金。请要求接收器向其帐户添加更多SOL。",
"introducing_cake_pay": "介绍 Cake Pay!", "introducing_cake_pay": "介绍 Cake Pay!",
"invalid_input": "输入无效", "invalid_input": "输入无效",
"invalid_password": "无效的密码", "invalid_password": "无效的密码",
@ -903,6 +904,7 @@
"token_name": "代币名称例如Tether", "token_name": "代币名称例如Tether",
"token_symbol": "代币符号例如USDT", "token_symbol": "代币符号例如USDT",
"tokenID": "ID", "tokenID": "ID",
"ton_extra_info": "请不要忘记在发送TON交易时指定备忘录",
"tor_connection": "Tor连接", "tor_connection": "Tor连接",
"tor_only": "仅限 Tor", "tor_only": "仅限 Tor",
"total": "全部的", "total": "全部的",

View file

@ -7,7 +7,7 @@ cd "$(dirname "$0")"
CW_DECRED_DIR=$(realpath ../..)/cw_decred CW_DECRED_DIR=$(realpath ../..)/cw_decred
LIBWALLET_PATH="${PWD}/decred/libwallet" LIBWALLET_PATH="${PWD}/decred/libwallet"
LIBWALLET_URL="https://github.com/decred/libwallet.git" LIBWALLET_URL="https://github.com/decred/libwallet.git"
LIBWALLET_VERSION="dba5327d35cb5d5d1ff113b780869deee154511f" LIBWALLET_VERSION="05f8d7374999400fe4d525eb365c39b77d307b14"
if [[ -e $LIBWALLET_PATH ]]; then if [[ -e $LIBWALLET_PATH ]]; then
rm -fr $LIBWALLET_PATH || true rm -fr $LIBWALLET_PATH || true

View file

@ -3,7 +3,7 @@ set -e
. ./config.sh . ./config.sh
LIBWALLET_PATH="${EXTERNAL_IOS_SOURCE_DIR}/libwallet" LIBWALLET_PATH="${EXTERNAL_IOS_SOURCE_DIR}/libwallet"
LIBWALLET_URL="https://github.com/decred/libwallet.git" LIBWALLET_URL="https://github.com/decred/libwallet.git"
LIBWALLET_VERSION="dba5327d35cb5d5d1ff113b780869deee154511f" LIBWALLET_VERSION="05f8d7374999400fe4d525eb365c39b77d307b14"
if [[ -e $LIBWALLET_PATH ]]; then if [[ -e $LIBWALLET_PATH ]]; then
rm -fr $LIBWALLET_PATH rm -fr $LIBWALLET_PATH

View file

@ -4,7 +4,7 @@
LIBWALLET_PATH="${EXTERNAL_MACOS_SOURCE_DIR}/libwallet" LIBWALLET_PATH="${EXTERNAL_MACOS_SOURCE_DIR}/libwallet"
LIBWALLET_URL="https://github.com/decred/libwallet.git" LIBWALLET_URL="https://github.com/decred/libwallet.git"
LIBWALLET_VERSION="dba5327d35cb5d5d1ff113b780869deee154511f" LIBWALLET_VERSION="05f8d7374999400fe4d525eb365c39b77d307b14"
echo "======================= DECRED LIBWALLET =========================" echo "======================= DECRED LIBWALLET ========================="