快速启动
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 智能链 :
多边形 :
索拉纳:
乐观:
基础 :
坐标 :
方汤:
雪崩:
肠道:
平台专用包装
如果你想只使用和包装特定平台,请使用特定平台的软件包:
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