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
| Tool | Purpose |
|---|---|
| Helius | Enhanced RPC + parsing API |
| Metaplex | NFT standard + Candy Machine |
| Jupiter | DEX aggregator for optimal routing |
| Jito | MEV protection + bundle submission |
| Tensor | NFT marketplace API |
| Dialect | On-chain notifications / messaging |
| Clockwork | Scheduled 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
| Tool | Purpose |
|---|---|
| Helius | Enhanced RPC + parsing API |
| Metaplex | NFT standard + Candy Machine |
| Jupiter | DEX aggregator for optimal routing |
| Jito | MEV protection + bundle submission |
| Tensor | NFT marketplace API |
| Dialect | On-chain notifications / messaging |
| Clockwork | Scheduled task automation |
| Drift | Perpetuals + spot trading SDK |