UNPKG

@hubbleprotocol/farms-sdk

Version:
76 lines (67 loc) 2.36 kB
import { PublicKey, Transaction } from "@solana/web3.js"; import Decimal from "decimal.js"; import { Farms, printMultisigTx, printSimulateTx } from "../Farms"; import { FarmState } from "../rpc_client/accounts"; import { getFarmsProgramId } from "../utils"; import { createAddExtraComputeUnitFeeTransaction, initializeClient, } from "./utils"; import { sendAndConfirmTransactionV0 } from "./refresh_all_klend_user_obligation_farms_from_file"; const microLamport = 5 * 10 ** 6; // 1 lamport const computeUnits = 1_000_000; const microLamportsPrioritizationFee = microLamport / computeUnits; export async function withdrawFarmRewardCommand( farm: string, rewardMint: string, amount: string, mode: string, priorityFeeMultiplier: number, ) { const admin = process.env.ADMIN; const rpc = process.env.RPC; const env = initializeClient(rpc!, admin!, getFarmsProgramId(rpc!), false); const farmsClient = new Farms(env.provider.connection); const farmPubkey = new PublicKey(farm); const farmState = await FarmState.fetch(env.provider.connection, farmPubkey); const rewardMintPubkey = new PublicKey(rewardMint); const amountToWithdraw = new Decimal(amount); if (!farmState) { throw new Error("Farm not found"); } const withdrawIxn = await farmsClient.withdrawRewardAmountFromFarmIx( env.initialOwner.publicKey, farmPubkey, rewardMintPubkey, amountToWithdraw, ); // 5. Send or print txn const { blockhash } = await env.provider.connection.getLatestBlockhash(); let txn = new Transaction(); txn.recentBlockhash = blockhash; txn.feePayer = env.initialOwner.publicKey; if (mode !== "multisig") { const priorityFeeIxn = createAddExtraComputeUnitFeeTransaction( computeUnits, microLamportsPrioritizationFee * priorityFeeMultiplier, ); txn.add(...priorityFeeIxn); } txn.add(withdrawIxn); if (mode === "simulate") { await printSimulateTx(env.provider.connection, txn); } else if (mode === "multisig") { await printMultisigTx(txn); } else if (mode === "execute") { console.log("Sending."); const sig = await sendAndConfirmTransactionV0( env.provider.connection, env.initialOwner, txn.instructions, [], [env.initialOwner], ); console.log("Farm", farmPubkey.toString()); console.log("Signature", sig); } }