0$ Транзакции?
Для начала поймем что происходит?
Возьмем обычный рандомный адрес
И что мы тут видим?
Original - Оригинальная транзакция, которая была выполнена пользователем, отправка например 100k USDT.
На адрес - 0xc71A2A42a09F40B3BD7b289c51068AEFa560CABd
Fake - фишинговая транзакция, на 0 USDT.
1) 0xC7108500B4F02B84f1157F87786A29912650caBd
2) 0xc71a2A4218aD01b1064BAEb686c81ab8E260CaBd
Игра на внимательность
Как вы видите оригинальный адрес очень похож на "Фишинговые адреса". Точнее фишинговые адреса похожи на оригинальные.
Обычно первые 3 и последние 3 символа схожи. Так как очень легко спутать эти адреса и отправить деньги злоумышленникам
Окей, это поняли, но как эта транзакция в 0 USDT происходит, если ключи у меня?
Чтобы это объяснить это нам придется посмотреть "под капот" токена.
Например USDT - Контракт
Тут мы наблюдаем что есть функции transfer и transferFrom.
Перевести деньги с "Этого кошелька" на другой кошелек
_to - Кому, вставляете адрес получателя
_value - Количество токенов которые хотите перевести
Затем ВЫ её подписываете и отправляете транзакцию.
Перевести токены с ТОГО кошелька на ДРУГОЙ кошелек
_from - От кого вы будете забирать токены. С какого адреса брать токены.
_to - куда эти токены переведутся, адрес получателя
_value - Количество токенов которые хотите перевести
Затем Отправляющий адрес подписывает и отправляет транзакцию.
transferFrom дословно переводиться как перевести токены с того адреса на другой адрес.
Давайте сразу на примере
Адрес А - Петя, хороший малый, который имеет 100 USDT
Адрес B - Антонио, тоже хороший, но пока бедный, 0 USDT
Наша задача, нужно перекинуть ОТ Пети -> Антонио 50 USDT
Метод 1
Петя заполняет форму для transfer (Комиссию платит Петя):
_to - Адрес B (Кому, адрес получателя)
_value - 50 (Количество токенов которые хотите перевести)
Затем Петя подписывает транзакцию и переводит 50USDT на адрес Антонио
Метод 2
Антонио заполняет форму для transferFrom (Комиссию платит Антонио):
_from - Адрес А Петя (От кого вы будете забирать токены)
_to - Адрес B Антонио (куда эти токены переведутся, адрес получателя)
_value - 50 (Количество токенов которые хотите перевести)
Затем Антонио подписывает транзакцию и переводит 50USDT к себе на адрес, взяв их у Пети.
НО! Получается Антонио может просто взять все 100 токенов Пети?
Allowance - Это количество токенов которое Петя разрешил Антонио взять со своего кошелька. Без этого разрешения Антонио не может взять токены с адреса Пети
Чтобы выполить "Метод2", Петя сначала должен разрешить Антонио "взять"(потратить) свои токены. Это называется функция Approve(Апрув)
_spender - тратильщик, кому разрешаете тратить(брать) ваши USDT токены
_value - количество, сколько в общем количество токенов которые вы разрешите адресу взять у вас токенов
Распишем Метод 2 в деталях
- Петя заполняет форму Approve.
_spender - Адрес B _value - 50
Подписывает Петя и отправляет транзакцию
Только что Петя разрешил Адресу B, Антонию взять 50 токенов USDT - Антонио заполняет форму transferFrom как ранее и берет свои 50 токенов USDT
- Петя - 50usdt, Антонио - 50usdt.
В первом действии Петя сделал Allowance Адреса B = 50, Разрешил потратить токенов
После второго действия при transferFrom, Allowance Адреса B = 0.
Так как было разрешено взять Антонию 50 токенов, он взял 50, значит сейчас ему разрешено 0 шт токенов. 50-50 = 0
Еще примеры
Если бы при Allowance = 50, Антонио бы запросил 75 токенов, контракт USDT сказал бы Антонио, что "Запрашиваете выше разрешенного". И транзакция бы зафейлилась. Петя - 100usdt, Антонио - 0usdt.
Если бы Петя сделал бы Approve на 75 токенов, и Антонио сделал бы transferFrom на 50 токенов, то Allowance Антонио стал бы 75-50=25. Тоесть Антонио может взять еще 25 токенов Пети. Петя - 50usdt, Антонио - 50usdt.
Разобрались? А теперь как это относится к фишинговой атаке?
Но почему transferFrom выполняется, хотя мы не разрешали (Approve) адрес_атакующему тратить свои токены.
Потому что allowance = 0, это ставится автоматический, тоесть любому другому адресу разрешено взять 0 токенов. Сейф? Сейф.
А в функции transferFrom, проверяется что _value <= allowance.
0=0? Да, значит можно проводить транзакцию
Этим и пользуются злоумышленики, делают transferFrom с количеством 0. Тем самым засоряя историю вам, и надеясь на вашу не внимательность
А у них затраты это плата за газ при функции tranferFrom(_value = 0)
Вот и все, будьте аккуратны, и всегда берите адреса из персоисточников
Будьте Сейф и не торопитесь!!!
https://t.me/Straus_loveYou
https://t.me/Straus_loveYou
https://t.me/Straus_loveYou