Недавно, работая над Рыночной площадкой NFT на базе Cardano, мы с моей командой должны были придумать способ для нашего бэкэнда взаимодействовать с узлом Cardano на удаленном хосте.

Учитывая, что наша серверная часть развернута на AWS Fargate, у нас было два варианта:
— Развернуть узел cardano на AWS Fargate и каким-то образом поделиться файлом сокета UNIX с нашим сервером
— Каким-то образом открыть файл сокета UNIX через какой-либо другой протокол.

Сначала мы попытались развернуть весь стек Cardano graphql (включая узел cardano) на AWS Fargate, но это вызвало у нас столько проблем, что мы решили попробовать другой вариант.
При поиске возможных решений мы наткнулись на socat, утилита, позволяющая открыть доступ к сокету UNIX через TCP (и гораздо более честно). Если вам интересно узнать больше о socat, вот отличный пост, который я лично использовал, чтобы найти это решение.

Разоблачение сокета Cardano Node через TCP

Чтобы открыть файл сокета узла Cardano UNIX, нам сначала нужно установить пакет socat. Установка будет зависеть от вашей ОС и менеджера пакетов, но для большинства основных менеджеров пакетов socat должен быть доступен под тем же именем.
Чтобы установить socat на хост Debian (или любую другую ОС, использующую менеджер пакетов apt-get), вы можете просто ввести :

sudo apt-get update # update packages
sudo apt-get install socat

Теперь, когда мы убедились, что у нас есть требуемый пакет (socat), чтобы открыть путь к нашему сокету узла Cardano UNIX, мы должны выполнить следующую команду:

socat TCP-LISTEN:3333,fork,reuseaddr, UNIX-CONNECT:$CARDANO_NODE_SOCKET_PATH

Это должно запустить socat на локальном хосте и открыть файл сокета нашего узла Cardano, значение которого установлено в переменной среды CARDANO_NODE_SOCKET_PATH.
Если у вас не установлена ​​эта переменная среды, вы можете сделать это, запустив:

export CARDANO_NODE_SOCKET_PATH=’/path/to/cardano-node/node.socket’

Если вы используете узел Cardano с Docker, вы можете проверить мой репозиторий, где я разветвил репозиторий cardano-graphql и добавил контейнер Docker, который предоставляет файл сокета узла Cardano через TCP. В настоящее время он находится на версии 4.0.0 от cardano-graphql, но я могу обновить его, если к нему будет достаточно интереса.

Подключение к удаленному узлу Cardano через TCP

Чтобы подключиться к узлу cardano на удаленном хосте, мы должны выполнить следующую команду (учитывая, что у нас уже установлен socat на нашем компьютере и открытый сокет узла на другом):

socat UNIX-LISTEN:/path/to/local/node.socket,fork,reuseaddr,unlink-early, TCP:127.0.0.1:3333

Вы должны заменить значение UNIX-LISTEN на некоторый путь на нашем локальном компьютере, где мы собираемся хранить наш файл node.socket, а также заменить TCP. strong> значение с IP-адресом вашего удаленного компьютера.
Если мы теперь установим CARDANO_NODE_SOCKET_PATH в место назначения на нашем локальном компьютере, мы сможем использовать cardano cli без запуска узла cardano на нашем локальном компьютере.

Вывод

Хотя мы близки к смарт-контрактам в блокчейне Cardano, нам все еще нужен способ связи с нашим узлом Cardano через интерфейс командной строки. Наша команда в Cardano Blue воспользовалась преимуществами cardano-cli и удостоверилась, что торговля NFT возможна даже без доступных смарт-контрактов, но как только они появятся, я уверен, что разрабатывать подобные приложения будет намного проще.