Common getTokenType used on UI, monitor and Oracle (#165)
* Stopped silently swallowing errors * getTokenType in commons * Oracle using getTokenType from commons * Moved the getTokenType tests from ui to commons * Using getTokenType in ui and oracle * Revert "Stopped silently swallowing errors" fc92c0af9dc7cb4e59a7f1779afc8da8d9c33ecf * using common getTokenType in monitor. * Lint.
This commit is contained in:
parent
c94b68ab5b
commit
c66923827b
64
commons/test/getTokenType.js
Normal file
64
commons/test/getTokenType.js
Normal file
@ -0,0 +1,64 @@
|
||||
const { expect } = require('chai')
|
||||
const { getTokenType, ERC_TYPES } = require('..')
|
||||
|
||||
describe('getTokenType', () => {
|
||||
it('should return ERC677 if bridgeContract is equal to bridgeAddress', async () => {
|
||||
// Given
|
||||
const bridgeAddress = '0xCecBE80Ed3548dE11D7d2D922a36576eA40C4c26'
|
||||
const contract = {
|
||||
methods: {
|
||||
bridgeContract: () => {
|
||||
return {
|
||||
call: () => Promise.resolve(bridgeAddress)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// When
|
||||
const type = await getTokenType(contract, bridgeAddress)
|
||||
|
||||
// Then
|
||||
expect(type).to.equal(ERC_TYPES.ERC677)
|
||||
})
|
||||
|
||||
it('should return ERC20 if bridgeContract is not equal to bridgeAddress', async () => {
|
||||
// Given
|
||||
const bridgeAddress = '0xCecBE80Ed3548dE11D7d2D922a36576eA40C4c26'
|
||||
const contract = {
|
||||
methods: {
|
||||
bridgeContract: () => {
|
||||
return {
|
||||
call: () => Promise.resolve('0xBFCb120F7B1de491262CA4D9D8Eba70438b6896E')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// When
|
||||
const type = await getTokenType(contract, bridgeAddress)
|
||||
|
||||
// Then
|
||||
expect(type).to.equal(ERC_TYPES.ERC20)
|
||||
})
|
||||
|
||||
it('should return ERC20 if bridgeContract is not present', async () => {
|
||||
// Given
|
||||
const bridgeAddress = '0xCecBE80Ed3548dE11D7d2D922a36576eA40C4c26'
|
||||
const contract = {
|
||||
methods: {
|
||||
bridgeContract: () => {
|
||||
return {
|
||||
call: () => Promise.reject()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// When
|
||||
const type = await getTokenType(contract, bridgeAddress)
|
||||
|
||||
// Then
|
||||
expect(type).to.equal(ERC_TYPES.ERC20)
|
||||
})
|
||||
})
|
@ -1,4 +1,4 @@
|
||||
const { BRIDGE_MODES, FEE_MANAGER_MODE } = require('./constants')
|
||||
const { BRIDGE_MODES, FEE_MANAGER_MODE, ERC_TYPES } = require('./constants')
|
||||
|
||||
function decodeBridgeMode(bridgeModeHash) {
|
||||
switch (bridgeModeHash) {
|
||||
@ -33,6 +33,19 @@ async function getBridgeMode(contract) {
|
||||
}
|
||||
}
|
||||
|
||||
const getTokenType = async (bridgeTokenContract, bridgeAddress) => {
|
||||
try {
|
||||
const resultBridgeAddress = await bridgeTokenContract.methods.bridgeContract().call()
|
||||
if (resultBridgeAddress === bridgeAddress) {
|
||||
return ERC_TYPES.ERC677
|
||||
} else {
|
||||
return ERC_TYPES.ERC20
|
||||
}
|
||||
} catch (e) {
|
||||
return ERC_TYPES.ERC20
|
||||
}
|
||||
}
|
||||
|
||||
const getUnit = bridgeMode => {
|
||||
let unitHome = null
|
||||
let unitForeign = null
|
||||
@ -56,5 +69,6 @@ module.exports = {
|
||||
decodeBridgeMode,
|
||||
decodeFeeManagerMode,
|
||||
getBridgeMode,
|
||||
getTokenType,
|
||||
getUnit
|
||||
}
|
||||
|
@ -1,18 +0,0 @@
|
||||
const { ERC_TYPES } = require('../../commons')
|
||||
|
||||
const getTokenType = async (contract, bridgeAddress) => {
|
||||
try {
|
||||
const bridgeContract = await contract.methods.bridgeContract().call()
|
||||
if (bridgeContract === bridgeAddress) {
|
||||
return ERC_TYPES.ERC677
|
||||
} else {
|
||||
return ERC_TYPES.ERC20
|
||||
}
|
||||
} catch (e) {
|
||||
return ERC_TYPES.ERC20
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getTokenType
|
||||
}
|
@ -8,9 +8,10 @@ const {
|
||||
getBridgeABIs,
|
||||
getBridgeMode,
|
||||
HOME_ERC_TO_ERC_ABI,
|
||||
ERC20_ABI
|
||||
ERC20_ABI,
|
||||
ERC677_BRIDGE_TOKEN_ABI,
|
||||
getTokenType
|
||||
} = require('../../commons')
|
||||
const { getTokenType } = require('./ercUtils')
|
||||
|
||||
const { HOME_RPC_URL, FOREIGN_RPC_URL, HOME_BRIDGE_ADDRESS, FOREIGN_BRIDGE_ADDRESS } = process.env
|
||||
const HOME_DEPLOYMENT_BLOCK = toBN(Number(process.env.HOME_DEPLOYMENT_BLOCK) || 0)
|
||||
@ -30,12 +31,15 @@ async function main(mode) {
|
||||
const { HOME_ABI, FOREIGN_ABI } = getBridgeABIs(bridgeMode)
|
||||
const homeBridge = new web3Home.eth.Contract(HOME_ABI, HOME_BRIDGE_ADDRESS)
|
||||
const foreignBridge = new web3Foreign.eth.Contract(FOREIGN_ABI, FOREIGN_BRIDGE_ADDRESS)
|
||||
const tokenType = await getTokenType(foreignBridge, FOREIGN_BRIDGE_ADDRESS)
|
||||
const isExternalErc20 = tokenType === ERC_TYPES.ERC20
|
||||
const v1Bridge = bridgeMode === BRIDGE_MODES.NATIVE_TO_ERC_V1
|
||||
const erc20MethodName =
|
||||
bridgeMode === BRIDGE_MODES.NATIVE_TO_ERC || v1Bridge ? 'erc677token' : 'erc20token'
|
||||
const erc20Address = await foreignBridge.methods[erc20MethodName]().call()
|
||||
const tokenType = await getTokenType(
|
||||
new web3Foreign.eth.Contract(ERC677_BRIDGE_TOKEN_ABI, erc20Address),
|
||||
FOREIGN_BRIDGE_ADDRESS
|
||||
)
|
||||
const isExternalErc20 = tokenType === ERC_TYPES.ERC20
|
||||
const erc20Contract = new web3Foreign.eth.Contract(ERC20_ABI, erc20Address)
|
||||
|
||||
logger.debug('getting last block numbers')
|
||||
|
@ -1,6 +1,6 @@
|
||||
require('../env')
|
||||
const Web3 = require('web3')
|
||||
const { ERC677_BRIDGE_TOKEN_ABI, ERC_TYPES } = require('../../commons')
|
||||
const { ERC677_BRIDGE_TOKEN_ABI, getTokenType } = require('../../commons')
|
||||
|
||||
async function initialChecks() {
|
||||
const { ERC20_TOKEN_ADDRESS, BRIDGE_MODE, FOREIGN_RPC_URL, FOREIGN_BRIDGE_ADDRESS } = process.env
|
||||
@ -8,17 +8,12 @@ async function initialChecks() {
|
||||
|
||||
if (BRIDGE_MODE === 'ERC_TO_ERC') {
|
||||
const foreignWeb3 = new Web3(new Web3.providers.HttpProvider(FOREIGN_RPC_URL))
|
||||
const tokenContract = new foreignWeb3.eth.Contract(ERC677_BRIDGE_TOKEN_ABI, ERC20_TOKEN_ADDRESS)
|
||||
try {
|
||||
const bridgeContract = await tokenContract.methods.bridgeContract().call()
|
||||
if (bridgeContract === FOREIGN_BRIDGE_ADDRESS) {
|
||||
result.foreignERC = ERC_TYPES.ERC677
|
||||
} else {
|
||||
result.foreignERC = ERC_TYPES.ERC20
|
||||
}
|
||||
} catch (e) {
|
||||
result.foreignERC = ERC_TYPES.ERC20
|
||||
}
|
||||
const bridgeTokenContract = new foreignWeb3.eth.Contract(
|
||||
ERC677_BRIDGE_TOKEN_ABI,
|
||||
ERC20_TOKEN_ADDRESS
|
||||
)
|
||||
|
||||
result.foreignERC = await getTokenType(bridgeTokenContract, FOREIGN_BRIDGE_ADDRESS)
|
||||
}
|
||||
console.log(JSON.stringify(result))
|
||||
return result
|
||||
|
@ -8,6 +8,7 @@ import {
|
||||
getUnit,
|
||||
decodeFeeManagerMode,
|
||||
getBridgeABIs,
|
||||
getTokenType,
|
||||
ERC20_BYTES32_ABI
|
||||
} from '../../../commons'
|
||||
import {
|
||||
@ -28,7 +29,6 @@ import {
|
||||
ZERO_ADDRESS,
|
||||
getDeployedAtBlock,
|
||||
getValidatorList,
|
||||
getTokenType,
|
||||
getValidatorContract,
|
||||
getRequiredSignatures,
|
||||
getValidatorCount
|
||||
|
@ -1,66 +1,6 @@
|
||||
import BN from 'bignumber.js'
|
||||
import { getTokenType, mintedTotallyByBridge } from '../contract'
|
||||
import { ERC_TYPES } from '../../../../../commons'
|
||||
import { mintedTotallyByBridge } from '../contract'
|
||||
|
||||
describe('getTokenType', () => {
|
||||
it('should return ERC677 if bridgeContract is equal to bridgeAddress', async () => {
|
||||
// Given
|
||||
const bridgeAddress = '0xCecBE80Ed3548dE11D7d2D922a36576eA40C4c26'
|
||||
const contract = {
|
||||
methods: {
|
||||
bridgeContract: () => {
|
||||
return {
|
||||
call: () => Promise.resolve(bridgeAddress)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// When
|
||||
const type = await getTokenType(contract, bridgeAddress)
|
||||
|
||||
// Then
|
||||
expect(type).toEqual(ERC_TYPES.ERC677)
|
||||
})
|
||||
it('should return ERC20 if bridgeContract is not equal to bridgeAddress', async () => {
|
||||
// Given
|
||||
const bridgeAddress = '0xCecBE80Ed3548dE11D7d2D922a36576eA40C4c26'
|
||||
const contract = {
|
||||
methods: {
|
||||
bridgeContract: () => {
|
||||
return {
|
||||
call: () => Promise.resolve('0xBFCb120F7B1de491262CA4D9D8Eba70438b6896E')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// When
|
||||
const type = await getTokenType(contract, bridgeAddress)
|
||||
|
||||
// Then
|
||||
expect(type).toEqual(ERC_TYPES.ERC20)
|
||||
})
|
||||
it('should return ERC20 if bridgeContract is not present', async () => {
|
||||
// Given
|
||||
const bridgeAddress = '0xCecBE80Ed3548dE11D7d2D922a36576eA40C4c26'
|
||||
const contract = {
|
||||
methods: {
|
||||
bridgeContract: () => {
|
||||
return {
|
||||
call: () => Promise.reject()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// When
|
||||
const type = await getTokenType(contract, bridgeAddress)
|
||||
|
||||
// Then
|
||||
expect(type).toEqual(ERC_TYPES.ERC20)
|
||||
})
|
||||
})
|
||||
describe('mintedTotallyByBridge', () => {
|
||||
it('should call mintedTotallyByBridge from contract', async () => {
|
||||
// Given
|
||||
|
@ -157,19 +157,6 @@ export const getDeployedAtBlock = async contract => {
|
||||
}
|
||||
}
|
||||
|
||||
export const getTokenType = async (contract, bridgeAddress) => {
|
||||
try {
|
||||
const bridgeContract = await contract.methods.bridgeContract().call()
|
||||
if (bridgeContract === bridgeAddress) {
|
||||
return ERC_TYPES.ERC677
|
||||
} else {
|
||||
return ERC_TYPES.ERC20
|
||||
}
|
||||
} catch (e) {
|
||||
return ERC_TYPES.ERC20
|
||||
}
|
||||
}
|
||||
|
||||
export const getBlockRewardContract = contract => contract.methods.blockRewardContract().call()
|
||||
|
||||
export const getValidatorContract = contract => contract.methods.validatorContract().call()
|
||||
|
Loading…
Reference in New Issue
Block a user