This guide provides instructions on how to integrate DAMM v1 pools with farms. Before you begin, here are some important resources:
  • Program ID (Mainnet & Devnet): FarmuwXPWXvefWUeqFAa5w6rifLkq5X6E8bimYvrhCB1
  • TypeScript SDK Repository: @meteora-ag/farming-sdk

Install Dependencies

npm install @meteora-ag/farming-sdk @solana/web3.js
# or
pnpm install @meteora-ag/farming-sdk @solana/web3.js
# or
yarn add @meteora-ag/farming-sdk @solana/web3.js

Initialize PoolFarmImpl Instance

import { PoolFarmImpl } from "@meteora-ag/farming-sdk";
import { Connection, PublicKey, Keypair } from "@solana/web3.js";

// Connection, Wallet, and AnchorProvider to interact with the network
const mainnetConnection = new Connection("https://api.mainnet-beta.solana.com");

const USDC_acUSDC_POOL = new PublicKey(
  "6ZLKLjMd2KzH7PPHCXUPgbMAtdTT37VgTtdeXWLoJppr"
); // Pool Address can get from https://docs.meteora.ag/dynamic-pools-integration/dynamic-pool-api/pool-info

const farmingPools = await PoolFarmImpl.getFarmAddressesByPoolAddress(
  USDC_acUSDC_POOL
);
// farmingPools is an array (A pool can have multiple farms)
const farmingPool = farmingPools[0];
const farm = await PoolFarmImpl.create(
  mainnetConnection,
  farmingPool.farmAddress
);

Code Examples

Stake

// https://station.jup.ag/blog/jupiter-token-list-api#endpoints
const tokenList = await fetch('https://token.jup.ag/all').then(res => res.json());
const USDC = tokenList.find(token => token.address === <USDC_ADDRESS>);
const USDT = tokenList.find(token => token.address === <USDT_ADDRESS>);

// Get pool lp balance from `@meteora-ag/dynamic-amm-sdk` package
const pool = await AmmImpl.create(connection, MAINNET_POOL.USDC_USDT, USDC, USDT);
const lpBalance = await pool.getUserBalance(mockWallet.publicKey);

const stakeTx = await farm.deposit(mockWallet.publicKey, lpBalance); // Web3 Transaction Object
const stakeResult = await provider.sendAndConfirm(stakeTx); // Transaction hash

Claim

const claimTx = await farm.claim(mockWallet.publicKey);
const claimResult = await provider.sendAndConfirm(claimTx); // Transaction hash

Unstake

const unStakeTx = await farm.withdraw(mockWallet.publicKey, farmBalance); // Web3 Transaction Object
const unstakeResult = await provider.sendAndConfirm(unStakeTx); // Transaction hash

Check Stake Balance

const farmBalance = await farm.getUserBalance(mockWallet.publicKey);