Странные ERC20
Нашел интересный репо, где описываются все странные и не стандартные реализации токенов ERC20. Привожу краткий перевод.
1. Reentrant Calls. Некоторые токены позволяют делать reentrancy в функции перевода, например ERC777.
2. Missing Return Values. Некоторые токены, типа USDT, BNB, OMG не возвращают булево значение. Здесь можно найти весь список таких токенов.
Также есть токены, типа BNB, которые возвращают булево значение для одних методов, и НЕ возвращают для других.
Другие токены, типа Tether Gold, хоть и заявляют про возврат булево значения, но на самом деле возвращают false, даже когда транзакция проходит успешно.
3. Fee on Transfer. Токена, типа STA, PAXG берут комиссию за перевод.
4. Balance Modifications Outside of Transfers (rebasing / airdrops). Некоторые токены могут делать изменения в балансе без вызова функции transfer.
5. Upgradable Tokens. Токены, типа USDC, USDT являются обновляемыми, т.е. администраторы могут менять логику исполнения некоторых функций в любой момент.
6. Flash Mintable Tokens. Токены, типа DAI, пользователи могут минтить для выполнения какой-либо одной транзакции.
7. Tokens with Blocklists. Токены, типа USDC, USDT, имеют свои функции добавления пользователей в черный список. Если адрес заблокирован, то транзакция будет постоянно откатываться.
8. Pausable Tokens. Токены, типа BNB, ZIL, могут быть приостановлены администраторами, что делает их перевод невозможным.
9. Approval Race Protections. Токены, типа USDT, KNC, имеют защиту от фронтрана функции approve.
10. Revert on Approval To Zero Address. Токены, типа OpenZeppelin, будут откатывать транзакцию, если approve вызывается на нулевой адрес.
11. Revert on Zero Value Transfers. Токены LEND откатывают транзакции, если указано нулевое количество токенов.
12. Multiple Token Addresses. Некоторые токены используют прокси контракты, что открывает путь для атак double entry point.
13. Low Decimals. Некоторые токены имеют маленькое количество decimals (USDC - 6, Gemini USD - 2).
14. High Decimals. Другие токены, наоборот, очень большое количество decimals (YAM-V2 - 24).
15. transferFrom with src == msg.sender. Некоторые токены, типа DSToken, не будут пытаться уменьшить allowance пользователя, если они использует свой адрес в transferFrom(), другие, типа OpenZeppelin, Uniswap-v2, наоборот.
16. Non string metadata. Токены, типа MKR, шифруют свои name/symbol в bytes32, вместо string.
17. Revert on Transfer to the Zero Address. Некоторые токены откатывают транзакцию, если перевод идет на нулевой адрес.
18. No Revert on Failure. Токены, типа ZRX, не откатят вашу транзакцию, если она провалится, а просто вернут false.
19. Revert on Large Approvals & Transfers. Токены, типа UNI, COMP, откатят транзакцию, если число при approve или transfer будет больше чем uint96.
20. Code Injection Via Token Name. Некоторые вредоносные токены могут включать специальные JavaScript код в атрибуте name, которые позволяет хакерам вытягивать приватные ключи пользователей, которые взаимодействуют с токенами через фронтенд.
21. Unusual Permit Function. Токены, типа (DAI, RAI, GLM, STAKE, CHAI, HAKKA, USDFL, HNY, имеют permit() функцию, которая не следует стандарту EIP2612.
Надеюсь, вы тоже узнали сегодня о токенах чуточку больше.
#token #erc20
Post #714
534
- ❤ 7
- 👍 2
- 🔥 1