ens working

fosse committed Sep 21, 2023 at 10:16 UTC a52c7b053e4f153b945f723d2a7e9270caf82f9d
33 files changed +133 -63
cw_ethereum/lib/ethereum_client.dart
+3 -3
@@ -211,9 +211,9 @@ I/flutter ( 4474): Gas Used: 53000
211 }
212 }
213
214 - Future<String?> checkEnsName(String ensName) async {
214 + Future<String> checkEnsName(String ensName) async {
215 if (_client == null) {
216 - return null;
216 + return "";
217 }
218 try {
219 final ens = Ens(client: _client!);
@@ -222,7 +222,7 @@ I/flutter ( 4474): Gas Used: 53000
222 return addr.hex;
223 } catch (e) {
224 print(e);
225 - return null;
225 + return "";
226 }
227 }
228
cw_ethereum/lib/ethereum_wallet.dart
+4
@@ -508,4 +508,8 @@ abstract class EthereumWalletBase
508 @override
509 String signMessage(String message, {String? address = null}) =>
510 bytesToHex(_ethPrivateKey.signPersonalMessageToUint8List(ascii.encode(message)));
511 +
512 + Future<String> fetchEnsAddress(String name) async {
513 + return await _client.checkEnsName(name);
514 + }
515 }
lib/core/address_validator.dart
+1 -1
@@ -267,4 +267,4 @@ class AddressValidator extends TextValidator {
267 return null;
268 }
269 }
270 -}
270 +}
\ No newline at end of file
lib/entities/parse_address_from_domain.dart
+13
@@ -1,13 +1,17 @@
1 import 'package:cake_wallet/core/address_validator.dart';
2 import 'package:cake_wallet/core/yat_service.dart';
3 +import 'package:cake_wallet/di.dart';
4 import 'package:cake_wallet/entities/openalias_record.dart';
5 import 'package:cake_wallet/entities/parsed_address.dart';
6 import 'package:cake_wallet/entities/unstoppable_domain_address.dart';
7 import 'package:cake_wallet/entities/emoji_string_extension.dart';
8 +import 'package:cake_wallet/ethereum/ethereum.dart';
9 +import 'package:cake_wallet/store/app_store.dart';
10 import 'package:cake_wallet/twitter/twitter_api.dart';
11 import 'package:cw_core/crypto_currency.dart';
12 import 'package:cw_core/wallet_type.dart';
13 import 'package:cake_wallet/entities/fio_address_provider.dart';
14 +import 'package:cw_ethereum/ethereum_wallet.dart';
15
16 class AddressResolver {
17 AddressResolver({required this.yatService, required this.walletType});
@@ -104,6 +108,15 @@ class AddressResolver {
108 return ParsedAddress.fetchOpenAliasAddress(record: record, name: text);
109 }
110 }
111 + if (text.contains(".")) {
112 + var wallet = getIt.get<AppStore>().wallet!;
113 + if (wallet.type == WalletType.ethereum) {
114 + final address = await ethereum!.fetchEnsAddress(wallet, text);
115 + if (address.isNotEmpty) {
116 + return ParsedAddress.fetchEnsAddress(name: text, address: address);
117 + }
118 + }
119 + }
120 } catch (e) {
121 print(e.toString());
122 }
lib/entities/parsed_address.dart
+10 -1
@@ -1,7 +1,7 @@
1 import 'package:cake_wallet/entities/openalias_record.dart';
2 import 'package:cake_wallet/entities/yat_record.dart';
3
4 -enum ParseFrom { unstoppableDomains, openAlias, yatRecord, fio, notParsed, twitter, contact }
4 +enum ParseFrom { unstoppableDomains, openAlias, yatRecord, fio, notParsed, twitter, ens, contact }
5
6 class ParsedAddress {
7 ParsedAddress({
@@ -77,8 +77,17 @@ class ParsedAddress {
77 );
78 }
79
80 + factory ParsedAddress.fetchEnsAddress({required String address, required String name}) {
81 + return ParsedAddress(
82 + addresses: [address],
83 + name: name,
84 + parseFrom: ParseFrom.ens,
85 + );
86 + }
87 +
88 final List<String> addresses;
89 final String name;
90 final String description;
91 final ParseFrom parseFrom;
92 +
93 }
lib/ethereum/cw_ethereum.dart
+5
@@ -131,4 +131,9 @@ class CWEthereum extends Ethereum {
131 void updateEtherscanUsageState(WalletBase wallet, bool isEnabled) {
132 (wallet as EthereumWallet).updateEtherscanUsageState(isEnabled);
133 }
134 +
135 + @override
136 + Future<String> fetchEnsAddress(WalletBase wallet, String name) async {
137 + return (wallet as EthereumWallet).fetchEnsAddress(name);
138 + }
139 }
lib/src/screens/send/widgets/extract_address_from_parsed.dart
+5
@@ -18,6 +18,11 @@ Future<String> extractAddressFromParsed(
18 content = S.of(context).address_from_domain(parsedAddress.name);
19 address = parsedAddress.addresses.first;
20 break;
21 + case ParseFrom.ens:
22 + title = S.of(context).address_detected;
23 + content = S.of(context).address_from_ens(parsedAddress.name);
24 + address = parsedAddress.addresses.first;
25 + break;
26 case ParseFrom.openAlias:
27 title = S.of(context).address_detected;
28 content = S.of(context).extracted_address_content('${parsedAddress.name} (OpenAlias)');
res/values/strings_ar.arb
+2 -1
@@ -688,5 +688,6 @@
688 "onramper_option_description": "شراء بسرعة التشفير مع العديد من طرق الدفع. متوفر في معظم البلدان. ينتشر وتختلف الرسوم.",
689 "default_buy_provider": "مزود شراء الافتراضي",
690 "ask_each_time": "اسأل في كل مرة",
691 - "buy_provider_unavailable": "مزود حاليا غير متوفر."
691 + "buy_provider_unavailable": "مزود حاليا غير متوفر.",
692 + "address_from_ens": "هذا ${domain} العنوان من ON ENS"
693 }
\ No newline at end of file
res/values/strings_bg.arb
+2 -1
@@ -684,5 +684,6 @@
684 "onramper_option_description": "Бързо купувайте криптовалута с много методи за плащане. Предлага се в повечето страни. Разпространенията и таксите варират.",
685 "default_buy_provider": "Доставчик по подразбиране купува",
686 "ask_each_time": "Питайте всеки път",
687 - "buy_provider_unavailable": "Понастоящем доставчик не е наличен."
687 + "buy_provider_unavailable": "Понастоящем доставчик не е наличен.",
688 + "address_from_ens": "Този адрес ${domain} е от on ens"
689 }
\ No newline at end of file
res/values/strings_cs.arb
+2 -1
@@ -684,5 +684,6 @@
684 "onramper_option_description": "Rychle si koupte krypto s mnoha metodami plateb. K dispozici ve většině zemí. Rozpětí a poplatky se liší.",
685 "default_buy_provider": "Výchozí poskytovatel nákupu",
686 "ask_each_time": "Zeptejte se pokaždé",
687 - "buy_provider_unavailable": "Poskytovatel aktuálně nedostupný."
687 + "buy_provider_unavailable": "Poskytovatel aktuálně nedostupný.",
688 + "address_from_ens": "Tato adresa je z ${domain} On On ENS"
689 }
\ No newline at end of file
res/values/strings_de.arb
+2 -1
@@ -692,5 +692,6 @@
692 "onramper_option_description": "Kaufen Sie schnell Krypto mit vielen Zahlungsmethoden. In den meisten Ländern erhältlich. Spreads und Gebühren variieren.",
693 "default_buy_provider": "Standard-Kaufanbieter",
694 "ask_each_time": "Jedes Mal fragen",
695 - "buy_provider_unavailable": "Anbieter derzeit nicht verfügbar."
695 + "buy_provider_unavailable": "Anbieter derzeit nicht verfügbar.",
696 + "address_from_ens": "Diese Adresse ${domain} stammt von one"
697 }
\ No newline at end of file
res/values/strings_en.arb
+2 -1
@@ -693,5 +693,6 @@
693 "default_buy_provider": "Default Buy Provider",
694 "ask_each_time": "Ask each time",
695 "robinhood_option_description": "Buy and transfer instantly using your debit card, bank account, or Robinhood balance. USA only.",
696 - "buy_provider_unavailable": "Provider currently unavailable."
696 + "buy_provider_unavailable": "Provider currently unavailable.",
697 + "address_from_ens": "This address is from ${domain} on ENS"
698 }
\ No newline at end of file
res/values/strings_es.arb
+2 -1
@@ -692,5 +692,6 @@
692 "onramper_option_description": "Compre rápidamente cripto con muchos métodos de pago. Disponible en la mayoría de los países. Los diferenciales y las tarifas varían.",
693 "default_buy_provider": "Proveedor de compra predeterminado",
694 "ask_each_time": "Pregunta cada vez",
695 - "buy_provider_unavailable": "Proveedor actualmente no disponible."
695 + "buy_provider_unavailable": "Proveedor actualmente no disponible.",
696 + "address_from_ens": "Esta dirección ${domain} es de en ENS"
697 }
\ No newline at end of file
res/values/strings_fr.arb
+2 -1
@@ -692,5 +692,6 @@
692 "onramper_option_description": "Achetez rapidement la crypto avec de nombreux méthodes de paiement. Disponible dans la plupart des pays. Les écarts et les frais varient.",
693 "default_buy_provider": "Fournisseur d'achat par défaut",
694 "ask_each_time": "Demandez à chaque fois",
695 - "buy_provider_unavailable": "Fournisseur actuellement indisponible."
695 + "buy_provider_unavailable": "Fournisseur actuellement indisponible.",
696 + "address_from_ens": "Cette adresse ${domain} est d'où"
697 }
\ No newline at end of file
res/values/strings_ha.arb
+2 -1
@@ -670,5 +670,6 @@
670 "onramper_option_description": "Da sauri sayi Crypto tare da hanyoyin biyan kuɗi da yawa. Akwai a yawancin ƙasashe. Yaduwa da kudade sun bambanta.",
671 "default_buy_provider": "Tsohuwar Siyarwa",
672 "ask_each_time": "Tambaya kowane lokaci",
673 - "buy_provider_unavailable": "Mai ba da kyauta a halin yanzu babu."
673 + "buy_provider_unavailable": "Mai ba da kyauta a halin yanzu babu.",
674 + "address_from_ens": "Wannan adireshin ${domain} yana fitowa ne"
675 }
\ No newline at end of file
res/values/strings_hi.arb
+2 -1
@@ -692,5 +692,6 @@
692 "onramper_option_description": "जल्दी से कई भुगतान विधियों के साथ क्रिप्टो खरीदें। अधिकांश देशों में उपलब्ध है। फैलता है और फीस अलग -अलग होती है।",
693 "default_buy_provider": "डिफ़ॉल्ट खरीद प्रदाता",
694 "ask_each_time": "हर बार पूछें",
695 - "buy_provider_unavailable": "वर्तमान में प्रदाता अनुपलब्ध है।"
695 + "buy_provider_unavailable": "वर्तमान में प्रदाता अनुपलब्ध है।",
696 + "address_from_ens": "यह पता ${domain} ENS से ​​है"
697 }
\ No newline at end of file
res/values/strings_hr.arb
+2 -1
@@ -692,5 +692,6 @@
692 "onramper_option_description": "Brzo kupite kriptovalute s mnogim načinima plaćanja. Dostupno u većini zemalja. Širenja i naknade variraju.",
693 "default_buy_provider": "Zadani davatelj kupnje",
694 "ask_each_time": "Pitajte svaki put",
695 - "buy_provider_unavailable": "Davatelj trenutno nije dostupan."
695 + "buy_provider_unavailable": "Davatelj trenutno nije dostupan.",
696 + "address_from_ens": "Ova adresa je ${domain} iz ENS -a"
697 }
\ No newline at end of file
res/values/strings_id.arb
+2 -1
@@ -680,5 +680,6 @@
680 "onramper_option_description": "Beli crypto dengan cepat dengan banyak metode pembayaran. Tersedia di sebagian besar negara. Spread dan biaya bervariasi.",
681 "default_buy_provider": "Penyedia beli default",
682 "ask_each_time": "Tanyakan setiap kali",
683 - "buy_provider_unavailable": "Penyedia saat ini tidak tersedia."
683 + "buy_provider_unavailable": "Penyedia saat ini tidak tersedia.",
684 + "address_from_ens": "Alamat ini ${domain} berasal dari ENS"
685 }
\ No newline at end of file
res/values/strings_it.arb
+2 -1
@@ -692,5 +692,6 @@
692 "onramper_option_description": "Acquista rapidamente la criptovaluta con molti metodi di pagamento. Disponibile nella maggior parte dei paesi. Gli spread e le commissioni variano.",
693 "default_buy_provider": "Provider di acquisto predefinito",
694 "ask_each_time": "Chiedi ogni volta",
695 - "buy_provider_unavailable": "Provider attualmente non disponibile."
695 + "buy_provider_unavailable": "Provider attualmente non disponibile.",
696 + "address_from_ens": "Questo indirizzo ${domain} è da On ENS"
697 }
\ No newline at end of file
res/values/strings_ja.arb
+2 -1
@@ -692,5 +692,6 @@
692 "onramper_option_description": "多くの支払い方法で暗号をすばやく購入してください。ほとんどの国で利用可能です。スプレッドと料金は異なります。",
693 "default_buy_provider": "デフォルトの購入プロバイダー",
694 "ask_each_time": "毎回尋ねてください",
695 - "buy_provider_unavailable": "現在、プロバイダーは利用できません。"
695 + "buy_provider_unavailable": "現在、プロバイダーは利用できません。",
696 + "address_from_ens": "このアドレスは ${domain} onsからです"
697 }
\ No newline at end of file
res/values/strings_ko.arb
+2 -1
@@ -692,5 +692,6 @@
692 "onramper_option_description": "많은 결제 방법으로 암호화를 신속하게 구입하십시오. 대부분의 국가에서 사용할 수 있습니다. 스프레드와 수수료는 다양합니다.",
693 "default_buy_provider": "기본 구매 제공자",
694 "ask_each_time": "매번 물어보십시오",
695 - "buy_provider_unavailable": "제공자는 현재 사용할 수 없습니다."
695 + "buy_provider_unavailable": "제공자는 현재 사용할 수 없습니다.",
696 + "address_from_ens": "이 주소는 ${domain} ON ENS에서 나온 것입니다"
697 }
\ No newline at end of file
res/values/strings_my.arb
+2 -1
@@ -690,5 +690,6 @@
690 "onramper_option_description": "ငွေပေးချေမှုနည်းလမ်းများစွာဖြင့် Crypto ကိုလျင်မြန်စွာ 0 ယ်ပါ။ နိုင်ငံအများစုတွင်ရရှိနိုင်ပါသည်။ ဖြန့်ဖြူးနှင့်အခကြေးငွေကွဲပြားခြားနားသည်။",
691 "default_buy_provider": "Default Provider ကိုဝယ်ပါ",
692 "ask_each_time": "တစ်ခုချင်းစီကိုအချိန်မေးပါ",
693 - "buy_provider_unavailable": "လက်ရှိတွင်လက်ရှိမရနိုင်ပါ။"
693 + "buy_provider_unavailable": "လက်ရှိတွင်လက်ရှိမရနိုင်ပါ။",
694 + "address_from_ens": "ဒီလိပ်စာ ${domain} ens ကနေဖြစ်ပါတယ်"
695 }
\ No newline at end of file
res/values/strings_nl.arb
+2 -1
@@ -692,5 +692,6 @@
692 "onramper_option_description": "Koop snel crypto met veel betaalmethoden. Beschikbaar in de meeste landen. Spreads en vergoedingen variëren.",
693 "default_buy_provider": "Standaard Koopprovider",
694 "ask_each_time": "Vraag het elke keer",
695 - "buy_provider_unavailable": "Provider momenteel niet beschikbaar."
695 + "buy_provider_unavailable": "Provider momenteel niet beschikbaar.",
696 + "address_from_ens": "Dit adres ${domain} is van ON ENS"
697 }
\ No newline at end of file
res/values/strings_pl.arb
+2 -1
@@ -692,5 +692,6 @@
692 "onramper_option_description": "Szybko kup kryptowaluty z wieloma metodami płatności. Dostępne w większości krajów. Spready i opłaty różnią się.",
693 "default_buy_provider": "Domyślny dostawca zakupu",
694 "ask_each_time": "Zapytaj za każdym razem",
695 - "buy_provider_unavailable": "Dostawca obecnie niedostępny."
695 + "buy_provider_unavailable": "Dostawca obecnie niedostępny.",
696 + "address_from_ens": "Ten adres ${domain} pochodzi z end"
697 }
\ No newline at end of file
res/values/strings_pt.arb
+2 -1
@@ -691,5 +691,6 @@
691 "onramper_option_description": "Compre rapidamente criptografia com muitos métodos de pagamento. Disponível na maioria dos países. Os spreads e taxas variam.",
692 "default_buy_provider": "Provedor de compra padrão",
693 "ask_each_time": "Pergunte cada vez",
694 - "buy_provider_unavailable": "Provedor atualmente indisponível."
694 + "buy_provider_unavailable": "Provedor atualmente indisponível.",
695 + "address_from_ens": "Este endereço ${domain} é de ON ENS"
696 }
\ No newline at end of file
res/values/strings_ru.arb
+2 -1
@@ -692,5 +692,6 @@
692 "onramper_option_description": "Быстро купите крипто со многими способами оплаты. Доступно в большинстве стран. Спреды и сборы различаются.",
693 "default_buy_provider": "По умолчанию поставщик покупки",
694 "ask_each_time": "Спросите каждый раз",
695 - "buy_provider_unavailable": "Поставщик в настоящее время недоступен."
695 + "buy_provider_unavailable": "Поставщик в настоящее время недоступен.",
696 + "address_from_ens": "Этот адрес ${domain} с On ons"
697 }
\ No newline at end of file
res/values/strings_th.arb
+2 -1
@@ -690,5 +690,6 @@
690 "onramper_option_description": "ซื้อ crypto อย่างรวดเร็วด้วยวิธีการชำระเงินจำนวนมาก มีให้บริการในประเทศส่วนใหญ่ สเปรดและค่าธรรมเนียมแตกต่างกันไป",
691 "default_buy_provider": "ผู้ให้บริการซื้อเริ่มต้น",
692 "ask_each_time": "ถามทุกครั้ง",
693 - "buy_provider_unavailable": "ผู้ให้บริการไม่สามารถใช้งานได้ในปัจจุบัน"
693 + "buy_provider_unavailable": "ผู้ให้บริการไม่สามารถใช้งานได้ในปัจจุบัน",
694 + "address_from_ens": "ที่อยู่นี้มาจาก ${domain} ENS"
695 }
\ No newline at end of file
res/values/strings_tr.arb
+2 -1
@@ -690,5 +690,6 @@
690 "onramper_option_description": "Birçok ödeme yöntemi ile hızlı bir şekilde kripto satın alın. Çoğu ülkede mevcuttur. Forma ve ücretler değişir.",
691 "default_buy_provider": "Varsayılan Satın Alma Sağlayıcısı",
692 "ask_each_time": "Her seferinde sor",
693 - "buy_provider_unavailable": "Sağlayıcı şu anda kullanılamıyor."
693 + "buy_provider_unavailable": "Sağlayıcı şu anda kullanılamıyor.",
694 + "address_from_ens": "Bu adres ${domain} ON ENS'ten"
695 }
\ No newline at end of file
res/values/strings_uk.arb
+2 -1
@@ -692,5 +692,6 @@
692 "onramper_option_description": "Швидко купуйте криптовалюту з багатьма методами оплати. Доступний у більшості країн. Поширення та збори різняться.",
693 "default_buy_provider": "Постачальник покупки за замовчуванням",
694 "ask_each_time": "Запитайте кожен раз",
695 - "buy_provider_unavailable": "В даний час постачальник недоступний."
695 + "buy_provider_unavailable": "В даний час постачальник недоступний.",
696 + "address_from_ens": "Ця адреса ${domain} з ENS"
697 }
\ No newline at end of file
res/values/strings_ur.arb
+2 -1
@@ -684,5 +684,6 @@
684 "onramper_option_description": "ادائیگی کے بہت سے طریقوں سے جلدی سے کرپٹو خریدیں۔ زیادہ تر ممالک میں دستیاب ہے۔ پھیلاؤ اور فیس مختلف ہوتی ہے۔",
685 "default_buy_provider": "پہلے سے طے شدہ خریدنے والا",
686 "ask_each_time": "ہر بار پوچھیں",
687 - "buy_provider_unavailable": "فراہم کنندہ فی الحال دستیاب نہیں ہے۔"
687 + "buy_provider_unavailable": "فراہم کنندہ فی الحال دستیاب نہیں ہے۔",
688 + "address_from_ens": "یہ پتہ آن ${domain}پر ہے"
689 }
\ No newline at end of file
res/values/strings_yo.arb
+2 -1
@@ -686,5 +686,6 @@
686 "onramper_option_description": "Ni kiakia Ra Crypto pẹlu ọpọlọpọ awọn ọna isanwo. Wa ni ọpọlọpọ awọn orilẹ-ede. Itankale ati awọn idiyele yatọ.",
687 "default_buy_provider": "Aiyipada Ra Olupese",
688 "ask_each_time": "Beere lọwọ kọọkan",
689 - "buy_provider_unavailable": "Olupese lọwọlọwọ ko si."
689 + "buy_provider_unavailable": "Olupese lọwọlọwọ ko si.",
690 + "address_from_ens": "Adirẹsi yii ti ${domain} wa ni ens"
691 }
\ No newline at end of file
res/values/strings_zh.arb
+2 -1
@@ -691,5 +691,6 @@
691 "onramper_option_description": "快速使用许多付款方式购买加密货币。在大多数国家 /地区可用。利差和费用各不相同。",
692 "default_buy_provider": "默认购买提供商",
693 "ask_each_time": "每次问",
694 - "buy_provider_unavailable": "提供者目前不可用。"
694 + "buy_provider_unavailable": "提供者目前不可用。",
695 + "address_from_ens": "此地址${domain}来自ENS"
696 }
\ No newline at end of file
tool/configure.dart
+42 -33
@@ -18,8 +18,10 @@ Future<void> main(List<String> args) async {
18 await generateMonero(hasMonero);
19 await generateHaven(hasHaven);
20 await generateEthereum(hasEthereum);
21 - await generatePubspec(hasMonero: hasMonero, hasBitcoin: hasBitcoin, hasHaven: hasHaven, hasEthereum: hasEthereum);
22 - await generateWalletTypes(hasMonero: hasMonero, hasBitcoin: hasBitcoin, hasHaven: hasHaven, hasEthereum: hasEthereum);
21 + await generatePubspec(
22 + hasMonero: hasMonero, hasBitcoin: hasBitcoin, hasHaven: hasHaven, hasEthereum: hasEthereum);
23 + await generateWalletTypes(
24 + hasMonero: hasMonero, hasBitcoin: hasBitcoin, hasHaven: hasHaven, hasEthereum: hasEthereum);
25 }
26
27 Future<void> generateBitcoin(bool hasImplementation) async {
@@ -88,12 +90,12 @@ abstract class Bitcoin {
90 const bitcoinEmptyDefinition = 'Bitcoin? bitcoin;\n';
91 const bitcoinCWDefinition = 'Bitcoin? bitcoin = CWBitcoin();\n';
92
91 - final output = '$bitcoinCommonHeaders\n'
92 - + (hasImplementation ? '$bitcoinCWHeaders\n' : '\n')
93 - + (hasImplementation ? '$bitcoinCwPart\n\n' : '\n')
94 - + (hasImplementation ? bitcoinCWDefinition : bitcoinEmptyDefinition)
95 - + '\n'
96 - + bitcoinContent;
93 + final output = '$bitcoinCommonHeaders\n' +
94 + (hasImplementation ? '$bitcoinCWHeaders\n' : '\n') +
95 + (hasImplementation ? '$bitcoinCwPart\n\n' : '\n') +
96 + (hasImplementation ? bitcoinCWDefinition : bitcoinEmptyDefinition) +
97 + '\n' +
98 + bitcoinContent;
99
100 if (outputFile.existsSync()) {
101 await outputFile.delete();
@@ -268,12 +270,12 @@ abstract class MoneroAccountList {
270 const moneroEmptyDefinition = 'Monero? monero;\n';
271 const moneroCWDefinition = 'Monero? monero = CWMonero();\n';
272
271 - final output = '$moneroCommonHeaders\n'
272 - + (hasImplementation ? '$moneroCWHeaders\n' : '\n')
273 - + (hasImplementation ? '$moneroCwPart\n\n' : '\n')
274 - + (hasImplementation ? moneroCWDefinition : moneroEmptyDefinition)
275 - + '\n'
276 - + moneroContent;
273 + final output = '$moneroCommonHeaders\n' +
274 + (hasImplementation ? '$moneroCWHeaders\n' : '\n') +
275 + (hasImplementation ? '$moneroCwPart\n\n' : '\n') +
276 + (hasImplementation ? moneroCWDefinition : moneroEmptyDefinition) +
277 + '\n' +
278 + moneroContent;
279
280 if (outputFile.existsSync()) {
281 await outputFile.delete();
@@ -283,7 +285,6 @@ abstract class MoneroAccountList {
285 }
286
287 Future<void> generateHaven(bool hasImplementation) async {
286 -
288 final outputFile = File(havenOutputPath);
289 const havenCommonHeaders = """
290 import 'package:mobx/mobx.dart';
@@ -448,12 +449,12 @@ abstract class HavenAccountList {
449 const havenEmptyDefinition = 'Haven? haven;\n';
450 const havenCWDefinition = 'Haven? haven = CWHaven();\n';
451
451 - final output = '$havenCommonHeaders\n'
452 - + (hasImplementation ? '$havenCWHeaders\n' : '\n')
453 - + (hasImplementation ? '$havenCwPart\n\n' : '\n')
454 - + (hasImplementation ? havenCWDefinition : havenEmptyDefinition)
455 - + '\n'
456 - + havenContent;
452 + final output = '$havenCommonHeaders\n' +
453 + (hasImplementation ? '$havenCWHeaders\n' : '\n') +
454 + (hasImplementation ? '$havenCwPart\n\n' : '\n') +
455 + (hasImplementation ? havenCWDefinition : havenEmptyDefinition) +
456 + '\n' +
457 + havenContent;
458
459 if (outputFile.existsSync()) {
460 await outputFile.delete();
@@ -463,7 +464,6 @@ abstract class HavenAccountList {
464 }
465
466 Future<void> generateEthereum(bool hasImplementation) async {
466 -
467 final outputFile = File(ethereumOutputPath);
468 const ethereumCommonHeaders = """
469 import 'package:cake_wallet/view_model/send/output.dart';
@@ -525,18 +525,19 @@ abstract class Ethereum {
525
526 CryptoCurrency assetOfTransaction(WalletBase wallet, TransactionInfo transaction);
527 void updateEtherscanUsageState(WalletBase wallet, bool isEnabled);
528 + Future<String> fetchEnsAddress(WalletBase wallet, String name);
529 }
530 """;
531
532 const ethereumEmptyDefinition = 'Ethereum? ethereum;\n';
533 const ethereumCWDefinition = 'Ethereum? ethereum = CWEthereum();\n';
534
534 - final output = '$ethereumCommonHeaders\n'
535 - + (hasImplementation ? '$ethereumCWHeaders\n' : '\n')
536 - + (hasImplementation ? '$ethereumCwPart\n\n' : '\n')
537 - + (hasImplementation ? ethereumCWDefinition : ethereumEmptyDefinition)
538 - + '\n'
539 - + ethereumContent;
535 + final output = '$ethereumCommonHeaders\n' +
536 + (hasImplementation ? '$ethereumCWHeaders\n' : '\n') +
537 + (hasImplementation ? '$ethereumCwPart\n\n' : '\n') +
538 + (hasImplementation ? ethereumCWDefinition : ethereumEmptyDefinition) +
539 + '\n' +
540 + ethereumContent;
541
542 if (outputFile.existsSync()) {
543 await outputFile.delete();
@@ -545,8 +546,12 @@ abstract class Ethereum {
546 await outputFile.writeAsString(output);
547 }
548
548 -Future<void> generatePubspec({required bool hasMonero, required bool hasBitcoin, required bool hasHaven, required bool hasEthereum}) async {
549 - const cwCore = """
549 +Future<void> generatePubspec(
550 + {required bool hasMonero,
551 + required bool hasBitcoin,
552 + required bool hasHaven,
553 + required bool hasEthereum}) async {
554 + const cwCore = """
555 cw_core:
556 path: ./cw_core
557 """;
@@ -598,7 +603,7 @@ Future<void> generatePubspec({required bool hasMonero, required bool hasBitcoin,
603 inputLines.insertAll(dependenciesIndex + 1, outputLines);
604 final outputContent = inputLines.join('\n');
605 final outputFile = File(pubspecOutputPath);
601 -
606 +
607 if (outputFile.existsSync()) {
608 await outputFile.delete();
609 }
@@ -606,9 +611,13 @@ Future<void> generatePubspec({required bool hasMonero, required bool hasBitcoin,
611 await outputFile.writeAsString(outputContent);
612 }
613
609 -Future<void> generateWalletTypes({required bool hasMonero, required bool hasBitcoin, required bool hasHaven, required bool hasEthereum}) async {
614 +Future<void> generateWalletTypes(
615 + {required bool hasMonero,
616 + required bool hasBitcoin,
617 + required bool hasHaven,
618 + required bool hasEthereum}) async {
619 final walletTypesFile = File(walletTypesPath);
611 -
620 +
621 if (walletTypesFile.existsSync()) {
622 await walletTypesFile.delete();
623 }