From 45c8cad7b5072355945c40095b390073b656bb95 Mon Sep 17 00:00:00 2001 From: YCrydev <92126329+YCrydev@users.noreply.github.com> Date: Sun, 29 Dec 2024 19:05:18 +0100 Subject: [PATCH] update --- src/agent/index.ts | 4 +++- src/constants/index.ts | 2 ++ src/tools/trade.ts | 27 +++++++++++++++++++++++++-- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/agent/index.ts b/src/agent/index.ts index bf89861..3245dec 100644 --- a/src/agent/index.ts +++ b/src/agent/index.ts @@ -133,8 +133,10 @@ export class SolanaAgentKit { inputAmount: number, inputMint?: PublicKey, slippageBps: number = DEFAULT_OPTIONS.SLIPPAGE_BPS, + jupReferralAccount?:PublicKey, + jupFeeBps?:number, ): Promise { - return trade(this, outputMint, inputAmount, inputMint, slippageBps); + return trade(this, outputMint, inputAmount, inputMint, slippageBps, jupReferralAccount ,jupFeeBps); } async lendAssets(amount: number): Promise { diff --git a/src/constants/index.ts b/src/constants/index.ts index 7c1d9c5..e2fef12 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -22,9 +22,11 @@ export const TOKENS = { export const DEFAULT_OPTIONS = { SLIPPAGE_BPS: 300, TOKEN_DECIMALS: 9, + RERERRAL_FEE:200, } as const; /** * Jupiter API URL */ export const JUP_API = "https://quote-api.jup.ag/v6"; +export const JUP_REFERRAL_ADDRESS = 'REFER4ZgmyYx9c6He5XfaTMiGfdLwRnkV4RPp9t9iF3' diff --git a/src/tools/trade.ts b/src/tools/trade.ts index b42cc2a..c7fc882 100644 --- a/src/tools/trade.ts +++ b/src/tools/trade.ts @@ -4,7 +4,12 @@ import { LAMPORTS_PER_SOL, } from "@solana/web3.js"; import { SolanaAgentKit } from "../index"; -import { TOKENS, DEFAULT_OPTIONS, JUP_API } from "../constants"; +import { + TOKENS, + DEFAULT_OPTIONS, + JUP_API, + JUP_REFERRAL_ADDRESS, +} from "../constants"; /** * Swap tokens using Jupiter Exchange @@ -13,6 +18,8 @@ import { TOKENS, DEFAULT_OPTIONS, JUP_API } from "../constants"; * @param inputAmount Amount to swap (in token decimals) * @param inputMint Source token mint address (defaults to USDC) * @param slippageBps Slippage tolerance in basis points (default: 300 = 3%) + * @param jupReferralAccount Jup Refferral Account, to earn fees on swaps + * @param jupFeeBps Jup Refferral Fee, to earn fees on swaps (default: 100 = 1%) * @returns Transaction signature */ export async function trade( @@ -21,6 +28,8 @@ export async function trade( inputAmount: number, inputMint: PublicKey = TOKENS.USDC, slippageBps: number = DEFAULT_OPTIONS.SLIPPAGE_BPS, + jupReferralAccount?: PublicKey, + jupFeeBps?: number, ): Promise { try { const quoteResponse = await ( @@ -31,11 +40,24 @@ export async function trade( `&amount=${inputAmount * LAMPORTS_PER_SOL}` + `&slippageBps=${slippageBps}` + `&onlyDirectRoutes=true` + - `&maxAccounts=20`, + `&maxAccounts=20` + + `${jupFeeBps ? `&platformFeeBps=${jupFeeBps}` : ""}`, ) ).json(); // Get serialized transaction + let feeAccount; + if (jupReferralAccount) { + [feeAccount] = await PublicKey.findProgramAddressSync( + [ + Buffer.from("referral_ata"), + jupReferralAccount.toBuffer(), + TOKENS.SOL.toBuffer(), + ], + new PublicKey(JUP_REFERRAL_ADDRESS), + ); + } + const { swapTransaction } = await ( await fetch("https://quote-api.jup.ag/v6/swap", { method: "POST", @@ -48,6 +70,7 @@ export async function trade( wrapAndUnwrapSol: true, dynamicComputeUnitLimit: true, prioritizationFeeLamports: "auto", + feeAccount: feeAccount ? feeAccount.toString() : null, }), }) ).json();