Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use Brave endpoints for SNS and ENS #16101

Merged
merged 1 commit into from
Dec 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
43 changes: 19 additions & 24 deletions components/brave_wallet/browser/brave_wallet_utils.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1234,7 +1234,7 @@ bool GetShowWalletTestNetworks(PrefService* prefs) {
}

mojom::CoinType GetSelectedCoin(PrefService* prefs) {
return static_cast<brave_wallet::mojom::CoinType>(
return static_cast<mojom::CoinType>(
prefs->GetInteger(kBraveWalletSelectedCoin));
}

Expand All @@ -1247,11 +1247,11 @@ std::string GetDefaultBaseCryptocurrency(PrefService* prefs) {
}

GURL GetUnstoppableDomainsRpcUrl(const std::string& chain_id) {
if (base::CompareCaseInsensitiveASCII(
chain_id, brave_wallet::mojom::kMainnetChainId) == 0 ||
base::CompareCaseInsensitiveASCII(
chain_id, brave_wallet::mojom::kPolygonMainnetChainId) == 0) {
return AddInfuraProjectId(GURL(GetInfuraURLForKnownChainId(chain_id)));
if (base::CompareCaseInsensitiveASCII(chain_id, mojom::kMainnetChainId) ==
0 ||
base::CompareCaseInsensitiveASCII(chain_id,
mojom::kPolygonMainnetChainId) == 0) {
return AddInfuraProjectId(GetInfuraURLForKnownChainId(chain_id));
}

NOTREACHED();
Expand All @@ -1266,12 +1266,21 @@ std::string GetUnstoppableDomainsProxyReaderContractAddress(
return "";
}

GURL GetEnsRpcUrl() {
return AddInfuraProjectId(
GetInfuraURLForKnownChainId(mojom::kMainnetChainId));
}

std::string GetEnsRegistryContractAddress(const std::string& chain_id) {
std::string chain_id_lower = base::ToLowerASCII(chain_id);
DCHECK_EQ(chain_id_lower, brave_wallet::mojom::kMainnetChainId);
DCHECK_EQ(chain_id_lower, mojom::kMainnetChainId);
return kEnsRegistryContractAddress;
}

GURL GetSnsRpcUrl() {
return GetSolMainnet()->rpc_endpoints.front();
}

void AddCustomNetwork(PrefService* prefs, const mojom::NetworkInfo& chain) {
DCHECK(prefs);
// FIL and SOL allow custom chains only over known ones.
Expand All @@ -1281,15 +1290,8 @@ void AddCustomNetwork(PrefService* prefs, const mojom::NetworkInfo& chain) {
{ // Update needs to be done before GetNetworkId below.
DictionaryPrefUpdate update(prefs, kBraveWalletCustomNetworks);
base::Value::Dict& dict = update.Get()->GetDict();
// TODO(cdesouza): Once cr106 is merged, this FindList should be replaced
// with EnsureList.
base::Value::List* list = dict.FindList(GetPrefKeyForCoinType(chain.coin));
if (!list) {
list = dict.Set(GetPrefKeyForCoinType(chain.coin), base::Value::List())
->GetIfList();
}
CHECK(list);
list->Append(NetworkInfoToValue(chain));
dict.EnsureList(GetPrefKeyForCoinType(chain.coin))
->Append(NetworkInfoToValue(chain));
}

if (chain.coin != mojom::CoinType::ETH)
Expand Down Expand Up @@ -1366,14 +1368,7 @@ void AddHiddenNetwork(PrefService* prefs,
const std::string& chain_id) {
DictionaryPrefUpdate update(prefs, kBraveWalletHiddenNetworks);
base::Value::Dict& dict = update.Get()->GetDict();
// TODO(cdesouza): Once cr106 is merged, this FindList should be replaced with
// EnsureList.
base::Value::List* list = dict.FindList(GetPrefKeyForCoinType(coin));
if (!list) {
list =
dict.Set(GetPrefKeyForCoinType(coin), base::Value::List())->GetIfList();
}
CHECK(list);
base::Value::List* list = dict.EnsureList(GetPrefKeyForCoinType(coin));
std::string chain_id_lower = base::ToLowerASCII(chain_id);
if (!base::Contains(*list, base::Value(chain_id_lower))) {
list->Append(chain_id_lower);
Expand Down
2 changes: 2 additions & 0 deletions components/brave_wallet/browser/brave_wallet_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,9 @@ std::string GetKnownEthNetworkId(const std::string& chain_id);
GURL GetUnstoppableDomainsRpcUrl(const std::string& chain_id);
std::string GetUnstoppableDomainsProxyReaderContractAddress(
const std::string& chain_id);
GURL GetEnsRpcUrl();
std::string GetEnsRegistryContractAddress(const std::string& chain_id);
GURL GetSnsRpcUrl();

// Append chain value to kBraveWalletCustomNetworks dictionary pref.
void AddCustomNetwork(PrefService* prefs, const mojom::NetworkInfo& chain);
Expand Down
16 changes: 16 additions & 0 deletions components/brave_wallet/browser/brave_wallet_utils_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1347,4 +1347,20 @@ TEST(BraveWalletUtilsUnitTest, GetActiveEndpointUrl) {
EXPECT_EQ(GURL(), GetActiveEndpointUrl(chain));
}

TEST(BraveWalletUtilsUnitTest, GetUnstoppableDomainsRpcUrl) {
EXPECT_EQ(AddInfuraProjectId(GURL("https://mainnet-infura.brave.com")),
GetUnstoppableDomainsRpcUrl(mojom::kMainnetChainId));
EXPECT_EQ(AddInfuraProjectId(GURL("https://mainnet-polygon.brave.com")),
GetUnstoppableDomainsRpcUrl(mojom::kPolygonMainnetChainId));
}

TEST(BraveWalletUtilsUnitTest, GetEnsRpcUrl) {
EXPECT_EQ(AddInfuraProjectId(GURL("https://mainnet-infura.brave.com")),
GetEnsRpcUrl());
}

TEST(BraveWalletUtilsUnitTest, GetSnsRpcUrl) {
EXPECT_EQ(GURL("https://mainnet-beta-solana.brave.com/rpc"), GetSnsRpcUrl());
}

} // namespace brave_wallet
69 changes: 7 additions & 62 deletions components/brave_wallet/browser/json_rpc_service.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1122,21 +1122,12 @@ void JsonRpcService::EnsRegistryGetResolver(const std::string& domain,

std::string data = ens::Resolver(domain);

GURL network_url = GetNetworkURL(prefs_, brave_wallet::mojom::kMainnetChainId,
mojom::CoinType::ETH);
if (!network_url.is_valid()) {
std::move(callback).Run(
"", mojom::ProviderError::kInvalidParams,
l10n_util::GetStringUTF8(IDS_WALLET_INVALID_PARAMETERS));
return;
}

auto internal_callback =
base::BindOnce(&JsonRpcService::OnEnsRegistryGetResolver,
weak_ptr_factory_.GetWeakPtr(), std::move(callback));
RequestInternal(eth::eth_call("", contract_address, "", "", "", data,
kEthereumBlockTagLatest),
true, network_url, std::move(internal_callback));
true, GetEnsRpcUrl(), std::move(internal_callback));
}

void JsonRpcService::OnEnsRegistryGetResolver(
Expand Down Expand Up @@ -1180,15 +1171,6 @@ void JsonRpcService::EnsGetContentHash(const std::string& domain,
allow_offchain = false;
}

GURL network_url = GetNetworkURL(
prefs_, brave_wallet::mojom::kMainnetChainId, mojom::CoinType::ETH);
if (!network_url.is_valid()) {
std::move(callback).Run(
{}, false, mojom::ProviderError::kInvalidParams,
l10n_util::GetStringUTF8(IDS_WALLET_INVALID_PARAMETERS));
return;
}

// JsonRpcService owns EnsResolverTask instance, so Unretained is safe here.
auto done_callback = base::BindOnce(
&JsonRpcService::OnEnsGetContentHashTaskDone, base::Unretained(this));
Expand All @@ -1197,7 +1179,7 @@ void JsonRpcService::EnsGetContentHash(const std::string& domain,
std::make_unique<EnsResolverTask>(
std::move(done_callback), api_request_helper_.get(),
api_request_helper_ens_offchain_.get(), MakeContentHashCall(domain),
domain, network_url, allow_offchain),
domain, GetEnsRpcUrl(), allow_offchain),
std::move(callback));
return;
}
Expand Down Expand Up @@ -1227,21 +1209,12 @@ void JsonRpcService::ContinueEnsGetContentHash(
return;
}

GURL network_url = GetNetworkURL(prefs_, brave_wallet::mojom::kMainnetChainId,
mojom::CoinType::ETH);
if (!network_url.is_valid()) {
std::move(callback).Run(
{}, false, mojom::ProviderError::kInvalidParams,
l10n_util::GetStringUTF8(IDS_WALLET_INVALID_PARAMETERS));
return;
}

auto internal_callback =
base::BindOnce(&JsonRpcService::OnEnsGetContentHash,
weak_ptr_factory_.GetWeakPtr(), std::move(callback));
RequestInternal(eth::eth_call("", resolver_address, "", "", "", data,
kEthereumBlockTagLatest),
true, network_url, std::move(internal_callback));
true, GetEnsRpcUrl(), std::move(internal_callback));
}

void JsonRpcService::OnEnsGetContentHash(EnsGetContentHashCallback callback,
Expand Down Expand Up @@ -1299,15 +1272,6 @@ void JsonRpcService::EnsGetEthAddr(const std::string& domain,
allow_offchain = false;
}

GURL network_url = GetNetworkURL(
prefs_, brave_wallet::mojom::kMainnetChainId, mojom::CoinType::ETH);
if (!network_url.is_valid()) {
std::move(callback).Run(
"", false, mojom::ProviderError::kInvalidParams,
l10n_util::GetStringUTF8(IDS_WALLET_INVALID_PARAMETERS));
return;
}

// JsonRpcService owns EnsResolverTask instance, so Unretained is safe here.
auto done_callback = base::BindOnce(
&JsonRpcService::OnEnsGetEthAddrTaskDone, base::Unretained(this));
Expand All @@ -1316,7 +1280,7 @@ void JsonRpcService::EnsGetEthAddr(const std::string& domain,
std::make_unique<EnsResolverTask>(
std::move(done_callback), api_request_helper_.get(),
api_request_helper_ens_offchain_.get(), MakeAddrCall(domain),
domain, network_url, allow_offchain),
domain, GetEnsRpcUrl(), allow_offchain),
std::move(callback));
return;
}
Expand Down Expand Up @@ -1386,23 +1350,14 @@ void JsonRpcService::SnsGetSolAddr(const std::string& domain,
return;
}

GURL network_url = GetNetworkURL(prefs_, brave_wallet::mojom::kSolanaMainnet,
mojom::CoinType::SOL);
if (!network_url.is_valid()) {
std::move(callback).Run(
"", mojom::SolanaProviderError::kInvalidParams,
l10n_util::GetStringUTF8(IDS_WALLET_INVALID_PARAMETERS));
return;
}

// JsonRpcService owns EnsResolverTask instance, so Unretained is safe here.
auto done_callback = base::BindOnce(&JsonRpcService::OnSnsGetSolAddrTaskDone,
base::Unretained(this));

sns_get_sol_addr_tasks_.AddTask(
std::make_unique<SnsResolverTask>(std::move(done_callback),
api_request_helper_.get(), domain,
network_url, true),
GetSnsRpcUrl(), true),
std::move(callback));
}

Expand Down Expand Up @@ -1455,23 +1410,14 @@ void JsonRpcService::SnsResolveHost(const std::string& domain,
return;
}

GURL network_url = GetNetworkURL(prefs_, brave_wallet::mojom::kSolanaMainnet,
mojom::CoinType::SOL);
if (!network_url.is_valid()) {
std::move(callback).Run(
GURL(), mojom::SolanaProviderError::kInvalidParams,
l10n_util::GetStringUTF8(IDS_WALLET_INVALID_PARAMETERS));
return;
}

// JsonRpcService owns EnsResolverTask instance, so Unretained is safe here.
auto done_callback = base::BindOnce(&JsonRpcService::OnSnsResolveHostTaskDone,
base::Unretained(this));

sns_resolve_host_tasks_.AddTask(
std::make_unique<SnsResolverTask>(std::move(done_callback),
api_request_helper_.get(), domain,
network_url, false),
GetSnsRpcUrl(), false),
std::move(callback));
}

Expand Down Expand Up @@ -1563,8 +1509,7 @@ void JsonRpcService::ContinueEnsGetEthAddr(const std::string& domain,
weak_ptr_factory_.GetWeakPtr(), std::move(callback));
RequestInternal(eth::eth_call("", resolver_address, "", "", "", data,
kEthereumBlockTagLatest),
true, network_urls_[mojom::CoinType::ETH],
std::move(internal_callback));
true, GetEnsRpcUrl(), std::move(internal_callback));
}

void JsonRpcService::OnEnsGetEthAddr(EnsGetEthAddrCallback callback,
Expand Down