>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

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

Un occhiata sotto il cofano del nodo Amadeus Protocol

Recentemente mi sono imbattuto in un interessante repository di nodi del team amadeusprotocol. Il progetto si posiziona come un nodo blockchain di ricerca, e si distingue immediatamente per il suo mix di tecnologie. Il codebase principale è legato a Rust e all'ecosistema BEAM (Erlang/Elixir), mentre gli smart contract vengono compilati in WebAssembly direttamente da AssemblyScript.

Non ci sono gli strumenti di sviluppo EVM familiari come Hardhat o Foundry. Invece, gli sviluppatori offrono una gestione diretta della rete locale attraverso una console interattiva Elixir e l'esecuzione di transazioni su uno stack UDP ottimizzato. Analizziamo come è strutturato e come configurare un ambiente di test.

Cosa c'è dentro il progetto

Basandosi sugli script di build e sul codice, gli autori si concentrano su due cose: un'elevata velocità di throughput del livello di rete e un modello semplice di esecuzione degli smart contract tramite WASM.

Nel repository emergono diversi dettagli interessanti:

  • Lo stack di rete è ottimizzato per traffico UDP gigabit con impostazioni aggressive dei buffer dei socket di sistema.
  • Gli smart contract vengono compilati in file WASM da AssemblyScript (un sottoinsieme di TypeScript), familiare agli sviluppatori web.
  • La REPL interattiva integrata permette di chiamare metodi dei contract e trasferire token con una singola riga di codice Elixir.
  • I ruoli dei nodi sono divisi in computor e validator (trainer).

Build ed esecuzione di un testnet locale

Avrai bisogno di Docker o Podman installato per la build. Il progetto viene compilato in un container isolato con ambiente Erlang e Rust:

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

Dopo la build, ottieni un binario eseguibile amadeusd. Per testarlo localmente, gli autori suggeriscono di avviare un endpoint locale e puntarlo all'host di sistema:

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

Lavorare con gli smart contract tramite la console

La parte più interessante è interagire con il nodo attraverso la REPL. All'avvio del testnet, puoi immediatamente ottenere le chiavi dell'account integrato trainer e distribuire un contratto counter di test.

Ecco come appare la distribuzione e la chiamata dei metodi del contratto:

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

Il contratto è scritto in AssemblyScript, compilato in WASM, e passato al nodo per l'esecuzione. Questo abbassa significativamente la barriera d'ingresso rispetto all'apprendimento di DSL specifici come Move o anche Solidity.

Ottimizzazione del sistema per carichi di rete elevati

Nella documentazione, gli autori dedicano molta attenzione alle impostazioni di rete Linux. Per gestire traffico UDP intensivo, suggeriscono di aumentare i buffer dei socket e i limiti dei file descriptor in /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

Per la modalità background, il nodo è impacchettato come servizio systemd che lancia il processo dentro screen. Questo permette di connettersi a una sessione attiva in qualsiasi momento tramite screen -rd amadeusd e eseguire il debug dello stato.

A chi potrebbe interessare questo progetto

La documentazione del progetto è ancora piuttosto minima, e il disclaimer dichiara onestamente che questo è un prototipo di ricerca sperimentale. Tuttavia, il codice sorgente sarà utile per:

  • Sviluppatori Erlang e Elixir che vogliono vedere implementazioni di primitive crittografiche e consenso distribuito su BEAM.
  • Chi studia l'integrazione di runtime WASM in applicazioni server.
  • Ingegneri di sistema interessati all'ottimizzazione dello stack UDP per protocolli di rete ad alto carico.

Il codice è aperto, e puoi buildare e esplorare un testnet locale con i tuoi WASM contract in 10-15 minuti.

Progetti correlati