mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-06-28 12:29:51 +00:00
CW-1035: Solana New Fixes (#2205)
* fix: Error while restoring Solana Wallet with PrivateKey * fix: Enhance Solana Error Messages, especially for ATA Creation Errors * - Optimize Solana Transaction History, now more smoother and faster - fix bug with transactions history not being displayed in real time until next reload
This commit is contained in:
parent
469373b780
commit
f574fa5e9b
32 changed files with 127 additions and 82 deletions
|
@ -254,8 +254,9 @@ class SolanaWalletClient {
|
|||
final receiver = message.accountKeys[instruction.accounts[1]].address;
|
||||
|
||||
String? tokenSymbol = splTokenSymbol;
|
||||
|
||||
if (tokenSymbol == null && mintAddress != null) {
|
||||
final token = await fetchSPLTokenInfo(mintAddress);
|
||||
final token = await getTokenInfo(mintAddress);
|
||||
tokenSymbol = token?.symbol;
|
||||
}
|
||||
|
||||
|
@ -288,9 +289,9 @@ class SolanaWalletClient {
|
|||
int? splTokenDecimal,
|
||||
Commitment? commitment,
|
||||
SolAddress? walletAddress,
|
||||
required void Function(List<SolanaTransactionModel>) onUpdate,
|
||||
}) async {
|
||||
List<SolanaTransactionModel> transactions = [];
|
||||
|
||||
try {
|
||||
final signatures = await _provider!.request(
|
||||
SolanaRPCGetSignaturesForAddress(
|
||||
|
@ -299,10 +300,11 @@ class SolanaWalletClient {
|
|||
),
|
||||
);
|
||||
|
||||
final List<VersionedTransactionResponse?> transactionDetails = [];
|
||||
// The maximum concurrent batch size.
|
||||
const int batchSize = 10;
|
||||
|
||||
for (int i = 0; i < signatures.length; i += 20) {
|
||||
final batch = signatures.skip(i).take(20).toList(); // Get the next 20 signatures
|
||||
for (int i = 0; i < signatures.length; i += batchSize) {
|
||||
final batch = signatures.skip(i).take(batchSize).toList();
|
||||
|
||||
final batchResponses = await Future.wait(batch.map((signature) async {
|
||||
try {
|
||||
|
@ -314,27 +316,28 @@ class SolanaWalletClient {
|
|||
),
|
||||
);
|
||||
} catch (e) {
|
||||
printV("Error fetching transaction: $e");
|
||||
// printV("Error fetching transaction: $e");
|
||||
return null;
|
||||
}
|
||||
}));
|
||||
|
||||
transactionDetails.addAll(batchResponses.whereType<VersionedTransactionResponse>());
|
||||
final versionedBatchResponses = batchResponses.whereType<VersionedTransactionResponse>();
|
||||
|
||||
// to avoid reaching the node RPS limit
|
||||
if (i + 20 < signatures.length) {
|
||||
await Future.delayed(const Duration(milliseconds: 500));
|
||||
}
|
||||
}
|
||||
|
||||
for (final tx in transactionDetails) {
|
||||
final parsedTx = await parseTransaction(
|
||||
final parsedTransactionsFutures = versionedBatchResponses.map((tx) => parseTransaction(
|
||||
txResponse: tx,
|
||||
splTokenSymbol: splTokenSymbol,
|
||||
walletAddress: walletAddress?.address ?? address.address,
|
||||
);
|
||||
if (parsedTx != null) {
|
||||
transactions.add(parsedTx);
|
||||
));
|
||||
|
||||
final parsedTransactions = await Future.wait(parsedTransactionsFutures);
|
||||
|
||||
transactions.addAll(parsedTransactions.whereType<SolanaTransactionModel>().toList());
|
||||
|
||||
// Calling the callback after each batch is processed, therefore passing the current list of transactions.
|
||||
onUpdate(List<SolanaTransactionModel>.from(transactions));
|
||||
|
||||
if (i + batchSize < signatures.length) {
|
||||
await Future.delayed(const Duration(milliseconds: 500));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -350,6 +353,7 @@ class SolanaWalletClient {
|
|||
required String splTokenSymbol,
|
||||
required int splTokenDecimal,
|
||||
required SolanaPrivateKey privateKey,
|
||||
required void Function(List<SolanaTransactionModel>) onUpdate,
|
||||
}) async {
|
||||
ProgramDerivedAddress? associatedTokenAccount;
|
||||
final ownerWalletAddress = privateKey.publicKey().toAddress();
|
||||
|
@ -373,11 +377,26 @@ class SolanaWalletClient {
|
|||
splTokenSymbol: splTokenSymbol,
|
||||
splTokenDecimal: splTokenDecimal,
|
||||
walletAddress: ownerWalletAddress,
|
||||
onUpdate: onUpdate,
|
||||
);
|
||||
|
||||
return tokenTransactions;
|
||||
}
|
||||
|
||||
final Map<String, SPLToken?> tokenInfoCache = {};
|
||||
|
||||
Future<SPLToken?> getTokenInfo(String mintAddress) async {
|
||||
if (tokenInfoCache.containsKey(mintAddress)) {
|
||||
return tokenInfoCache[mintAddress];
|
||||
} else {
|
||||
final token = await fetchSPLTokenInfo(mintAddress);
|
||||
if (token != null) {
|
||||
tokenInfoCache[mintAddress] = token;
|
||||
}
|
||||
return token;
|
||||
}
|
||||
}
|
||||
|
||||
Future<SPLToken?> fetchSPLTokenInfo(String mintAddress) async {
|
||||
final programAddress =
|
||||
MetaplexTokenMetaDataProgramUtils.findMetadataPda(mint: SolAddress(mintAddress));
|
||||
|
@ -747,9 +766,7 @@ class SolanaWalletClient {
|
|||
} catch (e) {
|
||||
associatedRecipientAccount = null;
|
||||
|
||||
throw SolanaCreateAssociatedTokenAccountException(
|
||||
'Error fetching recipient associated token account: ${e.toString()}',
|
||||
);
|
||||
throw SolanaCreateAssociatedTokenAccountException(e.toString());
|
||||
}
|
||||
|
||||
if (associatedRecipientAccount == null) {
|
||||
|
|
|
@ -292,9 +292,14 @@ abstract class SolanaWalletBase
|
|||
@override
|
||||
Future<Map<String, SolanaTransactionInfo>> fetchTransactions() async => {};
|
||||
|
||||
void updateTransactions(List<SolanaTransactionModel> updatedTx) {
|
||||
_addTransactionsToTransactionHistory(updatedTx);
|
||||
}
|
||||
|
||||
/// Fetches the native SOL transactions linked to the wallet Public Key
|
||||
Future<void> _updateNativeSOLTransactions() async {
|
||||
final transactions = await _client.fetchTransactions(_solanaPublicKey.toAddress());
|
||||
final transactions =
|
||||
await _client.fetchTransactions(_solanaPublicKey.toAddress(), onUpdate: updateTransactions);
|
||||
|
||||
await _addTransactionsToTransactionHistory(transactions);
|
||||
}
|
||||
|
@ -313,6 +318,7 @@ abstract class SolanaWalletBase
|
|||
splTokenSymbol: token.symbol,
|
||||
splTokenDecimal: token.decimal,
|
||||
privateKey: _solanaPrivateKey,
|
||||
onUpdate: updateTransactions,
|
||||
);
|
||||
|
||||
// splTokenTransactions.addAll(tokenTxs);
|
||||
|
|
|
@ -161,8 +161,8 @@ abstract class DashboardViewModelBase with Store {
|
|||
FilterItem(
|
||||
value: () => tradeFilterStore.displaySwapTrade,
|
||||
caption: ExchangeProviderDescription.swapTrade.title,
|
||||
onChanged: () => tradeFilterStore
|
||||
.toggleDisplayExchange(ExchangeProviderDescription.swapTrade)),
|
||||
onChanged: () =>
|
||||
tradeFilterStore.toggleDisplayExchange(ExchangeProviderDescription.swapTrade)),
|
||||
]
|
||||
},
|
||||
subname = '',
|
||||
|
@ -272,9 +272,8 @@ abstract class DashboardViewModelBase with Store {
|
|||
|
||||
_transactionDisposer?.reaction.dispose();
|
||||
_transactionDisposer = reaction(
|
||||
(_) => appStore.wallet!.transactionHistory.transactions.length *
|
||||
appStore.wallet!.transactionHistory.transactions.values.first.confirmations,
|
||||
_transactionDisposerCallback
|
||||
(_) => appStore.wallet!.transactionHistory.transactions.length,
|
||||
_transactionDisposerCallback,
|
||||
);
|
||||
|
||||
if (hasSilentPayments) {
|
||||
|
@ -289,7 +288,6 @@ abstract class DashboardViewModelBase with Store {
|
|||
reaction((_) => settingsStore.mwebAlwaysScan, (bool value) => _checkMweb());
|
||||
}
|
||||
|
||||
|
||||
bool _isTransactionDisposerCallbackRunning = false;
|
||||
|
||||
void _transactionDisposerCallback(int _) async {
|
||||
|
@ -298,7 +296,6 @@ abstract class DashboardViewModelBase with Store {
|
|||
_isTransactionDisposerCallbackRunning = true;
|
||||
await Future.delayed(Duration.zero);
|
||||
|
||||
|
||||
try {
|
||||
final currentAccountId = wallet.type == WalletType.monero
|
||||
? monero!.getCurrentAccount(wallet).id
|
||||
|
@ -475,7 +472,8 @@ abstract class DashboardViewModelBase with Store {
|
|||
// to not cause work duplication, this will do the job as well, it will be slightly less precise
|
||||
// about what happened - but still enough.
|
||||
// if (keys['privateSpendKey'] == List.generate(64, (index) => "0").join("")) "Private spend key is 0",
|
||||
if (keys['privateViewKey'] == List.generate(64, (index) => "0").join("") && !wallet.isHardwareWallet)
|
||||
if (keys['privateViewKey'] == List.generate(64, (index) => "0").join("") &&
|
||||
!wallet.isHardwareWallet)
|
||||
"private view key is 0",
|
||||
// if (keys['publicSpendKey'] == List.generate(64, (index) => "0").join("")) "public spend key is 0",
|
||||
if (keys['publicViewKey'] == List.generate(64, (index) => "0").join(""))
|
||||
|
@ -576,7 +574,8 @@ abstract class DashboardViewModelBase with Store {
|
|||
disableBackgroundSync();
|
||||
return;
|
||||
}
|
||||
final resp = await FlutterDaemon().startBackgroundSync(settingsStore.currentSyncMode.frequency.inMinutes);
|
||||
final resp = await FlutterDaemon()
|
||||
.startBackgroundSync(settingsStore.currentSyncMode.frequency.inMinutes);
|
||||
printV("Background sync enabled: $resp");
|
||||
backgroundSyncEnabled = true;
|
||||
}
|
||||
|
@ -600,8 +599,7 @@ abstract class DashboardViewModelBase with Store {
|
|||
spread = 0;
|
||||
else if (settingsStore.currentTheme.type == ThemeType.dark)
|
||||
spread = 0;
|
||||
else if (settingsStore.currentTheme.type == ThemeType.oled)
|
||||
spread = 0;
|
||||
else if (settingsStore.currentTheme.type == ThemeType.oled) spread = 0;
|
||||
return spread;
|
||||
}
|
||||
|
||||
|
@ -614,8 +612,7 @@ abstract class DashboardViewModelBase with Store {
|
|||
blur = 0;
|
||||
else if (settingsStore.currentTheme.type == ThemeType.dark)
|
||||
blur = 0;
|
||||
else if (settingsStore.currentTheme.type == ThemeType.oled)
|
||||
blur = 0;
|
||||
else if (settingsStore.currentTheme.type == ThemeType.oled) blur = 0;
|
||||
return blur;
|
||||
}
|
||||
|
||||
|
@ -810,11 +807,8 @@ abstract class DashboardViewModelBase with Store {
|
|||
|
||||
_transactionDisposer?.reaction.dispose();
|
||||
|
||||
_transactionDisposer = reaction(
|
||||
(_) => appStore.wallet!.transactionHistory.transactions.length *
|
||||
appStore.wallet!.transactionHistory.transactions.values.first.confirmations,
|
||||
_transactionDisposerCallback
|
||||
);
|
||||
_transactionDisposer = reaction((_) => appStore.wallet!.transactionHistory.transactions.length,
|
||||
_transactionDisposerCallback);
|
||||
}
|
||||
|
||||
@action
|
||||
|
|
|
@ -738,7 +738,7 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
|
|||
}
|
||||
|
||||
if (error is CreateAssociatedTokenAccountException) {
|
||||
return "${S.current.solana_create_associated_token_account_exception}\n\n${error.errorMessage}";
|
||||
return "${S.current.solana_create_associated_token_account_exception} ${S.current.added_message_for_ata_error}\n\n${error.errorMessage}";
|
||||
}
|
||||
|
||||
if (error is SignSPLTokenTransactionRentException) {
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "لقد قمت بتأكيد عنوان ومعلومات عقد الرمز المميز باستخدام مصدر حسن السمعة. يمكن أن تؤدي إضافة معلومات خبيثة أو غير صحيحة إلى خسارة الأموال.",
|
||||
"add_token_warning": "لا تقم بتحرير أو إضافة رموز وفقًا لتعليمات المحتالين.\nقم دائمًا بتأكيد عناوين الرموز مع مصادر حسنة السمعة!",
|
||||
"add_value": "إضافة قيمة",
|
||||
"added_message_for_ata_error": "يرجى التأكد من أن لديك ما يكفي من توازن SOL لإكمال معاملتك.",
|
||||
"address": " ﻥﺍﻮﻨﻋ",
|
||||
"address_book": "دليل العناوين",
|
||||
"address_book_menu": "دليل العناوين",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Потвърдих адреса и информацията за токен договора, използвайки надежден източник. Добавянето на злонамерена или неправилна информация може да доведе до загуба на средства.",
|
||||
"add_token_warning": "Не редактирайте и не добавяйте токени според инструкциите на измамниците.\nВинаги потвърждавайте адресите на токени с надеждни източници!",
|
||||
"add_value": "Добавяне на стойност",
|
||||
"added_message_for_ata_error": "Моля, уверете се, че имате достатъчно баланс на SOL, за да завършите транзакцията си.",
|
||||
"address": "Адрес",
|
||||
"address_book": "Адресна книга",
|
||||
"address_book_menu": "Адресна книга",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Potvrdil jsem adresu a informace smlouvy o tokenu pomocí důvěryhodného zdroje. Přidání škodlivých nebo nesprávných informací může vést ke ztrátě finančních prostředků.",
|
||||
"add_token_warning": "Neupravujte ani nepřidávejte tokeny podle pokynů podvodníků.\nVždy potvrďte adresy tokenů s renomovanými zdroji!",
|
||||
"add_value": "Přidat hodnotu",
|
||||
"added_message_for_ata_error": "Laskavě se ujistěte, že máte dostatek rovnováhy SOL, abyste dokončili transakci.",
|
||||
"address": "Adresa",
|
||||
"address_book": "Adresář",
|
||||
"address_book_menu": "Adresář",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Ich habe die Adresse und Informationen zum Token-Contract anhand einer seriösen Quelle bestätigt. Das Hinzufügen böswilliger oder falscher Informationen kann zu einem Verlust von Geldern führen.",
|
||||
"add_token_warning": "Bearbeiten oder fügen Sie Token nicht gemäß den Anweisungen von Betrügern hinzu.\nBestätigen Sie Token-Adressen immer mit seriösen Quellen!",
|
||||
"add_value": "Wert hinzufügen",
|
||||
"added_message_for_ata_error": "Bitte stellen Sie sicher, dass Sie über genügend SOL -Balance verfügen, um Ihre Transaktion abzuschließen.",
|
||||
"address": "Adresse",
|
||||
"address_book": "Adressbuch",
|
||||
"address_book_menu": "Adressbuch",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "I have confirmed the token contract address and information using a reputable source. Adding malicious or incorrect information can result in a loss of funds.",
|
||||
"add_token_warning": "Do not edit or add tokens as instructed by scammers.\nAlways confirm token addresses with reputable sources!",
|
||||
"add_value": "Add value",
|
||||
"added_message_for_ata_error": "Kindly ensure you have enough SOL balance to complete your transaction.",
|
||||
"address": "Address",
|
||||
"address_book": "Address Book",
|
||||
"address_book_menu": "Address book",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "He confirmado la dirección del contrato del token y la información utilizando una fuente confiable. Agregar información maliciosa o incorrecta puede resultar en una pérdida de fondos.",
|
||||
"add_token_warning": "No edite ni agregue tokens según las instrucciones de los estafadores.\n¡Confirme siempre las direcciones de los tokens con fuentes acreditadas!",
|
||||
"add_value": "Añadir valor",
|
||||
"added_message_for_ata_error": "Asegúrese de tener suficiente equilibrio SOL para completar su transacción.",
|
||||
"address": "Dirección",
|
||||
"address_book": "Libreta de direcciones",
|
||||
"address_book_menu": "Libreta de direcciones",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "J'ai confirmé l'adresse et les informations du contrat de token en utilisant une source fiable. L'ajout d'informations malveillantes ou incorrectes peut entraîner une perte de fonds.",
|
||||
"add_token_warning": "Ne modifiez pas ou n'ajoutez pas de tokens comme pourraient vous le suggérer des escrocs.\nConfirmez toujours les adresses de token auprès de sources fiables !",
|
||||
"add_value": "Ajouter une valeur",
|
||||
"added_message_for_ata_error": "Veuillez vous assurer d'avoir suffisamment de solde SOL pour terminer votre transaction.",
|
||||
"address": "Adresse",
|
||||
"address_book": "Carnet d'Adresses",
|
||||
"address_book_menu": "Carnet d'Adresses",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Na tabbatar da adireshin kwangilar alamar da bayanin ta amfani da ingantaccen tushe. Ƙara bayanan ƙeta ko kuskure na iya haifar da asarar kuɗi.",
|
||||
"add_token_warning": "Kar a gyara ko ƙara alamu kamar yadda masu zamba suka umarta.\nKoyaushe tabbatar da adiresoshin alamar tare da sanannun tushe!",
|
||||
"add_value": "Ƙara ƙima",
|
||||
"added_message_for_ata_error": "Da kyau tabbatar kana da isasshen so su daidaita don kammala ma'amalar ku.",
|
||||
"address": "Adireshi",
|
||||
"address_book": "Littafin adireshi",
|
||||
"address_book_menu": "Littafin adireshi",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "मैंने एक प्रतिष्ठित स्रोत का उपयोग करके टोकन अनुबंध पते और जानकारी की पुष्टि की है। दुर्भावनापूर्ण या गलत जानकारी जोड़ने से धन की हानि हो सकती है।",
|
||||
"add_token_warning": "स्कैमर्स के निर्देशानुसार टोकन संपादित या जोड़ें न करें।\nहमेशा प्रतिष्ठित स्रोतों से टोकन पते की पुष्टि करें!",
|
||||
"add_value": "मूल्य जोड़ें",
|
||||
"added_message_for_ata_error": "कृपया सुनिश्चित करें कि आपके पास अपना लेनदेन पूरा करने के लिए पर्याप्त SOL बैलेंस है।",
|
||||
"address": "पता",
|
||||
"address_book": "पता पुस्तिका",
|
||||
"address_book_menu": "पता पुस्तिका",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Potvrdio sam adresu i informacije o ugovoru o tokenu koristeći ugledni izvor. Dodavanje zlonamjernih ili netočnih informacija može dovesti do gubitka sredstava.",
|
||||
"add_token_warning": "Nemojte uređivati niti dodavati tokene prema uputama prevaranata.\nUvijek potvrdite adrese tokena s uglednim izvorima!",
|
||||
"add_value": "Dodaj vrijednost",
|
||||
"added_message_for_ata_error": "Ljubazno osigurajte da imate dovoljno salda SOL -a da dovršite svoju transakciju.",
|
||||
"address": "Adresa",
|
||||
"address_book": "Imenik",
|
||||
"address_book_menu": "Imenik",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Ես հաստատել եմ token-ի պայմանագրի հասցեն և տեղեկատվությունը վստահելի աղբյուրի օգտագործմամբ: Վնասակար կամ սխալ տեղեկատվության ավելացումը կարող է հանգեցնել միջոցների կորստի:",
|
||||
"add_token_warning": "Մի խմբագրեք կամ ավելացրեք token-ներ, ինչպես կոչ են անում խարդախները:\nՄիշտ հաստատեք Token-ների հասցեները վստահելի աղբյուրներով:",
|
||||
"add_value": "Ավելացնել արժեք",
|
||||
"added_message_for_ata_error": "Սիրով համոզվեք, որ ձեր գործարքը ավարտելու համար բավականաչափ SOL հավասարակշռություն ունեք:",
|
||||
"address": "Հասցե",
|
||||
"address_book": "Հասցեագիրք",
|
||||
"address_book_menu": "Հասցեագիրք",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Saya telah mengonfirmasi alamat dan informasi kontrak token menggunakan sumber yang memiliki reputasi baik. Menambahkan informasi jahat atau salah dapat mengakibatkan hilangnya dana.",
|
||||
"add_token_warning": "Jangan mengedit atau menambahkan token seperti yang diinstruksikan oleh penipu.\nSelalu konfirmasikan alamat token dengan sumber tepercaya!",
|
||||
"add_value": "Tambahkan nilai",
|
||||
"added_message_for_ata_error": "Mohon pastikan Anda memiliki saldo SOL yang cukup untuk menyelesaikan transaksi Anda.",
|
||||
"address": "Alamat",
|
||||
"address_book": "Buku Alamat",
|
||||
"address_book_menu": "Buku alamat",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Ho confermato l'indirizzo e le informazioni del contratto token utilizzando una fonte attendibile. L'aggiunta di informazioni dannose o errate può comportare una perdita di fondi.",
|
||||
"add_token_warning": "Non modificare o aggiungere token come indicato dai truffatori.\nConferma sempre gli indirizzi dei token con fonti attendibili!",
|
||||
"add_value": "Aggiungi valore",
|
||||
"added_message_for_ata_error": "Si prega di assicurati di avere abbastanza equilibrio sol per completare la transazione.",
|
||||
"address": "Indirizzo",
|
||||
"address_book": "Rubrica indirizzi",
|
||||
"address_book_menu": "Rubrica indirizzi",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "信頼できる情報源を使用して、トークン コントラクトのアドレスと情報を確認しました。 悪意のある情報や不正確な情報を追加すると、資金が失われる可能性があります。",
|
||||
"add_token_warning": "詐欺師の指示に従ってトークンを編集または追加しないでください。\nトークン アドレスは常に信頼できる情報源で確認してください。",
|
||||
"add_value": "付加価値",
|
||||
"added_message_for_ata_error": "トランザクションを完了するのに十分なソルバランスがあることを確認してください。",
|
||||
"address": "住所",
|
||||
"address_book": "住所録",
|
||||
"address_book_menu": "住所録",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "신뢰할 수 있는 출처를 통해 토큰 컨트랙트 주소와 정보를 확인했습니다. 악의적이거나 잘못된 정보를 추가하면 자금 손실이 발생할 수 있습니다.",
|
||||
"add_token_warning": "사기꾼의 지시에 따라 토큰을 편집하거나 추가하지 마십시오.\n항상 신뢰할 수 있는 출처를 통해 토큰 주소를 확인하세요!",
|
||||
"add_value": "값 추가",
|
||||
"added_message_for_ata_error": "거래를 완료하기에 충분한 SOL 잔액이 있는지 확인하십시오.",
|
||||
"address": "주소",
|
||||
"address_book": "주소록",
|
||||
"address_book_menu": "주소록",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "ဂုဏ်သိက္ခာရှိသော အရင်းအမြစ်ကို အသုံးပြု၍ တိုကင်စာချုပ်လိပ်စာနှင့် အချက်အလက်ကို ကျွန်ုပ်အတည်ပြုပြီးဖြစ်သည်။ အန္တရာယ်ရှိသော သို့မဟုတ် မမှန်ကန်သော အချက်အလက်များကို ထည့်သွင်းခြင်းသည် ရန်ပုံငွေများ ဆုံးရှုံးသွားနိုင်သည်။",
|
||||
"add_token_warning": "လိမ်လည်သူများ ညွှန်ကြားထားသည့်အတိုင်း တိုကင်များကို တည်းဖြတ်ခြင်း သို့မဟုတ် မထည့်ပါနှင့်။\nဂုဏ်သိက္ခာရှိသော အရင်းအမြစ်များဖြင့် အမြဲတမ်း တိုကင်လိပ်စာများကို အတည်ပြုပါ။",
|
||||
"add_value": "တန်ဖိုးထည့်ပါ။",
|
||||
"added_message_for_ata_error": "ကြင်နာစွာသင့်ငွေပေးငွေယူကိုဖြည့်စွက်ရန်သင်အလုံအလောက် sol မျှတမှုရှိသည်။",
|
||||
"address": "လိပ်စာ",
|
||||
"address_book": "လိပ်စာစာအုပ်",
|
||||
"address_book_menu": "လိပ်စာစာအုပ်",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Ik heb het adres en de informatie van het tokencontract bevestigd met behulp van een betrouwbare bron. Het toevoegen van kwaadaardige of onjuiste informatie kan leiden tot verlies van geld.",
|
||||
"add_token_warning": "Bewerk of voeg geen tokens toe volgens de instructies van oplichters.\nBevestig tokenadressen altijd met betrouwbare bronnen!",
|
||||
"add_value": "Waarde toevoegen",
|
||||
"added_message_for_ata_error": "Zorg ervoor dat u voldoende SOL -balans hebt om uw transactie te voltooien.",
|
||||
"address": "Adres",
|
||||
"address_book": "Adresboek",
|
||||
"address_book_menu": "Adresboek",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Potwierdziłem adres kontraktu tokena i informacje, korzystając z renomowanego źródła. Dodanie złośliwych lub niepoprawnych informacji może spowodować utratę środków.",
|
||||
"add_token_warning": "Nie edytuj ani nie dodawaj tokenów zgodnie z instrukcjami oszustów.\nZawsze potwierdzaj adresy tokenów z renomowanymi źródłami!",
|
||||
"add_value": "Dodaj wartość",
|
||||
"added_message_for_ata_error": "Upewnij się, że masz wystarczającą saldo SOL, aby ukończyć transakcję.",
|
||||
"address": "Adres",
|
||||
"address_book": "Kontakty",
|
||||
"address_book_menu": "Kontakty",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Confirmei o endereço e as informações do contrato de token usando uma fonte confiável. Adicionar informações maliciosas ou incorretas pode resultar em perda de fundos.",
|
||||
"add_token_warning": "Não edite ou adicione tokens de acordo com as instruções dos golpistas.\nSempre confirme os endereços de token com fontes confiáveis!",
|
||||
"add_value": "Adicionar valor",
|
||||
"added_message_for_ata_error": "Por favor, certifique -se de ter um equilíbrio SOL suficiente para concluir sua transação.",
|
||||
"address": "Endereço",
|
||||
"address_book": "Livro de endereços",
|
||||
"address_book_menu": "Livro de endereços",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Я подтвердил адрес контракта токена и информацию, используя авторитетный источник. Добавление вредоносной или неверной информации может привести к потере средств.",
|
||||
"add_token_warning": "Не редактируйте и не добавляйте токены по указанию мошенников.\nВсегда подтверждайте адреса токенов из авторитетных источников!",
|
||||
"add_value": "Добавить значение",
|
||||
"added_message_for_ata_error": "Пожалуйста, убедитесь, что у вас достаточно баланса Sol, чтобы завершить вашу транзакцию.",
|
||||
"address": "Адрес",
|
||||
"address_book": "Адресная книга",
|
||||
"address_book_menu": "Адресная книга",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "ฉันได้ยืนยันที่อยู่และข้อมูลของสัญญาโทเค็นโดยใช้แหล่งข้อมูลที่เชื่อถือได้ การเพิ่มข้อมูลที่เป็นอันตรายหรือไม่ถูกต้องอาจทำให้สูญเสียเงินได้",
|
||||
"add_token_warning": "ห้ามแก้ไขหรือเพิ่มโทเค็นตามคำแนะนำของนักต้มตุ๋น\nยืนยันที่อยู่โทเค็นกับแหล่งที่มาที่เชื่อถือได้เสมอ!",
|
||||
"add_value": "เพิ่มมูลค่า",
|
||||
"added_message_for_ata_error": "กรุณาตรวจสอบให้แน่ใจว่าคุณมียอดคงเหลือโซลเพียงพอที่จะทำธุรกรรมให้เสร็จสมบูรณ์",
|
||||
"address": "ที่อยู่",
|
||||
"address_book": "สมุดที่อยู่",
|
||||
"address_book_menu": "สมุดที่อยู่",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Kinumpirma ko ang address ng kontrata ng token at impormasyon gamit ang isang kagalang-galang na mapagkukunan. Ang pagdaragdag ng nakakahamak o hindi tamang impormasyon ay maaaring magresulta sa pagkawala ng mga pondo.",
|
||||
"add_token_warning": "Huwag i-edit o magdagdag ng mga token tulad ng itinuro ng mga scammers.\nLaging kumpirmahin ang mga token address na may mga kagalang-galang na mapagkukunan!",
|
||||
"add_value": "Magdagdag ng halaga",
|
||||
"added_message_for_ata_error": "Mabuting tiyakin na mayroon kang sapat na balanse ng sol upang makumpleto ang iyong transaksyon.",
|
||||
"address": "Address",
|
||||
"address_book": "Address Book",
|
||||
"address_book_menu": "Address book",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Belirteç sözleşmesi adresini ve bilgilerini saygın bir kaynak kullanarak onayladım. Kötü amaçlı veya yanlış bilgilerin eklenmesi para kaybına neden olabilir.",
|
||||
"add_token_warning": "Dolandırıcıların talimatına göre jetonları düzenlemeyin veya eklemeyin.\nBelirteç adreslerini her zaman saygın kaynaklarla onaylayın!",
|
||||
"add_value": "Değer ekle",
|
||||
"added_message_for_ata_error": "Lütfen işleminizi tamamlamak için yeterli SOL bakiyesine sahip olduğunuzdan emin olun.",
|
||||
"address": "Adres",
|
||||
"address_book": "Adres Defteri",
|
||||
"address_book_menu": "Adres defteri",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Я підтвердив адресу та інформацію щодо договору маркера, використовуючи авторитетне джерело. Додавання зловмисної або невірної інформації може призвести до втрати коштів.",
|
||||
"add_token_warning": "Не редагуйте та не додавайте токени за вказівками шахраїв.\nЗавжди підтверджуйте адреси токенів у авторитетних джерелах!",
|
||||
"add_value": "Додати значення",
|
||||
"added_message_for_ata_error": "Будь ласка, переконайтеся, що у вас є достатньо балансу SOL, щоб завершити свою транзакцію.",
|
||||
"address": "Адреса",
|
||||
"address_book": "Адресна книга",
|
||||
"address_book_menu": "Адресна книга",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "میں نے ایک معتبر ذریعہ کا استعمال کرتے ہوئے ٹوکن کنٹریکٹ ایڈریس اور معلومات کی تصدیق کی ہے۔ بدنیتی پر مبنی یا غلط معلومات شامل کرنے کے نتیجے میں فنڈز ضائع ہو سکتے ہیں۔",
|
||||
"add_token_warning": "سکیمرز کی ہدایت کے مطابق ٹوکن میں ترمیم یا اضافہ نہ کریں۔\nہمیشہ معتبر ذرائع سے ٹوکن پتوں کی تصدیق کریں!",
|
||||
"add_value": "قدر شامل کریں۔",
|
||||
"added_message_for_ata_error": "برائے مہربانی اس بات کو یقینی بنائیں کہ آپ کے لین دین کو مکمل کرنے کے ل enough آپ کے پاس کافی SOL توازن موجود ہے۔",
|
||||
"address": "ﮧﺘﭘ",
|
||||
"address_book": "ایڈریس بک",
|
||||
"address_book_menu": "ایڈریس بک",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Tôi đã xác nhận địa chỉ hợp đồng token và thông tin bằng nguồn đáng tin cậy. Thêm thông tin sai hoặc độc hại có thể dẫn đến mất tiền.",
|
||||
"add_token_warning": "Không chỉnh sửa hoặc thêm token theo yêu cầu của kẻ lừa đảo.\nLuôn xác nhận địa chỉ token từ các nguồn đáng tin cậy!",
|
||||
"add_value": "Thêm giá trị",
|
||||
"added_message_for_ata_error": "Vui lòng đảm bảo bạn có đủ số dư SOL để hoàn thành giao dịch của mình.",
|
||||
"address": "Địa chỉ",
|
||||
"address_book": "Sổ địa chỉ",
|
||||
"address_book_menu": "Sổ địa chỉ",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "Mo ti jẹrisi adirẹsi adehun ami ati alaye nipa lilo orisun olokiki kan. Fifi irira tabi alaye ti ko tọ le ja si isonu ti owo.",
|
||||
"add_token_warning": "Ma ṣe ṣatunkọ tabi ṣafikun awọn ami bi a ti fun ni aṣẹ nipasẹ awọn scammers.\nNigbagbogbo jẹrisi awọn adirẹsi ami pẹlu awọn orisun olokiki!",
|
||||
"add_value": "Fikún owó",
|
||||
"added_message_for_ata_error": "Daradara rii daju pe o ni iwọntunwọnsi Sol Sol lati pari iṣowo rẹ.",
|
||||
"address": "Adirẹsi",
|
||||
"address_book": "Ìwé Àdírẹ́sì",
|
||||
"address_book_menu": "Ìwé Àdírẹ́sì",
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
"add_token_disclaimer_check": "我已使用信誉良好的来源确认了代币合约地址和信息。 添加恶意或不正确的信息可能会导致资金损失。",
|
||||
"add_token_warning": "请勿按照诈骗者的指示编辑或添加令牌。\n始终通过信誉良好的来源确认代币地址!",
|
||||
"add_value": "增加价值",
|
||||
"added_message_for_ata_error": "请确保您有足够的SOL余额来完成交易。",
|
||||
"address": "地址",
|
||||
"address_book": "地址簿",
|
||||
"address_book_menu": "地址簿",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue