新消息:Helius 收购 Light Protocol
Solana AI 机器人构建教程
博客/开发

如何在 Solana 上构建安全的 AI 智能体

Turnkey 资深工程师X 上的 Andrew MinLinkedIn 上的 Andrew Min
阅读需 8 分钟

Solana 上的 AI 智能体交易激增,引发了人们对自主智能体执行金融交易的热烈讨论。

当前这波 AI 代币热潮在 24 小时内产生了超过 10 亿美元的交易量,市值超过 95 亿美元。[1]

但在这些投机市场之外,加密领域正在发生一场更深层次的变革,而它建立在多年来自动化水平不断提升的基础之上。

机器人已经推动了绝大多数加密交易,在某些细分领域占比甚至高达 90%。[2]

它们还不是完全自主的 AI 智能体——至少目前还不是。但它们显然是其前身,并且正逐渐变得更加通用和独立。

它们的普及凸显了一个关键事实:加密基础设施天然适合程序化的自主交易。

安全挑战:AI 智能体如何安全访问 Solana 钱包?

随着 AI 智能体在 Solana 及其他领域兴起,一个重大安全挑战随之出现:自主系统如何在不影响安全性的情况下访问钱包? 

要执行链上操作,AI 智能体需要访问钱包。但将私钥存储在代码中会造成严重漏洞: 

  • 私钥会成为攻击者的首要目标
  • 私钥容易受到代码错误影响,可能导致资金损失 
  • 开发者很少以隔离资金的方式管理私钥
  • 私钥可能为失控的 AI 行为打开大门

2024 年 9 月发生的 Banana Gun 安全事件就是这些风险的真实案例。Banana Gun 是一款基于 Telegram 的交易机器人,攻击者利用其消息预言机中的漏洞,从用户钱包中窃取了 300 万美元。

无论原因是漏洞利用、程序错误还是未经约束的决策循环,能够直接访问钱包的机器人或智能体都可能执行非预期且不可逆的交易。

平衡安全性与自主性 

传统解决方案迫使开发者在安全性与真正的智能体自主性之间做出选择。传统方法要么暴露私钥,要么要求中心化托管,这两种方式都无法用于生产系统。

Turnkey 提供了一种解决方案。它是一套高度灵活的密钥管理基础设施,专为安全性、可扩展性和自动化而构建。Turnkey 不会暴露私钥,而是让 AI 智能体通过范围受限、由策略控制的 API 访问权限与钱包交互。

其工作原理如下: 

范围受限的 API 密钥

AI 智能体会获得受限的 API 凭证,这些凭证与特定钱包和操作绑定。

精细化策略

开发者可以精确定义 AI 智能体获准执行的操作,例如仅在特定条件下签署交易、与指定智能合约交互,或实施速率限制。

用户控制权

终端用户或开发者可以保留对钱包的完整控制权,同时将特定操作委托给 AI 智能体。

这种方式为何有效:

这种方法确保 AI 智能体无需持有原始私钥,即可自主与链上资产交互。它在解决安全问题的同时,也保留了加密技术无需信任和无需许可的特性。

此外,Turnkey 的可验证计算环境允许团队在任何人都能验证所运行代码的环境中部署 AI 智能体。我们稍后会详细介绍。

下面通过一个实际示例,了解如何为简单机器人配置具有钱包权限的 API 密钥。在此基础上,开发者可以进行下一步:将机器人演进为完全自主的 AI 智能体。

如何创建 Solana AI 智能体

我们将使用 Turnkey 构建一个安全的交易机器人,内容包括:

  • 设置具有策略控制的 Solana 钱包 
  • 为机器人创建仅限 API 访问的用户 
  • 定义策略来约束机器人的行为 
  • 使用 Jupiter Exchange 实现简单的交易函数

前置条件

开始编写代码前,你必须安装 Node.js 和 npm。

你还需要一个 Turnkey 账户。

在 Turnkey 中创建 Solana 钱包

登录 Turnkey 控制面板,然后:

  • 前往 Wallets
  • 点击 Create New Wallet
  • 选择 Solana 和 ED25519 作为钱包设置
  • 向此钱包存入一些 SOL 以供交易

为机器人创建仅限 API 访问的用户

接下来:

  • 前往 Users 选项卡
  • 点击 Add User
  • 在访问类型下选择 API key
  • 为其命名(例如“Trading Bot Alpha”)

记下用户 ID,然后点击批准。配置策略时会用到此密钥。

使用策略限制机器人

首先,前往 Policies 选项卡并点击 Add new policy.。然后配置策略,限制机器人可以执行的操作。我们来定义一项策略,确保机器人:

  • 只能执行代币转账(不能执行其他类型的交易)
  • 只能交易 SOL 和 USDC
  • 不能执行金额超过 1 SOL 的交易
代码
{
  "policyName": "AI Trading Bot Policy",
  "effect": "EFFECT_ALLOW",
  "consensus": "approvers.any(user, user.id == '<BOT_USER_ID>')",
  "condition": "solana.tx.instructions.count() == solana.tx.spl_transfers.count() && solana.tx.spl_transfers.all(transfer, transfer.token_mint == '<USDC_MINT>' || transfer.token_mint == '<SOL_MINT>') && solana.tx.spl_transfers.all(transfer, transfer.amount < 1000000000)"
}

设置项目

接下来,创建项目并安装依赖项。

代码
mkdir ai-trading-bot
cd ai-trading-bot
npm init -y
npm install @solana/web3.js @turnkey/sdk-server @turnkey/solana @jup-ag/api

创建一个 .env 文件来存储凭证。

代码
TURNKEY_API_PRIVATE_KEY="YOUR_API_PRIVATE_KEY_HERE"
TURNKEY_API_PUBLIC_KEY="YOUR_API_PUBLIC_KEY_HERE"
TURNKEY_ORGANIZATION_ID="YOUR_TURNKEY_ORGANIZATION_ID_HERE"

创建简单机器人

现在开始编写代码。创建一个 index.js 文件:

代码
import process from "node:process";
import { Turnkey } from "@turnkey/sdk-server";
import { TurnkeySigner } from "@turnkey/solana";
import {
  Connection,
  clusterApiUrl,
  PublicKey,
  VersionedTransaction
} from "@solana/web3.js";
import { createJupiterApiClient } from "@jup-ag/api";

// Load environment variables
process.loadEnvFile(".env");

// Define token addresses
const USDC = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
const SOL = "So11111111111111111111111111111111111111112";
const BOT_ADDRESS = "YOUR_TURNKEY_WALLET_ADDRESS_HERE";
const BOT_PUBLIC_KEY = new PublicKey(BOT_ADDRESS);

async function main() {
  // Initialize Turnkey and Jupiter clients
  const turnkey = new Turnkey({
    apiBaseUrl: "https://api.turnkey.com",
    apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY,
    apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY,
    defaultOrganizationId: process.env.TURNKEY_ORGANIZATION_ID,
  });

  const signer = new TurnkeySigner({
    organizationId: process.env.TURNKEY_ORGANIZATION_ID,
    client: turnkey.apiClient(),
  });

  const connection = new Connection(clusterApiUrl("mainnet-beta"), "confirmed");
  const jupiterClient = createJupiterApiClient();

创建由策略控制的凭证

接下来是关键部分。我们不会向 AI 智能体提供完整的钱包访问权限,而是创建由策略控制的凭证: 

代码
const agentUSDCPolicy = {
  "policyName": "Require consensus on Solana transactions containing SPL token transfers of over 1000 USDC",
  "effect": "EFFECT_ALLOW",
  "consensus": "approvers.count() >= 2",
  "condition": "solana.tx.spl_transfers.all(transfer, transfer.token_mint == 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v') && solana.tx.spl_transfers.all(transfer, transfer.amount > 1000000000)",
  "notes": "",
}

const agentSOLPolicy = {
  "policyName": "Require consensus on Solana transactions containing SOL transfers over 1 SOL",
  "effect": "EFFECT_ALLOW",
  "consensus": "approvers.count() >= 2",
  "condition": "solana.tx.transfers.count == 1 && solana.tx.transfers[0].amount > 1000000000",
  "notes": "",
}

const createUSDCPolicyResponse = await turnkey.apiClient().createPolicy(agentUSDCPolicy);

const createSOLPolicyResponse = await turnkey.apiClient().createPolicy(agentSOLPolicy);

实现机器人的交易函数

设置好约束后,就可以实现交易函数: 

代码
async function executeTrade(fromToken: string, toToken: string, amount: string) {
  // Get quote from Jupiter
  const quoteResponse = await jupiterClient.quoteGet({
    inputMint: fromToken,
    outputMint: toToken,
    amount: amount
  });

  // Create swap transaction
  const swapResponse = await jupiterClient.swapPost({
    swapRequest: {
      userPublicKey: BOT_PUBLIC_KEY,
      quoteResponse: quoteResponse,
    },
  });

  // Sign and submit transaction
  const transaction = VersionedTransaction.deserialize(
    Buffer.from(swapResponse.swapTransaction, "base64")
  );

  const signedTx = await signer.signTransaction(
    transaction,
    BOT_PUBLIC_KEY
  );

  const txid = await connection.sendRawTransaction(
    signedTx.serialize(),
    { skipPreflight: true, maxRetries: 5 }
  );

  await connection.confirmTransaction(txid);
  return txid;
}

main();

这样就完成了!

它还不是功能完整的 AI 智能体,但这个由策略控制的简单机器人已经奠定了基础。 

在此基础上,你可以扩展其自主性、添加决策逻辑,并将其演进为更复杂的智能体。

你还可以继续增强安全性,例如要求高风险交易必须经过多签批准,或允许智能体访问由终端用户控制的钱包。

不只是安全钱包:可验证环境如何释放安全 AI 智能体的潜力

确保 AI 智能体安全交易,不仅需要保护钱包访问权限,还需要验证智能体运行的是否确实是其声称运行的代码。

想象这样一个世界:AI 智能体能够安全交易,并在完全可验证的环境中运行。在这个环境里,任何人都可以独立确认智能体具体运行了哪些代码。

Turnkey 的可验证计算基础设施让任何人都能验证安全隔离区内运行的软件,从而解决当今可信软件领域最大的挑战之一。

Turnkey 的核心是利用可信执行环境(TEE),尤其是 AWS Nitro Enclaves,为敏感操作提供防篡改的运行环境。这些隔离区作为独立的虚拟机运行,没有持久化存储,无法访问外部网络,启动后也无法修改。这保证了隔离区一旦完成配置,其中的代码和数据就不会受到外部干扰,即使基础设施提供商本身也无法干预。

然而,仅有安全执行还不够,真正重要的是可验证性。Turnkey 通过三项关键创新实现这一目标:

1. 远程证明

每个 Turnkey 隔离区都会生成一份密码学证明,精确证明其正在运行的代码。该证明包含隔离区操作系统和应用程序二进制文件的哈希值,并由 AWS 的 Nitro Secure Module(NSM)签名。不久后,任何人都能独立验证这份证明,确认隔离区运行的是预期软件。

2. QuorumOS(QOS)

一个专为可验证性设计的精简开源操作系统。QOS 确保每个隔离区只运行经过批准且可审计的代码,并提供 QOS Manifests。这些机器可读的证明可将隔离区的执行过程与公开可验证的软件指纹关联起来。

3. StageX 与可复现构建

为消除供应链攻击的风险,Turnkey 强制采用可复现构建。任何在隔离区内运行的二进制文件都可以根据人类可读的源代码独立重新编译,以验证其是否被篡改。这确保开发者审查的代码与安全环境中运行的软件之间存在 1:1 映射。

通过结合 TEE、远程证明和可复现构建,Turnkey 能以绝对可验证的方式运行应用程序,无论是用于钱包安全、密码学签名还是执行 AI 智能体。这种架构超越了默认信任的传统云安全模型,迈向了安全性可证明、透明且去中心化的新范式。

这对 AI 智能体为何重要

可验证执行环境不仅能提高安全性,还能拓展自主系统、金融应用以及任何需要可证明信任的服务的设计空间。 

当用户能够独立验证隔离区内运行的软件时,新的可能性便随之出现,例如无需信任的 AI 执行。开发者和用户可以放心避开“绿野仙踪式”智能体(即由真人冒充真正的 AI 智能体)。

除了可验证 AI,团队还可以部署从链下协处理器到可信预言机和 AI 推理引擎等各种系统。所有系统都有密码学证明,确保它们完全按承诺执行,且无法被单方面更新。下表列出了一些适合迁移到可证明环境中的敏感工作负载示例:

想参与其中,并以可验证的方式运行自己的关键应用程序吗?

Turnkey 团队现正与部分团队合作,在完全可验证的执行环境中部署 AI 智能体和其他应用程序。在这种环境中,任何人都可以验证后台运行的确切代码。

其他资源

  1. CoinGecko — AI 智能体市值
  2. QZ — 机器人完成了 90% 的稳定币交易
  3. Turnkey 的新白皮书
  4. Turnkey 官方网站
  5. 联系我们,探索如何部署可验证 AI

订阅 Helius

及时了解 Solana 开发的最新动态,并在我们发布新内容时收到更新

放大图片