Руководство по использованию функции разрешения стейблкоина DAI
29 декабря 2022 г.Вы уже знаете, что для выполнения транзакций в сети Ethereum (включая Polygon, Arbitrum и Optimism) требуется комиссия #Gas.
Теперь, когда цена нативного токена «доступна», вокруг платы за газ не так много шума; однако, как только цена Native Token начнет расти, ваши ленты в Твиттере наполнятся шумом и криком о высокой плате за газ. По понятным причинам.
Добавим к вышесказанному, что при взаимодействии с некоторыми смарт-контрактами, например, контрактом маршрутизатора Uniswap (приложение Uniswap), пользователь должен совершить 2 транзакции:
- сначала функция
одобрить
, чтобы разрешить фиксированное количество токенов, которые могут использоваться другим смарт-контрактом в транзакции, и - во-вторых, вызов смарт-контракта, который затем вызовет
transferFrom
.
Нетрудно догадаться, что это увеличивает общие затраты газа на выполнение транзакций.
Несмотря на то, что существует множество методов, с помощью которых отрасль решает проблему «высоких» сборов за газ, в этой статье основное внимание уделяется, вероятно, первому крупномасштабному внедрению: функции разрешения смарт-контракта DAI.
Если вы разрабатываете свои смарт-контракты, которые потребуют выпуска и управления токенами ERC20, в ваших интересах разработать смарт-контракт с токеном ERC20 с этой функцией.
Хотя теоретически мы могли бы написать намного больше, вместо этого мы делаем быструю демонстрацию варианта использования Permit function
в смарт-контракте для DAI Stablecoin
.
Давайте запачкаем руки
(A) Локальная настройка
Вы можете клонировать репозиторий учебных пособий отсюда: Github, а затем перейти к eip-2612. папка
(Б) Установка
После того, как код настроен в вашей локальной системе, вам необходимо убедиться, что вы установили все зависимости, используя npm i
или yarn install
в зависимости от ваших личных предпочтений. .
(C) Что происходит в коде
Строки с 1 по 17 прямые; как и строки с 19 по 21.
Строки 18: nonce
Это НЕ одноразовый номер любого адреса кошелька. Это одноразовый номер, который независимо поддерживается контрактом DAI. Причина: представьте, если бы я предоставил подписанное сообщение, одобряя ваш адрес для использования моего DAI. Это сообщение используется вами, но не один раз, а дважды → технически это можно квалифицировать как «Двойное расходование» и, следовательно, поддержание независимого nonce
в смарт-контракте DAI
Строка 63: Подписание сообщения. Тип: _signTypedData
Теперь DAI следует стандарту EIP712 для подписания типизированных сообщений. Не буду это усложнять (если кому-то очень хочется, то просто упомяну об этом в комментарии ниже). Проще говоря, это стандарт, который необходимо принять для подписания сообщения, которое может быть приведено в исполнение с помощью смарт-контракта, а в данном случае — смарт-контракта DAI.
Как видите, _signTypedData
требует 3 параметра:
- домен: думайте об этом как о деталях смарт-контракта, для которого предназначено это сообщение
- типы: определяет имена и типы отдельных элементов сообщения
- сообщение: буквально сообщение, которое вы хотите передать смарт-контракту.
Видеть вышеописанное в действии
(a) Запустите скрипт: node scripts/sign.js
- Да, я не использую каску, потому что мне это не нужно. Вы можете выполнить работу, используя только эфиры. Он просто генерирует подпись.
- Для удобства я установил значение nonce, возвращаемое контрактом. То есть он автоматически извлечет правильный одноразовый номер на основе значения, хранящегося в контракте.
- В целях безопасности я устанавливаю крайний срок на 15 секунд от текущей метки времени block.timestamp. То есть эта подпись должна быть отправлена со смарт-контрактом в течение 15 секунд генерации. Тогда я намеренно не зарегистрирую эту подпись за 15 секунд и не проведу транзакцию. Это должно потерпеть неудачу
(b) Как только он будет запущен после использования в вашей среде переменных, вы получите что-то похожее на изображение ниже в вашей консоли:
(c) Проверка того, прошло ли утверждение:
— создание приватной тестовой сети на buildbear.io, ответвления от основной сети Ethereum
— сначала получить несколько токенов на другую учетную запись из сборщика BuildBear:
— просмотр смарт-контракта DAI в моем обозревателе частных тестовых сетей:
— Использование функции разрешения (в части записи контракта): 📝
— Выполнение транзакции (очевидно, неудачная транзакция): ❌
— проверка причины сбоя путем посещения трассировки tx: 🤯
и вуаля! Я смог увидеть, что произошло внутри транзакции, а не только причину возврата.
Попытка запустить тот же скрипт, но на этот раз с истечением 2 минут и повторным выполнением всего для успешного tx приведет к:
Очевидно, если вы заметили, что я провел вышеуказанную транзакцию с совершенно другого счета, что иначе будет известен как «ретранслятор». Эта учетная запись заплатила цену газа за отправку в блокчейн, что учетная запись 0xD31950cD762281b9849c33bfa5CE9A42B756155
имеет разрешение на передачу моих токенов DAI.
Доказательство:
И это все, что касается использования Функции разрешения code> в контракте DAI.
О BuildBear
BuildBear предоставляет вам частную тестовую ноду, что делает процесс тестирования плавным и эффективным.
- Чтобы узнать больше о BuildBear, прочитайте здесь документы
- Загрузите указанный выше код Github здесь. 👈
н
:::информация Также опубликовано здесь. р>
:::
Оригинал