
【免费下载链接】internet-court-skillThe trust layer for agent-to-agent commerce — natural-language mandates, ERC-7710 delegated permissions, x402 payments, escrow, and dispute resolution as one open, catch-all Agent Skill / Claude Code plugin.项目地址https://gitcode.com/gh_mirrors/in/internet-court-skill点击查看免费下载NEAR Intents 1Click API 是一套把意图Intent抽象为简单 REST 调用的跨链代币交换服务你只需请求报价、向 API 提供的唯一存款地址转入资金即可自动完成跨 EVM、Solana、NEAR、TON、Stellar、Tron 等链的兑换。本指南以仓库 vendored/near/near-intents/SKILL.md 为骨架结合其下的规则文档与示例源码完整讲解从 token 列表获取、dry/wet 报价、各链存款构建、状态轮询到高级余额模式的全流程读完即可落地一个可运行的 React 交换组件或 Node.js 服务端脚本。1Click API 的工作原理1Click 简化了 NEAR Intents 的使用方式它会临时将资产转移给一个可信的交换代理swapping agent由该代理协调做市商Market Makers执行你的意图。REST API 把意图创建、求解器solver协调与交易执行全部封装起来你只需要处理三个动作获取支持的代币列表GET /v0/tokens请求报价POST /v0/quotedry: true预览dry: false获取存款地址向存款地址转入资金其余自动完成。整个交换生命周期详见 concepts.md可以概括为Request Quote → Deposit Tokens → Submit Tx Hash → Monitor Status → Success/Refund对应的完整 API 调用链来自 SKILL.md 的集成流程图为GET /v0/tokens → POST /v0/quote (dry) → POST /v0/quote (wet) → Deposit TX → POST /v0/deposit/submit → GET /v0/status其中POST /v0/deposit/submit与GET /v0/status均为可选优化步骤前者让 1Click 立即感知你的存款以加速处理后者用于轮询交换进度。前置准备获取代币列表与 API Key获取支持的代币GET /v0/tokens所有可交换代币通过 api-tokens.md 中定义的GET /v0/tokens获取该接口变化不频繁建议缓存结果const response await fetch(https://1click.chaindefuser.com/v0/tokens); const tokens await response.json();返回的每个Token对象结构如下字段类型说明assetIdstring用于originAsset/destinationAsset的资产标识decimalsnumber用于金额换算wei、lamports、satoshis 等blockchainstring所属链如eth、sol、near、base、arb、bsc等symbolstring代币符号如USDC、ETH、wNEARpricestringUSD 价格priceUpdatedAtstring价格更新时间ISO 时间戳contractAddress?string代币合约地址用于构建转账文档提供了一个实用的查找辅助函数const findToken (tokens: Token[], symbol: string, blockchain: string) tokens.find(t t.symbol.toLowerCase() symbol.toLowerCase() t.blockchain blockchain ); // 示例 const usdcEth findToken(tokens, USDC, eth); // usdcEth.assetId nep141:eth-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.omft.near // usdcEth.contractAddress 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48关键原则永远使用/v0/tokens返回的assetId绝不手工拼接资产 ID。从上面的示例可以看到即使是 EVM 上的 USDC其assetId也是以nep141:前缀表达的 NEAR 生态格式手工构造极易出错。认证与费率在 Partners Portal 注册可获取 API Key并通过Authorization: Bearer请求头携带可免去 0.1%10 个基点的手续费headers: { Authorization: Bearer ${apiKey} }核心请求报价POST /v0/quote报价接口 api-quote.md 是集成中最核心的一环。dry: true只做预览不生成存款地址dry: false提交并返回约 10 分钟有效的存款地址。必填字段字段类型说明drybooleantrue 仅预览不生成存款地址false 提交报价返回约 10 分钟有效的存款地址swapTypestring如何解释amount见下文四种交换类型originAssetstring源代币assetId来自 GET /v0/tokensdestinationAssetstring目标代币assetId来自 GET /v0/tokensamountstring最小单位金额wei、lamports、satoshis按swapType解释recipientstring接收输出代币的地址格式取决于目标链refundTostring交换失败时的退款地址必须对源链有效可选字段——路由字段类型默认值说明depositTypestringORIGIN_CHAIN存款来源。ORIGIN_CHAIN 在源链上存款INTENTS 从 intents.near 余额存款recipientTypestringDESTINATION_CHAIN输出去向。DESTINATION_CHAIN 发送到目标链INTENTS 记入 intents.near 余额refundTypestringORIGIN_CHAIN退款去向。ORIGIN_CHAIN 退回源链INTENTS 退回 intents.near 余额depositModestringSIMPLESIMPLE 标准存款地址MEMO 存款地址 memoStellar 必选可选字段——价格字段类型默认值说明slippageTolerancenumber-可接受的最大滑点基点。100 1%影响minAmountOutdeadlinestring~10 分钟ISO 时间戳。报价过期时间用户必须在此前完成存款quoteWaitingTimeMsnumber3000等待做市商报价的时间毫秒。设为0可获得最快响应可选字段——费用与追踪字段类型说明referralstring你的应用标识小写会体现在链上数据与分析中appFeesarray你的收费[{ recipient: yourfee.near, fee: 100 }]费用以基点计100 1%sessionIdstring客户端会话 ID用于追踪connectedWalletsstring[]用户已连接的钱包地址有助于路由优化可选字段——虚拟链高级字段类型说明virtualChainRecipientstring虚拟链接收方的 EVM 地址virtualChainRefundRecipientstring虚拟链退款的 EVM 地址customRecipientMsgstringNEAR 上ft_transfer_call的消息。警告若接收方未实现ft_on_transfer资金将丢失四种交换类型swapTypeEXACT_INPUT最常用——固定输入金额、可变输出{ swapType: EXACT_INPUT, amount: 1000000 } // 正好交换 1 USDC行为规则存款恰好等于amountIn→ 收到amountOut存款少于amountIn→ 到期后退款存款多于amountIn→ 交换照常处理超额部分完成后退还。EXACT_OUTPUT——固定输出金额、可变输入{ swapType: EXACT_OUTPUT, amount: 1000000000000000000 } // 正好换出 1 ETH响应中额外包含minAmountIn、maxAmountIn。行为规则存款落在minAmountIn与maxAmountIn之间 → 收到精确的amountOut少于minAmountIn→ 退款多于maxAmountIn→ 交换照常处理超额退还。FLEX_INPUT——带滑点区间的可变输入适合全部兑换场景{ swapType: FLEX_INPUT, amount: 1000000, slippageTolerance: 100 }响应包含minAmountIn、minAmountOut。行为规则任意 ≥minAmountIn的存款都被接受输出保证 ≥minAmountOut滑点同时作用于输入与输出区间。ANY_INPUT——累积式存款截止时间前可多次存入{ swapType: ANY_INPUT, amount: 0 } // 无固定金额适用场景聚合多笔存款之后通过/v0/any-input/withdrawals提现。报价响应字段{ correlationId: string; // 唯一报价 ID timestamp: string; // 报价生成时间 quoteRequest: { ... }; // 请求回显 quote: { // 存款信息仅 dry: false 时返回 depositAddress: string; // 资金发往此处 depositMemo: string | null; // 若非 null 必须在交易中携带Stellar // 金额 amountIn: string; // 预期输入最小单位 amountInFormatted: string; // 人类可读 1.00 amountInUsd: string; // USD 价值仅展示 minAmountIn?: string; // 用于 EXACT_OUTPUT、FLEX_INPUT maxAmountIn?: string; // 用于 EXACT_OUTPUT amountOut: string; // 预期输出最小单位 amountOutFormatted: string; // 人类可读 amountOutUsd: string; // USD 价值仅展示——绝不可用于业务逻辑 minAmountOut?: string; // 滑点后的保证最低输出 // 时间 deadline: string; // ISO 时间戳——存款必须在此之前到账 timeWhenInactive: string; // 报价失效时间仅 dry: false 返回 timeEstimate: number; // 预计完成时间秒 } }实战示例预览 → 提交拿地址第一步dry 预览ETH USDC → NEAR wNEARconst preview await fetch(https://1click.chaindefuser.com/v0/quote, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ dry: true, swapType: EXACT_INPUT, originAsset: nep141:eth-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.omft.near, destinationAsset: nep141:wrap.near, amount: 1000000, // 1 USDC6 位小数 recipient: user.near, refundTo: 0xYourEthAddress, slippageTolerance: 100, // 1% }) }).then(r r.json()); // preview.quote.amountOutFormatted 0.35 (wNEAR)第二步dry: false 提交并获取存款地址携带 API Key 可免 0.1% 费用const committed await fetch(https://1click.chaindefuser.com/v0/quote, { method: POST, headers: { Content-Type: application/json, Authorization: Bearer YOUR_API_KEY // 免除 0.1% 费用 }, body: JSON.stringify({ dry: false, // 提交 swapType: EXACT_INPUT, originAsset: nep141:eth-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.omft.near, destinationAsset: nep141:wrap.near, amount: 1000000, recipient: user.near, refundTo: 0xYourEthAddress, slippageTolerance: 100, referral: myapp, appFees: [{ recipient: myfees.near, fee: 50 }], // 0.5% 手续费 }) }).then(r r.json()); // committed.quote.depositAddress 0x... → 把 1 USDC 发到这里 // committed.quote.deadline 2025-01-16T15:00:00Z → 必须在此之前存款状态机与轮询GET /v0/status交换进度通过 api-status.md 中的GET /v0/status查询需轮询直到进入终态。GET /v0/status?depositAddress0x...StellarMEMO 模式需附加 memo?depositAddressGABCD...depositMemo123456。状态值表状态是否终态说明PENDING_DEPOSIT否等待存款到账PROCESSING否已检测到存款交换执行中SUCCESS是完成——代币已送达INCOMPLETE_DEPOSIT是存款低于所需金额REFUNDED是失败资金已退回refundToFAILED是发生错误响应结构interface StatusResponse { correlationId: string; status: string; updatedAt: string; quoteResponse: QuoteResponse; // 原始报价 swapDetails: { amountIn: string; amountInFormatted: string; amountOut: string; amountOutFormatted: string; slippage: number; originChainTxHashes: Array{ hash: string; explorerUrl: string }; destinationChainTxHashes: Array{ hash: string; explorerUrl: string }; refundedAmount?: string; refundReason?: string; depositedAmount?: string; }; }推荐的轮询模式async function pollUntilComplete(depositAddress: string, apiKey?: string) { const headers apiKey ? { Authorization: Bearer ${apiKey} } : {}; for (let i 0; i 120; i) { // 最多约 4 分钟 const res await fetch( https://1click.chaindefuser.com/v0/status?depositAddress${depositAddress}, { headers } ); const status await res.json(); if ([SUCCESS, FAILED, REFUNDED, INCOMPLETE_DEPOSIT].includes(status.status)) { return status; } await new Promise(r setTimeout(r, 2000)); // 每 2 秒轮询一次 } throw new Error(Timeout waiting for swap completion); }通知存款加速处理POST /v0/deposit/submitapi-deposit-submit.md 定义的可选接口用于在存款交易确认后立即通知 1Click加快处理速度改善用户体验await fetch(https://1click.chaindefuser.com/v0/deposit/submit, { method: POST, headers: { Content-Type: application/json, Authorization: Bearer ${apiKey}, }, body: JSON.stringify({ txHash: 0x123abc..., // 你的存款交易哈希 depositAddress: quote.quote.depositAddress, }) });附加字段使用时机nearSenderAccountNEAR 存款——发送方账户 IDmemoStellar MEMO 模式——交易中使用的 memoNEAR 示例await fetch(https://1click.chaindefuser.com/v0/deposit/submit, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ txHash: Hk3ds..., depositAddress: quote.quote.depositAddress, nearSenderAccount: user.near, }) });Stellar 示例await fetch(https://1click.chaindefuser.com/v0/deposit/submit, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ txHash: abc123..., depositAddress: quote.quote.depositAddress, memo: quote.quote.depositMemo, }) });在存款交易确认后立即调用即可非必需但能显著提升 UX。各链存款构建指南获取存款地址后需要按源链构建对应的转账交易。以下实现均来自仓库中对应的 deposit 规则文档可直接复用。EVM 链Ethereum / Base / Arbitrum / Optimism / Polygon / BSC / Avalanche / Gnosis / Berachain见 deposit-evm.md。原生代币ETH/MATIC 等用 wagmi 的sendTransactionimport { useSendTransaction } from wagmi; const { sendTransactionAsync } useSendTransaction(); const hash await sendTransactionAsync({ to: depositAddress as 0x${string}, value: BigInt(amountIn), });ERC-20 代币用writeContract执行transfer合约地址取自 token API 的contractAddressimport { useWriteContract } from wagmi; import { erc20Abi } from viem; const { writeContractAsync } useWriteContract(); const hash await writeContractAsync({ address: tokenAddress as 0x${string}, abi: erc20Abi, functionName: transfer, args: [depositAddress as 0x${string}, BigInt(amountIn)], });Solana原生 SOL 与 SPL 代币见 deposit-solana.md。原生 SOL 直接使用SystemProgram.transferSPL 代币需通过关联代币账户ATA转账目标 ATA 不存在时先创建import { useWallet, useConnection } from solana/wallet-adapter-react; import { SystemProgram, Transaction, PublicKey } from solana/web3.js; const { publicKey, sendTransaction } useWallet(); const { connection } useConnection(); const tx new Transaction().add( SystemProgram.transfer({ fromPubkey: publicKey!, toPubkey: new PublicKey(depositAddress), lamports: BigInt(amountIn), }) ); const signature await sendTransaction(tx, connection); await connection.confirmTransaction(signature);SPL 版本使用solana/spl-token的getAssociatedTokenAddressSync、createAssociatedTokenAccountInstruction与createTransferInstructiontokenMint取自 token API 的contractAddress。NEARNEP-141 代币见 deposit-near.md通过near-wallet-selector/react的 wallet selector 发起ft_transferimport { useWalletSelector } from near-wallet-selector/react; const { selector } useWalletSelector(); const wallet await selector.wallet(); const result await wallet.signAndSendTransactions({ transactions: [{ receiverId: tokenContract, // contractAddress 来自 token API actions: [{ type: FunctionCall, params: { methodName: ft_transfer, args: { receiver_id: depositAddress, amount: amountIn }, gas: 50000000000000, // 50 TGas deposit: 1, // 需要 1 yoctoNEAR }, }], }], }); const txHash result?.[0]?.transaction?.hash;原生 NEAR 必须先包装成 wNEAR对wrap.near先调用near_depositdeposit 为包装金额再调用ft_transfer。调用/v0/deposit/submit时需携带nearSenderAccount: user.near。TON原生 TON 与 Jetton见 deposit-ton.md通过tonconnect/ui-react的 TonConnect 发起金额单位为 nanotonimport { useTonConnectUI } from tonconnect/ui-react; const [tonConnect] useTonConnectUI(); const result await tonConnect.sendTransaction({ validUntil: Math.floor(Date.now() / 1000) 600, // 10 分钟 messages: [{ address: depositAddress, amount: amountIn, // 单位 nanoton }], }); const txHash result.boc;Jetton 转账需要用ton/core手工构建transferop code0xf8a7ea5的消息体注意目标是用户的 jetton 钱包地址而非代币合约地址需从 jetton master 合约查询。Tron原生 TRX 与 TRC-20见 deposit-tron.md使用tronweb。金额单位为 SUN1 TRX 1,000,000 SUNTRC-20 通过triggerSmartContract调用transfer(address,uint256)。StellarMEMO 必须见 deposit-stellar.md。Stellar 必须使用depositMode: MEMO交易中必须携带 memo否则资金丢失。报价示例const quote await fetch(https://1click.chaindefuser.com/v0/quote, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ dry: false, depositMode: MEMO, // Stellar 必填 originAsset: nep141:stellar-native.omft.near, destinationAsset: nep141:wrap.near, amount: 10000000, // 1 XLM以 stroop 计7 位小数 recipient: user.near, refundTo: GA5X..., // Stellar 地址 }) }).then(r r.json()); // quote.quote.depositMemo 123456 - 交易中必须携带交易构建使用stellar/stellar-sdk的TransactionBuilder通过.addMemo(Memo.text(quote.quote.depositMemo))附加 memo状态轮询同样要带上 memo 参数。完整实现React 交换组件仓库 react-swap-widget.md 提供了一个最小可用的 React 交换组件依赖如下npm install tanstack/react-query wagmi viem组件结构要点完整代码见规则文档API 封装为三个 hooksuseTokens5 分钟缓存、useQuotedry 预览refetchInterval: 10_000定时刷新、useSwapStatus轮询状态进入终态后自动停止轮询执行封装为 mutationuseExecuteSwap依次完成 dry: false 获取存款地址 → 调用钱包sendTransaction→ 调/v0/deposit/submit通知该步骤.catch(() {})非关键EVM 双分支处理有contractAddress走 ERC-20transfer否则走原生代币sendTransactionAsync链校验handleSwap中通过CHAIN_IDS[fromToken.blockchain]与当前链比对不匹配则提示切换网络金额换算用 viem 的parseUnits(amount, fromToken.decimals)把人类可读金额转最小单位。使用方式import { SwapWidget } from ./SwapWidget; SwapWidget apiKey{process.env.NEXT_PUBLIC_ONE_CLICK_API_KEY} /该示例展示的四个关键模式详见文档 What This Example ShowsFlowtokens → dry quote → wet quote → send TX → poll status、useQuery/useMutation分工、EVM 原生 vs ERC-20 处理、终态自动停轮询。接入现有应用时替换 wagmi 配置、换成自己的设计系统即可。完整实现Node.js 服务端脚本仓库 server-example.md 给出了无框架的纯 TypeScript viem 服务端实现适用于机器人、后端服务等场景npm install viem核心流程executeSwap函数取代币列表 → 定位代币 →parseUnits换算 → dry: false 获取真实存款地址 → 按原生/ERC-20 分支发送存款交易 →submitDeposit通知 →pollStatus轮询至终态最多 6 分钟、每 2 秒一次。运行方式PRIVATE_KEY0x... ONE_CLICK_API_KEY... npx tsx bot.ts该文档还提供了 Solana 源链的补充示例原生 SOL 用SystemProgram.transferSPL 用createTransferInstruction走关联账户。React Hooks 封装可复用react-hooks.md 将核心 API 封装为四个可复用 hooksuseTokens/useQuote/useSwapStatus/useExecuteSwap要点useTokens设置staleTime: 5 * 60 * 1000缓存 5 分钟useQuote固定dry: trueEXACT_INPUTslippageTolerance: 100仅当amount非空非零时启用每 10 秒自动刷新useSwapStatus在进入终态后把refetchInterval置为false避免无谓轮询useExecuteSwap作为useMutation暴露把wet quote → 发送交易 → 通知 API三步串成一条原子操作sendTransaction由调用方注入可接 wagmi、ethers 等任意钱包逻辑。高级模式一Intents 余额模式默认的**链到链chain-to-chain**模式在源链存款、目标链收款适合绝大多数场景但高频交易或追求更快执行时可选用 intents-balance.md 的intents.near 余额模式——应用以 intents.near 上的余额运作两种模式在应用内只能二选一。入金到余额recipientType: INTENTSrecipient为 NEAR 账户名const quote await fetch(https://1click.chaindefuser.com/v0/quote, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ dry: false, swapType: EXACT_INPUT, originAsset: nep141:eth-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.omft.near, destinationAsset: nep141:eth-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.omft.near, // 相同资产 depositType: ORIGIN_CHAIN, recipientType: INTENTS, // 记入 intents 余额 recipient: user.near, // 记入该 NEAR 账户 refundTo: 0xUserAddress, amount: 1000000, }) }).then(r r.json());从余额提现depositType: INTENTS、recipientType: DESTINATION_CHAIN同时指定refundType: INTENTS。查询余额通过near-api-js调用intents.near合约的mt_balance_ofimport { connect, keyStores } from near-api-js; const near await connect({ networkId: mainnet, keyStore: new keyStores.InMemoryKeyStore(), nodeUrl: https://rpc.mainnet.near.org, }); const account await near.account(accountId); const balance await account.viewFunction({ contractId: intents.near, methodName: mt_balance_of, args: { account_id: accountId, token_id: tokenId }, });高级模式二被动存款QR 码passive-deposit.md 描述的是不实现链上转账逻辑的方案展示存款地址可生成 QR 码让用户从自己的钱包手动转账。适合比特币等被动链或 CEX 提币场景。使用FLEX_INPUT以容忍实际到账金额的微小偏差const quote await fetch(https://1click.chaindefuser.com/v0/quote, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ dry: false, swapType: FLEX_INPUT, slippageTolerance: 100, // 1% - 允许金额轻微波动 originAsset: nep141:btc.omft.near, // Bitcoin destinationAsset: nep141:wrap.near, amount: 100000000, // 1 BTC以 satoshi 计 recipient: user.near, refundTo: bc1q..., // 比特币退款地址 }) }).then(r r.json());UI 层只需展示depositAddress、depositMemo若有则标红并强调必须携带、amountInFormatted与deadline并提供复制按钮。关键注意事项与最佳实践CEX 存款警告concepts.md 特别提醒中心化交易所CEX常使用中间地址或按用户分配的内部地址通过 NEAR Intents 发送的转账可能无法被识别或未列入白名单而无法入账。建议先向 CEX 地址发送小额测试金额再执行全量转账。展示数据与业务逻辑分离报价响应中的amountOutUsd字段仅供展示绝不可用于业务逻辑或计算。业务判断必须基于真实代币金额amountOut、amountIn及其Formatted变体。四条关键知识Skill 元数据使用/v0/tokens返回的assetId——绝不手工构造dry: true仅预览dry: false才返回存款地址约 10 分钟有效轮询状态直到终态SUCCESS、FAILED、REFUNDED、INCOMPLETE_DEPOSIT链到链是默认模式——depositType与recipientType默认即链端点多数场景无需显式设置。文档索引本 Skill 的完整知识库位于仓库vendored/near/near-intents/下按优先级组织优先级类别文件1示例react-swap-widget.md、server-example.md2APIapi-quote.md、api-tokens.md、api-status.md、api-deposit-submit.md、api-any-input-withdrawals.md3存款deposit-evm.md、deposit-solana.md、deposit-near.md、deposit-ton.md、deposit-tron.md、deposit-stellar.md4React Hooksreact-hooks.md5高级intents-balance.md、passive-deposit.md-概念参考concepts.md外部资源1Click API 文档https://docs.near-intents.org/near-intents/integration/distribution-channels/1click-api、API Key 申请https://partners.near-intents.org/、OpenAPI 规范https://1click.chaindefuser.com/docs/v0/openapi.yaml。本文涉及的所有端点均基于仓库文档中使用的基准地址https://1click.chaindefuser.com。赞分享【免费下载链接】internet-court-skillThe trust layer for agent-to-agent commerce — natural-language mandates, ERC-7710 delegated permissions, x402 payments, escrow, and dispute resolution as one open, catch-all Agent Skill / Claude Code plugin.项目地址https://gitcode.com/gh_mirrors/in/internet-court-skill点击查看免费下载相关推荐Wand-Enhancer 免费解锁 Wand 专业版手机远程改数值一次搞定Wand Enhancer 免费解锁 Wand 专业版手机远程改数值一次搞定 Wand前身 WeMod的专业版按月收费AI 建议和高级选项全锁在付费墙后NEAR Intents 1Click API 核心概念指南从报价到结算的链上意图交换全流程解析NEAR Intents 1Click API 核心概念指南从报价到结算的链上意图交换全流程解析 导读 本文围绕互联网法院技能仓库internet courNEAR Intents 1Click API 实战NEAR 链存款NEP-141 代币与原生 NEAR 包装完整指南NEAR Intents 1Click API 实战NEAR 链存款NEP 141 代币与原生 NEAR 包装完整指南 本文是 NEAR Intents上一篇5分钟上手graphql-clientGitHub API示例详解下一篇如何快速解决Anki Cloze填空验证错误终极排查指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考