diff --git a/package.json b/package.json index 7b79f6d..39d2f16 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "relay", - "version": "4.1.1", + "version": "4.1.2", "description": "Relayer for Tornado.cash privacy solution. https://tornado.cash", "scripts": { "server": "node src/server.js", @@ -29,7 +29,7 @@ "gas-price-oracle": "^0.3.5", "ioredis": "^4.14.1", "node-fetch": "^2.6.7", - "torn-token": "1.0.4", + "torn-token": "1.0.6", "tornado-anonymity-mining": "^2.1.2", "tx-manager": "^0.4.1", "uuid": "^8.3.0", diff --git a/src/config.js b/src/config.js index 7981f69..df331ad 100644 --- a/src/config.js +++ b/src/config.js @@ -18,6 +18,7 @@ module.exports = { tornadoServiceFee: Number(process.env.REGULAR_TORNADO_WITHDRAW_FEE), miningServiceFee: Number(process.env.MINING_SERVICE_FEE), rewardAccount: process.env.REWARD_ACCOUNT, + governanceAddress: '0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce', tornadoGoerliProxy: '0x454d870a72e29d5E5697f635128D18077BD04C60', gasLimits: { [jobType.TORNADO_WITHDRAW]: 390000, diff --git a/src/worker.js b/src/worker.js index c49576f..0c3dc8b 100644 --- a/src/worker.js +++ b/src/worker.js @@ -10,6 +10,7 @@ const swapABI = require('../abis/swap.abi.json') const miningABI = require('../abis/mining.abi.json') const tornadoABI = require('../abis/tornadoABI.json') const tornadoProxyABI = require('../abis/tornadoProxyABI.json') +const aggregatorAbi = require('../abis/Aggregator.abi.json') const { queue } = require('./queue') const { poseidonHash2, getInstance, fromDecimals, sleep } = require('./utils') const { jobType, status } = require('./constants') @@ -26,6 +27,8 @@ const { miningServiceFee, tornadoServiceFee, tornadoGoerliProxy, + governanceAddress, + aggregatorAddress, } = require('./config') const ENSResolver = require('./resolver') const resolver = new ENSResolver() @@ -195,15 +198,30 @@ async function checkMiningFee({ args }) { } } +async function isLatestProposalExecuted() { + const PROPOSAL_EXECUTED_STATUS = 5 + const expectedProposalId = 10 + try { + const aggregator = new web3.eth.Contract(aggregatorAbi, aggregatorAddress) + const proposals = await aggregator.methods.getAllProposals(governanceAddress).call() + const expectedProposal = proposals[expectedProposalId - 1] + return expectedProposal && Number(expectedProposal['state']) === PROPOSAL_EXECUTED_STATUS + } catch (e) { + console.error(e.message) + return false + } +} + async function getProxyContract() { let proxyAddress - if (netId === 5) { proxyAddress = tornadoGoerliProxy } else { - proxyAddress = await resolver.resolve(torn.tornadoProxy.address) + const latestProposalExecuted = await isLatestProposalExecuted() + proxyAddress = latestProposalExecuted + ? await resolver.resolve(torn.tornadoRouter.address) + : await resolver.resolve(torn.tornadoProxy.address) } - const contract = new web3.eth.Contract(tornadoProxyABI, proxyAddress) return { diff --git a/yarn.lock b/yarn.lock index 283e5fb..e34ee4d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4887,10 +4887,10 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -torn-token@1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/torn-token/-/torn-token-1.0.4.tgz#c638b6899f3e899a3bdb1d7a04194b500f100c71" - integrity sha512-3377n2Wi9TO9JfTzPBKi4j+gdyJ35NCNkELT+3nXZn56j6z6o/Fh9tuAlEaP9E24jhx4gewRSrhsdim8v9/hjg== +torn-token@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/torn-token/-/torn-token-1.0.6.tgz#66cde5f85b611033918c807b4a8d9d4e5bb3fcfc" + integrity sha512-ilCS7fN+JM2O8l1Iw5cEWXyiQQg8GxEeYYvqALJcn5cO6qSpD+xJb3Dji4EHXa1Yu1OBd/19ktWNvUkWNvuAaQ== dependencies: "@openzeppelin/contracts" "^3.1.0" eth-sig-util "^2.5.3"