TypeScript SDK#
The Marinade TypeScript SDK provides a complete interface for integrating liquid and native staking into your Solana applications.
| Package | Purpose |
|---|---|
@marinade.finance/marinade-ts-sdk |
Liquid staking (mSOL) |
@marinade.finance/native-staking-sdk |
Native staking |
Installation#
Configuration#
TypeScript
import { Marinade, MarinadeConfig } from '@marinade.finance/marinade-ts-sdk';
import { Connection, PublicKey } from '@solana/web3.js';
const config = new MarinadeConfig({
connection: new Connection('https://api.mainnet-beta.solana.com'),
publicKey: new PublicKey('YOUR_WALLET_ADDRESS'),
});
const marinade = new Marinade(config);
TypeScript
import { Marinade, MarinadeConfig } from '@marinade.finance/marinade-ts-sdk';
import { Connection, PublicKey } from '@solana/web3.js';
const config = new MarinadeConfig({
connection: new Connection('https://api.devnet.solana.com'),
publicKey: new PublicKey('YOUR_WALLET_ADDRESS'),
});
const marinade = new Marinade(config);
Liquid Staking Operations#
Deposit SOL (Get mSOL)#
TypeScript
// Deposit 1 SOL and receive mSOL
const { transaction } = await marinade.deposit(1_000_000_000); // lamports
// Sign and send transaction
const signature = await sendAndConfirmTransaction(connection, transaction, [wallet]);
Unstake (mSOL → SOL)#
The SDK provides liquidUnstake for converting mSOL back to SOL:
TypeScript
// Liquid unstake - swaps mSOL for SOL via liquidity pool
const { transaction } = await marinade.liquidUnstake(1_000_000_000); // mSOL in lamports
// Sign and send
const signature = await sendAndConfirmTransaction(connection, transaction, [wallet]);
Unstake Options
- Instant: Use
liquidUnstake()- small fee (~0.1-0.3%), immediate SOL - Delayed: Use the web interface for fee-free unstaking (~1-2 epochs wait)
Liquidity Pool Operations#
The SDK also supports liquidity pool interactions:
TypeScript
// Add liquidity to the mSOL/SOL pool
const { transaction } = await marinade.addLiquidity(1_000_000_000); // SOL in lamports
// Remove liquidity (receive SOL and mSOL)
const { transaction } = await marinade.removeLiquidity(lpTokenAmount);
Native Staking SDK#
For native staking operations, use the dedicated @marinade.finance/native-staking-sdk:
Configuration#
TypeScript
import { NativeStakingConfig, NativeStakingSDK } from '@marinade.finance/native-staking-sdk';
import { Connection, PublicKey } from '@solana/web3.js';
// Max Yield configuration
const config = new NativeStakingConfig({
connection: new Connection('https://api.mainnet-beta.solana.com'),
stakeAuthority: new PublicKey('stWirqFCf2Uts1JBL1Jsd3r6VBWhgnpdPxCTe1MFjrq'),
exitAuthority: new PublicKey('ex9CfkBZZd6Nv9XdnoDmmB45ymbu4arXVk7g5pWnt3N'),
nativeStakingApiUrl: 'https://native-staking.marinade.finance',
});
// Select configuration
const selectConfig = new NativeStakingConfig({
connection: new Connection('https://api.mainnet-beta.solana.com'),
stakeAuthority: new PublicKey('STNi1NHDUi6Hvibvonawgze8fM83PFLeJhuGMEXyGps'),
exitAuthority: new PublicKey('EX1Fs34ajye3BTMSjTkMdZ8P4hb99vQFWzmueqhKGpH6'),
nativeStakingApiUrl: 'https://ns-prime.marinade.finance',
});
// Recipes configuration
const recipesConfig = new NativeStakingConfig({
connection: new Connection('https://api.mainnet-beta.solana.com'),
stakeAuthority: new PublicKey('stRcP4kVnCNubspkcP3BXEthPfZFEriQBqSczDDwmYH'),
exitAuthority: new PublicKey('exRcSuzu5XLZYZ4GgeWYDn9qYwQnBycmyG8zBDJhEgY'),
nativeStakingApiUrl: 'https://ns-recipes.marinade.finance',
});
const sdk = new NativeStakingSDK(config);
Get Stake Accounts#
TypeScript
// Fetch user's stake accounts managed by Marinade
const accounts = await sdk.getStakeAccounts(walletPublicKey);
// Returns: ready to revoke, being prepared, and actively managed accounts
Fetch Rewards#
TypeScript
// Get rewards data for user's native staked accounts
const rewards = await sdk.fetchRewards(walletPublicKey);
console.log(`APY: ${rewards.apy}`); // Note: null if no active stakes yet
Create Authorized Stake#
TypeScript
import BN from 'bn.js';
const amount = new BN('2000000000'); // 2 SOL
const { createAuthorizedStake, stakeKeypair } = sdk.buildCreateAuthorizedStakeInstructions(
walletPublicKey,
amount
);
// Build and send transaction...
Native Staking SDK Types
The SDK provides two configurations:
NativeStakingConfig- Default native staking via SAMNativeStakingSelectConfig- For Marinade Select program
Querying Data#
Get mSOL/SOL Exchange Rate#
TypeScript
const state = await marinade.getMarinadeState();
const rate = state.mSolPrice; // mSOL per SOL
console.log(`1 mSOL = ${rate} SOL`);
Get User Stakes#
TypeScript
const stakes = await marinade.getUserStakes(walletPublicKey);
for (const stake of stakes) {
console.log(`Stake: ${stake.balance} lamports`);
}
Error Handling#
TypeScript
import { MarinadeError } from '@marinade.finance/marinade-ts-sdk';
try {
const { transaction } = await marinade.deposit(amount);
} catch (error) {
if (error instanceof MarinadeError) {
console.error(`Marinade error: ${error.code} - ${error.message}`);
}
throw error;
}
Full Example#
full-example.ts
import { Marinade, MarinadeConfig } from '@marinade.finance/marinade-ts-sdk';
import { Connection, Keypair, PublicKey } from '@solana/web3.js';
async function main() {
// Setup
const connection = new Connection('https://api.mainnet-beta.solana.com');
const wallet = Keypair.fromSecretKey(/* your key */);
const config = new MarinadeConfig({
connection,
publicKey: wallet.publicKey,
});
const marinade = new Marinade(config);
// Check current state
const state = await marinade.getMarinadeState();
console.log(`mSOL price: ${state.mSolPrice}`);
console.log(`Total staked: ${state.totalStaked}`);
// Deposit 1 SOL
const { transaction } = await marinade.deposit(1_000_000_000);
// Sign and send
transaction.sign(wallet);
const sig = await connection.sendRawTransaction(transaction.serialize());
await connection.confirmTransaction(sig);
console.log(`Deposited! Tx: ${sig}`);
}
main().catch(console.error);
Resources#
- GitHub: marinade-finance/marinade-ts-sdk
- NPM: @marinade.finance/marinade-ts-sdk
- Examples: SDK Examples
Next Steps#
| Action | Link |
|---|---|
| View contract addresses | Contracts |
| Use REST APIs | API Reference |
| Earn referral rewards | Referral Program |
| Native staking details | Native Staking |