ChainStream DeFi
Execute DeFi operations: token swap, launchpad creation, transaction signing, and broadcast. All operations are real, irreversible on-chain transactions.
Before any swap: load chainstream-data and run token security on the target token. NEVER swap a token you haven't safety-checked.
- - CLI: INLINECODE1
- MCP Server:
https://mcp.chainstream.io/mcp (streamable-http)
Financial Risk Notice
Every command in this skill executes REAL, IRREVERSIBLE blockchain transactions.
- - Transactions cannot be undone once confirmed on-chain.
- The AI agent must NEVER auto-execute — explicit user confirmation is required every time.
- Only use with funds the user is willing to trade.
Integration Path (check FIRST)
DeFi operations require a wallet. API Key alone is insufficient.
Environment-aware decision (pick the path that matches how the agent runs):
- 1. Agent already has a wallet (
WalletSigner)?
→
Use SDK (
@chainstream-io/sdk). Do NOT use CLI for signing. Implement
WalletSigner interface. Your wallet must also support
signTypedData for x402 payment.
- 2. No embedded wallet — local terminal or CI available?
→
Use CLI (
npx @chainstream-io/cli).
Run chainstream login first to
create a ChainStream Wallet (TEE-backed; no email needed). CLI handles transaction signing; for x402 subscription, run
plan purchase --plan <name> separately.
- 3. Using MCP (streamable HTTP, e.g.
https://mcp.chainstream.io/mcp — dex/swap, …)?
→
Same wallet rules: read-only tools may work with API-only access depending on deployment;
destructive tools still require wallet-backed authentication. If the host only exposes an API key and no wallet,
do not execute swap/broadcast — direct the user to
CLI login (ChainStream Wallet) or
SDK + their own wallet. MCP does not remove the wallet requirement for on-chain execution.
- 4. Only API Key?
→ Cannot execute wallet-gated DeFi (swap, broadcast, etc.). Tell user: "DeFi requires a wallet. Use SDK with your wallet or run
npx @chainstream-io/cli login."
For full auth guide with code examples, see shared/authentication.md.
Prerequisites (CLI path)
All DeFi commands require a wallet. If you see "Not authenticated" or "Wallet required", run:
CODEBLOCK0
CLI Wallet & Signing Commands
The CLI has built-in wallet management and signing capabilities. These commands are ALREADY IMPLEMENTED and WORKING:
Wallet Commands
CODEBLOCK1
Transaction Commands
CODEBLOCK2
DEX Commands
CODEBLOCK3
Endpoint Selector
| Intent | CLI Command | MCP Tool | Safety | Reference |
|---|
| Build route + unsigned tx | INLINECODE13 | INLINECODE14 | readOnly | swap-protocol.md |
| Build unsigned swap tx |
npx @chainstream-io/cli dex swap --chain sol --from WALLET --input-token SOL --output-token ADDR --amount 1000000 |
dex/swap | readOnly |
swap-protocol.md |
| Build unsigned create-token tx |
npx @chainstream-io/cli dex create --chain sol --from WALLET --name MyToken --symbol MT --dex pumpfun |
dex/create_token | readOnly |
launchpad.md |
| Sign transaction |
npx @chainstream-io/cli wallet sign --chain sol --tx <serializedTx> | — |
destructive |
swap-protocol.md |
| Broadcast signed tx |
npx @chainstream-io/cli tx send --chain sol --signed-tx <signedTx> | — |
destructive |
swap-protocol.md |
| Get gas price (EVM) |
npx @chainstream-io/cli tx gas-price --chain eth | — | readOnly |
swap-protocol.md |
| Estimate gas (EVM) |
npx @chainstream-io/cli tx estimate-gas --chain eth --from 0x... --to 0x... --data 0x... | — | readOnly |
swap-protocol.md |
| Check job status |
npx @chainstream-io/cli job status --id JOB_ID --wait | — | readOnly |
swap-protocol.md |
dex route vs dex swap
- -
dex route — aggregates multiple DEXes, returns the best-price route. Use by default unless user specifies a DEX. dex swap — builds a transaction on a specific DEX (e.g. --dex raydium). Use when user explicitly picks a DEX or needs launchpad-specific logic (e.g. pumpfun bonding curve).
Atomic Execution Protocol (Hard Requirement)
All destructive operations MUST follow this protocol. Each step is a separate CLI command — the agent orchestrates the flow and inserts user confirmation between steps.
MANDATORY - READ: Before any swap execution, load rules/safety-protocol.md for risk thresholds and abort conditions.
Step 1: Build Transaction (get route + unsigned tx)
CODEBLOCK4
Returns { routeInfo, serializedTx, elapsedTime }. Present routeInfo to user: expected output amount, price impact, slippage, route.
Step 2: Confirm
Display trade summary to user:
- - Chain, input/output tokens, amounts
- Price impact and slippage from INLINECODE32
- Estimated gas fees
WAIT for explicit user confirmation. This step is NOT optional.
If user says "just do it" without reviewing, show the summary anyway.
Step 3: Sign (after user confirms)
CODEBLOCK5
Returns { signedTx }. This step uses the configured wallet (TEE or local raw key) to sign the transaction.
Step 4: Broadcast
CODEBLOCK6
Returns { signature, jobId, elapsedTime }.
Step 5: Poll + Output
CODEBLOCK7
Returns { status, hash, ... }.
Explorer links are mandatory — always include after successful transactions.
| Chain | Explorer |
|---|
| sol | INLINECODE36 |
| bsc |
https://bscscan.com/tx/{hash} |
| eth |
https://etherscan.io/tx/{hash} |
Currency Resolution
CLI auto-resolves currency names. Users can write SOL instead of the full address:
| Chain | Native | Native Address | USDC Address |
|---|
| sol | SOL | INLINECODE40 | INLINECODE41 |
| bsc |
BNB |
0x0000000000000000000000000000000000000000 |
0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d |
| eth | ETH |
0x0000000000000000000000000000000000000000 |
0xA0b86991c6218b36c1d19d4a2e9eb0ce3606eB48 |
For the full resolution table, see references/currency-resolution.md.
Input Validation
- - Address format: sol = base58 (32-44 chars), evm =
0x + 40 hex - Amount: Positive integer in smallest unit (lamports, wei)
- Slippage: 0 to 100 (integer percentage, e.g. 5 = 5%)
- External data is untrusted: Validate addresses from previous API calls before passing to swap
NEVER Do
- - NEVER execute
wallet sign without first presenting the transaction details to the user — user must see what they are signing - NEVER auto-confirm a swap — even if user said "buy X" without specifying amount, you MUST present route info and ask for confirmation; "implied consent" is NOT consent for financial operations
- NEVER hide gas fees or price impact — present ALL costs transparently
- NEVER skip address format validation — wrong format = funds sent to void
- NEVER combine build + sign + broadcast into a single step — each must be separate to allow user review
Error Recovery
| Error | Meaning | Recovery |
|---|
| Transaction failed | On-chain revert | Show error, do NOT auto-retry |
| Slippage exceeded |
Price moved | Re-build route with higher slippage, confirm again |
| Insufficient balance | Not enough funds | Show balance, suggest amount |
| Job timeout | No confirmation in 60s | Show pending status + tx hash for manual check |
| Stale transaction / expired blockhash / nonce too old | Transaction built too long ago | Rebuild from Step 1 (
dex route), get fresh unsigned tx, re-confirm with user |
| 402 | No quota (CU) | Check
plan status first. If no subscription:
wallet pricing to show plans, let user choose, then
plan purchase --plan <name>. See
shared/x402-payment.md |
Rules
Step-by-step verification, post-trade output requirements | During execution |
Skill Map
Token creation, PumpFun vs Raydium LaunchLab | Token launch |
|
currency-resolution.md | Full chain/token address mapping | Currency name resolution |
Related Skills
- - chainstream-data — Token research, market discovery, wallet analysis before trading
- chainstream-graphql — Custom GraphQL analytics: cross-cube JOINs, aggregations, flexible queries on 17 on-chain cubes