用Docker/Podman构建AMA Protocol完整节点的详细步骤
2026/8/21 14:24:50 网站建设 项目流程

用Docker/Podman构建AMA Protocol完整节点的详细步骤

【免费下载链接】node项目地址: https://gitcode.com/GitHub_Trending/node95/node

想快速搭建一个AMA Protocol 完整节点?本文为你提供一套基于 Docker 与 Podman 容器化构建的完整指南。AMA Protocol 是一个面向 AI Agent 场景的隐私 Layer 1 公链,采用基于矩阵乘法(MatMul)的**有用工作量证明(UPoW)**机制,区块时间仅 500ms,支持 WASM 智能合约与 BLS12-381 签名。通过容器构建完整节点,可以避免本地装 Erlang、Elixir、Rust 和 LLVM 全家桶的繁琐过程,让任何人都能轻松上手。

认识 AMA Protocol 完整节点

在动手构建之前,先了解你将要运行的节点到底是什么。AMA 完整节点由 Elixir 编写核心逻辑、Rust 编写高性能原生模块(共识、存储、加密),最终通过 Bakeware 打包成单个可执行文件amadeusd,无需安装任何运行时依赖,开箱即跑。

协议参数数值
区块时间500ms
Epoch 长度100,000 区块
最大供应量10 亿 AMA
共识算法MatMul UPoW
签名算法BLS12-381
智能合约WASM
证明结构排序 Merkle Tree
序列化格式VecPak

💡 为什么推荐容器化构建?因为完整构建需要编译 OpenSSL、OTP、Elixir、Rust 工具链以及 LLVM/Clang,本机直接编译耗时且容易踩环境坑。Docker/Podman 镜像一次性封装好所有依赖,构建可复现、升级方便。

构建前需要准备什么

AMA 节点推荐在 Linux 环境下运行,官方测试环境为:

  • Linux Kernel 6.8
  • Ubuntu 24.04
  • Docker 或 Podman(二选一即可,命令几乎通用)

磁盘建议预留 20GB 以上空间,内存建议 8GB 起。对于只想体验的用户,本机安装 Podman 即可无缝替换 Docker 命令。

第一步:获取节点源码

完整节点的全部源码托管在 GitCode 平台,首先克隆仓库:

git clone https://gitcode.com/GitHub_Trending/node95/node cd node/ex

项目核心目录结构说明:

  • ex/build.Dockerfile:容器构建镜像定义,封装全部编译工具链
  • ex/build.sh:一键编译脚本,产出amadeusd单文件二进制
  • ex/mix.exs:Elixir 项目配置,定义了 Bakeware release 打包方式
  • ex/config/runtime.exs:运行时配置,所有环境变量在此读取
  • ex/native/rdb/src/consensus/:Rust 编写的共识与内置合约源码
  • contract_samples/:WASM 智能合约示例(AssemblyScript 与 Rust)

第二步:用 Docker 构建 AMA 节点编译镜像

ex/目录下执行 Docker 构建命令,生成名为erlang_builder的编译镜像:

docker build --tag erlang_builder -f build.Dockerfile .

如果使用 Podman,把命令里的docker换成podman即可:

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

这一步骤耗时较长,因为 build.Dockerfile 需要完成以下工作:

  1. 基于ubuntu:24.04基础镜像安装编译工具链(build-essential、clang-19、llvm-19、mold 等)
  2. 从源码编译 OpenSSL 3.6.3,并配置弱加密套件支持
  3. 源码编译 Erlang/OTP 29(启用 microstate accounting)
  4. 源码编译 Elixir 1.20 并安装 hex/rebar 工具
  5. 安装 Rust 工具链(rustup 默认配置)

⏱️ 耐心等待:整个镜像构建可能需要 30 分钟到 1 小时,取决于网络和机器性能。构建完成后镜像会被缓存,后续迭代编译无需重复构建。

第三步:一键编译生成 amadeusd 完整节点二进制

镜像就绪后,运行项目自带的编译脚本:

./build.sh

该脚本的核心逻辑位于 build.sh,它会以erlang_builder镜像启动临时容器,把当前项目挂载进容器内,然后依次执行:

  1. 设置MIX_ENV=prod生产环境
  2. 配置 clang-19 编译器和-march=haswell优化参数
  3. 通过 Rust 的 mold 链接器加速链接过程
  4. 执行mix deps.get拉取依赖
  5. 执行mix release构建 Bakeware 发布包
  6. 把产物复制为amadeusd单文件二进制,并计算 sha256 校验和

编译结束后,ex/目录下会生成amadeusd文件。可以检查一下文件属性确认构建成功:

ls -lh amadeusd sha256sum amadeusd

🚀 这个amadeusd是自包含可执行文件,可以拷贝到任何兼容 Linux 机器上直接运行,无需安装 Erlang、Elixir 或 Rust。

第四步:快速启动本地测试网节点

构建完成后,最稳妥的验证方式是先跑一个本地测试网节点。把 hosts 指向本地,然后启动:

# 把 RPC 端点指向 localhost sudo vim /etc/hosts # 添加一行 127.0.0.1 nodes.amadeus.bot # 允许非 root 监听 80/443 端口 sudo sysctl -w net.ipv4.ip_unprivileged_port_start=80 # 启动本地测试网节点 TESTNET=true WORKFOLDER=/tmp/testnet0 HTTP_IPV4=127.0.0.1 HTTP_PORT=80 ./amadeusd

节点启动后进入 REPL 交互界面,可以测试转账和部署智能合约:

# 转账测试 pk = Application.fetch_env!(:ama, :trainer_pk) sk = Application.fetch_env!(:ama, :trainer_sk) Testnet.call(sk, "Coin", "transfer", [pk, "1", "AMA"])

第五步:配置关键环境变量运行完整节点

正式运行时,节点行为由环境变量控制,全部在 runtime.exs 中解析。下表列出最常用的配置项:

环境变量默认值说明
WORKFOLDER~/.cache/amadeusd/节点数据目录(密钥、数据库)
HTTP_IPV40.0.0.0HTTP/RPC 监听地址
HTTP_PORT80HTTP/RPC 监听端口
UDP_IPV40.0.0.0UDP 对等网络监听地址
UDP_PORT36969UDP 对等网络端口
MAX_PEERS300最大对等节点数
SNAPSHOT_HEIGHT77736265快照高度,用于快速同步
RPC_URL主网 RPC 地址RPC 服务地址
ARCHIVALNODE关闭是否运行归档节点
HISTORY_KEEP_EPOCHS10保留历史数据的 epoch 数
COMPUTOR关闭是否作为 Computor 参与 UPoW 计算
AUTOUPDATE关闭是否开启自动更新跟随链

运行主网或测试网节点的通用命令示例:

WORKFOLDER=/data/ama-mainnet HTTP_PORT=80 ./amadeusd

第六步:用 systemd 守护节点并开启自动更新

长期运行的完整节点推荐注册为 systemd 服务,配合自动更新功能保持节点跟随链同步。先调整系统限制,把配置写入/etc/security/limits.conf提升文件描述符上限(1024 万)并放开 memlock。

然后创建服务单元文件/etc/systemd/system/amadeusd.service

[Unit] Description=AmadeusD After=network-online.target [Service] Type=forking LimitNOFILE=1048576 KillMode=control-group Restart=always RestartSec=3 User=root WorkingDirectory=/root/ Environment="AUTOUPDATE=true" ExecStart=/usr/bin/screen -UdmS amadeusd bash -c './amadeusd' [Install] WantedBy=default.target

启用并启动服务:

systemctl enable amadeusd systemctl start amadeusd screen -rd amadeusd

如果想让节点同时作为 Computor 参与 UPoW 挖矿计算,在服务里追加环境变量:

# 作为普通 Computor Environment="COMPUTOR=true" # 作为验证者(trainer) Environment="COMPUTOR=trainer"

第七步:针对高带宽网络的系统调优

AMA 节点通过 UDP 传输对等数据,在 1Gbps 网络下建议按以下参数优化内核(写入/etc/sysctl.conf):

# 提升 UDP 协议栈缓冲区 net.core.wmem_max = 268435456 net.core.rmem_max = 268435456 net.core.netdev_max_backlog = 300000 net.ipv4.udp_mem = 3060432 4080578 6120864 # 正常网络环境下阻止伪造 UDP 包 net.ipv4.conf.all.rp_filter=1 net.ipv4.conf.default.rp_filter=1

再在/etc/systemd/system.conf中放开任务数与文件描述符限制(DefaultTasksMax=infinityDefaultLimitNOFILE=infinity等),确保节点长时间稳定运行。

常见问题排查

镜像构建失败?多为网络问题导致源码下载失败,重试即可;也可配置代理加速 GitHub 资源访问。

编译内存不足?Rust 编译与 OTP 编译都很吃内存,建议构建时保证 8GB 以上可用内存。

amadeusd无法监听 80 端口?非 root 用户需要执行sudo sysctl -w net.ipv4.ip_unprivileged_port_start=80,或改用HTTP_PORT=8080等高位端口。

节点无法同步?检查时间同步(节点启动时会校验系统时间),建议启用 systemd-timesyncd 或 chrony。

总结

借助 Docker/Podman 容器化构建,搭建 AMA Protocol 完整节点的核心流程可以浓缩为三步:构建编译镜像、运行编译脚本产出amadeusd二进制、按需配置环境变量启动节点。整个过程无需在宿主机安装任何语言运行时,非常适合新手快速上手,也便于生产环境批量部署与升级。现在就去克隆源码,动手构建属于你自己的 AMA 完整节点吧!

【免费下载链接】node项目地址: https://gitcode.com/GitHub_Trending/node95/node

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询