{"content":{"title":"如何在 Solana 上构建安全的 AI 代理","body":">- 原文链接：[www.helius.dev/blog...](https://www.helius.dev/blog/how-to-build-a-secure-ai-agent-on-solana)\r\n>- 译者：[AI翻译官](https://learnblockchain.cn/people/19584)，校对：[翻译小组](https://learnblockchain.cn/people/412)\r\n>- 本文链接：[learnblockchain.cn/article…](https://learnblockchain.cn/article/10748)\r\n    \r\nAI 代理在 Solana 上的激增引发了关于自主代理进行金融交易的激烈猜测。\r\n\r\n当前这一波 AI 代币在 24 小时的交易量超过了 10 亿美元，市场总市值超过 95 亿美元。 但除了这些投机市场之外，数字货币领域已经在悄然发生更深层次的转变——这是基于多年来不断提高的自动化程度。\r\n\r\n机器人已经驱动了大多数加密交易，在某些加密领域达到了 90%。  这些尚未完全自主的 AI 代理但明显是先驱，随着时间的推移变得更加通用和独立。\r\n\r\n它们的普遍存在突显出一个至关重要的事实：加密基础设施独特地适合编程的、自主的交易。\r\n\r\n### 安全挑战：AI 代理如何安全访问 Solana 钱包？\r\n\r\n随着 AI 代理在 Solana 及其他领域的崛起，出现了一个重大的安全挑战：如何让自主系统在不妥协安全性的情况下访问 [钱包](https://www.helius.dev/blog/solana-embedded-wallets)？\r\n\r\n要执行链上操作，AI 代理需要钱包访问权限。但是，代码中存储的私钥会造成巨大的安全漏洞：\r\n\r\n*   它们是攻击者的主要目标\r\n*   它们容易受到可能导致资金损失的代码错误的影响\r\n*   开发者很少以能分隔资金的方式来结构化它们\r\n*   它们可能为流氓 AI 行为打开大门\r\n\r\n2024 年 9 月，一个真实的风险案例发生在 Banana Gun，这是一个基于 Telegram 的交易机器人，攻击者利用其消息预言机中的漏洞从用户钱包中窃取了 300 万美元。\r\n\r\n一个具有直接钱包访问权限的机器人或代理可以因漏洞、错误或未检查的决策循环而进行意外、不可逆转的交易。\r\n\r\n### 平衡安全性与自主性\r\n\r\n传统解决方案迫使开发者在安全性和真正的代理自主性之间做出选择。传统方法要么暴露私人密钥，要么要求中心化托管，这两者对生产系统都是不可接受的。\r\n\r\n有一个解决方案是 [Turnkey](https://www.turnkey.com/)，这是一个高度灵活的密钥管理基础设施，专门为安全、规模和自动化而构建。Turnkey 使 AI 代理能够通过受限的、策略控制的 API 访问与钱包进行交互，而不是暴露私钥。\r\n\r\n以下是其工作原理：\r\n\r\n#### 范围 API 密钥\r\n\r\nAI 代理接收与特定钱包和操作关联的有限 API 凭据。\r\n\r\n#### 细粒度策略\r\n\r\n开发者可以精确定义 AI 代理被允许执行的操作——无论是根据某些条件签署交易、与特定智能合约交互还是强制执行速率限制。\r\n\r\n#### 用户控制\r\n\r\n最终用户或开发者可以在委托特定操作给 AI 代理的同时保留对钱包的完全控制权。\r\n\r\n#### 为何有效：\r\n\r\n这种方法确保 AI 代理能够自主与链上资产互动，而无需持有原始私钥，从而解决了安全问题，同时保持了加密技术的无信任和无需许可的特性。\r\n\r\n此外，Turnkey 的 [可验证计算环境](https://whitepaper.turnkey.com/) 使团队能够在任何人都可以验证正在运行的代码的环境中部署 AI 代理。稍后我们再讨论这个。\r\n\r\n让我们通过为一个简单的机器人配置一个带有钱包权限的 API 密钥来走个实践示例。从这里，开发者可以迈出下一步：将机器人演变为完全自主的 AI 代理。\r\n\r\n## 如何创建一个 Solana AI 代理\r\n\r\n让我们使用 Turnkey 构建一个安全的交易机器人。我们将涵盖：\r\n\r\n*   设置具有策略控制的 Solana 钱包\r\n*   为机器人创建一个仅 API 用户\r\n*   定义限制机器人的行为的策略\r\n*   使用 Jupiter Exchange 实现一个简单的交易功能\r\n\r\n### 预备条件\r\n\r\n在深入代码之前，你必须安装 Node.js 和 npm。\r\n\r\n你还需要一个 [Turnkey 帐户](https://app.turnkey.com/dashboard/auth/initial)。\r\n\r\n### 在 Turnkey 中创建一个 Solana 钱包\r\n\r\n登录到你的 Turnkey 仪表板，然后：\r\n\r\n*   导航到 **Wallets**\r\n*   **点击** **Create New Wallet**\r\n*   选择 **Solana** 和 **ED25519** 作为你的钱包设置\r\n*   为此钱包提供一些 SOL 以进行交易\r\n\r\n### 为你的机器人创建一个仅 API 用户\r\n\r\n接下来：\r\n\r\n*   转到 **Users** 选项卡\r\n*   点击 **Add User**\r\n*   在访问类型下选择 **API key**\r\n*   给它命名（例如 \"Trading Bot Alpha\"）\r\n\r\n写下用户 ID，然后点击批准。你将需要这个密钥用于你的策略配置。\r\n\r\n### 通过策略限制你的机器人\r\n\r\n首先，导航到 **Policies** 选项卡并点击 **Add new policy**。然后，配置政策以限制机器人可以采取的行动。让我们定义一个政策，确保机器人：\r\n\r\n*   只能执行代币转移（不允许其他交易类型）\r\n*   只能交易 SOL 和 USDC\r\n*   不能执行超过 1 SOL 的交易\r\n\r\n```\r\n{\r\n  \"policyName\": \"AI Trading Bot Policy\",\r\n  \"effect\": \"EFFECT_ALLOW\",\r\n  \"consensus\": \"approvers.any(user, user.id == '<BOT_USER_ID>')\",\r\n  \"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)\"\r\n}\r\n```\r\n\r\n#### 设置你的项目\r\n\r\n接下来，创建你的项目并安装依赖项。\r\n```\r\n    mkdir ai-trading-bot\r\n    cd ai-trading-bot\r\n    npm init -y\r\n    npm install @solana/web3.js @turnkey/sdk-server @turnkey/solana @jup-ag/api\r\n```\r\n创建一个 .env 文件来存储你的凭据。\r\n```\r\n    TURNKEY_API_PRIVATE_KEY=\"YOUR_API_PRIVATE_KEY_HERE\"\r\n    TURNKEY_API_PUBLIC_KEY=\"YOUR_API_PUBLIC_KEY_HERE\"\r\n    TURNKEY_ORGANIZATION_ID=\"YOUR_TURNKEY_ORGANIZATION_ID_HERE\"\r\n```\r\n#### 创建一个简单的机器人\r\n\r\n现在，让我们编写代码。创建一个 index.js 文件：\r\n```\r\n    import process from \"node:process\";\r\n    import { Turnkey } from \"@turnkey/sdk-server\";\r\n    import { TurnkeySigner } from \"@turnkey/solana\";\r\n    import {\r\n      Connection,\r\n      clusterApiUrl,\r\n      PublicKey,\r\n      VersionedTransaction\r\n    } from \"@solana/web3.js\";\r\n    import { createJupiterApiClient } from \"@jup-ag/api\";\r\n    \r\n    // 加载环境变量\r\n    process.loadEnvFile(\".env\");\r\n    \r\n    // 定义代币地址\r\n    const USDC = \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\";\r\n    const SOL = \"So11111111111111111111111111111111111111112\";\r\n    const BOT_ADDRESS = \"YOUR_TURNKEY_WALLET_ADDRESS_HERE\";\r\n    const BOT_PUBLIC_KEY = new PublicKey(BOT_ADDRESS);\r\n    \r\n    async function main() {\r\n      // 初始化 Turnkey 和 Jupiter 客户端\r\n      const turnkey = new Turnkey({\r\n        apiBaseUrl: \"https://api.turnkey.com\",\r\n        apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY,\r\n        apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY,\r\n        defaultOrganizationId: process.env.TURNKEY_ORGANIZATION_ID,\r\n      });\r\n    \r\n      const signer = new TurnkeySigner({\r\n        organizationId: process.env.TURNKEY_ORGANIZATION_ID,\r\n        client: turnkey.apiClient(),\r\n      });\r\n    \r\n      const connection = new Connection(clusterApiUrl(\"mainnet-beta\"), \"confirmed\");\r\n      const jupiterClient = createJupiterApiClient();\r\n```\r\n#### 创建政策控制的凭证\r\n\r\n现在，有趣的部分来了。我们将创建一个政策控制的凭证，而不是给你的 AI 代理完全的钱包访问权限：\r\n\r\n```javascript\r\nconst agentUSDCPolicy = {\r\n  \"policyName\": \"要求对包含超过 1000 USDC 的 SPL 代币转移的 Solana 交易达成共识\",\r\n  \"effect\": \"EFFECT_ALLOW\",\r\n  \"consensus\": \"approvers.count() >= 2\",\r\n  \"condition\": \"solana.tx.spl_transfers.all(transfer, transfer.token_mint == 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v') && solana.tx.spl_transfers.all(transfer, transfer.amount > 1000000000)\",\r\n  \"notes\": \"\",\r\n}\r\n\r\nconst agentSOLPolicy = {\r\n  \"policyName\": \"要求对包含超过 1 SOL 的 Solana 交易达成共识\",\r\n  \"effect\": \"EFFECT_ALLOW\",\r\n  \"consensus\": \"approvers.count() >= 2\",\r\n  \"condition\": \"solana.tx.transfers.count == 1 && solana.tx.transfers[0].amount > 1000000000\",\r\n  \"notes\": \"\",\r\n}\r\n\r\nconst createUSDCPolicyResponse = await turnkey.apiClient().createPolicy(agentUSDCPolicy);\r\n\r\nconst createSOLPolicyResponse = await turnkey.apiClient().createPolicy(agentSOLPolicy);\r\n```\r\n\r\n#### 实现机器人的交易功能\r\n\r\n在设定了约束条件后，你可以实现交易功能：\r\n\r\n```javascript\r\nasync function executeTrade(fromToken: string, toToken: string, amount: string) {\r\n  // 从 Jupiter 获取报价\r\n  const quoteResponse = await jupiterClient.quoteGet({\r\n    inputMint: fromToken,\r\n    outputMint: toToken,\r\n    amount: amount\r\n  });\r\n\r\n  // 创建交换交易\r\n  const swapResponse = await jupiterClient.swapPost({\r\n    swapRequest: {\r\n      userPublicKey: BOT_PUBLIC_KEY,\r\n      quoteResponse: quoteResponse,\r\n    },\r\n  });\r\n\r\n  // 签名并提交交易\r\n  const transaction = VersionedTransaction.deserialize(\r\n    Buffer.from(swapResponse.swapTransaction, \"base64\")\r\n  );\r\n  \r\n  const signedTx = await signer.signTransaction(\r\n    transaction,\r\n    BOT_PUBLIC_KEY\r\n  );\r\n\r\n  const txid = await connection.sendRawTransaction(\r\n    signedTx.serialize(),\r\n    { skipPreflight: true, maxRetries: 5 }\r\n  );\r\n\r\n  await connection.confirmTransaction(txid);\r\n  return txid;\r\n}\r\n\r\nmain();\r\n```\r\n\r\n这就是你所需的内容！\r\n\r\n这还不是一个完整的 AI 代理——但这个简单的政策控制机器人为你打下了基础。\r\n\r\n从这里，你可以扩展其自主性，添加决策逻辑，将其发展成更复杂的代理。\r\n\r\n你还可以通过要求多签名确认高风险交易或者授予代理访问由最终用户控制的钱包来继续增强安全性。\r\n\r\n## 超越安全钱包：可验证环境如何解锁安全 AI 代理\r\n\r\n确保 AI 代理安全地进行交易不仅仅是保护钱包访问——而是要验证代理运行的代码与其声称的代码完全一致。\r\n\r\n想象一下一个世界，AI 代理安全地进行交易并在一个完全可验证的环境中操作。在这个环境中，任何人都可以独立验证代理执行的到底是什么代码。\r\n\r\nTurnkey 的 [可验证计算基础设施](https://www.turnkey.com/solutions/ai-agents) 使任何人都能验证安全隔离内运行的软件——解决了今天可信软件面临的最大挑战之一。\r\n\r\nTurnkey 在其核心利用可信执行环境（TEEs），特别是 AWS Nitro 隔离，以提供用于运行敏感操作的防篡改环境。这些隔离作为无持久存储、无外部网络访问、启动后不可修改的孤立虚拟机运行。这保证了一旦隔离被配置，其代码和数据就会保持安全，不受外部干扰——包括来自基础设施提供者本身的干扰。\r\n\r\n然而，仅仅安全执行是不够的——重要的是可验证性。Turnkey 通过三项关键创新实现这一点：\r\n\r\n### 1\\. 远程证明\r\n\r\n每个 Turnkey 隔离都会生成一个加密证明，证明其正在运行的确切代码。该证明包括隔离的操作系统和应用程序二进制文件的哈希，由 AWS 的 Nitro 安全模块（NSM）签名。很快，任何人都可以独立验证该证明，以确认该隔离运行的是预期的软件。\r\n\r\n### 2\\. QuorumOS (QOS)\r\n\r\n一个专门为可验证性而设计的最小开源操作系统。[QOS](https://www.turnkey.com/blog/quorumos-is-now-open-source) 确保每个隔离只运行经过批准的可审计代码，并提供 QOS 清单——机器可读的证明，将隔离的执行与公开可验证的软件指纹链接起来。\r\n\r\n### 3\\. StageX 和可复现构建\r\n\r\n为了消除供应链攻击的风险，Turnkey 强制实施可复现构建。任何在隔离中运行的二进制文件都可以从人类可读的源代码独立重新编译，以验证它没有被更改。这确保了开发人员审阅的代码与在安全环境中运行的软件之间的一一映射。\r\n\r\n通过结合 TEE、远程证明和可复现构建，Turnkey 使得以绝对可验证性运行应用程序成为可能——无论是出于钱包安全、加密签名，还是 AI 代理执行。这一架构超越了传统的云安全模型，在传统模型中，信任是被假设的，而进入了一个安全性可证明、透明且去中心化的新范式。\r\n\r\n### 这对 AI 代理意味着什么\r\n\r\n可验证的执行环境提高了安全性，拓宽了自主系统、金融应用和任何要求可证明信任的服务的设计空间。\r\n\r\n当用户能够独立验证在隔离中运行的软件时，会出现新的可能性——例如无信任的 AI 执行，开发人员和用户可以自信地避免 [“奥兹巫师”](https://x.com/hosseeb/status/1874288532686295058) 代理（即假装是真实 AI 代理的人类演员）。\r\n\r\n超越可验证的 AI，团队可以部署从链下协处理器到可信的预言机和 AI 推理引擎的一切。一切都有加密证明，确保其确实如承诺的那样执行，并且无法单方面更新。以下表格中列出了一些可能受益于迁移到可证明环境的敏感工作负载：\r\n\r\n想参与并可验证地运行自己的关键应用程序吗？\r\n\r\nTurnkey 团队正在与选定团队合作，部署 AI 代理和其他应用程序在一个完全可验证的执行环境中——任何人都可以验证后台运行的确切代码。\r\n\r\n## 额外资源\r\n\r\n1.  CoinGecko — [AI 代理市场资本化](https://www.coingecko.com/en/categories/ai-agents)\r\n2.  QZ — [机器人执行 90% 的稳定币交易](https://qz.com/bots-perform-90-of-stablecoin-transactions-1851469004)\r\n3.  Turnkey 的新 [白皮书](https://whitepaper.turnkey.com/)\r\n4.  [Turnkey 官方网站](https://turnkey.com/)\r\n\r\n\r\n> 我是 [AI 翻译官](https://learnblockchain.cn/people/19584)，为大家转译优秀英文文章，如有翻译不通的地方，在[这里](https://github.com/lbc-team/Pioneer/blob/master/translations/10748.md)修改，还请包涵～"},"author":{"user":"https://learnblockchain.cn/people/22166","address":null},"history":null,"timestamp":1739540604,"version":1}