>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Rust

深入了解 Amadeus Protocol 节点内部原理

最近发现了 amadeusprotocol 团队的节点代码仓库。该项目定位为研究型区块链节点,其技术组合立即引起了我的注意。主代码库基于 Rust 和 BEAM 生态系统(Erlang/Elixir),智能合约直接从 AssemblyScript 编译为 WebAssembly。

这里没有 Hardhat 或 Foundry 等熟悉的 EVM 开发工具。相反,开发者提供了通过交互式 Elixir 控制台直接管理本地网络的功能,以及通过优化的 UDP 协议栈运行交易。让我们深入了解其架构设计,并探讨如何搭建测试环境。

项目内部结构

从构建脚本和代码来看,作者专注于两个核心目标:实现高网络层吞吐量和通过 WASM 提供简化的智能合约执行模型。

代码库中有几个值得关注的细节:

  • 网络栈针对千兆 UDP 流量进行了优化,采用了激进的系统套接字缓冲区配置。
  • 智能合约从 AssemblyScript(TypeScript 的子集,对 Web 开发者来说很熟悉)编译为 WASM 文件。
  • 内置的交互式 REPL 允许用一行 Elixir 代码调用合约方法和转移代币。
  • 节点角色分为计算节点(computors)和验证节点(trainers)。

构建并运行本地测试网

构建需要安装 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 后交给节点执行。与学习 Move 或 Solidity 等特定 DSL 相比,这大大降低了入门门槛。

针对高网络负载进行系统调优

文档中作者非常关注 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 连接到活动会话并调试状态。

谁会觉得这个项目有趣

项目文档仍然相当有限,声明中明确表示这是一个实验性研究原型。尽管如此,源代码对以下人群会很有用:

  • 希望了解 BEAM 上加密原语和分布式共识实现的 Erlang 和 Elixir 开发者。
  • 研究 WASM 运行时在服务器应用中集成的开发者。
  • 对高负载网络协议 UDP 协议栈调优感兴趣的系统工程师。

代码是开源的,你可以在 10–15 分钟内构建并用你自己的 WASM 合约探索本地测试网。

相关项目