Как прочитать биткоин-адрес из мультивалютной записи ENS

ENS-интеграция вернула байты для получателя в Bitcoin, и форма платежа пытается показать их как текст UTF-8. Биткоин-запись содержит выходной скрипт, который нужно преобразовать по правилам выбранной сети.

Определите шаблон скрипта

Запросите addr(node, coinType) для нужной монеты. У основной сети Bitcoin тип монеты равен нулю. Пример создаёт 22-байтный scriptPubKey для P2WPKH: первый байт задаёт нулевую версию witness, второй помещает в стек 20 байтов программы. Если закодировать весь скрипт как одну witness-программу, результат будет неверным.

const script = Buffer.from("0014" + "ab".repeat(20), "hex");
console.log(script.length, script[0], script[1]);

Выполните обратное преобразование

Сформируйте отображаемый адрес библиотекой Bitcoin для нужной сети и версии witness. Перед подготовкой платежа превратите его обратно в выходной скрипт и побайтно сверьте с ENS-записью. Для других шаблонов нужен соответствующий разбор. При пустой или неподдерживаемой записи покажите отсутствие назначения в Bitcoin: адрес Ethereum из этого же имени здесь неприменим.

eips.ethereum.org ERC-2304 multicoin addresses