Merge the develop branch to the master branch, preparation to v3.3.0
This merge contains the following set of changes: * [Oracle, Improvement] Add oracle helper script for fetching interest amounts via async calls (#615) * [Monitor, Fix] Include cDAI balance in balanceDiff (#613) * [Monitor, Fix] Added logging prior the investedAmount call (#614) * [ALM, Fix] Fetch AMB signatures a bit earlier (#620)
This commit is contained in:
commit
b17fff2b56
@ -45,6 +45,7 @@ export const ManualExecutionButton = ({
|
|||||||
const { library, activate, account, active } = useWeb3React()
|
const { library, activate, account, active } = useWeb3React()
|
||||||
const [manualExecution, setManualExecution] = useState(false)
|
const [manualExecution, setManualExecution] = useState(false)
|
||||||
const [allowFailures, setAllowFailures] = useState(false)
|
const [allowFailures, setAllowFailures] = useState(false)
|
||||||
|
const notReady = !foreign.bridgeContract || !signatureCollected || !signatureCollected.length
|
||||||
|
|
||||||
useEffect(
|
useEffect(
|
||||||
() => {
|
() => {
|
||||||
@ -150,7 +151,7 @@ export const ManualExecutionButton = ({
|
|||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<div className="is-center">
|
<div className="is-center">
|
||||||
<ActionButton className="button outline" onClick={() => setManualExecution(true)}>
|
<ActionButton disabled={notReady} className="button outline" onClick={() => setManualExecution(true)}>
|
||||||
Execute
|
Execute
|
||||||
</ActionButton>
|
</ActionButton>
|
||||||
</div>
|
</div>
|
||||||
|
@ -86,6 +86,14 @@ export const getConfirmationsForTx = async (
|
|||||||
setPendingConfirmations(validatorPendingConfirmations.length > 0)
|
setPendingConfirmations(validatorPendingConfirmations.length > 0)
|
||||||
} else {
|
} else {
|
||||||
setPendingConfirmations(false)
|
setPendingConfirmations(false)
|
||||||
|
if (fromHome) {
|
||||||
|
// fetch collected signatures for possible manual processing
|
||||||
|
setSignatureCollected(
|
||||||
|
await Promise.all(
|
||||||
|
Array.from(Array(requiredSignatures).keys()).map(i => bridgeContract.methods.signature(hashMsg, i).call())
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const undefinedConfirmations = validatorConfirmations.filter(
|
const undefinedConfirmations = validatorConfirmations.filter(
|
||||||
@ -115,15 +123,6 @@ export const getConfirmationsForTx = async (
|
|||||||
status: VALIDATOR_CONFIRMATION_STATUS.NOT_REQUIRED
|
status: VALIDATOR_CONFIRMATION_STATUS.NOT_REQUIRED
|
||||||
}))
|
}))
|
||||||
updateConfirmations(notRequiredConfirmations)
|
updateConfirmations(notRequiredConfirmations)
|
||||||
|
|
||||||
if (fromHome) {
|
|
||||||
// fetch collected signatures for possible manual processing
|
|
||||||
setSignatureCollected(
|
|
||||||
await Promise.all(
|
|
||||||
Array.from(Array(requiredSignatures).keys()).map(i => bridgeContract.methods.signature(hashMsg, i).call())
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// get transactions from success signatures
|
// get transactions from success signatures
|
||||||
|
@ -51,6 +51,14 @@ async function main(bridgeMode, eventsInfo) {
|
|||||||
const foreignErc20Balance = await erc20Contract.methods
|
const foreignErc20Balance = await erc20Contract.methods
|
||||||
.balanceOf(COMMON_FOREIGN_BRIDGE_ADDRESS)
|
.balanceOf(COMMON_FOREIGN_BRIDGE_ADDRESS)
|
||||||
.call({}, foreignDelayedBlockNumber)
|
.call({}, foreignDelayedBlockNumber)
|
||||||
|
let foreignErc20BalanceBN = new BN(foreignErc20Balance).plus(lateForeignConfirmationsTotalValue)
|
||||||
|
try {
|
||||||
|
logger.debug('calling foreignBridge.methods.investedAmount')
|
||||||
|
const invested = await foreignBridge.methods.investedAmount(erc20Address).call({}, foreignDelayedBlockNumber)
|
||||||
|
foreignErc20BalanceBN = foreignErc20BalanceBN.plus(invested)
|
||||||
|
} catch (_) {
|
||||||
|
logger.debug('compounding related methods are not present in the foreign bridge')
|
||||||
|
}
|
||||||
|
|
||||||
const homeBridge = new web3Home.eth.Contract(HOME_ERC_TO_NATIVE_ABI, COMMON_HOME_BRIDGE_ADDRESS)
|
const homeBridge = new web3Home.eth.Contract(HOME_ERC_TO_NATIVE_ABI, COMMON_HOME_BRIDGE_ADDRESS)
|
||||||
logger.debug('calling homeBridge.methods.blockRewardContract')
|
logger.debug('calling homeBridge.methods.blockRewardContract')
|
||||||
@ -66,7 +74,6 @@ async function main(bridgeMode, eventsInfo) {
|
|||||||
const mintedCoinsBN = new BN(mintedCoins)
|
const mintedCoinsBN = new BN(mintedCoins)
|
||||||
const burntCoinsBN = new BN(burntCoins)
|
const burntCoinsBN = new BN(burntCoins)
|
||||||
const totalSupplyBN = mintedCoinsBN.minus(burntCoinsBN)
|
const totalSupplyBN = mintedCoinsBN.minus(burntCoinsBN)
|
||||||
const foreignErc20BalanceBN = new BN(foreignErc20Balance).plus(lateForeignConfirmationsTotalValue)
|
|
||||||
|
|
||||||
const diff = foreignErc20BalanceBN.minus(totalSupplyBN).toFixed()
|
const diff = foreignErc20BalanceBN.minus(totalSupplyBN).toFixed()
|
||||||
logger.debug('Done')
|
logger.debug('Done')
|
||||||
|
15
oracle/docker-compose-helpers.yml
Normal file
15
oracle/docker-compose-helpers.yml
Normal file
@ -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
|
@ -18,6 +18,7 @@
|
|||||||
"confirm:collected-signatures": "./scripts/start-worker.sh confirmRelay collected-signatures-watcher",
|
"confirm:collected-signatures": "./scripts/start-worker.sh confirmRelay collected-signatures-watcher",
|
||||||
"confirm:information-request": "./scripts/start-worker.sh confirmRelay information-request-watcher",
|
"confirm:information-request": "./scripts/start-worker.sh confirmRelay information-request-watcher",
|
||||||
"manager:shutdown": "./scripts/start-worker.sh shutdownManager shutdown-manager",
|
"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'",
|
"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": "NODE_ENV=test mocha",
|
||||||
"test:watch": "NODE_ENV=test mocha --watch --reporter=min",
|
"test:watch": "NODE_ENV=test mocha --watch --reporter=min",
|
||||||
|
65
oracle/scripts/interestFetcher.js
Normal file
65
oracle/scripts/interestFetcher.js
Normal file
@ -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()
|
Loading…
Reference in New Issue
Block a user