输入/搜索内容
内置函数
结构体
内置变量与常量
通用约定
交易所
能力矩阵
中心化交易所
去中心化交易所
Hyperliquid
Lighter
edgeX
Aster
Aevo
Pendle
WOOFi Pro
Uniswap / PancakeSwap
Aerodrome / Velodrome
KyberSwap
1inch
EVM DEX通用指令
Jupiter
OKX DEX
DEX策略示例
预测市场
证券与期货
链上与自定义接入

OneInch交易所对象接入1inch聚合器:报价和交易数据来自1inch Swap API v6.0(在1inch的众多流动性来源之间拆单选路),由托管者用配置的私钥签名后发给1inch的路由合约AggregationRouterV6(0x111111125421cA6dc452d289314280a0f8842A65)。一个交易所对象对应一条链,可选Ethereum、Arbitrum、Base、BNB Chain、Unichain、Polygon、OP Mainnet。使用前需要在1inch开发者门户申请API Key,填在交易所配置中(必填)。

它与Uniswap交易所对象是同一套实现的聚合器版本:代币表、余额、授权、订单、撤单、转账与包装的用法都相同,区别是兑换路径由1inch给出。

名称与配置

exchange.GetName():OneInch(现货)。

配置项必填默认值说明
链是Ethereum可选:Ethereum、Arbitrum、Base、BNB Chain、Unichain、Polygon、OP Mainnet
钱包私钥是—钱包私钥(十六进制)。
节点地址否https://ethereum-rpc.publicnode.com,https://eth.drpc.orgRPC节点地址;多个节点用逗号分隔,某个节点出错或缺少数据时自动换下一个;不填时使用各链内置的默认节点(主节点加备用节点,逗号分隔)。(详见表下)
1inch API Key是—1inch开发者门户申请的API Key(必填),请求时以Authorization: Bearer <key>发送。

表中长说明的其余部分:

  • 节点地址:查询订单状态需要节点能查到已上链交易的回执:publicnode的Base、BNB Chain、Arbitrum公共节点查不到回执(要求归档权限),不要单独使用。RPC节点不带认证。

交易对与合约代码

交易对示例:ETH_USDC、WETH_USDC、POL_USDT0

交易对写作ETH_USDC,原生币(ETH、BNB、POL)与包装币(WETH、WBNB、WPOL)是两个不同的资产。Polygon的原生币为POL;Unichain、Polygon上的USDT写作USDT0。

代币表沿用该链Uniswap交易所对象的代币表,表外的代币用exchange.IO("token", name, address)登记后即可写在交易对里;exchange.GetMarkets()列出代币表中在该链Uniswap上有池子的交易对。

专属IO指令
指令参数说明返回值
transferto, amount[, token]从配置的钱包转出原生币或ERC20代币(token为代币名或合约地址,不传为原生币);amount可传all转出全部(原生币扣除手续费)。只等交易广播,不等上链。见子页exchange.IO("transfer", ...)。{txHash, from, to, token, tokenAddress, amount, raw}
receipttxHash[, waitMs]查询本链任意交易的回执(不限本交易所对象发出的),可以等待上链(最多10分钟)。查询订单时传订单ID中逗号后面的交易哈希。见子页exchange.IO("receipt", ...)。已上链返回{txHash, status, blockNumber, gasUsed, fee}(status为success或reverted),未上链返回{txHash, pending: true, known}。
routesymbol, side, qty只询价不下单。聚合器只有一条候选路径(形如1inch:ETH-USDC);buy按买到qty个base询价(由多次精确输入询价近似),sell按卖出qty个base询价。见子页exchange.IO("route", ...)。{symbol, side, qty, best, quote, price, candidates}
simulatesymbol, side, qty[, price[, stateOverride]]按下单逻辑(询价、价格保护、向1inch生成交易)构造兑换交易,只用eth_call模拟执行,不签名、不广播、不花费gas;这时的路径描述中列出经过的流动性来源。见子页exchange.IO("simulate", ...)。{route, exactIn, amountIn, amountOut, quoted, executed, value, calls},补过授权时另有allowanceOverride。
token[name, address]登记代币,登记后的代币可以直接写在交易对里;不传参数时列出代币表。见子页exchange.IO("token", ...)。登记时返回{symbol, address, decimals},列表时返回{symbol, address, decimals, native}数组。
wrapamount原生币包装成包装币(例如ETH→WETH),1:1、无滑点、只花gas;不接受all(要留gas)。见子页exchange.IO("wrap", ...)。{txHash, action, from, to, amount, raw}
unwrapamount包装币解包成原生币(例如WETH→ETH),amount可传all。见子页exchange.IO("unwrap", ...)。{txHash, action, from, to, amount, raw}
approve["exact" | "max"]代币授权模式(代币直接授权给1inch路由合约,不经过Permit2):exact(默认)每次只授权本次兑换需要的数量,max授权无限额度。不传参数时查询。见子页exchange.IO("approve", ...)。当前模式。
slippage[ratio]市价单的滑点保护比例,范围[0, 0.5),默认0.005(0.5%)。不传参数时查询。见子页exchange.IO("slippage", ...)。当前滑点比例。
deadline[seconds]交易有效期(秒),范围10到86400,默认120。不传参数时查询。1inch生成的交易不带有效期,设置对OneInch交易所对象的兑换不起作用。见子页exchange.IO("deadline", ...)。当前截止时间(秒)。
cancelWait[seconds]撤单时等待结果的最长时间(秒),范围0到600,默认30;0表示发出撤单交易后立即返回。不传参数时查询。见子页exchange.IO("cancelWait", ...)。当前等待时间(秒)。
gasMultiplier[x]gas上限倍数,范围1到5,默认1.2:交易的gasLimit为节点估算的gas乘以该倍数。gasLimit只是上限,实际按用量扣费。不传参数时查询。见子页exchange.IO("gasMultiplier", ...)。当前倍数。
base[url]不传参数时返回当前节点地址;传入地址时切换节点。多个节点写成逗号分隔的字符串(传数组时只使用第一个地址)。换节点后第一次请求会核对节点所在的链,与配置的链不一致时报错。切换前的地址。
sendBaseurl设置只用来广播交易的节点(私有交易通道)。与Web3不同:不返回设置前的地址,不传参数时不查询,传空字符串不会清除设置。true
address—配置的私钥对应的钱包地址(0x开头的小写地址)。—
contracts—本链上的部署信息,字段与Uniswap交易所对象相同:dex为1inch,router为1inch路由合约;quoterV2、v3Factory、v4等是该链Uniswap的部署(用来列出市场、估算美元价),aerodrome为null;tokenList给出内置代币表的生成时间与本链代币数量。—
bridge.chains—跨链桥(LI.FI)支持的链:EVM链与Solana,缓存1小时。见子页exchange.IO("bridge.*", ...)。{id, key, name, chainType, nativeToken}数组,chainType为EVM或SVM。
bridge.tokens[chain]LI.FI认识的某条链上的代币(缺省为本链),缓存1小时。见子页exchange.IO("bridge.*", ...)。{symbol, address, decimals, name, priceUSD}数组。
bridge.quoteparams跨链报价(只读),源链为本交易所对象的链。见子页exchange.IO("bridge.*", ...)。{tool, toolName, fromChain, toChain, toChainName, fromToken, toToken, fromAmount, toAmount, toAmountMin, fromAmountRaw, toAmountRaw, toAmountMinRaw, fromAmountUSD, toAmountUSD, slippage, toAddress, feeCosts, gasCosts, executionDuration, approvalAddress, steps, transactionId, request}:数量为代币单位(*Raw为最小单位原值);toAmountMin为扣除滑点后保证到手的数量;feeCosts为[{name, amount, token, amountUSD, percentage, included}](included为false的费用另付);gasCosts为源链gas估算;executionDuration为预计耗时(秒);approvalAddress为需要授权的合约(原生币、Solana为null);steps为各步骤(cross为跨链,swap为兑换);request为参数原样回显。
bridge.simulateparams|quote[, stateOverride]重新报价,用eth_call执行LI.FI给出的交易,不签名、不广播、不花gas。见子页exchange.IO("bridge.*", ...)。bridge.quote的结果,另有simulated(true)、to、value、walletBalance,补过授权时有allowanceOverride。
bridge.sendparams|quote跨链转出:重新报价 → 检查余额 → 代币对LI.FI的approvalAddress授权不够时先授权(按exchange.IO("approve")的exact/max,USDT这类先清零,等授权上链;授权过就再报价一次)→ eth_call模拟 → 签名广播;gasLimit取eth_estimateGas估算×gasMultiplier与LI.FI建议的gasLimit中较大的一个(桥合约还会调用别的合约,估算可能偏少),实际只按用量扣费。见子页exchange.IO("bridge.*", ...)。{txHash, tool, fromChain, toChain, toChainName, fromToken, toToken, fromAmount, toAmount, toAmountMin, toAddress, value, transactionId},txHash为源链交易哈希,可用receipt查回执。
bridge.statustxHash[, options]跨链进度(LI.FI /status),参数为bridge.send返回的源链交易哈希;options可给{toChain, bridge}加快查找。见子页exchange.IO("bridge.*", ...)。{status, substatus, substatusMessage, tool, sending, receiving, fromAddress, toAddress, explorer, bridgeExplorer}:status为NOT_FOUND、INVALID、PENDING、DONE、FAILED;DONE时substatus为COMPLETED(按报价到账)、PARTIAL(收到的是别的代币)或REFUNDED(已退回);sending、receiving为{txHash, txLink, chainId, amount, amountRaw, token, timestamp},receiving.amount与receiving.token为实际到账的数量与代币。
bridge.apiKey[key]设置LI.FI的API Key(请求头x-lifi-api-key,只对本交易所对象生效,不回显),传""清除;不传参数只查询。没有Key时按出口IP限频,见下文。见子页exchange.IO("bridge.*", ...)。是否已设置Key(布尔值)。

通用指令currency见exchange.IO。

不支持通用指令api(调用时报错并返回空值)。

函数支持差异

不支持(调用时报错并返回空值):exchange.GetTickers、exchange.GetHistoryOrders、exchange.ModifyOrder、exchange.CreateConditionOrder、exchange.ModifyConditionOrder、exchange.CancelConditionOrder、exchange.GetConditionOrder、exchange.GetConditionOrders、exchange.GetHistoryConditionOrders、exchange.GetTrades。

以回退方式支持:

  • exchange.GetRecords:原生周期为1分钟、5分钟、15分钟、1小时、4小时、12小时、1天(GeckoTerminal的周期);其它分钟级以上的周期由托管者合成,秒级周期不可用(没有成交记录接口可供合成)。

注意事项
函数1inch交易所的行为
exchange.GetTicker()买一、卖一为约1000美元规模的1inch报价;没有24小时统计。两个方向分别询价,最优来源可能不同(如Base上不同的做市商报价),两边各自可成交却偶尔交叉(买一高于卖一),这时两边都给中间价,Info.crossed写明交叉幅度
exchange.GetDepth()由1inch在逐档递增规模上的报价推算(每档买卖各询价一次,询价之间排队、限流时退避重试,免费档每秒1次,10档约25秒);中途询价失败时返回已经拿到的档位(不补档),Info.partial说明原因,一档都没拿到才报错;买卖两边的最优来源不同而交叉时,交叉的价格按中间价给出、数量不变,Info.crossed写明中间价与交叉幅度
exchange.GetRecords()K线来自GeckoTerminal的池子级数据:聚合器没有自己的池子,取GeckoTerminal上该交易对(不限DEX)美元流动性最深的池子(在两个代币各自靠前的20个池子里找两边正好是这对币的,选中的池子缓存1小时)。价格为该池子的逐笔成交价(含池子手续费,与exchange.GetTicker()的中间价可能相差约一个池子费率),单位为计价币/基础币,Volume为基础币数量;没有成交的周期按上一根收盘价补平、成交量为0,最后一根可能尚未收盘。GeckoTerminal的数据有几十秒到1分钟的延迟,公开接口约每分钟10次:同一周期的K线缓存1分钟,请求在托管者内排队,被限频时等待重试,仍不行时报错。GeckoTerminal上找不到该交易对的池子时报错
exchange.GetAssets()原生币和代币表中各代币的钱包余额
exchange.CreateOrder()立即在链上兑换:限价为最差成交价,市价按滑点保护;市价买入时数量为要花费的计价币。1inch只支持精确输入:限价买入按“最多花费数量×价格、至少买到数量”执行,实际买到的数量可能略多于下单数量。下单附加参数slippage覆盖本单滑点;route对聚合器不适用,传入会报错route is not applicable to the 1inch aggregator
exchange.GetOrder()订单ID形如ETH_USDC,0x…(交易对、逗号、交易哈希),状态来自交易回执;原交易的nonce已被撤单交易(或其它交易)占用时显示为已撤销。1inch路由没有统一的成交事件:代币按交易回执中钱包的转入转出计算;得到原生币时按交易所在区块与上一区块的余额差加手续费计算(同一区块内钱包有其它交易时会不准)
exchange.GetOrders()只列出本交易所对象在本次运行中发出、尚未上链的兑换交易
exchange.CancelOrder()发送同nonce的替换交易(向自己转0金额),并等待结果(默认最多30秒,见exchange.IO("cancelWait", ...)):撤单交易先上链返回true;原订单已经上链或先于撤单上链时返回false(撤单没成功,但不是调用错误),原因见exchange.GetLastError();等待超时返回true,表示撤单已提交,最终状态以exchange.GetOrder()为准

1inch免费档每秒1次请求,连接器自动排队,遇到限频(HTTP 429)会稍等重试。

可以直接运行的完整策略(DEX与CEX搬砖、定投)见DEX策略示例。

跨链桥(bridge)

exchange.IO("bridge.*", ...)经LI.FI聚合的跨链桥(Across、Stargate、CCTP、deBridge、Mayan、Relay、NEAR Intents等)把代币从本交易所对象的链转到另一条链,支持EVM链之间以及EVM与Solana之间(源链为本交易所对象的链)。报价与交易由LI.FI给出,由托管者授权、eth_call模拟后签名广播。请求带集成方标识integrator=fmz,不加收任何费用;报价中的LIFI Fixed Fee等是LI.FI与桥自己的费用,已计入toAmount。

典型流程:bridge.quote看报价 → bridge.simulate模拟 → bridge.send发出 → 每10~30秒bridge.status直到DONE或FAILED。

  • 跨链是异步的:bridge.send返回时只是源链交易已广播,到账要几秒到几十分钟(见报价的executionDuration),必须轮询bridge.status确认;PARTIAL表示目标链收到的是别的代币,REFUNDED表示已退回源链。
  • 跨虚拟机(EVM↔Solana)必须传toAddress,地址格式按目标链检查;地址写错的资金无法找回。
  • 风险:桥合约与跨链消息的安全风险由各桥承担;报价随时变化,bridge.send发出前会重新报价;目标链需要有gas才能继续使用到账的代币。先用小额测试。
  • 限频:没有API Key时LI.FI按出口IP限频,/quote两小时75次(bridge.quote、bridge.simulate、bridge.send各用一次,授权后再报价时多一次),其它接口每分钟100次;同一托管者上的策略共用额度。用exchange.IO("bridge.apiKey", key)设置Key后每分钟100次。被限频时报错rate limited (HTTP 429 …)。