Skip to content

Commit

Permalink
Add oracle helper script for fetching interest amounts via async calls (
Browse files Browse the repository at this point in the history
  • Loading branch information
k1rill-fedoseev authored Oct 21, 2021
1 parent a05ff51 commit 1e3aa53
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 0 deletions.
15 changes: 15 additions & 0 deletions oracle/docker-compose-helpers.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
version: '2.4'
services:
interestFetcher:
cpus: 0.1
mem_limit: 500m
image: poanetwork/tokenbridge-oracle:latest
env_file: ./.env
environment:
NODE_ENV: production
INTEREST_FETCHER_PRIVATE_KEY: ${INTEREST_FETCHER_PRIVATE_KEY}
INTEREST_FETCH_CONTRACT_ADDRESS: '0xCd152c7Bd4189Ddee97EaBb783FC5cD93CF2D230'
INTERVAL: 300000
restart: unless-stopped
entrypoint: yarn helper:interestFether
1 change: 1 addition & 0 deletions oracle/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"confirm:collected-signatures": "./scripts/start-worker.sh confirmRelay collected-signatures-watcher",
"confirm:information-request": "./scripts/start-worker.sh confirmRelay information-request-watcher",
"manager:shutdown": "./scripts/start-worker.sh shutdownManager shutdown-manager",
"helper:interestFether": "node ./scripts/interestFetcher.js",
"dev": "concurrently -n 'watcher:signature-request,watcher:collected-signatures,watcher:affirmation-request,watcher:transfer, sender:home,sender:foreign' -c 'red,green,yellow,blue,magenta,cyan' 'yarn watcher:signature-request' 'yarn watcher:collected-signatures' 'yarn watcher:affirmation-request' 'yarn watcher:transfer' 'yarn sender:home' 'yarn sender:foreign'",
"test": "NODE_ENV=test mocha",
"test:watch": "NODE_ENV=test mocha --watch --reporter=min",
Expand Down
65 changes: 65 additions & 0 deletions oracle/scripts/interestFetcher.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
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()

0 comments on commit 1e3aa53

Please sign in to comment.