solana/ecosystem-tools

Solana Ecosystem Tools: Helius / Metaplex / Jupiter

solanaguide👥 Communityconfidence highhealth 100%
v1.0.0·Updated 3/20/2026

Helius (Best Solana RPC)

npm install helius-sdk
import { Helius } from "helius-sdk"
const helius = new Helius("YOUR_API_KEY")  // Register at helius.dev, free tier is sufficient for development

// Get all assets for a wallet (NFT + Token)
const assets = await helius.rpc.getAssetsByOwner({
  ownerAddress: "wallet_address",
  page: 1, limit: 100,
})

// DAS (Digital Asset Standard) query for NFT metadata
const asset = await helius.rpc.getAsset({ id: "mint_address" })

// Parse transactions (human-readable)
const tx = await helius.rpc.parseTransaction({ transactions: ["tx_signature"] })
// Returns: { type: "SWAP", swapData: {...}, tokenTransfers: [...] }

// Webhook (listen for address activity)
const webhook = await helius.createWebhook({
  accountAddresses: ["wallet_address"],
  transactionTypes: ["ANY"],
  webhookURL: "https://your-server.com/webhook",
})

Metaplex (Solana NFT Standard)

npm install @metaplex-foundation/mpl-token-metadata
npm install @metaplex-foundation/umi @metaplex-foundation/umi-bundle-defaults
import { createUmi } from "@metaplex-foundation/umi-bundle-defaults"
import { mplTokenMetadata, createNft, fetchMetadataFromSeeds } from "@metaplex-foundation/mpl-token-metadata"
import { generateSigner, percentAmount } from "@metaplex-foundation/umi"
import { walletAdapterIdentity } from "@metaplex-foundation/umi-signer-wallet-adapters"

const umi = createUmi("https://api.mainnet-beta.solana.com")
  .use(walletAdapterIdentity(wallet))
  .use(mplTokenMetadata())

// Mint NFT
const mint = generateSigner(umi)
await createNft(umi, {
  mint,
  name: "My NFT",
  uri: "https://arweave.net/xxx/metadata.json",
  sellerFeeBasisPoints: percentAmount(5),  // 5% royalty
  creators: [{ address: umi.identity.publicKey, verified: true, share: 100 }],
}).sendAndConfirm(umi)

// Read NFT metadata
const metadata = await fetchMetadataFromSeeds(umi, { mint: mint.publicKey })
console.log(metadata.name, metadata.uri)

Candy Machine V3 (Batch Mint)

import { mplCandyMachine, create, mintV2 } from "@metaplex-foundation/mpl-candy-machine"

// Create Candy Machine
const candyMachine = generateSigner(umi)
await create(umi, {
  candyMachine,
  collectionMint: collectionMint.publicKey,
  collectionUpdateAuthority: umi.identity,
  itemsAvailable: 10000,
  guards: {
    solPayment: { lamports: sol(0.1), destination: treasury },
    startDate: { date: new Date("2024-01-01") },
    mintLimit: { id: 1, limit: 3 },  // Max 3 per wallet
  },
}).sendAndConfirm(umi)

// User mint
await mintV2(umi, { candyMachine: candyMachine.publicKey, ... }).sendAndConfirm(umi)

Jupiter (Solana DEX Aggregator)

npm install @jup-ag/api
import { createJupiterApiClient } from "@jup-ag/api"
import { Connection, VersionedTransaction } from "@solana/web3.js"

const jupiterApi = createJupiterApiClient()

// 1. Get best route
const quote = await jupiterApi.quoteGet({
  inputMint: "So11111111111111111111111111111111111111112",  // SOL
  outputMint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",  // USDC
  amount: 1_000_000_000,  // 1 SOL (lamports)
  slippageBps: 50,  // 0.5%
})
console.log("Expected output:", quote.outAmount, "USDC")

// 2. Execute Swap
const swapResult = await jupiterApi.swapPost({
  swapRequest: {
    quoteResponse: quote,
    userPublicKey: wallet.publicKey.toString(),
    wrapAndUnwrapSol: true,
  }
})

const swapTx = VersionedTransaction.deserialize(
  Buffer.from(swapResult.swapTransaction, "base64")
)
swapTx.sign([wallet])
const txId = await connection.sendRawTransaction(swapTx.serialize())

Solana Pay (Payment Protocol)

import { encodeURL, createTransfer, validateTransfer } from "@solana/pay"
import { PublicKey } from "@solana/web3.js"
import BigNumber from "bignumber.js"

// Generate payment URL (display as QR code)
const url = encodeURL({
  recipient: new PublicKey("your_wallet"),
  amount: new BigNumber(1),         // 1 USDC
  splToken: new PublicKey("USDC_MINT"),
  reference: new PublicKey(reference),  // Used for tracking
  label: "My Store",
  message: "Order #123",
})

// Verify payment
const { amount, reference } = parseURL(url)
const response = await findReference(connection, reference)
await validateTransfer(connection, response.signature, { recipient, amount, splToken })

Common Solana Tools

ToolPurpose
HeliusEnhanced RPC + parsing API
MetaplexNFT standard + Candy Machine
JupiterDEX aggregator for optimal routing
JitoMEV protection + bundle submission
TensorNFT marketplace API
DialectOn-chain notifications / messaging
ClockworkScheduled task automation

Solana Ecosystem Tools Guide

Helius (Best Solana RPC)

npm install helius-sdk
import { Helius } from "helius-sdk"
const helius = new Helius("YOUR_API_KEY")  // Register at helius.dev, free tier is sufficient for development

// Get all assets for a wallet (NFT + Token)
const assets = await helius.rpc.getAssetsByOwner({
  ownerAddress: "wallet_address",
  page: 1, limit: 100,
})

// DAS (Digital Asset Standard) query for NFT metadata
const asset = await helius.rpc.getAsset({ id: "mint_address" })

// Parse transactions (human-readable)
const tx = await helius.rpc.parseTransaction({ transactions: ["tx_signature"] })
// Returns: { type: "SWAP", swapData: {...}, tokenTransfers: [...] }

// Webhook (listen for address activity)
const webhook = await helius.createWebhook({
  accountAddresses: ["wallet_address"],
  transactionTypes: ["ANY"],
  webhookURL: "https://your-server.com/webhook",
})

Metaplex (Solana NFT Standard)

npm install @metaplex-foundation/mpl-token-metadata
npm install @metaplex-foundation/umi @metaplex-foundation/umi-bundle-defaults
import { createUmi } from "@metaplex-foundation/umi-bundle-defaults"
import { mplTokenMetadata, createNft, fetchMetadataFromSeeds } from "@metaplex-foundation/mpl-token-metadata"
import { generateSigner, percentAmount } from "@metaplex-foundation/umi"
import { walletAdapterIdentity } from "@metaplex-foundation/umi-signer-wallet-adapters"

const umi = createUmi("https://api.mainnet-beta.solana.com")
  .use(walletAdapterIdentity(wallet))
  .use(mplTokenMetadata())

// Mint NFT
const mint = generateSigner(umi)
await createNft(umi, {
  mint,
  name: "My NFT",
  uri: "https://arweave.net/xxx/metadata.json",
  sellerFeeBasisPoints: percentAmount(5),  // 5% royalty
  creators: [{ address: umi.identity.publicKey, verified: true, share: 100 }],
}).sendAndConfirm(umi)

// Read NFT metadata
const metadata = await fetchMetadataFromSeeds(umi, { mint: mint.publicKey })
console.log(metadata.name, metadata.uri)

Candy Machine V3 (Batch Mint)

import { mplCandyMachine, create, mintV2 } from "@metaplex-foundation/mpl-candy-machine"

// Create Candy Machine
const candyMachine = generateSigner(umi)
await create(umi, {
  candyMachine,
  collectionMint: collectionMint.publicKey,
  collectionUpdateAuthority: umi.identity,
  itemsAvailable: 10000,
  guards: {
    solPayment: { lamports: sol(0.1), destination: treasury },
    startDate: { date: new Date("2024-01-01") },
    mintLimit: { id: 1, limit: 3 },  // Max 3 per wallet
  },
}).sendAndConfirm(umi)

// User mint
await mintV2(umi, { candyMachine: candyMachine.publicKey, ... }).sendAndConfirm(umi)

Jupiter (Solana DEX Aggregator)

npm install @jup-ag/api
import { createJupiterApiClient } from "@jup-ag/api"
import { Connection, VersionedTransaction } from "@solana/web3.js"

const jupiterApi = createJupiterApiClient()

// 1. Get best route
const quote = await jupiterApi.quoteGet({
  inputMint: "So11111111111111111111111111111111111111112",  // SOL
  outputMint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",  // USDC
  amount: 1_000_000_000,  // 1 SOL (lamports)
  slippageBps: 50,  // 0.5%
})
console.log("Expected output:", quote.outAmount, "USDC")

// 2. Execute Swap
const swapResult = await jupiterApi.swapPost({
  swapRequest: {
    quoteResponse: quote,
    userPublicKey: wallet.publicKey.toString(),
    wrapAndUnwrapSol: true,
  }
})

const swapTx = VersionedTransaction.deserialize(
  Buffer.from(swapResult.swapTransaction, "base64")
)
swapTx.sign([wallet])
const txId = await connection.sendRawTransaction(swapTx.serialize())

Solana Pay (Payment Protocol)

import { encodeURL, createTransfer, validateTransfer } from "@solana/pay"
import { PublicKey } from "@solana/web3.js"
import BigNumber from "bignumber.js"

// Generate payment URL (display as QR code)
const url = encodeURL({
  recipient: new PublicKey("your_wallet"),
  amount: new BigNumber(1),         // 1 USDC
  splToken: new PublicKey("USDC_MINT"),
  reference: new PublicKey(reference),  // Used for tracking
  label: "My Store",
  message: "Order #123",
})

// Verify payment
const { amount, reference } = parseURL(url)
const response = await findReference(connection, reference)
await validateTransfer(connection, response.signature, { recipient, amount, splToken })

Common Solana Tools

ToolPurpose
HeliusEnhanced RPC + parsing API
MetaplexNFT standard + Candy Machine
JupiterDEX aggregator for optimal routing
JitoMEV protection + bundle submission
TensorNFT marketplace API
DialectOn-chain notifications / messaging
ClockworkScheduled task automation
DriftPerpetuals + spot trading SDK