diff --git a/cw_core/lib/erc20_token.dart b/cw_core/lib/erc20_token.dart index be0a9a2cb..c8c047c5e 100644 --- a/cw_core/lib/erc20_token.dart +++ b/cw_core/lib/erc20_token.dart @@ -1,10 +1,11 @@ +import 'package:cw_core/crypto_currency.dart'; import 'package:cw_core/keyable.dart'; import 'package:hive/hive.dart'; part 'erc20_token.g.dart'; @HiveType(typeId: Erc20Token.typeId) -class Erc20Token extends HiveObject with Keyable { +class Erc20Token extends CryptoCurrency with Keyable, HiveObjectMixin { @HiveField(0) final String name; @HiveField(1) @@ -14,29 +15,39 @@ class Erc20Token extends HiveObject with Keyable { @HiveField(3) final int decimal; @HiveField(4, defaultValue: false) - final bool enabled; + bool _enabled; + + bool get enabled => _enabled; + + set enabled(bool value) { + _enabled = value; + this.save(); + } Erc20Token({ required this.name, required this.symbol, required this.contractAddress, required this.decimal, - this.enabled = false, - }); + bool enabled = false, + String? iconPath, + }) : _enabled = enabled, + super( + name: symbol.toLowerCase(), + title: symbol.toUpperCase(), + fullName: name, + tag: "ETH", + iconPath: iconPath, + ); static const typeId = 12; static const boxName = 'Erc20Tokens'; @override - bool operator ==(other) => - other is Erc20Token && - (other.name == name && - other.symbol == symbol && - other.contractAddress == contractAddress && - other.decimal == decimal); + bool operator ==(other) => other is Erc20Token && other.contractAddress == contractAddress; @override - int get hashCode => name.hashCode ^ symbol.hashCode ^ contractAddress.hashCode ^ decimal.hashCode; + int get hashCode => contractAddress.hashCode; @override dynamic get keyIndex { diff --git a/cw_ethereum/lib/ethereum_client.dart b/cw_ethereum/lib/ethereum_client.dart index e01f0ee93..03ab167df 100644 --- a/cw_ethereum/lib/ethereum_client.dart +++ b/cw_ethereum/lib/ethereum_client.dart @@ -13,15 +13,6 @@ import 'package:cw_core/node.dart'; import 'package:cw_ethereum/ethereum_transaction_priority.dart'; class EthereumClient { - // TODO: Remove - static const Map _erc20Currencies = { - CryptoCurrency.usdc: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", - CryptoCurrency.usdterc20: "0xdac17f958d2ee523a2206206994597c13d831ec7", - CryptoCurrency.shib: "0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE", - }; - - Map get erc20Currencies => _erc20Currencies; - Web3Client? _client; StreamSubscription? subscription; @@ -249,13 +240,7 @@ I/flutter ( 4474): Gas Used: 53000 _client?.dispose(); } -// Future sendERC20Token( -// EthereumAddress to, CryptoCurrency erc20Currency, BigInt amount) async { -// if (_erc20Currencies[erc20Currency] == null) { -// throw "Unsupported ERC20 token"; -// } -// -// try { +// Future _getDecimalPlacesForContract(DeployedContract contract) async { // final String abi = await rootBundle.loadString("assets/abi_json/erc20_abi.json"); // final contractAbi = ContractAbi.fromJson(abi, "ERC20"); // @@ -263,29 +248,14 @@ I/flutter ( 4474): Gas Used: 53000 // contractAbi, // EthereumAddress.fromHex(_erc20Currencies[erc20Currency]!), // ); -// -// final transferFunction = contract.function('transfer'); -// final success = await _client!.call( +// final decimalsFunction = contract.function('decimals'); +// final decimals = await _client!.call( // contract: contract, -// function: transferFunction, -// params: [to, amount], +// function: decimalsFunction, +// params: [], // ); // -// return success.first as bool; -// } catch (e) { -// return false; +// int exponent = int.parse(decimals.first.toString()); +// return exponent; // } -// } -// -// Future _getDecimalPlacesForContract(DeployedContract contract) async { -// final decimalsFunction = contract.function('decimals'); -// final decimals = await _client!.call( -// contract: contract, -// function: decimalsFunction, -// params: [], -// ); -// -// int exponent = int.parse(decimals.first.toString()); -// return exponent; -// } } diff --git a/cw_ethereum/lib/ethereum_wallet.dart b/cw_ethereum/lib/ethereum_wallet.dart index 49c7c142f..b0dbbdf06 100644 --- a/cw_ethereum/lib/ethereum_wallet.dart +++ b/cw_ethereum/lib/ethereum_wallet.dart @@ -260,9 +260,10 @@ abstract class EthereumWalletBase /// Get Erc20 Tokens balances for (var token in erc20TokensBox.values) { try { - final currency = erc20Currencies.firstWhere((element) => element.title == token.symbol); - balance[currency] = - await _client.fetchERC20Balances(_privateKey.address, token.contractAddress); + balance[token] = await _client.fetchERC20Balances( + _privateKey.address, + token.contractAddress, + ); } catch (_) {} } await save(); @@ -285,29 +286,40 @@ abstract class EthereumWalletBase return EthPrivateKey.fromHex(HEX.encode(addressAtIndex.privateKey as List)); } - Future? updateBalance() => null; + Future? updateBalance() async => await _updateBalance(); - List get erc20Currencies => erc20TokensBox.values - .map((token) => CryptoCurrency.all.firstWhere( - (currency) => currency.title.toLowerCase() == token.symbol.toLowerCase(), - orElse: () => CryptoCurrency( - name: token.name, - title: token.symbol, - fullName: token.name, - ), - )) - .toList(); + List get erc20Currencies => erc20TokensBox.values.toList(); - Future addErc20Token(String contractAddress) async { - final token = await _client.getErc20Token(contractAddress); + Future addErc20Token(Erc20Token token) async { + String? iconPath; + try { + iconPath = CryptoCurrency.all + .firstWhere((element) => element.title.toUpperCase() == token.symbol.toUpperCase()) + .iconPath; - if (token == null) { - return null; - } + // (if exists) Delete already existing token with the same contract address + erc20TokensBox.values + .firstWhere((element) => element.contractAddress == token.contractAddress) + .delete(); + } catch (_) {} - erc20TokensBox.add(token); + await erc20TokensBox.add(Erc20Token( + name: token.name, + symbol: token.symbol, + contractAddress: token.contractAddress, + decimal: token.decimal, + enabled: true, + iconPath: iconPath, + )); - return CryptoCurrency(name: token.name, title: token.symbol, fullName: token.name); + _updateBalance(); + } + + Future deleteErc20Token(Erc20Token token) async { + await token.delete(); + + balance.remove(token); + _updateBalance(); } Future getErc20Token(String contractAddress) async => diff --git a/lib/ethereum/cw_ethereum.dart b/lib/ethereum/cw_ethereum.dart index 62a7258a1..c9d2737ab 100644 --- a/lib/ethereum/cw_ethereum.dart +++ b/lib/ethereum/cw_ethereum.dart @@ -81,16 +81,18 @@ class CWEthereum extends Ethereum { int formatterEthereumParseAmount(String amount) => EthereumFormatter.parseEthereumAmount(amount); @override - List getERC20Currencies(WalletBase wallet) { + List getERC20Currencies(WalletBase wallet) { final ethereumWallet = wallet as EthereumWallet; return ethereumWallet.erc20Currencies; } @override - Future addErc20Token(WalletBase wallet, String contractAddress) async { - final ethereumWallet = wallet as EthereumWallet; - return await ethereumWallet.addErc20Token(contractAddress); - } + Future addErc20Token(WalletBase wallet, Erc20Token token) async => + await (wallet as EthereumWallet).addErc20Token(token); + + @override + Future deleteErc20Token(WalletBase wallet, Erc20Token token) async => + await (wallet as EthereumWallet).deleteErc20Token(token); @override Future getErc20Token(WalletBase wallet, String contractAddress) async { diff --git a/lib/src/screens/dashboard/edit_token_page.dart b/lib/src/screens/dashboard/edit_token_page.dart index 1825b0f4d..47aee24e8 100644 --- a/lib/src/screens/dashboard/edit_token_page.dart +++ b/lib/src/screens/dashboard/edit_token_page.dart @@ -52,6 +52,7 @@ class _EditTokenPageBodyState extends State { final GlobalKey _formKey = GlobalKey(); + bool _showDisclaimer = false; bool _disclaimerChecked = false; @override @@ -69,6 +70,13 @@ class _EditTokenPageBodyState extends State { if (!_contractAddressFocusNode.hasFocus) { _getTokenInfo(_contractAddressController.text); } + + final contractAddress = _contractAddressController.text; + if (contractAddress.isNotEmpty && contractAddress != widget.erc20token?.contractAddress) { + setState(() { + _showDisclaimer = true; + }); + } }); } @@ -83,22 +91,42 @@ class _EditTokenPageBodyState extends State { child: Column( children: [ Container( - padding: EdgeInsets.symmetric(vertical: 16, horizontal: 24), + padding: EdgeInsets.symmetric(vertical: 16, horizontal: 28), decoration: BoxDecoration( color: Theme.of(context).accentTextTheme.bodySmall!.color!, borderRadius: BorderRadius.circular(12), ), child: Row( + crossAxisAlignment: CrossAxisAlignment.start, children: [ Image.asset('assets/images/restore_keys.png'), - const SizedBox(width: 16), - Expanded(child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(S.of(context).warning), - Text(S.of(context).add_token_warning), - ], - )) + const SizedBox(width: 24), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + S.of(context).warning, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Theme.of(context).primaryTextTheme.titleLarge!.color!, + ), + ), + Padding( + padding: EdgeInsets.only(top: 5), + child: Text( + S.of(context).add_token_warning, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.normal, + color: Theme.of(context).primaryTextTheme.labelSmall!.color!, + ), + ), + ), + ], + ), + ), ], ), ), @@ -110,23 +138,25 @@ class _EditTokenPageBodyState extends State { bottomSectionPadding: EdgeInsets.only(left: 24, right: 24, bottom: 24), bottomSection: Column( children: [ - CheckboxWidget( - value: _disclaimerChecked, - caption: S.of(context).add_token_disclaimer_check, - onChanged: (value) { - _disclaimerChecked = value; - }, - ), + if (_showDisclaimer) ...[ + CheckboxWidget( + value: _disclaimerChecked, + caption: S.of(context).add_token_disclaimer_check, + onChanged: (value) { + _disclaimerChecked = value; + }, + ), + SizedBox(height: 20), + ], Row( children: [ Expanded( child: PrimaryButton( - onPressed: () { + onPressed: () async { if (widget.erc20token != null) { - // widget.homeSettingsViewModel.deleteErc20Token(widget.erc20token!); - } else { - Navigator.pop(context); + await widget.homeSettingsViewModel.deleteErc20Token(widget.erc20token!); } + Navigator.pop(context); }, text: widget.erc20token != null ? S.of(context).delete : S.of(context).cancel, color: Colors.red, @@ -137,8 +167,15 @@ class _EditTokenPageBodyState extends State { Expanded( child: PrimaryButton( onPressed: () async { - if (_formKey.currentState!.validate() && _disclaimerChecked) { - widget.homeSettingsViewModel.addErc20Token(_contractAddressController.text); + if (_formKey.currentState!.validate() && + (!_showDisclaimer || _disclaimerChecked)) { + await widget.homeSettingsViewModel.addErc20Token(Erc20Token( + name: _tokenNameController.text, + symbol: _tokenSymbolController.text, + contractAddress: _contractAddressController.text, + decimal: int.parse(_tokenDecimalController.text), + )); + Navigator.pop(context); } }, text: S.of(context).save, @@ -172,12 +209,16 @@ class _EditTokenPageBodyState extends State { if (value?.text?.isNotEmpty ?? false) { _contractAddressController.text = value!.text!; + + _getTokenInfo(_contractAddressController.text); + setState(() { + _showDisclaimer = true; + }); } - FocusScope.of(context).unfocus(); } Widget _tokenForm() { - return Form( + return Form( key: _formKey, child: Column( mainAxisSize: MainAxisSize.min, @@ -237,11 +278,15 @@ class _EditTokenPageBodyState extends State { textInputAction: TextInputAction.done, hintText: S.of(context).token_decimal, validator: (text) { - if (text?.isNotEmpty ?? false) { - return null; + if (text?.isEmpty ?? true) { + return S.of(context).field_required; + } + if (int.tryParse(text!) == null) { + // TODO: add localization + return 'S.of(context).invalid_input'; } - return S.of(context).field_required; + return null; }, ), SizedBox(height: 24), diff --git a/lib/src/screens/dashboard/home_settings_page.dart b/lib/src/screens/dashboard/home_settings_page.dart index b2ee70c33..f8c193130 100644 --- a/lib/src/screens/dashboard/home_settings_page.dart +++ b/lib/src/screens/dashboard/home_settings_page.dart @@ -1,3 +1,5 @@ +import 'dart:math'; + import 'package:cake_wallet/entities/sort_balance_types.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/routes.dart'; @@ -42,6 +44,7 @@ class HomeSettingsPage extends BasePage { ), ), Divider(color: Theme.of(context).primaryTextTheme.bodySmall!.decorationColor!), + const SizedBox(height: 20), Row( children: [ Expanded( @@ -95,15 +98,50 @@ class HomeSettingsPage extends BasePage { return Container( margin: EdgeInsets.only(top: 16, left: 16, right: 16), child: Observer( - builder: (_) => SettingsSwitcherCell( - title: _homeSettingsViewModel.tokens[index], - value: false, - onValueChange: (_, bool value) {}, - decoration: BoxDecoration( - color: Theme.of(context).accentTextTheme.bodySmall!.color!, - borderRadius: BorderRadius.circular(30), - ), - ), + builder: (_) { + final token = _homeSettingsViewModel.tokens[index]; + + return SettingsSwitcherCell( + title: "${token.name} " + "(${token.symbol})", + value: token.enabled, + onValueChange: (_, bool value) { + token.enabled = value; + }, + onTap: (_) { + Navigator.pushNamed(context, Routes.editToken, arguments: { + 'homeSettingsViewModel': _homeSettingsViewModel, + 'token': token, + }); + }, + leading: token.iconPath != null + ? Container( + child: Image.asset( + token.iconPath!, + height: 30.0, + width: 30.0, + ), + ) + : Container( + height: 30.0, + width: 30.0, + child: Center( + child: Text( + token.symbol.substring(0, min(token.symbol.length, 2)), + style: TextStyle(fontSize: 11), + ), + ), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.grey.shade400, + ), + ), + decoration: BoxDecoration( + color: Theme.of(context).accentTextTheme.bodySmall!.color!, + borderRadius: BorderRadius.circular(30), + ), + ); + }, ), ); }, diff --git a/lib/src/screens/restore/restore_wallet_options_page.dart b/lib/src/screens/restore/restore_wallet_options_page.dart deleted file mode 100644 index bf36ddd10..000000000 --- a/lib/src/screens/restore/restore_wallet_options_page.dart +++ /dev/null @@ -1,85 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:cake_wallet/src/screens/restore/widgets/restore_button.dart'; -import 'package:cake_wallet/src/screens/base_page.dart'; -import 'package:cw_core/wallet_type.dart'; -import 'package:cake_wallet/generated/i18n.dart'; - -class RestoreWalletOptionsPage extends BasePage { - RestoreWalletOptionsPage( - {required this.type, - required this.onRestoreFromSeed, - required this.onRestoreFromKeys}); - - final WalletType type; - final Function(BuildContext context) onRestoreFromSeed; - final Function(BuildContext context) onRestoreFromKeys; - - @override - String get title => S.current.restore_restore_wallet; - - final imageSeed = Image.asset('assets/images/restore_seed.png'); - final imageKeys = Image.asset('assets/images/restore_keys.png'); - - @override - Widget body(BuildContext context) { - return Container( - width: double.infinity, - height: double.infinity, - padding: EdgeInsets.all(24), - child: SingleChildScrollView( - child: Column( - children: [ - RestoreButton( - onPressed: () => onRestoreFromSeed(context), - image: imageSeed, - title: S.of(context).restore_title_from_seed, - description: _fromSeedDescription(context)), - Padding( - padding: EdgeInsets.only(top: 24), - child: RestoreButton( - onPressed: () => onRestoreFromKeys(context), - image: imageKeys, - title: _fromKeyTitle(context), - description: _fromKeyDescription(context)), - ) - ], - ), - )); - } - - String _fromSeedDescription(BuildContext context) { - switch (type) { - case WalletType.monero: - return S.of(context).restore_description_from_seed; - case WalletType.bitcoin: - // TODO: Add transaction for bitcoin description. - return S.of(context).restore_bitcoin_description_from_seed; - default: - return ''; - } - } - - String _fromKeyDescription(BuildContext context) { - switch (type) { - case WalletType.monero: - return S.of(context).restore_description_from_keys; - case WalletType.bitcoin: - // TODO: Add transaction for bitcoin description. - return S.of(context).restore_bitcoin_description_from_keys; - default: - return ''; - } - } - - String _fromKeyTitle(BuildContext context) { - switch (type) { - case WalletType.monero: - return S.of(context).restore_title_from_keys; - case WalletType.bitcoin: - // TODO: Add transaction for bitcoin description. - return S.of(context).restore_bitcoin_title_from_keys; - default: - return ''; - } - } -} diff --git a/lib/src/screens/settings/widgets/settings_switcher_cell.dart b/lib/src/screens/settings/widgets/settings_switcher_cell.dart index 6887a152d..0e5c04524 100644 --- a/lib/src/screens/settings/widgets/settings_switcher_cell.dart +++ b/lib/src/screens/settings/widgets/settings_switcher_cell.dart @@ -3,14 +3,23 @@ import 'package:cake_wallet/src/widgets/standard_list.dart'; import 'package:cake_wallet/src/widgets/standard_switch.dart'; class SettingsSwitcherCell extends StandardListRow { - SettingsSwitcherCell( - {required String title, required this.value, this.onValueChange, Decoration? decoration}) - : super(title: title, isSelected: false, decoration: decoration); + SettingsSwitcherCell({ + required String title, + required this.value, + this.onValueChange, + Decoration? decoration, + this.leading, + void Function(BuildContext context)? onTap, + }) : super(title: title, isSelected: false, decoration: decoration, onTap: onTap); final bool value; final void Function(BuildContext context, bool value)? onValueChange; + final Widget? leading; @override - Widget buildTrailing(BuildContext context) => StandardSwitch( - value: value, onTaped: () => onValueChange?.call(context, !value)); + Widget buildTrailing(BuildContext context) => + StandardSwitch(value: value, onTaped: () => onValueChange?.call(context, !value)); + + @override + Widget? buildLeading(BuildContext context) => leading; } diff --git a/lib/src/widgets/checkbox_widget.dart b/lib/src/widgets/checkbox_widget.dart index d9830ceb7..20c900b25 100644 --- a/lib/src/widgets/checkbox_widget.dart +++ b/lib/src/widgets/checkbox_widget.dart @@ -21,53 +21,45 @@ class CheckboxWidgetState extends State { @override Widget build(BuildContext context) { - return GestureDetector( + return InkWell( onTap: () { value = !value; onChanged(value); setState(() {}); }, child: Row( - mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( - height: 19, - width: 19, + height: 24.0, + width: 24.0, + margin: EdgeInsets.only(right: 10.0), decoration: BoxDecoration( - color: value - ? Palette.blueCraiola - : Theme.of(context).accentTextTheme.displayMedium!.decorationColor!, - borderRadius: BorderRadius.all(Radius.circular(2)), border: Border.all( - color: value - ? Palette.blueCraiola - : Theme.of(context).accentTextTheme.labelSmall!.color!, - width: 1, + color: Theme.of(context).primaryTextTheme.bodySmall!.color!, + width: 1.0, ), + borderRadius: BorderRadius.all( + Radius.circular(8.0), + ), + color: Theme.of(context).colorScheme.background, ), child: value - ? Center( - child: Icon( - Icons.done, - color: Colors.white, - size: 14, - ), + ? Icon( + Icons.check, + color: Colors.blue, + size: 20.0, ) : null, ), Expanded( - child: Padding( - padding: EdgeInsetsDirectional.only(start: 16), - child: Text( - caption, - style: TextStyle( - color: Theme.of(context).primaryTextTheme.titleLarge!.color!, - fontSize: 18, - fontFamily: 'Lato', - fontWeight: FontWeight.w500, - decoration: TextDecoration.none), + child: Text( + caption, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 14.0, + color: Theme.of(context).primaryTextTheme.titleLarge!.color!, ), ), ) diff --git a/lib/view_model/dashboard/home_settings_view_model.dart b/lib/view_model/dashboard/home_settings_view_model.dart index 64856aff8..01591cab7 100644 --- a/lib/view_model/dashboard/home_settings_view_model.dart +++ b/lib/view_model/dashboard/home_settings_view_model.dart @@ -2,7 +2,6 @@ import 'package:cake_wallet/entities/sort_balance_types.dart'; import 'package:cake_wallet/ethereum/ethereum.dart'; import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/view_model/dashboard/balance_view_model.dart'; -import 'package:cw_core/crypto_currency.dart'; import 'package:cw_core/erc20_token.dart'; import 'package:mobx/mobx.dart'; @@ -11,11 +10,16 @@ part 'home_settings_view_model.g.dart'; class HomeSettingsViewModel = HomeSettingsViewModelBase with _$HomeSettingsViewModel; abstract class HomeSettingsViewModelBase with Store { - HomeSettingsViewModelBase(this._settingsStore, this._balanceViewModel); + HomeSettingsViewModelBase(this._settingsStore, this._balanceViewModel) + : tokens = ObservableList() { + _updateTokensList(); + } final SettingsStore _settingsStore; final BalanceViewModel _balanceViewModel; + final ObservableList tokens; + @computed SortBalanceBy get sortBalanceBy => _settingsStore.sortBalanceBy; @@ -28,12 +32,21 @@ abstract class HomeSettingsViewModelBase with Store { @action void setPinNativeToken(bool value) => _settingsStore.pinNativeTokenAtTop = value; - @computed - List get tokens => - _balanceViewModel.balances.keys.map((e) => e.fullName ?? e.title).toList(); + @action + void _updateTokensList() { + tokens.clear(); + tokens.addAll(ethereum!.getERC20Currencies(_balanceViewModel.wallet)); + } - Future addErc20Token(String contractAddress) async => - await ethereum!.addErc20Token(_balanceViewModel.wallet, contractAddress); + Future addErc20Token(Erc20Token token) async { + await ethereum!.addErc20Token(_balanceViewModel.wallet, token); + _updateTokensList(); + } + + Future deleteErc20Token(Erc20Token token) async { + await ethereum!.deleteErc20Token(_balanceViewModel.wallet, token); + _updateTokensList(); + } Future getErc20Token(String contractAddress) async => await ethereum!.getErc20Token(_balanceViewModel.wallet, contractAddress); diff --git a/res/values/strings_ar.arb b/res/values/strings_ar.arb index 7133c72d0..6e9e73042 100644 --- a/res/values/strings_ar.arb +++ b/res/values/strings_ar.arb @@ -731,7 +731,7 @@ "search_add_token": "بحث / إضافة رمز", "edit_token": "تحرير الرمز المميز", "warning": "تحذير", - "add_token_warning": "لا تقم بتحرير أو إضافة رموز وفقًا لتعليمات المحتالين. قم دائمًا بتأكيد عناوين الرموز مع مصادر حسنة السمعة!", + "add_token_warning": "لا تقم بتحرير أو إضافة رموز وفقًا لتعليمات المحتالين.\nقم دائمًا بتأكيد عناوين الرموز مع مصادر حسنة السمعة!", "add_token_disclaimer_check": "لقد قمت بتأكيد عنوان ومعلومات عقد الرمز المميز باستخدام مصدر حسن السمعة. يمكن أن تؤدي إضافة معلومات خبيثة أو غير صحيحة إلى خسارة الأموال.", "token_contract_address": "عنوان عقد الرمز", "token_name": "اسم الرمز ، على سبيل المثال: Tether", diff --git a/res/values/strings_bg.arb b/res/values/strings_bg.arb index f13d2bd2c..92fd3ffb9 100644 --- a/res/values/strings_bg.arb +++ b/res/values/strings_bg.arb @@ -727,7 +727,7 @@ "search_add_token": "Търсене/Добавяне на токен", "edit_token": "Редактиране на токена", "warning": "Внимание", - "add_token_warning": "Не редактирайте и не добавяйте токени според инструкциите на измамниците. Винаги потвърждавайте адресите на токени с надеждни източници!", + "add_token_warning": "Не редактирайте и не добавяйте токени според инструкциите на измамниците.\nВинаги потвърждавайте адресите на токени с надеждни източници!", "add_token_disclaimer_check": "Потвърдих адреса и информацията за токен договора, използвайки надежден източник. Добавянето на злонамерена или неправилна информация може да доведе до загуба на средства.", "token_contract_address": "Адрес на токен договор", "token_name": "Име на токена, напр.: Tether", diff --git a/res/values/strings_cs.arb b/res/values/strings_cs.arb index c607bb171..6a6fb0251 100644 --- a/res/values/strings_cs.arb +++ b/res/values/strings_cs.arb @@ -727,7 +727,7 @@ "search_add_token": "Hledat / Přidat token", "edit_token": "Upravit token", "warning": "Varování", - "add_token_warning": "Neupravujte ani nepřidávejte tokeny podle pokynů podvodníků. Vždy potvrďte adresy tokenů s renomovanými zdroji!", + "add_token_warning": "Neupravujte ani nepřidávejte tokeny podle pokynů podvodníků.\nVždy potvrďte adresy tokenů s renomovanými zdroji!", "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ů.", "token_contract_address": "Adresa tokenové smlouvy", "token_name": "Název tokenu např.: Tether", diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index 64b7c1040..1542b20b8 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -733,7 +733,7 @@ "search_add_token": "Token suchen / hinzufügen", "edit_token": "Token bearbeiten", "warning": "Warnung", - "add_token_warning": "Bearbeiten oder fügen Sie Token nicht gemäß den Anweisungen von Betrügern hinzu. Bestätigen Sie Token-Adressen immer mit seriösen Quellen!", + "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_token_disclaimer_check": "Ich habe die Adresse und Informationen zum Token-Vertrag anhand einer seriösen Quelle bestätigt. Das Hinzufügen böswilliger oder falscher Informationen kann zu einem Verlust von Geldern führen.", "token_contract_address": "Token-Vertragsadresse", "token_name": "Token-Name, z. B.: Tether", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index f3a4b8828..9f3bd1883 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -733,7 +733,7 @@ "search_add_token": "Search / Add token", "edit_token": "Edit token", "warning": "Warning", - "add_token_warning": "Do not edit or add tokens as instructed by scammers. Always confirm token addresses with reputable sources!", + "add_token_warning": "Do not edit or add tokens as instructed by scammers.\nAlways confirm token addresses with reputable sources!", "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.", "token_contract_address": "Token contract address", "token_name": "Token name eg: Tether", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 4a948901c..db8474c38 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -733,7 +733,7 @@ "search_add_token": "Buscar/Agregar token", "edit_token": "Editar token", "warning": "Advertencia", - "add_token_warning": "No edite ni agregue tokens según las instrucciones de los estafadores. ¡Confirme siempre las direcciones de los tokens con fuentes acreditadas!", + "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_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.", "token_contract_address": "Dirección de contrato de token", "token_name": "Nombre del token, por ejemplo: Tether", diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb index 7eb430b29..039ed7136 100644 --- a/res/values/strings_fr.arb +++ b/res/values/strings_fr.arb @@ -733,7 +733,7 @@ "search_add_token": "Rechercher / Ajouter un jeton", "edit_token": "Modifier le jeton", "warning": "Avertissement", - "add_token_warning": "Ne modifiez pas ou n'ajoutez pas de jetons comme indiqué par les escrocs. Confirmez toujours les adresses de jeton auprès de sources fiables !", + "add_token_warning": "Ne modifiez pas ou n'ajoutez pas de jetons comme indiqué par les escrocs.\nConfirmez toujours les adresses de jeton auprès de sources fiables !", "add_token_disclaimer_check": "J'ai confirmé l'adresse et les informations du contrat de jeton en utilisant une source fiable. L'ajout d'informations malveillantes ou incorrectes peut entraîner une perte de fonds.", "token_contract_address": "Adresse du contrat de jeton", "token_name": "Nom du jeton, par exemple : Tether", diff --git a/res/values/strings_ha.arb b/res/values/strings_ha.arb index c232a212b..f081e776d 100644 --- a/res/values/strings_ha.arb +++ b/res/values/strings_ha.arb @@ -716,7 +716,7 @@ "search_add_token": "Bincika / Ƙara alama", "edit_token": "Gyara alamar", "warning": "Gargadi", - "add_token_warning": "Kar a gyara ko ƙara alamu kamar yadda masu zamba suka umarta. Koyaushe tabbatar da adiresoshin alamar tare da sanannun tushe!", + "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_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.", "token_contract_address": "Adireshin kwangilar Token", "token_name": "Alamar sunan misali: Tether", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index c14f2ad6f..39fdd4780 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -733,7 +733,7 @@ "search_add_token": "खोजें/टोकन जोड़ें", "edit_token": "टोकन संपादित करें", "warning": "चेतावनी", - "add_token_warning": "स्कैमर्स के निर्देशानुसार टोकन संपादित या जोड़ें न करें। हमेशा प्रतिष्ठित स्रोतों से टोकन पते की पुष्टि करें!", + "add_token_warning": "स्कैमर्स के निर्देशानुसार टोकन संपादित या जोड़ें न करें।\nहमेशा प्रतिष्ठित स्रोतों से टोकन पते की पुष्टि करें!", "add_token_disclaimer_check": "मैंने एक प्रतिष्ठित स्रोत का उपयोग करके टोकन अनुबंध पते और जानकारी की पुष्टि की है। दुर्भावनापूर्ण या गलत जानकारी जोड़ने से धन की हानि हो सकती है।", "token_contract_address": "टोकन अनुबंध पता", "token_name": "टोकन नाम जैसे: टीथर", diff --git a/res/values/strings_hr.arb b/res/values/strings_hr.arb index f0bed9fdd..cb9bfd9f2 100644 --- a/res/values/strings_hr.arb +++ b/res/values/strings_hr.arb @@ -733,7 +733,7 @@ "search_add_token": "Traži / Dodaj token", "edit_token": "Uredi token", "warning": "Upozorenje", - "add_token_warning": "Nemojte uređivati niti dodavati tokene prema uputama prevaranata. Uvijek potvrdite adrese tokena s uglednim izvorima!", + "add_token_warning": "Nemojte uređivati niti dodavati tokene prema uputama prevaranata.\nUvijek potvrdite adrese tokena s uglednim izvorima!", "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.", "token_contract_address": "Adresa ugovora tokena", "token_name": "Naziv tokena npr.: Tether", diff --git a/res/values/strings_id.arb b/res/values/strings_id.arb index 8b0839887..63e7a1722 100644 --- a/res/values/strings_id.arb +++ b/res/values/strings_id.arb @@ -709,7 +709,7 @@ "search_add_token": "Cari / Tambahkan token", "edit_token": "Mengedit token", "warning": "Peringatan", - "add_token_warning": "Jangan mengedit atau menambahkan token seperti yang diinstruksikan oleh penipu. Selalu konfirmasikan alamat token dengan sumber tepercaya!", + "add_token_warning": "Jangan mengedit atau menambahkan token seperti yang diinstruksikan oleh penipu.\nSelalu konfirmasikan alamat token dengan sumber tepercaya!", "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.", "token_contract_address": "Alamat kontrak token", "token_name": "Nama token misalnya: Tether", diff --git a/res/values/strings_it.arb b/res/values/strings_it.arb index 0ca7acef4..5cd58dfda 100644 --- a/res/values/strings_it.arb +++ b/res/values/strings_it.arb @@ -733,7 +733,7 @@ "search_add_token": "Cerca / Aggiungi token", "edit_token": "Modifica token", "warning": "Avvertimento", - "add_token_warning": "Non modificare o aggiungere token come indicato dai truffatori. Conferma sempre gli indirizzi dei token con fonti attendibili!", + "add_token_warning": "Non modificare o aggiungere token come indicato dai truffatori.\nConferma sempre gli indirizzi dei token con fonti attendibili!", "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.", "token_contract_address": "Indirizzo del contratto token", "token_name": "Nome del token, ad esempio: Tether", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index 0c69db63a..ef135ebde 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -733,7 +733,7 @@ "search_add_token": "トークンの検索/追加", "edit_token": "トークンの編集", "warning": "警告", - "add_token_warning": "詐欺師の指示に従ってトークンを編集または追加しないでください。 トークン アドレスは常に信頼できる情報源で確認してください。", + "add_token_warning": "詐欺師の指示に従ってトークンを編集または追加しないでください。\nトークン アドレスは常に信頼できる情報源で確認してください。", "add_token_disclaimer_check": "信頼できる情報源を使用して、トークン コントラクトのアドレスと情報を確認しました。 悪意のある情報や不正確な情報を追加すると、資金が失われる可能性があります。", "token_contract_address": "トークンコントラクトアドレス", "token_name": "トークン名 例: Tether", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index d972da46b..d69b0be01 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -733,7 +733,7 @@ "search_add_token": "검색 / 토큰 추가", "edit_token": "토큰 편집", "warning": "경고", - "add_token_warning": "사기꾼의 지시에 따라 토큰을 편집하거나 추가하지 마십시오. 항상 신뢰할 수 있는 출처를 통해 토큰 주소를 확인하세요!", + "add_token_warning": "사기꾼의 지시에 따라 토큰을 편집하거나 추가하지 마십시오.\n항상 신뢰할 수 있는 출처를 통해 토큰 주소를 확인하세요!", "add_token_disclaimer_check": "신뢰할 수 있는 출처를 통해 토큰 컨트랙트 주소와 정보를 확인했습니다. 악의적이거나 잘못된 정보를 추가하면 자금 손실이 발생할 수 있습니다.", "token_contract_address": "토큰 계약 주소", "token_name": "토큰 이름 예: Tether", diff --git a/res/values/strings_my.arb b/res/values/strings_my.arb index 7e9d3cff3..74b49b94a 100644 --- a/res/values/strings_my.arb +++ b/res/values/strings_my.arb @@ -733,7 +733,7 @@ "search_add_token": "ရှာဖွေရန် / တိုကင်ထည့်ပါ။", "edit_token": "တိုကင်ကို တည်းဖြတ်ပါ။", "warning": "သတိပေးချက်", - "add_token_warning": "လိမ်လည်သူများ ညွှန်ကြားထားသည့်အတိုင်း တိုကင်များကို တည်းဖြတ်ခြင်း သို့မဟုတ် မထည့်ပါနှင့်။ ဂုဏ်သိက္ခာရှိသော အရင်းအမြစ်များဖြင့် အမြဲတမ်း တိုကင်လိပ်စာများကို အတည်ပြုပါ။", + "add_token_warning": "လိမ်လည်သူများ ညွှန်ကြားထားသည့်အတိုင်း တိုကင်များကို တည်းဖြတ်ခြင်း သို့မဟုတ် မထည့်ပါနှင့်။\nဂုဏ်သိက္ခာရှိသော အရင်းအမြစ်များဖြင့် အမြဲတမ်း တိုကင်လိပ်စာများကို အတည်ပြုပါ။", "add_token_disclaimer_check": "ဂုဏ်သိက္ခာရှိသော အရင်းအမြစ်ကို အသုံးပြု၍ တိုကင်စာချုပ်လိပ်စာနှင့် အချက်အလက်ကို ကျွန်ုပ်အတည်ပြုပြီးဖြစ်သည်။ အန္တရာယ်ရှိသော သို့မဟုတ် မမှန်ကန်သော အချက်အလက်များကို ထည့်သွင်းခြင်းသည် ရန်ပုံငွေများ ဆုံးရှုံးသွားနိုင်သည်။", "token_contract_address": "တိုကင်စာချုပ်လိပ်စာ", "token_name": "တိုကင်အမည် ဥပမာ- Tether", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index f2622e303..f4c44045d 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -733,7 +733,7 @@ "search_add_token": "Token zoeken / toevoegen", "edit_token": "Token bewerken", "warning": "Waarschuwing", - "add_token_warning": "Bewerk of voeg geen tokens toe volgens de instructies van oplichters. Bevestig tokenadressen altijd met betrouwbare bronnen!", + "add_token_warning": "Bewerk of voeg geen tokens toe volgens de instructies van oplichters.\nBevestig tokenadressen altijd met betrouwbare bronnen!", "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.", "token_contract_address": "Token contractadres", "token_name": "Tokennaam bijv.: Tether", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 7f922c840..9e43f3b0f 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -733,7 +733,7 @@ "search_add_token": "Wyszukaj / Dodaj token", "edit_token": "Edytuj token", "warning": "Ostrzeżenie", - "add_token_warning": "Nie edytuj ani nie dodawaj tokenów zgodnie z instrukcjami oszustów. Zawsze potwierdzaj adresy tokenów z renomowanymi źródłami!", + "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_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.", "token_contract_address": "Adres kontraktu tokena", "token_name": "Nazwa tokena, np.: Tether", diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index adc077df1..a3a849dd7 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -732,7 +732,7 @@ "search_add_token": "Pesquisar / Adicionar token", "edit_token": "Editar símbolo", "warning": "Aviso", - "add_token_warning": "Não edite ou adicione tokens de acordo com as instruções dos golpistas. Sempre confirme os endereços de token com fontes confiáveis!", + "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_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.", "token_contract_address": "Endereço do contrato de token", "token_name": "Nome do token, por exemplo: Tether", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 973eae300..46e1516fe 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -733,7 +733,7 @@ "search_add_token": "Поиск / Добавить токен", "edit_token": "Изменить токен", "warning": "Предупреждение", - "add_token_warning": "Не редактируйте и не добавляйте токены по указанию мошенников. Всегда подтверждайте адреса токенов из авторитетных источников!", + "add_token_warning": "Не редактируйте и не добавляйте токены по указанию мошенников.\nВсегда подтверждайте адреса токенов из авторитетных источников!", "add_token_disclaimer_check": "Я подтвердил адрес контракта токена и информацию, используя авторитетный источник. Добавление вредоносной или неверной информации может привести к потере средств.", "token_contract_address": "Адрес контракта токена", "token_name": "Имя токена, например: Tether", diff --git a/res/values/strings_th.arb b/res/values/strings_th.arb index 9e08c9c7c..576386d5d 100644 --- a/res/values/strings_th.arb +++ b/res/values/strings_th.arb @@ -731,7 +731,7 @@ "search_add_token": "ค้นหา / เพิ่มโทเค็น", "edit_token": "แก้ไขโทเค็น", "warning": "คำเตือน", - "add_token_warning": "ห้ามแก้ไขหรือเพิ่มโทเค็นตามคำแนะนำของนักต้มตุ๋น ยืนยันที่อยู่โทเค็นกับแหล่งที่มาที่เชื่อถือได้เสมอ!", + "add_token_warning": "ห้ามแก้ไขหรือเพิ่มโทเค็นตามคำแนะนำของนักต้มตุ๋น\nยืนยันที่อยู่โทเค็นกับแหล่งที่มาที่เชื่อถือได้เสมอ!", "add_token_disclaimer_check": "ฉันได้ยืนยันที่อยู่และข้อมูลของสัญญาโทเค็นโดยใช้แหล่งข้อมูลที่เชื่อถือได้ การเพิ่มข้อมูลที่เป็นอันตรายหรือไม่ถูกต้องอาจทำให้สูญเสียเงินได้", "token_contract_address": "ที่อยู่สัญญาโทเค็น", "token_name": "ชื่อโทเค็น เช่น Tether", diff --git a/res/values/strings_tr.arb b/res/values/strings_tr.arb index 5bdf0937f..0acffdb38 100644 --- a/res/values/strings_tr.arb +++ b/res/values/strings_tr.arb @@ -733,7 +733,7 @@ "search_add_token": "Belirteç Ara / Ekle", "edit_token": "Belirteci düzenle", "warning": "Uyarı", - "add_token_warning": "Dolandırıcıların talimatına göre jetonları düzenlemeyin veya eklemeyin. Belirteç adreslerini her zaman saygın kaynaklarla onaylayın!", + "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_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.", "token_contract_address": "Token sözleşme adresi", "token_name": "Belirteç adı, örneğin: Tether", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 1cf82cdff..0487f6fd5 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -732,7 +732,7 @@ "search_add_token": "Пошук / Додати маркер", "edit_token": "Редагувати маркер", "warning": "УВАГА", - "add_token_warning": "Не редагуйте та не додавайте токени за вказівками шахраїв. Завжди підтверджуйте адреси токенів у авторитетних джерелах!", + "add_token_warning": "Не редагуйте та не додавайте токени за вказівками шахраїв.\nЗавжди підтверджуйте адреси токенів у авторитетних джерелах!", "add_token_disclaimer_check": "Я підтвердив адресу та інформацію щодо договору маркера, використовуючи авторитетне джерело. Додавання зловмисної або невірної інформації може призвести до втрати коштів.", "token_contract_address": "Адреса договору маркера", "token_name": "Назва токена, наприклад: Tether", diff --git a/res/values/strings_ur.arb b/res/values/strings_ur.arb index 2b7127baf..cc6df8087 100644 --- a/res/values/strings_ur.arb +++ b/res/values/strings_ur.arb @@ -728,7 +728,7 @@ "search_add_token": "تلاش کریں / ٹوکن شامل کریں۔", "edit_token": "ٹوکن میں ترمیم کریں۔", "warning": "وارننگ", - "add_token_warning": "سکیمرز کی ہدایت کے مطابق ٹوکن میں ترمیم یا اضافہ نہ کریں۔ ہمیشہ معتبر ذرائع سے ٹوکن پتوں کی تصدیق کریں!", + "add_token_warning": "سکیمرز کی ہدایت کے مطابق ٹوکن میں ترمیم یا اضافہ نہ کریں۔\nہمیشہ معتبر ذرائع سے ٹوکن پتوں کی تصدیق کریں!", "add_token_disclaimer_check": "میں نے ایک معتبر ذریعہ کا استعمال کرتے ہوئے ٹوکن کنٹریکٹ ایڈریس اور معلومات کی تصدیق کی ہے۔ بدنیتی پر مبنی یا غلط معلومات شامل کرنے کے نتیجے میں فنڈز ضائع ہو سکتے ہیں۔", "token_contract_address": "ٹوکن کنٹریکٹ ایڈریس", "token_name": "ٹوکن کا نام جیسے: Tether", diff --git a/res/values/strings_yo.arb b/res/values/strings_yo.arb index 9c9738998..6bb375a7f 100644 --- a/res/values/strings_yo.arb +++ b/res/values/strings_yo.arb @@ -728,7 +728,7 @@ "search_add_token": "Wa / Fi àmi kun", "edit_token": "Ṣatunkọ àmi", "warning": "Ikilo", - "add_token_warning": "Ma ṣe ṣatunkọ tabi ṣafikun awọn ami bi a ti fun ni aṣẹ nipasẹ awọn scammers. Nigbagbogbo jẹrisi awọn adirẹsi ami pẹlu awọn orisun olokiki!", + "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_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.", "token_contract_address": "Àmi guide adirẹsi", "token_name": "Orukọ àmi fun apẹẹrẹ: Tether", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 058dbe52b..19c6146ec 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -732,7 +732,7 @@ "search_add_token": "搜索/添加令牌", "edit_token": "编辑令牌", "warning": "警告", - "add_token_warning": "请勿按照诈骗者的指示编辑或添加令牌。 始终通过信誉良好的来源确认代币地址!", + "add_token_warning": "请勿按照诈骗者的指示编辑或添加令牌。\n始终通过信誉良好的来源确认代币地址!", "add_token_disclaimer_check": "我已使用信誉良好的来源确认了代币合约地址和信息。 添加恶意或不正确的信息可能会导致资金损失。", "token_contract_address": "代币合约地址", "token_name": "代币名称例如:Tether", diff --git a/tool/configure.dart b/tool/configure.dart index 35addb0b5..f4428f741 100644 --- a/tool/configure.dart +++ b/tool/configure.dart @@ -525,8 +525,9 @@ abstract class Ethereum { }); int formatterEthereumParseAmount(String amount); - List getERC20Currencies(WalletBase wallet); - Future addErc20Token(WalletBase wallet, String contractAddress); + List getERC20Currencies(WalletBase wallet); + Future addErc20Token(WalletBase wallet, Erc20Token token); + Future deleteErc20Token(WalletBase wallet, Erc20Token token); Future getErc20Token(WalletBase wallet, String contractAddress); } """;