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

feat(wallet): add Base to preloaded EVM networks #27013

Merged
merged 3 commits into from
Dec 27, 2024
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions components/brave_wallet/browser/blockchain_list_parser.cc
Original file line number Diff line number Diff line change
Expand Up @@ -675,9 +675,6 @@ std::optional<DappListMap> ParseDappLists(const std::string& json) {
AddDappListToMap(
GetTokenListKey(mojom::CoinType::ETH, mojom::kOptimismMainnetChainId),
dapp_lists_from_component->optimism, &dapp_lists);
AddDappListToMap(
GetTokenListKey(mojom::CoinType::ETH, mojom::kAuroraMainnetChainId),
dapp_lists_from_component->aurora, &dapp_lists);
AddDappListToMap(
GetTokenListKey(mojom::CoinType::ETH, mojom::kAvalancheMainnetChainId),
dapp_lists_from_component->avalanche, &dapp_lists);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -440,9 +440,9 @@ TEST(BlockchainListParseUnitTest, ParseDappLists) {
std::optional<DappListMap> dapp_list_map = ParseDappLists(dapp_list);
ASSERT_TRUE(dapp_list_map);

// There should be eight lists, for Ethereum, Solana, Polygon, Binance Smart
// Chain, Optimism, Aurora, Avalanche, and Fantom
ASSERT_EQ(8u, dapp_list_map->size());
// There should be seven lists, for Ethereum, Solana, Polygon, Binance Smart
// Chain, Optimism, Avalanche, and Fantom
ASSERT_EQ(7u, dapp_list_map->size());

// There should be one dapp in the Ethereum list
auto it = dapp_list_map->find(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -601,14 +601,14 @@ TEST_F(BraveWalletP3AUnitTest, EthTransactionSentObservation) {
std::string tx_meta_id;
EXPECT_TRUE(AddUnapprovedEvmTransaction(
mojom::NewEvmTransactionParams::New(
mojom::kAuroraMainnetChainId, eth_from(),
mojom::kBnbSmartChainMainnetChainId, eth_from(),
"0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", "0x016345785d8a0000",
"0x0974", std::vector<uint8_t>()),
&tx_meta_id));

// Approve the ETH transaction
EXPECT_TRUE(ApproveTransaction(mojom::CoinType::ETH,
mojom::kAuroraMainnetChainId, tx_meta_id));
EXPECT_TRUE(ApproveTransaction(
mojom::CoinType::ETH, mojom::kBnbSmartChainMainnetChainId, tx_meta_id));

// Verify EthTransactionSent
histogram_tester_->ExpectUniqueSample(kEthTransactionSentHistogramName, 1, 1);
Expand Down
7 changes: 7 additions & 0 deletions components/brave_wallet/browser/brave_wallet_prefs.cc
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,9 @@ void RegisterProfilePrefsForMigration(

// Added 08/2024
registry->RegisterBooleanPref(kBraveWalletIsSPLTokenProgramMigrated, false);

// Added 11/2024
registry->RegisterBooleanPref(kBraveWalletAuroraMainnetMigrated, false);
}

void ClearJsonRpcServiceProfilePrefs(PrefService* prefs) {
Expand Down Expand Up @@ -359,6 +362,10 @@ void MigrateObsoleteProfilePrefs(PrefService* prefs) {

// Added 07/2024 to set active ETH chain to Sepolia if Goerli is selected.
BraveWalletService::MigrateGoerliNetwork(prefs);

// Added 11/2024 to set active ETH chain to Aurora mainnet if Aurora is
// selected.
BraveWalletService::MigrateAuroraMainnetAsCustomNetwork(prefs);
}

} // namespace brave_wallet
79 changes: 55 additions & 24 deletions components/brave_wallet/browser/brave_wallet_service.cc
Original file line number Diff line number Diff line change
Expand Up @@ -791,52 +791,54 @@ bool ShouldMigrateRemovedPreloadedNetwork(PrefService* prefs,
base::ToLowerASCII(*selected_chain_id) == chain_id;
}

void BraveWalletService::MigrateFantomMainnetAsCustomNetwork(
PrefService* prefs) {
if (prefs->GetBoolean(kBraveWalletCustomNetworksFantomMainnetMigrated)) {
// Migrate preloaded network to custom network.
void BraveWalletService::MigrateAsCustomNetwork(
PrefService* prefs,
const mojom::NetworkInfo& network,
bool is_eip1559,
std::string_view pref_key) {
if (prefs->GetBoolean(pref_key)) {
return;
}

if (ShouldMigrateRemovedPreloadedNetwork(prefs, mojom::CoinType::ETH,
mojom::kFantomMainnetChainId)) {
if (ShouldMigrateRemovedPreloadedNetwork(prefs, network.coin,
network.chain_id)) {
NetworkManager network_manager(prefs);
mojom::NetworkInfo network(
mojom::kFantomMainnetChainId, "Fantom Opera", {"https://ftmscan.com"},
{}, 0, {GURL("https://rpc.ftm.tools")}, "FTM", "Fantom", 18,
mojom::CoinType::ETH,
GetSupportedKeyringsForNetwork(mojom::CoinType::ETH,
mojom::kFantomMainnetChainId));
network_manager.AddCustomNetwork(network);
network_manager.SetEip1559ForCustomChain(mojom::kFantomMainnetChainId,
true);
network_manager.SetEip1559ForCustomChain(network.chain_id, is_eip1559);
EnsureNativeTokenForNetwork(prefs, network);
}

prefs->SetBoolean(kBraveWalletCustomNetworksFantomMainnetMigrated, true);
prefs->SetBoolean(pref_key, true);
}

void BraveWalletService::MigrateGoerliNetwork(PrefService* prefs) {
if (prefs->GetBoolean(kBraveWalletGoerliNetworkMigrated)) {
// Migrate dead network to fallback network.
void BraveWalletService::MigrateDeadNetwork(
PrefService* prefs,
const std::string& chain_id,
const std::string& fallback_chain_id,
std::string_view pref_key) {
if (prefs->GetBoolean(pref_key)) {
return;
}

NetworkManager network_manager(prefs);

// Migrate current chain id to Sepolia for default origin.
// Migrate current chain id for default origin
if (network_manager.GetCurrentChainId(mojom::CoinType::ETH, std::nullopt) ==
"0x5") {
chain_id) {
network_manager.SetCurrentChainId(mojom::CoinType::ETH, std::nullopt,
mojom::kSepoliaChainId);
fallback_chain_id);
}

// Migrate current chain id to Sepolia for all origins.
// Migrate current chain id for all origins
const auto& selected_networks =
prefs->GetDict(kBraveWalletSelectedNetworksPerOrigin);

const auto* coin_dict =
selected_networks.FindDict(GetPrefKeyForCoinType(mojom::CoinType::ETH));
if (!coin_dict) {
prefs->SetBoolean(kBraveWalletGoerliNetworkMigrated, true);
prefs->SetBoolean(pref_key, true);
return;
}

Expand All @@ -846,14 +848,43 @@ void BraveWalletService::MigrateGoerliNetwork(PrefService* prefs) {
continue;
}

if (base::ToLowerASCII(*chain_id_each) == "0x5") {
if (base::ToLowerASCII(*chain_id_each) == chain_id) {
network_manager.SetCurrentChainId(mojom::CoinType::ETH,
url::Origin::Create(GURL(origin.first)),
mojom::kSepoliaChainId);
fallback_chain_id);
}
}

prefs->SetBoolean(kBraveWalletGoerliNetworkMigrated, true);
prefs->SetBoolean(pref_key, true);
}

void BraveWalletService::MigrateFantomMainnetAsCustomNetwork(
PrefService* prefs) {
mojom::NetworkInfo network(
mojom::kFantomMainnetChainId, "Fantom Opera", {"https://ftmscan.com"}, {},
0, {GURL("https://rpc.ftm.tools")}, "FTM", "Fantom", 18,
mojom::CoinType::ETH,
GetSupportedKeyringsForNetwork(mojom::CoinType::ETH,
mojom::kFantomMainnetChainId));
MigrateAsCustomNetwork(prefs, network, true,
kBraveWalletCustomNetworksFantomMainnetMigrated);
}

void BraveWalletService::MigrateGoerliNetwork(PrefService* prefs) {
MigrateDeadNetwork(prefs, "0x5", mojom::kSepoliaChainId,
kBraveWalletGoerliNetworkMigrated);
}

void BraveWalletService::MigrateAuroraMainnetAsCustomNetwork(
PrefService* prefs) {
mojom::NetworkInfo network(
mojom::kAuroraMainnetChainId, "Aurora Mainnet", {"https://aurora.dev"},
{}, 0, {GURL("https://mainnet.aurora.dev")}, "ETH", "Aurora", 18,
mojom::CoinType::ETH,
GetSupportedKeyringsForNetwork(mojom::CoinType::ETH,
mojom::kAuroraMainnetChainId));
MigrateAsCustomNetwork(prefs, network, false,
kBraveWalletAuroraMainnetMigrated);
}

void BraveWalletService::MigrateAssetsPrefToList(PrefService* prefs) {
Expand Down
9 changes: 9 additions & 0 deletions components/brave_wallet/browser/brave_wallet_service.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,17 @@ class BraveWalletService : public KeyedService,
void Bind(mojo::PendingReceiver<T> receiver);

static void MigrateHiddenNetworks(PrefService* profile_prefs);
static void MigrateDeadNetwork(PrefService* prefs,
const std::string& chain_id,
const std::string& fallback_chain_id,
std::string_view pref_key);
static void MigrateAsCustomNetwork(PrefService* prefs,
const mojom::NetworkInfo& network,
bool is_eip1559,
std::string_view pref_key);
static void MigrateFantomMainnetAsCustomNetwork(PrefService* prefs);
static void MigrateGoerliNetwork(PrefService* prefs);
static void MigrateAuroraMainnetAsCustomNetwork(PrefService* prefs);
static void MigrateAssetsPrefToList(PrefService* prefs);
static void MigrateEip1559ForCustomNetworks(PrefService* prefs);
void MaybeMigrateCompressedNfts();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -541,7 +541,7 @@ TEST_F(EthTxManagerUnitTest, AddUnapprovedEvmTransaction) {
// Known non-Eip1559 chain.
{
auto params = mojom::NewEvmTransactionParams::New(
mojom::kAuroraMainnetChainId, from(),
mojom::kBnbSmartChainMainnetChainId, from(),
"0xbe862ad9abfe6f22bcb087716c7d89a26051f74c", "0x016345785d8a0000",
"0x0974", data_);
EXPECT_FALSE(*network_manager_->IsEip1559Chain(params->chain_id));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2110,7 +2110,7 @@ TEST_F(JsonRpcServiceUnitTest, GetKnownNetworks) {
UpdateCustomNetworks(prefs(), &values);

EXPECT_CALL(callback,
Run(ElementsAreArray({"0x1", "0x4e454152", "0x89", "0x38", "0xa",
Run(ElementsAreArray({"0x1", "0x2105", "0x89", "0x38", "0xa",
"0xa86a", "0x13a", "0xe9ac0d6", "0xaa36a7",
"0x4cb2f", "0x539"})));
json_rpc_service_->GetKnownNetworks(mojom::CoinType::ETH, callback.Get());
Expand Down
14 changes: 7 additions & 7 deletions components/brave_wallet/browser/network_manager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ std::optional<bool> GetEip1559ForKnownChain(std::string_view chain_id_lwr) {
{mojom::kFilecoinEthereumMainnetChainId, true},
{mojom::kFilecoinEthereumTestnetChainId, true},
{mojom::kBnbSmartChainMainnetChainId, false},
{mojom::kAuroraMainnetChainId, false},
{mojom::kBaseMainnetChainId, true},
{mojom::kNeonEVMMainnetChainId, false},
{mojom::kLocalhostChainId, false},
});
Expand All @@ -74,7 +74,7 @@ const std::string GetChainSubdomain(std::string_view chain_id) {
{mojom::kSepoliaChainId, "ethereum-sepolia"},
{mojom::kPolygonMainnetChainId, "polygon-mainnet"},
{mojom::kOptimismMainnetChainId, "optimism-mainnet"},
{mojom::kAuroraMainnetChainId, "aurora-mainnet"},
{mojom::kBaseMainnetChainId, "base-mainnet"},
{mojom::kAvalancheMainnetChainId, "avalanche-mainnet"},
{mojom::kBnbSmartChainMainnetChainId, "bsc-mainnet"},

Expand Down Expand Up @@ -196,14 +196,14 @@ const mojom::NetworkInfo* GetOptimismMainnet() {
return network_info.get();
}

const mojom::NetworkInfo* GetAuroraMainnet() {
const mojom::NetworkInfo* GetBaseMainnet() {
const auto coin = mojom::CoinType::ETH;
const auto* chain_id = mojom::kAuroraMainnetChainId;
const auto* chain_id = mojom::kBaseMainnetChainId;

static base::NoDestructor<mojom::NetworkInfo> network_info(
{chain_id,
"Aurora Mainnet",
{"https://aurorascan.dev"},
"Base",
{"https://basescan.org"},
{},
0,
{GetURLForKnownChainId(chain_id).value()},
Expand Down Expand Up @@ -315,7 +315,7 @@ const std::vector<const mojom::NetworkInfo*>& GetKnownEthNetworks() {
static base::NoDestructor<std::vector<const mojom::NetworkInfo*>> networks({
// clang-format off
GetEthMainnet(),
GetAuroraMainnet(),
GetBaseMainnet(),
GetPolygonMainnet(),
GetBscMainnet(),
GetOptimismMainnet(),
Expand Down
10 changes: 2 additions & 8 deletions components/brave_wallet/browser/network_manager_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -417,10 +417,10 @@ TEST_F(NetworkManagerUnitTest, GetNetworkURLForKnownChains) {
// GetNetworkURL for these known chains should resolve to brave subdomain.
base::flat_set<std::string> known_chains = {
brave_wallet::mojom::kMainnetChainId,
brave_wallet::mojom::kBaseMainnetChainId,
brave_wallet::mojom::kPolygonMainnetChainId,
brave_wallet::mojom::kBnbSmartChainMainnetChainId,
brave_wallet::mojom::kOptimismMainnetChainId,
brave_wallet::mojom::kAuroraMainnetChainId,
brave_wallet::mojom::kAvalancheMainnetChainId,
brave_wallet::mojom::kSepoliaChainId};

Expand Down Expand Up @@ -472,12 +472,6 @@ TEST_F(NetworkManagerUnitTest, GetZCashSubdomainForKnownChainId) {
}

TEST_F(NetworkManagerUnitTest, GetKnownChain) {
const base::flat_set<std::string> non_eip1559_networks = {
brave_wallet::mojom::kLocalhostChainId,
brave_wallet::mojom::kBnbSmartChainMainnetChainId,
brave_wallet::mojom::kAuroraMainnetChainId,
brave_wallet::mojom::kNeonEVMMainnetChainId};

auto known_chains = NetworkManager::GetAllKnownChains(mojom::CoinType::ETH);
ASSERT_FALSE(known_chains.empty());
for (const auto& chain : known_chains) {
Expand Down Expand Up @@ -654,7 +648,7 @@ TEST_F(NetworkManagerUnitTest, Eip1559Chain) {
{mojom::kFilecoinEthereumMainnetChainId, true},
{mojom::kFilecoinEthereumTestnetChainId, true},
{mojom::kBnbSmartChainMainnetChainId, false},
{mojom::kAuroraMainnetChainId, false},
{mojom::kBaseMainnetChainId, true},
{mojom::kNeonEVMMainnetChainId, false},
{mojom::kLocalhostChainId, false}};
for (auto& [chain_id, value] : known_states) {
Expand Down
3 changes: 3 additions & 0 deletions components/brave_wallet/browser/pref_names.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@ inline constexpr char kBraveWalletEip1559ForCustomNetworksMigrated[] =
// 06/2024 to mark existing compressed Solana NFTs as compressed.
inline constexpr char kBraveWalletIsCompressedNftMigrated[] =
"brave.wallet.is_compressed_nft_migrated";
// Added 11/2024 to mark Aurora mainnet as migrated.
inline constexpr char kBraveWalletAuroraMainnetMigrated[] =
"brave.wallet.aurora_mainnet_migrated";

// 08/2024 to mark fix existign SPL tokens marked as unsupported
inline constexpr char kBraveWalletIsSPLTokenProgramMigrated[] =
Expand Down
Loading