КАК ДРЕЙНЯТ КОШЕЛЬКИ.
Какие подписи в кошельке могут вас заскамить, а какие нет.
Есть 2 вида подписей в смарт-контрактах - Read функции и Write функции.
Read функции просто читают данные из блокчейна не изменяя его состояние. Они никак не могут дать доступ с деньгам на вашем кошельке. А также они не требуют комиссию блокчейна.
Write функции - это полноценные транзакции. Они включаются в блоки, меняют состояние блокчейна и за них нужно платить комсу. Именно эти функции могут дрейнить ваши бабки на фишинг сайтах.
Balance Of - просмотр баланса определенного токена.
TotalSupply - общее колво токенов, выпущенных смарт-контрактом.
Allowance - проверка наличия апрува определенного токена определенному смарт-контракту.
Transfer - перевод с одного адреса на другой.
TransferFrom - перевод токенов на смарт-контракт.
Например при подключении кошелька к сайту запрашиваются read функции, которые могут только просматривать данные из блокчейна, но изменения вносить не могут. Поэтому просто подключив кошелек к сайту через Connect Wallet бабки у вас никак не сдрейнят.
Для того, чтобы вас не сдрейлили важно понимать какие функции вы подписываете. Для этого, на не трастовых протоколах всегда нужно обращать внимание, что написано в окне кошелька перед подписью/отправкой транзакции. Именно поэтому лучше используйте Rabby Wallet, он предоставляет больше данных, чем метамаск.
Начнем с банального - Approve.
Вызываем функцию, смотрим, что мы подписываем.
1 - Количество токенов, на которое мы даем разрешение контракту.
2 - Смарт-контракт.
3 - Мы платим газ. Значит это write функция.
Тут все очевидно, чтобы бабки не сдрейнили, нужно давать апрув только на ту сумму, которую вы хотите свапнуть. Особенно это важно, когда вы используете ноу нейм протоколы. А если у вас уже есть анлимит апрувы, их в 2 клика можно убрать на https://revoke.cash/ru.
Эта функция тоже дает разрешение на токены, но отличается от апрува.
1 - Сразу видим, что это функция пермит.
2 - Разрешение на токены нельзя изменить и оно по умолчанию стоит на анлимит сумму.
3 - Смарт-контракт, которому даем пермит.
4 - Это подпись, то есть за комиссию мы не платим. Однако, несмотря на это Permit это write функция, так как состояние блокчейна после подтверждения меняется(токены становятся доступны для контракта).
Как это контрить? Прежде всего, если протокол запрашивает пермит это не значит, что протокол 100% скам(на скрине пермит с синксвапа например). Тут вопрос трастовости протокола. Если ноу нейм декс с 1к$ твл запрашивает у вас пермит, то его подписывать не нужно. А если запрашивает условный синксвап, то можно подтвердить, а после прогона отменить через https://revoke.cash/ru.
Выбираем в списке подпись и убираем её.
value - это то самое анлимит количество токенов на которое мы изначально давали разрешение. Здесь мы вместо анлимит количества ставим 0, тем самым убирая пермит.
Тут после нажатия Confirm дрейнится вся сумма нативки. Также есть данные(Data), которые могут быть закодированными инструкциями для выполнения скам смарт-контракта.
Понятное дело, что если я скажу "всегда внимательно смотрите то, что написано в окне кошелька перед каждой отправкой транзакции" никто так делать не будет, да и смысла в этом нет. Такой подход очень сильно замедляет работу. Для минимизации риска дрейна достаточно делать следующее:
- Когда делаете новые, особенно низколиквидные протоколы, с которыми раньше не взаимодействовали, внимательно чекайте что подписываете.
- Чекайте ссылку по которой переходите, особенно если взяли ее не с офф источника.
- Ну и не пихайте свои приватники/сидки в ноу нейм софты, если не можете провести аудит кода.