跳转至

部署

策略只有在链上运行,才能创造价值。Almanak 将策略智能体部署到 Safe 多签钱包,并限定其权限范围,让智能体自主执行策略的同时,资金始终由你掌控。部署工作区涵盖智能体的完整生命周期:部署新的智能体、监控运行中的智能体,以及管理其状态。

部署是 Almanak 工作流的第三个阶段。在构建阶段准备好的策略,会在这里开始链上执行。


部署概览

仪表盘

部署仪表盘列出你的所有智能体及其当前状态。每一行显示:

  • 名称:智能体的显示名称。
  • 策略:智能体正在运行的策略。
  • 链:目标区块链。
  • 状态:当前执行状态。
  • 24 小时盈亏:过去 24 小时的盈亏。

页面顶部汇总所有活跃部署的钱包总价值。

智能体状态

状态 含义
部署中 正在链上设置钱包和权限
初始化中 智能体正在启动并加载配置
运行中 智能体正在执行策略
已暂停 执行暂时中止,可以恢复
已停止 智能体已被手动停止
已终止 智能体已被永久关闭
已关闭 策略仓位已平仓并完成处理
已归档 智能体记录作为历史保留,但不再运行

智能体详情

点击智能体即可打开详情视图,其中包含多个标签页。

表现

表现标签页显示运行中智能体的实时指标:当前钱包价值、24 小时盈亏、部署以来的总回报、未平仓仓位和代币余额。图表展示价值随时间的变化。

日志

实时执行日志展示智能体在每个执行周期中的操作。你可以按日志级别筛选,也可以按关键词搜索。日志是排查智能体行为问题的主要工具。

交易

这里按时间顺序列出智能体通过 Safe 钱包执行的链上交易。每笔交易都附有对应链的区块浏览器链接,例如 Etherscan、Arbiscan、Basescan 等。


部署流程

操作步骤

部署新的智能体时,向导会引导你完成以下步骤:

  1. 从策略库中选择策略,可以选择策略产物或 GitHub 策略。
  2. 在目标链上选择或创建 Safe 钱包。
  3. 配置策略参数,例如入场阈值、风险限额和仓位规模。
  4. 授予 Zodiac 权限,限定智能体的链上访问范围。
  5. 检查完整配置。
  6. 点击部署,启动智能体。

钱包准备

平台帮助你部署和配置 Safe 钱包,以供智能体执行策略。在新的链上部署时,部署流程会准备以下步骤,并由你批准执行:

  • 使用 CREATE2 计算预期的钱包地址。
  • 在链上部署 Safe 合约。
  • 配置钱包,将你设为所有者,并将智能体设为已授权模块。

每位用户在每条链上拥有一个 Safe 钱包。同一条链上的多个智能体共享该钱包,但各自拥有独立的权限范围。钱包所有权和批准权限始终由你保留。

Zodiac 权限

智能体不会获得钱包的全部访问权限。平台使用 Zodiac Roles,精确定义智能体可以调用哪些智能合约和函数。权限根据策略配置及其交互的协议生成。例如,部署用于管理 Aave 仓位的智能体只能调用与 Aave 相关的合约,不能调用任意地址。


为策略做好部署准备

如果你的策略是在本地通过 Almanak Code、你自己的 IDE 或其他工具构建的,请按照以下步骤进行准备,以便将其部署到 Almanak 托管环境。

仓库结构

你的策略必须存放在 GitHub 仓库中,并采用以下结构:

my-strategy/
├── pyproject.toml          # Required: dependencies and run config
├── config.json             # Required: strategy & funding configuration
├── strategy.py             # Required: strategy entry point
└── dashboard/
    └── ui.py               # Optional: custom Streamlit dashboard

config.json

config.json 声明策略的目标链,以及策略开始运行前需要注入的代币。平台会在部署时读取该文件,展示注资要求、验证 Safe 钱包是否已正确注资,并引导你完成部署流程。

字段定义:

字段 类型 是否必填 说明
chain string 是,或填写 chains 单链策略的目标链,例如 "arbitrum"。
chains string[] 是,或填写 chain 多链策略的目标链。与 chain 同时设置时,以 chains 为准。
trade_size_usd number 否 在部署界面中显示的单笔交易规模提示。
protocols string[] 否 策略交互的协议,仅用于展示。
token_funding TokenFunding[] 是 部署时策略所需的代币,详见下文。

支持的链标识符

请在 chain 和 chains 字段中使用以下标识符,拼写必须完全一致:

标识符 链 Chain ID
ethereum Ethereum 1
optimism Optimism 10
bnb BNB Smart Chain 56
gnosis Gnosis 100
polygon Polygon 137
sonic Sonic 146
worldchain World Chain 480
mantle Mantle 5000
base Base 8453
arbitrum Arbitrum 42161
avalanche Avalanche 43114
ink Ink 57073
linea Linea 59144
berachain Berachain 80094
scroll Scroll 534352
ethereum-sepolia Ethereum Sepolia 11155111
arbitrum-sepolia Arbitrum Sepolia 421614

token_funding

这是一个结构化列表,用于明确声明策略首次执行前必须注入 Safe 钱包的代币。每个条目都是一个对象:

字段 类型 是否必填 说明
symbol string 是 代币符号,例如 "WETH"。
address string 是 以 0x 开头的 ERC-20 地址。
chain string 否 默认为策略所使用的链。
amount string 是 非负的十进制数字字符串。
amount_type "token" | "usd" | "percentage" 是 指定如何解读 amount。

amount_type 决定 amount 的含义:

  • token:以代币本身的单位计量。"1.0" WETH 表示 1 ether。
  • usd:以 USD 价值计量。"5000" 表示注资时价值 $5,000 的该代币。
  • percentage:由策略代码自身读取的运行时提示,例如“将现有余额的 50% 分配给该代币”。部署界面不会将 percentage 条目视为注资要求,也不会在部署时提示你为这些条目注资。凡是必须在策略首次执行前注入的资金,都应使用 token 或 usd。

示例:

{
  "chain": "arbitrum",
  "trade_size_usd": 1000,
  "protocols": ["uniswap_v3"],
  "token_funding": [
    {
      "symbol": "WETH",
      "address": "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
      "amount": "1.0",
      "amount_type": "token"
    },
    {
      "symbol": "USDC",
      "address": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
      "amount": "5000",
      "amount_type": "usd"
    }
  ]
}

必须填写 token_funding

缺少有效 token_funding 字段的策略无法部署。缺少任一必填字段,或 amount_type 不是 token、usd、percentage 之一的条目,会被直接忽略,不会另行提示。

pyproject.toml

SDK v3 仓库

本节规则适用于 SDK v2 策略。依赖解析结果为 almanak 3.x 的仓库会被识别为 SDK v3,其策略由 strategy.py 和 config.yaml 编写而成,详见 SDK 代际。

pyproject.toml 必须将 Almanak SDK 列为依赖,并包含 [tool.almanak.run] 配置节。以下是一个最小示例:

[project]
name = "my-strategy"
version = "0.1.0"
dependencies = ["almanak>=2.10.0"]

[tool.almanak.run]
interval = 60

[tool.almanak.run] 配置参考:

键 类型 是否必填 说明
interval integer 是 执行间隔,单位为秒,取值范围为 5 至 3600。

验证规则

  • [project.dependencies] 中必须包含 almanak,并指定版本约束,例如 almanak>=2.10.0。
  • interval 必须是 5 到 3600 之间的整数。
  • 出于安全考虑,不允许在 [tool.uv.sources] 中使用 Git 源。

SDK 版本解析

部署时使用的 Almanak SDK 版本,由策略仓库的依赖解析结果决定。

Almanak 会从仓库 pyproject.toml 的 [project.dependencies] 中读取 almanak 条目,以检测 SDK 版本。部署时,平台根据仓库的依赖文件构建策略环境;如果仓库中有锁文件,也会使用该文件。如果仓库允许的 SDK 版本范围较宽,界面显示的版本可能与部署时最终解析出的版本不同。

明确约束 SDK 版本

请在 pyproject.toml 中使用清晰的 SDK 版本约束,并在 SDK 升级后重新部署前,检查依赖变更。almanak>=2.4.0 这类较宽的约束可能允许安装包含 API 变更的较新 SDK 版本。

安全升级

升级 SDK 时,请先验证策略代码仍与目标版本提供的 API 匹配,再重新部署。

推送到 GitHub

  1. 在 GitHub 上创建仓库,可以是公开仓库或私有仓库。
  2. 推送策略代码。
  3. 确保默认分支的根目录包含有效的 pyproject.toml 和 strategy.py。

在 Almanak 中连接 GitHub

  1. 前往构建工作区中的策略库。
  2. 点击连接 GitHub,并授权 Almanak 访问你的仓库。
  3. 你的策略仓库将出现在策略库中。平台会自动验证仓库结构,并显示检测到的 SDK 版本。

部署

  1. 从策略库中选择你的 GitHub 策略。
  2. 选择要部署的分支、标签或提交。
  3. 按照下文的部署流程操作:选择钱包、配置参数、授予权限,然后部署。

平台会克隆你的代码,构建 Docker 镜像,并启动智能体。整个过程通常需要 30 至 90 秒。


GitHub 部署(V2)

概览

V2 部署流程直接连接 GitHub 仓库。选择已关联 GitHub 的策略,选择分支或标签,为智能体命名,选择钱包,然后部署。平台负责构建、验证和容器化。

活跃部署限制

同一策略在任何时刻只能有一个活跃部署。如果你尝试部署一个已有智能体在运行的策略,平台会阻止此次部署,并显示当前运行中的智能体。部署新版本前,请先停止或终止当前部署。