Package Exports
- @depay/web3-exchanges
- @depay/web3-exchanges/dist/cjs/index.js
- @depay/web3-exchanges/dist/es/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@depay/web3-exchanges) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Quickstart
yarn add @depay/web3-exchangesor
npm install --save @depay/web3-exchangesimport { all, findByName, route } from '@depay/web3-exchanges'
all
// [
// { name: 'uniswap_v3', label: 'Uniswap v3', logo: '...' }
// { name: 'pancakeswap_v2', label: 'PancakeSwap v2', logo: '...' }
// ...
// ]
let exchange = findByName('uniswap_v3')
// { name: 'uniswap_v3', label: 'Uniswap v3', logo: '...' }
let routes = await route({
blockchain: 'ethereum',
tokenIn: '0xa0bEd124a09ac2Bd941b10349d8d224fe3c955eb',
tokenOut: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
amountIn: 1,
fromAddress: '0x5Af489c8786A018EC4814194dC8048be1007e390',
toAddress: '0x5Af489c8786A018EC4814194dC8048be1007e390'
}) // returns routes sorted by cost-effectiveness (best first)
// use connected wallet to sign and send the swap transaction
import { getWallet } from '@depay/web3-wallets'
let wallet = getWallet()
wallet.sendTransaction(route.transaction)
Support
This library supports the following blockchains:
This library supports the following decentralized exchanges:
Soon:
Data Structures
Exchange
Decentralized exchange data is provided in the following structure:
{
blockchain: String (e.g. ethereum)
name: String (e.g. uniswap_v2)
alternativeNames: Array (e.g. ['pancake'])
label: String (e.g. Uniswap v2)
logo: String (base64 encoded PNG),
contracts: Object (contains important contract addresses and apis to interact with the exchange)
}Swap
A Swap configuration is fed into the route function:
{
tokenIn: String (e.g. '0xa0bEd124a09ac2Bd941b10349d8d224fe3c955eb')
tokenOut: String (e.g. '0xdAC17F958D2ee523a2206206994597C13D831ec7')
amountIn: Human Readable Number (e.g. 1.2)
amountInMax: Human Readable Number (e.g. 1.2)
amountOut: Human Readable Number (e.g. 1.2)
amountOutMin: Human Readable Number (e.g. 1.2)
fromAddress: '0x5Af489c8786A018EC4814194dC8048be1007e390'
toAddress: '0x5Af489c8786A018EC4814194dC8048be1007e390'
}The following combinations of provided amounts are possible:
- Only
amountIn,amountOutMinwill be calculated automatically and can vary - Only
amountOut,amountInMaxwill be calculated automatically and can vary - Only
amountInMax,amountOutwill be calculated automatically and can vary - Only
amountOutMin,amountInwill be calculated automatically and can vary amountInandamountOutMax(routing will stick to both)amountOutandamountInMin(routing will stick to both)
Route
Routes are returned by calling route. A single Route has the following structure:
{
tokenIn: String (e.g. '0xa0bEd124a09ac2Bd941b10349d8d224fe3c955eb')
tokenOut: String (e.g. '0xdAC17F958D2ee523a2206206994597C13D831ec7')
path: Array (e.g. ['0xa0bEd124a09ac2Bd941b10349d8d224fe3c955eb', '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', '0xdAC17F958D2ee523a2206206994597C13D831ec7'])
amountIn: BigNumber (e.g. '1000000000000000000')
amountOutMin: BigNumber (e.g. '32000000000000000000')
amountOut: BigNumber (e.g. '32000000000000000000')
amountInMax: BigNumber (e.g. '1000000000000000000')
fromAddress: '0x5Af489c8786A018EC4814194dC8048be1007e390'
toAddress: '0x5Af489c8786A018EC4814194dC8048be1007e390'
transaction: Transaction (see @depay/web3-wallets for details)
exchange: Exchange (see [Exchange data structure](#exchange))
}See @depay/web3-wallets for details about the transaction format.
Functionalities
all: Stores all information for all decentralized exchanges
import { all } from '@depay/web3-exchanges'
all
// [
// { name: 'uniswap_v3', label: 'Uniswap v3', logo: '...' }
// { name: 'pancakeswap_v2', label: 'PancakeSwap v2', logo: '...' }
// ...
// ]
findByName: Get decentralized exchanged by name (name usually contains version, too)
import { findByName } from '@depay/web3-exchanges'
findByName('uniswap_v3')
// { name: 'uniswap_v3', label: 'Uniswap v3', logo: '...' }
findByName('pancakeswap_v2')
// { name: 'pancakeswap_v2', label: 'PancakeSwap v2', logo: '...' }route: Routes a Swap configuration and returns routes to perform the Swap
import { route } from '@depay/web3-exchanges'
let routes = route {
tokenIn: '0xa0bEd124a09ac2Bd941b10349d8d224fe3c955eb',
tokenOut: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
amountIn: 1,
amountOutMin: 2,
fromAddress: '0x5Af489c8786A018EC4814194dC8048be1007e390',
toAddress: '0x5Af489c8786A018EC4814194dC8048be1007e390'
} // returns routes sorted by cost-effectiveness (best first)
// use connected wallet to sign and send the swap transaction
import { getWallet } from '@depay/web3-wallets'
let wallet = getWallet()
wallet.sendTransaction(routes[0].transaction)route can also be called on concrete exchanges:
import { findByName } from '@depay/web3-exchanges'
let exchange = findByName('uniswap_v2')
let route = await exchange.route({
blockchain: 'ethereum',
tokenIn: '0xa0bEd124a09ac2Bd941b10349d8d224fe3c955eb',
tokenOut: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
amountIn: 1,
amountOutMin: 2,
fromAddress: '0x5Af489c8786A018EC4814194dC8048be1007e390',
toAddress: '0x5Af489c8786A018EC4814194dC8048be1007e390'
})
// use connected wallet to sign and send the swap transaction
import { getWallet } from '@depay/web3-wallets'
let wallet = getWallet()
wallet.sendTransaction(route.transaction)Domain Knowledge
Wrapped native tokens (like WETH)
In case you select to swap the wrapped native token to the native token or vise versa, this library will actually suggest to wrap/unwrap instead of going through an exchange.
Development
Get started
yarn install
yarn devRelease
npm publish