Un regard sous le capot du nœud Amadeus Protocol
Récemment, je suis tombé sur un dépôt de nœud intéressant de l'équipe amadeusprotocol. Le projet se positionne comme un nœud de blockchain de recherche, et il se démarque immédiatement par son mélange de technologies. La base de code principale est liée à Rust et à l'écosystème BEAM (Erlang/Elixir), tandis que les smart contracts sont compilés en WebAssembly directement depuis AssemblyScript.
Vous ne trouverez pas ici d'outils de développement EVM familiers comme Hardhat ou Foundry. À la place, les développeurs proposent une gestion directe du réseau local via une console Elixir interactive et l'exécution de transactions sur une pile UDP optimisée. Décortiquons la structure de ce système et comment configurer un environnement de test.
Ce qu'il y a à l'intérieur du projet
D'après les scripts de build et le code, les auteurs se concentrent sur deux choses : un débit élevé de la couche réseau et un modèle d'exécution de smart contracts simple via WASM.
Plusieurs détails intéressants ressortent dans le dépôt :
- La pile réseau est optimisée pour le trafic UDP gigabit avec des paramètres agressifs de tampons de sockets système.
- Les smart contracts sont compilés en fichiers WASM depuis AssemblyScript (un sous-ensemble de TypeScript), familier aux développeurs web.
- Le REPL interactif intégré permet d'appeler des méthodes de contrat et de transférer des jetons avec une seule ligne de code Elixir.
- Les rôles des nœuds sont divisés en computeurs et validateurs (entraîneurs).
Construction et exécution d'un testnet local
Vous aurez besoin de Docker ou Podman installé pour la compilation. Le projet se compile dans un conteneur isolé avec l'environnement Erlang et Rust :
podman build --tag erlang_builder -f build.Dockerfile
./build.sh
Après la compilation, vous obtenez un binaire exécutable amadeusd. Pour le tester localement, les auteurs suggèrent de lancer un endpoint local et de le pointer vers l'hôte système :
# Прописываем локальный домен в /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
Travailler avec les smart contracts via la console
La partie la plus intéressante est l'interaction avec le nœud via le REPL. Au démarrage du testnet, vous pouvez immédiatement obtenir les clés du compte intégré trainer et déployer un contrat counter de test.
Voici à quoi ressemble le déploiement et l'appel de méthodes de contrat :
# Получаем ключи аккаунта
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"])
Le contrat est écrit en AssemblyScript, compilé en WASM, et remis au nœud pour exécution. Cela réduit considérablement la barrière d'entrée par rapport à l'apprentissage de DSL spécifiques comme Move ou même Solidity.
Optimisation du système pour les charges réseau élevées
Dans la documentation, les auteurs accordent beaucoup d'attention aux paramètres réseau Linux. Pour gérer un trafic UDP intensif, ils suggèrent d'augmenter les tampons de sockets et les limites de descripteurs de fichiers dans /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
Pour le mode arrière-plan, le nœud est packagé en tant que service systemd qui lance le processus dans screen. Cela permet de se connecter à une session active à tout moment via screen -rd amadeusd et de déboguer l'état.
À qui ce projet pourrait-il plaire
La documentation du projet est encore assez minimale, et la clause de non-responsabilité indique honnêtement qu'il s'agit d'un prototype de recherche expérimental. Néanmoins, le code source sera utile pour :
- Les développeurs Erlang et Elixir qui souhaitent voir des implémentations de primitives cryptographiques et de consensus distribué sur BEAM.
- Ceux qui étudient l'intégration d'un runtime WASM dans des applications serveur.
- Les ingénieurs système intéressés par l'optimisation de la pile UDP pour les protocoles réseau à haute charge.
Le code est ouvert, et vous pouvez construire et explorer un testnet local avec vos propres contrats WASM en 10–15 minutes.
Projets similaires