diff --git a/monitor/Dockerfile b/monitor/Dockerfile index 23139bdc..ebb371a6 100644 --- a/monitor/Dockerfile +++ b/monitor/Dockerfile @@ -3,6 +3,7 @@ FROM node:8 WORKDIR /mono COPY package.json . COPY contracts/package.json ./contracts/ +COPY commons/package.json ./commons/ COPY monitor/package.json ./monitor/ COPY yarn.lock . RUN yarn install --frozen-lockfile --production @@ -11,6 +12,8 @@ COPY ./contracts ./contracts RUN yarn run compile:contracts RUN mv ./contracts/build ./ && rm -rf ./contracts/* ./contracts/.[!.]* && mv ./build ./contracts/ +COPY ./commons ./commons + COPY ./monitor ./monitor WORKDIR /mono/monitor CMD echo "To start the monitor run:" \ diff --git a/monitor/checkWorker.js b/monitor/checkWorker.js index e1244e29..884db163 100644 --- a/monitor/checkWorker.js +++ b/monitor/checkWorker.js @@ -2,7 +2,7 @@ const fs = require('fs') const path = require('path') const Web3 = require('web3') const logger = require('./logger')('checkWorker') -const { getBridgeMode } = require('./utils/bridgeMode') +const { getBridgeMode } = require('../commons') const getBalances = require('./getBalances') const getShortEventStats = require('./getShortEventStats') const validators = require('./validators') @@ -11,7 +11,7 @@ const { HOME_BRIDGE_ADDRESS, HOME_RPC_URL } = process.env const homeProvider = new Web3.providers.HttpProvider(HOME_RPC_URL) const web3Home = new Web3(homeProvider) -const HOME_ERC_TO_ERC_ABI = require('../contracts/build/contracts/HomeBridgeErcToErc').abi +const { HOME_ERC_TO_ERC_ABI } = require('../commons') async function checkWorker() { try { diff --git a/monitor/getBalances.js b/monitor/getBalances.js index d1ea7a15..7ac381b8 100644 --- a/monitor/getBalances.js +++ b/monitor/getBalances.js @@ -2,7 +2,7 @@ require('dotenv').config() const BN = require('bignumber.js') const Web3 = require('web3') const logger = require('./logger')('getBalances') -const { BRIDGE_MODES } = require('./utils/bridgeMode') +const { BRIDGE_MODES } = require('../commons') const Web3Utils = Web3.utils @@ -14,16 +14,16 @@ const web3Home = new Web3(homeProvider) const foreignProvider = new Web3.providers.HttpProvider(FOREIGN_RPC_URL) const web3Foreign = new Web3(foreignProvider) -const ERC20_ABI = require('../contracts/build/contracts/ERC20').abi -const ERC677_ABI = require('../contracts/build/contracts/ERC677').abi -const HOME_ERC_TO_ERC_ABI = require('../contracts/build/contracts/HomeBridgeErcToErc').abi -const HOME_ERC_TO_NATIVE_ABI = require('../contracts/build/contracts/HomeBridgeErcToNative').abi -const BLOCK_REWARD_ABI = require('../contracts/build/contracts/IBlockReward').abi -const FOREIGN_ERC_TO_ERC_ABI = require('../contracts/build/contracts/ForeignBridgeErcToErc').abi -const FOREIGN_ERC_TO_NATIVE_ABI = require('../contracts/build/contracts/ForeignBridgeErcToNative') - .abi -const FOREIGN_NATIVE_TO_ERC_ABI = require('../contracts/build/contracts/ForeignBridgeNativeToErc') - .abi +const { + ERC20_ABI, + ERC677_ABI, + BLOCK_REWARD_ABI, + HOME_ERC_TO_ERC_ABI, + HOME_ERC_TO_NATIVE_ABI, + FOREIGN_ERC_TO_ERC_ABI, + FOREIGN_ERC_TO_NATIVE_ABI, + FOREIGN_NATIVE_TO_ERC_ABI +} = require('../commons') async function main(bridgeMode) { if (bridgeMode === BRIDGE_MODES.ERC_TO_ERC) { diff --git a/monitor/stuckTransfers.js b/monitor/stuckTransfers.js index 17027986..21ec022e 100644 --- a/monitor/stuckTransfers.js +++ b/monitor/stuckTransfers.js @@ -1,7 +1,7 @@ require('dotenv').config() const Web3 = require('web3') const logger = require('./logger')('stuckTransfers.js') -const { foreignViAbi } = require('./utils/v1Abis') +const { foreignViAbi } = require('../commons/abis') const { FOREIGN_RPC_URL, FOREIGN_BRIDGE_ADDRESS } = process.env const FOREIGN_DEPLOYMENT_BLOCK = Number(process.env.FOREIGN_DEPLOYMENT_BLOCK) || 0 diff --git a/monitor/utils/bridgeMode.js b/monitor/utils/bridgeMode.js deleted file mode 100644 index c3d7927b..00000000 --- a/monitor/utils/bridgeMode.js +++ /dev/null @@ -1,74 +0,0 @@ -const HOME_NATIVE_TO_ERC_ABI = require('../../contracts/build/contracts/HomeBridgeNativeToErc').abi -const FOREIGN_NATIVE_TO_ERC_ABI = require('../../contracts/build/contracts/ForeignBridgeNativeToErc') - .abi -const HOME_ERC_TO_ERC_ABI = require('../../contracts/build/contracts/HomeBridgeErcToErc').abi -const FOREIGN_ERC_TO_ERC_ABI = require('../../contracts/build/contracts/ForeignBridgeErc677ToErc677') - .abi -const HOME_ERC_TO_NATIVE_ABI = require('../../contracts/build/contracts/HomeBridgeErcToNative').abi -const FOREIGN_ERC_TO_NATIVE_ABI = require('../../contracts/build/contracts/ForeignBridgeErcToNative') - .abi - -const { homeV1Abi, foreignViAbi } = require('./v1Abis') - -const BRIDGE_MODES = { - NATIVE_TO_ERC: 'NATIVE_TO_ERC', - ERC_TO_ERC: 'ERC_TO_ERC', - ERC_TO_NATIVE: 'ERC_TO_NATIVE', - NATIVE_TO_ERC_V1: 'NATIVE_TO_ERC_V1' -} - -const ERC_TYPES = { - ERC20: 'ERC20', - ERC677: 'ERC677' -} - -function getBridgeABIs(bridgeMode) { - let HOME_ABI = null - let FOREIGN_ABI = null - if (bridgeMode === BRIDGE_MODES.NATIVE_TO_ERC) { - HOME_ABI = HOME_NATIVE_TO_ERC_ABI - FOREIGN_ABI = FOREIGN_NATIVE_TO_ERC_ABI - } else if (bridgeMode === BRIDGE_MODES.ERC_TO_ERC) { - HOME_ABI = HOME_ERC_TO_ERC_ABI - FOREIGN_ABI = FOREIGN_ERC_TO_ERC_ABI - } else if (bridgeMode === BRIDGE_MODES.ERC_TO_NATIVE) { - HOME_ABI = HOME_ERC_TO_NATIVE_ABI - FOREIGN_ABI = FOREIGN_ERC_TO_NATIVE_ABI - } else if (bridgeMode === BRIDGE_MODES.NATIVE_TO_ERC_V1) { - HOME_ABI = homeV1Abi - FOREIGN_ABI = foreignViAbi - } else { - throw new Error(`Unrecognized bridge mode: ${bridgeMode}`) - } - - return { HOME_ABI, FOREIGN_ABI } -} - -function decodeBridgeMode(bridgeModeHash) { - switch (bridgeModeHash) { - case '0x92a8d7fe': - return BRIDGE_MODES.NATIVE_TO_ERC - case '0xba4690f5': - return BRIDGE_MODES.ERC_TO_ERC - case '0x18762d46': - return BRIDGE_MODES.ERC_TO_NATIVE - default: - throw new Error(`Unrecognized bridge mode hash: '${bridgeModeHash}'`) - } -} - -async function getBridgeMode(contract) { - try { - const bridgeModeHash = await contract.methods.getBridgeMode().call() - return decodeBridgeMode(bridgeModeHash) - } catch (e) { - return BRIDGE_MODES.NATIVE_TO_ERC_V1 - } -} - -module.exports = { - getBridgeABIs, - getBridgeMode, - BRIDGE_MODES, - ERC_TYPES -} diff --git a/monitor/utils/ercUtils.js b/monitor/utils/ercUtils.js index f6a2d695..83664d38 100644 --- a/monitor/utils/ercUtils.js +++ b/monitor/utils/ercUtils.js @@ -1,4 +1,4 @@ -const { ERC_TYPES } = require('./bridgeMode') +const { ERC_TYPES } = require('../../commons') const getTokenType = async (contract, bridgeAddress) => { try { diff --git a/monitor/utils/events.js b/monitor/utils/events.js index e08270c9..2a4d981a 100644 --- a/monitor/utils/events.js +++ b/monitor/utils/events.js @@ -2,7 +2,14 @@ require('dotenv').config() const Web3 = require('web3') const { toBN } = require('web3').utils const logger = require('../logger')('eventsUtils') -const { BRIDGE_MODES, getBridgeMode, getBridgeABIs, ERC_TYPES } = require('./bridgeMode') +const { + BRIDGE_MODES, + ERC_TYPES, + getBridgeABIs, + getBridgeMode, + HOME_ERC_TO_ERC_ABI, + ERC20_ABI +} = require('../../commons') const { getTokenType } = require('./ercUtils') const { HOME_RPC_URL, FOREIGN_RPC_URL, HOME_BRIDGE_ADDRESS, FOREIGN_BRIDGE_ADDRESS } = process.env @@ -15,8 +22,6 @@ const web3Home = new Web3(homeProvider) const foreignProvider = new Web3.providers.HttpProvider(FOREIGN_RPC_URL) const web3Foreign = new Web3(foreignProvider) -const HOME_ERC_TO_ERC_ABI = require('../../contracts/build/contracts/HomeBridgeErcToErc').abi -const ERC20_ABI = require('../../contracts/build/contracts/ERC20').abi const { getPastEvents, getBlockNumber } = require('./contract') async function main(mode) { diff --git a/monitor/utils/serverUtils.js b/monitor/utils/serverUtils.js index 33854e2d..41ef4e8b 100644 --- a/monitor/utils/serverUtils.js +++ b/monitor/utils/serverUtils.js @@ -1,6 +1,5 @@ const Web3 = require('web3') -const { getBridgeMode, BRIDGE_MODES } = require('./bridgeMode') -const HOME_ERC_TO_ERC_ABI = require('../../contracts/build/contracts/HomeBridgeErcToErc').abi +const { BRIDGE_MODES, getBridgeMode, HOME_ERC_TO_ERC_ABI } = require('../../commons') const { HOME_BRIDGE_ADDRESS, HOME_RPC_URL } = process.env const homeProvider = new Web3.providers.HttpProvider(HOME_RPC_URL) diff --git a/monitor/utils/v1Abis.js b/monitor/utils/v1Abis.js deleted file mode 100644 index ba8cc8f5..00000000 --- a/monitor/utils/v1Abis.js +++ /dev/null @@ -1,163 +0,0 @@ -const homeV1Abi = [ - { - constant: true, - inputs: [], - name: 'validatorContract', - outputs: [ - { - name: '', - type: 'address' - } - ], - payable: false, - stateMutability: 'view', - type: 'function' - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - name: 'recipient', - type: 'address' - }, - { - indexed: false, - name: 'value', - type: 'uint256' - } - ], - name: 'Deposit', - type: 'event' - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - name: 'recipient', - type: 'address' - }, - { - indexed: false, - name: 'value', - type: 'uint256' - }, - { - indexed: false, - name: 'transactionHash', - type: 'bytes32' - } - ], - name: 'Withdraw', - type: 'event' - }, - { - constant: true, - inputs: [], - name: 'deployedAtBlock', - outputs: [ - { - name: '', - type: 'uint256' - } - ], - payable: false, - stateMutability: 'view', - type: 'function' - } -] - -const foreignViAbi = [ - { - constant: true, - inputs: [], - name: 'validatorContract', - outputs: [ - { - name: '', - type: 'address' - } - ], - payable: false, - stateMutability: 'view', - type: 'function' - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - name: 'recipient', - type: 'address' - }, - { - indexed: false, - name: 'value', - type: 'uint256' - }, - { - indexed: false, - name: 'transactionHash', - type: 'bytes32' - } - ], - name: 'Deposit', - type: 'event' - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - name: 'recipient', - type: 'address' - }, - { - indexed: false, - name: 'value', - type: 'uint256' - }, - { - indexed: false, - name: 'homeGasPrice', - type: 'uint256' - } - ], - name: 'Withdraw', - type: 'event' - }, - { - constant: true, - inputs: [], - name: 'deployedAtBlock', - outputs: [ - { - name: '', - type: 'uint256' - } - ], - payable: false, - stateMutability: 'view', - type: 'function' - }, - { - constant: true, - inputs: [], - name: 'erc677token', - outputs: [ - { - name: '', - type: 'address' - } - ], - payable: false, - stateMutability: 'view', - type: 'function' - } -] - -module.exports = { - homeV1Abi, - foreignViAbi -} diff --git a/monitor/utils/validatorUtils.js b/monitor/utils/validatorUtils.js index feb29016..ee27aa32 100644 --- a/monitor/utils/validatorUtils.js +++ b/monitor/utils/validatorUtils.js @@ -1,6 +1,6 @@ /* eslint no-param-reassign: ["error", { "props": false }] */ -const bridgeValidatorsAbi = require('../../contracts/build/contracts/BridgeValidators').abi +const { BRIDGE_VALIDATORS_ABI } = require('../../commons') const logger = require('../logger')('validatorsUtils') const { getPastEvents } = require('./contract') @@ -54,7 +54,7 @@ const validatorList = async contract => { const getValidatorList = async (address, eth, fromBlock, toBlock) => { logger.debug('getting validatorList') - const validatorsContract = new eth.Contract(bridgeValidatorsAbi, address) + const validatorsContract = new eth.Contract(BRIDGE_VALIDATORS_ABI, address) const validators = await validatorList(validatorsContract) if (validators.length) { diff --git a/monitor/validators.js b/monitor/validators.js index d143fe66..1ea16051 100644 --- a/monitor/validators.js +++ b/monitor/validators.js @@ -2,7 +2,7 @@ require('dotenv').config() const Web3 = require('web3') const fetch = require('node-fetch') const logger = require('./logger')('validators') -const { getBridgeABIs } = require('./utils/bridgeMode') +const { getBridgeABIs, BRIDGE_VALIDATORS_ABI } = require('../commons') const { getValidatorList } = require('./utils/validatorUtils') const { getBlockNumber } = require('./utils/contract') @@ -26,8 +26,6 @@ const web3Home = new Web3(homeProvider) const foreignProvider = new Web3.providers.HttpProvider(FOREIGN_RPC_URL) const web3Foreign = new Web3(foreignProvider) -const BRIDGE_VALIDATORS_ABI = require('../contracts/build/contracts/BridgeValidators').abi - const asyncForEach = async (array, callback) => { for (let index = 0; index < array.length; index++) { await callback(array[index], index, array)