ERC-20 - токены для DeFi и всего остального
Коротко
На самом деле вы удивитесь, но из всех ERC/EIP по статистике применяется не так много:
- ERC-20 - взаимозаменяемые токены;
- ERC-721 - не взаимозаменяемые ;
- Абстракция аккаунта;
- И ещё пара-тройка.
Но давайте поговорим пока лишь про ERC-20.
Что есть в стандартном наборе?
- totalSupply() — подсчитывает количество существующих токенов;
- balanceOf (account) — подсчитывает количество токенов на счету конкретной учетной записи;
- transfer (recipient address, amount) — пересылает некоторое количество токенов (amount) от отправителя транзакции на адрес получателя (recipient address);
- transferFrom (sender address, recipient address, amount) — пересылает некоторое количество токенов (amount) с баланса адреса отправителя (sender address) на адрес получателя (recipient address);
- approve (spender, amount) — позволяет доверенному лицу (spender) потратить некоторое количество токенов (amount) от имени владельца учетной записи;
- allowance (owner address, spender address) — указывает количество токенов, которое доверенное лицо (spender address) может потребовать…
Теперь - давайте на примере: если же хотите больше - то вам документация.
USDt - токен №01 по популярности. Сегодня
Идём на любой агрегатор, скажем: coinmarketcap.com/currencies/tether - находим нужную монету и сверяемся с официальными документами: tether.to/en/transparency/?tab=bridges. Зачем? Чтобы фишинг не ударил по нам.
Возьмём для примера сеть L2 - Arbitrum: arbiscan.io/address/0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9 и пойдём в контракт:
Как видим, он проксированный, а значит? Нам нужны функции чтения (Read) и записи (Write) именно в режиме прокси (Proxy):
arbiscan.io/address/0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9#writeProxyContract.
Попробуем выдать APPROVE на обычный (EOA) кошелёк: обычно они выдаются на смарт-контракты (когда кладёте на депозит в AAVE или в пул Uniswap, например, или даже разрабатываете индексы на Envelop), но я передам право на 1 USDt с моего кошелька menaskop.eth на кошелёк его создавший - netstalking.eth:
Как видим, нулей можно записать много и выдать аппрув на условно-бесконечную сумму, но это не правильно и поэтому:
Запишем 1000000 - так выглядит единица для данного токена (см. во врезке - на метамаск окно). Вот транзакция: https://arbiscan.io/tx/0xd22a3da1cdd7fdba3e3f618b984d34364e2dc2199d2741614cf629253594c3b9 - обошлось нам это в несколько центов. Идём дальше:
Теперь пробуем забрать 1 доллар с menaskop.eth на netstalking.eth:
Здесь указываем отправителем 0x23….6 - это кошелёк как раз menaskop.eth (Sender), а получателем (Recipient) 0x5…a - это netstalking.eth, а далее - сумму перевода (Amount) и жмём на кнопку записи (Write) в смарт:
Как видим - мы получаем 1 USDt после этого:
А вот сам перевод: https://arbiscan.io//tx/0xd34ce07e584b815d7a0e9029e6f69eae11cea7aea4d8c27621f0ae144ca4363c.
Осталось - сходить на Revoke и посмотреть, нужно ли что-то отозвать:
Как видим: https://revoke.cash/ - есть пермиты (Permit) на Uniswap, которые нужно отозвать: и хотя они прямого отношения к тесту не имеют, всегда полезно проверять, а не забыли ли вы что-нибудь.
Зачем это всё нужно?
Во-первых, вас в любой момент могут заблокировать со стороны интерфейса где-либо, а потому - полезно владеть навыками работы со смартами. Конечно, это не спасёт от блокировок на смарте самого USDt (как и в аналогичных случаях - USDc, USDs, etc.), но это уже другая история.
Во-вторых, таким же способом можно вносить депозиты, делать свопы и даже торговать деривативами. Конечно, эти операции посложнее, но всё возможно.
В-третьих, ERC-20 повлияли на весь рынок криптоактивов, а не только EVM-блокчейнов: чего стоит один только BRC-20 стандарт, поэтому понимание общих принципов - точно не навредит.
В следующий раз попробуем поработать и с другими смартами и стандартами, а пока - всё и