探讨了在 Solana 平台上兴起的 AI 交易代理的潜力与安全挑战。当前 AI 代币的交易量已超过十亿美元,自动化交易逐渐成为加密市场主流。但在实现 AI 自动交易时,代理如何安全地访问钱包成为一大难题。文中介绍了 Turnkey 提供的解决方案.
- 原文链接:www.helius.dev/blog...
- 译者:AI翻译官,校对:翻译小组
- 本文链接:learnblockchain.cn/article…
AI 代理在 Solana 上的激增引发了关于自主代理进行金融交易的激烈猜测。
当前这一波 AI 代币在 24 小时的交易量超过了 10 亿美元,市场总市值超过 95 亿美元。 但除了这些投机市场之外,数字货币领域已经在悄然发生更深层次的转变——这是基于多年来不断提高的自动化程度。
机器人已经驱动了大多数加密交易,在某些加密领域达到了 90%。 这些尚未完全自主的 AI 代理但明显是先驱,随着时间的推移变得更加通用和独立。
它们的普遍存在突显出一个至关重要的事实:加密基础设施独特地适合编程的、自主的交易。
随着 AI 代理在 Solana 及其他领域的崛起,出现了一个重大的安全挑战:如何让自主系统在不妥协安全性的情况下访问 钱包?
要执行链上操作,AI 代理需要钱包访问权限。但是,代码中存储的私钥会造成巨大的安全漏洞:
2024 年 9 月,一个真实的风险案例发生在 Banana Gun,这是一个基于 Telegram 的交易机器人,攻击者利用其消息预言机中的漏洞从用户钱包中窃取了 300 万美元。
一个具有直接钱包访问权限的机器人或代理可以因漏洞、错误或未检查的决策循环而进行意外、不可逆转的交易。
传统解决方案迫使开发者在安全性和真正的代理自主性之间做出选择。传统方法要么暴露私人密钥,要么要求中心化托管,这两者对生产系统都是不可接受的。
有一个解决方案是 Turnkey,这是一个高度灵活的密钥管理基础设施,专门为安全、规模和自动化而构建。Turnkey 使 AI 代理能够通过受限的、策略控制的 API 访问与钱包进行交互,而不是暴露私钥。
以下是其工作原理:
AI 代理接收与特定钱包和操作关联的有限 API 凭据。
开发者可以精确定义 AI 代理被允许执行的操作——无论是根据某些条件签署交易、与特定智能合约交互还是强制执行速率限制。
最终用户或开发者可以在委托特定操作给 AI 代理的同时保留对钱包的完全控制权。
这种方法确保 AI 代理能够自主与链上资产互动,而无需持有原始私钥,从而解决了安全问题,同时保持了加密技术的无信任和无需许可的特性。
此外,Turnkey 的 可验证计算环境 使团队能够在任何人都可以验证正在运行的代码的环境中部署 AI 代理。稍后我们再讨论这个。
让我们通过为一个简单的机器人配置一个带有钱包权限的 API 密钥来走个实践示例。从这里,开发者可以迈出下一步:将机器人演变为完全自主的 AI 代理。
让我们使用 Turnkey 构建一个安全的交易机器人。我们将涵盖:
在深入代码之前,你必须安装 Node.js 和 npm。
你还需要一个 Turnkey 帐户。
登录到你的 Turnkey 仪表板,然后:
接下来:
写下用户 ID,然后点击批准。你将需要这个密钥用于你的策略配置。
首先,导航到 Policies 选项卡并点击 Add new policy。然后,配置政策以限制机器人可以采取的行动。让我们定义一个政策,确保机器人:
{
"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";
// 加载环境变量
process.loadEnvFile(".env");
// 定义代币地址
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() {
// 初始化 Turnkey 和 Jupiter 客户端
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": "要求对包含超过 1000 USDC 的 SPL 代币转移的 Solana 交易达成共识",
"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": "要求对包含超过 1 SOL 的 Solana 交易达成共识",
"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) {
// 从 Jupiter 获取报价
const quoteResponse = await jupiterClient.quoteGet({
inputMint: fromToken,
outputMint: toToken,
amount: amount
});
// 创建交换交易
const swapResponse = await jupiterClient.swapPost({
swapRequest: {
userPublicKey: BOT_PUBLIC_KEY,
quoteResponse: quoteResponse,
},
});
// 签名并提交交易
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 代理安全地进行交易并在一个完全可验证的环境中操作。在这个环境中,任何人都可以独立验证代理执行的到底是什么代码。
Turnkey 的 可验证计算基础设施 使任何人都能验证安全隔离内运行的软件——解决了今天可信软件面临的最大挑战之一。
Turnkey 在其核心利用可信执行环境(TEEs),特别是 AWS Nitro 隔离,以提供用于运行敏感操作的防篡改环境。这些隔离作为无持久存储、无外部网络访问、启动后不可修改的孤立虚拟机运行。这保证了一旦隔离被配置,其代码和数据就会保持安全,不受外部干扰——包括来自基础设施提供者本身的干扰。
然而,仅仅安全执行是不够的——重要的是可验证性。Turnkey 通过三项关键创新实现这一点:
每个 Turnkey 隔离都会生成一个加密证明,证明其正在运行的确切代码。该证明包括隔离的操作系统和应用程序二进制文件的哈希,由 AWS 的 Nitro 安全模块(NSM)签名。很快,任何人都可以独立验证该证明,以确认该隔离运行的是预期的软件。
一个专门为可验证性而设计的最小开源操作系统。QOS 确保每个隔离只运行经过批准的可审计代码,并提供 QOS 清单——机器可读的证明,将隔离的执行与公开可验证的软件指纹链接起来。
为了消除供应链攻击的风险,Turnkey 强制实施可复现构建。任何在隔离中运行的二进制文件都可以从人类可读的源代码独立重新编译,以验证它没有被更改。这确保了开发人员审阅的代码与在安全环境中运行的软件之间的一一映射。
通过结合 TEE、远程证明和可复现构建,Turnkey 使得以绝对可验证性运行应用程序成为可能——无论是出于钱包安全、加密签名,还是 AI 代理执行。这一架构超越了传统的云安全模型,在传统模型中,信任是被假设的,而进入了一个安全性可证明、透明且去中心化的新范式。
可验证的执行环境提高了安全性,拓宽了自主系统、金融应用和任何要求可证明信任的服务的设计空间。
当用户能够独立验证在隔离中运行的软件时,会出现新的可能性——例如无信任的 AI 执行,开发人员和用户可以自信地避免 “奥兹巫师” 代理(即假装是真实 AI 代理的人类演员)。
超越可验证的 AI,团队可以部署从链下协处理器到可信的预言机和 AI 推理引擎的一切。一切都有加密证明,确保其确实如承诺的那样执行,并且无法单方面更新。以下表格中列出了一些可能受益于迁移到可证明环境的敏感工作负载:
想参与并可验证地运行自己的关键应用程序吗?
Turnkey 团队正在与选定团队合作,部署 AI 代理和其他应用程序在一个完全可验证的执行环境中——任何人都可以验证后台运行的确切代码。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!