From b283cfbc6eef86443b3cfe6bf3916ec691e82936 Mon Sep 17 00:00:00 2001 From: nvonpentz <12549658+nvonpentz@users.noreply.github.com> Date: Mon, 27 Feb 2023 15:37:54 -0500 Subject: [PATCH 1/2] Fix asset discovery for cUSDT When checking if a BalanceScanner result is > 0 for asset discovery, convert the balance to an integer instead of doing a string comparison. --- .../asset_discovery_manager_unittest.cc | 19 +++++++++++++++++++ .../browser/asset_discovery_manager.cc | 13 +++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/browser/brave_wallet/asset_discovery_manager_unittest.cc b/browser/brave_wallet/asset_discovery_manager_unittest.cc index 4ffd308375e2..d7d3a11f565c 100644 --- a/browser/brave_wallet/asset_discovery_manager_unittest.cc +++ b/browser/brave_wallet/asset_discovery_manager_unittest.cc @@ -1125,6 +1125,25 @@ TEST_F(AssetDiscoveryManagerUnitTest, DiscoverEthAssets) { TestDiscoverEthAssets({"0xB4B2802129071b2B9eBb8cBB01EA1E4D14B34961"}, false, {}); + // One account returns the cUSDT token response for no balance detected + // (successful), yields no discovered contract addresses + const char cusdt_balance_not_detected_response[] = R"({ + "jsonrpc":"2.0", + "id":1, + "result":"0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + })"; + + requests = { + {GetNetwork(mojom::kMainnetChainId, mojom::CoinType::ETH), + { + {"0xB4B2802129071b2B9eBb8cBB01EA1E4D14B34961", + cusdt_balance_not_detected_response}, + }}, + }; + SetInterceptorForDiscoverEthAssets(requests); + TestDiscoverEthAssets({"0xB4B2802129071b2B9eBb8cBB01EA1E4D14B34961"}, false, + {}); + // One account, with a balance, yields discovered contract address requests = { {GetNetwork(mojom::kMainnetChainId, mojom::CoinType::ETH), diff --git a/components/brave_wallet/browser/asset_discovery_manager.cc b/components/brave_wallet/browser/asset_discovery_manager.cc index c7d7cab49ae8..dc0b694d52e5 100644 --- a/components/brave_wallet/browser/asset_discovery_manager.cc +++ b/components/brave_wallet/browser/asset_discovery_manager.cc @@ -279,12 +279,13 @@ void AssetDiscoveryManager::OnGetERC20TokenBalances( // Populate the map using the balance_results for (size_t i = 0; i < balance_results.size(); i++) { - if (balance_results[i]->balance.has_value() && - balance_results[i]->balance != - "0x000000000000000000000000000000000000000000000000000000000000000" - "0") { - chain_id_to_contract_addresses_with_balance[chain_id].push_back( - contract_addresses[i]); + if (balance_results[i]->balance.has_value()) { + uint256_t balance_uint; + HexValueToUint256(balance_results[i]->balance.value(), &balance_uint); + if (balance_uint > 0) { + chain_id_to_contract_addresses_with_balance[chain_id].push_back( + contract_addresses[i]); + } } } From 5044d49c624f037ac7644adc94e98203f09b91e4 Mon Sep 17 00:00:00 2001 From: nvonpentz <12549658+nvonpentz@users.noreply.github.com> Date: Mon, 27 Feb 2023 15:54:40 -0500 Subject: [PATCH 2/2] Handle case when HexValueToUint256 fails --- components/brave_wallet/browser/asset_discovery_manager.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/components/brave_wallet/browser/asset_discovery_manager.cc b/components/brave_wallet/browser/asset_discovery_manager.cc index dc0b694d52e5..4ca0a1cae8dc 100644 --- a/components/brave_wallet/browser/asset_discovery_manager.cc +++ b/components/brave_wallet/browser/asset_discovery_manager.cc @@ -281,8 +281,9 @@ void AssetDiscoveryManager::OnGetERC20TokenBalances( for (size_t i = 0; i < balance_results.size(); i++) { if (balance_results[i]->balance.has_value()) { uint256_t balance_uint; - HexValueToUint256(balance_results[i]->balance.value(), &balance_uint); - if (balance_uint > 0) { + bool success = + HexValueToUint256(balance_results[i]->balance.value(), &balance_uint); + if (success && balance_uint > 0) { chain_id_to_contract_addresses_with_balance[chain_id].push_back( contract_addresses[i]); }