'Why getExpectedRate() return 0?
I'm working on a price monitoring script on the Ethereum blockchain. The logic is very simple but I can't figure out why for uni and sushi swap the script return an amount but for Kyber it does not. I've tried to swap on the platform and everything seems ok.
This is the code, to test just insert a valid WSS provider
const ethers = require('ethers')
const WSS_RPC = 'wss://mainnet.infura.io/ws/v3/00f257d59c994582a65abefecb18c0bf'
const WSS_ETH_PROVIDER = new ethers.providers.WebSocketProvider(WSS_RPC)
const TOKEN_ADDRESS = {
WETH: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
DAI: '0x6b175474e89094c44da98b954eedeac495271d0f',
USDT: '0xdac17f958d2ee523a2206206994597c13d831ec7'
}
const CONTRACT_ADDRESS = {
uniSwapRouter : "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",
sushiSwapRouter : "0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F",
kyberProxyNetwork : "0x9AAb3f75489902f3a48495025729a0AF77d4b11e"
}
// ABI of Contracts
const ABI = {
uniSwapRouter : [ 'function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts)'],
sushiSwapRouter : [ 'function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts)'],
kyberProxyNetwork : ['function getExpectedRate(address src, address dest, uint256 srcQty) external view returns (uint256 expectedRate, uint256 worstRate)']
}
// CONTRACT INSTANCE
const CONTRACT = {
uniSwapRouter : new ethers.Contract(CONTRACT_ADDRESS.uniSwapRouter, ABI.uniSwapRouter, WSS_ETH_PROVIDER),
sushiSwapRouter : new ethers.Contract(CONTRACT_ADDRESS.sushiSwapRouter, ABI.sushiSwapRouter, WSS_ETH_PROVIDER),
kyberProxyNetwork: new ethers.Contract(CONTRACT_ADDRESS.kyberProxyNetwork, ABI.kyberProxyNetwork, WSS_ETH_PROVIDER)
}
// PRICE MONITORING LOGIC
async function priceMonitoring(){
const uniSwapPrice = await CONTRACT.uniSwapRouter.getAmountsOut(1000, [TOKEN_ADDRESS.WETH, DAI])
const sushiSwapPrice = await CONTRACT.uniSwapRouter.getAmountsOut(1000, [TOKEN_ADDRESS.WETH, TOKEN_ADDRESS.DAI])
const kyberNetworkPrice = await CONTRACT.kyberProxyNetwork.getExpectedRate(TOKEN_ADDRESS.DAI, TOKEN_ADDRESS.WETH, 1000)
var priceComparison = `SUSHI: ${sushiSwapPrice[1].toString()} UNI: ${uniSwapPrice[1].toString()} KYBER: ${ethers.utils.formatEther(kyberNetworkPrice[1])}`
console.log(priceComparison)
}
setInterval(async () => {await priceMonitoring()}, 3000)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
