54 lines
1.4 KiB
JavaScript
Raw Permalink Normal View History

2025-02-17 15:21:20 +07:00
import { VersionedTransaction } from "@solana/web3.js"
/**
* Stake SOL with Jup validator
* @param agent SolanaAgentKit instance
* @param amount Amount of SOL to stake
* @returns Transaction signature
*/
export async function stakeWithJup(agent, amount) {
try {
const res = await fetch(
`https://worker.jup.ag/blinks/swap/So11111111111111111111111111111111111111112/jupSoLaHXQiZZTSfEWMTRRgpnyFm8f6sZdosWBjx93v/${amount}`,
{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
account: agent.wallet.publicKey.toBase58()
})
}
)
const data = await res.json()
const txn = VersionedTransaction.deserialize(
Buffer.from(data.transaction, "base64")
)
const { blockhash, lastValidBlockHeight } = await agent.connection.getLatestBlockhash()
txn.message.recentBlockhash = blockhash
// Sign and send transaction
const signedTx = await agent.wallet.signTransaction(txn)
const txhash = await agent.connection.sendTransaction(signedTx, {
preflightCommitment: "confirmed",
maxRetries: 3
})
await agent.connection.confirmTransaction({
txhash,
blockhash: blockhash,
lastValidBlockHeight: lastValidBlockHeight
})
console.log(txhash);
return txhash
} catch (error) {
console.error(error)
throw new Error(`jupSOL staking failed: ${error.message}`)
}
}