swap-planner by uniswap/uniswap-ai
npx skills add https://github.com/uniswap/uniswap-ai --skill swap-planner规划和生成所有支持链上 Uniswap 代币兑换的深度链接。
运行时兼容性说明: 此技能使用
AskUserQuestion进行交互式提示。如果您的运行时环境中没有AskUserQuestion,请通过自然语言对话收集相同的参数。
通过以下步骤规划代币兑换:
生成的链接将打开 Uniswap,所有参数已准备就绪,可立即执行。
注意: 在 SSH、容器化或无头环境中,浏览器打开命令(
xdg-open/open)可能会失败。请始终显著地显示 URL,以便用户在需要时可以手动复制和访问。
文件访问权限: 此技能具有只读文件系统访问权限。除非用户明确请求,否则切勿读取当前项目目录之外的文件。
如果用户想要发现代币,而不是兑换已知的代币(例如,“帮我找一个 Meme 币”,“Base 链上有什么趋势”),请先帮助他们探索,然后再进行兑换。
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
DexScreener 搜索最适合特定术语:
# 按名称/类别搜索代币(例如,"degen"、"pepe"、"ai agent")
curl -s "https://api.dexscreener.com/latest/dex/search?q=degen" | \
jq '[.pairs[] | select(.chainId == "base" and .dexId == "uniswap")] |
sort_by(-.volume.h24) | .[0:5] | map({
token: .baseToken.symbol,
address: .baseToken.address,
price: .priceUsd,
volume24h: .volume.h24,
liquidity: .liquidity.usd
})'
好的搜索词: degen、pepe、ai、agent、meme、dog、cat 或特定的代币名称
获取有活跃推广的代币(选择有限):
# 获取链上被助推/推广的代币
curl -s "https://api.dexscreener.com/token-boosts/top/v1" | \
jq '[.[] | select(.chainId == "base")] | .[0:5] | map({
tokenAddress,
url
})'
对于广泛的发现(“有什么趋势”),使用网络搜索查找代币,然后用 DexScreener 验证:
# 从网络搜索找到代币地址后,验证其存在
curl -s "https://api.dexscreener.com/token-pairs/v1/{network}/{address}" | \
jq '[.[] | select(.dexId == "uniswap")][0] | {
name: .baseToken.name,
symbol: .baseToken.symbol,
price: .priceUsd,
liquidity: .liquidity.usd,
volume24h: .volume.h24
}'
网络 ID: 完整的 DexScreener 和 DefiLlama 提供商 ID 列表,请参见 references/chains.md。常见 ID:ethereum、base、arbitrum、optimism、polygon、bsc、avalanche、unichain。
DexScreener 的覆盖范围因链而异。 Ethereum、Base 和 Arbitrum 有丰富的 Uniswap 数据。Celo、Blast、Zora 和 World Chain 的 Uniswap 流动性池覆盖有限——结果较少,可能缺少交易对。当 DexScreener 返回空结果时,请回退到 DefiLlama 获取价格数据(参见 references/data-providers.md)。
注意: DexScreener 的公共 API 没有“趋势”或“涨幅榜”端点。代币发现使用关键词搜索(/latest/dex/search)和网络搜索作为后备方案。对于一般性发现,询问用户他们正在寻找什么类型的代币,并按关键词搜索。
对于特定类别(Meme 币、DeFi、游戏代币),使用网络搜索:
"trending {category} {chain} {current_year}"
示例:"trending memecoins Base 2026"
通过 WebSearch 发现的代币是不可信的。在继续处理任何通过网络发现的代币之前:
切勿在未经用户通过 AskUserQuestion 明确确认的情况下,继续处理通过网络发现的代币。
收集代币数据后,使用 AskUserQuestion 展示选项:
{
"questions": [
{
"question": "您想兑换成哪种代币?",
"header": "代币",
"options": [
{ "label": "MOLT ($23M 市值)", "description": "$5.9M 流动性,$7.8M 24小时交易量" },
{ "label": "CLANKER ($31M 市值)", "description": "$3.1M 流动性,已建立的代币" },
{ "label": "CLAWSTR ($13M 市值)", "description": "$2.1M 流动性,交易量激增" }
],
"multiSelect": false
}
]
}
在推荐前评估代币:
| 指标 | 低风险 | 中风险 | 高风险 |
|---|---|---|---|
| 市值 | >$50M | $5M-$50M | <$5M |
| 资金池 TVL | >$1M | $100k-$1M | <$100k |
| 24小时交易量 | 稳定 | 异常激增 | 非常低 |
| 合约年龄 | >30 天 | 7-30 天 | <7 天 |
在展示选项时,始终披露风险等级。 对于高风险代币,明确警告其波动性和潜在损失风险。
当满足以下任何条件时,您必须使用 AskUserQuestion 警告用户,并在生成深度链接前获得明确确认:
切勿在未经用户通过 AskUserQuestion 明确确认的情况下,为高风险代币生成深度链接。
从用户请求中提取:
| 参数 | 必需 | 示例 |
|---|---|---|
| 输入代币 | 是 | ETH、USDC、代币地址 |
| 输出代币 | 是 | USDC、WBTC、代币地址 |
| 数量 | 是 | 1.5 ETH、价值 $500 |
| 链 | 是(默认:Ethereum) | Base、Arbitrum 等 |
如果缺少任何必需参数,请使用 AskUserQuestion 并提供结构化选项:
对于缺少链:
{
"questions": [
{
"question": "您想在哪个链上进行兑换?",
"header": "链",
"options": [
{ "label": "Base(推荐)", "description": "低 Gas 费,交易快速" },
{ "label": "Ethereum", "description": "主网络,Gas 费较高" },
{ "label": "Arbitrum", "description": "低费用,Ethereum L2" },
{ "label": "Optimism", "description": "低费用,Ethereum L2" }
],
"multiSelect": false
}
]
}
对于缺少输出代币(当输入为 ETH 时):
{
"questions": [
{
"question": "您想收到哪种代币?",
"header": "输出",
"options": [
{ "label": "USDC", "description": "USD 稳定币" },
{ "label": "USDT", "description": "Tether 稳定币" },
{ "label": "DAI", "description": "去中心化稳定币" },
{ "label": "WBTC", "description": "封装比特币" }
],
"multiSelect": false
}
]
}
对于缺少数量:
{
"questions": [
{
"question": "您想兑换多少?",
"header": "数量",
"options": [
{ "label": "0.1 ETH", "description": "约 $320" },
{ "label": "0.5 ETH", "description": "约 $1,600" },
{ "label": "1 ETH", "description": "约 $3,200" },
{ "label": "自定义数量", "description": "输入具体数量" }
],
"multiSelect": false
}
]
}
为了更好的用户体验,始终使用表单而不是纯文本问题。
对于代币符号,使用已知代币或网络搜索解析为地址:
原生代币:使用 NATIVE 作为地址参数。
各链常见代币 - 完整列表请参见 ../../references/chains.md:
| 代币 | Ethereum | Base | Arbitrum |
|---|---|---|---|
| USDC | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 | 0xaf88d065e77c8cC2239327C5EDb3A432268e5831 |
| WETH | 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 | 0x4200000000000000000000000000000000000006 | 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1 |
| WBTC | 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 | N/A | 0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f |
对于未知代币,使用网络搜索查找合约地址,然后在链上验证。
输入验证(在任何 Shell 命令前必需):
在将用户提供的值插入任何 Shell 命令之前,验证所有输入:
^0x[a-fA-F0-9]{40}$../../references/chains.md 中的允许列表^[0-9]+\.?[0-9]*$);、|、$、```、&、(、)、>、<、\、'、"、换行符)的输入使用 curl(RPC 调用)验证代币合约在链上是否存在:
# 使用 eth_getCode 检查地址是否为合约
# 重要:使用前验证 token_address 匹配 ^0x[a-fA-F0-9]{40}$
curl -s -X POST "$rpc_url" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg addr "$token_address" '{"jsonrpc":"2.0","method":"eth_getCode","params":[$addr,"latest"],"id":1}')" \
| jq -r '.result'
如果结果是 0x 或为空,则该地址不是有效的合约。
使用 cast 的替代方案(可选,需要 Foundry):
# 使用前验证 token_address 匹配 ^0x[a-fA-F0-9]{40}$
cast code "$token_address" --rpc-url "$rpc_url"
注意: 上述 curl/RPC 方法因其更广泛的兼容性而更受青睐。仅在环境中已安装 cast 时使用。此技能仅使用 cast code 进行合约验证。请勿使用任何其他 cast 子命令。.claude/hooks/validate-forge-cast.sh 中的 PreToolUse 钩子会以编程方式强制执行此规则。
各链 RPC URL - 完整列表请参见 ../../references/chains.md。
对于不熟悉的代币,使用网络搜索进行研究:
在摘要中包含相关发现。
在生成深度链接之前,获取当前价格以估算兑换输出。完整的 API 详情请参见 references/data-providers.md。
使用 DexScreener 快速查询价格:
# 获取代币价格和资金池流动性
curl -s "https://api.dexscreener.com/token-pairs/v1/{network}/{address}" | \
jq '[.[] | select(.dexId == "uniswap")][0] | {
price: .priceUsd,
liquidity: .liquidity.usd,
volume24h: .volume.h24
}'
网络 ID: ethereum、base、arbitrum、optimism、polygon、bsc、avalanche、unichain
流动性警告:
| 资金池 TVL | 风险等级 | 操作 |
|---|
$1M | 低 | 正常进行
$100k - $1M | 中 | 注意潜在滑点
< $100k | 高 | 警告用户滑点风险
如果 API 不可用,请回退到 DefiLlama 或网络搜索以获取价格估算。
构建 Uniswap 兑换 URL:
https://app.uniswap.org/swap?chain={chain}&inputCurrency={input}&outputCurrency={output}&value={amount}&field=INPUT
URL 参数:
| 参数 | 描述 | 值 |
|---|---|---|
chain | 网络名称 | ethereum、base、arbitrum、optimism、polygon、bnb、avalanche、celo、blast、zora、unichain、worldchain |
inputCurrency | 输入代币 | 地址或 NATIVE |
outputCurrency | 输出代币 | 地址或 NATIVE |
value | 数量 | 十进制数字(例如,1.5) |
field | 哪个字段的值适用 | INPUT 或 OUTPUT |
格式化响应,包含:
示例输出格式:
## 兑换摘要
| 参数 | 值 |
| ---------------- | -------------------------- |
| 从 | 1 ETH |
| 到 | USDC |
| 链 | Base |
| 当前汇率 | 约 3,200 USDC 每 ETH |
| 预计输出 | 约 3,200 USDC |
| 资金池流动性 | $15.2M(低滑点风险) |
### 备注
- 最终金额取决于当前市场价格
- 默认滑点为 0.5% - 如有需要可在 Uniswap 中调整
- 在确认前,请在 Uniswap 中复核所有细节
正在您的浏览器中打开 Uniswap...
显示摘要后,在浏览器中打开 URL:
# Linux
xdg-open "https://app.uniswap.org/swap?chain=base&inputCurrency=NATIVE&outputCurrency=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&value=1&field=INPUT"
# macOS
open "https://app.uniswap.org/swap?..."
环境限制: 在远程 SSH、容器化或无头环境中,浏览器打开可能会失败。如果 xdg-open/open 失败,请显著显示完整的 URL,以便用户可以手动复制和粘贴:
**[点击此处以在 Uniswap 中打开](https://app.uniswap.org/swap?...)**
或复制此 URL:`https://app.uniswap.org/swap?...`
始终呈现摘要和 URL,以便用户复核和执行。
深度链接使用 Uniswap 的默认滑点(0.5%)。对于波动性大的代币或大额交易,建议用户在界面中调整滑点。
Gas 成本因链和网络拥堵情况而异。Base 和 Arbitrum 的 Gas 费通常低于 Ethereum 主网。
在生成链接之前,始终验证代币合约。诈骗代币通常使用与合法代币相似的名称。
对于大额交易,警告用户潜在的价格影响。如果影响显著,建议拆分成多笔较小的交易。
Uniswap 界面支持的所有链:
ethereum)base)arbitrum)optimism)polygon)bnb)avalanche)celo)blast)zora)worldchain)unichain)../../references/chains.md - 链 ID、RPC URL、原生代币、常见代币地址references/data-providers.md - 用于价格和流动性的 DexScreener 和 DefiLlama API常见兑换场景:
每周安装次数
302
仓库
GitHub 星标数
185
首次出现
2026年2月12日
安全审计
安装于
codex289
opencode287
gemini-cli283
github-copilot281
cursor279
kimi-cli278
Plan and generate deep links for token swaps on Uniswap across all supported chains.
Runtime Compatibility: This skill uses
AskUserQuestionfor interactive prompts. IfAskUserQuestionis not available in your runtime, collect the same parameters through natural language conversation instead.
Plan token swaps by:
The generated link opens Uniswap with all parameters ready for execution.
Note: Browser opening (
xdg-open/open) may fail in SSH, containerized, or headless environments. Always display the URL prominently so users can copy and access it manually if needed.
File Access: This skill has read-only filesystem access. Never read files outside the current project directory unless explicitly requested by the user.
If the user wants to discover tokens rather than swap a known token (e.g., "find me a memecoin", "what's trending on Base"), help them explore before proceeding to the swap.
DexScreener search works best with specific terms:
# Search for tokens by name/category (e.g., "degen", "pepe", "ai agent")
curl -s "https://api.dexscreener.com/latest/dex/search?q=degen" | \
jq '[.pairs[] | select(.chainId == "base" and .dexId == "uniswap")] |
sort_by(-.volume.h24) | .[0:5] | map({
token: .baseToken.symbol,
address: .baseToken.address,
price: .priceUsd,
volume24h: .volume.h24,
liquidity: .liquidity.usd
})'
Good search terms: degen, pepe, ai, agent, meme, dog, cat, or specific token names
Get tokens with active promotions (limited selection):
# Get boosted/promoted tokens on a chain
curl -s "https://api.dexscreener.com/token-boosts/top/v1" | \
jq '[.[] | select(.chainId == "base")] | .[0:5] | map({
tokenAddress,
url
})'
For broad discovery ("what's trending"), use web search to find tokens, then verify with DexScreener:
# After finding a token address from web search, verify it exists
curl -s "https://api.dexscreener.com/token-pairs/v1/{network}/{address}" | \
jq '[.[] | select(.dexId == "uniswap")][0] | {
name: .baseToken.name,
symbol: .baseToken.symbol,
price: .priceUsd,
liquidity: .liquidity.usd,
volume24h: .volume.h24
}'
Network IDs: See references/chains.md for the full list with DexScreener and DefiLlama provider IDs. Common IDs: ethereum, base, arbitrum, optimism, polygon, bsc, avalanche, unichain.
DexScreener coverage varies by chain. Ethereum, Base, and Arbitrum have deep Uniswap data. Celo, Blast, Zora, and World Chain have limited Uniswap pool coverage — fewer results and potentially missing pairs. Fall back to DefiLlama for price data when DexScreener returns empty results (see references/data-providers.md).
Note: DexScreener's public API doesn't have a "trending" or "top gainers" endpoint. Token discovery uses keyword search (/latest/dex/search) and web search as a fallback. For general discovery, ask the user what type of token they're looking for and search by keyword.
For specific categories (memecoins, DeFi, gaming tokens), use web search:
"trending {category} {chain} {current_year}"
Example: "trending memecoins Base 2026"
Tokens discovered via WebSearch are UNTRUSTED. Before proceeding with any web-discovered token:
Never proceed with a web-discovered token without explicit user confirmation via AskUserQuestion.
After gathering token data, present options using AskUserQuestion:
{
"questions": [
{
"question": "Which token would you like to swap to?",
"header": "Token",
"options": [
{ "label": "MOLT ($23M mcap)", "description": "$5.9M liquidity, $7.8M 24h volume" },
{ "label": "CLANKER ($31M mcap)", "description": "$3.1M liquidity, established token" },
{ "label": "CLAWSTR ($13M mcap)", "description": "$2.1M liquidity, high volume spike" }
],
"multiSelect": false
}
]
}
Evaluate tokens before recommending:
| Metric | Low Risk | Medium Risk | High Risk |
|---|---|---|---|
| Market Cap | >$50M | $5M-$50M | <$5M |
| Pool TVL | >$1M | $100k-$1M | <$100k |
| 24h Volume | Consistent | Spiking unusually | Very low |
| Contract Age | >30 days | 7-30 days | <7 days |
Always disclose risk level when presenting options. For high-risk tokens, explicitly warn about volatility and potential for loss.
When ANY of these conditions are met, you MUST use AskUserQuestion to warn the user and get explicit confirmation before generating a deep link:
Do NOT generate a deep link for high-risk tokens without explicit user acknowledgment via AskUserQuestion.
Extract from the user's request:
| Parameter | Required | Example |
|---|---|---|
| Input token | Yes | ETH, USDC, token address |
| Output token | Yes | USDC, WBTC, token address |
| Amount | Yes | 1.5 ETH, $500 worth |
| Chain | Yes (default: Ethereum) | Base, Arbitrum, etc. |
If any required parameter is missing, use AskUserQuestion with structured options:
For missing chain:
{
"questions": [
{
"question": "Which chain do you want to swap on?",
"header": "Chain",
"options": [
{ "label": "Base (Recommended)", "description": "Low gas fees, fast transactions" },
{ "label": "Ethereum", "description": "Main network, higher gas" },
{ "label": "Arbitrum", "description": "Low fees, Ethereum L2" },
{ "label": "Optimism", "description": "Low fees, Ethereum L2" }
],
"multiSelect": false
}
]
}
For missing output token (when input is ETH):
{
"questions": [
{
"question": "What token do you want to receive?",
"header": "Output",
"options": [
{ "label": "USDC", "description": "USD stablecoin" },
{ "label": "USDT", "description": "Tether stablecoin" },
{ "label": "DAI", "description": "Decentralized stablecoin" },
{ "label": "WBTC", "description": "Wrapped Bitcoin" }
],
"multiSelect": false
}
]
}
For missing amount:
{
"questions": [
{
"question": "How much do you want to swap?",
"header": "Amount",
"options": [
{ "label": "0.1 ETH", "description": "~$320" },
{ "label": "0.5 ETH", "description": "~$1,600" },
{ "label": "1 ETH", "description": "~$3,200" },
{ "label": "Custom amount", "description": "Enter specific amount" }
],
"multiSelect": false
}
]
}
Always use forms instead of plain text questions for better UX.
For token symbols, resolve to addresses using known tokens or web search:
Native tokens : Use NATIVE as the address parameter.
Common tokens by chain - see ../../references/chains.md for full list:
| Token | Ethereum | Base | Arbitrum |
|---|---|---|---|
| USDC | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 | 0xaf88d065e77c8cC2239327C5EDb3A432268e5831 |
| WETH | 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 | 0x4200000000000000000000000000000000000006 | 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1 |
For unknown tokens, use web search to find the contract address, then verify on-chain.
Input Validation (Required Before Any Shell Command):
Before interpolating user-provided values into any shell command, validate all inputs:
^0x[a-fA-F0-9]{40}$../../references/chains.md^[0-9]+\.?[0-9]*$);, |, $, ```, &, (, ), >, , , , , newlines)Verify token contracts exist on-chain using curl (RPC call):
# Check if address is a contract using eth_getCode
# IMPORTANT: Validate token_address matches ^0x[a-fA-F0-9]{40}$ before use
curl -s -X POST "$rpc_url" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg addr "$token_address" '{"jsonrpc":"2.0","method":"eth_getCode","params":[$addr,"latest"],"id":1}')" \
| jq -r '.result'
If the result is 0x or empty, the address is not a valid contract.
Alternative with cast (optional, requires Foundry):
# Validate token_address matches ^0x[a-fA-F0-9]{40}$ before use
cast code "$token_address" --rpc-url "$rpc_url"
Note: The curl/RPC method above is preferred for broader compatibility. Only use cast if already available in the environment. This skill ONLY uses cast code for contract verification. Do not use any other cast subcommands. The PreToolUse hook in .claude/hooks/validate-forge-cast.sh enforces this programmatically.
RPC URLs by chain - see ../../references/chains.md for full list.
For unfamiliar tokens, use web search to research:
Include relevant findings in the summary.
Before generating the deep link, fetch current prices to estimate swap output. See references/data-providers.md for full API details.
Quick price lookup with DexScreener:
# Get token price and pool liquidity
curl -s "https://api.dexscreener.com/token-pairs/v1/{network}/{address}" | \
jq '[.[] | select(.dexId == "uniswap")][0] | {
price: .priceUsd,
liquidity: .liquidity.usd,
volume24h: .volume.h24
}'
Network IDs: ethereum, base, arbitrum, optimism, polygon, bsc, avalanche, unichain
Liquidity warnings:
| Pool TVL | Risk Level | Action |
|---|
$1M | Low | Proceed normally
$100k - $1M | Medium | Note potential slippage
< $100k | High | Warn user about slippage risk
If API is unavailable, fall back to DefiLlama or web search for price estimates.
Construct the Uniswap swap URL:
https://app.uniswap.org/swap?chain={chain}&inputCurrency={input}&outputCurrency={output}&value={amount}&field=INPUT
URL Parameters:
| Parameter | Description | Values |
|---|---|---|
chain | Network name | ethereum, base, arbitrum, optimism, polygon, bnb, avalanche, celo, blast, , , |
Format the response with:
Example output format:
## Swap Summary
| Parameter | Value |
| ---------------- | -------------------------- |
| From | 1 ETH |
| To | USDC |
| Chain | Base |
| Current Rate | ~3,200 USDC per ETH |
| Estimated Output | ~3,200 USDC |
| Pool Liquidity | $15.2M (Low slippage risk) |
### Notes
- Final amount depends on current market price
- Default slippage is 0.5% - adjust in Uniswap if needed
- Review all details in Uniswap before confirming
Opening Uniswap in your browser...
After displaying the summary, open the URL in the browser:
# Linux
xdg-open "https://app.uniswap.org/swap?chain=base&inputCurrency=NATIVE&outputCurrency=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&value=1&field=INPUT"
# macOS
open "https://app.uniswap.org/swap?..."
Environment limitations: Browser opening may fail in remote SSH, containerized, or headless environments. If xdg-open/open fails, display the full URL prominently so users can copy and paste it manually:
**[Click here to open in Uniswap](https://app.uniswap.org/swap?...)**
Or copy this URL: `https://app.uniswap.org/swap?...`
Always present the summary and URL so users can review and execute.
The deep link uses Uniswap's default slippage (0.5%). For volatile tokens or large trades, advise users to adjust slippage in the interface.
Gas costs vary by chain and network congestion. Base and Arbitrum typically have lower gas than Ethereum mainnet.
Always verify token contracts before generating links. Scam tokens often use similar names to legitimate tokens.
For large trades, warn users about potential price impact. Suggest splitting into smaller trades if impact would be significant.
All chains supported by the Uniswap interface:
ethereum)base)arbitrum)optimism)polygon)bnb)avalanche)celo)blast)zora)../../references/chains.md - Chain IDs, RPC URLs, native tokens, common token addressesreferences/data-providers.md - DexScreener and DefiLlama APIs for prices and liquidityCommon swap scenarios:
Weekly Installs
302
Repository
GitHub Stars
185
First Seen
Feb 12, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
codex289
opencode287
gemini-cli283
github-copilot281
cursor279
kimi-cli278
GitHub Actions 官方文档查询助手 - 精准解答 CI/CD 工作流问题
22,500 周安装
| WBTC | 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 | N/A | 0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f |
<\'"zoraunichainworldchaininputCurrency | Input token | Address or NATIVE |
outputCurrency | Output token | Address or NATIVE |
value | Amount | Decimal number (e.g., 1.5) |
field | Which field value applies to | INPUT or OUTPUT |
worldchain)unichain)