From 8b2b3bda16c008cbb0d08b832f6b20c569d7ee42 Mon Sep 17 00:00:00 2001 From: fosse Date: Mon, 25 Sep 2023 09:47:39 -0400 Subject: [PATCH] ens review fixes --- cw_ethereum/lib/ethereum_client.dart | 4 +++ cw_ethereum/lib/ethereum_wallet.dart | 4 +-- cw_ethereum/pubspec.yaml | 4 --- lib/entities/ens_record.dart | 30 +++++++++++++++++++++ lib/entities/parse_address_from_domain.dart | 20 +++++++------- lib/ethereum/cw_ethereum.dart | 4 +-- pubspec_base.yaml | 4 +++ tool/configure.dart | 2 +- 8 files changed, 52 insertions(+), 20 deletions(-) create mode 100644 lib/entities/ens_record.dart diff --git a/cw_ethereum/lib/ethereum_client.dart b/cw_ethereum/lib/ethereum_client.dart index 4c74f1ec0..d1b3c819c 100644 --- a/cw_ethereum/lib/ethereum_client.dart +++ b/cw_ethereum/lib/ethereum_client.dart @@ -226,6 +226,10 @@ I/flutter ( 4474): Gas Used: 53000 } } + dynamic getWeb3Client() { + return _client; + } + // Future _getDecimalPlacesForContract(DeployedContract contract) async { // final String abi = await rootBundle.loadString("assets/abi_json/erc20_abi.json"); // final contractAbi = ContractAbi.fromJson(abi, "ERC20"); diff --git a/cw_ethereum/lib/ethereum_wallet.dart b/cw_ethereum/lib/ethereum_wallet.dart index b0712d059..db2f60242 100644 --- a/cw_ethereum/lib/ethereum_wallet.dart +++ b/cw_ethereum/lib/ethereum_wallet.dart @@ -509,7 +509,5 @@ abstract class EthereumWalletBase String signMessage(String message, {String? address = null}) => bytesToHex(_ethPrivateKey.signPersonalMessageToUint8List(ascii.encode(message))); - Future fetchEnsAddress(String name) async { - return await _client.checkEnsName(name); - } + dynamic getWeb3Client() => _client; } diff --git a/cw_ethereum/pubspec.yaml b/cw_ethereum/pubspec.yaml index 7e3572e80..5d19589f3 100644 --- a/cw_ethereum/pubspec.yaml +++ b/cw_ethereum/pubspec.yaml @@ -21,10 +21,6 @@ dependencies: hex: ^0.2.0 http: ^1.1.0 shared_preferences: ^2.0.15 - ens_dart: - git: - url: https://github.com/cake-tech/ens_dart.git - ref: main cw_core: path: ../cw_core diff --git a/lib/entities/ens_record.dart b/lib/entities/ens_record.dart new file mode 100644 index 000000000..4ca2bba6f --- /dev/null +++ b/lib/entities/ens_record.dart @@ -0,0 +1,30 @@ +import 'package:cake_wallet/ethereum/ethereum.dart'; +import 'package:cw_core/wallet_base.dart'; +import 'package:cw_core/wallet_type.dart'; +import 'package:ens_dart/ens_dart.dart'; +import 'package:http/http.dart'; +import 'package:web3dart/web3dart.dart'; + +class EnsRecord { + static Future fetchEnsAddress(String name, {WalletBase? wallet}) async { + Web3Client? _client; + + if (wallet != null && wallet.type == WalletType.ethereum) { + _client = ethereum!.getWeb3Client(wallet) as Web3Client?; + } + + if (_client == null) { + _client = Web3Client("ethereum.publicnode.com", Client()); + } + + try { + final ens = Ens(client: _client); + + final addr = await ens.withName(name).getAddress(); + return addr.hex; + } catch (e) { + print(e); + return ""; + } + } +} diff --git a/lib/entities/parse_address_from_domain.dart b/lib/entities/parse_address_from_domain.dart index f2c2f5b3e..7ea673995 100644 --- a/lib/entities/parse_address_from_domain.dart +++ b/lib/entities/parse_address_from_domain.dart @@ -1,6 +1,7 @@ import 'package:cake_wallet/core/address_validator.dart'; import 'package:cake_wallet/core/yat_service.dart'; import 'package:cake_wallet/di.dart'; +import 'package:cake_wallet/entities/ens_record.dart'; import 'package:cake_wallet/entities/openalias_record.dart'; import 'package:cake_wallet/entities/parsed_address.dart'; import 'package:cake_wallet/entities/unstoppable_domain_address.dart'; @@ -66,7 +67,7 @@ class AddressResolver { }); final userTweetsText = subString.toString(); final addressFromPinnedTweet = - extractAddressByType(raw: userTweetsText, type: CryptoCurrency.fromString(ticker)); + extractAddressByType(raw: userTweetsText, type: CryptoCurrency.fromString(ticker)); if (addressFromPinnedTweet != null) { return ParsedAddress.fetchTwitterAddress(address: addressFromPinnedTweet, name: text); @@ -99,6 +100,14 @@ class AddressResolver { return ParsedAddress.fetchUnstoppableDomainAddress(address: address, name: text); } + if (text.contains(".")) { + var wallet = getIt.get().wallet!; + final address = await EnsRecord.fetchEnsAddress(text, wallet: wallet); + if (address.isNotEmpty) { + return ParsedAddress.fetchEnsAddress(name: text, address: address); + } + } + if (formattedName.contains(".")) { final txtRecord = await OpenaliasRecord.lookupOpenAliasRecord(formattedName); if (txtRecord != null) { @@ -107,15 +116,6 @@ class AddressResolver { return ParsedAddress.fetchOpenAliasAddress(record: record, name: text); } } - if (text.contains(".")) { - var wallet = getIt.get().wallet!; - if (wallet.type == WalletType.ethereum) { - final address = await ethereum!.fetchEnsAddress(wallet, text); - if (address.isNotEmpty) { - return ParsedAddress.fetchEnsAddress(name: text, address: address); - } - } - } } catch (e) { print(e.toString()); } diff --git a/lib/ethereum/cw_ethereum.dart b/lib/ethereum/cw_ethereum.dart index d3a8862de..23d9287c9 100644 --- a/lib/ethereum/cw_ethereum.dart +++ b/lib/ethereum/cw_ethereum.dart @@ -133,7 +133,7 @@ class CWEthereum extends Ethereum { } @override - Future fetchEnsAddress(WalletBase wallet, String name) async { - return (wallet as EthereumWallet).fetchEnsAddress(name); + dynamic getWeb3Client(WalletBase wallet) async { + return (wallet as EthereumWallet).getWeb3Client(); } } diff --git a/pubspec_base.yaml b/pubspec_base.yaml index da79a5076..c95a7b5bc 100644 --- a/pubspec_base.yaml +++ b/pubspec_base.yaml @@ -82,6 +82,10 @@ dependencies: shared_preferences_android: 2.0.17 url_launcher_android: 6.0.24 sensitive_clipboard: ^1.0.0 + ens_dart: + git: + url: https://github.com/cake-tech/ens_dart.git + ref: main bitcoin_flutter: git: url: https://github.com/cake-tech/bitcoin_flutter.git diff --git a/tool/configure.dart b/tool/configure.dart index 19e8ef327..1f9ddf1c6 100644 --- a/tool/configure.dart +++ b/tool/configure.dart @@ -525,7 +525,7 @@ abstract class Ethereum { CryptoCurrency assetOfTransaction(WalletBase wallet, TransactionInfo transaction); void updateEtherscanUsageState(WalletBase wallet, bool isEnabled); - Future fetchEnsAddress(WalletBase wallet, String name); + dynamic getWeb3Client(WalletBase wallet); } """;