Именование смарт-контрактов
Смарт-контракты являются краеугольным камнем децентрализованной инфраструктуры Эфириума, обеспечивая работу автономных приложений и протоколов. Но даже по мере развития возможностей контрактов пользователи и разработчики по-прежнему полагаются на необработанные шестнадцатеричные адреса для идентификации и ссылки на эти контракты.
Именование смарт-контрактов с помощью Ethereum Name Service (ENS) (opens in a new tab) улучшает пользовательский опыт, устраняя необходимость в шестнадцатеричных адресах контрактов, и снижает риск таких атак, как отравление адресов (address poisoning) и спуфинг. В этом руководстве объясняется, почему именование смарт-контрактов имеет значение, как его можно реализовать, а также рассматриваются доступные инструменты, такие как Enscribe (opens in a new tab), которые упрощают этот процесс и помогают разработчикам внедрить эту практику.
Зачем давать имена смарт-контрактам?
Человекочитаемые идентификаторы
Вместо взаимодействия с непрозрачными адресами контрактов, такими как 0x8f8e...f9e3, разработчики и пользователи могут использовать человекочитаемые имена, например v2.myapp.eth. Это упрощает взаимодействие со смарт-контрактами.
Это стало возможным благодаря Ethereum Name Service (opens in a new tab), который предоставляет децентрализованную службу имен для адресов Эфириума. Это аналогично тому, как служба доменных имен (DNS) позволяет пользователям интернета получать доступ к сетевым адресам, используя имя, такое как ethereum.org, вместо IP-адреса, такого как 104.18.176.152.
Повышение безопасности и доверия
Именованные контракты помогают сократить количество случайных транзакций на неправильный адрес. Они также помогают пользователям идентифицировать контракты, привязанные к конкретным приложениям или брендам. Это добавляет уровень репутационного доверия, особенно когда имена привязаны к известным родительским доменам, таким как uniswap.eth.
Из-за длины адреса Эфириума в 42 символа пользователям очень сложно заметить небольшие изменения в адресах, где была изменена пара символов. Например, адрес вроде 0x58068646C148E313CB414E85d2Fe89dDc3426870 обычно усекается до 0x580...870 в пользовательских приложениях, таких как кошельки. Пользователь вряд ли заметит вредоносный адрес, в котором была изменена пара символов.
Этот метод используется при атаках с подменой и отравлением адресов, когда пользователей заставляют поверить, что они взаимодействуют с правильным адресом или отправляют на него средства, тогда как на самом деле адрес просто похож на правильный, но не является им.
Имена ENS для кошельков и контрактов защищают от подобных атак. Как и атаки с подменой DNS, атаки с подменой ENS также могут иметь место, однако пользователь с большей вероятностью заметит опечатку в имени ENS, чем небольшое изменение в шестнадцатеричном адресе.
Улучшенный UX для кошельков и обозревателей
Когда смарт-контракт настроен с именем ENS, приложения, такие как кошельки и обозреватели блокчейна, могут отображать имена ENS для смарт-контрактов вместо шестнадцатеричных адресов. Это значительно улучшает пользовательский опыт (UX).
Например, при взаимодействии с таким приложением, как Юнисвоп, пользователи обычно видят, что приложение, с которым они взаимодействуют, размещено на веб-сайте uniswap.org, но им будет представлен шестнадцатеричный адрес контракта, если Юнисвоп не назвал свои смарт-контракты с помощью ENS. Если контракт имеет имя, вместо этого они могут увидеть v4.contracts.uniswap.eth, что гораздо полезнее.
Именование при развертывании и после развертывания
Существует два момента, когда смарт-контрактам можно дать имя:
- Во время развертывания: назначение имени ENS контракту в момент его развертывания.
- После развертывания: сопоставление существующего адреса контракта с новым именем ENS.
Оба подхода предполагают наличие у владельца или менеджера доступа к домену ENS, чтобы они могли создавать и настраивать записи ENS.
Как работает именование ENS для контрактов
Имена ENS хранятся ончейн и преобразуются в адреса Эфириума с помощью резолверов ENS. Чтобы дать имя смарт-контракту:
- Зарегистрируйте или получите контроль над родительским доменом ENS (например,
myapp.eth) - Создайте поддомен (например,
v1.myapp.eth) - Установите запись
addressподдомена на адрес контракта - Установите обратную запись контракта в ENS, чтобы имя можно было найти по его адресу
Имена ENS иерархичны и поддерживают неограниченное количество подимен. Настройка этих записей обычно включает взаимодействие с реестром ENS и контрактами публичных резолверов.
Инструменты для именования контрактов
Существует два подхода к именованию смарт-контрактов. Либо использование приложения ENS (opens in a new tab) с некоторыми ручными шагами, либо использование Enscribe (opens in a new tab). Они описаны ниже.
Ручная настройка ENS
Используя приложение ENS (opens in a new tab), разработчики могут вручную создавать подимена и устанавливать прямые записи адресов. Однако они не могут установить основное имя для смарт-контракта, настроив обратную запись для имени через приложение ENS. Необходимо выполнить ручные шаги, которые описаны в документации ENS (opens in a new tab).
Enscribe
Enscribe (opens in a new tab) упрощает именование смарт-контрактов с помощью ENS и повышает доверие пользователей к смарт-контрактам. Он предоставляет:
- Атомарное развертывание и именование: назначение имени ENS при развертывании нового контракта
- Именование после развертывания: привязка имен к уже развернутым контрактам
- Поддержка нескольких сетей: работает в Эфириуме и сетях уровня 2 (l2), где поддерживается ENS
- Данные верификации контракта: включает данные верификации контракта, полученные из нескольких источников, для повышения доверия пользователей
Enscribe поддерживает имена ENS, предоставленные пользователями, или свои собственные домены, если у пользователя нет имени ENS.
Вы можете получить доступ к приложению Enscribe (opens in a new tab), чтобы начать именовать и просматривать смарт-контракты.
Лучшие практики
- Используйте понятные имена с указанием версий, такие как
v1.myapp.eth, чтобы сделать обновления контрактов прозрачными. - Устанавливайте обратные записи, чтобы связать контракты с именами ENS для их видимости в приложениях, таких как кошельки и обозреватели блокчейна.
- Внимательно следите за сроками действия, если хотите предотвратить случайную смену владельца.
- Верифицируйте исходный код контракта, чтобы пользователи могли доверять тому, что именованный контракт ведет себя так, как ожидается.
Риски
Именование смарт-контрактов предоставляет значительные преимущества для пользователей Эфириума, однако владельцы доменов ENS должны быть бдительны в отношении управления ими. К числу основных рисков относятся:
- Истечение срока действия: как и имена DNS, регистрации имен ENS имеют ограниченный срок действия. Поэтому жизненно важно, чтобы владельцы следили за датами истечения срока действия своих доменов и продлевали их заблаговременно. Как приложение ENS, так и Enscribe предоставляют визуальные индикаторы для владельцев доменов при приближении срока истечения.
- Смена владельца: записи ENS представлены в виде NFT в Эфириуме, где владелец конкретного домена
.ethимеет в своем распоряжении соответствующий NFT. Следовательно, если другой аккаунт станет владельцем этого NFT, новый владелец сможет изменять любые записи ENS по своему усмотрению.
Чтобы снизить такие риски, аккаунт владельца доменов 2-го уровня (2LD) .eth должен быть защищен с помощью кошелька с мультиподписью, а для управления именованием контрактов должны создаваться поддомены. Таким образом, в случае любых случайных или злонамеренных изменений владельца на уровне поддомена, они могут быть отменены владельцем 2LD.
Будущее именования контрактов
Именование контрактов становится лучшей практикой для разработки децентрализованных приложений (dapp), подобно тому, как доменные имена заменили IP-адреса в интернете. По мере того как все больше элементов инфраструктуры, таких как кошельки, обозреватели и панели управления, интегрируют разрешение ENS для контрактов, именованные контракты повысят безопасность и уменьшат количество ошибок во всей экосистеме.
Делая смарт-контракты более простыми для распознавания и понимания, именование помогает преодолеть разрыв между пользователями и приложениями в Эфириуме, повышая как безопасность, так и UX для пользователей.