Skip to content

Commit

Permalink
feat(wallet): use optimised balance scanner + expanded tokens list (#…
Browse files Browse the repository at this point in the history
…27576)

* feat(wallet): use optimised balance scanner + expanded tokens list

* fix android browsertest

* review(supermassive): avoid passing around entire tokens list

* fix eslint warnings

* s/coingecko-top5000.json/coingecko.json/g

* Use base::span

* Adjusted batching code

---------

Co-authored-by: Anton Paymyshev <[email protected]>
  • Loading branch information
onyb and supermassive authored Feb 15, 2025
1 parent 834ecb6 commit 0e3781e
Show file tree
Hide file tree
Showing 17 changed files with 669 additions and 589 deletions.
4 changes: 2 additions & 2 deletions browser/brave_wallet/asset_discovery_manager_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ TEST_F(AssetDiscoveryManagerUnitTest, GetFungibleSupportedChains) {
TEST_F(AssetDiscoveryManagerUnitTest, GetNonFungibleSupportedChains) {
// Gnosis chain ID should not be included if it's not a custom network
auto chains = asset_discovery_manager_->GetNonFungibleSupportedChains();
EXPECT_EQ(chains.size(), 7UL);
EXPECT_EQ(chains.size(), 8UL);
EXPECT_TRUE(base::Contains(
chains,
mojom::ChainId::New(mojom::CoinType::ETH, mojom::kMainnetChainId)));
Expand All @@ -222,7 +222,7 @@ TEST_F(AssetDiscoveryManagerUnitTest, GetNonFungibleSupportedChains) {
network_manager_->AddCustomNetwork(gnosis_network);

chains = asset_discovery_manager_->GetNonFungibleSupportedChains();
EXPECT_EQ(chains.size(), 8UL);
EXPECT_EQ(chains.size(), 9UL);

// Verify one of the chain IDs is mojom::kGnosisChainId
EXPECT_TRUE(base::Contains(
Expand Down
174 changes: 86 additions & 88 deletions browser/brave_wallet/asset_discovery_task_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -556,17 +556,17 @@ TEST_F(AssetDiscoveryTaskUnitTest, DiscoverERC20sFromRegistry) {
auto* blockchain_registry = BlockchainRegistry::GetInstance();
TokenListMap token_list_map;
std::string token_list_json = R"({
"0x6B175474E89094C44Da98b954EedeAC495271d0F": {
"name": "Dai Stablecoin",
"logo": "dai.svg",
"erc20": true,
"symbol": "DAI",
"chainId": "0x1",
"decimals": 18
}
})";
ASSERT_TRUE(
ParseTokenList(token_list_json, &token_list_map, mojom::CoinType::ETH));
"0x1": {
"0x6B175474E89094C44Da98b954EedeAC495271d0F": {
"name": "Dai Stablecoin",
"logo": "dai.svg",
"erc20": true,
"symbol": "DAI",
"decimals": 18
}
}
})";
ASSERT_TRUE(ParseTokenList(token_list_json, &token_list_map));
blockchain_registry->UpdateTokenList(std::move(token_list_map));

// One account, no balances, yields empty token_contract_addresses
Expand Down Expand Up @@ -649,17 +649,17 @@ TEST_F(AssetDiscoveryTaskUnitTest, DiscoverERC20sFromRegistry) {

// Reset token list with a fresh token not in user assets
token_list_json = R"({
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": {
"name": "Wrapped Eth",
"logo": "weth.svg",
"erc20": true,
"symbol": "WETH",
"decimals": 18,
"chainId": "0x1"
"0x1": {
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2": {
"name": "Wrapped Eth",
"logo": "weth.svg",
"erc20": true,
"symbol": "WETH",
"decimals": 18
}
}
})";
ASSERT_TRUE(
ParseTokenList(token_list_json, &token_list_map, mojom::CoinType::ETH));
ASSERT_TRUE(ParseTokenList(token_list_json, &token_list_map));
blockchain_registry->UpdateTokenList(std::move(token_list_map));

// Two accounts, each with the same balance, yields just one discovered
Expand All @@ -684,25 +684,26 @@ TEST_F(AssetDiscoveryTaskUnitTest, DiscoverERC20sFromRegistry) {
chain_ids.push_back(mojom::kMainnetChainId);
chain_ids.push_back(mojom::kPolygonMainnetChainId);
token_list_json = R"({
"0x1": {
"0x1111111111111111111111111111111111111111": {
"name": "1111",
"logo": "111.svg",
"erc20": true,
"symbol": "111",
"decimals": 18,
"chainId": "0x1"
},
"decimals": 18
}
},
"0x89": {
"0x2222222222222222222222222222222222222222": {
"name": "22222222222",
"logo": "2222.svg",
"erc20": true,
"symbol": "2222",
"decimals": 18,
"chainId": "0x89"
"decimals": 18
}
})";
ASSERT_TRUE(
ParseTokenList(token_list_json, &token_list_map, mojom::CoinType::ETH));
}
})";
ASSERT_TRUE(ParseTokenList(token_list_json, &token_list_map));
blockchain_registry->UpdateTokenList(std::move(token_list_map));
requests = {
{GetNetwork(mojom::kMainnetChainId, mojom::CoinType::ETH),
Expand All @@ -725,25 +726,26 @@ TEST_F(AssetDiscoveryTaskUnitTest, DiscoverERC20sFromRegistry) {
// Multiple accounts with different balances, yields multiple discovered
// contract addresses Reset token list with a fresh token not in user assets
token_list_json = R"({
"0x1": {
"0x3333333333333333333333333333333333333333": {
"name": "3333",
"logo": "333.svg",
"erc20": true,
"symbol": "333",
"decimals": 18,
"chainId": "0x1"
},
"decimals": 18
}
},
"0x89": {
"0x4444444444444444444444444444444444444444": {
"name": "44444444444",
"logo": "4444.svg",
"erc20": true,
"symbol": "4444",
"decimals": 18,
"chainId": "0x89"
"decimals": 18
}
})";
ASSERT_TRUE(
ParseTokenList(token_list_json, &token_list_map, mojom::CoinType::ETH));
}
})";
ASSERT_TRUE(ParseTokenList(token_list_json, &token_list_map));
blockchain_registry->UpdateTokenList(std::move(token_list_map));
requests = {
{GetNetwork(mojom::kMainnetChainId, mojom::CoinType::ETH),
Expand Down Expand Up @@ -795,27 +797,26 @@ TEST_F(AssetDiscoveryTaskUnitTest, DiscoverSPLTokensFromRegistry) {
auto* blockchain_registry = BlockchainRegistry::GetInstance();
TokenListMap token_list_map;
std::string token_list_json = R"({
"88j24JNwWLmJCjn2tZQ5jJzyaFtnusS2qsKup9NeDnd8": {
"name": "Wrapped SOL",
"logo": "So11111111111111111111111111111111111111112.png",
"erc20": false,
"symbol": "SOL",
"decimals": 9,
"chainId": "0x65",
"coingeckoId": "solana"
},
"EybFzCH4nBYEr7FD4wLWBvNZbEGgjy4kh584bGQntr1b": {
"name": "USD Coin",
"logo": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v.png",
"erc20": false,
"symbol": "USDC",
"decimals": 6,
"chainId": "0x65",
"coingeckoId": "usd-coin"
"0x65": {
"88j24JNwWLmJCjn2tZQ5jJzyaFtnusS2qsKup9NeDnd8": {
"name": "Wrapped SOL",
"logo": "So11111111111111111111111111111111111111112.png",
"erc20": false,
"symbol": "SOL",
"decimals": 9,
"coingeckoId": "solana"
},
"EybFzCH4nBYEr7FD4wLWBvNZbEGgjy4kh584bGQntr1b": {
"name": "USD Coin",
"logo": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v.png",
"erc20": false,
"symbol": "USDC",
"decimals": 6,
"coingeckoId": "usd-coin"
}
}
})";
ASSERT_TRUE(
ParseTokenList(token_list_json, &token_list_map, mojom::CoinType::SOL));
ASSERT_TRUE(ParseTokenList(token_list_json, &token_list_map));
blockchain_registry->UpdateTokenList(std::move(token_list_map));

// Empy account address
Expand Down Expand Up @@ -1030,41 +1031,38 @@ TEST_F(AssetDiscoveryTaskUnitTest, DiscoverSPLTokensFromRegistry) {
// 7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs, and
// 4zLh7YPr8NfrNP4bzTXaYaE72QQc3A8mptbtqUspRz5g to token list
token_list_json = R"({
"BEARs6toGY6fRGsmz2Se8NDuR2NVPRmJuLPpeF8YxCq2": {
"name": "Tesla Inc.",
"logo": "2inRoG4DuMRRzZxAt913CCdNZCu2eGsDD9kZTrsj2DAZ.png",
"erc20": false,
"symbol": "TSLA",
"decimals": 8,
"chainId": "0x65"
},
"ADJqxHJRfFBpyxVQ2YS8nBhfW6dumdDYGU21B4AmYLZJ": {
"name": "Apple Inc.",
"logo": "8bpRdBGPt354VfABL5xugP3pmYZ2tQjzRcqjg2kmwfbF.png",
"erc20": false,
"symbol": "AAPL",
"decimals": 8,
"chainId": "0x65"
},
"7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs": {
"name": "Microsoft Corporation",
"logo": "3vhcrQfEn8ashuBfE82F3MtEDFcBCEFfFw1ZgM3xj1s8.png",
"erc20": false,
"symbol": "MSFT",
"decimals": 8,
"chainId": "0x65"
},
"4zLh7YPr8NfrNP4bzTXaYaE72QQc3A8mptbtqUspRz5g": {
"name": "MicroStrategy Incorporated.",
"logo": "ASwYCbLedk85mRdPnkzrUXbbYbwe26m71af9rzrhC2Qz.png",
"erc20": false,
"symbol": "MSTR",
"decimals": 8,
"chainId": "0x65"
"0x65": {
"BEARs6toGY6fRGsmz2Se8NDuR2NVPRmJuLPpeF8YxCq2": {
"name": "Tesla Inc.",
"logo": "2inRoG4DuMRRzZxAt913CCdNZCu2eGsDD9kZTrsj2DAZ.png",
"erc20": false,
"symbol": "TSLA",
"decimals": 8
},
"ADJqxHJRfFBpyxVQ2YS8nBhfW6dumdDYGU21B4AmYLZJ": {
"name": "Apple Inc.",
"logo": "8bpRdBGPt354VfABL5xugP3pmYZ2tQjzRcqjg2kmwfbF.png",
"erc20": false,
"symbol": "AAPL",
"decimals": 8
},
"7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs": {
"name": "Microsoft Corporation",
"logo": "3vhcrQfEn8ashuBfE82F3MtEDFcBCEFfFw1ZgM3xj1s8.png",
"erc20": false,
"symbol": "MSFT",
"decimals": 8
},
"4zLh7YPr8NfrNP4bzTXaYaE72QQc3A8mptbtqUspRz5g": {
"name": "MicroStrategy Incorporated.",
"logo": "ASwYCbLedk85mRdPnkzrUXbbYbwe26m71af9rzrhC2Qz.png",
"erc20": false,
"symbol": "MSTR",
"decimals": 8
}
}
})";
ASSERT_TRUE(
ParseTokenList(token_list_json, &token_list_map, mojom::CoinType::SOL));
ASSERT_TRUE(ParseTokenList(token_list_json, &token_list_map));
blockchain_registry->UpdateTokenList(std::move(token_list_map));
TestDiscoverSolAssets({"4fzcQKyGFuk55uJaBZtvTHh42RBxbrZMuXzsGQvBJbwF",
"8RFACUfst117ARQLezvK4cKVR8ZHvW2xUfdUoqWnTuEB"},
Expand Down
Loading

0 comments on commit 0e3781e

Please sign in to comment.