Skip to main content

createCollectEmissionInstruction

Builds a raw instruction to collect emission rewards from a yield position. Each vault can have multiple emission tokens, identified by their index.

Usage

import { createCollectEmissionInstruction, amount } from "@exponent-labs/exponent-sdk/client/core";
import { PublicKey } from "@solana/web3.js";

const ix = createCollectEmissionInstruction(
  {
    owner: wallet.publicKey,
    vault: vaultAddress,
    position: userYieldPositionPda,
    syProgram: syProgramId,
    authority: vaultAuthority,
    emissionEscrow: emissionEscrowAccount,
    emissionDst: userEmissionTokenAccount,
    addressLookupTable: vaultLookupTable,
    treasuryEmissionTokenAccount: treasuryEmissionAccount,
    tokenProgram: TOKEN_PROGRAM_ID,
    eventAuthority: eventAuthorityPda,
    program: EXPONENT_CORE_PROGRAM_ID,
  },
  {
    index: 0, // First emission token
    amount: amount("All"),
  }
);

Accounts

NameTypeSignerWritableDescription
ownerPublicKeyYesYesThe yield position owner
vaultPublicKeyNoYesVault account
positionPublicKeyNoYesUser’s yield position PDA
syProgramPublicKeyNoNoSY program
authorityPublicKeyNoNoVault authority PDA
emissionEscrowPublicKeyNoYesEmission token escrow account
emissionDstPublicKeyNoYesDestination emission token account
addressLookupTablePublicKeyNoNoVault address lookup table
treasuryEmissionTokenAccountPublicKeyNoYesTreasury emission token account (fees)
tokenProgramPublicKeyNoNoSPL Token program
eventAuthorityPublicKeyNoNoEvent authority PDA
programPublicKeyNoNoExponent Core program

Args

NameTypeDescription
indexnumberEmission index (0-based, corresponding to vault’s emission list)
amountAmountAmount to collect: amount("All") or amount("Some", [value])

Amount Helper

import { amount } from "@exponent-labs/exponent-sdk/client/core";

amount("All")                // collect everything available
amount("Some", [500_000n])   // collect a specific amount

Returns

TransactionInstruction — a transaction instruction ready to be added to a transaction.