>_ DevTrendsde

Sprache

Start

Sprachen

Bereiche

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicherheit
Rust

Ein Blick unter die Haube des Amadeus Protocol Node

Kürzlich bin ich auf ein interessantes Node-Repository vom amadeusprotocol-Team gestoßen. Das Projekt positioniert sich als Forschungs-Blockchain-Node und sticht sofort durch seine Technologiemischung hervor. Die Hauptcodebasis ist an Rust und das BEAM-Ökosystem (Erlang/Elixir) gebunden, während Smart Contracts direkt aus AssemblyScript in WebAssembly kompiliert werden.

Hier gibt es keine vertrauten EVM-Entwicklungstools wie Hardhat oder Foundry. Stattdessen bieten die Entwickler eine direkte lokale Netzwerkverwaltung durch eine interaktive Elixir-Konsole und das Ausführen von Transaktionen über einen optimierten UDP-Stack. Lassen Sie uns aufschlüsseln, wie dies strukturiert ist und wie Sie eine Testumgebung einrichten.

Was steckt im Projekt

Basierend auf den Build-Skripten und dem Code konzentrieren sich die Autoren auf zwei Dinge: hohen Netzwerkschicht-Durchsatz und ein einfaches Smart-Contract-Ausführungsmodell über WASM.

Mehrere interessante Details stechen im Repository hervor:

  • Der Netzwerk-Stack ist für Gigabit-UDP-Traffic mit aggressiven System-Socket-Buffer-Einstellungen optimiert.
  • Smart Contracts werden aus AssemblyScript (einer TypeScript-Teilmenge), die Webentwicklern vertraut ist, in WASM-Dateien kompiliert.
  • Die eingebaute interaktive REPL ermöglicht das Aufrufen von Contract-Methoden und Transferieren von Tokens mit einer einzigen Zeile Elixir-Code.
  • Node-Rollen sind in Computors und Validators (Trainer) unterteilt.

Aufbauen und Ausführen eines lokalen Testnets

Sie müssen Docker oder Podman installiert haben, um zu bauen. Das Projekt kompiliert in einem isolierten Container mit Erlang- und Rust-Umgebung:

podman build --tag erlang_builder -f build.Dockerfile
./build.sh

Nach dem Build erhalten Sie eine ausführbare Binärdatei amadeusd. Um sie lokal zu testen, schlagen die Autoren vor, einen lokalen Endpunkt hochzufahren und auf den System-Host zu zeigen:

# Прописываем локальный домен в /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

Arbeiten mit Smart Contracts über die Konsole

Der interessanteste Teil ist die Interaktion mit dem Node durch die REPL. Beim Starten des Testnets können Sie sofort die eingebauten Account-Schlüssel trainer abrufen und einen Test-Counter-Contract bereitstellen.

So sieht das Bereitstellen und Aufrufen von Contract-Methoden aus:

# Получаем ключи аккаунта
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"])

Der Contract ist in AssemblyScript geschrieben, wird zu WASM kompiliert und dem Node zur Ausführung übergeben. Dies senkt die Einstiegshürde erheblich im Vergleich zum Erlernen spezifischer DSLs wie Move oder sogar Solidity.

System-Tuning für hohe Netzwerklasten

In der Dokumentation widmen die Autoren den Linux-Netzwerkeinstellungen viel Aufmerksamkeit. Um intensiven UDP-Traffic zu bewältigen, schlagen sie vor, Socket-Buffer und Dateideskriptor-Limits in /etc/sysctl.conf hochzuschrauben:

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

Für den Hintergrundmodus ist der Node als systemd-Service verpackt, der den Prozess innerhalb von screen startet. Dies macht es möglich, jederzeit über screen -rd amadeusd eine aktive Sitzung zu verbinden und den Zustand zu debuggen.

Für wen könnte dieses Projekt interessant sein

Die Projektdokumentation ist noch recht minimal, und der Disclaimer erklärt ehrlich, dass dies ein experimentelles Forschungsprototyp ist. Nichtsdestotrotz wird der Quellcode nützlich sein für:

  • Erlang- und Elixir-Entwickler, die Implementierungen von kryptografischen Primitiven und verteiltem Konsens auf BEAM sehen möchten.
  • Diejenigen, die WASM-Runtime-Integration in Server-Anwendungen studieren.
  • Systemingenieure, die sich für UDP-Stack-Tuning für hochlastige Netzwerkprotokolle interessieren.

Der Code ist offen, und Sie können in 10–15 Minuten einen lokalen Testnet mit Ihren eigenen WASM-Contracts aufbauen und erkunden.

Ähnliche Projekte