From 84508e2b84f695bb36771daebde22b990f19d3b3 Mon Sep 17 00:00:00 2001 From: Kirill Fedoseev Date: Sat, 16 May 2020 14:08:08 +0300 Subject: [PATCH] Update SAI handling in monitor after ES (#331) --- monitor/getBalances.js | 38 +------------------- monitor/utils/events.js | 70 ++----------------------------------- monitor/utils/tokenUtils.js | 27 -------------- 3 files changed, 4 insertions(+), 131 deletions(-) delete mode 100644 monitor/utils/tokenUtils.js diff --git a/monitor/getBalances.js b/monitor/getBalances.js index a5c58785..d60a7b90 100644 --- a/monitor/getBalances.js +++ b/monitor/getBalances.js @@ -3,7 +3,6 @@ const BN = require('bignumber.js') const Web3 = require('web3') const logger = require('./logger')('getBalances') const { BRIDGE_MODES } = require('../commons') -const { blockNumberHalfDuplexDisabled } = require('./utils/tokenUtils') const Web3Utils = Web3.utils @@ -86,28 +85,7 @@ async function main(bridgeMode) { const erc20Contract = new web3Foreign.eth.Contract(ERC20_ABI, erc20Address) let investedAmountInDai = 0 let bridgeDsrBalance = 0 - let foreignHalfDuplexErc20Balance = 0 let displayChaiToken = false - let displayHalfDuplexToken = false - let tokenSwapAllowed = false - try { - const halfDuplexTokenAddress = await foreignBridge.methods.halfDuplexErc20token().call() - if (halfDuplexTokenAddress !== erc20Address) { - const halfDuplexToken = new web3Foreign.eth.Contract(ERC20_ABI, halfDuplexTokenAddress) - logger.debug('calling halfDuplexToken.methods.balanceOf') - foreignHalfDuplexErc20Balance = await halfDuplexToken.methods - .balanceOf(COMMON_FOREIGN_BRIDGE_ADDRESS) - .call(null, blockNumberHalfDuplexDisabled) - logger.debug('getting last block numbers') - const block = await web3Foreign.eth.getBlock('latest') - - logger.debug(`Checking if SCD Emergency Shutdown has happened`) - tokenSwapAllowed = await foreignBridge.methods.isTokenSwapAllowed(block.timestamp).call() - displayHalfDuplexToken = true - } - } catch (e) { - logger.debug('Methods for half duplex token are not present') - } try { logger.debug('calling foreignBridge.methods.isChaiTokenEnabled') @@ -142,30 +120,16 @@ async function main(bridgeMode) { const foreignErc20BalanceBN = new BN(foreignErc20Balance) const investedAmountInDaiBN = new BN(investedAmountInDai) const bridgeDsrBalanceBN = new BN(bridgeDsrBalance) - const halfDuplexErc20BalanceBN = displayHalfDuplexToken ? new BN(foreignHalfDuplexErc20Balance) : new BN(0) const diff = foreignErc20BalanceBN - .plus(halfDuplexErc20BalanceBN) .plus(investedAmountInDaiBN) .minus(totalSupplyBN) .toFixed() - let foreign = { + const foreign = { erc20Balance: Web3Utils.fromWei(foreignErc20Balance) } - if (displayHalfDuplexToken && tokenSwapAllowed) { - foreign = { - ...foreign, - halfDuplexErc20Balance: Web3Utils.fromWei(foreignHalfDuplexErc20Balance) - } - } else if (displayHalfDuplexToken && !tokenSwapAllowed) { - foreign = { - ...foreign, - halfDuplexErc20BalanceAfterES: Web3Utils.fromWei(foreignHalfDuplexErc20Balance) - } - } - if (displayChaiToken) { foreign.investedErc20Balance = Web3Utils.fromWei(investedAmountInDai) foreign.accumulatedInterest = Web3Utils.fromWei(bridgeDsrBalanceBN.minus(investedAmountInDaiBN).toString(10)) diff --git a/monitor/utils/events.js b/monitor/utils/events.js index b3dd54c0..dd73521a 100644 --- a/monitor/utils/events.js +++ b/monitor/utils/events.js @@ -11,11 +11,9 @@ const { ERC20_ABI, ERC677_BRIDGE_TOKEN_ABI, getTokenType, - getPastEvents, - ZERO_ADDRESS + getPastEvents } = require('../../commons') const { normalizeEventInformation } = require('./message') -const { filterTransferBeforeES } = require('./tokenUtils') const { writeFile, readCacheFile } = require('./file') const { @@ -111,74 +109,12 @@ async function main(mode) { } })).map(normalizeEvent) - let directTransfers = transferEvents - const tokensSwappedAbiExists = FOREIGN_ABI.filter(e => e.type === 'event' && e.name === 'TokensSwapped')[0] - if (tokensSwappedAbiExists) { - const tokensSwappedEvents = await getPastEvents(foreignBridge, { - event: 'TokensSwapped', - fromBlock: MONITOR_FOREIGN_START_BLOCK, - toBlock: foreignBlockNumber - }) - - // Get token swap events emitted by foreign bridge - const bridgeTokensSwappedEvents = tokensSwappedEvents.filter(e => e.address === COMMON_FOREIGN_BRIDGE_ADDRESS) - - // Get transfer events for each previous erc20 - const uniqueTokenAddressesSet = new Set(bridgeTokensSwappedEvents.map(e => e.returnValues.from)) - - // Exclude chai token from previous erc20 - try { - logger.debug('calling foreignBridge.chaiToken()') - const chaiToken = await foreignBridge.methods.chaiToken().call() - uniqueTokenAddressesSet.delete(chaiToken) - } catch (e) { - logger.debug('call to foreignBridge.chaiToken() failed') - } - // Exclude dai token from previous erc20 - try { - logger.debug('calling foreignBridge.erc20token()') - const daiToken = await foreignBridge.methods.erc20token().call() - uniqueTokenAddressesSet.delete(daiToken) - } catch (e) { - logger.debug('call to foreignBridge.erc20token() failed') - } - - const uniqueTokenAddresses = [...uniqueTokenAddressesSet] - await Promise.all( - uniqueTokenAddresses.map(async tokenAddress => { - const halfDuplexTokenContract = new web3Foreign.eth.Contract(ERC20_ABI, tokenAddress) - - const halfDuplexTransferEvents = (await getPastEvents(halfDuplexTokenContract, { - event: 'Transfer', - fromBlock: MONITOR_FOREIGN_START_BLOCK, - toBlock: foreignBlockNumber, - options: { - filter: { to: COMMON_FOREIGN_BRIDGE_ADDRESS } - } - })).map(normalizeEvent) - - // Remove events after the ES - const validHalfDuplexTransfers = await filterTransferBeforeES(halfDuplexTransferEvents) - - transferEvents = [...validHalfDuplexTransfers, ...transferEvents] - }) - ) - - // filter transfer that is part of a token swap - directTransfers = transferEvents.filter( - e => - bridgeTokensSwappedEvents.findIndex( - t => t.transactionHash === e.referenceTx && e.recipient === ZERO_ADDRESS - ) === -1 - ) - } - // Get transfer events that didn't have a UserRequestForAffirmation event in the same transaction - directTransfers = directTransfers.filter( + transferEvents = transferEvents.filter( e => foreignToHomeRequests.findIndex(t => t.referenceTx === e.referenceTx) === -1 ) - foreignToHomeRequests = [...foreignToHomeRequests, ...directTransfers] + foreignToHomeRequests = [...foreignToHomeRequests, ...transferEvents] } logger.debug('Done') diff --git a/monitor/utils/tokenUtils.js b/monitor/utils/tokenUtils.js deleted file mode 100644 index 83543a86..00000000 --- a/monitor/utils/tokenUtils.js +++ /dev/null @@ -1,27 +0,0 @@ -// https://etherscan.io/tx/0xd0c3c92c94e05bc71256055ce8c4c993e047f04e04f3283a04e4cb077b71f6c6 -const blockNumberHalfDuplexDisabled = 9884448 - -/** - * Returns true if the event was before the bridge stopped supporting half duplex transfers. - */ -async function transferBeforeES(event) { - return event.blockNumber < blockNumberHalfDuplexDisabled -} - -async function filterTransferBeforeES(array) { - const newArray = [] - // Iterate events from newer to older - for (let i = array.length - 1; i >= 0; i--) { - const beforeES = await transferBeforeES(array[i]) - if (beforeES) { - // add element to first position so the new array will have the same order - newArray.unshift(array[i]) - } - } - return newArray -} - -module.exports = { - filterTransferBeforeES, - blockNumberHalfDuplexDisabled -}