Skip to main content
Protocols: aprMON · sMON · gMON · shMON · vshMON | Type: LST Aggregator | Source: on-chain reads via Rampart

Overview

The LST Aggregator normalizes data from all five Monad liquid staking protocols into a consistent LSTStats type. Use it to compare APRs, exchange rates, and TVLs across the entire ecosystem without integrating each protocol separately.

Types

type LSTStats = {
  token: 'aprMON' | 'sMON' | 'gMON' | 'shMON' | 'vshMON'
  protocol: string
  contractAddress: `0x${string}`
  apr: number           // annualized rate, e.g. 0.08 = 8%
  exchangeRate: number  // LST per 1 MON
  tvl: number           // total value locked in USD
  risk: 'low' | 'medium' | 'high'
  timestamp: number     // unix seconds
}

Functions

getAllLSTStats()

Returns stats for all 5 LSTs in a single multicall batch.
import { Rampart } from 'rampart-monad'

const sdk = new Rampart()
const stats = await sdk.getAllLSTStats()
// → LSTStats[]  (5 entries, one per token)

console.log(stats.map(s => `${s.token}: ${(s.apr * 100).toFixed(2)}%`))
// aprMON: 8.00%
// sMON:   7.00%
// gMON:   7.50%
// shMON:  6.50%
// vshMON: 9.00%

getBestLST()

Returns the single LST with the highest current APR.
const best = await sdk.getBestLST()
// → LSTStats

console.log(`Best yield: ${best.token} @ ${(best.apr * 100).toFixed(2)}% APR`)
// Best yield: vshMON @ 9.00% APR

compareLSTs()

Returns all LSTs sorted by APR descending. Useful for building yield comparison UIs.
const ranked = await sdk.compareLSTs()

// Print a comparison table
ranked.forEach((lst, i) => {
  console.log(
    `${i + 1}. ${lst.token.padEnd(6)} ${lst.protocol.padEnd(12)} ` +
    `APR: ${(lst.apr * 100).toFixed(2)}%  TVL: $${(lst.tvl / 1e6).toFixed(1)}M`
  )
})
// 1. vshMON  mellow       APR: 9.00%  TVL: $19.0M
// 2. aprMON  apriori      APR: 8.00%  TVL: $48.0M
// 3. gMON    kintsu       APR: 7.50%  TVL: $25.0M
// 4. sMON    magma        APR: 7.00%  TVL: $30.0M
// 5. shMON   fastlane     APR: 6.50%  TVL: $15.0M

getTotalStakedMON()

Returns the total MON staked across all 5 protocols combined.
const total = await sdk.getTotalStakedMON()
// → number (MON units)

console.log(`Total staked: ${(total / 1e6).toFixed(1)}M MON`)
// Total staked: 137.0M MON

Contract Addresses

TokenContract
aprMON0xb2f82D0f38dc453D596Ad40A37799446Cc89274A
vshMON (Mellow vault factory)0xC9Da1Fe5B70e40C60e4028da5b1d7b8BD8e19c82
sMON, gMON, and shMON contract addresses are read dynamically from their respective protocol registries. See individual protocol pages for details.