Flash SDK
Last updated
Was this helpful?
Was this helpful?
import { AnchorProvider, BN } from "@coral-xyz/anchor"
import { PerpetualsClient, PoolConfig } from 'flash-sdk'
const RPC_URL = process.env.RPC_URL
// Configure the AnchorProvider
const provider: AnchorProvider = AnchorProvider.local(RPC_URL, {
commitment: 'processed',
preflightCommitment: 'processed',
skipPreflight: true,
})
// Load every mainnet pool — the SDK auto-routes per trade
export const MAINNET_POOL_NAMES = [
'Crypto.1', // flp.1
'Virtual.1', // flp.2
'Governance.1', // flp.3
'Community.1', // flp.4
'Community.2', // flp.5
'Trump.1', // flp.7
'Ore.1', // flp.8
'Remora.1', // flp.r
'Equity.1', // equities (SPY, etc.)
] as const
export const POOL_CONFIGS: PoolConfig[] = MAINNET_POOL_NAMES.map((n) =>
PoolConfig.fromIdsByName(n, 'mainnet-beta')
)
export const PROGRAM_ID = POOL_CONFIGS[0].programId
// Setup the Flash client — all mainnet pools share the same program IDs
export const flashClient = new PerpetualsClient(
provider,
POOL_CONFIGS[0].programId,
POOL_CONFIGS[0].perpComposibilityProgramId,
POOL_CONFIGS[0].fbNftRewardProgramId,
POOL_CONFIGS[0].rewardDistributionProgram.programId,
{
prioritizationFee: 0, // can be set dynamically via flashClient.setPrioritizationFee
}
)import { isVariant, PoolConfig, Side } from 'flash-sdk'
import { PublicKey } from '@solana/web3.js'
/** Find the pool that has a market for `targetSymbol` on the given `side`. */
export const getRequiredPoolConfig = (targetSymbol: string, side: Side): PoolConfig => {
for (const config of POOL_CONFIGS) {
const targetToken = config.tokens.find((t) => t.symbol === targetSymbol)
if (!targetToken) continue
const market = config.markets.find(
(m) =>
m.targetMint.equals(targetToken.mintKey) &&
isVariant(m.side, 'long') === isVariant(side, 'long')
)
if (market) return config
}
throw new Error(`No pool found with a ${isVariant(side, 'long') ? 'long' : 'short'} market for ${targetSymbol}`)
}
/** Find the pool that owns a given position's market account. Useful when closing or modifying positions. */
export const getPoolConfigForMarket = (marketPk: PublicKey): PoolConfig => {
for (const config of POOL_CONFIGS) {
if (
config.markets.find((m) => m.marketAccount.equals(marketPk)) ||
config.marketsDeprecated.find((m) => m.marketAccount.equals(marketPk))
) {
return config
}
}
throw new Error(`No pool found containing market ${marketPk.toBase58()}`)
}RPC_URL=https://your-mainnet-rpc.example.com
ANCHOR_WALLET=./localPublicKey.json
# Optional — defaults to https://pyth-lazer-proxy-3.dourolabs.app
# LAZER_PROXY_URL=https://your-own-lazer-proxy.example.com