AI Agent如何安全调用aelf链?Portkey技能包详解MCP、CLI与SDK集成
1. 项目概述:为AI Agent赋能的aelf链钱包技能包
如果你正在开发一个需要与aelf区块链交互的AI Agent,或者想在你的Claude、Cursor等AI工具里直接操作钱包、查询资产、发起交易,那么你很可能已经遇到了一个核心难题:如何让AI安全、便捷地调用区块链功能?这正是@portkey/eoa-agent-skills这个项目要解决的问题。它不是一个普通的钱包应用,而是一套专门为AI Agent设计的“技能包”,通过MCP、CLI和SDK三种标准接口,将复杂的区块链操作封装成AI可以理解和执行的标准化工具。
简单来说,这个项目让AI具备了管理aelf链上EOA钱包、查询资产、执行转账和与智能合约对话的能力。想象一下,你可以直接对你的AI助手说:“帮我查一下这个地址的ELF余额”,或者“给这个地址转10个USDT”,AI就能像调用一个普通API一样完成这些操作,而无需你手动打开钱包、复制地址、确认交易。这对于构建自动化交易机器人、资产监控助手或者链上数据分析工具来说,是一个强大的基础设施。
2. 核心架构与设计思路拆解
2.1 为什么是“技能包”而非“SDK”?
传统的区块链SDK是给开发者用的,你需要编写代码、处理异步、管理私钥。而AI Agent的运行环境(如Claude Desktop、Cursor的AI侧边栏)通常是受限的,无法直接运行一个完整的Node.js应用或引入复杂的依赖。eoa-agent-skills的核心理念是“适配”,它将自己包装成AI生态能直接消费的形态。
MCP是桥梁:MCP全称是Model Context Protocol,你可以把它理解为AI工具和大型语言模型之间的一个标准化插件协议。项目中的src/mcp/server.ts就是一个MCP服务器,它启动后,会向连接的AI客户端(如Claude Desktop)宣告:“我这里提供了23个工具,分别是创建钱包、查询余额、执行转账……”。当你在AI聊天框里提出相关需求时,AI模型会识别意图,自动选择对应的工具并调用它,然后将执行结果返回给你。这个过程对用户是完全透明的,你感觉像是在和AI对话,实际上背后是这套技能包在干活。
统一的核心层:为了避免功能重复和维护地狱,项目采用了经典的分层架构。所有区块链交互的核心逻辑,比如生成钱包、构造交易、调用合约、查询链上数据,都被抽象在src/core/目录下。这是一个“纯净”的业务逻辑层,不依赖任何外部适配器。然后,MCP服务器、CLI命令行工具和TypeScript SDK,都作为“适配器”去调用这同一套核心逻辑。这意味着,无论你通过哪种方式使用,得到的钱包行为、交易结果都是一致的,修复一个Bug或增加一个功能,只需要改动核心层一处。
2.2 多模式消费的设计考量
项目支持三种主要使用模式,覆盖了从终端用户到开发者的全场景:
MCP模式(面向AI终端用户):这是最“傻瓜式”的体验。用户只需运行一次设置脚本(
bun run bin/setup.ts claude),技能包就会自动配置到Claude Desktop中。之后,用户在与Claude对话时,就能自然使用这些钱包功能。这种模式隐藏了所有技术细节,安全性依赖于MCP服务器的本地运行和环境变量配置。CLI模式(面向脚本和高级用户):
portkey_eoa_skill.ts是一个功能完整的命令行工具。它适合用于编写自动化脚本、集成到CI/CD流程,或者快速进行一些链上操作测试。例如,你可以写一个定时脚本,每天用CLI查询一次资产余额并发送到钉钉。CLI模式提供了最细粒度的参数控制。SDK模式(面向开发者):
index.ts导出了一套完整的TypeScript函数。如果你正在用LangChain、LlamaIndex构建更复杂的AI Agent,或者想开发自己的区块链应用,可以直接引入这个SDK,将其作为你应用中的一个模块来调用。它提供了最大的灵活性和可编程性。
实操心得:模式选择建议对于大多数想体验AI+区块链的普通用户,直接从MCP模式开始是最快、最直观的。对于开发者,我建议先通过CLI模式熟悉所有功能和参数,因为它的错误信息最直接;在构建复杂应用时,再切换到SDK模式进行深度集成。避免一上来就啃SDK源码,容易迷失在细节里。
3. 核心功能模块深度解析
3.1 钱包管理:安全与便捷的平衡术
钱包管理是任何区块链应用的基石,也是安全风险最高的部分。eoa-agent-skills在这方面做了不少值得称道的设计。
本地加密存储:当你通过portkey_create_wallet创建钱包时,私钥并不会以明文形式保存在任何地方。系统会使用你提供的PORTKEY_WALLET_PASSWORD环境变量(或交互式输入)作为密码,通过AES加密算法将私钥加密后,存储在你指定的PORTKEY_WALLET_DIR目录下(默认是~/.portkey/eoa/wallets/)。这意味着,即使有人拿到了你的存储文件,没有密码也无法解密出私钥。
跨技能签名上下文:这是一个非常实用的设计。假设你安装了多个需要签名的AI技能(比如一个用于DeFi,一个用于NFT),你不需要在每个技能里都导入一遍钱包。当你在这个技能中创建或导入钱包后,它会自动更新一个共享的“活跃钱包上下文”文件(默认路径~/.portkey/skill-wallet/context.v1.json)。其他支持该规范的技能可以读取这个文件,自动获取当前活跃的钱包地址进行签名操作。关键点:这个上下文文件里只存储钱包地址和加密后的密钥库信息(walletExport),绝不存储明文私钥或助记词。
钱包备份与恢复:portkey_backup_wallet工具提供了两种备份方式:
- 一次性输出:直接输出助记词和明文私钥。这仅适用于你需要在其他钱包应用(如MetaMask)中导入的情况,且输出后应立即妥善保存并清除聊天记录。
- 加密导出:生成一个加密的
walletExport字符串。这个字符串可以安全地备份到云端或密码管理器,未来可以通过portkey_import_wallet工具,配合创建时使用的密码,重新导入恢复钱包。这是更推荐的备份方式。
注意事项:密码管理是命门
PORTKEY_WALLET_PASSWORD这个环境变量是整个安全体系的核心。一旦丢失或遗忘,你加密存储的钱包将无法解密,加密的walletExport也无法导入。务必使用密码管理器(如1Password、Bitwarden)妥善保管此密码。切勿使用过于简单的密码,也不要在多个不信任的环境中使用同一个密码。
3.2 资产查询:从余额到历史的完整视图
资产查询模块提供了链上数据的全景视图,是构建监控面板或分析工具的基础。
Token列表与余额查询:portkey_get_token_list是一个聚合查询,它会返回指定地址在所有aelf侧链上的所有代币及其余额。这对于快速总览资产分布非常有用。而portkey_get_token_balance则是精确查询,你可以指定具体的链ID(如AELF主链,tDVV测试网)和代币符号(如ELF,USDT)来获取精确数值。
一个关键细节:代币价格查询:portkey_get_token_prices工具的实现依赖于外部的价格预言机。根据项目代码和aelf生态常见实践,它很可能是通过调用aelf网络上的某个价格预言机合约,或者查询链下API来获取代币的美元计价。这意味着,在私有网络或没有部署价格合约的测试网上,这个功能可能返回空或错误。在实际使用时,你需要确认当前网络是否支持该功能。
NFT查询的链特性:portkey_get_nft_collections和portkey_get_nft_items工具是针对aelf链上NFT标准的查询。aelf的NFT合约标准可能与以太坊的ERC-721/1155在接口上略有不同。这些工具封装了与aelf NFT合约(如MultiToken合约)的交互,直接返回处理好的集合和物品信息,省去了开发者自己解析合约数据的麻烦。
交易历史与详情:portkey_get_transaction_history通常是通过查询区块链浏览器API或节点的历史接口来实现的,返回的是交易列表。而portkey_get_transaction_detail则会提供单笔交易的更详细信息,包括输入/输出、事件日志、状态等。这对于调试失败的交易或分析合约交互至关重要。
3.3 交易与合约交互:精准操作指南
这是技能包中最能体现其价值的部分,让AI能够安全地执行链上写操作。
普通转账与跨链转账:
portkey_transfer用于同一条aelf侧链内的代币转账。你需要明确指定目标链ID、代币符号和金额。这里有一个易错点:金额单位。aelf链上许多代币(如ELF)使用8位小数精度。在工具中,你需要传入的是代币的最小单位(如1 ELF = 100,000,000)。在CLI中传入--amount 100000000代表1个ELF。portkey_cross_chain_transfer用于在aelf生态内的不同侧链之间转移资产。这背后调用的是aelf主链的跨链合约。操作时,你需要指定源链ID、目标链ID、代币和金额。跨链交易通常需要等待多个区块确认,时间比普通转账长。
合约交互的“视图”与“发送”分离:这是智能合约编程中的一个基本原则,项目通过两个独立的工具portkey_call_view_method和portkey_call_send_method来严格区分。
- 视图调用:用于查询合约状态,不消耗Gas,不改变链上数据。例如,查询余额
GetBalance、获取配置GetConfig。重要原则:对于输入参数为Empty(空)的视图方法,调用时必须省略--params参数,否则会导致调用错误。 - 发送调用:用于执行改变合约状态的操作,需要支付Gas,并等待交易上链。例如,授权
Approve、转账Transfer。
以共振交易为例的实战解析:项目文档中给出了一个共振合约交互的经典例子,清晰地展示了如何区分两种调用。
# 1. 查询队列状态(视图调用,只读) bun run portkey_eoa_skill.ts contract view \ --contract-address 28Lot71VrWm1WxrEjuDqaepywi7gYyZwHysUcztjkHGFsPPrZy \ --method GetPairQueueStatus \ --params '"<address>"' \ --chain-id tDVV # 2. 加入队列(发送调用,写操作) bun run portkey_eoa_skill.ts contract send \ --contract-address 28Lot71VrWm1WxrEjuDqaepywi7gYyZwHysUcztjkHGFsPPrZy \ --method JoinPairQueue \ --params '{}' \ --chain-id tDVV \ --address YOUR_ADDRESS \ --password mypass注意第一个命令中--params的值被包裹在两层引号中,这是因为在命令行中,整个JSON字符串需要作为一个参数传递。而第二个命令的--params '{}'表示一个空的JSON对象,符合JoinPairQueue方法的要求。
费用预估:portkey_estimate_fee工具非常实用。在执行任何发送交易之前,先调用它预估一下Gas消耗和费用,可以避免因Gas不足导致的交易失败,也能让你对成本心中有数。
3.4 eBridge跨链桥接:连接aelf与EVM生态
portkey_ebridge_transfer和portkey_ebridge_info这两个工具提供了与eBridge跨链桥交互的能力。eBridge是连接aelf区块链和以太坊等EVM链的官方桥。通过这个工具,你可以将资产从aelf转移到以太坊,或者反向操作。
使用前,务必先用portkey_ebridge_info查询当前桥接的限额、手续费和预计时间。跨链桥接交易涉及多链确认,耗时从几分钟到几小时不等,需要耐心等待。
4. 环境配置与实战部署指南
4.1 环境变量详解与配置策略
项目的运行严重依赖环境变量。正确的配置是成功的第一步。
# 推荐做法:复制模板文件并编辑 cp .env.example .env # 然后用文本编辑器打开 .env 文件进行配置核心环境变量解析:
| 变量名 | 作用与建议 | 默认值 |
|---|---|---|
PORTKEY_NETWORK | 指定连接的aelf网络。开发测试用testnet,正式操作用mainnet。 | mainnet |
PORTKEY_API_URL | 高级选项:覆盖默认的API端点。除非你自建了aelf节点或API服务,否则一般不需要设置。 | 根据网络自动选择 |
PORTKEY_PRIVATE_KEY | 不推荐:直接设置明文私钥。虽然方便,但存在安全风险,特别是将.env文件提交到版本库时。优先使用加密钱包文件。 | — |
PORTKEY_WALLET_DIR | 自定义加密钱包文件的存储目录。可以改为更安全或更便捷的路径。 | ~/.portkey/eoa/wallets/ |
PORTKEY_WALLET_PASSWORD | 至关重要:用于加密/解密本地钱包文件的密码。建议使用强密码,并通过export命令设置在终端会话中,而非直接写在.env文件里。 | — |
PORTKEY_SKILL_WALLET_CONTEXT_PATH | 共享活跃钱包上下文文件的路径。如果你有多个AI技能环境,可以将其设置为共享目录,实现钱包状态的同步。 | ~/.portkey/skill-wallet/context.v1.json |
安全配置建议:
- 密码隔离:永远不要将
PORTKEY_WALLET_PASSWORD提交到任何代码仓库。对于生产环境,使用密钥管理服务(如AWS Secrets Manager, HashiCorp Vault)或至少在部署时通过CI/CD管道注入。- 私钥最小化:尽量避免使用
PORTKEY_PRIVATE_KEY。坚持使用“创建/导入钱包 -> 加密存储 -> 通过密码使用”的工作流。- 目录权限:确保
PORTKEY_WALLET_DIR指向的目录权限设置为仅当前用户可读可写(Linux/Mac:chmod 700)。
4.2 MCP模式:与Claude Desktop深度集成
这是让AI助手“直接”操作区块链的魔法所在。配置过程其实很简单。
一键配置:
# 为Claude Desktop配置技能 bun run bin/setup.ts claude这个脚本会自动做几件事:1) 找到你本地Claude Desktop的MCP服务器配置目录;2) 生成一个指向本项目MCP服务器的配置片段;3) 将其添加到Claude的配置中。完成后,重启Claude Desktop,你的AI助手就获得了区块链超能力。
手动配置(适用于高级用户或自定义客户端): 如果你使用的不是Claude Desktop,或者其他支持MCP的客户端(如自定义应用),你可以手动创建或修改MCP配置文件(例如~/.config/claude/mcp.json或客户端指定的路径),添加如下配置:
{ "mcpServers": { "portkey-eoa-agent-skills": { "command": "bun", "args": ["run", "/ABSOLUTE/PATH/TO/YOUR/eoa-agent-skills/src/mcp/server.ts"], "env": { "PORTKEY_NETWORK": "testnet", "PORTKEY_WALLET_PASSWORD": "your_secure_password_here" } } } }注意:args中的路径必须是绝对路径。环境变量env会传递给MCP服务器进程。
验证MCP连接: 配置完成后,在Claude Desktop中,你可以尝试问:“我有哪些可用的工具?”或者“你能帮我创建一个aelf测试网钱包吗?”。如果配置成功,Claude会识别出portkey_create_wallet等工具并询问你必要的参数(如密码)。
4.3 CLI模式:终端下的全能瑞士军刀
CLI工具是进行批量操作、调试和集成测试的利器。所有功能都通过portkey_eoa_skill.ts这个入口点调用。
基础命令结构:
bun run portkey_eoa_skill.ts <category> <action> [options]主要类别包括wallet,query,transfer,contract,ebridge。
常用操作示例:
创建钱包并备份:
# 创建钱包,密码通过环境变量或提示输入 bun run portkey_eoa_skill.ts wallet create # 列出所有钱包,找到刚创建的钱包地址 bun run portkey_eoa_skill.ts wallet list # 备份该钱包的助记词(谨慎操作!) bun run portkey_eoa_skill.ts wallet backup --address YOUR_NEW_ADDRESS全面的资产查询:
# 查询某地址在所有链上的所有代币 bun run portkey_eoa_skill.ts query tokens --address aBcDeF...123 # 查询在主网AELF上的ELF余额 bun run portkey_eoa_skill.ts query balance --address aBcDeF...123 --symbol ELF --chain-id AELF # 查询ELF和USDT的实时价格 bun run portkey_eoa_skill.ts query price --symbols ELF,USDT执行一笔转账:
# 在tDVV测试网转账1个ELF (注意金额单位) bun run portkey_eoa_skill.ts transfer \ --to recipient_address_here \ --symbol ELF \ --amount 100000000 \ --chain-id tDVV \ --address your_sender_address \ --password your_wallet_password
CLI模式的优势:输出是结构化的(通常是JSON),非常适合用jq等工具进行解析,从而嵌入到Shell脚本中实现自动化。
4.4 SDK模式:嵌入你的JavaScript/TypeScript项目
如果你需要将aelf钱包功能构建到自己的Node.js后端服务、Next.js应用或复杂的AI Agent框架中,SDK模式提供了最大的灵活性。
安装与引入: 首先,你需要将项目作为依赖引入。由于项目可能尚未发布到npm,一种常见的方式是使用Git仓库直接安装:
npm install git+https://github.com/Portkey-Wallet/eoa-agent-skills.git # 或 yarn add https://github.com/Portkey-Wallet/eoa-agent-skills.git然后,在你的代码中引入:
import { getConfig, createWallet, getTokenList, transfer, callViewMethod, callSendMethod } from '@portkey/eoa-agent-skills'; import dotenv from 'dotenv'; dotenv.config(); // 加载 .env 文件中的环境变量实战示例:构建一个自动监控机器人: 假设我们要构建一个服务,定时检查某个地址的资产并发送通知。
async function monitorPortfolio(address: string) { // 1. 获取配置(默认读取 process.env.PORTKEY_NETWORK) const config = getConfig('mainnet'); // 2. 查询该地址的完整资产列表 const portfolio = await getTokenList(config, { address }); if (portfolio.success && portfolio.data) { const totalValue = portfolio.data.reduce((sum, token) => { // 假设token.price是美元价格,token.balance是带小数位的余额 return sum + (parseFloat(token.price || '0') * parseFloat(token.balance)); }, 0); console.log(`地址 ${address} 总资产估值: $${totalValue.toFixed(2)}`); // 3. 可以进一步过滤、分析,或发送到钉钉/Telegram portfolio.data.forEach(token => { if (parseFloat(token.balance) > 0) { console.log(` - ${token.symbol}: ${token.balance} (≈ $${(parseFloat(token.balance) * parseFloat(token.price || '0')).toFixed(2)})`); } }); } else { console.error('查询资产失败:', portfolio.error); } } // 定时执行,例如每5分钟一次 setInterval(() => monitorPortfolio('YOUR_WATCH_ADDRESS'), 5 * 60 * 1000);SDK集成心得:
- 错误处理:SDK函数通常返回一个包含
success,data,error字段的对象。务必检查success状态,并妥善处理error。 - 配置管理:
getConfig函数是入口,它整合了环境变量和传入的参数。在生产环境中,建议将网络类型、API URL等配置集中管理,而不是硬编码。 - 异步操作:所有涉及链上交互的函数都是异步的。确保在
async函数中使用await,或妥善处理Promise。
5. IronClaw WASM原生工具:面向未来的运行时
项目文档中提到了一个实验性的IronClaw原生WASM构建。这是一个重要的方向,旨在摆脱对Node.js/Bun运行时的依赖,让技能包能运行在更轻量、更安全的WASM沙箱环境中。
当前状态与理解:
- 独立构建:WASM工具位于
ironclaw-wasm/目录,使用Rust编写(依赖aelf-web3.rust库),并编译为.wasm文件。它与主项目的JavaScript/TypeScript代码库是分离的。 - 功能对等:根据文档,这个WASM版本实现了全部23个工具的功能,意味着在IronClaw运行时中,你可以获得与MCP/CLI/SDK完全一致的能力。
- 状态隔离:重要:当前WASM版本的钱包存储状态与Bun/Node运行时下的状态是隔离的。这意味着你在MCP中创建的钱包,无法直接在IronClaw中使用,反之亦然。
- 安装方式:WASM版本通过
ironclaw tool install命令安装一个打包好的.wasm文件。这更像是为一个特定的“IronClaw运行时”环境发布一个独立应用。
对开发者的启示:
- 未来潜力:如果IronClaw这类WASM运行时成为AI工具生态的标准,那么这种部署方式将带来更好的安全性(沙箱隔离)和可移植性。
- 当前用途:对于大多数用户和开发者,现阶段仍然应该以MCP/CLI/SDK这三种主要模式为主。WASM版本可以视为一个超前的技术预览和测试路径。
- 开发测试:如果你对Rust和WASM感兴趣,可以按照文档中的步骤进行本地构建和烟雾测试,了解其工作原理。
6. 常见问题排查与实战技巧
在实际使用中,你一定会遇到各种问题。这里我总结了一些高频问题的排查思路和解决方案。
6.1 连接与网络问题
问题:MCP服务器启动失败,或CLI/SDK调用返回网络错误。
- 检查网络配置:确认
PORTKEY_NETWORK环境变量设置正确(mainnet或testnet)。如果你在墙内环境,aelf的某些API端点可能访问不稳定。尝试使用PORTKEY_API_URL覆盖为一个更稳定的网关(如果有的话)。 - 检查节点状态:aelf区块链节点可能偶尔维护或升级。你可以通过访问aelf官方区块浏览器,查看最新区块是否在正常产生,来初步判断网络健康状况。
- 防火墙与代理:如果你在公司网络或使用了代理,确保本地的Bun/Node进程有权限访问外部网络。有时需要配置
HTTP_PROXY和HTTPS_PROXY环境变量。
6.2 交易失败问题
问题:转账或合约调用一直失败,返回“Timeout”或“Transaction expired”。
- Gas费用不足:这是最常见的原因。aelf网络也有Gas概念。在执行发送交易前,务必先使用
portkey_estimate_fee工具预估费用。确保发起交易的地址有足够的ELF来支付这笔Gas费。 - Nonce值冲突:如果你在短时间内通过同一个地址并发发送多笔交易,可能会因为Nonce值设置问题导致后续交易失败。EOA钱包通常会自动管理Nonce,但在脚本高频调用时可能出错。解决方案是:1) 串行执行交易;2) 在失败后等待一段时间再重试。
- 合约方法或参数错误:仔细核对合约地址、方法名和参数格式。特别是
--params参数,它必须是一个合法的JSON字符串。对于复杂参数,可以先用portkey_call_view_method测试一下是否能成功读取,再尝试发送交易。
6.3 钱包与签名问题
问题:提示“Invalid password”或“Wallet not found”。
- 密码错误:加密钱包文件使用AES加密,密码错误绝对无法解密。请百分百确认你使用的
PORTKEY_WALLET_PASSWORD与创建/导入钱包时设置的密码一致。区分大小写,注意特殊字符。 - 钱包文件丢失或损坏:检查
PORTKEY_WALLET_DIR目录下是否存在对应的.json钱包文件。如果文件被误删,你只能通过之前备份的助记词或walletExport字符串重新导入。 - 上下文文件冲突:如果你手动修改过
~/.portkey/skill-wallet/context.v1.json文件,或者多个技能同时写入导致其损坏,可能会影响活跃钱包的识别。可以尝试删除这个上下文文件,然后重新在技能中设置活跃钱包。
6.4 MCP工具调用不响应
问题:在Claude里提到了相关功能,但AI没有调用工具,或者说“我没有这个功能”。
- MCP服务器未运行:Claude Desktop需要在启动时加载MCP配置并启动服务器。确保你已正确运行
bun run bin/setup.ts claude,并且重启了Claude Desktop。你可以在Claude的设置中查看“已连接的服务器”列表。 - 工具描述不匹配:AI模型根据工具的名称和描述来决定是否调用。尝试使用更直接、更符合工具描述的语言。例如,不说“看看我的币”,而说“使用portkey技能查询我的代币列表”。
- 检查MCP日志:以调试模式启动MCP服务器可能看到更多信息。你可以尝试直接运行
bun run src/mcp/server.ts,观察启动过程中是否有报错。
6.5 性能与优化建议
- 批量查询:如果你需要监控多个地址的资产,不要用循环频繁调用
getTokenList。aelf的API可能有速率限制。考虑是否可以降低查询频率,或者在服务端进行聚合。 - 缓存策略:对于不经常变动的数据,如代币价格、NFT集合信息,可以在你的应用层实现简单的缓存(例如缓存5分钟),以减少对链的请求次数。
- 错误重试机制:网络请求和区块链交易本身具有不确定性。在你的SDK集成代码中,对于查询类的失败操作,建议实现指数退避的重试机制。对于发送交易,失败后需要先查明原因(Gas不足、Nonce问题等),再决定是否重试。
7. 安全最佳实践与高级用法
将私钥和区块链交互交给AI操作,安全是重中之重。以下是我在实际使用中总结出的安全守则。
7.1 密钥生命周期管理
- 创建阶段:始终在可信的离线环境中创建钱包。虽然MCP服务器在本地运行,但确保你的电脑没有恶意软件。
- 存储阶段:坚决依赖项目的加密存储。让
PORTKEY_WALLET_PASSWORD成为访问钱包的唯一凭证,并像保护银行密码一样保护它。 - 使用阶段:
- 为不同用途创建不同钱包:不要将所有资产放在一个AI可操作的钱包里。可以创建一个“热钱包”存放少量用于日常交互的资产,而将大额资产存放在完全离线的“冷钱包”中。
- 限制授权:使用
portkey_approve工具授权合约使用你的代币时,只授权必要的数量,而不是无限大(uint256.max)。授权后,对于不再使用的合约,记得将其授权额度设置为0。
- 备份阶段:
- 加密导出优先:使用
portkey_backup_wallet生成的加密walletExport字符串进行备份。将这个字符串和你的密码分开保管(例如,字符串存密码管理器,密码记在脑子里)。 - 助记词备份:仅在首次创建钱包时,安全地记录下助记词,并离线保存(如写在纸上,存放在保险箱)。切勿将助记词截图或保存在联网设备中。
- 加密导出优先:使用
7.2 在团队或生产环境中使用
如果你想在团队协作或自动化生产流程中使用这个技能包,需要更严格的规范。
- 环境变量集中管理:使用
.env文件,但将其加入.gitignore。通过CI/CD管道(如GitHub Actions Secrets, GitLab CI Variables)在部署时注入PORTKEY_WALLET_PASSWORD等敏感信息。 - 使用服务账户钱包:创建一个专门用于自动化脚本或服务的钱包地址。定期审计该地址的交易记录。
- 操作审计:由于AI操作的记录可能散落在聊天记录中,难以追溯。建议在重要的写操作(如大额转账、合约授权)时,强制要求通过CLI或SDK执行,并将执行命令、交易哈希、时间戳记录到独立的审计日志中。
- 权限隔离:如果使用SDK集成到后端服务,确保运行服务的服务器具有严格的网络访问控制和文件系统权限,防止钱包文件被非法读取。
7.3 扩展与自定义开发
eoa-agent-skills项目本身结构清晰,非常适合在其基础上进行二次开发。
- 添加新的查询工具:如果你想查询aelf链上特定的DeFi协议数据(如某个DEX的流动性池信息),可以模仿
src/core/queries/目录下的文件,编写新的查询函数,然后在src/mcp/tools/下注册为新的MCP工具,最后在CLI和SDK中暴露接口。 - 集成其他链:项目的核心逻辑是与
aelf-sdk交互。理论上,你可以仿照其结构,创建一套针对以太坊(使用ethers.js)、BNB Chain等的新核心模块,并通过相同的适配器(MCP/CLI/SDK)提供出去,构建一个多链的AI Agent技能库。 - 自定义AI工作流:结合LangChain等框架,你可以将这里的SDK函数包装成更复杂的“链”(Chain)。例如,创建一个“安全转账链”:先查询余额 -> 预估Gas -> 检查接收地址格式 -> 最终确认并执行转账。将多个原子操作组合成一个可靠、安全的自动化工作流。
这个项目打开了一扇门,让AI不再是区块链世界的旁观者,而是成为了一个可以安全、可控的执行者。从简单的查询到复杂的合约交互,它提供了一套标准化、可扩展的解决方案。无论你是想提升个人效率,还是为你的产品增加AI驱动的区块链功能,@portkey/eoa-agent-skills都是一个值得深入研究和使用的强大工具箱。
