#javascript #solidity
Вопрос:
Я работаю над сценарием мониторинга цен на блокчейне. Логика очень проста, но я не могу понять, почему для uni и sushi swap скрипт возвращает сумму, а для kyber-нет. Я попытался поменяться местами на платформе, и все кажется в порядке.
Это код, для тестирования просто вставьте действительного поставщика WSS
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)