orca
Pre-flight Dependencies (auto-injected by Plugin Store CI)
Run once per session before first use. These checks ensure required tools are installed.
Install onchainos CLI + Skills (auto-injected)
# 1. Install onchainos CLI
onchainos --version 2>/dev/null || curl -fsSL https://raw.githubusercontent.com/okx/onchainos-skills/main/install.sh | sh
# 2. Install onchainos skills (enables AI agent to use onchainos commands)
npx skills add okx/onchainos-skills --yes --global
# 3. Install plugin-store skills (enables plugin discovery and management)
npx skills add MigOKG/plugin-store --skill plugin-store --yes --global
Install orca binary (auto-injected)
if ! command -v orca >/dev/null 2>&1; then
OS=$(uname -s | tr A-Z a-z)
ARCH=$(uname -m)
case "${OS}_${ARCH}" in
darwin_arm64) TARGET="aarch64-apple-darwin" ;;
darwin_x86_64) TARGET="x86_64-apple-darwin" ;;
linux_x86_64) TARGET="x86_64-unknown-linux-gnu" ;;
linux_aarch64) TARGET="aarch64-unknown-linux-gnu" ;;
esac
curl -fsSL "https://github.com/MigOKG/plugin-store/releases/download/plugins/orca@0.1.0/orca-${TARGET}" -o ~/.local/bin/orca
chmod +x ~/.local/bin/orca
fi
Report install (auto-injected, runs once)
REPORT_FLAG="$HOME/.plugin-store/reported/orca"
if [ ! -f "$REPORT_FLAG" ]; then
mkdir -p "$HOME/.plugin-store/reported"
# Device fingerprint → SHA256 → 32-char device ID
DEV_RAW="$(hostname):$(uname -s):$(uname -m):$HOME"
DEV_ID=$(echo -n "$DEV_RAW" | shasum -a 256 | head -c 32)
# HMAC signature (obfuscated key, same as CLI binary)
_K=$(echo 'OE9nNWFRUFdfSVJkektrMExOV2RNeTIzV2JibXo3ZWNTbExJUDFIWnVoZw==' | base64 -d 2>/dev/null || echo 'OE9nNWFRUFdfSVJkektrMExOV2RNeTIzV2JibXo3ZWNTbExJUDFIWnVoZw==' | openssl base64 -d)
HMAC_SIG=$(echo -n "${_K}${DEV_ID}" | shasum -a 256 | head -c 8)
DIV_ID="${DEV_ID}${HMAC_SIG}"
unset _K
# Report to Vercel stats
curl -s -X POST "https://plugin-store-dun.vercel.app/install" \
-H "Content-Type: application/json" \
-d '{"name":"orca","version":"0.1.0"}' >/dev/null 2>&1 || true
# Report to OKX API (with HMAC-signed device token)
curl -s -X POST "https://www.okx.com/priapi/v1/wallet/plugins/download/report" \
-H "Content-Type: application/json" \
-d '{"pluginName":"orca","divId":"'"$DIV_ID"'"}' >/dev/null 2>&1 || true
touch "$REPORT_FLAG"
fi
Architecture
- Read ops (
get-pools,get-quote) → direct Orca REST API calls (https://api.orca.so/v1); no wallet needed, no confirmation required - Write ops (
swap) → after user confirmation, submits viaonchainos dex swap execute --chain 501 - Chain: Solana mainnet (chain ID 501)
- Program: Orca Whirlpools (
whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc)
Commands
get-pools — Query Whirlpool Pools
List all Orca Whirlpool pools for a token pair, sorted by TVL.
orca get-pools \
--token-a <MINT_A> \
--token-b <MINT_B> \
[--min-tvl <USD>] \
[--include-low-liquidity]
Parameters:
--token-a: First token mint address (use11111111111111111111111111111111for native SOL)--token-b: Second token mint address--min-tvl: Minimum pool TVL in USD (default: 10000)--include-low-liquidity: Include pools below min-tvl threshold
Example:
# Find SOL/USDC pools
orca get-pools \
--token-a So11111111111111111111111111111111111111112 \
--token-b EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
Output fields: address, token_a_symbol, token_b_symbol, fee_rate_pct, price, tvl_usd, volume_24h_usd, fee_apr_24h_pct, total_apr_24h_pct
get-quote — Get Swap Quote
Calculate an estimated swap output for a given input amount on Orca.
orca get-quote \
--from-token <MINT> \
--to-token <MINT> \
--amount <AMOUNT> \
[--slippage-bps <BPS>] \
[--pool <POOL_ADDRESS>]
Parameters:
--from-token: Input token mint address--to-token: Output token mint address--amount: Input amount in human-readable units (e.g.0.5for 0.5 SOL)--slippage-bps: Slippage tolerance in basis points (default: 50 = 0.5%)--pool: Specific pool address (optional; uses highest-TVL pool if omitted)
Example:
# Quote: how much USDC for 0.5 SOL?
orca get-quote \
--from-token So11111111111111111111111111111111111111112 \
--to-token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
--amount 0.5 \
--slippage-bps 50
Output fields: estimated_amount_out, minimum_amount_out, slippage_bps, fee_rate_pct, price, pool_address, pool_tvl_usd, estimated_price_impact_pct
swap — Execute Token Swap
Execute a token swap on Orca via onchainos dex swap execute.
Pre-swap safety checks:
- Security scan of output token via
onchainos security token-scan - Price impact check: warns at >2%, blocks at >10%
- Ask user to confirm before executing on-chain
orca swap \
--from-token <MINT> \
--to-token <MINT> \
--amount <AMOUNT> \
[--slippage-bps <BPS>] \
[--dry-run] \
[--skip-security-check]
Parameters:
--from-token: Input token mint address--to-token: Output token mint address--amount: Amount in human-readable units--slippage-bps: Slippage tolerance in basis points (default: 50 = 0.5%)--dry-run: Simulate only; do not broadcast transaction--skip-security-check: Bypass token security scan (not recommended)
Execution Flow:
- Run with
--dry-runfirst to preview - Ask user to confirm the swap details (amount, tokens, slippage) before proceeding
- Execute only after explicit user approval
- Report transaction hash and Solscan link
Example:
# Step 1: Preview
orca --dry-run swap \
--from-token So11111111111111111111111111111111111111112 \
--to-token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
--amount 0.5
# Step 2: After user confirms, execute for real
orca swap \
--from-token So11111111111111111111111111111111111111112 \
--to-token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
--amount 0.5 \
--slippage-bps 100
Output fields: ok, tx_hash, solscan_url, from_token, to_token, amount, slippage_bps, estimated_price_impact_pct
Known Token Addresses (Solana Mainnet)
| Token | Mint Address |
|---|---|
| Native SOL | 11111111111111111111111111111111 |
| Wrapped SOL (wSOL) | So11111111111111111111111111111111111111112 |
| USDC | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v |
| USDT | Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB |
| ORCA | orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE |
Safety Rules
- Never swap into a token flagged as
blockby security scan - Swaps with estimated price impact > 10% are automatically rejected
- Always run
--dry-runfirst and show the quote to the user before asking for confirmation - If pool TVL < $10,000, warn user about high slippage risk