Aztec Sequencer节点

系统要求

  • Ubuntu Linux系统
  • 至少2核CPU 8GB RAM和100GB存储空间 1M以上带宽

快速开始

准备一个全新的钱包,拷贝私钥。钱包地址准备后续使用
使用钱包地址在接水 Sepolia ETH

https://sepolia-faucet.pk910.de/

谷歌账号进行接水:https://cloud.google.com/application/web3/faucet

如果是腾讯云,

出现类似root开头 #号结尾时,复制粘贴命令 回车开始
使用以下命令下载并运行安装脚本:

#!/bin/bash

declare -A MSG
MSG[zh,install_option]="安装 Aztec 节点"
MSG[zh,run_option]="运行 Aztec 节点"
MSG[zh,status_option]="查看节点状态"
MSG[zh,exit_option]="退出"
MSG[zh,enter_choice]="请输入选项"
MSG[zh,installing_dependencies]="正在安装依赖项..."
MSG[zh,aztec_installed]="Aztec 节点已安装。"
MSG[zh,starting_node]="正在启动 Aztec 节点..."
MSG[zh,current_status]="节点当前状态:"
MSG[zh,status_installed]="已安装"
MSG[zh,status_not_installed]="未安装"
MSG[zh,status_running]="正在运行"
MSG[zh,status_not_running]="未运行"
MSG[zh,node_is]="Aztec 节点"

print_header() {
  clear
  echo "==============================="
  echo "     AZTEC 节点管理工具"
  echo "==============================="
}

print_section() {
  echo "\n========== $1 =========="
}

check_aztec_installed() {
  [ -d "$HOME/aztec-packages" ]
}

install_aztec() {
  print_section "1. 更新系统软件包"
  sudo apt-get update && sudo apt-get upgrade -y
  check_error "更新系统软件包失败"

  # 2. 安装所需软件包
  print_section "2. 安装依赖项"
  sudo apt install curl iptables build-essential git wget lz4 jq make gcc nano automake autoconf tmux htop nvme-cli libgbm1 pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev -y
  check_error "安装依赖项失败"

  # 3. 安装 Docker
  print_section "3. 安装 Docker"
  # 移除冲突的软件包
  for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do 
    sudo apt-get remove $pkg -y
  done

  # 添加 Docker 的官方 GPG 密钥
  sudo apt-get update
  sudo apt-get install ca-certificates curl gnupg -y
  sudo install -m 0755 -d /etc/apt/keyrings
  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  sudo chmod a+r /etc/apt/keyrings/docker.gpg

  # 添加 Docker 仓库
  echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

  # 更新并安装 Docker
  sudo apt update -y && sudo apt upgrade -y
  sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
  check_error "安装 Docker 失败"

  # 测试 Docker 安装
  echo "测试 Docker 安装..."
  sudo docker run hello-world
  check_error "Docker 测试失败"

  # 启用 Docker 服务
  sudo systemctl enable docker
  sudo systemctl restart docker
  check_error "启用 Docker 服务失败"

  # 4. 安装 Aztec 工具
  print_section "4. 安装 Aztec 工具"
  echo "正在安装 Aztec 工具 (自动接受提示)..."

  # 创建一个临时 expect 脚本来处理交互式提示
  cat > /tmp/aztec_install.exp << 'EOF'
#!/usr/bin/expect -f
set timeout -1
spawn bash -i -c "curl -s https://install.aztec.network | bash -i"
expect "Do you wish to continue? (y/n)"
send "y\r"
expect "Building initial Docker image"
expect "Aztec is ready to use"
send_user "\nAztec 安装成功!\n"
exit 0
EOF

  # 使 expect 脚本可执行
  chmod +x /tmp/aztec_install.exp

  # 检查是否安装了 expect,如果未安装则进行安装
  if ! command -v expect &> /dev/null; then
      echo "正在安装 'expect' 软件包以处理交互式提示..."
      sudo apt-get install expect -y
      check_error "安装 'expect' 软件包失败"
  fi

  # 运行 expect 脚本并等待其完成
  echo "开始安装 Aztec。这可能需要几分钟时间..."
  echo "请耐心等待 Docker 下载并构建 Aztec 镜像。"
  echo ""
  /tmp/aztec_install.exp
  EXPECT_EXIT_CODE=$?
  
  # 清理临时 expect 脚本
  rm /tmp/aztec_install.exp

  # 检查安装是否成功
  if [ $EXPECT_EXIT_CODE -ne 0 ]; then
    echo "⚠️ 警告: Aztec 安装可能未正确完成。"
    echo "我们将继续设置,但如果需要,您可能需要再次运行安装程序。"
  else
    echo "✅ Aztec 安装成功!"
  fi

  # 正确处理 PATH 更新
  print_section "设置 Aztec PATH"
  echo "确保 Aztec 二进制文件在 PATH 中..."
  
  # 添加到当前会话的 PATH
  export PATH="$PATH:$HOME/.aztec/bin"
  
  # 添加到配置文件以实现持久化
  grep -qxF 'export PATH="$PATH:$HOME/.aztec/bin"' $HOME/.bash_profile || echo 'export PATH="$PATH:$HOME/.aztec/bin"' >> $HOME/.bash_profile
  grep -qxF 'export PATH="$PATH:$HOME/.aztec/bin"' $HOME/.bashrc || echo 'export PATH="$PATH:$HOME/.aztec/bin"' >> $HOME/.bashrc
  grep -qxF 'export PATH="$PATH:$HOME/.aztec/bin"' $HOME/.profile || echo 'export PATH="$PATH:$HOME/.aztec/bin"' >> $HOME/.profile
  
  # 如果以 root 用户身份运行,则也添加到 root 用户的配置中
  if [ "$(id -u)" -eq 0 ]; then
    grep -qxF 'export PATH="$PATH:/root/.aztec/bin"' /root/.bash_profile || echo 'export PATH="$PATH:/root/.aztec/bin"' >> /root/.bash_profile
    grep -qxF 'export PATH="$PATH:/root/.aztec/bin"' /root/.bashrc || echo 'export PATH="$PATH:/root/.aztec/bin"' >> /root/.bashrc
    grep -qxF 'export PATH="$PATH:/root/.aztec/bin"' /root/.profile || echo 'export PATH="$PATH:/root/.aztec/bin"' >> /root/.profile
  fi
  
  # 如果 Aztec 目录尚不存在,则创建它
  mkdir -p "$HOME/.aztec/bin" 2>/dev/null || true
  
  # 根据用户确定正确的路径
  if [ "$(id -u)" -eq 0 ]; then
    AZTEC_BIN_PATH="/root/.aztec/bin/aztec"
    AZTEC_UP_PATH="/root/.aztec/bin/aztec-up"
  else
    AZTEC_BIN_PATH="$HOME/.aztec/bin/aztec"
    AZTEC_UP_PATH="$HOME/.aztec/bin/aztec-up"
  fi
  
  # 5. 更新 Aztec
  print_section "5. 更新 Aztec"
  
  # 在运行更新之前检查 aztec 是否存在
  if [ -f "$AZTEC_BIN_PATH" ]; then
    echo "在 $AZTEC_BIN_PATH 找到 Aztec 二进制文件"
    
    # 检查 aztec-up 是否存在
    if [ -f "$AZTEC_UP_PATH" ]; then
      echo "正在运行 aztec-up latest..."
      "$AZTEC_UP_PATH" latest
      if [ $? -ne 0 ]; then
        echo "⚠️ 警告: aztec-up 命令遇到错误。"
        echo "这可能是暂时的。我们将继续其余的设置。"
      else
        echo "✅ Aztec 已成功更新到 latest"
      fi
    else
      echo "⚠️ 警告: 在 $AZTEC_UP_PATH 未找到 aztec-up 命令"
      echo "尝试直接使用 aztec 命令的替代方法..."
      
      # 尝试直接使用 aztec 命令
      "$AZTEC_BIN_PATH" up latest
      if [ $? -ne 0 ]; then
        echo "⚠️ 警告: 使用直接命令更新 Aztec 失败。"
        echo "我们将继续其余的设置。"
        echo "安装后您可能需要手动运行 'aztec-up latest'。"
      else
        echo "✅ Aztec 已成功更新到 latest"
      fi
    fi
  else
    echo "⚠️ 警告: 安装后在 $AZTEC_BIN_PATH 未找到 Aztec 二进制文件。"
    echo "这可能是因为:"
    echo "1. 安装仍在后台进行中"
    echo "2. Aztec 安装出现问题"
    echo ""
    echo "我们将继续其余的设置。"
    echo "您可能需要通过运行以下命令手动检查安装:"
    echo "  ls -la $HOME/.aztec/bin/"
    echo "安装完成后,您可能需要手动运行 'aztec-up latest'。"
  fi

  # 6. 配置防火墙
  print_section "6. 配置防火墙"
  # 检查是否安装了 ufw
  if ! command -v ufw &> /dev/null; then
      echo "正在安装 ufw..."
      sudo apt-get install ufw -y
      check_error "安装 ufw 失败"
  fi

  # 配置防火墙
  sudo ufw allow 22
  sudo ufw allow ssh
  sudo ufw allow 40400
  sudo ufw allow 8080

  # 如果防火墙尚未启用,则启用它
  sudo ufw --force enable
  check_error "配置防火墙失败"

  print_section "安装完成!"
  echo "以下内容已安装和配置:"
  echo "- 系统软件包已更新"
  echo "- 所有必需的依赖项已安装"
  echo "- Docker 已安装并正在运行"
  echo "- Aztec 工具已安装和更新"
  echo "- 防火墙已配置必要的端口"
  echo ""
  echo "Aztec 二进制文件位置: $HOME/.aztec/bin/aztec"
  echo "当前 Aztec 版本:"
  $HOME/.aztec/bin/aztec --version
  echo ""
  echo "您现在可以再次运行脚本并选择选项 2 来启动您的节点。"
  echo ""
  
  read -p "按 Enter 键返回主菜单..."
  main_menu
}

# 运行 Aztec 节点函数
run_aztec_node() {
  print_section "运行 Aztec 节点"

  # 检查 Aztec 是否已安装
  if ! check_aztec_installed; then
    echo "错误:Aztec未安装。请先安装Aztec。"
    read -p "按Enter键返回主菜单..."
    main_menu
    return
  fi

  # 如果 screen 不可用,则进行安装
  if ! command -v screen &> /dev/null; then
    echo "正在安装screen..."
    sudo apt-get install screen -y
    check_error "安装 screen 失败"
  fi

  # 获取公网 IP 地址
  echo "正在检测您的公共IP地址..."
  PUBLIC_IP=$(curl -s ipv4.icanhazip.com)
  check_error "检测公网 IP 地址失败"

  echo "您的公共IP地址是:$PUBLIC_IP"
  echo ""
  echo "请提供以下信息以启动您的Aztec节点:"
  echo "(随时按Ctrl+C取消)"
  echo ""

  read -p "输入您的L1 RPC URL: " RPC_URL
  check_error "读取 RPC URL 失败"

  read -p "输入您的L1共识主机URL(Beacon URL): " BEACON_URL
  check_error "读取 Beacon URL 失败"

  read -p "输入您的验证者私钥(以0x开头): " VALIDATOR_KEY
  check_error "读取验证者私钥失败"

  read -p "输入您的Coinbase地址(以0x开头): " COINBASE_ADDRESS
  check_error "读取 Coinbase 地址失败"

  # 确认信息
  echo ""
  echo "请确认您的节点配置:"
  echo "L1 RPC URL: $RPC_URL"
  echo "L1共识主机URL: $BEACON_URL"
  echo "验证者私钥: ${VALIDATOR_KEY:0:6}...${VALIDATOR_KEY: -4}"
  echo "Coinbase地址: $COINBASE_ADDRESS"
  echo "公共IP: $PUBLIC_IP"
  echo ""
  echo "重要提示:请确保您的L1钱包中有足够的ETH用于后续操作。"
  echo ""
  read -p "这些信息正确吗?(y/n): " CONFIRM

  if [[ "$CONFIRM" != "y" && "$CONFIRM" != "Y" ]]; then
    echo "设置已取消。您可以重试。"
    read -p "按Enter键返回主菜单..."
    main_menu
    return
  fi

  # 创建启动脚本
  SCRIPT_PATH="$HOME/start-aztec-node.sh"
  cat > $SCRIPT_PATH << EOL
#!/bin/bash
export PATH=\$PATH:\$HOME/.aztec/bin
aztec start --node --archiver --sequencer \\
  --network alpha-testnet \\
  --l1-rpc-urls $RPC_URL \\
  --l1-consensus-host-urls $BEACON_URL \\
  --sequencer.validatorPrivateKey $VALIDATOR_KEY \\
  --sequencer.coinbase $COINBASE_ADDRESS \\
  --p2p.p2pIp $PUBLIC_IP
EOL

  chmod +x $SCRIPT_PATH
  check_error "创建启动脚本失败"

  # 在 screen 会话中启动节点
  echo "正在screen会话中启动Aztec节点..."
  screen -dmS aztec bash -c "$SCRIPT_PATH"
  check_error "启动 screen 会话失败"

  echo ""
  echo "您的Aztec节点现在正在名为'aztec'的screen会话中运行"
  echo ""
  echo "要连接到screen会话并查看节点输出:"
  echo "  screen -r aztec"
  echo ""
  echo "要从screen会话分离(不停止节点):"
  echo "  按Ctrl+A,然后按D"
  echo ""
  echo "如果您需要稍后重新启动节点,可以运行:"
  echo "  $SCRIPT_PATH"
  echo ""
  read -p "按Enter键返回主菜单..."
  main_menu
}

check_status() {
  print_section "${MSG[$LANGUAGE,current_status]}"

  if check_aztec_installed; then
    echo "${MSG[$LANGUAGE,node_is]} ${MSG[$LANGUAGE,status_installed]}"
  else
    echo "${MSG[$LANGUAGE,node_is]} ${MSG[$LANGUAGE,status_not_installed]}"
  fi

  if pgrep -f "aztec start" > /dev/null; then
    echo "${MSG[$LANGUAGE,node_is]} ${MSG[$LANGUAGE,status_running]}"
  else
    echo "${MSG[$LANGUAGE,node_is]} ${MSG[$LANGUAGE,status_not_running]}"
  fi

  echo ""
  read -p "按 Enter 键返回主菜单..."
  main_menu
}

main_menu() {
  print_header
  echo "1) ${MSG[$LANGUAGE,install_option]}"
  echo "2) ${MSG[$LANGUAGE,run_option]}"
  echo "3) ${MSG[$LANGUAGE,status_option]}"
  echo "4) ${MSG[$LANGUAGE,exit_option]}"
  echo ""
  read -p "${MSG[$LANGUAGE,enter_choice]}: " CHOICE

  case $CHOICE in
    1) install_aztec ;;
    2) run_aztec_node ;;
    3) check_status ;;
    4) exit 0 ;; 
    *) echo "无效选择,请重试。" ; sleep 1 ; main_menu ;;
  esac
}

main_menu

使用说明

脚本启动后会显示主菜单,提供以下选项:

  1. 安装Aztec节点 — 安装所有依赖、Docker、Aztec工具和配置防火墙
  2. 运行Aztec节点 — 在screen会话中启动节点
  3. 检查状态 — 显示安装和运行状态,及节点日志
  4. Change Language — 切换为英文界面
  5. 退出 — 退出脚本

安装步骤

  1. 运行脚本后 按 1 自动安装,等待不动后回车 按 2 ,按照说明输入信息。

运行节点

  1. 按提示输入以下信息:
  • L1 RPC URL
  • L1共识主机URL (Beacon URL)

参考自建RPC教程 https://www.danny.hk/aztec%e5%85%a8%e8%8a%82%e7%82%b9rpc-gethprysm/

  • 钱包私钥 (以0x开头)
  • 钱包地址 (以0x开头)

3. 确认信息后,节点将在后台screen会话中启动

重要提示:请向您的钱包地址转入Sepolia ETH测试代币(建议0.01ETH以上),以确保节点正常运行

节点管理

  • 使用 screen -r aztec 查看节点输出
  • 按 Ctrl+A 然后按 D 可以从screen会话分离而不停止节点
  • 使用选项 3 随时检查节点状态和最近日志
  • 运行节点后,需要几分钟才能同步

DC角色

步骤1:获取最新证明的区块号:

curl -s -X POST -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"node_getL2Tips","params":[],"id":67}' \
http://localhost:8080 | jq -r ".result.proven.number"
  • 将返回的数字替换下边的区块号

第 2 步:生成同步证明

curl -s -X POST -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"node_getArchiveSiblingPath","params":["区块号","区块号"],"id":67}' \
http://localhost:8080 | jq -r ".result"
  • 运行后将会输出base64 字符串

第 3 步:在discord 的 operators| start-here 频道输入命令: /operator start (官方DC机器人有问题,等待修复)

  • 输入命令后,Discord 将显示如下选项字段:
  • address :您的钱包地址(以太坊地址)
  • block-number :用于验证的区块号(步骤 1 中的区块号)
  • proof :您的同步证明(步骤 2 中的 base64 字符串)

然后将会得到 Apprentice 角色