8b010f887d
* Add console.table * First steps in validate script * env rename * Added parameter names * Descriptions * Print and configuration * Added more parameters * Rename gas oracle to gas supplier * More changes * Removed env examples for now * RPC rename * Bridge address rename * More changes * jobs * Renames * Typo * jobs * Changes * jobs * Changes * Monitor changes * jovs * Typo * Changes * REACT_APP_ env prefix * Typo * Rollback changes * Oracle deployment * Defaults * Monitor * Naming * Typo * Typo * Envs * ui deployment * ALl jobs * Vars in ultimate * Lint * Lint * Lint * Another way to add REACT_APP prefixing * Unnecessary mapping * No output timeout * No output timeout * Got rid of ERC20_TOKEN_ADDRESS * Configuration readme * Configuration * Prefixes * timeout * Docs * Docs * docs * docs * docs * Roll back ERC20_TOKEN_ADDRESS for erc-to-erc * Typo * lint * Rollback * ROllback validator * Rollback yarn.lock * dai and wetc update * Rollback ERC20_TOKEN_ADDRESS * erc to native * examples * all jobs * roll back * roll back ERC20_TOKEN_ADDRESS: "0xdbeE25CbE97e4A5CC6c499875774dc7067E9426B" * ui env example * typo * Allow rpc for ultimate * Test * ERC20_TOKEN_ADDRESS rollback * Specify port * React port * All jobs * cosmetics * Values * Restore erc20 token * Rearrange example for easier comparision * Rearrange ultimate for easier comparision * Rearrange for easier comparision * Refactor * Conditional app styles * Loading environment variables in react app * Add missing vars for UI in wetc and dai * Bring back test parameters readme * Readme for monitor vars * Reading environment variables in e2e-commons (#207)
107 lines
2.6 KiB
JavaScript
107 lines
2.6 KiB
JavaScript
require('dotenv').config()
|
|
const Web3 = require('web3')
|
|
const logger = require('./logger')('stuckTransfers.js')
|
|
const { FOREIGN_V1_ABI } = require('../commons/abis')
|
|
|
|
const { COMMON_FOREIGN_RPC_URL, COMMON_FOREIGN_BRIDGE_ADDRESS } = process.env
|
|
const MONITOR_FOREIGN_START_BLOCK = Number(process.env.MONITOR_FOREIGN_START_BLOCK) || 0
|
|
|
|
const foreignProvider = new Web3.providers.HttpProvider(COMMON_FOREIGN_RPC_URL)
|
|
const web3Foreign = new Web3(foreignProvider)
|
|
|
|
const ABITransferWithoutData = [
|
|
{
|
|
anonymous: false,
|
|
inputs: [
|
|
{
|
|
indexed: true,
|
|
name: 'from',
|
|
type: 'address'
|
|
},
|
|
{
|
|
indexed: true,
|
|
name: 'to',
|
|
type: 'address'
|
|
},
|
|
{
|
|
indexed: false,
|
|
name: 'value',
|
|
type: 'uint256'
|
|
}
|
|
],
|
|
name: 'Transfer',
|
|
type: 'event'
|
|
}
|
|
]
|
|
|
|
const ABIWithData = [
|
|
{
|
|
anonymous: false,
|
|
inputs: [
|
|
{
|
|
indexed: true,
|
|
name: 'from',
|
|
type: 'address'
|
|
},
|
|
{
|
|
indexed: true,
|
|
name: 'to',
|
|
type: 'address'
|
|
},
|
|
{
|
|
indexed: false,
|
|
name: 'value',
|
|
type: 'uint256'
|
|
},
|
|
{
|
|
indexed: false,
|
|
name: 'data',
|
|
type: 'bytes'
|
|
}
|
|
],
|
|
name: 'Transfer',
|
|
type: 'event'
|
|
}
|
|
]
|
|
|
|
function compareTransfers(transfersNormal) {
|
|
return withData => {
|
|
return (
|
|
transfersNormal.filter(normal => {
|
|
return normal.transactionHash === withData.transactionHash
|
|
}).length === 0
|
|
)
|
|
}
|
|
}
|
|
|
|
async function main() {
|
|
const foreignBridge = new web3Foreign.eth.Contract(FOREIGN_V1_ABI, COMMON_FOREIGN_BRIDGE_ADDRESS)
|
|
const erc20Address = await foreignBridge.methods.erc677token().call()
|
|
const tokenContract = new web3Foreign.eth.Contract(ABITransferWithoutData, erc20Address)
|
|
const tokenContractWithData = new web3Foreign.eth.Contract(ABIWithData, erc20Address)
|
|
logger.debug('calling tokenContract.getPastEvents Transfer')
|
|
const transfersNormal = await tokenContract.getPastEvents('Transfer', {
|
|
filter: {
|
|
to: COMMON_FOREIGN_BRIDGE_ADDRESS
|
|
},
|
|
fromBlock: MONITOR_FOREIGN_START_BLOCK,
|
|
toBlock: 'latest'
|
|
})
|
|
logger.debug('calling tokenContractWithData.getPastEvents Transfer')
|
|
const transfersWithData = await tokenContractWithData.getPastEvents('Transfer', {
|
|
filter: {
|
|
to: COMMON_FOREIGN_BRIDGE_ADDRESS
|
|
},
|
|
fromBlock: MONITOR_FOREIGN_START_BLOCK,
|
|
toBlock: 'latest'
|
|
})
|
|
const stuckTransfers = transfersNormal.filter(compareTransfers(transfersWithData))
|
|
logger.debug('Done')
|
|
return {
|
|
stuckTransfers,
|
|
total: stuckTransfers.length,
|
|
lastChecked: Math.floor(Date.now() / 1000)
|
|
}
|
|
}
|
|
module.exports = main
|