Skip to content

Commit a610ba5

Browse files
committed
Uplift of #27199 (squashed) to beta
1 parent 7d3e983 commit a610ba5

8 files changed

+188
-13
lines changed

browser/net/decentralized_dns_network_delegate_helper_unittest.cc

+39
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ TEST_F(DecentralizedDnsNetworkDelegateHelperTest,
221221
auto eth_spec = brave_wallet::NetworkManager::GetUnstoppableDomainsRpcUrl(
222222
brave_wallet::mojom::kMainnetChainId)
223223
.spec();
224+
auto base_spec = brave_wallet::NetworkManager::GetUnstoppableDomainsRpcUrl(
225+
brave_wallet::mojom::kBaseMainnetChainId)
226+
.spec();
224227

225228
// No redirect for failed requests.
226229
EXPECT_EQ(net::ERR_IO_PENDING,
@@ -236,6 +239,11 @@ TEST_F(DecentralizedDnsNetworkDelegateHelperTest,
236239
brave_wallet::MakeJsonRpcStringArrayResponse(
237240
{"", "", "", "", "", "https://brave.com"}),
238241
net::HTTP_REQUEST_TIMEOUT);
242+
test_url_loader_factory().SimulateResponseForPendingRequest(
243+
base_spec,
244+
brave_wallet::MakeJsonRpcStringArrayResponse(
245+
{"", "", "", "", "", "https://brave.com"}),
246+
net::HTTP_REQUEST_TIMEOUT);
239247
task_environment_.RunUntilIdle();
240248
EXPECT_TRUE(brave_request_info->new_url_spec.empty());
241249

@@ -248,6 +256,11 @@ TEST_F(DecentralizedDnsNetworkDelegateHelperTest,
248256
brave_wallet::MakeJsonRpcStringArrayResponse(
249257
{"", "", "", "", "", "https://brave.com"}),
250258
net::HTTP_OK);
259+
test_url_loader_factory().SimulateResponseForPendingRequest(
260+
base_spec,
261+
brave_wallet::MakeJsonRpcStringArrayResponse(
262+
{"", "", "", "", "", "https://brave.com/base"}),
263+
net::HTTP_OK);
251264
test_url_loader_factory().SimulateResponseForPendingRequest(
252265
eth_spec,
253266
brave_wallet::MakeJsonRpcStringArrayResponse(
@@ -257,6 +270,28 @@ TEST_F(DecentralizedDnsNetworkDelegateHelperTest,
257270
task_environment_.RunUntilIdle();
258271
EXPECT_EQ(brave_request_info->new_url_spec, "https://brave.com/");
259272

273+
// Base result.
274+
EXPECT_EQ(net::ERR_IO_PENDING,
275+
OnBeforeURLRequest_DecentralizedDnsPreRedirectWork(
276+
base::DoNothing(), brave_request_info));
277+
test_url_loader_factory().SimulateResponseForPendingRequest(
278+
polygon_spec,
279+
brave_wallet::MakeJsonRpcStringArrayResponse({"", "", "", "", "", ""}),
280+
net::HTTP_OK);
281+
test_url_loader_factory().SimulateResponseForPendingRequest(
282+
base_spec,
283+
brave_wallet::MakeJsonRpcStringArrayResponse(
284+
{"", "", "", "", "", "https://brave.com/base"}),
285+
net::HTTP_OK);
286+
test_url_loader_factory().SimulateResponseForPendingRequest(
287+
eth_spec,
288+
brave_wallet::MakeJsonRpcStringArrayResponse(
289+
{"QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR", "", "", "", "",
290+
""}),
291+
net::HTTP_OK);
292+
task_environment_.RunUntilIdle();
293+
EXPECT_EQ(brave_request_info->new_url_spec, "https://brave.com/base");
294+
260295
// Eth result.
261296
EXPECT_EQ(net::ERR_IO_PENDING,
262297
OnBeforeURLRequest_DecentralizedDnsPreRedirectWork(
@@ -265,6 +300,10 @@ TEST_F(DecentralizedDnsNetworkDelegateHelperTest,
265300
polygon_spec,
266301
brave_wallet::MakeJsonRpcStringArrayResponse({"", "", "", "", "", ""}),
267302
net::HTTP_OK);
303+
test_url_loader_factory().SimulateResponseForPendingRequest(
304+
base_spec,
305+
brave_wallet::MakeJsonRpcStringArrayResponse({"", "", "", "", "", ""}),
306+
net::HTTP_OK);
268307
test_url_loader_factory().SimulateResponseForPendingRequest(
269308
eth_spec,
270309
brave_wallet::MakeJsonRpcStringArrayResponse(

components/brave_wallet/browser/brave_wallet_utils.cc

+9-6
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,17 @@ bool IsValidEntropySize(size_t entropy_size) {
6767
return true;
6868
}
6969

70-
// Addresses taken from https://docs.unstoppabledomains.com/developer-toolkit/
71-
// smart-contracts/uns-smart-contracts/#proxyreader
72-
const base::flat_map<std::string, std::string>
70+
const base::flat_map<std::string_view, std::string_view>
7371
kUnstoppableDomainsProxyReaderContractAddressMap = {
72+
// https://github.com/unstoppabledomains/uns/blob/abd9e12409094dd6ea8611ebffdade8db49c4b56/uns-config.json#L76
7473
{brave_wallet::mojom::kMainnetChainId,
75-
"0xc3C2BAB5e3e52DBF311b2aAcEf2e40344f19494E"},
74+
"0x578853aa776Eef10CeE6c4dd2B5862bdcE767A8B"},
75+
// https://github.com/unstoppabledomains/uns/blob/abd9e12409094dd6ea8611ebffdade8db49c4b56/uns-config.json#L221
7676
{brave_wallet::mojom::kPolygonMainnetChainId,
77-
"0xA3f32c8cd786dc089Bd1fC175F2707223aeE5d00"}};
77+
"0x91EDd8708062bd4233f4Dd0FCE15A7cb4d500091"},
78+
// https://github.com/unstoppabledomains/uns/blob/abd9e12409094dd6ea8611ebffdade8db49c4b56/uns-config.json#L545
79+
{brave_wallet::mojom::kBaseMainnetChainId,
80+
"0x78c4b414e1abdf0de267deda01dffd4cd0817a16"}};
7881

7982
constexpr const char kEnsRegistryContractAddress[] =
8083
"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e";
@@ -550,7 +553,7 @@ std::string GetDefaultBaseCryptocurrency(PrefService* prefs) {
550553
return prefs->GetString(kDefaultBaseCryptocurrency);
551554
}
552555

553-
std::string GetUnstoppableDomainsProxyReaderContractAddress(
556+
std::string_view GetUnstoppableDomainsProxyReaderContractAddress(
554557
std::string_view chain_id) {
555558
std::string chain_id_lower = base::ToLowerASCII(chain_id);
556559
if (kUnstoppableDomainsProxyReaderContractAddressMap.contains(

components/brave_wallet/browser/brave_wallet_utils.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ void SetDefaultBaseCryptocurrency(PrefService* prefs,
8181
std::string_view cryptocurrency);
8282
std::string GetDefaultBaseCryptocurrency(PrefService* prefs);
8383

84-
std::string GetUnstoppableDomainsProxyReaderContractAddress(
84+
std::string_view GetUnstoppableDomainsProxyReaderContractAddress(
8585
std::string_view chain_id);
8686
std::string GetEnsRegistryContractAddress(std::string_view chain_id);
8787

components/brave_wallet/browser/json_rpc_service.cc

+6-5
Original file line numberDiff line numberDiff line change
@@ -1715,8 +1715,9 @@ void JsonRpcService::UnstoppableDomainsResolveDns(
17151715
base::BindOnce(&JsonRpcService::OnUnstoppableDomainsResolveDns,
17161716
weak_ptr_factory_.GetWeakPtr(), domain, chain_id);
17171717
auto eth_call = eth::eth_call(
1718-
"", GetUnstoppableDomainsProxyReaderContractAddress(chain_id), "", "",
1719-
"", *data, kEthereumBlockTagLatest);
1718+
"",
1719+
std::string(GetUnstoppableDomainsProxyReaderContractAddress(chain_id)),
1720+
"", "", "", *data, kEthereumBlockTagLatest);
17201721
RequestInternal(std::move(eth_call), true,
17211722
NetworkManager::GetUnstoppableDomainsRpcUrl(chain_id),
17221723
std::move(internal_callback));
@@ -1787,9 +1788,9 @@ void JsonRpcService::UnstoppableDomainsGetWalletAddr(
17871788
auto internal_callback =
17881789
base::BindOnce(&JsonRpcService::OnUnstoppableDomainsGetWalletAddr,
17891790
weak_ptr_factory_.GetWeakPtr(), key, chain_id);
1790-
auto eth_call =
1791-
eth::eth_call(GetUnstoppableDomainsProxyReaderContractAddress(chain_id),
1792-
ToHex(call_data));
1791+
auto eth_call = eth::eth_call(
1792+
std::string(GetUnstoppableDomainsProxyReaderContractAddress(chain_id)),
1793+
ToHex(call_data));
17931794
RequestInternal(std::move(eth_call), true,
17941795
NetworkManager::GetUnstoppableDomainsRpcUrl(chain_id),
17951796
std::move(internal_callback));

components/brave_wallet/browser/json_rpc_service_unittest.cc

+82
Original file line numberDiff line numberDiff line change
@@ -3233,6 +3233,14 @@ class UnstoppableDomainsUnitTest : public JsonRpcServiceUnitTest {
32333233
polygon_endpoint_handler_->AddEthCallHandler(
32343234
polygon_getmany_call_handler_.get());
32353235

3236+
base_endpoint_handler_ = std::make_unique<JsonRpcEndpointHandler>(
3237+
NetworkManager::GetUnstoppableDomainsRpcUrl(
3238+
mojom::kBaseMainnetChainId));
3239+
base_getmany_call_handler_ = std::make_unique<UDGetManyCallHandler>(
3240+
EthAddress::FromHex(GetUnstoppableDomainsProxyReaderContractAddress(
3241+
mojom::kBaseMainnetChainId)));
3242+
base_endpoint_handler_->AddEthCallHandler(base_getmany_call_handler_.get());
3243+
32363244
url_loader_factory_.SetInterceptor(base::BindRepeating(
32373245
&UnstoppableDomainsUnitTest::HandleRequest, base::Unretained(this)));
32383246
}
@@ -3245,6 +3253,10 @@ class UnstoppableDomainsUnitTest : public JsonRpcServiceUnitTest {
32453253
static constexpr char k0x3a2f3fAddr[] =
32463254
"0x3a2f3f7aab82d69036763cfd3f755975f84496e6";
32473255

3256+
// Base: test.bald -> 0x1111111111111111111111111111111111111111
3257+
static constexpr char k0x111111Addr[] =
3258+
"0x1111111111111111111111111111111111111111";
3259+
32483260
void SetEthResponse(const std::string& domain, const std::string& response) {
32493261
eth_mainnet_getmany_call_handler_->Reset();
32503262
eth_mainnet_getmany_call_handler_->AddItem(domain, "crypto.ETH.address",
@@ -3272,6 +3284,18 @@ class UnstoppableDomainsUnitTest : public JsonRpcServiceUnitTest {
32723284
polygon_getmany_call_handler_->Reset();
32733285
polygon_getmany_call_handler_->SetRawResponse("timeout");
32743286
}
3287+
void SetBaseResponse(const std::string& domain, const std::string& response) {
3288+
base_getmany_call_handler_->Reset();
3289+
base_getmany_call_handler_->AddItem(domain, "crypto.ETH.address", response);
3290+
}
3291+
void SetBaseRawResponse(const std::string& response) {
3292+
base_getmany_call_handler_->Reset();
3293+
base_getmany_call_handler_->SetRawResponse(response);
3294+
}
3295+
void SetBaseTimeoutResponse() {
3296+
base_getmany_call_handler_->Reset();
3297+
base_getmany_call_handler_->SetRawResponse("timeout");
3298+
}
32753299

32763300
std::string DnsIpfsResponse() const {
32773301
return MakeJsonRpcStringArrayResponse(
@@ -3299,9 +3323,11 @@ class UnstoppableDomainsUnitTest : public JsonRpcServiceUnitTest {
32993323
protected:
33003324
std::unique_ptr<JsonRpcEndpointHandler> eth_mainnet_endpoint_handler_;
33013325
std::unique_ptr<JsonRpcEndpointHandler> polygon_endpoint_handler_;
3326+
std::unique_ptr<JsonRpcEndpointHandler> base_endpoint_handler_;
33023327

33033328
std::unique_ptr<UDGetManyCallHandler> eth_mainnet_getmany_call_handler_;
33043329
std::unique_ptr<UDGetManyCallHandler> polygon_getmany_call_handler_;
3330+
std::unique_ptr<UDGetManyCallHandler> base_getmany_call_handler_;
33053331

33063332
void HandleRequest(const network::ResourceRequest& request) {
33073333
url_loader_factory_.ClearResponses();
@@ -3320,6 +3346,13 @@ class UnstoppableDomainsUnitTest : public JsonRpcServiceUnitTest {
33203346
} else {
33213347
url_loader_factory_.AddResponse(request.url.spec(), *response);
33223348
}
3349+
} else if ((response = base_endpoint_handler_->HandleRequest(request))) {
3350+
if (response == "timeout") {
3351+
url_loader_factory_.AddResponse(request.url.spec(), "",
3352+
net::HTTP_REQUEST_TIMEOUT);
3353+
} else {
3354+
url_loader_factory_.AddResponse(request.url.spec(), *response);
3355+
}
33233356
} else {
33243357
url_loader_factory_.AddResponse(request.url.spec(), "",
33253358
net::HTTP_INTERNAL_SERVER_ERROR);
@@ -3389,6 +3422,25 @@ TEST_F(UnstoppableDomainsUnitTest, GetWalletAddr_PolygonResult) {
33893422
task_environment_.RunUntilIdle();
33903423
}
33913424

3425+
TEST_F(UnstoppableDomainsUnitTest, GetWalletAddr_BaseResult) {
3426+
base::MockCallback<GetWalletAddrCallback> callback;
3427+
EXPECT_CALL(callback, Run(k0x111111Addr, mojom::ProviderError::kSuccess, ""));
3428+
SetEthResponse("javajobs.crypto", "");
3429+
SetPolygonResponse("javajobs.crypto", "");
3430+
SetBaseResponse("javajobs.crypto", k0x111111Addr);
3431+
json_rpc_service_->UnstoppableDomainsGetWalletAddr(
3432+
"javajobs.crypto", MakeToken(), callback.Get());
3433+
WaitAndVerify(&callback);
3434+
3435+
EXPECT_CALL(callback, Run(k0x111111Addr, mojom::ProviderError::kSuccess, ""));
3436+
SetEthResponse("javajobs.crypto", k0x8aaD44Addr);
3437+
SetPolygonResponse("javajobs.crypto", "");
3438+
SetBaseResponse("javajobs.crypto", k0x111111Addr);
3439+
json_rpc_service_->UnstoppableDomainsGetWalletAddr(
3440+
"javajobs.crypto", MakeToken(), callback.Get());
3441+
WaitAndVerify(&callback);
3442+
}
3443+
33923444
TEST_F(UnstoppableDomainsUnitTest, GetWalletAddr_FallbackToEthMainnet) {
33933445
base::MockCallback<GetWalletAddrCallback> callback;
33943446
EXPECT_CALL(callback, Run(k0x8aaD44Addr, mojom::ProviderError::kSuccess, ""));
@@ -3571,6 +3623,36 @@ TEST_F(UnstoppableDomainsUnitTest, ResolveDns_PolygonResult) {
35713623
WaitAndVerify(&callback);
35723624
}
35733625

3626+
TEST_F(UnstoppableDomainsUnitTest, ResolveDns_BaseResult) {
3627+
base::MockCallback<ResolveDnsCallback> callback;
3628+
EXPECT_CALL(callback, Run(std::optional<GURL>("https://brave.com"),
3629+
mojom::ProviderError::kSuccess, ""));
3630+
SetEthTimeoutResponse();
3631+
SetPolygonRawResponse(DnsEmptyResponse());
3632+
SetBaseRawResponse(DnsBraveResponse());
3633+
json_rpc_service_->UnstoppableDomainsResolveDns("brave.crypto",
3634+
callback.Get());
3635+
WaitAndVerify(&callback);
3636+
3637+
EXPECT_CALL(callback, Run(std::optional<GURL>("https://brave.com"),
3638+
mojom::ProviderError::kSuccess, ""));
3639+
SetEthRawResponse(DnsIpfsResponse());
3640+
SetPolygonRawResponse(DnsEmptyResponse());
3641+
SetBaseRawResponse(DnsBraveResponse());
3642+
json_rpc_service_->UnstoppableDomainsResolveDns("brave.crypto",
3643+
callback.Get());
3644+
WaitAndVerify(&callback);
3645+
3646+
EXPECT_CALL(callback, Run(std::optional<GURL>("https://brave.com"),
3647+
mojom::ProviderError::kSuccess, ""));
3648+
SetEthRawResponse(DnsEmptyResponse());
3649+
SetPolygonRawResponse(DnsEmptyResponse());
3650+
SetBaseRawResponse(DnsBraveResponse());
3651+
json_rpc_service_->UnstoppableDomainsResolveDns("brave.crypto",
3652+
callback.Get());
3653+
WaitAndVerify(&callback);
3654+
}
3655+
35743656
TEST_F(UnstoppableDomainsUnitTest, ResolveDns_FallbackToEthMainnet) {
35753657
base::MockCallback<ResolveDnsCallback> callback;
35763658
EXPECT_CALL(

components/brave_wallet/browser/network_manager.cc

+2
Original file line numberDiff line numberDiff line change
@@ -957,6 +957,8 @@ GURL NetworkManager::GetUnstoppableDomainsRpcUrl(std::string_view chain_id) {
957957
return GetEthMainnet()->rpc_endpoints.front();
958958
} else if (chain_id == mojom::kPolygonMainnetChainId) {
959959
return GetPolygonMainnet()->rpc_endpoints.front();
960+
} else if (chain_id == mojom::kBaseMainnetChainId) {
961+
return GetBaseMainnet()->rpc_endpoints.front();
960962
}
961963

962964
NOTREACHED();

components/brave_wallet/browser/unstoppable_domains_multichain_calls.cc

+11-1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ MultichainCall<ResultType>::GetEffectiveResponse() {
5454
return nullptr;
5555
}
5656

57+
auto base_result = responses_.find(mojom::kBaseMainnetChainId);
58+
if (base_result == responses_.end()) {
59+
return nullptr;
60+
}
61+
5762
auto eth_mainnet_result = responses_.find(mojom::kMainnetChainId);
5863
if (eth_mainnet_result == responses_.end()) {
5964
return nullptr;
@@ -63,6 +68,10 @@ MultichainCall<ResultType>::GetEffectiveResponse() {
6368
return &polygon_result->second;
6469
}
6570

71+
if (base_result->second.result || base_result->second.error) {
72+
return &base_result->second;
73+
}
74+
6675
return &eth_mainnet_result->second;
6776
}
6877

@@ -86,7 +95,8 @@ bool MultichainCall<ResultType>::MaybeResolveCallbacks() {
8695
template <class KeyType, class ResultType>
8796
std::vector<std::string> MultichainCalls<KeyType, ResultType>::GetChains()
8897
const {
89-
return {mojom::kPolygonMainnetChainId, mojom::kMainnetChainId};
98+
return {mojom::kPolygonMainnetChainId, mojom::kBaseMainnetChainId,
99+
mojom::kMainnetChainId};
90100
}
91101

92102
template <class KeyType, class ResultType>

0 commit comments

Comments
 (0)