From 74d02f30f8833d668ed5dcf5c41a7f5a2ca9bcf6 Mon Sep 17 00:00:00 2001 From: Anton Paymyshev Date: Mon, 13 Jan 2025 16:16:16 +0700 Subject: [PATCH] Support resolving on Base chain for UD --- .../brave_wallet/browser/brave_wallet_utils.cc | 15 +++++++++------ .../brave_wallet/browser/brave_wallet_utils.h | 2 +- .../brave_wallet/browser/json_rpc_service.cc | 11 ++++++----- .../brave_wallet/browser/network_manager.cc | 2 ++ .../unstoppable_domains_multichain_calls.cc | 12 +++++++++++- 5 files changed, 29 insertions(+), 13 deletions(-) diff --git a/components/brave_wallet/browser/brave_wallet_utils.cc b/components/brave_wallet/browser/brave_wallet_utils.cc index 8665e2615140..bea236ed3465 100644 --- a/components/brave_wallet/browser/brave_wallet_utils.cc +++ b/components/brave_wallet/browser/brave_wallet_utils.cc @@ -67,14 +67,17 @@ bool IsValidEntropySize(size_t entropy_size) { return true; } -// Addresses taken from https://docs.unstoppabledomains.com/developer-toolkit/ -// smart-contracts/uns-smart-contracts/#proxyreader -const base::flat_map +const base::flat_map kUnstoppableDomainsProxyReaderContractAddressMap = { + // https://github.com/unstoppabledomains/uns/blob/abd9e12409094dd6ea8611ebffdade8db49c4b56/uns-config.json#L76 {brave_wallet::mojom::kMainnetChainId, - "0xc3C2BAB5e3e52DBF311b2aAcEf2e40344f19494E"}, + "0x578853aa776Eef10CeE6c4dd2B5862bdcE767A8B"}, + // https://github.com/unstoppabledomains/uns/blob/abd9e12409094dd6ea8611ebffdade8db49c4b56/uns-config.json#L221 {brave_wallet::mojom::kPolygonMainnetChainId, - "0xA3f32c8cd786dc089Bd1fC175F2707223aeE5d00"}}; + "0x91EDd8708062bd4233f4Dd0FCE15A7cb4d500091"}, + // https://github.com/unstoppabledomains/uns/blob/abd9e12409094dd6ea8611ebffdade8db49c4b56/uns-config.json#L545 + {brave_wallet::mojom::kBaseMainnetChainId, + "0x78c4b414e1abdf0de267deda01dffd4cd0817a16"}}; constexpr const char kEnsRegistryContractAddress[] = "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"; @@ -550,7 +553,7 @@ std::string GetDefaultBaseCryptocurrency(PrefService* prefs) { return prefs->GetString(kDefaultBaseCryptocurrency); } -std::string GetUnstoppableDomainsProxyReaderContractAddress( +std::string_view GetUnstoppableDomainsProxyReaderContractAddress( std::string_view chain_id) { std::string chain_id_lower = base::ToLowerASCII(chain_id); if (kUnstoppableDomainsProxyReaderContractAddressMap.contains( diff --git a/components/brave_wallet/browser/brave_wallet_utils.h b/components/brave_wallet/browser/brave_wallet_utils.h index 74466f6312d9..2c5f3b552569 100644 --- a/components/brave_wallet/browser/brave_wallet_utils.h +++ b/components/brave_wallet/browser/brave_wallet_utils.h @@ -81,7 +81,7 @@ void SetDefaultBaseCryptocurrency(PrefService* prefs, std::string_view cryptocurrency); std::string GetDefaultBaseCryptocurrency(PrefService* prefs); -std::string GetUnstoppableDomainsProxyReaderContractAddress( +std::string_view GetUnstoppableDomainsProxyReaderContractAddress( std::string_view chain_id); std::string GetEnsRegistryContractAddress(std::string_view chain_id); diff --git a/components/brave_wallet/browser/json_rpc_service.cc b/components/brave_wallet/browser/json_rpc_service.cc index 943a3d1bef48..fa264f358b03 100644 --- a/components/brave_wallet/browser/json_rpc_service.cc +++ b/components/brave_wallet/browser/json_rpc_service.cc @@ -1715,8 +1715,9 @@ void JsonRpcService::UnstoppableDomainsResolveDns( base::BindOnce(&JsonRpcService::OnUnstoppableDomainsResolveDns, weak_ptr_factory_.GetWeakPtr(), domain, chain_id); auto eth_call = eth::eth_call( - "", GetUnstoppableDomainsProxyReaderContractAddress(chain_id), "", "", - "", *data, kEthereumBlockTagLatest); + "", + std::string(GetUnstoppableDomainsProxyReaderContractAddress(chain_id)), + "", "", "", *data, kEthereumBlockTagLatest); RequestInternal(std::move(eth_call), true, NetworkManager::GetUnstoppableDomainsRpcUrl(chain_id), std::move(internal_callback)); @@ -1787,9 +1788,9 @@ void JsonRpcService::UnstoppableDomainsGetWalletAddr( auto internal_callback = base::BindOnce(&JsonRpcService::OnUnstoppableDomainsGetWalletAddr, weak_ptr_factory_.GetWeakPtr(), key, chain_id); - auto eth_call = - eth::eth_call(GetUnstoppableDomainsProxyReaderContractAddress(chain_id), - ToHex(call_data)); + auto eth_call = eth::eth_call( + std::string(GetUnstoppableDomainsProxyReaderContractAddress(chain_id)), + ToHex(call_data)); RequestInternal(std::move(eth_call), true, NetworkManager::GetUnstoppableDomainsRpcUrl(chain_id), std::move(internal_callback)); diff --git a/components/brave_wallet/browser/network_manager.cc b/components/brave_wallet/browser/network_manager.cc index 0c838904a2df..fd383d08722d 100644 --- a/components/brave_wallet/browser/network_manager.cc +++ b/components/brave_wallet/browser/network_manager.cc @@ -957,6 +957,8 @@ GURL NetworkManager::GetUnstoppableDomainsRpcUrl(std::string_view chain_id) { return GetEthMainnet()->rpc_endpoints.front(); } else if (chain_id == mojom::kPolygonMainnetChainId) { return GetPolygonMainnet()->rpc_endpoints.front(); + } else if (chain_id == mojom::kBaseMainnetChainId) { + return GetBaseMainnet()->rpc_endpoints.front(); } NOTREACHED(); diff --git a/components/brave_wallet/browser/unstoppable_domains_multichain_calls.cc b/components/brave_wallet/browser/unstoppable_domains_multichain_calls.cc index 7be70100d58f..b8b1be5cc581 100644 --- a/components/brave_wallet/browser/unstoppable_domains_multichain_calls.cc +++ b/components/brave_wallet/browser/unstoppable_domains_multichain_calls.cc @@ -54,6 +54,11 @@ MultichainCall::GetEffectiveResponse() { return nullptr; } + auto base_result = responses_.find(mojom::kBaseMainnetChainId); + if (base_result == responses_.end()) { + return nullptr; + } + auto eth_mainnet_result = responses_.find(mojom::kMainnetChainId); if (eth_mainnet_result == responses_.end()) { return nullptr; @@ -63,6 +68,10 @@ MultichainCall::GetEffectiveResponse() { return &polygon_result->second; } + if (base_result->second.result || base_result->second.error) { + return &base_result->second; + } + return ð_mainnet_result->second; } @@ -86,7 +95,8 @@ bool MultichainCall::MaybeResolveCallbacks() { template std::vector MultichainCalls::GetChains() const { - return {mojom::kPolygonMainnetChainId, mojom::kMainnetChainId}; + return {mojom::kPolygonMainnetChainId, mojom::kBaseMainnetChainId, + mojom::kMainnetChainId}; } template