Skip to content

Commit

Permalink
Ignore bad tokens (#111)
Browse files Browse the repository at this point in the history
* LpSugar: ignore tokens failing ERC20 calls.

* env: redeployed LpSugar everywhere.
  • Loading branch information
stas authored Jan 28, 2025
1 parent d054e9f commit 8b03fbe
Show file tree
Hide file tree
Showing 10 changed files with 53 additions and 27 deletions.
28 changes: 18 additions & 10 deletions contracts/LpSugar.vy
Original file line number Diff line number Diff line change
Expand Up @@ -323,8 +323,11 @@ def tokens(_limit: uint256, _offset: uint256, _account: address, \
if len(col) >= _limit or index >= addresses_count:
break

col.append(self._token(_addresses[index], _account))
seen.append(_addresses[index])
new_token: Token = self._token(_addresses[index], _account)

if new_token.decimals != 0 and new_token.symbol != "":
col.append(new_token)

for index: uint256 in range(0, lp_shared.MAX_POOLS):
if len(col) >= _limit or index >= pools_count:
Expand All @@ -333,16 +336,18 @@ def tokens(_limit: uint256, _offset: uint256, _account: address, \
pool_data: address[4] = pools[index]

pool: IPool = IPool(pool_data[1])
token0: address = staticcall pool.token0()
token1: address = staticcall pool.token1()
tokens: address[2] = [staticcall pool.token0(), staticcall pool.token1()]

if token0 not in seen:
col.append(self._token(token0, _account))
seen.append(token0)
for ptoken: address in tokens:
if ptoken in seen:
continue

if token1 not in seen:
col.append(self._token(token1, _account))
seen.append(token1)
seen.append(ptoken)
new_token: Token = self._token(ptoken, _account)

# Skip tokens that fail basic ERC20 calls
if new_token.decimals != 0 and new_token.symbol != "":
col.append(new_token)

return col

Expand Down Expand Up @@ -1092,7 +1097,7 @@ def _safe_decimals(_token: address) -> uint8:
if len(response) > 0:
return (abi_decode(response, uint8))

return 18
return 0

@internal
@view
Expand All @@ -1114,6 +1119,9 @@ def _safe_symbol(_token: address) -> String[MAX_TOKEN_SYMBOL_LEN]:

resp_len: uint256 = len(response)

if resp_len == 0:
return ""

# Check response as revert_on_failure is set to False
# And that the symbol size is not some large value (probably spam)
if resp_len > 0 and resp_len <= 96:
Expand Down
2 changes: 1 addition & 1 deletion deployments/base.env
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ TEST_ADDRESS_8453=0x892Ff98a46e5bd141E2D12618f4B2Fe6284debac
TEST_ALM_ADDRESS_8453=0x892Ff98a46e5bd141E2D12618f4B2Fe6284debac

# Deployed Contracts
LP_SUGAR_ADDRESS_8453=0xB647E0a927a3DB224090FbA71e9F8faAB9e18310
LP_SUGAR_ADDRESS_8453=0x92294D631E995f1dd9CeE4097426e6a71aB87Bcf
REWARDS_SUGAR_ADDRESS_8453=0xA44600F4DBA6683d8BD99270B1A6a143fB9F1C3B
VE_SUGAR_ADDRESS_8453=0x4d6A741cEE6A8cC5632B2d948C050303F6246D24
RELAY_SUGAR_ADDRESS_8453=0x8932B5FE23C07Df06533F8f09E43e7cca6a24143
7 changes: 4 additions & 3 deletions deployments/fraxtal.env
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ CONVERTOR_252=0x1111111111111111111111111111111111111111
SLIPSTREAM_HELPER_252=0x593D092BB28CCEfe33bFdD3d9457e77Bd3084271
ALM_FACTORY_252=0x0000000000000000000000000000000000000000

LP_SUGAR_ADDRESS_252=0xB1d0DFFe6260982164B53EdAcD3ccd58B081889d
REWARDS_SUGAR_ADDRESS_252=0xbDD1d5A9d9566F575bC59cE33C8F77ACa5cF924b

TEST_ADDRESS_252=0x892ff98a46e5bd141e2d12618f4b2fe6284debac
TEST_ALM_ADDRESS_252=0x892ff98a46e5bd141e2d12618f4b2fe6284debac

# Deployed Contracts
LP_SUGAR_ADDRESS_252=0xC1E2B701d10A34c7c3bC2f0848806EF03E699221
REWARDS_SUGAR_ADDRESS_252=0xbDD1d5A9d9566F575bC59cE33C8F77ACa5cF924b
2 changes: 1 addition & 1 deletion deployments/ink.env
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ TEST_ADDRESS_57073=0x892ff98a46e5bd141e2d12618f4b2fe6284debac
TEST_ALM_ADDRESS_57073=0x892ff98a46e5bd141e2d12618f4b2fe6284debac

# Deployed Contracts
LP_SUGAR_ADDRESS_57073=0xD938B20f40505e33b7C131e6aDD6C6FF7380094A
LP_SUGAR_ADDRESS_57073=0xff86fd0eBA25D2bB37A9A948327DAA6159C8638a
REWARDS_SUGAR_ADDRESS_57073=0xc100DC20aff9907E833a6aDEDDB52fC310554fF2
7 changes: 4 additions & 3 deletions deployments/lisk.env
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ CONVERTOR_1135=0x1111111111111111111111111111111111111111
SLIPSTREAM_HELPER_1135=0xB98fB4C9C99dE155cCbF5A14af0dBBAd96033D6f
ALM_FACTORY_1135=0x0000000000000000000000000000000000000000

LP_SUGAR_ADDRESS_1135=0x0F5B7D59690F99f34081E24557f022d06d580BB6
REWARDS_SUGAR_ADDRESS_1135=0xB1d0DFFe6260982164B53EdAcD3ccd58B081889d

TEST_ADDRESS_1135=0x892ff98a46e5bd141e2d12618f4b2fe6284debac
TEST_ALM_ADDRESS_1135=0x892ff98a46e5bd141e2d12618f4b2fe6284debac

# Deployed Contracts
LP_SUGAR_ADDRESS_1135=0x567401a95c33bcD401b0BFF0701eB5E1e5634236
REWARDS_SUGAR_ADDRESS_1135=0xB1d0DFFe6260982164B53EdAcD3ccd58B081889d
7 changes: 4 additions & 3 deletions deployments/metall2.env
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ CONVERTOR_1750=0x1111111111111111111111111111111111111111
SLIPSTREAM_HELPER_1750=0x222ed297aF0560030136AE652d39fa40E1B72818
ALM_FACTORY_1750=0x0000000000000000000000000000000000000000

LP_SUGAR_ADDRESS_1750=0xB1d0DFFe6260982164B53EdAcD3ccd58B081889d
REWARDS_SUGAR_ADDRESS_1750=0xbDD1d5A9d9566F575bC59cE33C8F77ACa5cF924b

TEST_ADDRESS_1750=0x892ff98a46e5bd141e2d12618f4b2fe6284debac
TEST_ALM_ADDRESS_1750=0x892ff98a46e5bd141e2d12618f4b2fe6284debac

# Deployed Contracts
LP_SUGAR_ADDRESS_1750=0x26350C6a222E9391279A7513Ee730a3c13c71961
REWARDS_SUGAR_ADDRESS_1750=0xbDD1d5A9d9566F575bC59cE33C8F77ACa5cF924b
7 changes: 4 additions & 3 deletions deployments/mode.env
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ CONVERTOR_34443=0x1111111111111111111111111111111111111111
SLIPSTREAM_HELPER_34443=0xD24a61656AB0d70994Ef5F42fE11AA95c0a1d329
ALM_FACTORY_34443=0x0000000000000000000000000000000000000000

LP_SUGAR_ADDRESS_34443=0x7f23Fa4D139CCD5b7a4e4EFfFe1d2e61b33BCD21
REWARDS_SUGAR_ADDRESS_34443=0xD5d3ABAcB8CF075636792658EE0be8B03AF517B8

TEST_ADDRESS_34443=0x892ff98a46e5bd141e2d12618f4b2fe6284debac
TEST_ALM_ADDRESS_34443=0x892ff98a46e5bd141e2d12618f4b2fe6284debac

# Deployed Contracts
LP_SUGAR_ADDRESS_34443=0xceC5b86bC187e061Ef3374873193Ca4cbFD21C5b
REWARDS_SUGAR_ADDRESS_34443=0xD5d3ABAcB8CF075636792658EE0be8B03AF517B8
4 changes: 2 additions & 2 deletions deployments/optimism.env
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ TEST_ADDRESS_10=0x892ff98a46e5bd141e2d12618f4b2fe6284debac
TEST_ALM_ADDRESS_10=0x892ff98a46e5bd141e2d12618f4b2fe6284debac

# Deployed Contracts
LP_SUGAR_ADDRESS_10=0x7fD327b8341fc3C24C04f414B1e76244B1b5EC53
LP_SUGAR_ADDRESS_10=0x3B919747B46B13CFfd9f16629cFf951C0b7ea1e2
REWARDS_SUGAR_ADDRESS_10=0x62CCFB2496f49A80B0184AD720379B529E9152fB
VE_SUGAR_ADDRESS_10=0xFE0a44d356a9F52c9F1bE0ba0f0877d986438c9C
RELAY_SUGAR_ADDRESS_10=0xb8307e5842B9aeE75C704183F0355076aa74b4e2
RELAY_SUGAR_ADDRESS_10=0xb8307e5842B9aeE75C704183F0355076aa74b4e2
2 changes: 1 addition & 1 deletion deployments/soneium.env
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,5 @@ TEST_ADDRESS_1868=0x892ff98a46e5bd141e2d12618f4b2fe6284debac
TEST_ALM_ADDRESS_1868=0x892ff98a46e5bd141e2d12618f4b2fe6284debac

# Deployed Contracts
LP_SUGAR_ADDRESS_1868=0xB1d0DFFe6260982164B53EdAcD3ccd58B081889d
LP_SUGAR_ADDRESS_1868=0x085ab5bf2c0Ef1043cD5F28039c291576b47d69a
REWARDS_SUGAR_ADDRESS_1868=0xbDD1d5A9d9566F575bC59cE33C8F77ACa5cF924b
14 changes: 14 additions & 0 deletions tests/test_lp_sugar.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,20 @@ def test_tokens_long_symbol(sugar_contract):
assert token.symbol == "-???-"


@pytest.mark.skipif(int(CHAIN_ID) not in [10], reason="Only OP")
def test_tokens_invalid_erc20(sugar_contract):
tokens = sugar_contract.tokens(2, 0, ADDRESS_ZERO, [ADDRESS_ZERO])

assert tokens is not None
assert len(tokens) > 1

token_addresses = list(map(lambda t: t.token_address, tokens))
token_symbols = list(map(lambda t: t.symbol, tokens))

assert ADDRESS_ZERO not in token_addresses
assert "-???-" not in token_symbols


@pytest.mark.skipif(int(CHAIN_ID) not in [8453], reason="Only BASE")
def test_tokens_max_long_symbol(sugar_contract):
tokens = sugar_contract.tokens(1, 2508, ADDRESS_ZERO, [])
Expand Down

0 comments on commit 8b03fbe

Please sign in to comment.