@depay/web3-exchanges

中文文档
15.7.3发布于 2025/09/21MITESM + CJS零依赖近 30 天下载 3608

JavaScript库简化了分散的Web3交换路由,用于多个块链和交换.

中文使用文档
文档目录16 节
  1. 快速启动
  2. 支助
  3. 平台专用包装
  4. EVM(Ethereum虚拟机)平台特定包装
  5. SVM(索拉纳虚拟机)平台特定包装
  6. 数据结构
  7. 交换
  8. 交换
  9. 路线
  10. 页
  11. 自动剪贴板
  12. 职能
  13. 直接访问交换
  14. 特定区块链的访问交换范围
  15. 路由: 进行交换的路由和返回路由
  16. 发展

快速启动

yarn add @depay/web3-exchanges

或者说

npm install --save @depay/web3-exchanges
import Exchanges from '@depay/web3-exchanges'

Exchanges.uniswap_v2
Exchanges.orca

// scoped

Exchanges.ethereum.uniswap_v2 // Ethereum scoped uniswap_v2
Exchanges.solana.orca

let routes

routes = await Exchanges.route({
  blockchain: 'ethereum',
  tokenIn: '0xa0bEd124a09ac2Bd941b10349d8d224fe3c955eb',
  tokenOut: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
  amountIn: 1
})

routes = await Exchanges.route({
  blockchain: 'solana',
  tokenIn: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
  tokenOut: '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R',
  amountIn: 1
})

import { getWallets } from '@depay/web3-wallets'

const wallet = getWallets()[0]
const account = await wallet.account()

// check if prep is required to facilitate swap/exchange
const preparation = await route.getPrep({ account })

let permit2
if(prep?.transaction) {
  await wallet.sendTransaction(prep.transaction)
} else if (prep?.signature) {
  let signature = await wallet.sign(prep.signature)
  permit2 = {...prep.signature.message, signature}
}

// use connected wallet to sign and send the swap transaction
const transaction = await route.getTransaction({ account, permit2 })
wallet.sendTransaction(transaction)

支助

此库支持以下块链 :

该图书馆支持以下分散交换:

以利亚:

BNB 智能链 :

多边形 :

索拉纳:

  • 奥尔卡
  • Ium,只有CP(固定产品)和CL(集中流动性)池

乐观:

基础 :

坐标 :

方汤:

雪崩:

肠道:

平台专用包装

如果你想只使用和包装特定平台,请使用特定平台的软件包:

EVM(Ethereum虚拟机)平台特定包装

import Exchanges from '@depay/web3-exchanges-evm'

SVM(索拉纳虚拟机)平台特定包装

import Exchanges from '@depay/web3-exchanges-svm'

数据结构

交换

分散交换数据按以下结构提供:

{
  name: String (e.g. uniswap_v2)
  label: String (e.g. Uniswap v2)
  logo: String (base64 encoded PNG)
  protocol: String (uniswap_v2, uniswap_v3 etc.)

  fee: Array (e.g. [100, 500, 3000, 10000]; available fee teirs on the exchange)
  slippage: Boolean (indicates if exchange has slippage)

  blockchains: String (e.g. ['ethereum'])
  [blockchain]: {
    router: Object (contains 'address' and 'api' to interact with the exchange router)
    factory: Object (contains 'address' and 'api' to interact with the exchange factory)
    pair: Object (contains 'api' to interact with an exchange pair)
    quoter: Object (contains 'address' and 'api' to interact with the exchange quoter)
  }
}

交换

交换配置输入到 route 函数 :

{
  blockchain: String (e.g. 'ethereum')
  tokenIn: String (e.g. '0xa0bEd124a09ac2Bd941b10349d8d224fe3c955eb')
  tokenOut: String (e.g. '0xdAC17F958D2ee523a2206206994597C13D831ec7')
  amountIn: Human Readable Number (e.g. 1.2 and converted internally to BigNumber) or BigNumber if passed as string
  amountInMax: Human Readable Number (e.g. 1.2 and converted internally to BigNumber) or BigNumber if passed as string
  amountOut: Human Readable Number (e.g. 1.2 and converted internally to BigNumber) or BigNumber if passed as string
  amountOutMin: Human Readable Number (e.g. 1.2 and converted internally to BigNumber) or BigNumber if passed as string
}
  • tokenIn: 输入交换的符号( 钱包外出)
  • amountIn: 确切的令牌数量 In 输入到交换中( 钱包外)
  • amountInMax输入到交换( 钱包外出 )
  • tokenOut: 换出时预期发出的符号( 输入钱包)
  • amountOut: 交换中预计会发出的令牌的确切数量( 输入钱包)
  • amountOutMin: 预想从互换中取出( 输入钱包) 的分量

所提供的数额可分为以下几种:

  • 过 amountOutMin交换将至少返回 amountOutMin 输入钱包. amountIn 将自动计算,并可以变化.
  • 过 amountOut交换最多 amountInMax (根据所提供的准确数字计算) amountOut) (中文(简体) ). amountInMax 将自动计算,并可以变化.
  • 过 amountInMax交换最多 amountInMax 从钱包取出. amountOut 将自动计算,并可以变化.
  • 过 amountIn交换将至少返回 amountOutMin 输入钱包(根据所提供的准确数字计算) amountIn) (中文(简体) ). amountOutMin 将自动计算,并可以变化.

路线

线路通过呼叫返回 route 打开 Exchanges 或单笔 exchange。 。 。 .

单人 Route 结构如下:

{
  blockchain: String (e.g. 'ethereum')
  tokenIn: String (e.g. '0xa0bEd124a09ac2Bd941b10349d8d224fe3c955eb')
  decimalsIn: Integer (e.g. 18)
  tokenOut: String (e.g. '0xdAC17F958D2ee523a2206206994597C13D831ec7')
  decimalsOut: Integer (e.g. 18)
  path: Array (e.g. ['0xa0bEd124a09ac2Bd941b10349d8d224fe3c955eb', '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0xdAC17F958D2ee523a2206206994597C13D831ec7'])
  pools: Object ([{ pool }])
  amounts: [BigNumber] (e.g. ['1000000000000000000', '2300000000000000000', '9900000000000000000'])
  amountIn: BigNumber (e.g. '1000000000000000000')
  amountOutMin: BigNumber (e.g. '32000000000000000000')
  amountOut: BigNumber (e.g. '32000000000000000000')
  amountInMax: BigNumber (e.g. '1000000000000000000')
  exchange: Exchange (see [Exchange data structure](#exchange))
  getPrep: async function (returns transaction object for approvals or signature request for permit2)
  getTransaction: async function (returns transaction object –> see @depay/web3-wallets for details)
}

见 @depay/web3-钱包 关于交易格式的细节.

页

该库对以下组合的金额采用滑行策略:

  • 若为 amountOutMin 提供,对 amountIn。 。 。 .
  • 若为 amountOut 提供,对 amountInMax。 。 。 .
  • 若为 amountInMax 提供,对 amountOut。 。 。 .
  • 若为 amountIn 提供,对 amountOutMax。 。 。 .

自动剪贴板

自动拖放 0.5% 默认滑行 .

对于允许接收先前区块引号的区块链(EVM),自动拖放额外检查:

  • 极端方向

  • 极端基本波动

并应用高于默认的滑行0.5%如果需要的话.

极端方向价格变化

如果最后三个街区的价格有明确的方向变化, 目标价格将根据最后三个区块的速度预测.

示例 极端方向价格变化

目前价格:1'500美元

最后3块: 1'500美元, 1'470美元, 1'440美元

速度:每区30美元

预测:1'530美元

页 2%

滑动 2% 将应用,因为它比默认的滑行要高.

对于向下预测,不需要延误,因为交易不会失败.

极端基本波动

如果最后3个街区有极端的地基波动, 无方向, 目标价格将是过去3个街区的最高价格,加上过去3个街区的最低价格变化.

极端基态波动

目前价格:1'500美元

最后三个街区: 1'500美元, 1'490美元, 1'520美元

最小的变化:10美元

最高价格:1'520美元

预测:1'530美元(1'520美元+10美元)

页 2%

滑动 2% 将应用,因为它比默认的滑行要高.

职能

直接访问交换

import Exchanges from '@depay/web3-exchanges'

Exchanges.uniswap_v2

特定区块链的访问交换范围

import Exchanges from '@depay/web3-exchanges'

Exchanges.arbitrum.uniswap_v3

路由: 进行交换的路由和返回路由

import Exchanges from '@depay/web3-exchanges'

let routes = Exchanges.route({
  blockchain: 'ethereum'
  tokenIn: '0xa0bEd124a09ac2Bd941b10349d8d224fe3c955eb',
  tokenOut: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
  amountOutMin: 2
})

route 也可以要求交换:

import Exchanges from '@depay/web3-exchanges'

let route = await Exchanges.ethereum.uniswap_v2.route({
  tokenIn: '0xa0bEd124a09ac2Bd941b10349d8d224fe3c955eb',
  tokenOut: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
  amountIn: 1
})

发展

yarn install
yarn dev

版本与发布记录

@depay/web3-exchanges 共发布 123 个版本,首次发布于 2021/11/26;过去 12 个月发布了 0 个版本。

版本发布日期距今
15.7.3latest2025/09/211.1 年前
15.7.22025/08/201.2 年前
15.7.12025/04/291.5 年前
15.7.02025/04/121.6 年前
15.6.32025/04/111.6 年前
15.6.22025/04/101.6 年前

关于 @depay/web3-exchanges 的常见问题

@depay/web3-exchanges 是什么?

JavaScript库简化了分散的Web3交换路由,用于多个块链和交换.

如何安装 @depay/web3-exchanges?

在项目目录运行 npm install @depay/web3-exchanges,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@depay/solana-web3.js(^1.98.0)、@depay/web3-blockchains(^9.7.9)、@depay/web3-client(^11.0.2)、@depay/web3-tokens(^11.0.0)、decimal.js(^10.4.3)、ethers(^5.7.1)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@depay/web3-exchanges 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/depay__web3-exchanges 是否存在。

@depay/web3-exchanges 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@depay/web3-exchanges 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=14。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@depay/web3-exchanges 可以商用吗?

@depay/web3-exchanges 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@depay/web3-exchanges 的下载量有多少?

根据 npm 官方下载统计,@depay/web3-exchanges 在 2026/10/12 – 2026/11/10 这 30 天内被下载 3,608 次,日均约 120 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@depay/web3-exchanges 还在维护吗?

最新版本 15.7.3 发布于 2025/09/21(1.1 年前);至今共发布 123 个版本,其中过去 12 个月发布了 0 个;首次发布于 2021/11/26。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。