yarn add @depay/web3-exchanges
or
npm install --save @depay/web3-exchanges
import { all, findByName, route } from '@depay/web3-exchanges'
all
// [
// { name: 'uniswap_v2', label: 'Uniswap v2', logo: '...' }
// { name: 'pancakeswap_v2', label: 'PancakeSwap v2', logo: '...' }
// { name: 'cryptoswap', label: 'CryptoSwap', logo: '...' }
// ...
// ]
let exchange = findByName('uniswap_v2')
// { name: 'uniswap_v2', label: 'Uniswap v2', 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)
This library supports the following blockchains:
This library supports the following decentralized exchanges:
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)
}
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
,amountOutMin
will be calculated automatically and can vary - Only
amountOut
,amountInMax
will be calculated automatically and can vary - Only
amountInMax
,amountOut
will be calculated automatically and can vary - Only
amountOutMin
,amountIn
will be calculated automatically and can vary amountIn
andamountOutMax
(routing will stick to both)amountOut
andamountInMin
(routing will stick to both)
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.
import { all } from '@depay/web3-exchanges'
all
// [
// { name: 'uniswap_v3', label: 'Uniswap v3', logo: '...' }
// { name: 'pancakeswap_v2', label: 'PancakeSwap v2', logo: '...' }
// ...
// ]
import { findByName } from '@depay/web3-exchanges'
findByName('uniswap_v2')
// { name: 'uniswap_v2', label: 'Uniswap v2', logo: '...' }
findByName('pancakeswap_v2')
// { name: 'pancakeswap_v2', label: 'PancakeSwap v2', logo: '...' }
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)
yarn install
yarn dev
npm publish