Zaglądamy pod maskę węzła Amadeus Protocol
Niedawno natknąłem się na ciekawy repozytorium węzła od zespołu amadeusprotocol. Projekt jest pozycjonowany jako węzeł badawczy blockchain i od razu wyróżnia się swoim miksem technologii. Główna baza kodu jest powiązana z Rust i ekosystemem BEAM (Erlang/Elixir), podczas gdy inteligentne kontrakty są kompilowane do WebAssembly bezpośrednio z AssemblyScript.
Nie znajdziesz tutaj znajomych narzędzi deweloperskich EVM, takich jak Hardhat czy Foundry. Zamiast tego deweloperzy oferują bezpośrednie zarządzanie lokalną siecią poprzez interaktywną konsolę Elixir oraz uruchamianie transakcji przez zoptymalizowany stos UDP. Rozłóżmy to na czynniki pierwsze i zobaczmy, jak to jest zbudowane oraz jak skonfigurować środowisko testowe.
Co znajdziesz w projekcie
Na podstawie skryptów budowania i kodu autorzy koncentrują się na dwóch rzeczach: wysokiej przepustowości warstwy sieciowej i prostym modelu wykonywania inteligentnych kontraktów poprzez WASM.
W repozytorium wyróżnia się kilka interesujących szczegółów:
- Stos sieciowy jest zoptymalizowany pod kątem ruchu UDP o przepustowości gigabitowej z agresywnymi ustawieniami buforów gniazd systemowych.
- Inteligentne kontrakty są kompilowane do plików WASM z AssemblyScript (podzbiór TypeScript), znanego deweloperom webowym.
- Wbudowany interaktywny REPL pozwala wywoływać metody kontraktów i przesyłać tokeny jedną linią kodu Elixir.
- Role węzłów są podzielone na computors i validators (trainers).
Budowanie i uruchamianie lokalnego testnetu
Będziesz potrzebować zainstalowanego Dockera lub Podmana do budowania. Projekt kompiluje się w izolowanym kontenerze ze środowiskiem Erlang i Rust:
podman build --tag erlang_builder -f build.Dockerfile
./build.sh
Po zbudowaniu otrzymujesz plik wykonywalny amadeusd. Aby przetestować go lokalnie, autorzy sugerują uruchomienie lokalnego endpointu i skierowanie go na host systemowy:
# Прописываем локальный домен в /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
Praca z inteligentnymi kontraktami przez konsolę
Najciekawszą częścią jest interakcja z węzłem przez REPL. Podczas uruchamiania testnetu możesz od razu pobrać wbudowane klucze konta trainer i wdrożyć testowy kontrakt licznika.
Oto jak wygląda wdrożenie i wywołanie metod kontraktu:
# Получаем ключи аккаунта
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"])
Kontrakt jest napisany w AssemblyScript, skompilowany do WASM i przekazany węzłowi do wykonania. To znacząco obniża barierę wejścia w porównaniu z nauką specyficznych DSL-i jak Move czy nawet Solidity.
Dostrajanie systemu pod wysokie obciążenia sieciowe
W dokumentacji autorzy poświęcają dużo uwagi ustawieniom sieciowym Linuksa. Aby poradzić sobie z intensywnym ruchem UDP, sugerują zwiększenie buforów gniazd i limitów deskryptorów plików w /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
W trybie działania w tle węzeł jest spakowany jako usługa systemd, która uruchamia proces wewnątrz screen. Umożliwia to połączenie z aktywną sesją w dowolnym momencie przez screen -rd amadeusd i debugowanie stanu.
Kto może uznać ten projekt za interesujący
Dokumentacja projektu jest wciąż dość minimalistyczna, a zastrzeżenie uczciwie stwierdza, że jest to eksperymentalny prototyp badawczy. Niemniej jednak kod źródłowy będzie przydatny dla:
- Deweloperów Erlang i Elixir, którzy chcą zobaczyć implementacje pierwotnych elementów kryptograficznych i rozproszonego konsensusu na BEAM.
- Osób studiujących integrację środowiska wykonawczego WASM w aplikacjach serwerowych.
- Inżynierów systemowych zainteresowanych dostrajaniem stosu UDP pod kątem protokołów sieciowych o wysokim obciążeniu.
Kod jest otwarty i możesz zbudować oraz poeksperymentować z lokalnym testnetem z własnymi kontraktami WASM w ciągu 10–15 minut.
Powiązane projekty