66 lines
2.2 KiB
JavaScript
66 lines
2.2 KiB
JavaScript
require('../env')
|
|
const { isAddress } = require('web3').utils
|
|
const { privateKeyToAddress, setIntervalAndRun } = require('../src/utils/utils')
|
|
const { EXIT_CODES } = require('../src/utils/constants')
|
|
const { web3Home } = require('../src/services/web3')
|
|
const { sendTx } = require('../src/tx/sendTx')
|
|
|
|
const privateKey = process.env.INTEREST_FETCHER_PRIVATE_KEY
|
|
const interval = process.env.INTERVAL ? parseInt(process.env.INTERVAL, 10) : 3600 * 1000
|
|
const contractAddress = process.env.INTEREST_FETCH_CONTRACT_ADDRESS
|
|
|
|
if (!privateKey) {
|
|
console.error('Environment variable INTEREST_FETCHER_PRIVATE_KEY is not set')
|
|
process.exit(EXIT_CODES.GENERAL_ERROR)
|
|
}
|
|
|
|
if (interval < 300 * 1000) {
|
|
console.error('Interval is to small, should be at least 5 minutes')
|
|
process.exit(EXIT_CODES.GENERAL_ERROR)
|
|
}
|
|
|
|
if (!isAddress(contractAddress)) {
|
|
console.error('Invalid contract address provided', contractAddress)
|
|
process.exit(EXIT_CODES.GENERAL_ERROR)
|
|
}
|
|
|
|
const gasPrice = process.env.COMMON_HOME_GAS_PRICE_FALLBACK || '1000000000'
|
|
|
|
async function main() {
|
|
// assuming that we are using this contract - https://github.com/omni/interest-fetcher-contract
|
|
const contract = new web3Home.eth.Contract([{ name: 'fetchInterest', type: 'function', inputs: [] }], contractAddress)
|
|
const chainId = await web3Home.eth.getChainId()
|
|
const data = contract.methods.fetchInterest().encodeABI()
|
|
const senderAddress = privateKeyToAddress(privateKey)
|
|
console.log(
|
|
`Initialized, chainId=${chainId}, data=${data}, contract=${contractAddress}, interval=${interval / 1000}s`
|
|
)
|
|
|
|
await setIntervalAndRun(async () => {
|
|
let gasLimit
|
|
try {
|
|
gasLimit = await contract.methods.fetchInterest().estimateGas()
|
|
} catch (e) {
|
|
console.log('Gas limit estimation failed, will retry later', new Date())
|
|
return
|
|
}
|
|
|
|
const nonce = await web3Home.eth.getTransactionCount(senderAddress)
|
|
|
|
const txHash = await sendTx({
|
|
privateKey,
|
|
to: contractAddress,
|
|
data,
|
|
nonce,
|
|
gasPrice,
|
|
gasLimit: Math.round(gasLimit * 1.5),
|
|
amount: '0',
|
|
chainId,
|
|
web3: web3Home
|
|
})
|
|
console.log('Sent transaction with fetch interest', txHash, new Date())
|
|
}, interval)
|
|
}
|
|
|
|
main()
|