This commit is contained in:
Arihant Bansal
2024-12-22 01:30:29 +05:30
parent ed689f5efd
commit 6d4f468fb3
43 changed files with 407 additions and 213 deletions

View File

@@ -78,10 +78,10 @@ npm install solana-agent-kit
## Quick Start
```typescript
import { SolanaAgent, createSolanaTools } from "solana-agent-kit";
agent: SolanaAgentKit, createSolanaTools } from "solana-agent-kit";
// Initialize with private key and optional RPC URL
const agent = new SolanaAgent(
const agent = new SolanaAgentKit(
"your-wallet-private-key-as-base58",
"https://api.mainnet-beta.solana.com",
"your-openai-api-key"

View File

@@ -5,8 +5,8 @@
--dark-hl-1: #D4D4D4;
--light-hl-2: #A31515;
--dark-hl-2: #CE9178;
--light-hl-3: #AF00DB;
--dark-hl-3: #C586C0;
--light-hl-3: #000000;
--dark-hl-3: #C8C8C8;
--light-hl-4: #001080;
--dark-hl-4: #9CDCFE;
--light-hl-5: #008000;
@@ -15,8 +15,10 @@
--dark-hl-6: #569CD6;
--light-hl-7: #0070C1;
--dark-hl-7: #4FC1FF;
--light-hl-8: #098658;
--dark-hl-8: #B5CEA8;
--light-hl-8: #AF00DB;
--dark-hl-8: #C586C0;
--light-hl-9: #098658;
--dark-hl-9: #B5CEA8;
--light-code-background: #FFFFFF;
--dark-code-background: #1E1E1E;
}
@@ -31,6 +33,7 @@
--hl-6: var(--light-hl-6);
--hl-7: var(--light-hl-7);
--hl-8: var(--light-hl-8);
--hl-9: var(--light-hl-9);
--code-background: var(--light-code-background);
} }
@@ -44,6 +47,7 @@
--hl-6: var(--dark-hl-6);
--hl-7: var(--dark-hl-7);
--hl-8: var(--dark-hl-8);
--hl-9: var(--dark-hl-9);
--code-background: var(--dark-code-background);
} }
@@ -57,6 +61,7 @@
--hl-6: var(--light-hl-6);
--hl-7: var(--light-hl-7);
--hl-8: var(--light-hl-8);
--hl-9: var(--light-hl-9);
--code-background: var(--light-code-background);
}
@@ -70,6 +75,7 @@
--hl-6: var(--dark-hl-6);
--hl-7: var(--dark-hl-7);
--hl-8: var(--dark-hl-8);
--hl-9: var(--dark-hl-9);
--code-background: var(--dark-code-background);
}
@@ -82,4 +88,5 @@
.hl-6 { color: var(--hl-6); }
.hl-7 { color: var(--hl-7); }
.hl-8 { color: var(--hl-8); }
.hl-9 { color: var(--hl-9); }
pre, code { background: var(--code-background); }

View File

@@ -1 +1 @@
window.searchData = "data:application/octet-stream;base64,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";
window.searchData = "data:application/octet-stream;base64,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";

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

154
docs/media/CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,154 @@
# Contributing to Solana Agent Kit
First off, thank you for considering contributing to Solana Agent Kit! 🎉 Your contributions are **greatly appreciated**.
## Table of Contents
- [Contributing to Solana Agent Kit](#contributing-to-solana-agent-kit)
- [Table of Contents](#table-of-contents)
- [Code of Conduct](#code-of-conduct)
- [How Can I Contribute?](#how-can-i-contribute)
- [Reporting Bugs](#reporting-bugs)
- [Suggesting Enhancements](#suggesting-enhancements)
- [Your First Code Contribution](#your-first-code-contribution)
- [Pull Requests](#pull-requests)
- [Style Guides](#style-guides)
- [Code Style](#code-style)
- [Commit Messages](#commit-messages)
- [Naming Conventions](#naming-conventions)
- [Development Setup](#development-setup)
- [Prerequisites](#prerequisites)
- [Installation](#installation)
- [Building the Project](#building-the-project)
- [Running Tests](#running-tests)
- [Generating Documentation](#generating-documentation)
- [Security](#security)
- [License](#license)
## Code of Conduct
This project adheres to the [Contributor Covenant Code of Conduct](https://www.contributor-covenant.org/version/2/0/code_of_conduct/). By participating, you are expected to uphold this code. Please report unacceptable behavior to [aryan@sendai.fun](mailto:aryan@sendai.fun).
## How Can I Contribute?
### Reporting Bugs
**Great**! Opening an issue is the best way to help us improve. Here's how you can report a bug:
1. **Search** the [existing issues](https://github.com/sendaifun/solana-agent-kit/issues) to make sure it hasn't been reported.
2. **Open a new issue** and fill out the template with as much information as possible.
3. **Provide reproduction steps** if applicable.
### Suggesting Enhancements
We welcome your ideas for improving Solana Agent Kit! To suggest an enhancement:
1. **Search** the [existing issues](https://github.com/sendaifun/solana-agent-kit/issues) to see if it's already been suggested.
2. **Open a new issue** and describe your idea in detail.
### Your First Code Contribution
Unsure where to start? You can help out by:
- Fixing simple bugs.
- Improving documentation.
- Adding tests.
Check out the [Good First Issues](https://github.com/sendaifun/solana-agent-kit/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) to get started!
### Pull Requests
1. **Fork** the repository.
2. **Create** a new branch for your feature or bugfix.
```bash
git checkout -b feature/your-feature-name
```
3. **Commit** your changes with clear and descriptive messages.
4. **Push** to your fork.
```bash
git push origin feature/your-feature-name
```
5. **Open a Pull Request** against the `main` branch of this repository.
## Style Guides
### Code Style
- **Language**: TypeScript
- **Formatting**: Follow the existing codebase formatting. Consider using [Prettier](https://prettier.io/) for consistent code formatting.
- **Code Quality**: Adhere to the code quality rules defined in `.eslintrc`. Ensure all checks pass before submitting a PR.
### Commit Messages
Use [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) for your commit messages. Examples:
- `feat: add ability to deploy new SPL token`
- `fix: handle edge case when deploying collection`
- `docs: update README with new usage examples`
### Naming Conventions
- **Variables and Functions**: `camelCase`
- **Classes and Types**: `PascalCase`
- **Constants**: `UPPER_SNAKE_CASE`
## Development Setup
### Prerequisites
- **Node.js**: v23.x or higher
- **npm**: v10.x or higher
- **Git**: Installed and configured
### Installation
1. **Clone** the repository:
```bash
git clone https://github.com/yourusername/solana-agent-kit.git
```
2. **Navigate** to the project directory:
```bash
cd solana-agent-kit
```
3. **Install** dependencies:
```bash
pnpm install
```
### Building the Project
To compile the TypeScript code:
```bash
pnpm run build
```
### Running Tests
To execute the test suite:
```bash
pnpm run test
```
### Generating Documentation
To generate the project documentation using TypeDoc:
```bash
npm run docs
```
The documentation will be available in the `docs/` directory.
## Security
This toolkit handles sensitive information such as private keys and API keys. **Ensure you never commit `.env` files or any sensitive data**. Review the `.gitignore` to confirm that sensitive files are excluded.
For security vulnerabilities, please follow the [responsible disclosure](mailto:aryan@sendai.fun) process.
## License
This project is licensed under the [ISC License](LICENSE).
---

View File

@@ -21,19 +21,19 @@ Create a new TypeScript file in the `src/tools/` directory for your tool (e.g.,
```typescript:src/tools/custom_tool.ts
import { Tool } from "langchain/tools";
import { SolanaAgent } from "../agent";
import { SolanaAgentKit } from "../agent";
export class CustomTool extends Tool {
name = "custom_tool";
description = "Description of what the custom tool does.";
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
protected async _call(input: string): Promise<string> {
try {
const result = await this.solanaAgent.customFunction(input);
const result = await this.solanaKit.customFunction(input);
return JSON.stringify({
status: "success",
message: "Custom tool executed successfully",
@@ -87,7 +87,7 @@ export function createSolanaTools(agent: SolanaAgentKit) {
### 6. Usage Example
```typescript
import { SolanaAgent, createSolanaTools } from "solana-agent-kit";
agent: SolanaAgentKit, createSolanaTools } from "solana-agent-kit";
const agent = new SolanaAgent(
"your-wallet-private-key-as-base58",
@@ -118,19 +118,19 @@ Here's a complete example of implementing a tool to fetch token prices:
```typescript:src/tools/fetch_token_price.ts
import { Tool } from "langchain/tools";
import { SolanaAgent } from "../agent";
import { SolanaAgentKit } from "../agent";
export class FetchTokenPriceTool extends Tool {
name = "fetch_token_price";
description = "Fetches the current price of a specified token.";
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
protected async _call(tokenSymbol: string): Promise<string> {
try {
const price = await this.solanaAgent.getTokenPrice(tokenSymbol);
const price = await this.solanaKit.getTokenPrice(tokenSymbol);
return JSON.stringify({
status: "success",
message: `Price fetched successfully for ${tokenSymbol}.`,

View File

@@ -42,12 +42,12 @@ import { BN } from "@coral-xyz/anchor";
* Main class for interacting with Solana blockchain
* Provides a unified interface for token operations, NFT management, trading and more
*
* @class SolanaAgent
* @class SolanaAgentKit
* @property {Connection} connection - Solana RPC connection
* @property {Keypair} wallet - Wallet keypair for signing transactions
* @property {PublicKey} wallet_address - Public key of the wallet
*/
export class SolanaAgent {
export class SolanaAgentKit {
public connection: Connection;
public wallet: Keypair;
public wallet_address: PublicKey;

View File

@@ -1,7 +1,7 @@
import { SolanaAgent } from "./agent";
import { SolanaAgentKit } from "./agent";
import { createSolanaTools } from "./langchain";
export { SolanaAgent, createSolanaTools };
export { SolanaAgentKit, createSolanaTools };
// Optional: Export types that users might need
export * from "./types";

View File

@@ -1,7 +1,7 @@
import { PublicKey } from "@solana/web3.js";
import Decimal from "decimal.js";
import { Tool } from "langchain/tools";
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
import { create_image } from "../tools/create_image";
import { BN } from "@coral-xyz/anchor";
import { FEE_TIERS } from "../tools";
@@ -17,14 +17,14 @@ export class SolanaBalanceTool extends Tool {
Inputs:
tokenAddress: string, eg "So11111111111111111111111111111111111111112" (optional)`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
protected async _call(input: string): Promise<string> {
try {
const tokenAddress = input ? new PublicKey(input) : undefined;
const balance = await this.solanaAgent.getBalance(tokenAddress);
const balance = await this.solanaKit.getBalance(tokenAddress);
return JSON.stringify({
status: "success",
@@ -50,7 +50,7 @@ export class SolanaTransferTool extends Tool {
amount: number, eg 1 (required)
mint?: string, eg "So11111111111111111111111111111111111111112" or "SENDdRQtYMWaQrBroBrJ2Q53fgVuq95CV9UPGEvpCxa" (optional)`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -63,7 +63,7 @@ export class SolanaTransferTool extends Tool {
? new PublicKey(parsedInput.mint)
: undefined;
const tx = await this.solanaAgent.transfer(
const tx = await this.solanaKit.transfer(
recipient,
parsedInput.amount,
mintAddress,
@@ -98,7 +98,7 @@ export class SolanaDeployTokenTool extends Tool {
decimals?: number, eg 9 (optional, defaults to 9)
initialSupply?: number, eg 1000000 (optional)`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -106,7 +106,7 @@ export class SolanaDeployTokenTool extends Tool {
try {
const parsedInput = JSON.parse(input);
const result = await this.solanaAgent.deployToken(
const result = await this.solanaKit.deployToken(
parsedInput.name,
parsedInput.uri,
parsedInput.symbol,
@@ -139,7 +139,7 @@ export class SolanaDeployCollectionTool extends Tool {
uri: string, eg "https://example.com/collection.json" (required)
royaltyBasisPoints?: number, eg 500 for 5% (optional)`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -147,7 +147,7 @@ export class SolanaDeployCollectionTool extends Tool {
try {
const parsedInput = JSON.parse(input);
const result = await this.solanaAgent.deployCollection(parsedInput);
const result = await this.solanaKit.deployCollection(parsedInput);
return JSON.stringify({
status: "success",
@@ -173,9 +173,9 @@ export class SolanaMintNFTTool extends Tool {
collectionMint: string, eg "J1S9H3QjnRtBbbuD4HjPV6RpRhwuk4zKbxsnCHuTgh9w" (required) - The address of the collection to mint into
name: string, eg "My NFT" (required)
uri: string, eg "https://example.com/nft.json" (required)
recipient?: string, eg "9aUn5swQzUTRanaaTwmszxiv89cvFwUCjEBv1vZCoT1u" (optional) - The wallet to receive the NFT, defaults to agent's wallet which is ${this.solanaAgent.wallet_address.toString()}`;
recipient?: string, eg "9aUn5swQzUTRanaaTwmszxiv89cvFwUCjEBv1vZCoT1u" (optional) - The wallet to receive the NFT, defaults to agent's wallet which is ${this.solanaKit.wallet_address.toString()}`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -183,7 +183,7 @@ export class SolanaMintNFTTool extends Tool {
try {
const parsedInput = JSON.parse(input);
const result = await this.solanaAgent.mintNFT(
const result = await this.solanaKit.mintNFT(
new PublicKey(parsedInput.collectionMint),
{
name: parsedInput.name,
@@ -191,7 +191,7 @@ export class SolanaMintNFTTool extends Tool {
},
parsedInput.recipient
? new PublicKey(parsedInput.recipient)
: this.solanaAgent.wallet_address,
: this.solanaKit.wallet_address,
);
return JSON.stringify({
@@ -225,7 +225,7 @@ export class SolanaTradeTool extends Tool {
inputMint?: string, eg "So11111111111111111111111111111111111111112" (optional)
slippageBps?: number, eg 100 (optional)`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -233,7 +233,7 @@ export class SolanaTradeTool extends Tool {
try {
const parsedInput = JSON.parse(input);
const tx = await this.solanaAgent.trade(
const tx = await this.solanaKit.trade(
new PublicKey(parsedInput.outputMint),
parsedInput.inputAmount,
parsedInput.inputMint
@@ -264,18 +264,18 @@ export class SolanaRequestFundsTool extends Tool {
name = "solana_request_funds";
description = "Request SOL from Solana faucet (devnet/testnet only)";
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
protected async _call(_input: string): Promise<string> {
try {
await this.solanaAgent.requestFaucetFunds();
await this.solanaKit.requestFaucetFunds();
return JSON.stringify({
status: "success",
message: "Successfully requested faucet funds",
network: this.solanaAgent.connection.rpcEndpoint.split("/")[2],
network: this.solanaKit.connection.rpcEndpoint.split("/")[2],
});
} catch (error: any) {
return JSON.stringify({
@@ -296,7 +296,7 @@ export class SolanaRegisterDomainTool extends Tool {
spaceKB: number, eg 1 (optional, default is 1)
`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -317,7 +317,7 @@ export class SolanaRegisterDomainTool extends Tool {
const parsedInput = toJSON(input);
this.validateInput(parsedInput);
const tx = await this.solanaAgent.registerDomain(
const tx = await this.solanaKit.registerDomain(
parsedInput.name,
parsedInput.spaceKB || 1,
);
@@ -347,14 +347,14 @@ export class SolanaResolveDomainTool extends Tool {
domain: string, eg "pumpfun.sol" or "pumpfun"(required)
`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
protected async _call(input: string): Promise<string> {
try {
const domain = input.trim();
const publicKey = await this.solanaAgent.resolveSolDomain(domain);
const publicKey = await this.solanaKit.resolveSolDomain(domain);
return JSON.stringify({
status: "success",
@@ -379,14 +379,14 @@ export class SolanaGetDomainTool extends Tool {
account: string, eg "4Be9CvxqHW6BYiRAxW9Q3xu1ycTMWaL5z8NX4HR3ha7t" (required)
`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
protected async _call(input: string): Promise<string> {
try {
const account = new PublicKey(input.trim());
const domain = await this.solanaAgent.getPrimaryDomain(account);
const domain = await this.solanaKit.getPrimaryDomain(account);
return JSON.stringify({
status: "success",
@@ -407,12 +407,12 @@ export class SolanaGetWalletAddressTool extends Tool {
name = "solana_get_wallet_address";
description = `Get the wallet address of the agent`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
async _call(_input: string): Promise<string> {
return this.solanaAgent.wallet_address.toString();
return this.solanaKit.wallet_address.toString();
}
}
@@ -430,7 +430,7 @@ export class SolanaPumpfunTokenLaunchTool extends Tool {
description: string, eg "PumpFun Token is a token on the Solana blockchain",
imageUrl: string, eg "https://i.imgur.com/UFm07Np_d.png`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -464,7 +464,7 @@ export class SolanaPumpfunTokenLaunchTool extends Tool {
this.validateInput(parsedInput);
// Launch token with validated input
await this.solanaAgent.launchPumpFunToken(
await this.solanaKit.launchPumpFunToken(
parsedInput.tokenName,
parsedInput.tokenTicker,
parsedInput.description,
@@ -498,7 +498,7 @@ export class SolanaCreateImageTool extends Tool {
description =
"Create an image using OpenAI's DALL-E. Input should be a string prompt for the image.";
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -511,7 +511,7 @@ export class SolanaCreateImageTool extends Tool {
protected async _call(input: string): Promise<string> {
try {
this.validateInput(input);
const result = await create_image(this.solanaAgent, input.trim());
const result = await create_image(this.solanaKit, input.trim());
return JSON.stringify({
status: "success",
@@ -535,7 +535,7 @@ export class SolanaLendAssetTool extends Tool {
Inputs (input is a json string):
amount: number, eg 1, 0.01 (required)`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -543,7 +543,7 @@ export class SolanaLendAssetTool extends Tool {
try {
let amount = JSON.parse(input).amount || input;
const tx = await this.solanaAgent.lendAssets(amount);
const tx = await this.solanaKit.lendAssets(amount);
return JSON.stringify({
status: "success",
@@ -565,13 +565,13 @@ export class SolanaTPSCalculatorTool extends Tool {
name = "solana_get_tps";
description = "Get the current TPS of the Solana network";
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
async _call(_input: string): Promise<string> {
try {
const tps = await this.solanaAgent.getTPS();
const tps = await this.solanaKit.getTPS();
return `Solana (mainnet-beta) current transactions per second: ${tps}`;
} catch (error: any) {
return `Error fetching TPS: ${error.message}`;
@@ -586,7 +586,7 @@ export class SolanaStakeTool extends Tool {
Inputs ( input is a JSON string ):
amount: number, eg 1 or 0.01 (required)`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -594,7 +594,7 @@ export class SolanaStakeTool extends Tool {
try {
const parsedInput = JSON.parse(input) || Number(input);
const tx = await this.solanaAgent.stake(parsedInput.amount);
const tx = await this.solanaKit.stake(parsedInput.amount);
return JSON.stringify({
status: "success",
@@ -622,13 +622,13 @@ export class SolanaFetchPriceTool extends Tool {
Inputs:
- tokenId: string, the mint address of the token, e.g., "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN"`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
async _call(input: string): Promise<string> {
try {
const price = await this.solanaAgent.fetchTokenPrice(input.trim());
const price = await this.solanaKit.fetchTokenPrice(input.trim());
return JSON.stringify({
status: "success",
tokenId: input.trim(),
@@ -651,7 +651,7 @@ export class SolanaTokenDataTool extends Tool {
Inputs: mintAddress is required.
mintAddress: string, eg "So11111111111111111111111111111111111111112" (required)`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -659,8 +659,7 @@ export class SolanaTokenDataTool extends Tool {
try {
const parsedInput = input.trim();
const tokenData =
await this.solanaAgent.getTokenDataByAddress(parsedInput);
const tokenData = await this.solanaKit.getTokenDataByAddress(parsedInput);
return JSON.stringify({
status: "success",
@@ -683,14 +682,14 @@ export class SolanaTokenDataByTickerTool extends Tool {
Inputs: ticker is required.
ticker: string, eg "USDC" (required)`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
protected async _call(input: string): Promise<string> {
try {
const ticker = input.trim();
const tokenData = await this.solanaAgent.getTokenDataByTicker(ticker);
const tokenData = await this.solanaKit.getTokenDataByTicker(ticker);
return JSON.stringify({
status: "success",
tokenData: tokenData,
@@ -717,7 +716,7 @@ export class SolanaCompressedAirdropTool extends Tool {
priorityFeeInLamports: number, the priority fee in lamports. Default is 30_000. (optional)
shouldLog: boolean, whether to log progress to stdout. Default is false. (optional)`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -725,7 +724,7 @@ export class SolanaCompressedAirdropTool extends Tool {
try {
const parsedInput = JSON.parse(input);
const txs = await this.solanaAgent.sendCompressedAirdrop(
const txs = await this.solanaKit.sendCompressedAirdrop(
parsedInput.mintAddress,
parsedInput.amount,
parsedInput.decimals,
@@ -761,7 +760,7 @@ export class SolanaCreateSingleSidedWhirlpoolTool extends Tool {
- maxPrice: number, eg: 5.0 (required, maximum price at which liquidity is added)
- feeTier: number, eg: 0.30 (required, fee tier for the pool)`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -781,7 +780,7 @@ export class SolanaCreateSingleSidedWhirlpoolTool extends Tool {
);
}
const txId = await this.solanaAgent.createOrcaSingleSidedWhirlpool(
const txId = await this.solanaKit.createOrcaSingleSidedWhirlpool(
depositTokenAmount,
depositTokenMint,
otherTokenMint,
@@ -816,7 +815,7 @@ export class SolanaRaydiumCreateAmmV4 extends Tool {
startTime: number(seconds), eg: now number or zero (required)
`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -824,7 +823,7 @@ export class SolanaRaydiumCreateAmmV4 extends Tool {
try {
let inputFormat = JSON.parse(input);
const tx = await this.solanaAgent.raydiumCreateAmmV4(
const tx = await this.solanaKit.raydiumCreateAmmV4(
new PublicKey(inputFormat.marketId),
new BN(inputFormat.baseAmount),
new BN(inputFormat.quoteAmount),
@@ -858,7 +857,7 @@ export class SolanaRaydiumCreateClmm extends Tool {
startTime: number(seconds), eg: now number or zero (required)
`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -866,7 +865,7 @@ export class SolanaRaydiumCreateClmm extends Tool {
try {
let inputFormat = JSON.parse(input);
const tx = await this.solanaAgent.raydiumCreateClmm(
const tx = await this.solanaKit.raydiumCreateClmm(
new PublicKey(inputFormat.mint1),
new PublicKey(inputFormat.mint2),
@@ -904,7 +903,7 @@ export class SolanaRaydiumCreateCpmm extends Tool {
startTime: number(seconds), eg: now number or zero (required)
`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -912,7 +911,7 @@ export class SolanaRaydiumCreateCpmm extends Tool {
try {
let inputFormat = JSON.parse(input);
const tx = await this.solanaAgent.raydiumCreateCpmm(
const tx = await this.solanaKit.raydiumCreateCpmm(
new PublicKey(inputFormat.mint1),
new PublicKey(inputFormat.mint2),
@@ -950,7 +949,7 @@ export class SolanaOpenbookCreateMarket extends Tool {
tickSize: number (required)
`;
constructor(private solanaAgent: SolanaAgent) {
constructor(private solanaKit: SolanaAgentKit) {
super();
}
@@ -958,7 +957,7 @@ export class SolanaOpenbookCreateMarket extends Tool {
try {
let inputFormat = JSON.parse(input);
const tx = await this.solanaAgent.openbookCreateMarket(
const tx = await this.solanaKit.openbookCreateMarket(
new PublicKey(inputFormat.baseMint),
new PublicKey(inputFormat.quoteMint),
@@ -981,32 +980,32 @@ export class SolanaOpenbookCreateMarket extends Tool {
}
}
export function createSolanaTools(solanaAgent: SolanaAgent) {
export function createSolanaTools(solanaKit: SolanaAgentKit) {
return [
new SolanaBalanceTool(solanaAgent),
new SolanaTransferTool(solanaAgent),
new SolanaDeployTokenTool(solanaAgent),
new SolanaDeployCollectionTool(solanaAgent),
new SolanaMintNFTTool(solanaAgent),
new SolanaTradeTool(solanaAgent),
new SolanaRequestFundsTool(solanaAgent),
new SolanaRegisterDomainTool(solanaAgent),
new SolanaGetWalletAddressTool(solanaAgent),
new SolanaPumpfunTokenLaunchTool(solanaAgent),
new SolanaCreateImageTool(solanaAgent),
new SolanaLendAssetTool(solanaAgent),
new SolanaTPSCalculatorTool(solanaAgent),
new SolanaStakeTool(solanaAgent),
new SolanaFetchPriceTool(solanaAgent),
new SolanaResolveDomainTool(solanaAgent),
new SolanaGetDomainTool(solanaAgent),
new SolanaTokenDataTool(solanaAgent),
new SolanaTokenDataByTickerTool(solanaAgent),
new SolanaCompressedAirdropTool(solanaAgent),
new SolanaRaydiumCreateAmmV4(solanaAgent),
new SolanaRaydiumCreateClmm(solanaAgent),
new SolanaRaydiumCreateCpmm(solanaAgent),
new SolanaOpenbookCreateMarket(solanaAgent),
new SolanaCreateSingleSidedWhirlpoolTool(solanaAgent),
new SolanaBalanceTool(solanaKit),
new SolanaTransferTool(solanaKit),
new SolanaDeployTokenTool(solanaKit),
new SolanaDeployCollectionTool(solanaKit),
new SolanaMintNFTTool(solanaKit),
new SolanaTradeTool(solanaKit),
new SolanaRequestFundsTool(solanaKit),
new SolanaRegisterDomainTool(solanaKit),
new SolanaGetWalletAddressTool(solanaKit),
new SolanaPumpfunTokenLaunchTool(solanaKit),
new SolanaCreateImageTool(solanaKit),
new SolanaLendAssetTool(solanaKit),
new SolanaTPSCalculatorTool(solanaKit),
new SolanaStakeTool(solanaKit),
new SolanaFetchPriceTool(solanaKit),
new SolanaResolveDomainTool(solanaKit),
new SolanaGetDomainTool(solanaKit),
new SolanaTokenDataTool(solanaKit),
new SolanaTokenDataByTickerTool(solanaKit),
new SolanaCompressedAirdropTool(solanaKit),
new SolanaRaydiumCreateAmmV4(solanaKit),
new SolanaRaydiumCreateClmm(solanaKit),
new SolanaRaydiumCreateCpmm(solanaKit),
new SolanaOpenbookCreateMarket(solanaKit),
new SolanaCreateSingleSidedWhirlpoolTool(solanaKit),
];
}

View File

@@ -1,4 +1,4 @@
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
import OpenAI from "openai";
/**
@@ -10,7 +10,7 @@ import OpenAI from "openai";
* @returns Object containing the generated image URLs
*/
export async function create_image(
agent: SolanaAgent,
agent: SolanaAgentKit,
prompt: string,
size: "256x256" | "512x512" | "1024x1024" = "1024x1024",
n: number = 1,

View File

@@ -1,5 +1,5 @@
import { Keypair, PublicKey, Transaction } from "@solana/web3.js";
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
import { BN, Wallet } from "@coral-xyz/anchor";
import { Decimal } from "decimal.js";
import {
@@ -99,7 +99,7 @@ export const FEE_TIERS = {
*
* @example
* ```typescript
* import { SolanaAgentKit } from "your-sdk";
* agent: SolanaAgentKitKit } from "your-sdk";
* import { PublicKey } from "@solana/web3.js";
* import { BN } from "@coral-xyz/anchor";
* import Decimal from "decimal.js";
@@ -125,7 +125,7 @@ export const FEE_TIERS = {
* ```
*/
export async function createOrcaSingleSidedWhirlpool(
agent: SolanaAgent,
agent: SolanaAgentKit,
depositTokenAmount: BN,
depositTokenMint: PublicKey,
otherTokenMint: PublicKey,

View File

@@ -1,4 +1,4 @@
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
import {
generateSigner,
keypairIdentity,
@@ -23,7 +23,7 @@ import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
* @returns Object containing collection address and metadata
*/
export async function deploy_collection(
agent: SolanaAgent,
agent: SolanaAgentKit,
options: CollectionOptions,
): Promise<CollectionDeployment> {
try {

View File

@@ -1,4 +1,4 @@
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
import { PublicKey } from "@solana/web3.js";
import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
import { generateSigner, keypairIdentity } from "@metaplex-foundation/umi";
@@ -24,7 +24,7 @@ import {
* @returns Object containing token mint address and initial account (if supply was minted)
*/
export async function deploy_token(
agent: SolanaAgent,
agent: SolanaAgentKit,
name: string,
uri: string,
symbol: string,

View File

@@ -1,5 +1,5 @@
import { LAMPORTS_PER_SOL, PublicKey } from "@solana/web3.js";
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
/**
* Get the balance of SOL or an SPL token for the agent's wallet
@@ -8,7 +8,7 @@ import { SolanaAgent } from "../index";
* @returns Promise resolving to the balance as a number (in UI units) or null if account doesn't exist
*/
export async function get_balance(
agent: SolanaAgent,
agent: SolanaAgentKit,
token_address?: PublicKey,
): Promise<number | null> {
if (!token_address)

View File

@@ -1,6 +1,6 @@
import { getPrimaryDomain as _getPrimaryDomain } from "@bonfida/spl-name-service";
import { PublicKey } from "@solana/web3.js";
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
/**
* Retrieves the primary .sol domain associated with a given Solana public key.
@@ -15,7 +15,7 @@ import { SolanaAgent } from "../index";
* @throws Error if the domain is stale or if the domain resolution fails
*/
export async function getPrimaryDomain(
agent: SolanaAgent,
agent: SolanaAgentKit,
account: PublicKey,
): Promise<string> {
try {

View File

@@ -1,4 +1,4 @@
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
export async function getTPS(agent: SolanaAgentKit): Promise<number> {
const perfSamples = await agent.connection.getRecentPerformanceSamples();

View File

@@ -55,7 +55,7 @@ async function uploadMetadata(
}
async function createTokenTransaction(
agent: SolanaAgent,
agent: SolanaAgentKit,
mintKeypair: Keypair,
metadataResponse: any,
options?: PumpFunTokenOptions,
@@ -149,7 +149,7 @@ async function signAndSendTransaction(
* @returns - Signature of the transaction, mint address and metadata URI, if successful, else error
*/
export async function launchPumpFunToken(
agent: SolanaAgent,
agent: SolanaAgentKit,
tokenName: string,
tokenTicker: string,
description: string,

View File

@@ -1,5 +1,5 @@
import { VersionedTransaction } from "@solana/web3.js";
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
/**
* Lend tokens for yields using Lulo
@@ -8,7 +8,7 @@ import { SolanaAgent } from "../index";
* @returns Transaction signature
*/
export async function lendAsset(
agent: SolanaAgent,
agent: SolanaAgentKit,
amount: number,
): Promise<string> {
try {

View File

@@ -1,4 +1,4 @@
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
import { generateSigner, keypairIdentity } from "@metaplex-foundation/umi";
import { create, mplCore } from "@metaplex-foundation/mpl-core";
import { fetchCollection } from "@metaplex-foundation/mpl-core";
@@ -20,7 +20,7 @@ import { MintCollectionNFTResponse } from "../types";
* @returns Object containing NFT mint address and token account
*/
export async function mintCollectionNFT(
agent: SolanaAgent,
agent: SolanaAgentKit,
collectionMint: PublicKey,
metadata: {
name: string;

View File

@@ -5,10 +5,10 @@ import {
} from "@raydium-io/raydium-sdk-v2";
import { MintLayout, TOKEN_PROGRAM_ID } from "@solana/spl-token";
import { PublicKey } from "@solana/web3.js";
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
export async function openbookCreateMarket(
agent: SolanaAgent,
agent: SolanaAgentKit,
baseMint: PublicKey,
quoteMint: PublicKey,
lotSize: number = 1,

View File

@@ -9,10 +9,10 @@ import {
import { MintLayout, TOKEN_PROGRAM_ID } from "@solana/spl-token";
import { PublicKey } from "@solana/web3.js";
import BN from "bn.js";
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
export async function raydiumCreateAmmV4(
agent: SolanaAgent,
agent: SolanaAgentKit,
marketId: PublicKey,
baseAmount: BN,
quoteAmount: BN,

View File

@@ -7,10 +7,10 @@ import { MintLayout } from "@solana/spl-token";
import { PublicKey } from "@solana/web3.js";
import BN from "bn.js";
import Decimal from "decimal.js";
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
export async function raydiumCreateClmm(
agent: SolanaAgent,
agent: SolanaAgentKit,
mint1: PublicKey,
mint2: PublicKey,
configId: PublicKey,

View File

@@ -7,10 +7,10 @@ import {
import { MintLayout } from "@solana/spl-token";
import { PublicKey } from "@solana/web3.js";
import BN from "bn.js";
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
export async function raydiumCreateCpmm(
agent: SolanaAgent,
agent: SolanaAgentKit,
mintA: PublicKey,
mintB: PublicKey,
configId: PublicKey,

View File

@@ -1,6 +1,6 @@
import { registerDomainNameV2 } from "@bonfida/spl-name-service";
import { Transaction } from "@solana/web3.js";
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
import { getAssociatedTokenAddressSync } from "@solana/spl-token";
import { TOKENS } from "../constants";
@@ -12,7 +12,7 @@ import { TOKENS } from "../constants";
* @returns Transaction signature
*/
export async function registerDomain(
agent: SolanaAgent,
agent: SolanaAgentKit,
name: string,
spaceKB: number = 1,
): Promise<string> {

View File

@@ -1,4 +1,4 @@
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
import { LAMPORTS_PER_SOL } from "@solana/web3.js";
/**
@@ -8,7 +8,7 @@ import { LAMPORTS_PER_SOL } from "@solana/web3.js";
* @throws Error if the request fails or times out
*/
export async function request_faucet_funds(
agent: SolanaAgent,
agent: SolanaAgentKit,
): Promise<string> {
const tx = await agent.connection.requestAirdrop(
agent.wallet_address,

View File

@@ -1,6 +1,6 @@
import { resolve } from "@bonfida/spl-name-service";
import { PublicKey } from "@solana/web3.js";
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
/**
* Resolves a .sol domain to a Solana PublicKey.
@@ -15,7 +15,7 @@ import { SolanaAgent } from "../index";
* @throws Error if the domain resolution fails
*/
export async function resolveSolDomain(
agent: SolanaAgent,
agent: SolanaAgentKit,
domain: string,
): Promise<PublicKey> {
if (!domain || typeof domain !== "string") {

View File

@@ -5,7 +5,7 @@ import {
PublicKey,
TransactionInstruction,
} from "@solana/web3.js";
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
import {
buildAndSignTx,
calculateComputeUnitPrice,
@@ -56,7 +56,7 @@ export const getAirdropCostEstimate = (
* @param shouldLog Whether to log progress to stdout. Defaults to false.
*/
export async function sendCompressedAirdrop(
agent: SolanaAgent,
agent: SolanaAgentKit,
mintAddress: PublicKey,
amount: number,
decimals: number,
@@ -119,7 +119,7 @@ export async function sendCompressedAirdrop(
}
async function processAll(
agent: SolanaAgent,
agent: SolanaAgentKit,
amount: number,
mint: PublicKey,
recipients: PublicKey[],

View File

@@ -1,5 +1,5 @@
import { VersionedTransaction } from "@solana/web3.js";
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
/**
* Stake SOL with Jup validator
@@ -8,7 +8,7 @@ import { SolanaAgent } from "../index";
* @returns Transaction signature
*/
export async function stakeWithJup(
agent: SolanaAgent,
agent: SolanaAgentKit,
amount: number,
): Promise<string> {
try {

View File

@@ -3,7 +3,7 @@ import {
PublicKey,
LAMPORTS_PER_SOL,
} from "@solana/web3.js";
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
import { TOKENS, DEFAULT_OPTIONS, JUP_API } from "../constants";
/**
@@ -16,7 +16,7 @@ import { TOKENS, DEFAULT_OPTIONS, JUP_API } from "../constants";
* @returns Transaction signature
*/
export async function trade(
agent: SolanaAgent,
agent: SolanaAgentKit,
outputMint: PublicKey,
inputAmount: number,
inputMint: PublicKey = TOKENS.USDC,

View File

@@ -1,4 +1,4 @@
import { SolanaAgent } from "../index";
import { SolanaAgentKit } from "../index";
import { PublicKey, SystemProgram, Transaction } from "@solana/web3.js";
import { LAMPORTS_PER_SOL } from "@solana/web3.js";
import {
@@ -16,7 +16,7 @@ import {
* @returns Transaction signature
*/
export async function transfer(
agent: SolanaAgent,
agent: SolanaAgentKit,
to: PublicKey,
amount: number,
mint?: PublicKey,

View File

@@ -1,4 +1,4 @@
import { SolanaAgent } from "../agent";
import { SolanaAgentKit } from "../agent";
import { Transaction, Keypair, TransactionInstruction } from "@solana/web3.js";
import { Connection, ComputeBudgetProgram } from "@solana/web3.js";
@@ -74,7 +74,7 @@ export async function getPriorityFees(connection: Connection): Promise<{
* @returns Transaction ID
*/
export async function sendTx(
agent: SolanaAgent,
agent: SolanaAgentKit,
tx: Transaction,
otherKeypairs?: Keypair[],
) {

View File

@@ -1,4 +1,4 @@
import { SolanaAgent } from "../src";
agent: SolanaAgentKit } from "../src";
import { createSolanaTools } from "../src/langchain";
import { HumanMessage } from "@langchain/core/messages";
import { MemorySaver } from "@langchain/langgraph";