Заглядываем под капот ноды Amadeus Protocol

20 авг 2026
4,477
80
14
3 недели

Недавно наткнулся на любопытный репозиторий node от команды amadeusprotocol. Проект позиционируется как исследовательский блокчейн-узел, и в нем сразу бросается в глаза смесь технологий. Основная кодовая база завязана на Rust и экосистему BEAM (Erlang/Elixir), а смарт-контракты собираются в WebAssembly прямо из AssemblyScript.

Здесь нет привычных для EVM-разработки инструментов вроде Hardhat или Foundry. Вместо этого разработчики предлагают управлять локальной сетью напрямую через интерактивную консоль Elixir и гонять транзакции по оптимизированному UDP-стеку. Давайте разберем, как это устроено и как поднять тестовую среду.

Что внутри проекта

Судя по скриптам сборки и коду, авторы делают упор на две вещи: высокую пропускную способность сетевого слоя и простую модель выполнения смарт-контрактов через WASM.

В репозитории можно выделить несколько интересных деталей:

  • Сетевой стек заточен под гигабитный UDP-трафик с агрессивными системными настройками буферов сокетов.
  • Смарт-контракты компилируются в .wasm файлы из привычного веб-разработчикам AssemblyScript (подмножество TypeScript).
  • Встроенный интерактивный REPL позволяет дергать методы контрактов и переводить токены одной строчкой Elixir-кода.
  • Роли узлов делятся на вычислители (computor) и валидаторы (trainer).

Сборка и запуск локального тестнета

Для сборки понадобится установленный Docker или Podman. Проект компилируется в изолированном контейнере с окружением Erlang и Rust:

Реклама
podman build --tag erlang_builder -f build.Dockerfile
./build.sh

После сборки получаем исполняемый бинарник amadeusd. Чтобы протестировать его локально, авторы предлагают поднять локальный эндпоинт и направить его на системный хост:

# Прописываем локальный домен в /etc/hosts
echo "127.0.0.1 nodes.amadeus.bot" | sudo tee -a /etc/hosts

# Разрешаем привязку к непривилегированным портам
sudo sysctl -w net.ipv4.ip_unprivileged_port_start=80

# Запускаем локальный узел
TESTNET=true WORKFOLDER=/tmp/testnet HTTP_IPV4=127.0.0.1 HTTP_PORT=80 ./amadeusd

Работа со смарт-контрактами через консоль

Самая занятная часть — взаимодействие с нодой через REPL. При запуске тестнета можно сразу получить ключи встроенного аккаунта trainer и развернуть тестовый контракт счетчика.

Вот как выглядит деплой и вызов методов контракта:

# Получаем ключи аккаунта
pk = Application.fetch_env!(:ama, :trainer_pk)
sk = Application.fetch_env!(:ama, :trainer_sk)

# Отправляем перевод токенов AMA
Testnet.call(sk, "Coin", "transfer", [pk, "1", "AMA"])

# Деплоим WASM-байткод счетчика
Testnet.deploy "/home/user/project/node/contract_samples/assemblyscript/counter.wasm"

# Читаем значение и вызываем инкремент
Testnet.call(sk, pk, "get", [])
Testnet.call(sk, pk, "increment", ["2"])

Контракт пишется на AssemblyScript, компилируется в WASM и отдается ноде на исполнение. Это заметно снижает порог входа по сравнению с изучением специфичных DSL вроде Move или даже Solidity.

Тюнинг системы под высокие сетевые нагрузки

В документации авторы уделяют много внимания сетевым настройкам Linux. Чтобы нода справлялась с интенсивным UDP-трафиком, предлагается выкрутить буферы сетевых сокетов и лимиты дескрипторов файлов в /etc/sysctl.conf:

net.core.wmem_max = 268435456
net.core.rmem_default = 212992
net.core.rmem_max = 268435456
net.core.netdev_max_backlog = 300000
net.core.optmem_max = 16777216
net.ipv4.udp_mem = 3060432 4080578 6120864
net.ipv4.conf.all.rp_filter = 1

Для фонового режима узел упаковывается в systemd-сервис, который запускает процесс внутри screen. Это дает возможность в любой момент подключиться к активной сессии через screen -rd amadeusd и отладить состояние.

Кому проект покажется интересным

Документация у проекта пока лаконичная, а в дисклеймере честно написано, что это экспериментальный исследовательский прототип. Тем не менее исходники будут полезны:

  • Разработчикам на Erlang и Elixir, которые хотят посмотреть на реализацию криптографических примитивов и распределенного консенсуса на BEAM.
  • Тем, кто изучает интеграцию WASM-рантаймов в серверные приложения.
  • Системным инженерам, которым интересна специфика тюнинга UDP-стека под высоконагруженные сетевые протоколы.

Код открыт, собрать и потыкать локальный тестнет со своими WASM-контрактами можно за 10–15 минут.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.