February 1, 2023

Как заявить права на свой DNS-домен в ENS?

1 — Настройка подписи DNSSEC

В зависимости от вашего провайдера DNS это может быть очень просто или довольно сложно.

Если ваш DNS-провайдер уже поддерживает домены, подписанные DNSSEC, отлично! Следуйте их инструкциям по настройке DNSSEC.

Если они этого не сделают, вам нужно будет перейти к тому, кто это делает. Я рекомендую либо EasyDNS, либо Google Cloud DNS . Руководство EasyDNS по настройке DNSSEC находится здесь , а руководство Google — здесь .

Независимо от того, какой провайдер вам нужен, убедитесь, что вы выбрали подписи RSA и хеширование SHA256.

После настройки DNSSEC ваш провайдер DNS предоставит вам некоторые данные — записи DS или RRSIG. Вам нужно будет предоставить эти записи вашему регистратору. Это позволяет им вставить соответствующий «клей», чтобы убедиться, что все работает от начала до конца.

Когда вы закончите этот шаг, используйте отладчик Verisign DNSSEC , чтобы убедиться, что все работает, прежде чем двигаться дальше.

2 — Добавление TXT-записи

Регистратор DNS в ENS ищет запись TXT с определенным именем и форматом, чтобы проверить, какой адрес Ethereum должен быть передан во владение доменом.

Чтобы заявить о праве собственности на mydomain.xyz , создайте запись TXT в своей зоне DNS, _ens.mydomain.xyz , с текстовыми данными в форме a=0x1234..., где 0x1234...адрес Ethereum, которому вы хотите передать контроль над записью ENS.

3 — Взаимодействие с оракулом DNSSEC

Затем вам нужно доказать оракулу DNSSEC содержимое созданной вами записи TXT. Для этого вы можете использовать этот инструмент dnsprove , который я написал. Он позаботится обо всей тяжелой работе за вас.

Сначала загрузите инструмент в рабочее пространство golang и скомпилируйте его.

Затем бегите dnsprove --address=0xd7296b6044ffd0565062345c2eaa4017024b2d22 --keyfile=/path/to/keyfile TXT _ens.mydomain.xyz.

Чтобы команда работала, вам необходимо иметь работающий узел Ethereum localhost:8545— или вы можете указать собственное местоположение с помощью --rpc=http://host:port.

Здесь адрес — это адрес оракула DNSSEC на Ropsten. Ключевой файл — это путь к файлу хранилища ключей JSON для учетной записи, которую вы хотите использовать для отправки транзакций.

Прежде чем вы спросите, да, иронично, что эта команда еще не поддерживает имена ENS для указания адреса оракула DNSSEC.

DNSSEC выполнит серию DNS-запросов, чтобы установить цепочку доверия. Затем DNSSEC сверится с оракулом, чтобы увидеть, какие шаги еще не были проверены или устарели.

dnsproveзатем запросит у вас разрешение на отправку транзакций, подтверждающих оставшиеся записи. Как только вы даете свое разрешение, транзакции отправляются, и Ethereum теперь официально осведомлен о ваших записях DNS!

4 — Заявка на ваш домен в ENS

Наконец, вы можете заявить права на свой домен в ENS. В консоли geth выполните следующее:

var registrar = web3.eth.contract([{"константа":true,"inputs":[],"name":"ens","outputs":[{"name":"","type":" адрес"}],"оплачиваемый":ложь,"stateMutability":"представление","тип":"функция"},{"константа":истина,"входы":[],"имя":"rootDomain", "выходы": [{"имя":"","тип":"байты"}],"оплачиваемый":false,"stateMutability":"вид","тип":"функция"},{"константа" :true,"inputs":[],"name":"oracle","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability" :"Посмотреть","тип":"функция"},{"константа":ложь,"входы":[{"имя":"имя","тип":"байты"}],"имя":"требование","выходы" :[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rootNode"," outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs": [{"имя":"_dnssec","тип":"адрес"},{"имя":"_ens","тип":"адрес"},{"имя":"_rootDomain","тип": "bytes"},{"name":"_rootNode","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]).at( "0xf8d18b3c5de9892681998076bebcba32e62e0835");function encodeName(buf, off, name) {   if(name == ".") {     buf.writeUInt8(0, off++);     вернуться;   }for(var часть name.split(".")) {     buf.writeUInt8(part.length, off++);     buf.write(part, off)     off += part.length;   }   возврат; }function hexEncodeName(name) {   if(!name.endsWith(".")) name = name + ".";   var buf = новый буфер (имя.длина + 1);   var off = encodeName(buf, 0, name);   вернуть "0x" + buf.toString ("hex", 0, off); }registrar.claim(hexEncodeName('myname.xyz'), {from: myaddress})

Запустите это, и как только транзакция будет добыта, все готово!

Запись ENS, соответствующая myname.xyz, теперь принадлежит вашей учетной записи, и вы можете настроить ее так же, как и любое другое имя — возможно, с помощью manager.ens.domains .