Skills liberfi-swap
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/bombmod/liberfi-swap" ~/.claude/skills/openclaw-skills-liberfi-swap && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/bombmod/liberfi-swap" ~/.openclaw/skills/openclaw-skills-liberfi-swap && rm -rf "$T"
skills/bombmod/liberfi-swap/SKILL.mdLiberFi Swap & Transaction
Execute token swaps and broadcast transactions using the LiberFi CLI.
Pre-flight Checks
See bootstrap.md for CLI installation and connectivity verification.
This skill's auth requirements:
| Command | Requires Auth |
|---|---|
| No |
| No |
| No |
| No |
| Yes (JWT, uses TEE wallet) |
| Yes (JWT, uses TEE wallet) |
Authentication pre-flight for swap execute / tx send:
- Run
lfi status --json - If not authenticated:
- Agent:
lfi login key --role AGENT --json - Human:
→lfi login <email> --jsonlfi verify <otpId> <code> --json
- Agent:
- Run
to confirm wallet addresseslfi whoami --json
Additional pre-flight for swap operations:
- Confirm the user knows the input/output token addresses (or help look them up via
orlfi swap tokens
)lfi token search - Note:
is now optional for--account
. If omitted, the server uses the authenticated user's TEE wallet address automatically.swap execute
Skill Routing
| If user asks about... | Route to |
|---|---|
| Token search, price, details, security | liberfi-token |
| Token K-line, candlestick chart | liberfi-token |
| Token holders, smart money traders | liberfi-token |
| Trending tokens, market rankings | liberfi-market |
| Newly listed tokens | liberfi-market |
| Wallet holdings, balance, PnL | liberfi-portfolio |
| Wallet activity, transaction history | liberfi-portfolio |
CLI Command Index
Query Commands (read-only)
| Command | Description | Auth |
|---|---|---|
| List all supported swap chains | No |
| List available swap tokens | No |
Mutating Commands (generate transactions)
| Command | Description | Auth |
|---|---|---|
| Get a swap quote | No |
| Execute swap via TEE wallet | Yes |
| Build, sign, and broadcast swap in one step via TEE wallet | Yes |
| Estimate transaction fee / gas | No |
| Broadcast a signed transaction | Yes |
Parameter Reference
Swap quote & execute (shared parameters):
— Required. Input token address--in <address>
— Required. Output token address--out <address>
— Required. Input amount in smallest unit (lamports, wei, etc.)--amount <amount>
— Required.--chain-family <family>
orevmsvm
— Required. Numeric chain ID (e.g.--chain-id <id>
for Solana mainnet,0
for Ethereum)1
— Slippage tolerance in basis points (e.g.--slippage-bps <bps>
= 1%)100
—--swap-mode <mode>
(default) orExactInExactOut
Execute-only additional parameter:
— Optional. Wallet address override. If omitted, the server uses the authenticated user's TEE wallet automatically. Requires authentication.--account <address>
— Opaque quote result JSON from a prior--quote-result <json>
call (pass through without modification)swap quote
Tx estimate parameters:
— Required.--chain-family <family>
orevmsvm
— Required. Numeric chain ID--chain-id <id>
— Required. Transaction data as JSON string (structure depends on chain family)--data <json>
Sign-and-send parameters:
— Required.--chain-family <family>
orevmsvm
— Required. Numeric chain ID--chain-id <id>
— Required. Full quote result JSON from a prior--quote-result <json>
call (pass through without modification)lfi swap quote
— Override slippage tolerance in basis points--slippage-bps <bps>
Tx send parameters:
— Required.--chain-family <family>
orevmsvm
— Required. Numeric chain ID--chain-id <id>
— Required. Signed transaction in base64 or hex encoding--signed-tx <data>
Operation Flow
List Supported Chains
- Fetch chains:
lfi swap chains --json - Present: Show chain name, chain ID, chain family (evm/svm)
- Suggest next step: "Which chain do you want to trade on?"
Find Available Tokens
- Fetch tokens:
lfi swap tokens --chain-id <id> --json - Present: Show token name, symbol, address
- Suggest next step: "Which tokens do you want to swap?"
Get a Swap Quote
- Collect inputs: Input token, output token, amount, chain family, chain ID
- (mandatory) Run security check:
lfi token security <chain> <outputTokenAddress> --json - Review security result — warn user if any risk flags
- Get quote:
lfi swap quote --in <in> --out <out> --amount <amt> --chain-family <fam> --chain-id <id> --json - Present: Show input amount, expected output amount, price impact, slippage, route
- Suggest next step: "Want to execute this swap?"
Execute a Swap (Full Flow)
Authentication pre-flight (do this first):
lfi status --json # check session # If not authenticated: lfi login key --role AGENT --json # agent # or: lfi login <email> --json → lfi verify <otpId> <code> --json lfi whoami --json # confirm evmAddress / solAddress
- Collect inputs: Input/output tokens, amount, chain
- (mandatory) Security check:
lfi token security <chain> <outputTokenAddress> --json - If security flags found → warn user, recommend NOT proceeding
- Get quote first:
lfi swap quote --in <in> --out <out> --amount <amt> --chain-family <fam> --chain-id <id> --json - Present swap summary to user:
- Input: X amount of TokenA
- Output: ~Y amount of TokenB
- Slippage: Z%
- Estimated fees (if available)
- (mandatory) Wait for explicit user confirmation
- Execute swap:
lfi swap execute --in <in> --out <out> --amount <amt> --chain-family <fam> --chain-id <id> --quote-result '<quoteJson>' --json- The server signs the transaction using the authenticated user's TEE wallet.
- No manual signing step required — the response contains the result or signed tx hash.
- Suggest next step: "Swap submitted! You can track it on the block explorer."
Execute Swap in One Step (sign-and-send)
Use this when you already have a quote result and want to build, sign, and broadcast in a single call — no separate
swap execute needed.
Authentication pre-flight (do this first):
lfi status --json # check session # If not authenticated: lfi login key --role AGENT --json # agent # or: lfi login <email> --json → lfi verify <otpId> <code> --json
- Collect inputs: Chain family, chain ID, and the quote result JSON from a prior
callswap quote - (mandatory) Security check already performed during the quote step — do not skip
- Present swap summary and wait for explicit user confirmation
- Execute:
lfi swap sign-and-send --chain-family <fam> --chain-id <id> --quote-result '<quoteJson>' --json- The server builds the transaction, signs it via the authenticated user's TEE wallet, and broadcasts it in one step.
- Suggest next step: "Swap submitted! You can track it on the block explorer."
When to use
vs sign-and-send
:execute
- Use
when you already have asign-and-send
and want a single atomic call.quote_result - Use
when you want to specify input/output tokens and amount directly (it internally fetches a quote).execute
Estimate Transaction Fee
- Estimate:
lfi tx estimate --chain-family <fam> --chain-id <id> --data '<txJson>' --json - Present: Show estimated gas/fee in native token and USD equivalent
- Suggest next step: "Ready to send?"
Broadcast Signed Transaction (when using external wallet)
When the user has signed the transaction externally (not using TEE wallet):
- (mandatory) Ensure authenticated:
lfi status --json - (mandatory) Final confirmation: "Are you sure you want to broadcast this transaction? This is irreversible."
- Send:
lfi tx send --chain-family <fam> --chain-id <id> --signed-tx <signedData> --json - Present: Show transaction hash
- Suggest next step: "Transaction submitted! You can track it on the block explorer."
Cross-Skill Workflows
"I want to swap SOL for USDC"
Full flow: auth → token → swap
- auth →
— Check session; if not authed →lfi status --jsonlfi login key --json - auth →
— Confirm solAddresslfi whoami --json - token →
— Find USDC address on Solanalfi token search --q "USDC" --chains sol --json - token →
— Security check (mandatory)lfi token security sol <usdcAddress> --json - swap →
— Get quotelfi swap quote --in So11111111111111111111111111111111111111112 --out <usdcAddress> --amount <amt> --chain-family svm --chain-id 0 --json - Present quote summary, wait for user confirmation
- swap →
— Server signs via TEE walletlfi swap execute --in ... --out ... --amount ... --chain-family svm --chain-id 0 --json
"What's the best price to buy this trending token?"
Full flow: auth → market → token → swap
- auth →
— Check session; if not authed →lfi status --jsonlfi login key --json - market →
— Get trending tokenslfi ranking trending sol 1h --limit 5 --json - User picks a token
- token →
— Mandatory security checklfi token security sol <address> --json - swap →
lfi swap quote --in <baseToken> --out <address> --amount <amt> --chain-family svm --chain-id 0 --json - Present quote with price impact analysis, wait for confirmation
- swap →
— Server signs via TEE walletlfi swap execute --in ... --out ... --json
"Check my wallet, then sell half of my biggest holding"
Full flow: auth → portfolio → token → swap
- auth →
— Check session; if not authed →lfi status --jsonlfi login key --json - auth →
— Get solAddress / evmAddresslfi whoami --json - portfolio →
— Get holdingslfi wallet holdings sol <solAddress> --json - Identify largest holding, calculate half amount in smallest unit
- token →
— Security checklfi token security sol <tokenAddress> --json - swap →
lfi swap quote --in <tokenAddress> --out <baseToken> --amount <halfAmt> --chain-family svm --chain-id 0 --json - Present quote, wait for confirmation
- swap →
— Server signs via TEE walletlfi swap execute --in ... --out ... --json
Suggest Next Steps
| Just completed | Suggest to user |
|---|---|
| Chain list | "Which chain do you want to trade on?" / "想在哪条链上交易?" |
| Token list | "Which tokens do you want to swap?" / "想兑换哪些代币?" |
| Swap quote | "Want to execute this swap?" / "要执行这笔兑换吗?" |
| Swap execute (TEE) | "Swap submitted via your LiberFi TEE wallet!" / "已通过LiberFi TEE钱包提交兑换!" |
| Swap sign-and-send | "Swap built, signed, and broadcast in one step!" / "兑换已一步完成构建、签名并广播!" |
| Fee estimate | "Ready to send?" / "准备好发送了吗?" |
| Tx send | "Transaction submitted! Track it on the block explorer." / "交易已提交!可在区块浏览器上查看。" |
| Not authenticated | "Please log in first: " / "请先登录:" |
Edge Cases
- Insufficient balance: If the swap execute fails with an insufficient balance error, inform the user and suggest checking their holdings via
lfi wallet holdings - Slippage exceeded: If the quote shows high price impact (>5%), warn the user and suggest reducing the amount or increasing slippage tolerance
- Invalid token address: Validate format before calling the API; ask user to verify the address
- Unknown chain family: Only
andevm
are supported; if user mentions a chain, map it to the correct family (e.g. Solana →svm
, Ethereum/BSC/Base →svm
)evm - Amount format error: Remind user that amounts must be in smallest unit (lamports for SOL = amount * 10^9, wei for ETH = amount * 10^18)
- Transaction already submitted: If tx send fails, warn that the transaction may have already been broadcast; check status before retrying
- Quote expired: Quotes have a limited validity window; if too much time passes, get a new quote before executing
- Network timeout: Retry once after 3 seconds; if still fails, suggest checking connectivity
Common Pitfalls
| Pitfall | Correct Approach |
|---|---|
| Using human-readable amounts (e.g. "1 SOL") | Convert to smallest unit first: 1 SOL = 1,000,000,000 lamports |
| Skipping security check before swap | ALWAYS run on the output token first |
| Executing swap without user confirmation | ALWAYS show quote summary and wait for explicit "yes" |
| Passing modified quote_result to execute / sign-and-send | Pass the quote_result JSON through WITHOUT any modification |
Calling or without authentication | Check first; re-authenticate if needed |
| Assuming a wallet address without checking | Call to get the confirmed evmAddress / solAddress |
| Retrying failed tx send without checking | The tx may have been submitted; check on-chain status first |
Using when you don't yet have a quote | Call first to get the quote result, then pass it to |
Security Notes
See security-policy.md for global security rules.
Skill-specific rules:
- Swap and transaction operations are HIGH RISK — they can move funds irreversibly
- NEVER execute
orswap execute
without explicit user confirmationtx send - ALWAYS run
on the output token before presenting a swap quotetoken security - If the security audit reveals honeypot or high tax flags, strongly recommend the user NOT proceed
- The
field is opaque — pass it through as-is; do not interpret, modify, or display its raw contentquote_result - Transaction amounts in smallest unit are easy to get wrong — always double-check with the user: "You want to swap X SOL (= Y lamports), correct?"
- After broadcasting, provide the transaction hash so the user can independently verify on a block explorer