Sendo Analyser Plugin - A comprehensive Solana wallet analysis plugin that provides real-time transaction decoding, trade analysis, token/NFT holdings, and price performance tracking.
The Sendo Analyser plugin transforms ElizaOS agents into Solana blockchain analysts by:
- Decoding Solana transactions from multiple DEXs (Jupiter, Raydium, Orca, Meteora, Pumpfun, etc.)
- Analyzing trades with real-time and historical price data
- Tracking token and NFT holdings
- Calculating performance metrics (P&L, ATH missed, win rate)
- Paginating results efficiently with cursor-based navigation
Key principle: Real-time blockchain data analysis with comprehensive DEX support and price tracking via Helius and Birdeye APIs.
- Multi-DEX support: Jupiter, Raydium, Orca, Meteora, Pumpfun, Pumpswap, Whirlpool
- Automatic protocol detection and instruction parsing
- Balance change tracking (SOL and SPL tokens)
- Fee and compute budget extraction
- Real-time price data from Birdeye API
- Historical price tracking at transaction time
- ATH (All-Time High) analysis
- Trade categorization (buy/sell/no_change)
- Performance metrics per trade and per token
- Token holdings with balances
- NFT collection tracking
- SOL balance monitoring
- Global portfolio overview
- Efficient navigation through transaction history
- Configurable page size (1-50 results)
- Pagination metadata with
hasMore,nextCursor,currentCursor - Pass-through to Helius for real-time data freshness
npm install @sendo-labs/plugin-sendo-analyseror with Bun:
bun add @sendo-labs/plugin-sendo-analyserimport { sendoAnalyserPlugin } from '@sendo-labs/plugin-sendo-analyser';
const agent = {
plugins: [
sendoAnalyserPlugin,
// ... your other plugins
],
};HELIUS_API_KEY=your_helius_api_key
BIRDEYE_API_KEY=your_birdeye_api_keyThe plugin exposes REST endpoints for wallet analysis:
GET /signatures/:address?limit=5&cursor=signatureReturns paginated transaction signatures for a wallet.
Query Parameters:
limit(optional): Number of results (1-50, default: 5)cursor(optional): Signature to paginate from
Response:
{
"success": true,
"data": {
"address": "wallet_address",
"signatures": [...],
"pagination": {
"limit": 5,
"hasMore": true,
"nextCursor": "signature_xyz",
"currentCursor": null,
"totalLoaded": 5
}
}
}GET /transactions/:address?limit=5&cursor=signatureReturns decoded transactions with balance changes and protocol detection.
GET /trades/:address?limit=5&cursor=signatureReturns trades with comprehensive price analysis:
- Purchase price at transaction time
- Current price
- ATH price and timestamp
- Gain/Loss percentage
- Missed ATH opportunity
Response includes:
- Trade categorization (increase/decrease/no_change)
- Token balance changes
- Price analysis per trade
- Global summary statistics
GET /tokens/:addressReturns current token holdings for the wallet.
GET /nfts/:addressReturns current NFT holdings for the wallet.
GET /global/:addressReturns wallet balance and global metrics.
GET /wallet/:addressReturns comprehensive analysis combining all data:
- Balance
- Tokens
- NFTs
- Recent trades (last 10)
SendoAnalyserService (src/services/sendoAnalyserService.ts)
Main analysis service with these key methods:
getSignaturesForAddress()- Paginated signature retrievalgetTransactionsForAddress()- Decoded transactions with paginationgetTradesForAddress()- Trade analysis with price trackinggetTokensForAddress()- Current token holdingsgetNftsForAddress()- Current NFT holdingsgetGlobalForAddress()- Wallet overviewgetCompleteWalletAnalysis()- Combined analysis
helius.ts (src/services/helius.ts)
Helius API wrapper with cursor-based pagination:
getSignaturesForAddress()- Signature retrieval withbeforecursorgetTransactionsForAddress()- Transaction fetching with pagination metadatagetTokensForAddress()- SPL token account datagetNftsForAddress()- NFT/compressed NFT datagetBalanceForAddress()- SOL balance
birdeyes.ts (src/services/birdeyes.ts)
Price analysis service:
getPriceAnalysis()- Historical and current price with ATH tracking- OHLCV data fetching
- Price history analysis
decoders/ (src/utils/decoder/)
Protocol-specific decoders:
jupiter/- Jupiter aggregator swapsraydium/- Raydium AMM and CLMMorca/- Orca poolsmeteora/- Meteora DLMMpumpfun/- Pump.fun bonding curvespumpswap/- Pumpswap poolswhirlpool/- Whirlpool concentrated liquiditycomputeBudget/- Compute budget instructions
- Node.js 18+ or Bun
- Helius API key
- Birdeye API key
bun run buildbun run devbun run typecheckplugin-sendo-analyser/
βββ src/
β βββ services/ # SendoAnalyserService, Helius, Birdeye
β βββ routes/ # REST API endpoints
β βββ utils/
β β βββ decoder/ # Protocol-specific transaction decoders
β βββ config/ # Helius client config
β βββ types/ # TypeScript type definitions
β βββ index.ts # Plugin export
βββ package.json
βββ tsconfig.json
βββ tsup.config.ts
- Jupiter - Aggregator swaps
- Raydium - AMM and CLMM pools
- Orca - Standard and Whirlpool pools
- Meteora - DLMM (Dynamic Liquidity Market Maker)
- Pump.fun - Bonding curve token launches
- Pumpswap - Pump token swaps
- Compute Budget - Priority fees and compute limits
- Purchase Price: Price at transaction time (via OHLCV data)
- Current Price: Real-time price from Birdeye
- ATH Price: All-time high with timestamp
- Gain/Loss: Percentage change from purchase to current
- Missed ATH: Percentage from current price to ATH
Page 1: GET /trades/:address?limit=5
β Returns 5 trades + nextCursor
Page 2: GET /trades/:address?limit=5&cursor=<nextCursor>
β Returns next 5 trades + new nextCursor
Last Page: hasMore=false, nextCursor=null
Pass-through pagination: Each request fetches fresh data from Helius (no server-side caching).
Contributions welcome! Please ensure:
- Code follows existing patterns
- TypeScript types are correct
- Documentation is updated
- Decoder schemas are properly typed with Zod
MIT
- ElizaOS: https://github.com/elizaos/eliza
- Sendo Labs: https://github.com/Sendo-labs
- Helius: https://helius.dev
- Birdeye: https://birdeye.so
Built with β€οΈ by Sendo Labs