Loading...
Loading...
Concentrated liquidity AMM on Solana — swap tokens and query pools via the Whirlpools CLMM program. Trigger phrases: swap on orca, orca swap, swap tokens on solana, orca pools, get swap quote, whirlpool swap, orca dex. Chinese: Orca兑换, 在Orca上交换代币, 查询Orca流动性池, 获取兑换报价
npx skill4agent add okx/plugin-store orca-pluginRun once per session before first use. These checks ensure required tools are installed.
AI Agent Instruction: Run this version check before executing any commands from this skill. If an update is applied, re-read this SKILL.md before proceeding — the instructions may have changed.
# Check for skill updates (1-hour cache)
UPDATE_CACHE="$HOME/.plugin-store/update-cache/orca-plugin"
CACHE_MAX=3600
LOCAL_VER="0.6.4"
DO_CHECK=true
if [ -f "$UPDATE_CACHE" ]; then
CACHE_MOD=$(stat -f %m "$UPDATE_CACHE" 2>/dev/null || stat -c %Y "$UPDATE_CACHE" 2>/dev/null || echo 0)
NOW=$(date +%s)
AGE=$(( NOW - CACHE_MOD ))
[ "$AGE" -lt "$CACHE_MAX" ] && DO_CHECK=false
fi
if [ "$DO_CHECK" = true ]; then
REMOTE_VER=$(curl -sf --max-time 3 "https://raw.githubusercontent.com/okx/plugin-store/main/skills/orca-plugin/plugin.yaml" | grep '^version' | head -1 | tr -d '"' | awk '{print $2}')
if [ -n "$REMOTE_VER" ]; then
mkdir -p "$HOME/.plugin-store/update-cache"
echo "$REMOTE_VER" > "$UPDATE_CACHE"
fi
fi
REMOTE_VER=$(cat "$UPDATE_CACHE" 2>/dev/null || echo "$LOCAL_VER")
if [ "$REMOTE_VER" != "$LOCAL_VER" ]; then
echo "Update available: orca-plugin v$LOCAL_VER -> v$REMOTE_VER. Updating..."
npx skills add okx/plugin-store --skill orca-plugin --yes --global 2>/dev/null || true
echo "Updated orca-plugin to v$REMOTE_VER. Please re-read this SKILL.md."
fi# 1. Install onchainos CLI — pin to latest release tag, verify SHA256
# of the installer before executing (no curl|sh from main).
if ! command -v onchainos >/dev/null 2>&1; then
set -e
LATEST_TAG=$(curl -sSL --max-time 5 \
"https://api.github.com/repos/okx/onchainos-skills/releases/latest" \
| sed -n 's/.*"tag_name"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' | head -1)
if [ -z "$LATEST_TAG" ]; then
echo "ERROR: failed to resolve latest onchainos release tag (network or rate limit)." >&2
echo " Manual install: https://github.com/okx/onchainos-skills" >&2
exit 1
fi
ONCHAINOS_TMP=$(mktemp -d)
curl -sSL --max-time 30 \
"https://raw.githubusercontent.com/okx/onchainos-skills/${LATEST_TAG}/install.sh" \
-o "$ONCHAINOS_TMP/install.sh"
curl -sSL --max-time 30 \
"https://github.com/okx/onchainos-skills/releases/download/${LATEST_TAG}/installer-checksums.txt" \
-o "$ONCHAINOS_TMP/installer-checksums.txt"
EXPECTED=$(awk '$2 ~ /install\.sh$/ {print $1; exit}' "$ONCHAINOS_TMP/installer-checksums.txt")
if command -v sha256sum >/dev/null 2>&1; then
ACTUAL=$(sha256sum "$ONCHAINOS_TMP/install.sh" | awk '{print $1}')
else
ACTUAL=$(shasum -a 256 "$ONCHAINOS_TMP/install.sh" | awk '{print $1}')
fi
if [ -z "$EXPECTED" ] || [ "$EXPECTED" != "$ACTUAL" ]; then
echo "ERROR: onchainos installer SHA256 mismatch — refusing to execute." >&2
echo " expected=$EXPECTED actual=$ACTUAL tag=$LATEST_TAG" >&2
rm -rf "$ONCHAINOS_TMP"
exit 1
fi
sh "$ONCHAINOS_TMP/install.sh"
rm -rf "$ONCHAINOS_TMP"
set +e
fi
# 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 okx/plugin-store --skill plugin-store --yes --global# Install shared infrastructure (launcher + update checker, only once)
LAUNCHER="$HOME/.plugin-store/launcher.sh"
CHECKER="$HOME/.plugin-store/update-checker.py"
if [ ! -f "$LAUNCHER" ]; then
mkdir -p "$HOME/.plugin-store"
curl -fsSL "https://raw.githubusercontent.com/okx/plugin-store/main/scripts/launcher.sh" -o "$LAUNCHER" 2>/dev/null || true
chmod +x "$LAUNCHER"
fi
if [ ! -f "$CHECKER" ]; then
curl -fsSL "https://raw.githubusercontent.com/okx/plugin-store/main/scripts/update-checker.py" -o "$CHECKER" 2>/dev/null || true
fi
# Clean up old installation
rm -f "$HOME/.local/bin/orca-plugin" "$HOME/.local/bin/.orca-plugin-core" 2>/dev/null
# Download binary
OS=$(uname -s | tr A-Z a-z)
ARCH=$(uname -m)
EXT=""
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-musl" ;;
linux_i686) TARGET="i686-unknown-linux-musl" ;;
linux_aarch64) TARGET="aarch64-unknown-linux-musl" ;;
linux_armv7l) TARGET="armv7-unknown-linux-musleabihf" ;;
mingw*_x86_64|msys*_x86_64|cygwin*_x86_64) TARGET="x86_64-pc-windows-msvc"; EXT=".exe" ;;
mingw*_i686|msys*_i686|cygwin*_i686) TARGET="i686-pc-windows-msvc"; EXT=".exe" ;;
mingw*_aarch64|msys*_aarch64|cygwin*_aarch64) TARGET="aarch64-pc-windows-msvc"; EXT=".exe" ;;
esac
mkdir -p ~/.local/bin
curl -fsSL "https://github.com/okx/plugin-store/releases/download/plugins/orca-plugin@0.6.4/orca-plugin-${TARGET}${EXT}" -o ~/.local/bin/.orca-plugin-core${EXT}
chmod +x ~/.local/bin/.orca-plugin-core${EXT}
# Symlink CLI name to universal launcher
ln -sf "$LAUNCHER" ~/.local/bin/orca-plugin
# Register version
mkdir -p "$HOME/.plugin-store/managed"
echo "0.6.4" > "$HOME/.plugin-store/managed/orca-plugin"get-poolsget-quotehttps://api.orca.so/v1swaponchainos swap execute --chain 501whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCcorca-plugin get-pools \
--token-a <MINT_A> \
--token-b <MINT_B> \
[--min-tvl <USD>] \
[--include-low-liquidity]--token-a11111111111111111111111111111111--token-b--min-tvl--include-low-liquidity# Find SOL/USDC pools
orca-plugin get-pools \
--token-a So11111111111111111111111111111111111111112 \
--token-b EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1vaddresstoken_a_symboltoken_b_symbolfee_rate_pctpricetvl_usdvolume_24h_usdfee_apr_24h_pcttotal_apr_24h_pctorca-plugin get-quote \
--from-token <MINT> \
--to-token <MINT> \
--amount <AMOUNT> \
[--slippage-bps <BPS>] \
[--pool <POOL_ADDRESS>]--from-token--to-token--amount0.5--slippage-bps--pool# Quote: how much USDC for 0.5 SOL?
orca-plugin get-quote \
--from-token So11111111111111111111111111111111111111112 \
--to-token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
--amount 0.5 \
--slippage-bps 50estimated_amount_outminimum_amount_outslippage_bpsfee_rate_pctpricepool_addresspool_tvl_usdestimated_price_impact_pctonchainos swap executeonchainos security token-scan# Preview (no --confirm — safe, no tx sent)
orca-plugin swap \
--from-token <MINT> \
--to-token <MINT> \
--amount <AMOUNT> \
[--slippage-bps <BPS>]
# Execute (--confirm is a global flag — must come before the subcommand)
orca-plugin --confirm swap \
--from-token <MINT> \
--to-token <MINT> \
--amount <AMOUNT> \
[--slippage-bps <BPS>] \
[--skip-security-check]--from-token--to-token--amount--slippage-bps--confirm--skip-security-checkget-quoteswap"preview": true--confirm# Step 1: Preview (no flags — safe, no tx sent)
orca-plugin swap \
--from-token 11111111111111111111111111111111 \
--to-token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
--amount 0.5
# Step 2: After user confirms, execute (--confirm is global, goes before subcommand)
orca-plugin --confirm swap \
--from-token 11111111111111111111111111111111 \
--to-token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
--amount 0.5 \
--slippage-bps 100oktx_hashsolscan_urlfrom_tokento_tokenamountamount_displayslippage_bpsestimated_price_impact_pct| Token | Mint Address |
|---|---|
| Native SOL | |
| Wrapped SOL (wSOL) | |
| USDC | |
| USDT | |
| ORCA | |
orca-plugin quickstartnext_commandonboarding_stepsorca-plugin quickstartstatus: "ready"next_commandstatus: "ready_sol_only"status: "needs_gas"status: "no_funds"onboarding_steps--from-token--to-token--confirmorca-plugin --confirm swap ...swap --confirmswaporca-plugin quickstart| Field | Description |
|---|---|
| Protocol description |
| Resolved Solana wallet address |
| |
| SOL balance |
| USDC balance |
| USDT balance |
| |
| Human-readable state description |
| The single most useful command to run next |
| Ordered steps to follow |
{
"ok": true,
"wallet": "7xKX...",
"chain": "solana",
"assets": { "sol_balance": "0.150000", "usdc_balance": "25.00", "usdt_balance": "0.00" },
"status": "ready",
"suggestion": "Your wallet is funded with SOL and stablecoins. Swap or explore pools.",
"next_command": "orca-plugin get-quote --from-token EPjFWdd5... --to-token So111... --amount 22.50",
"onboarding_steps": [
"1. Check available pools for a token pair:",
" orca-plugin get-pools --token-a So111... --token-b EPjFWdd5...",
"2. Get a swap quote first (no confirmation needed):",
" orca-plugin get-quote --from-token EPjFWdd5... --to-token So111... --amount 22.50",
"3. Execute the swap:",
" orca-plugin --confirm swap --from-token EPjFWdd5... --to-token So111... --amount 22.50"
]
}# Find pools for SOL/USDC
orca-plugin get-pools \
--token-a So11111111111111111111111111111111111111112 \
--token-b EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
# Get a quote (read-only, no wallet needed)
orca-plugin get-quote \
--from-token So11111111111111111111111111111111111111112 \
--to-token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
--amount 0.5
# Preview swap (no tx sent — shows "preview": true)
orca-plugin swap \
--from-token So11111111111111111111111111111111111111112 \
--to-token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
--amount 0.5
# Execute (ask user to confirm preview first)
orca-plugin --confirm swap \
--from-token So11111111111111111111111111111111111111112 \
--to-token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
--amount 0.5 \
--slippage-bps 50Note: Providing liquidity (,add-liquidity,positions) is not yet implemented. Use app.orca.so to manage Whirlpool LP positions directly.remove-liquidity
blockswap--confirm--confirm11111111111111111111111111111111So11111111111111111111111111111111111111112