tornado-relayer/src/priceWatcher.js

48 lines
1.6 KiB
JavaScript
Raw Normal View History

const { offchainOracleAddress } = require('./config')
2022-04-08 12:29:37 +02:00
const {
getArgsForOracle,
setSafeInterval,
toChecksumAddress,
toBN,
RelayerError,
logRelayerError,
} = require('./utils')
const { redis } = require('./modules/redis')
2022-04-22 15:07:04 +02:00
const web3 = require('./modules/web3')('oracle')
2020-10-05 16:22:52 +02:00
2021-02-26 10:52:15 +01:00
const offchainOracleABI = require('../abis/OffchainOracle.abi.json')
2021-03-02 05:38:16 +01:00
const offchainOracle = new web3.eth.Contract(offchainOracleABI, offchainOracleAddress)
2020-10-05 16:22:52 +02:00
const { tokenAddresses, oneUintAmount, currencyLookup } = getArgsForOracle()
async function main() {
2021-03-02 05:38:16 +01:00
try {
const ethPrices = {}
for (let i = 0; i < tokenAddresses.length; i++) {
try {
2021-06-19 22:20:19 +02:00
const isWrap =
toChecksumAddress(tokenAddresses[i]) ===
toChecksumAddress('0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643')
2021-06-19 22:10:31 +02:00
2021-06-19 22:20:19 +02:00
const price = await offchainOracle.methods.getRateToEth(tokenAddresses[i], isWrap).call()
2021-03-02 05:38:16 +01:00
const numerator = toBN(oneUintAmount[i])
const denominator = toBN(10).pow(toBN(18)) // eth decimals
const priceFormatted = toBN(price).mul(numerator).div(denominator)
ethPrices[currencyLookup[tokenAddresses[i]]] = priceFormatted.toString()
} catch (e) {
console.error('cant get price of ', tokenAddresses[i])
}
2021-02-26 10:52:15 +01:00
}
2022-04-07 07:02:28 +02:00
if (!Object.values(ethPrices).length) {
throw new RelayerError('Can`t update prices', 1)
}
2021-03-02 05:38:16 +01:00
await redis.hmset('prices', ethPrices)
console.log('Wrote following prices to redis', ethPrices)
} catch (e) {
2022-04-20 07:41:59 +02:00
await logRelayerError(redis, e)
2021-03-02 05:38:16 +01:00
console.error('priceWatcher error', e)
2021-02-26 10:52:15 +01:00
}
2020-10-05 16:22:52 +02:00
}
setSafeInterval(main, 30 * 1000)