在 Solana 区块链开发领域,构建功能强大的交易代理至关重要,它能助力我们高效完成诸如查询余额、获取交易吞吐量(TPS)以及关闭空代币账户等诸多操作。solagent.rs 恰似一个功能完备的工具宝库,为开发者们提供了便捷途径来实现这些需求。本教程将紧密围绕给定代码,阐释如何运用 solagent.rs 打造一个 Solana 交易代理,并全方位剖析其中每一个步骤的作用。
bash
rustc --version
Cargo.toml
文件,加入如下必要依赖:[dependencies]
anyhow = "1.0"
solagent-core = "0.1.6"
solagent-rig-solana = "0.1.2"
solagent-wallet-solana = "0.1.3"
use std::{env, sync::Arc};
use anyhow::Result;
use solagent_core::{
rig::{
agent::Agent,
providers::{self, openai::CompletionModel},
},
ConfigBuilder, SolanaAgentKit;
};
use solagent_rig_solana::{
close_empty_token_accounts::CloseEmptyTokenAccounts, get_balance::GetBalance, get_tps::GetTps,
};
use solagent_wallet_solana::Wallet;
std::{env, sync::Arc}
:solagent_core
:作为 Solagent 的核心模块,它封装了代理构建、配置生成等一系列核心功能,是整个 Solagent.rs 工具链正常运转的关键支撑。solagent_rig_solana
:此模块聚焦于 Solana 区块链特有的操作,包含了关闭空代币账户、精准获取余额以及实时监测交易 TPS 等实用工具,为开发者与 Solana 区块链的深度交互提供了便利。solagent_wallet_solana::Wallet
:专门负责处理 Solana 钱包相关的繁杂操作,钱包创建、密钥管理,确保钱包功能的安全与稳定。pub fn create_solana_agent() -> Result<Agent<CompletionModel>> {
// 从环境变量中获取 Solana 私钥并创建钱包实例
let wallet = Wallet::from_env("SOLANA_PRIVATE_KEY").expect("SOLANA_PRIVATE_KEY");
// 从环境变量中获取 Solana RPC URL
let rpc_url = env::var("SOLANA_RPC_URL").expect("SOLANA_RPC_URL");
// 使用默认配置构建器创建配置
let config = ConfigBuilder::default().build();
// 创建 Solana 代理套件实例
let solana_agent_kit = SolanaAgentKit::new(wana, &rpc_url, config);
let solana_agent_kit = Arc::new(solana_agent_kit);
// 创建关闭空代币账户工具实例
let close_acc = CloseEmptyTokenAccounts::new(solana_agent_kit.clone());
// 创建获取余额工具实例
let balance = GetBalance::new(solana_agent_kit.clone());
// 创建获取 TPS 工具实例
let tps = GetTps::new(solana_agent_kit.clone());
// 创建 OpenAI 客户端实例,使用 Ollama 服务
let client = providers::openai::Client::from_url("ollama", "http://localhost:11434/v1");
// 创建代理实例
let agent = client
.agent("llama3.2")
.preamble("You are an solana trading agent here to help the user.")
.max_tokens(1024)
.tool(close_acc)
.tool(balance)
.tool(tps)
.build();
Ok(agent)
}
let wallet = Wallet::from_env("SOLANA_PRIVATE_KEY").expect("SOLANA_PRIVATE_KEY");
let rpc_url = env::var("SOLANA_RPC_URL").expect("SOLANA_RPC_URL");
let config = ConfigBuilder::default().build();
ConfigBuilder
的默认配置构建器,如同按照一套精心设计的标准模板,快速搭建起一个适用于 Solana 代理的基础配置对象。这个配置对象将在后续的代理创建与运行过程中,规范各项参数,确保系统的稳定性与一致性。let solana_agent_kit = SolanaAgentKit::new(wallet, &rpc_url, config);
let solana_agent_kit = Arc::new(solana_agent_kit);
SolanaAgentKit::new
函数,将前面获取的钱包实例、RPC 网址以及配置对象巧妙融合,精心打造出一个功能完备的 Solana 代理套件实例。集成了钱包操作、网络交互、配置管理等多项核心功能。let close_acc = CloseEmptyTokenAccounts::new(solana_agent_kit.clone());
let balance = GetBalance::new(solana_agent_kit.clone());
let tps = GetTps::new(solana_agent_kit.clone());
CloseEmptyTokenAccounts::new
、GetBalance::new
和 GetTps::new
函数,以克隆后的 Solana 代理套件为基石,逐一创建出关闭空代币账户、获取余额以及获取 TPS 的专业工具实例。这些工具实例如同训练有素的特种兵,各自具备独特的技能,能够精准地执行对应的区块链操作任务。let client = providers::openai::Client::from_url("ollama", "http://localhost:11434/v1");
let agent = client
.agent("llama3.2")
.preamble("You are an solana trading agent here to help the user.")
.max_tokens(1024)
.tool(close_acc)
.tool(balance)
.tool(tps)
.build();
Ok(agent)
#[tokio::main]
async fn main() {
match create_solana_agent() {
Ok(agent) => {
// 这里可以使用代理进行具体的操作
println!("Solana agent created successfully!");
}
Err(e) => {
eprintln!("Failed to create Solana agent: {}", e);
}
}
}