Merge branch 'main' into feat/add-sol-domain-tools

This commit is contained in:
ARYAN
2024-12-19 05:58:33 +05:30
committed by GitHub
21 changed files with 233 additions and 47 deletions

View File

@@ -1 +0,0 @@
solanaagentkit.xyz

View File

@@ -1 +1 @@
window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAE4XSTUsDQQwG4P+S8+Ji0SJ7K5ZerB/o3sTDMGbdodlk2GRAkf53qRXt4nR6mUveeUJInj/B8N2ggSchx27xhmw3waCC6KyHBjw5VdR6Wj/rbSCoYBP4FZrz2dW2+pWuhQi9BeElRpKPAfnAC2w4ds6j1rngFJ5dzrPwfdy9ekL9SRXJEZ3JmIf2tdL3dSJZeC+JbYnmAukjahRWzIrH46Umt4Htb6i7VVvscTRdavGQhtglXrvEvi/y2eQpepW4lQ0W15bJlVi/Ww7uj7IVoQO0S/w9u9b/QlNxfrF9+QJeMbLbAQMAAA=="
window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAE4XTQUvDMBTA8e+Sc7E4dEhvw9KDzm1ob+IhxNc1LH0vJC+gyL67bBNdXfZ26SX//l4T0tcvxfDBqlIv5DTq2RqQHy2rQnnNvaqUcTpGiOV4/arnwalCbSy+q+p6crctfqV7cg4MW8IavKPPAfDIs8gQOm0glrlwDE9up1l46XfPeEH9qUQygGYKeeiwJr3eAJt+FayBZ4ieMEJWOs0k9CF5yxBa2gDWmnWW/B9J4Dw5mhlDCbkG1tZF8WvP59KQJ4v8d/SLphVnnK2lEas0+C7hXCc0vchny0t0k3B/nNLlynQSa3ZXCA6/TkvkjtAu4X7vsTyJxuL0Zvv2DYU9ByOnAwAA"

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

View File

@@ -2,6 +2,8 @@
</div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Interfaces</h3><div class="tsd-index-list"><a href="interfaces/CollectionDeployment.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="assets/icons.svg#icon-256"></use></svg><span>Collection<wbr/>Deployment</span></a>
<a href="interfaces/CollectionOptions.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="assets/icons.svg#icon-256"></use></svg><span>Collection<wbr/>Options</span></a>
<a href="interfaces/Creator.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="assets/icons.svg#icon-256"></use></svg><span>Creator</span></a>
<a href="interfaces/FetchPriceResponse.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="assets/icons.svg#icon-256"></use></svg><span>Fetch<wbr/>Price<wbr/>Response</span></a>
<a href="interfaces/JupiterTokenData.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="assets/icons.svg#icon-256"></use></svg><span>Jupiter<wbr/>Token<wbr/>Data</span></a>
<a href="interfaces/LuloAccountDetailsResponse.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="assets/icons.svg#icon-256"></use></svg><span>Lulo<wbr/>Account<wbr/>Details<wbr/>Response</span></a>
<a href="interfaces/MintCollectionNFTResponse.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="assets/icons.svg#icon-256"></use></svg><span>Mint<wbr/>CollectionNFTResponse</span></a>
<a href="interfaces/PumpfunLaunchResponse.html" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="assets/icons.svg#icon-256"></use></svg><span>Pumpfun<wbr/>Launch<wbr/>Response</span></a>

View File

@@ -14,6 +14,8 @@ import {
launchPumpFunToken,
lendAsset,
getTPS,
getTokenDataByAddress,
getTokenDataByTicker,
stakeWithJup,
} from "../tools";
import { CollectionOptions, PumpFunTokenOptions } from "../types";
@@ -37,7 +39,7 @@ export class SolanaAgentKit {
constructor(
private_key: string,
rpc_url = "https://api.mainnet-beta.solana.com",
openai_api_key: string,
openai_api_key: string
) {
this.connection = new Connection(rpc_url);
this.wallet = Keypair.fromSecretKey(bs58.decode(private_key));
@@ -51,7 +53,7 @@ export class SolanaAgentKit {
}
async deployToken(
decimals: number = DEFAULT_OPTIONS.TOKEN_DECIMALS,
decimals: number = DEFAULT_OPTIONS.TOKEN_DECIMALS
// initialSupply?: number
) {
return deploy_token(this, decimals);
@@ -68,7 +70,7 @@ export class SolanaAgentKit {
async mintNFT(
collectionMint: PublicKey,
metadata: Parameters<typeof mintCollectionNFT>[2],
recipient?: PublicKey,
recipient?: PublicKey
) {
return mintCollectionNFT(this, collectionMint, metadata, recipient);
}
@@ -93,7 +95,7 @@ export class SolanaAgentKit {
outputMint: PublicKey,
inputAmount: number,
inputMint?: PublicKey,
slippageBps: number = DEFAULT_OPTIONS.SLIPPAGE_BPS,
slippageBps: number = DEFAULT_OPTIONS.SLIPPAGE_BPS
) {
return trade(this, outputMint, inputAmount, inputMint, slippageBps);
}
@@ -106,12 +108,20 @@ export class SolanaAgentKit {
return getTPS(this);
}
async getTokenDataByAddress(mint: string) {
return getTokenDataByAddress(new PublicKey(mint));
}
async getTokenDataByTicker(ticker: string) {
return getTokenDataByTicker(ticker);
}
async launchPumpFunToken(
tokenName: string,
tokenTicker: string,
description: string,
imageUrl: string,
options?: PumpFunTokenOptions,
options?: PumpFunTokenOptions
) {
return launchPumpFunToken(
this,
@@ -119,7 +129,7 @@ export class SolanaAgentKit {
tokenTicker,
description,
imageUrl,
options,
options
);
}

View File

@@ -64,7 +64,7 @@ export class SolanaTransferTool extends Tool {
const tx = await this.solanaKit.transfer(
recipient,
parsedInput.amount,
mintAddress
mintAddress,
);
return JSON.stringify({
@@ -102,7 +102,7 @@ export class SolanaDeployTokenTool extends Tool {
input.decimals > 9)
) {
throw new Error(
"decimals must be a number between 0 and 9 when provided"
"decimals must be a number between 0 and 9 when provided",
);
}
if (
@@ -159,7 +159,7 @@ export class SolanaDeployCollectionTool extends Tool {
input.royaltyBasisPoints > 10000)
) {
throw new Error(
"royaltyBasisPoints must be a number between 0 and 10000 when provided"
"royaltyBasisPoints must be a number between 0 and 10000 when provided",
);
}
if (input.creators) {
@@ -169,7 +169,7 @@ export class SolanaDeployCollectionTool extends Tool {
input.creators.forEach((creator: any, index: number) => {
if (!creator.address || typeof creator.address !== "string") {
throw new Error(
`creator[${index}].address is required and must be a string`
`creator[${index}].address is required and must be a string`,
);
}
if (
@@ -178,7 +178,7 @@ export class SolanaDeployCollectionTool extends Tool {
creator.percentage > 100
) {
throw new Error(
`creator[${index}].percentage must be a number between 0 and 100`
`creator[${index}].percentage must be a number between 0 and 100`,
);
}
});
@@ -246,7 +246,9 @@ export class SolanaMintNFTTool extends Tool {
const result = await this.solanaKit.mintNFT(
new PublicKey(parsedInput.collectionMint),
parsedInput.metadata,
parsedInput.recipient ? new PublicKey(parsedInput.recipient) : undefined
parsedInput.recipient
? new PublicKey(parsedInput.recipient)
: undefined,
);
return JSON.stringify({
@@ -290,7 +292,7 @@ export class SolanaTradeTool extends Tool {
parsedInput.inputMint
? new PublicKey(parsedInput.inputMint)
: new PublicKey("So11111111111111111111111111111111111111112"),
parsedInput.slippageBps
parsedInput.slippageBps,
);
return JSON.stringify({
@@ -370,7 +372,7 @@ export class SolanaRegisterDomainTool extends Tool {
const tx = await this.solanaKit.registerDomain(
parsedInput.name,
parsedInput.spaceKB || 1
parsedInput.spaceKB || 1,
);
return JSON.stringify({
@@ -527,7 +529,7 @@ export class SolanaPumpfunTokenLaunchTool extends Tool {
telegram: parsedInput.telegram,
website: parsedInput.website,
initialLiquiditySOL: parsedInput.initialLiquiditySOL,
}
},
);
return JSON.stringify({
@@ -697,6 +699,68 @@ export class SolanaFetchPriceTool extends Tool {
}
}
export class SolanaTokenDataTool extends Tool {
name = "solana_token_data";
description = `Get the token data for a given token mint address
Inputs: mintAddress is required.
mintAddress: string, eg "So11111111111111111111111111111111111111112" (required)`;
constructor(private solanaKit: SolanaAgentKit) {
super();
}
protected async _call(input: string): Promise<string> {
try {
const parsedInput = input.trim();
const tokenData = await this.solanaKit.getTokenDataByAddress(
parsedInput
);
return JSON.stringify({
status: "success",
tokenData: tokenData,
});
} catch (error: any) {
return JSON.stringify({
status: "error",
message: error.message,
code: error.code || "UNKNOWN_ERROR",
});
}
}
}
export class SolanaTokenDataByTickerTool extends Tool {
name = "solana_token_data_by_ticker";
description = `Get the token data for a given token ticker
Inputs: ticker is required.
ticker: string, eg "USDC" (required)`;
constructor(private solanaKit: SolanaAgentKit) {
super();
}
protected async _call(input: string): Promise<string> {
try {
const ticker = input.trim();
const tokenData = await this.solanaKit.getTokenDataByTicker(ticker);
return JSON.stringify({
status: "success",
tokenData: tokenData,
});
} catch (error: any) {
return JSON.stringify({
status: "error",
message: error.message,
code: error.code || "UNKNOWN_ERROR",
});
}
}
}
export function createSolanaTools(solanaKit: SolanaAgentKit) {
return [
new SolanaBalanceTool(solanaKit),
@@ -716,5 +780,7 @@ export function createSolanaTools(solanaKit: SolanaAgentKit) {
new SolanaFetchPriceTool(solanaKit),
new SolanaResolveDomainTool(solanaKit),
new SolanaGetDomainTool(solanaKit),
new SolanaTokenDataTool(solanaKit),
new SolanaTokenDataByTickerTool(solanaKit),
];
}

View File

@@ -0,0 +1,70 @@
import { PublicKey } from "@solana/web3.js";
import { JupiterTokenData } from "../types";
export async function getTokenDataByAddress(
mint: PublicKey,
): Promise<JupiterTokenData | undefined> {
try {
if (!mint) {
throw new Error("Mint address is required");
}
const response = await fetch("https://tokens.jup.ag/tokens?tags=verified", {
method: "GET",
headers: {
"Content-Type": "application/json",
},
});
const data = (await response.json()) as JupiterTokenData[];
const token = data.find((token: JupiterTokenData) => {
return token.address === mint.toBase58();
});
return token;
} catch (error: any) {
throw new Error(`Error fetching token data: ${error.message}`);
}
}
export async function getTokenAddressFromTicker(
ticker: string
): Promise<string | null> {
try {
const response = await fetch(
`https://api.dexscreener.com/latest/dex/search?q=${ticker}`
);
const data = await response.json();
if (!data.pairs || data.pairs.length === 0) {
return null;
}
// Filter for Solana pairs only and sort by FDV
let solanaPairs = data.pairs
.filter((pair: any) => pair.chainId === "solana")
.sort((a: any, b: any) => (b.fdv || 0) - (a.fdv || 0));
console.log("solanaPairs", solanaPairs);
solanaPairs = solanaPairs.filter(
(pair: any) =>
pair.baseToken.symbol.toLowerCase() === ticker.toLowerCase()
);
// Return the address of the highest FDV Solana pair
return solanaPairs[0].baseToken.address;
} catch (error) {
console.error("Error fetching token address from DexScreener:", error);
return null;
}
}
export async function getTokenDataByTicker(
ticker: string
): Promise<JupiterTokenData | undefined> {
const address = await getTokenAddressFromTicker(ticker);
if (!address) {
throw new Error(`Token address not found for ticker: ${ticker}`);
}
return getTokenDataByAddress(new PublicKey(address));
}

View File

@@ -11,5 +11,6 @@ export * from "./get_primary_domain";
export * from "./launch_pumpfun_token";
export * from "./lend";
export * from "./get_tps";
export * from "./get_token_data";
export * from './stake_with_jup';
export * from "./fetch_price";
export * from "./fetch_price";

View File

@@ -39,7 +39,6 @@ export interface PumpfunLaunchResponse {
error?: string;
}
/**
* Lulo Account Details response format
*/
@@ -55,6 +54,22 @@ export interface LuloAccountDetailsResponse {
};
}
export interface JupiterTokenData {
address: string;
name: string;
symbol: string;
decimals: number;
tags: string[];
logoURI: string;
daily_volume: number;
freeze_authority: string | null;
mint_authority: string | null;
permanent_delegate: string | null;
extensions: {
coingeckoId?: string;
};
}
export interface FetchPriceResponse {
status: "success" | "error";
tokenId?: string;