fix contract address validation

This commit is contained in:
smart_ex 2022-04-18 15:40:45 +10:00 committed by Danil Kovtonyuk
parent a7fc9c4b24
commit 16d8e0fc28
3 changed files with 24 additions and 12 deletions

@ -19,7 +19,7 @@ ajv.addKeyword('isAddress', {
ajv.addKeyword('isKnownContract', { ajv.addKeyword('isKnownContract', {
validate: (schema, data) => { validate: (schema, data) => {
try { try {
return getInstance(data) !== null return !!getInstance(data)
} catch (e) { } catch (e) {
return false return false
} }

@ -10,19 +10,33 @@ const TOKENS = {
}, },
} }
const addressMap = new Map()
for (const [key, value] of Object.entries(instances)) {
const netId = Number(key.substring(5))
for (const [currency, { instanceAddress, symbol, decimals }] of Object.entries(value)) {
Object.entries(instanceAddress).forEach(([amount, address]) =>
addressMap.set(
{ netId, address },
{
currency,
amount,
symbol,
decimals,
},
),
)
}
}
const sleep = ms => new Promise(res => setTimeout(res, ms)) const sleep = ms => new Promise(res => setTimeout(res, ms))
function getInstance(address) { function getInstance(address) {
address = toChecksumAddress(address) address = toChecksumAddress(address)
const inst = instances[`netId${netId}`] if (addressMap.has({ netId, address })) {
for (const currency of Object.keys(inst)) { return addressMap.get({ netId, address })
for (const amount of Object.keys(inst[currency].instanceAddress)) { } else {
if (inst[currency].instanceAddress[amount] === address) { throw new Error('Unknown contact address')
return { currency, amount }
} }
}
}
return null
} }
const poseidonHash = items => toBN(poseidon(items).toString()) const poseidonHash = items => toBN(poseidon(items).toString())

@ -25,7 +25,6 @@ const {
torn, torn,
netId, netId,
gasLimits, gasLimits,
instances,
privateKey, privateKey,
httpRpcUrl, httpRpcUrl,
oracleRpcUrl, oracleRpcUrl,
@ -131,8 +130,7 @@ async function getGasPrice() {
} }
async function checkTornadoFee({ args, contract }) { async function checkTornadoFee({ args, contract }) {
const { currency, amount } = getInstance(contract) const { currency, amount, decimals } = getInstance(contract)
const { decimals } = instances[`netId${netId}`][currency]
const [fee, refund] = [args[4], args[5]].map(toBN) const [fee, refund] = [args[4], args[5]].map(toBN)
const gasPrice = await getGasPrice() const gasPrice = await getGasPrice()