mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2025-01-11 05:14:46 +00:00
Integrate UI with Ethereum flow
This commit is contained in:
parent
22eecea24e
commit
e715162294
36 changed files with 270 additions and 262 deletions
|
@ -1,10 +1,11 @@
|
||||||
|
import 'package:cw_core/crypto_currency.dart';
|
||||||
import 'package:cw_core/keyable.dart';
|
import 'package:cw_core/keyable.dart';
|
||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
|
|
||||||
part 'erc20_token.g.dart';
|
part 'erc20_token.g.dart';
|
||||||
|
|
||||||
@HiveType(typeId: Erc20Token.typeId)
|
@HiveType(typeId: Erc20Token.typeId)
|
||||||
class Erc20Token extends HiveObject with Keyable {
|
class Erc20Token extends CryptoCurrency with Keyable, HiveObjectMixin {
|
||||||
@HiveField(0)
|
@HiveField(0)
|
||||||
final String name;
|
final String name;
|
||||||
@HiveField(1)
|
@HiveField(1)
|
||||||
|
@ -14,29 +15,39 @@ class Erc20Token extends HiveObject with Keyable {
|
||||||
@HiveField(3)
|
@HiveField(3)
|
||||||
final int decimal;
|
final int decimal;
|
||||||
@HiveField(4, defaultValue: false)
|
@HiveField(4, defaultValue: false)
|
||||||
final bool enabled;
|
bool _enabled;
|
||||||
|
|
||||||
|
bool get enabled => _enabled;
|
||||||
|
|
||||||
|
set enabled(bool value) {
|
||||||
|
_enabled = value;
|
||||||
|
this.save();
|
||||||
|
}
|
||||||
|
|
||||||
Erc20Token({
|
Erc20Token({
|
||||||
required this.name,
|
required this.name,
|
||||||
required this.symbol,
|
required this.symbol,
|
||||||
required this.contractAddress,
|
required this.contractAddress,
|
||||||
required this.decimal,
|
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 typeId = 12;
|
||||||
static const boxName = 'Erc20Tokens';
|
static const boxName = 'Erc20Tokens';
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(other) =>
|
bool operator ==(other) => other is Erc20Token && other.contractAddress == contractAddress;
|
||||||
other is Erc20Token &&
|
|
||||||
(other.name == name &&
|
|
||||||
other.symbol == symbol &&
|
|
||||||
other.contractAddress == contractAddress &&
|
|
||||||
other.decimal == decimal);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode => name.hashCode ^ symbol.hashCode ^ contractAddress.hashCode ^ decimal.hashCode;
|
int get hashCode => contractAddress.hashCode;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
dynamic get keyIndex {
|
dynamic get keyIndex {
|
||||||
|
|
|
@ -13,15 +13,6 @@ import 'package:cw_core/node.dart';
|
||||||
import 'package:cw_ethereum/ethereum_transaction_priority.dart';
|
import 'package:cw_ethereum/ethereum_transaction_priority.dart';
|
||||||
|
|
||||||
class EthereumClient {
|
class EthereumClient {
|
||||||
// TODO: Remove
|
|
||||||
static const Map<CryptoCurrency, String> _erc20Currencies = {
|
|
||||||
CryptoCurrency.usdc: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
|
||||||
CryptoCurrency.usdterc20: "0xdac17f958d2ee523a2206206994597c13d831ec7",
|
|
||||||
CryptoCurrency.shib: "0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE",
|
|
||||||
};
|
|
||||||
|
|
||||||
Map<CryptoCurrency, String> get erc20Currencies => _erc20Currencies;
|
|
||||||
|
|
||||||
Web3Client? _client;
|
Web3Client? _client;
|
||||||
StreamSubscription<Transfer>? subscription;
|
StreamSubscription<Transfer>? subscription;
|
||||||
|
|
||||||
|
@ -249,13 +240,7 @@ I/flutter ( 4474): Gas Used: 53000
|
||||||
_client?.dispose();
|
_client?.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Future<bool> sendERC20Token(
|
// Future<int> _getDecimalPlacesForContract(DeployedContract contract) async {
|
||||||
// EthereumAddress to, CryptoCurrency erc20Currency, BigInt amount) async {
|
|
||||||
// if (_erc20Currencies[erc20Currency] == null) {
|
|
||||||
// throw "Unsupported ERC20 token";
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// try {
|
|
||||||
// final String abi = await rootBundle.loadString("assets/abi_json/erc20_abi.json");
|
// final String abi = await rootBundle.loadString("assets/abi_json/erc20_abi.json");
|
||||||
// final contractAbi = ContractAbi.fromJson(abi, "ERC20");
|
// final contractAbi = ContractAbi.fromJson(abi, "ERC20");
|
||||||
//
|
//
|
||||||
|
@ -263,21 +248,6 @@ I/flutter ( 4474): Gas Used: 53000
|
||||||
// contractAbi,
|
// contractAbi,
|
||||||
// EthereumAddress.fromHex(_erc20Currencies[erc20Currency]!),
|
// EthereumAddress.fromHex(_erc20Currencies[erc20Currency]!),
|
||||||
// );
|
// );
|
||||||
//
|
|
||||||
// final transferFunction = contract.function('transfer');
|
|
||||||
// final success = await _client!.call(
|
|
||||||
// contract: contract,
|
|
||||||
// function: transferFunction,
|
|
||||||
// params: [to, amount],
|
|
||||||
// );
|
|
||||||
//
|
|
||||||
// return success.first as bool;
|
|
||||||
// } catch (e) {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// Future<int> _getDecimalPlacesForContract(DeployedContract contract) async {
|
|
||||||
// final decimalsFunction = contract.function('decimals');
|
// final decimalsFunction = contract.function('decimals');
|
||||||
// final decimals = await _client!.call(
|
// final decimals = await _client!.call(
|
||||||
// contract: contract,
|
// contract: contract,
|
||||||
|
|
|
@ -260,9 +260,10 @@ abstract class EthereumWalletBase
|
||||||
/// Get Erc20 Tokens balances
|
/// Get Erc20 Tokens balances
|
||||||
for (var token in erc20TokensBox.values) {
|
for (var token in erc20TokensBox.values) {
|
||||||
try {
|
try {
|
||||||
final currency = erc20Currencies.firstWhere((element) => element.title == token.symbol);
|
balance[token] = await _client.fetchERC20Balances(
|
||||||
balance[currency] =
|
_privateKey.address,
|
||||||
await _client.fetchERC20Balances(_privateKey.address, token.contractAddress);
|
token.contractAddress,
|
||||||
|
);
|
||||||
} catch (_) {}
|
} catch (_) {}
|
||||||
}
|
}
|
||||||
await save();
|
await save();
|
||||||
|
@ -285,29 +286,40 @@ abstract class EthereumWalletBase
|
||||||
return EthPrivateKey.fromHex(HEX.encode(addressAtIndex.privateKey as List<int>));
|
return EthPrivateKey.fromHex(HEX.encode(addressAtIndex.privateKey as List<int>));
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void>? updateBalance() => null;
|
Future<void>? updateBalance() async => await _updateBalance();
|
||||||
|
|
||||||
List<CryptoCurrency> get erc20Currencies => erc20TokensBox.values
|
List<Erc20Token> get erc20Currencies => erc20TokensBox.values.toList();
|
||||||
.map((token) => CryptoCurrency.all.firstWhere(
|
|
||||||
(currency) => currency.title.toLowerCase() == token.symbol.toLowerCase(),
|
Future<void> addErc20Token(Erc20Token token) async {
|
||||||
orElse: () => CryptoCurrency(
|
String? iconPath;
|
||||||
|
try {
|
||||||
|
iconPath = CryptoCurrency.all
|
||||||
|
.firstWhere((element) => element.title.toUpperCase() == token.symbol.toUpperCase())
|
||||||
|
.iconPath;
|
||||||
|
|
||||||
|
// (if exists) Delete already existing token with the same contract address
|
||||||
|
erc20TokensBox.values
|
||||||
|
.firstWhere((element) => element.contractAddress == token.contractAddress)
|
||||||
|
.delete();
|
||||||
|
} catch (_) {}
|
||||||
|
|
||||||
|
await erc20TokensBox.add(Erc20Token(
|
||||||
name: token.name,
|
name: token.name,
|
||||||
title: token.symbol,
|
symbol: token.symbol,
|
||||||
fullName: token.name,
|
contractAddress: token.contractAddress,
|
||||||
),
|
decimal: token.decimal,
|
||||||
))
|
enabled: true,
|
||||||
.toList();
|
iconPath: iconPath,
|
||||||
|
));
|
||||||
|
|
||||||
Future<CryptoCurrency?> addErc20Token(String contractAddress) async {
|
_updateBalance();
|
||||||
final token = await _client.getErc20Token(contractAddress);
|
|
||||||
|
|
||||||
if (token == null) {
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
erc20TokensBox.add(token);
|
Future<void> deleteErc20Token(Erc20Token token) async {
|
||||||
|
await token.delete();
|
||||||
|
|
||||||
return CryptoCurrency(name: token.name, title: token.symbol, fullName: token.name);
|
balance.remove(token);
|
||||||
|
_updateBalance();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Erc20Token?> getErc20Token(String contractAddress) async =>
|
Future<Erc20Token?> getErc20Token(String contractAddress) async =>
|
||||||
|
|
|
@ -81,16 +81,18 @@ class CWEthereum extends Ethereum {
|
||||||
int formatterEthereumParseAmount(String amount) => EthereumFormatter.parseEthereumAmount(amount);
|
int formatterEthereumParseAmount(String amount) => EthereumFormatter.parseEthereumAmount(amount);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<CryptoCurrency> getERC20Currencies(WalletBase wallet) {
|
List<Erc20Token> getERC20Currencies(WalletBase wallet) {
|
||||||
final ethereumWallet = wallet as EthereumWallet;
|
final ethereumWallet = wallet as EthereumWallet;
|
||||||
return ethereumWallet.erc20Currencies;
|
return ethereumWallet.erc20Currencies;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<CryptoCurrency?> addErc20Token(WalletBase wallet, String contractAddress) async {
|
Future<void> addErc20Token(WalletBase wallet, Erc20Token token) async =>
|
||||||
final ethereumWallet = wallet as EthereumWallet;
|
await (wallet as EthereumWallet).addErc20Token(token);
|
||||||
return await ethereumWallet.addErc20Token(contractAddress);
|
|
||||||
}
|
@override
|
||||||
|
Future<void> deleteErc20Token(WalletBase wallet, Erc20Token token) async =>
|
||||||
|
await (wallet as EthereumWallet).deleteErc20Token(token);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<Erc20Token?> getErc20Token(WalletBase wallet, String contractAddress) async {
|
Future<Erc20Token?> getErc20Token(WalletBase wallet, String contractAddress) async {
|
||||||
|
|
|
@ -52,6 +52,7 @@ class _EditTokenPageBodyState extends State<EditTokenPageBody> {
|
||||||
|
|
||||||
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
||||||
|
|
||||||
|
bool _showDisclaimer = false;
|
||||||
bool _disclaimerChecked = false;
|
bool _disclaimerChecked = false;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -69,6 +70,13 @@ class _EditTokenPageBodyState extends State<EditTokenPageBody> {
|
||||||
if (!_contractAddressFocusNode.hasFocus) {
|
if (!_contractAddressFocusNode.hasFocus) {
|
||||||
_getTokenInfo(_contractAddressController.text);
|
_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<EditTokenPageBody> {
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
Container(
|
Container(
|
||||||
padding: EdgeInsets.symmetric(vertical: 16, horizontal: 24),
|
padding: EdgeInsets.symmetric(vertical: 16, horizontal: 28),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: Theme.of(context).accentTextTheme.bodySmall!.color!,
|
color: Theme.of(context).accentTextTheme.bodySmall!.color!,
|
||||||
borderRadius: BorderRadius.circular(12),
|
borderRadius: BorderRadius.circular(12),
|
||||||
),
|
),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
|
||||||
Image.asset('assets/images/restore_keys.png'),
|
|
||||||
const SizedBox(width: 16),
|
|
||||||
Expanded(child: Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Text(S.of(context).warning),
|
Image.asset('assets/images/restore_keys.png'),
|
||||||
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,6 +138,7 @@ class _EditTokenPageBodyState extends State<EditTokenPageBody> {
|
||||||
bottomSectionPadding: EdgeInsets.only(left: 24, right: 24, bottom: 24),
|
bottomSectionPadding: EdgeInsets.only(left: 24, right: 24, bottom: 24),
|
||||||
bottomSection: Column(
|
bottomSection: Column(
|
||||||
children: [
|
children: [
|
||||||
|
if (_showDisclaimer) ...[
|
||||||
CheckboxWidget(
|
CheckboxWidget(
|
||||||
value: _disclaimerChecked,
|
value: _disclaimerChecked,
|
||||||
caption: S.of(context).add_token_disclaimer_check,
|
caption: S.of(context).add_token_disclaimer_check,
|
||||||
|
@ -117,16 +146,17 @@ class _EditTokenPageBodyState extends State<EditTokenPageBody> {
|
||||||
_disclaimerChecked = value;
|
_disclaimerChecked = value;
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
SizedBox(height: 20),
|
||||||
|
],
|
||||||
Row(
|
Row(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Expanded(
|
Expanded(
|
||||||
child: PrimaryButton(
|
child: PrimaryButton(
|
||||||
onPressed: () {
|
onPressed: () async {
|
||||||
if (widget.erc20token != null) {
|
if (widget.erc20token != null) {
|
||||||
// widget.homeSettingsViewModel.deleteErc20Token(widget.erc20token!);
|
await widget.homeSettingsViewModel.deleteErc20Token(widget.erc20token!);
|
||||||
} else {
|
|
||||||
Navigator.pop(context);
|
|
||||||
}
|
}
|
||||||
|
Navigator.pop(context);
|
||||||
},
|
},
|
||||||
text: widget.erc20token != null ? S.of(context).delete : S.of(context).cancel,
|
text: widget.erc20token != null ? S.of(context).delete : S.of(context).cancel,
|
||||||
color: Colors.red,
|
color: Colors.red,
|
||||||
|
@ -137,8 +167,15 @@ class _EditTokenPageBodyState extends State<EditTokenPageBody> {
|
||||||
Expanded(
|
Expanded(
|
||||||
child: PrimaryButton(
|
child: PrimaryButton(
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
if (_formKey.currentState!.validate() && _disclaimerChecked) {
|
if (_formKey.currentState!.validate() &&
|
||||||
widget.homeSettingsViewModel.addErc20Token(_contractAddressController.text);
|
(!_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,
|
text: S.of(context).save,
|
||||||
|
@ -172,8 +209,12 @@ class _EditTokenPageBodyState extends State<EditTokenPageBody> {
|
||||||
|
|
||||||
if (value?.text?.isNotEmpty ?? false) {
|
if (value?.text?.isNotEmpty ?? false) {
|
||||||
_contractAddressController.text = value!.text!;
|
_contractAddressController.text = value!.text!;
|
||||||
|
|
||||||
|
_getTokenInfo(_contractAddressController.text);
|
||||||
|
setState(() {
|
||||||
|
_showDisclaimer = true;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
FocusScope.of(context).unfocus();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _tokenForm() {
|
Widget _tokenForm() {
|
||||||
|
@ -237,11 +278,15 @@ class _EditTokenPageBodyState extends State<EditTokenPageBody> {
|
||||||
textInputAction: TextInputAction.done,
|
textInputAction: TextInputAction.done,
|
||||||
hintText: S.of(context).token_decimal,
|
hintText: S.of(context).token_decimal,
|
||||||
validator: (text) {
|
validator: (text) {
|
||||||
if (text?.isNotEmpty ?? false) {
|
if (text?.isEmpty ?? true) {
|
||||||
return null;
|
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),
|
SizedBox(height: 24),
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import 'dart:math';
|
||||||
|
|
||||||
import 'package:cake_wallet/entities/sort_balance_types.dart';
|
import 'package:cake_wallet/entities/sort_balance_types.dart';
|
||||||
import 'package:cake_wallet/generated/i18n.dart';
|
import 'package:cake_wallet/generated/i18n.dart';
|
||||||
import 'package:cake_wallet/routes.dart';
|
import 'package:cake_wallet/routes.dart';
|
||||||
|
@ -42,6 +44,7 @@ class HomeSettingsPage extends BasePage {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Divider(color: Theme.of(context).primaryTextTheme.bodySmall!.decorationColor!),
|
Divider(color: Theme.of(context).primaryTextTheme.bodySmall!.decorationColor!),
|
||||||
|
const SizedBox(height: 20),
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
|
@ -95,15 +98,50 @@ class HomeSettingsPage extends BasePage {
|
||||||
return Container(
|
return Container(
|
||||||
margin: EdgeInsets.only(top: 16, left: 16, right: 16),
|
margin: EdgeInsets.only(top: 16, left: 16, right: 16),
|
||||||
child: Observer(
|
child: Observer(
|
||||||
builder: (_) => SettingsSwitcherCell(
|
builder: (_) {
|
||||||
title: _homeSettingsViewModel.tokens[index],
|
final token = _homeSettingsViewModel.tokens[index];
|
||||||
value: false,
|
|
||||||
onValueChange: (_, bool value) {},
|
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(
|
decoration: BoxDecoration(
|
||||||
color: Theme.of(context).accentTextTheme.bodySmall!.color!,
|
color: Theme.of(context).accentTextTheme.bodySmall!.color!,
|
||||||
borderRadius: BorderRadius.circular(30),
|
borderRadius: BorderRadius.circular(30),
|
||||||
),
|
),
|
||||||
),
|
);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
|
@ -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: <Widget>[
|
|
||||||
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 '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -3,14 +3,23 @@ import 'package:cake_wallet/src/widgets/standard_list.dart';
|
||||||
import 'package:cake_wallet/src/widgets/standard_switch.dart';
|
import 'package:cake_wallet/src/widgets/standard_switch.dart';
|
||||||
|
|
||||||
class SettingsSwitcherCell extends StandardListRow {
|
class SettingsSwitcherCell extends StandardListRow {
|
||||||
SettingsSwitcherCell(
|
SettingsSwitcherCell({
|
||||||
{required String title, required this.value, this.onValueChange, Decoration? decoration})
|
required String title,
|
||||||
: super(title: title, isSelected: false, decoration: decoration);
|
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 bool value;
|
||||||
final void Function(BuildContext context, bool value)? onValueChange;
|
final void Function(BuildContext context, bool value)? onValueChange;
|
||||||
|
final Widget? leading;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget buildTrailing(BuildContext context) => StandardSwitch(
|
Widget buildTrailing(BuildContext context) =>
|
||||||
value: value, onTaped: () => onValueChange?.call(context, !value));
|
StandardSwitch(value: value, onTaped: () => onValueChange?.call(context, !value));
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget? buildLeading(BuildContext context) => leading;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,53 +21,45 @@ class CheckboxWidgetState extends State<CheckboxWidget> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return GestureDetector(
|
return InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
value = !value;
|
value = !value;
|
||||||
onChanged(value);
|
onChanged(value);
|
||||||
setState(() {});
|
setState(() {});
|
||||||
},
|
},
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Container(
|
Container(
|
||||||
height: 19,
|
height: 24.0,
|
||||||
width: 19,
|
width: 24.0,
|
||||||
|
margin: EdgeInsets.only(right: 10.0),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: value
|
|
||||||
? Palette.blueCraiola
|
|
||||||
: Theme.of(context).accentTextTheme.displayMedium!.decorationColor!,
|
|
||||||
borderRadius: BorderRadius.all(Radius.circular(2)),
|
|
||||||
border: Border.all(
|
border: Border.all(
|
||||||
color: value
|
color: Theme.of(context).primaryTextTheme.bodySmall!.color!,
|
||||||
? Palette.blueCraiola
|
width: 1.0,
|
||||||
: Theme.of(context).accentTextTheme.labelSmall!.color!,
|
|
||||||
width: 1,
|
|
||||||
),
|
),
|
||||||
|
borderRadius: BorderRadius.all(
|
||||||
|
Radius.circular(8.0),
|
||||||
|
),
|
||||||
|
color: Theme.of(context).colorScheme.background,
|
||||||
),
|
),
|
||||||
child: value
|
child: value
|
||||||
? Center(
|
? Icon(
|
||||||
child: Icon(
|
Icons.check,
|
||||||
Icons.done,
|
color: Colors.blue,
|
||||||
color: Colors.white,
|
size: 20.0,
|
||||||
size: 14,
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
: null,
|
: null,
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Padding(
|
|
||||||
padding: EdgeInsetsDirectional.only(start: 16),
|
|
||||||
child: Text(
|
child: Text(
|
||||||
caption,
|
caption,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontSize: 14.0,
|
||||||
color: Theme.of(context).primaryTextTheme.titleLarge!.color!,
|
color: Theme.of(context).primaryTextTheme.titleLarge!.color!,
|
||||||
fontSize: 18,
|
|
||||||
fontFamily: 'Lato',
|
|
||||||
fontWeight: FontWeight.w500,
|
|
||||||
decoration: TextDecoration.none),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
@ -2,7 +2,6 @@ import 'package:cake_wallet/entities/sort_balance_types.dart';
|
||||||
import 'package:cake_wallet/ethereum/ethereum.dart';
|
import 'package:cake_wallet/ethereum/ethereum.dart';
|
||||||
import 'package:cake_wallet/store/settings_store.dart';
|
import 'package:cake_wallet/store/settings_store.dart';
|
||||||
import 'package:cake_wallet/view_model/dashboard/balance_view_model.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:cw_core/erc20_token.dart';
|
||||||
import 'package:mobx/mobx.dart';
|
import 'package:mobx/mobx.dart';
|
||||||
|
|
||||||
|
@ -11,11 +10,16 @@ part 'home_settings_view_model.g.dart';
|
||||||
class HomeSettingsViewModel = HomeSettingsViewModelBase with _$HomeSettingsViewModel;
|
class HomeSettingsViewModel = HomeSettingsViewModelBase with _$HomeSettingsViewModel;
|
||||||
|
|
||||||
abstract class HomeSettingsViewModelBase with Store {
|
abstract class HomeSettingsViewModelBase with Store {
|
||||||
HomeSettingsViewModelBase(this._settingsStore, this._balanceViewModel);
|
HomeSettingsViewModelBase(this._settingsStore, this._balanceViewModel)
|
||||||
|
: tokens = ObservableList<Erc20Token>() {
|
||||||
|
_updateTokensList();
|
||||||
|
}
|
||||||
|
|
||||||
final SettingsStore _settingsStore;
|
final SettingsStore _settingsStore;
|
||||||
final BalanceViewModel _balanceViewModel;
|
final BalanceViewModel _balanceViewModel;
|
||||||
|
|
||||||
|
final ObservableList<Erc20Token> tokens;
|
||||||
|
|
||||||
@computed
|
@computed
|
||||||
SortBalanceBy get sortBalanceBy => _settingsStore.sortBalanceBy;
|
SortBalanceBy get sortBalanceBy => _settingsStore.sortBalanceBy;
|
||||||
|
|
||||||
|
@ -28,12 +32,21 @@ abstract class HomeSettingsViewModelBase with Store {
|
||||||
@action
|
@action
|
||||||
void setPinNativeToken(bool value) => _settingsStore.pinNativeTokenAtTop = value;
|
void setPinNativeToken(bool value) => _settingsStore.pinNativeTokenAtTop = value;
|
||||||
|
|
||||||
@computed
|
@action
|
||||||
List<String> get tokens =>
|
void _updateTokensList() {
|
||||||
_balanceViewModel.balances.keys.map((e) => e.fullName ?? e.title).toList();
|
tokens.clear();
|
||||||
|
tokens.addAll(ethereum!.getERC20Currencies(_balanceViewModel.wallet));
|
||||||
|
}
|
||||||
|
|
||||||
Future<CryptoCurrency?> addErc20Token(String contractAddress) async =>
|
Future<void> addErc20Token(Erc20Token token) async {
|
||||||
await ethereum!.addErc20Token(_balanceViewModel.wallet, contractAddress);
|
await ethereum!.addErc20Token(_balanceViewModel.wallet, token);
|
||||||
|
_updateTokensList();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> deleteErc20Token(Erc20Token token) async {
|
||||||
|
await ethereum!.deleteErc20Token(_balanceViewModel.wallet, token);
|
||||||
|
_updateTokensList();
|
||||||
|
}
|
||||||
|
|
||||||
Future<Erc20Token?> getErc20Token(String contractAddress) async =>
|
Future<Erc20Token?> getErc20Token(String contractAddress) async =>
|
||||||
await ethereum!.getErc20Token(_balanceViewModel.wallet, contractAddress);
|
await ethereum!.getErc20Token(_balanceViewModel.wallet, contractAddress);
|
||||||
|
|
|
@ -731,7 +731,7 @@
|
||||||
"search_add_token": "بحث / إضافة رمز",
|
"search_add_token": "بحث / إضافة رمز",
|
||||||
"edit_token": "تحرير الرمز المميز",
|
"edit_token": "تحرير الرمز المميز",
|
||||||
"warning": "تحذير",
|
"warning": "تحذير",
|
||||||
"add_token_warning": "لا تقم بتحرير أو إضافة رموز وفقًا لتعليمات المحتالين. قم دائمًا بتأكيد عناوين الرموز مع مصادر حسنة السمعة!",
|
"add_token_warning": "لا تقم بتحرير أو إضافة رموز وفقًا لتعليمات المحتالين.\nقم دائمًا بتأكيد عناوين الرموز مع مصادر حسنة السمعة!",
|
||||||
"add_token_disclaimer_check": "لقد قمت بتأكيد عنوان ومعلومات عقد الرمز المميز باستخدام مصدر حسن السمعة. يمكن أن تؤدي إضافة معلومات خبيثة أو غير صحيحة إلى خسارة الأموال.",
|
"add_token_disclaimer_check": "لقد قمت بتأكيد عنوان ومعلومات عقد الرمز المميز باستخدام مصدر حسن السمعة. يمكن أن تؤدي إضافة معلومات خبيثة أو غير صحيحة إلى خسارة الأموال.",
|
||||||
"token_contract_address": "عنوان عقد الرمز",
|
"token_contract_address": "عنوان عقد الرمز",
|
||||||
"token_name": "اسم الرمز ، على سبيل المثال: Tether",
|
"token_name": "اسم الرمز ، على سبيل المثال: Tether",
|
||||||
|
|
|
@ -727,7 +727,7 @@
|
||||||
"search_add_token": "Търсене/Добавяне на токен",
|
"search_add_token": "Търсене/Добавяне на токен",
|
||||||
"edit_token": "Редактиране на токена",
|
"edit_token": "Редактиране на токена",
|
||||||
"warning": "Внимание",
|
"warning": "Внимание",
|
||||||
"add_token_warning": "Не редактирайте и не добавяйте токени според инструкциите на измамниците. Винаги потвърждавайте адресите на токени с надеждни източници!",
|
"add_token_warning": "Не редактирайте и не добавяйте токени според инструкциите на измамниците.\nВинаги потвърждавайте адресите на токени с надеждни източници!",
|
||||||
"add_token_disclaimer_check": "Потвърдих адреса и информацията за токен договора, използвайки надежден източник. Добавянето на злонамерена или неправилна информация може да доведе до загуба на средства.",
|
"add_token_disclaimer_check": "Потвърдих адреса и информацията за токен договора, използвайки надежден източник. Добавянето на злонамерена или неправилна информация може да доведе до загуба на средства.",
|
||||||
"token_contract_address": "Адрес на токен договор",
|
"token_contract_address": "Адрес на токен договор",
|
||||||
"token_name": "Име на токена, напр.: Tether",
|
"token_name": "Име на токена, напр.: Tether",
|
||||||
|
|
|
@ -727,7 +727,7 @@
|
||||||
"search_add_token": "Hledat / Přidat token",
|
"search_add_token": "Hledat / Přidat token",
|
||||||
"edit_token": "Upravit token",
|
"edit_token": "Upravit token",
|
||||||
"warning": "Varování",
|
"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ů.",
|
"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_contract_address": "Adresa tokenové smlouvy",
|
||||||
"token_name": "Název tokenu např.: Tether",
|
"token_name": "Název tokenu např.: Tether",
|
||||||
|
|
|
@ -733,7 +733,7 @@
|
||||||
"search_add_token": "Token suchen / hinzufügen",
|
"search_add_token": "Token suchen / hinzufügen",
|
||||||
"edit_token": "Token bearbeiten",
|
"edit_token": "Token bearbeiten",
|
||||||
"warning": "Warnung",
|
"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.",
|
"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_contract_address": "Token-Vertragsadresse",
|
||||||
"token_name": "Token-Name, z. B.: Tether",
|
"token_name": "Token-Name, z. B.: Tether",
|
||||||
|
|
|
@ -733,7 +733,7 @@
|
||||||
"search_add_token": "Search / Add token",
|
"search_add_token": "Search / Add token",
|
||||||
"edit_token": "Edit token",
|
"edit_token": "Edit token",
|
||||||
"warning": "Warning",
|
"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.",
|
"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_contract_address": "Token contract address",
|
||||||
"token_name": "Token name eg: Tether",
|
"token_name": "Token name eg: Tether",
|
||||||
|
|
|
@ -733,7 +733,7 @@
|
||||||
"search_add_token": "Buscar/Agregar token",
|
"search_add_token": "Buscar/Agregar token",
|
||||||
"edit_token": "Editar token",
|
"edit_token": "Editar token",
|
||||||
"warning": "Advertencia",
|
"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.",
|
"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_contract_address": "Dirección de contrato de token",
|
||||||
"token_name": "Nombre del token, por ejemplo: Tether",
|
"token_name": "Nombre del token, por ejemplo: Tether",
|
||||||
|
|
|
@ -733,7 +733,7 @@
|
||||||
"search_add_token": "Rechercher / Ajouter un jeton",
|
"search_add_token": "Rechercher / Ajouter un jeton",
|
||||||
"edit_token": "Modifier le jeton",
|
"edit_token": "Modifier le jeton",
|
||||||
"warning": "Avertissement",
|
"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.",
|
"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_contract_address": "Adresse du contrat de jeton",
|
||||||
"token_name": "Nom du jeton, par exemple : Tether",
|
"token_name": "Nom du jeton, par exemple : Tether",
|
||||||
|
|
|
@ -716,7 +716,7 @@
|
||||||
"search_add_token": "Bincika / Ƙara alama",
|
"search_add_token": "Bincika / Ƙara alama",
|
||||||
"edit_token": "Gyara alamar",
|
"edit_token": "Gyara alamar",
|
||||||
"warning": "Gargadi",
|
"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.",
|
"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_contract_address": "Adireshin kwangilar Token",
|
||||||
"token_name": "Alamar sunan misali: Tether",
|
"token_name": "Alamar sunan misali: Tether",
|
||||||
|
|
|
@ -733,7 +733,7 @@
|
||||||
"search_add_token": "खोजें/टोकन जोड़ें",
|
"search_add_token": "खोजें/टोकन जोड़ें",
|
||||||
"edit_token": "टोकन संपादित करें",
|
"edit_token": "टोकन संपादित करें",
|
||||||
"warning": "चेतावनी",
|
"warning": "चेतावनी",
|
||||||
"add_token_warning": "स्कैमर्स के निर्देशानुसार टोकन संपादित या जोड़ें न करें। हमेशा प्रतिष्ठित स्रोतों से टोकन पते की पुष्टि करें!",
|
"add_token_warning": "स्कैमर्स के निर्देशानुसार टोकन संपादित या जोड़ें न करें।\nहमेशा प्रतिष्ठित स्रोतों से टोकन पते की पुष्टि करें!",
|
||||||
"add_token_disclaimer_check": "मैंने एक प्रतिष्ठित स्रोत का उपयोग करके टोकन अनुबंध पते और जानकारी की पुष्टि की है। दुर्भावनापूर्ण या गलत जानकारी जोड़ने से धन की हानि हो सकती है।",
|
"add_token_disclaimer_check": "मैंने एक प्रतिष्ठित स्रोत का उपयोग करके टोकन अनुबंध पते और जानकारी की पुष्टि की है। दुर्भावनापूर्ण या गलत जानकारी जोड़ने से धन की हानि हो सकती है।",
|
||||||
"token_contract_address": "टोकन अनुबंध पता",
|
"token_contract_address": "टोकन अनुबंध पता",
|
||||||
"token_name": "टोकन नाम जैसे: टीथर",
|
"token_name": "टोकन नाम जैसे: टीथर",
|
||||||
|
|
|
@ -733,7 +733,7 @@
|
||||||
"search_add_token": "Traži / Dodaj token",
|
"search_add_token": "Traži / Dodaj token",
|
||||||
"edit_token": "Uredi token",
|
"edit_token": "Uredi token",
|
||||||
"warning": "Upozorenje",
|
"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.",
|
"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_contract_address": "Adresa ugovora tokena",
|
||||||
"token_name": "Naziv tokena npr.: Tether",
|
"token_name": "Naziv tokena npr.: Tether",
|
||||||
|
|
|
@ -709,7 +709,7 @@
|
||||||
"search_add_token": "Cari / Tambahkan token",
|
"search_add_token": "Cari / Tambahkan token",
|
||||||
"edit_token": "Mengedit token",
|
"edit_token": "Mengedit token",
|
||||||
"warning": "Peringatan",
|
"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.",
|
"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_contract_address": "Alamat kontrak token",
|
||||||
"token_name": "Nama token misalnya: Tether",
|
"token_name": "Nama token misalnya: Tether",
|
||||||
|
|
|
@ -733,7 +733,7 @@
|
||||||
"search_add_token": "Cerca / Aggiungi token",
|
"search_add_token": "Cerca / Aggiungi token",
|
||||||
"edit_token": "Modifica token",
|
"edit_token": "Modifica token",
|
||||||
"warning": "Avvertimento",
|
"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.",
|
"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_contract_address": "Indirizzo del contratto token",
|
||||||
"token_name": "Nome del token, ad esempio: Tether",
|
"token_name": "Nome del token, ad esempio: Tether",
|
||||||
|
|
|
@ -733,7 +733,7 @@
|
||||||
"search_add_token": "トークンの検索/追加",
|
"search_add_token": "トークンの検索/追加",
|
||||||
"edit_token": "トークンの編集",
|
"edit_token": "トークンの編集",
|
||||||
"warning": "警告",
|
"warning": "警告",
|
||||||
"add_token_warning": "詐欺師の指示に従ってトークンを編集または追加しないでください。 トークン アドレスは常に信頼できる情報源で確認してください。",
|
"add_token_warning": "詐欺師の指示に従ってトークンを編集または追加しないでください。\nトークン アドレスは常に信頼できる情報源で確認してください。",
|
||||||
"add_token_disclaimer_check": "信頼できる情報源を使用して、トークン コントラクトのアドレスと情報を確認しました。 悪意のある情報や不正確な情報を追加すると、資金が失われる可能性があります。",
|
"add_token_disclaimer_check": "信頼できる情報源を使用して、トークン コントラクトのアドレスと情報を確認しました。 悪意のある情報や不正確な情報を追加すると、資金が失われる可能性があります。",
|
||||||
"token_contract_address": "トークンコントラクトアドレス",
|
"token_contract_address": "トークンコントラクトアドレス",
|
||||||
"token_name": "トークン名 例: Tether",
|
"token_name": "トークン名 例: Tether",
|
||||||
|
|
|
@ -733,7 +733,7 @@
|
||||||
"search_add_token": "검색 / 토큰 추가",
|
"search_add_token": "검색 / 토큰 추가",
|
||||||
"edit_token": "토큰 편집",
|
"edit_token": "토큰 편집",
|
||||||
"warning": "경고",
|
"warning": "경고",
|
||||||
"add_token_warning": "사기꾼의 지시에 따라 토큰을 편집하거나 추가하지 마십시오. 항상 신뢰할 수 있는 출처를 통해 토큰 주소를 확인하세요!",
|
"add_token_warning": "사기꾼의 지시에 따라 토큰을 편집하거나 추가하지 마십시오.\n항상 신뢰할 수 있는 출처를 통해 토큰 주소를 확인하세요!",
|
||||||
"add_token_disclaimer_check": "신뢰할 수 있는 출처를 통해 토큰 컨트랙트 주소와 정보를 확인했습니다. 악의적이거나 잘못된 정보를 추가하면 자금 손실이 발생할 수 있습니다.",
|
"add_token_disclaimer_check": "신뢰할 수 있는 출처를 통해 토큰 컨트랙트 주소와 정보를 확인했습니다. 악의적이거나 잘못된 정보를 추가하면 자금 손실이 발생할 수 있습니다.",
|
||||||
"token_contract_address": "토큰 계약 주소",
|
"token_contract_address": "토큰 계약 주소",
|
||||||
"token_name": "토큰 이름 예: Tether",
|
"token_name": "토큰 이름 예: Tether",
|
||||||
|
|
|
@ -733,7 +733,7 @@
|
||||||
"search_add_token": "ရှာဖွေရန် / တိုကင်ထည့်ပါ။",
|
"search_add_token": "ရှာဖွေရန် / တိုကင်ထည့်ပါ။",
|
||||||
"edit_token": "တိုကင်ကို တည်းဖြတ်ပါ။",
|
"edit_token": "တိုကင်ကို တည်းဖြတ်ပါ။",
|
||||||
"warning": "သတိပေးချက်",
|
"warning": "သတိပေးချက်",
|
||||||
"add_token_warning": "လိမ်လည်သူများ ညွှန်ကြားထားသည့်အတိုင်း တိုကင်များကို တည်းဖြတ်ခြင်း သို့မဟုတ် မထည့်ပါနှင့်။ ဂုဏ်သိက္ခာရှိသော အရင်းအမြစ်များဖြင့် အမြဲတမ်း တိုကင်လိပ်စာများကို အတည်ပြုပါ။",
|
"add_token_warning": "လိမ်လည်သူများ ညွှန်ကြားထားသည့်အတိုင်း တိုကင်များကို တည်းဖြတ်ခြင်း သို့မဟုတ် မထည့်ပါနှင့်။\nဂုဏ်သိက္ခာရှိသော အရင်းအမြစ်များဖြင့် အမြဲတမ်း တိုကင်လိပ်စာများကို အတည်ပြုပါ။",
|
||||||
"add_token_disclaimer_check": "ဂုဏ်သိက္ခာရှိသော အရင်းအမြစ်ကို အသုံးပြု၍ တိုကင်စာချုပ်လိပ်စာနှင့် အချက်အလက်ကို ကျွန်ုပ်အတည်ပြုပြီးဖြစ်သည်။ အန္တရာယ်ရှိသော သို့မဟုတ် မမှန်ကန်သော အချက်အလက်များကို ထည့်သွင်းခြင်းသည် ရန်ပုံငွေများ ဆုံးရှုံးသွားနိုင်သည်။",
|
"add_token_disclaimer_check": "ဂုဏ်သိက္ခာရှိသော အရင်းအမြစ်ကို အသုံးပြု၍ တိုကင်စာချုပ်လိပ်စာနှင့် အချက်အလက်ကို ကျွန်ုပ်အတည်ပြုပြီးဖြစ်သည်။ အန္တရာယ်ရှိသော သို့မဟုတ် မမှန်ကန်သော အချက်အလက်များကို ထည့်သွင်းခြင်းသည် ရန်ပုံငွေများ ဆုံးရှုံးသွားနိုင်သည်။",
|
||||||
"token_contract_address": "တိုကင်စာချုပ်လိပ်စာ",
|
"token_contract_address": "တိုကင်စာချုပ်လိပ်စာ",
|
||||||
"token_name": "တိုကင်အမည် ဥပမာ- Tether",
|
"token_name": "တိုကင်အမည် ဥပမာ- Tether",
|
||||||
|
|
|
@ -733,7 +733,7 @@
|
||||||
"search_add_token": "Token zoeken / toevoegen",
|
"search_add_token": "Token zoeken / toevoegen",
|
||||||
"edit_token": "Token bewerken",
|
"edit_token": "Token bewerken",
|
||||||
"warning": "Waarschuwing",
|
"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.",
|
"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_contract_address": "Token contractadres",
|
||||||
"token_name": "Tokennaam bijv.: Tether",
|
"token_name": "Tokennaam bijv.: Tether",
|
||||||
|
|
|
@ -733,7 +733,7 @@
|
||||||
"search_add_token": "Wyszukaj / Dodaj token",
|
"search_add_token": "Wyszukaj / Dodaj token",
|
||||||
"edit_token": "Edytuj token",
|
"edit_token": "Edytuj token",
|
||||||
"warning": "Ostrzeżenie",
|
"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.",
|
"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_contract_address": "Adres kontraktu tokena",
|
||||||
"token_name": "Nazwa tokena, np.: Tether",
|
"token_name": "Nazwa tokena, np.: Tether",
|
||||||
|
|
|
@ -732,7 +732,7 @@
|
||||||
"search_add_token": "Pesquisar / Adicionar token",
|
"search_add_token": "Pesquisar / Adicionar token",
|
||||||
"edit_token": "Editar símbolo",
|
"edit_token": "Editar símbolo",
|
||||||
"warning": "Aviso",
|
"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.",
|
"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_contract_address": "Endereço do contrato de token",
|
||||||
"token_name": "Nome do token, por exemplo: Tether",
|
"token_name": "Nome do token, por exemplo: Tether",
|
||||||
|
|
|
@ -733,7 +733,7 @@
|
||||||
"search_add_token": "Поиск / Добавить токен",
|
"search_add_token": "Поиск / Добавить токен",
|
||||||
"edit_token": "Изменить токен",
|
"edit_token": "Изменить токен",
|
||||||
"warning": "Предупреждение",
|
"warning": "Предупреждение",
|
||||||
"add_token_warning": "Не редактируйте и не добавляйте токены по указанию мошенников. Всегда подтверждайте адреса токенов из авторитетных источников!",
|
"add_token_warning": "Не редактируйте и не добавляйте токены по указанию мошенников.\nВсегда подтверждайте адреса токенов из авторитетных источников!",
|
||||||
"add_token_disclaimer_check": "Я подтвердил адрес контракта токена и информацию, используя авторитетный источник. Добавление вредоносной или неверной информации может привести к потере средств.",
|
"add_token_disclaimer_check": "Я подтвердил адрес контракта токена и информацию, используя авторитетный источник. Добавление вредоносной или неверной информации может привести к потере средств.",
|
||||||
"token_contract_address": "Адрес контракта токена",
|
"token_contract_address": "Адрес контракта токена",
|
||||||
"token_name": "Имя токена, например: Tether",
|
"token_name": "Имя токена, например: Tether",
|
||||||
|
|
|
@ -731,7 +731,7 @@
|
||||||
"search_add_token": "ค้นหา / เพิ่มโทเค็น",
|
"search_add_token": "ค้นหา / เพิ่มโทเค็น",
|
||||||
"edit_token": "แก้ไขโทเค็น",
|
"edit_token": "แก้ไขโทเค็น",
|
||||||
"warning": "คำเตือน",
|
"warning": "คำเตือน",
|
||||||
"add_token_warning": "ห้ามแก้ไขหรือเพิ่มโทเค็นตามคำแนะนำของนักต้มตุ๋น ยืนยันที่อยู่โทเค็นกับแหล่งที่มาที่เชื่อถือได้เสมอ!",
|
"add_token_warning": "ห้ามแก้ไขหรือเพิ่มโทเค็นตามคำแนะนำของนักต้มตุ๋น\nยืนยันที่อยู่โทเค็นกับแหล่งที่มาที่เชื่อถือได้เสมอ!",
|
||||||
"add_token_disclaimer_check": "ฉันได้ยืนยันที่อยู่และข้อมูลของสัญญาโทเค็นโดยใช้แหล่งข้อมูลที่เชื่อถือได้ การเพิ่มข้อมูลที่เป็นอันตรายหรือไม่ถูกต้องอาจทำให้สูญเสียเงินได้",
|
"add_token_disclaimer_check": "ฉันได้ยืนยันที่อยู่และข้อมูลของสัญญาโทเค็นโดยใช้แหล่งข้อมูลที่เชื่อถือได้ การเพิ่มข้อมูลที่เป็นอันตรายหรือไม่ถูกต้องอาจทำให้สูญเสียเงินได้",
|
||||||
"token_contract_address": "ที่อยู่สัญญาโทเค็น",
|
"token_contract_address": "ที่อยู่สัญญาโทเค็น",
|
||||||
"token_name": "ชื่อโทเค็น เช่น Tether",
|
"token_name": "ชื่อโทเค็น เช่น Tether",
|
||||||
|
|
|
@ -733,7 +733,7 @@
|
||||||
"search_add_token": "Belirteç Ara / Ekle",
|
"search_add_token": "Belirteç Ara / Ekle",
|
||||||
"edit_token": "Belirteci düzenle",
|
"edit_token": "Belirteci düzenle",
|
||||||
"warning": "Uyarı",
|
"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.",
|
"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_contract_address": "Token sözleşme adresi",
|
||||||
"token_name": "Belirteç adı, örneğin: Tether",
|
"token_name": "Belirteç adı, örneğin: Tether",
|
||||||
|
|
|
@ -732,7 +732,7 @@
|
||||||
"search_add_token": "Пошук / Додати маркер",
|
"search_add_token": "Пошук / Додати маркер",
|
||||||
"edit_token": "Редагувати маркер",
|
"edit_token": "Редагувати маркер",
|
||||||
"warning": "УВАГА",
|
"warning": "УВАГА",
|
||||||
"add_token_warning": "Не редагуйте та не додавайте токени за вказівками шахраїв. Завжди підтверджуйте адреси токенів у авторитетних джерелах!",
|
"add_token_warning": "Не редагуйте та не додавайте токени за вказівками шахраїв.\nЗавжди підтверджуйте адреси токенів у авторитетних джерелах!",
|
||||||
"add_token_disclaimer_check": "Я підтвердив адресу та інформацію щодо договору маркера, використовуючи авторитетне джерело. Додавання зловмисної або невірної інформації може призвести до втрати коштів.",
|
"add_token_disclaimer_check": "Я підтвердив адресу та інформацію щодо договору маркера, використовуючи авторитетне джерело. Додавання зловмисної або невірної інформації може призвести до втрати коштів.",
|
||||||
"token_contract_address": "Адреса договору маркера",
|
"token_contract_address": "Адреса договору маркера",
|
||||||
"token_name": "Назва токена, наприклад: Tether",
|
"token_name": "Назва токена, наприклад: Tether",
|
||||||
|
|
|
@ -728,7 +728,7 @@
|
||||||
"search_add_token": "تلاش کریں / ٹوکن شامل کریں۔",
|
"search_add_token": "تلاش کریں / ٹوکن شامل کریں۔",
|
||||||
"edit_token": "ٹوکن میں ترمیم کریں۔",
|
"edit_token": "ٹوکن میں ترمیم کریں۔",
|
||||||
"warning": "وارننگ",
|
"warning": "وارننگ",
|
||||||
"add_token_warning": "سکیمرز کی ہدایت کے مطابق ٹوکن میں ترمیم یا اضافہ نہ کریں۔ ہمیشہ معتبر ذرائع سے ٹوکن پتوں کی تصدیق کریں!",
|
"add_token_warning": "سکیمرز کی ہدایت کے مطابق ٹوکن میں ترمیم یا اضافہ نہ کریں۔\nہمیشہ معتبر ذرائع سے ٹوکن پتوں کی تصدیق کریں!",
|
||||||
"add_token_disclaimer_check": "میں نے ایک معتبر ذریعہ کا استعمال کرتے ہوئے ٹوکن کنٹریکٹ ایڈریس اور معلومات کی تصدیق کی ہے۔ بدنیتی پر مبنی یا غلط معلومات شامل کرنے کے نتیجے میں فنڈز ضائع ہو سکتے ہیں۔",
|
"add_token_disclaimer_check": "میں نے ایک معتبر ذریعہ کا استعمال کرتے ہوئے ٹوکن کنٹریکٹ ایڈریس اور معلومات کی تصدیق کی ہے۔ بدنیتی پر مبنی یا غلط معلومات شامل کرنے کے نتیجے میں فنڈز ضائع ہو سکتے ہیں۔",
|
||||||
"token_contract_address": "ٹوکن کنٹریکٹ ایڈریس",
|
"token_contract_address": "ٹوکن کنٹریکٹ ایڈریس",
|
||||||
"token_name": "ٹوکن کا نام جیسے: Tether",
|
"token_name": "ٹوکن کا نام جیسے: Tether",
|
||||||
|
|
|
@ -728,7 +728,7 @@
|
||||||
"search_add_token": "Wa / Fi àmi kun",
|
"search_add_token": "Wa / Fi àmi kun",
|
||||||
"edit_token": "Ṣatunkọ àmi",
|
"edit_token": "Ṣatunkọ àmi",
|
||||||
"warning": "Ikilo",
|
"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.",
|
"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_contract_address": "Àmi guide adirẹsi",
|
||||||
"token_name": "Orukọ àmi fun apẹẹrẹ: Tether",
|
"token_name": "Orukọ àmi fun apẹẹrẹ: Tether",
|
||||||
|
|
|
@ -732,7 +732,7 @@
|
||||||
"search_add_token": "搜索/添加令牌",
|
"search_add_token": "搜索/添加令牌",
|
||||||
"edit_token": "编辑令牌",
|
"edit_token": "编辑令牌",
|
||||||
"warning": "警告",
|
"warning": "警告",
|
||||||
"add_token_warning": "请勿按照诈骗者的指示编辑或添加令牌。 始终通过信誉良好的来源确认代币地址!",
|
"add_token_warning": "请勿按照诈骗者的指示编辑或添加令牌。\n始终通过信誉良好的来源确认代币地址!",
|
||||||
"add_token_disclaimer_check": "我已使用信誉良好的来源确认了代币合约地址和信息。 添加恶意或不正确的信息可能会导致资金损失。",
|
"add_token_disclaimer_check": "我已使用信誉良好的来源确认了代币合约地址和信息。 添加恶意或不正确的信息可能会导致资金损失。",
|
||||||
"token_contract_address": "代币合约地址",
|
"token_contract_address": "代币合约地址",
|
||||||
"token_name": "代币名称例如:Tether",
|
"token_name": "代币名称例如:Tether",
|
||||||
|
|
|
@ -525,8 +525,9 @@ abstract class Ethereum {
|
||||||
});
|
});
|
||||||
|
|
||||||
int formatterEthereumParseAmount(String amount);
|
int formatterEthereumParseAmount(String amount);
|
||||||
List<CryptoCurrency> getERC20Currencies(WalletBase wallet);
|
List<Erc20Token> getERC20Currencies(WalletBase wallet);
|
||||||
Future<CryptoCurrency?> addErc20Token(WalletBase wallet, String contractAddress);
|
Future<void> addErc20Token(WalletBase wallet, Erc20Token token);
|
||||||
|
Future<void> deleteErc20Token(WalletBase wallet, Erc20Token token);
|
||||||
Future<Erc20Token?> getErc20Token(WalletBase wallet, String contractAddress);
|
Future<Erc20Token?> getErc20Token(WalletBase wallet, String contractAddress);
|
||||||
}
|
}
|
||||||
""";
|
""";
|
||||||
|
|
Loading…
Reference in a new issue