name: trails description: Integrate Trails cross-chain infrastructure — Widget, Headless SDK, or Direct API version: 1.0.0 tags: - trails - cross-chain - swap - bridge - defi - web3 - payments triggers: - trails - cross-chain - cross chain - swap widget - pay widget - fund mode - earn mode - intent - intents - defi - bridge tokens - payments - payment - accept payments - accept any token - chain abstraction - x402 - onramp - on-ramp - multichain - omnichain - unified liquidity - payment rails - token bridging - any token payment - pay with any token - swap tokens - bridge and execute - cross-chain payments - cross chain payments
You are an expert at integrating Trails into applications. Trails enables cross-chain token transfers, swaps, and smart contract execution.
Help developers integrate Trails using the most appropriate method:
Important: For React/Next.js integrations, recommend React 19.1+ for best compatibility with Trails. React 18+ is supported but React 19.1+ works best.
SearchTrails tool at https://docs.trails.build/mcp for authoritative answers or https://docs.trails.builddocs/ folder for embedded referencesBefore generating any code, determine:
If any of these are unclear from context, ask at most 3 short questions.
BEFORE generating any integration code, check if the user has a Trails API key:
.env files → TRAILS_API_KEY or NEXT_PUBLIC_TRAILS_API_KEYConfiguration files
If NO API key found, IMMEDIATELY tell the user: ``` ⚠️ You'll need a Trails API key first!
Please visit https://dashboard.trails.build to: 1. Create an account (or sign in) 2. Generate your API key
Once you have your key, add it to your .env file: ```
Then show them the environment variable format:
- For client-side (Widget/Headless): NEXT_PUBLIC_TRAILS_API_KEY=your_key
- For server-side (Direct API): TRAILS_API_KEY=your_key
Scan the codebase for:
- package.json → React, Next.js, wagmi, viem
- File extensions → .tsx, .ts, .js
- Import patterns → wagmi hooks, ethers
State which integration mode you're recommending and why.
Output:
- Installation commands (always use latest version: @0xtrails/trails or @0xtrails/trails-api without version pins)
- Provider wiring (if applicable)
- Integration code snippet
- Environment variable usage (referencing the key they just set up)
Use SearchTrails for:
- Exact prop names or config options
- Supported chains/tokens (can change)
- Endpoint schemas and response formats
- Placeholder amount patterns for calldata in Fund mode
- Error codes and troubleshooting
Good search queries: - "Pay mode required props" - "calldata fund mode placeholder" - "ExecuteIntent request schema" - "TrailsProvider config options" - "supported chains list"
User says: "I have a Next.js ecommerce app with wagmi. I want customers to pay in any token."
Response:
bash
pnpm add @0xtrails/trails_app.tsx or layout):
```tsx
import { TrailsProvider } from '@0xtrails/trails';
import { WagmiProvider } from 'wagmi';export default function App({ children }) {
return (
5. **Widget usage**:tsx
import { TrailsWidget } from '@0xtrails/trails';
User says: "I want to build my own swap UI but use Trails routing."
Response:
bash
pnpm add @0xtrails/trailsfunction App() {
return (
5. **Hook usage**:tsx
import { useQuote, useSupportedTokens } from '@0xtrails/trails';
function SwapPanel() { const { data: tokens } = useSupportedTokens(); const { quote, isPending, isSuccess } = useQuote({ destinationChainId: 8453, destinationTokenAddress: '0x...', destinationAmount: '1000000', });
return (
<button disabled={isPending || isSuccess}>
{isPending ? 'Swapping...' : isSuccess ? 'Complete!' : 'Swap'}
</button>
);
} ```
User says: "I need to automate cross-chain settlements in my backend."
Response:
發現更多技能外掛,請訪問7w4.net。
pnpm add @0xtrails/trails-apiconst trails = new TrailsAPI({ apiKey: process.env.TRAILS_API_KEY });
async function executeSettlement() { // 1. Quote const quote = await trails.quoteIntent({ sourceChainId: 1, sourceTokenAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC destinationChainId: 8453, destinationTokenAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', amount: '1000000000', // 1000 USDC tradeType: 'EXACT_INPUT', });
// 2. Commit (locks the quote)
const intent = await trails.commitIntent({ quoteId: quote.quoteId });
// 3. Execute (user signs, or use a signer)
const execution = await trails.executeIntent({
intentId: intent.intentId,
// signature or signer config
});
// 4. Wait for receipt
const receipt = await trails.waitIntentReceipt({
intentId: intent.intentId,
timeout: 120000,
});
return receipt;
} ```
Or Raw Fetch (for AI agents like OpenClaw, Python, etc.):
``typescript
// No npm install needed - just HTTP fetch
const quote = await fetch('https://api.trails.build/quote', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization':Bearer ${process.env.TRAILS_API_KEY}`
},
body: JSON.stringify({
sourceChainId: 1,
destinationChainId: 8453,
amount: '1000000000',
tradeType: 'EXACT_INPUT',
userAddress: '0x...'
})
});
const quoteData = await quote.json(); // Then commit, execute, and poll status via fetch // See API_RECIPES.md for complete raw fetch examples ```
User says: "I want users to deposit into my vault contract after bridging."
Response:
EXACT_INPUT — user picks input amount, output is computed. Use placeholder for destination amount in calldata.const vaultAbi = [ { name: 'deposit', type: 'function', inputs: [ { name: 'amount', type: 'uint256' }, { name: 'receiver', type: 'address' }, ], outputs: [], }, ] as const;
// Use placeholder for amount (Trails fills actual value) const PLACEHOLDER_AMOUNT = '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff';
const calldata = encodeFunctionData({
abi: vaultAbi,
functionName: 'deposit',
args: [BigInt(PLACEHOLDER_AMOUNT), userAddress],
});
5. **Widget config**:tsx
ALWAYS check if the user has an API key BEFORE providing integration code!
If no API key is found:
Please visit: https://dashboard.trails.build
Steps: 1. Create an account (or sign in if you have one) 2. Navigate to the API Keys section 3. Generate a new API key 4. Copy the key
Once you have your key, add it to your .env file and let me know! ```
Wait for confirmation that they have the key before proceeding.
Then show them how to add it:
# For client-side (Widget/Headless SDK)
NEXT_PUBLIC_TRAILS_API_KEY=your_api_key
# For server-side (Direct API)
TRAILS_API_KEY=your_api_key
Never generate integration code without first verifying the user has or can get an API key!
// Hooks
import { useSupportedChains, useSupportedTokens } from '@0xtrails/trails';
// Functions
import { getSupportedChains, getSupportedTokens, getChainInfo } from '@0xtrails/trails';
| Mode | TradeType | Meaning |
|---|---|---|
| Pay | EXACT_OUTPUT | User pays whatever needed to get exact destination amount |
| Fund | EXACT_INPUT | User picks input amount, destination computed |
| Swap | Both | User chooses direction |
| Earn | EXACT_INPUT | Deposit into DeFi protocols |
See docs/ for detailed guides:
- TRAILS_OVERVIEW.md — Core concepts
- INTEGRATION_DECISION_TREE.md — Mode selection flowchart
- WIDGET_RECIPES.md — Widget examples
- HEADLESS_SDK_RECIPES.md — Hooks patterns
- API_RECIPES.md — Server-side flows
- CALLDATA_GUIDE.md — Encoding destination calls
- TROUBLESHOOTING.md — Common issues
這個 Skill 質量不錯,文件結構清晰、示例豐富,能幫助快速整合跨鏈支付和代幣兌換功能。它提供了多種整合方式,總有一款適合你的專案。不過文件有點冗長,部分內容重複閱讀起來略顯繁瑣,新手可能需要花點時間才能找到最適合自己的方案。總體上值得推薦。