From f05a70f08c159e8deb5ba4d60ae0e210d5d4f91f Mon Sep 17 00:00:00 2001 From: Arihant Bansal <17180950+arihantbansal@users.noreply.github.com> Date: Wed, 27 Nov 2024 17:24:15 +0530 Subject: [PATCH] feat: get tps --- src/agent/index.ts | 5 +++++ src/langchain/index.ts | 19 +++++++++++++++++++ src/tools/get_tps.ts | 17 +++++++++++++++++ src/tools/index.ts | 1 + 4 files changed, 42 insertions(+) create mode 100644 src/tools/get_tps.ts diff --git a/src/agent/index.ts b/src/agent/index.ts index c6371b0..69b58f1 100644 --- a/src/agent/index.ts +++ b/src/agent/index.ts @@ -11,6 +11,7 @@ import { registerDomain, lendAsset, getLendingDetails, + getTPS, } from "../tools"; import { CollectionOptions, LuloDepositAssetMint } from "../types"; import { DEFAULT_OPTIONS } from "../constants"; @@ -94,4 +95,8 @@ export class SolanaAgentKit { async fetchLendingDetails(LULO_API_KEY: string) { return getLendingDetails(this, LULO_API_KEY); } + + async getTPS() { + return getTPS(this); + } } diff --git a/src/langchain/index.ts b/src/langchain/index.ts index 837380c..3819a5c 100644 --- a/src/langchain/index.ts +++ b/src/langchain/index.ts @@ -239,6 +239,24 @@ export class SolanaFetchLendingDetailsTool extends Tool { } } +export class SolanaTPSCalculatorTool extends Tool { + name = "solana_get_tps"; + description = "Get the current TPS of the Solana network"; + + constructor(private solanaKit: SolanaAgentKit) { + super(); + } + + async _call(_input: string): Promise { + try { + const tps = await this.solanaKit.getTPS(); + return `Solana (mainnet-beta) current transactions per second: ${tps}`; + } catch (error: any) { + return `Error fetching TPS: ${error.message}`; + } + } +} + // Updated createSolanaTools function export function createSolanaTools(solanaKit: SolanaAgentKit) { return [ @@ -253,5 +271,6 @@ export function createSolanaTools(solanaKit: SolanaAgentKit) { new SolanaGetWalletAddressTool(solanaKit), new SolanaLendAssetTool(solanaKit), new SolanaFetchLendingDetailsTool(solanaKit), + new SolanaTPSCalculatorTool(solanaKit), ]; } diff --git a/src/tools/get_tps.ts b/src/tools/get_tps.ts new file mode 100644 index 0000000..7314ce3 --- /dev/null +++ b/src/tools/get_tps.ts @@ -0,0 +1,17 @@ +import { SolanaAgentKit } from "../index"; + +export async function getTPS(agent: SolanaAgentKit): Promise { + const perfSamples = await agent.connection.getRecentPerformanceSamples(); + + if ( + !perfSamples.length || + !perfSamples[0]?.numTransactions || + !perfSamples[0]?.samplePeriodSecs + ) { + throw new Error("No performance samples available"); + } + + const tps = perfSamples[0].numTransactions / perfSamples[0].samplePeriodSecs; + + return tps; +} diff --git a/src/tools/index.ts b/src/tools/index.ts index eee17a2..47ae5f3 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -7,3 +7,4 @@ export * from "./transfer"; export * from "./trade"; export * from "./register_domain"; export * from "./lend"; +export * from "./get_tps";