@meteora-ag/m3m3 v1.0.10
Meteora M3M3 SDK
Getting started
NPM: https://www.npmjs.com/package/@meteora-ag/m3m3
SDK: https://github.com/MeteoraAg/stake-for-fee-sdk
Discord: https://discord.com/channels/841152225564950528/864859354335412224
Install
- Install deps
npm i @meteora-ag/m3m3 @coral-xyz/anchor @solana/web3.js @solana/spl-token @solana/spl-token-registry- Initialize StakeForFee instance
import StakeForFee from "@meteora-ag/m3m3";
import { PublicKey } from "@solana/web3.js";
import { Wallet, AnchorProvider } from "@project-serum/anchor";
// Connection, Wallet, and AnchorProvider to interact with the network
const mainnetConnection = new Connection("https://api.mainnet-beta.solana.com");
const mockWallet = new Wallet(new Keypair());
const provider = new AnchorProvider(mainnetConnection, mockWallet, {
commitment: "confirmed",
});
// Alternatively, to use Solana Wallet Adapter
const poolAddress = new PublicKey(
"G2MRSjNjCbFUmMf32Z1aXYhy6pc1ihLyYg6orKedyjJG"
);
const m3m3 = await StakeForFee.create(connection, poolAddress);- To interact with the StakeForFee
- Stake
const stakeAmount = new BN(
1_000 * 10 ** feeFarm.accountStates.tokenAMint.decimals
); // 1,000 stake token (make sure you have enough balance in your wallet)
const stakeTx = await feeFarm.stake(stakeAmount, mockWallet.publicKey);
const stakeTxHash = await provider.sendAndConfirm(stakeTx); // Transaction hash- Get stake balance and claimable balance
await feeFarm.refreshStates(); // make sure to refresh states to get the latest data
const userEscrow = await feeFarm.getUserStakeAndClaimBalance(
mockWallet.publicKey
);
const stakeBalance =
userStakeEscrow.stakeEscrow.stakeAmount.toNumber() /
10 ** feeFarm.accountStates.tokenAMint.decimals;
const claimableFeeA = fromLamports(
userStakeEscrow.unclaimFee.feeA || 0,
feeFarm.accountStates.tokenAMint.decimals
);
const claimableFeeB = fromLamports(
userStakeEscrow.unclaimFee.feeB || 0,
feeFarm.accountStates.tokenBMint.decimals
);- Claim Fee
const claimFeeTx = await feeVault.claimFee(
mockWallet.publicKey,
new BN(U64_MAX)
); // second param is max amount, so usually we just put max number BN.js can support
const claimfeeTxHash = await provider.sendAndConfirm(claimFeeTx); // Transaction hash- Unstake
const unstakeKeyPair = new Keypair();
const unstakeTx = await feeVault.unstake(
userEscrow.stakeEscrow.stakeAmount,
unstakeKeyPair.publicKey,
mockWallet.publicKey
);
unstakeTx.partialSign(unstakeKeyPair); // Make sure to partial sign unstakeKeypair
const unstakeTxHash = await provider.sendAndConfirm(unstakeTx); // Transaction hash- Get unstake period (Seconds)
const unstakePeriodInSeconds =
feeFarm.accountStates.feeVault.configuration.unstakeLockDuration.toNumber();- Cancel unstake
const cancelUnstakeTx = await feeFarm.cancelUnstake(
unstakeKeyPair.publicKey,
mockWallet.publicKey
);
const cancelUnstakeTxHash = await provider.sendAndConfirm(cancelUnstakeTx);- Withdraw
const withdrawTx = await feeFarm.withdraw(
unstakeKeyPair.publicKey,
mockWallet.publicKey
);
const withdrawTxHash = await provider.sendAndConfirm(withdrawTx);9 months ago
10 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
12 months ago
12 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago