From e6670994c01f415073e596845cb2e5c8e901ff42 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Thu, 27 Feb 2020 14:47:36 -0300 Subject: [PATCH 1/2] Refactor upgrade structure --- upgrade/README.md | 8 ++++---- upgrade/package.json | 9 +++++---- upgrade/src/{ => mcdUpgrade}/migrateToMCD.js | 10 +++++----- upgrade/src/{ => mcdUpgrade}/upgradeBridgeOnForeign.js | 8 ++++---- upgrade/src/{ => mcdUpgrade}/upgradeBridgeOnHome.js | 8 ++++---- .../src/{ => mcdUpgrade}/upgradeValidatorsOnForeign.js | 10 +++++----- upgrade/src/{ => utils}/confirmTransaction.js | 4 ++-- upgrade/src/{ => utils}/validatorState.js | 0 8 files changed, 29 insertions(+), 28 deletions(-) rename upgrade/src/{ => mcdUpgrade}/migrateToMCD.js (81%) rename upgrade/src/{ => mcdUpgrade}/upgradeBridgeOnForeign.js (88%) rename upgrade/src/{ => mcdUpgrade}/upgradeBridgeOnHome.js (85%) rename upgrade/src/{ => mcdUpgrade}/upgradeValidatorsOnForeign.js (85%) rename upgrade/src/{ => utils}/confirmTransaction.js (96%) rename upgrade/src/{ => utils}/validatorState.js (100%) diff --git a/upgrade/README.md b/upgrade/README.md index 4e8f1d068..43ea1a02d 100644 --- a/upgrade/README.md +++ b/upgrade/README.md @@ -21,7 +21,7 @@ cp .env.example .env Complete the variables in `.env` file. The `ROLE` variable indicates if the validator will send the creation transaction on the multisig wallet or if it will send the confirmation. Run the script. The following are available: -* `npm run upgradeBridgeOnHome` -* `npm run upgradeValidatorsOnForeign` -* `npm run upgradeBridgeOnForeign` -* `npm run migrateToMCD` +* `npm run mcdUpgrade:upgradeBridgeOnHome` +* `npm run mcdUpgrade:upgradeValidatorsOnForeign` +* `npm run mcdUpgrade:upgradeBridgeOnForeign` +* `npm run mcdUpgrade:migrateToMCD` diff --git a/upgrade/package.json b/upgrade/package.json index 3ed1e461f..476c872d5 100644 --- a/upgrade/package.json +++ b/upgrade/package.json @@ -4,10 +4,11 @@ "main": "index.js", "license": "GPLv3", "scripts": { - "upgradeBridgeOnHome": "node src/upgradeBridgeOnHome.js", - "upgradeValidatorsOnForeign": "node src/upgradeValidatorsOnForeign.js", - "upgradeBridgeOnForeign": "node src/upgradeBridgeOnForeign.js", - "migrateToMCD": "node src/migrateToMCD.js" + "mcdUpgrade:upgradeBridgeOnHome": "node src/mcdUpgrade/upgradeBridgeOnHome.js", + "mcdUpgrade:upgradeValidatorsOnForeign": "node src/mcdUpgrade/upgradeValidatorsOnForeign.js", + "mcdUpgrade:upgradeBridgeOnForeign": "node src/mcdUpgrade/upgradeBridgeOnForeign.js", + "mcdUpgrade:migrateToMCD": "node src/mcdUpgrade/migrateToMCD.js", + "lint": "eslint ." }, "dependencies": { "dotenv": "^8.2.0", diff --git a/upgrade/src/migrateToMCD.js b/upgrade/src/mcdUpgrade/migrateToMCD.js similarity index 81% rename from upgrade/src/migrateToMCD.js rename to upgrade/src/mcdUpgrade/migrateToMCD.js index 2dd04519c..daac290e1 100644 --- a/upgrade/src/migrateToMCD.js +++ b/upgrade/src/mcdUpgrade/migrateToMCD.js @@ -1,10 +1,10 @@ require('dotenv').config() const Web3 = require('web3') -const multiSigWalletAbi = require('../abi/multiSigwallet') -const proxyAbi = require('../../build/contracts/EternalStorageProxy').abi -const foreignBridgeAbi = require('../../build/contracts/ForeignBridgeErcToNative').abi -const confirmTransaction = require('./confirmTransaction') -const validatorState = require('./validatorState') +const multiSigWalletAbi = require('../../abi/multiSigwallet') +const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi +const foreignBridgeAbi = require('../../../build/contracts/ForeignBridgeErcToNative').abi +const confirmTransaction = require('../utils/confirmTransaction') +const validatorState = require('../utils/validatorState') const { FOREIGN_PRIVKEY, diff --git a/upgrade/src/upgradeBridgeOnForeign.js b/upgrade/src/mcdUpgrade/upgradeBridgeOnForeign.js similarity index 88% rename from upgrade/src/upgradeBridgeOnForeign.js rename to upgrade/src/mcdUpgrade/upgradeBridgeOnForeign.js index 1ba660d0a..bc0abb0d7 100644 --- a/upgrade/src/upgradeBridgeOnForeign.js +++ b/upgrade/src/mcdUpgrade/upgradeBridgeOnForeign.js @@ -1,9 +1,9 @@ require('dotenv').config() const Web3 = require('web3') -const multiSigWalletAbi = require('../abi/multiSigwallet') -const proxyAbi = require('../../build/contracts/EternalStorageProxy').abi -const confirmTransaction = require('./confirmTransaction') -const validatorState = require('./validatorState') +const multiSigWalletAbi = require('../../abi/multiSigwallet') +const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi +const confirmTransaction = require('../utils/confirmTransaction') +const validatorState = require('../utils/validatorState') const { FOREIGN_PRIVKEY, diff --git a/upgrade/src/upgradeBridgeOnHome.js b/upgrade/src/mcdUpgrade/upgradeBridgeOnHome.js similarity index 85% rename from upgrade/src/upgradeBridgeOnHome.js rename to upgrade/src/mcdUpgrade/upgradeBridgeOnHome.js index acd2eb3bb..62e085d7d 100644 --- a/upgrade/src/upgradeBridgeOnHome.js +++ b/upgrade/src/mcdUpgrade/upgradeBridgeOnHome.js @@ -1,9 +1,9 @@ require('dotenv').config() const Web3 = require('web3') -const multiSigWalletAbi = require('../abi/multiSigwallet') -const proxyAbi = require('../../build/contracts/EternalStorageProxy').abi -const confirmTransaction = require('./confirmTransaction') -const validatorState = require('./validatorState') +const multiSigWalletAbi = require('../../abi/multiSigwallet') +const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi +const confirmTransaction = require('../utils/confirmTransaction') +const validatorState = require('../utils/validatorState') const { HOME_PRIVKEY, diff --git a/upgrade/src/upgradeValidatorsOnForeign.js b/upgrade/src/mcdUpgrade/upgradeValidatorsOnForeign.js similarity index 85% rename from upgrade/src/upgradeValidatorsOnForeign.js rename to upgrade/src/mcdUpgrade/upgradeValidatorsOnForeign.js index 76eea31b0..e1a9b6bf2 100644 --- a/upgrade/src/upgradeValidatorsOnForeign.js +++ b/upgrade/src/mcdUpgrade/upgradeValidatorsOnForeign.js @@ -1,10 +1,10 @@ require('dotenv').config() const Web3 = require('web3') -const multiSigWalletAbi = require('../abi/multiSigwallet') -const proxyAbi = require('../../build/contracts/EternalStorageProxy').abi -const foreignBridgeAbi = require('../../build/contracts/ForeignBridgeErcToNative').abi -const confirmTransaction = require('./confirmTransaction') -const validatorState = require('./validatorState') +const multiSigWalletAbi = require('../../abi/multiSigwallet') +const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi +const foreignBridgeAbi = require('../../../build/contracts/ForeignBridgeErcToNative').abi +const confirmTransaction = require('../utils/confirmTransaction') +const validatorState = require('../utils/validatorState') const migrationMethodAbi = [ { diff --git a/upgrade/src/confirmTransaction.js b/upgrade/src/utils/confirmTransaction.js similarity index 96% rename from upgrade/src/confirmTransaction.js rename to upgrade/src/utils/confirmTransaction.js index 7a6a3ff81..c221d0e4f 100644 --- a/upgrade/src/confirmTransaction.js +++ b/upgrade/src/utils/confirmTransaction.js @@ -39,8 +39,8 @@ const confirmTransaction = async ({ contract, fromBlock = 0, destination, data, console.log(`Confirmation status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`) } -function addExtraGas(gas) { - gas = toBN(gas) +function addExtraGas(initialGas) { + const gas = toBN(initialGas) const extraPercentage = toBN(4) return gas.mul(extraPercentage) diff --git a/upgrade/src/validatorState.js b/upgrade/src/utils/validatorState.js similarity index 100% rename from upgrade/src/validatorState.js rename to upgrade/src/utils/validatorState.js From 777c7fd2c3bc63fcc88f91eb49bdc69ce0716b50 Mon Sep 17 00:00:00 2001 From: Gerardo Nardelli Date: Thu, 27 Feb 2020 16:48:20 -0300 Subject: [PATCH 2/2] Add xdai upgrade scripts for chai support --- upgrade/.env.example | 4 ++ upgrade/README.md | 9 ++++ upgrade/package.json | 3 ++ upgrade/src/chaiUpgrade/initializeChai.js | 48 +++++++++++++++++++ .../src/chaiUpgrade/upgradeBridgeOnForeign.js | 45 +++++++++++++++++ upgrade/src/mcdUpgrade/migrateToMCD.js | 29 ++++------- .../src/mcdUpgrade/upgradeBridgeOnForeign.js | 29 ++++------- upgrade/src/mcdUpgrade/upgradeBridgeOnHome.js | 29 ++++------- .../mcdUpgrade/upgradeValidatorsOnForeign.js | 29 ++++------- upgrade/src/setHomeDailyLimit.js | 48 +++++++++++++++++++ ...rmTransaction.js => callMultiSigWallet.js} | 21 +++++++- 11 files changed, 217 insertions(+), 77 deletions(-) create mode 100644 upgrade/src/chaiUpgrade/initializeChai.js create mode 100644 upgrade/src/chaiUpgrade/upgradeBridgeOnForeign.js create mode 100644 upgrade/src/setHomeDailyLimit.js rename upgrade/src/utils/{confirmTransaction.js => callMultiSigWallet.js} (73%) diff --git a/upgrade/.env.example b/upgrade/.env.example index ce973f966..4068b02a7 100644 --- a/upgrade/.env.example +++ b/upgrade/.env.example @@ -13,6 +13,10 @@ FOREIGN_GAS_PRICE=1000000000 # leader or confirm ROLE=confirm + +# Optional parameters, depends on the script used NEW_IMPLEMENTATION_XDAI_BRIDGE= NEW_IMPLEMENTATION_ETH_VALIDATORS= NEW_IMPLEMENTATION_ETH_BRIDGE= +HOME_DAILY_LIMIT=100000000000000000000001 +CHAI_INTEREST_RECEIVER= diff --git a/upgrade/README.md b/upgrade/README.md index 43ea1a02d..33c327ee5 100644 --- a/upgrade/README.md +++ b/upgrade/README.md @@ -21,7 +21,16 @@ cp .env.example .env Complete the variables in `.env` file. The `ROLE` variable indicates if the validator will send the creation transaction on the multisig wallet or if it will send the confirmation. Run the script. The following are available: + +Scripts related to MCD migration upgrade: * `npm run mcdUpgrade:upgradeBridgeOnHome` * `npm run mcdUpgrade:upgradeValidatorsOnForeign` * `npm run mcdUpgrade:upgradeBridgeOnForeign` * `npm run mcdUpgrade:migrateToMCD` + +Scripts related to Chai upgrade: +* `npm run chaiUpgrade:upgradeBridgeOnForeign` (Requires `NEW_IMPLEMENTATION_ETH_BRIDGE` .env param) +* `npm run chaiUpgrade:initializeChai` (Requires `CHAI_INTEREST_RECEIVER` .env param) + +Scripts useful for changing bridge parameters: +* `npm run setHomeDailyLimit` (Requires `HOME_DAILY_LIMIT` .env param) diff --git a/upgrade/package.json b/upgrade/package.json index 476c872d5..deb2b48db 100644 --- a/upgrade/package.json +++ b/upgrade/package.json @@ -8,6 +8,9 @@ "mcdUpgrade:upgradeValidatorsOnForeign": "node src/mcdUpgrade/upgradeValidatorsOnForeign.js", "mcdUpgrade:upgradeBridgeOnForeign": "node src/mcdUpgrade/upgradeBridgeOnForeign.js", "mcdUpgrade:migrateToMCD": "node src/mcdUpgrade/migrateToMCD.js", + "chaiUpgrade:upgradeBridgeOnForeign": "node src/chaiUpgrade/upgradeBridgeOnForeign.js", + "chaiUpgrade:initializeChai": "node src/chaiUpgrade/initializeChai.js", + "setHomeDailyLimit": "node src/setHomeDailyLimit.js", "lint": "eslint ." }, "dependencies": { diff --git a/upgrade/src/chaiUpgrade/initializeChai.js b/upgrade/src/chaiUpgrade/initializeChai.js new file mode 100644 index 000000000..de5686a83 --- /dev/null +++ b/upgrade/src/chaiUpgrade/initializeChai.js @@ -0,0 +1,48 @@ +require('dotenv').config() +const Web3 = require('web3') +const multiSigWalletAbi = require('../../abi/multiSigwallet') +const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi +const foreignBridgeAbi = require('../../../build/contracts/ForeignBridgeErcToNative').abi +const callMultiSigWallet = require('../utils/callMultiSigWallet') +const validatorState = require('../utils/validatorState') + +const { + FOREIGN_PRIVKEY, + FOREIGN_RPC_URL, + FOREING_BRIDGE_ADDRESS, + ROLE, + FOREIGN_START_BLOCK, + FOREIGN_GAS_PRICE, + CHAI_INTEREST_RECEIVER +} = process.env + +const web3 = new Web3(new Web3.providers.HttpProvider(FOREIGN_RPC_URL)) +const { address } = web3.eth.accounts.wallet.add(FOREIGN_PRIVKEY) + +const initializeChai = async () => { + try { + const proxy = new web3.eth.Contract(proxyAbi, FOREING_BRIDGE_ADDRESS) + const bridge = new web3.eth.Contract(foreignBridgeAbi, FOREING_BRIDGE_ADDRESS) + + const ownerAddress = await proxy.methods.upgradeabilityOwner().call() + const multiSigWallet = new web3.eth.Contract(multiSigWalletAbi, ownerAddress) + + await validatorState(web3, address, multiSigWallet) + + const data = bridge.methods.initializeChaiToken(CHAI_INTEREST_RECEIVER).encodeABI() + + await callMultiSigWallet({ + role: ROLE, + contract: multiSigWallet, + destination: FOREING_BRIDGE_ADDRESS, + fromBlock: FOREIGN_START_BLOCK, + gasPrice: FOREIGN_GAS_PRICE, + address, + data + }) + } catch (e) { + console.log(e.message) + } +} + +initializeChai() diff --git a/upgrade/src/chaiUpgrade/upgradeBridgeOnForeign.js b/upgrade/src/chaiUpgrade/upgradeBridgeOnForeign.js new file mode 100644 index 000000000..d15cc0d39 --- /dev/null +++ b/upgrade/src/chaiUpgrade/upgradeBridgeOnForeign.js @@ -0,0 +1,45 @@ +require('dotenv').config() +const Web3 = require('web3') +const multiSigWalletAbi = require('../../abi/multiSigwallet') +const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi +const callMultiSigWallet = require('../utils/callMultiSigWallet') +const validatorState = require('../utils/validatorState') + +const { + FOREIGN_PRIVKEY, + FOREIGN_RPC_URL, + FOREING_BRIDGE_ADDRESS, + ROLE, + FOREIGN_START_BLOCK, + FOREIGN_GAS_PRICE, + NEW_IMPLEMENTATION_ETH_BRIDGE +} = process.env + +const web3 = new Web3(new Web3.providers.HttpProvider(FOREIGN_RPC_URL)) +const { address } = web3.eth.accounts.wallet.add(FOREIGN_PRIVKEY) + +const upgradeBridgeOnForeign = async () => { + try { + const proxy = new web3.eth.Contract(proxyAbi, FOREING_BRIDGE_ADDRESS) + const ownerAddress = await proxy.methods.upgradeabilityOwner().call() + const multiSigWallet = new web3.eth.Contract(multiSigWalletAbi, ownerAddress) + + await validatorState(web3, address, multiSigWallet) + + const data = proxy.methods.upgradeTo('4', NEW_IMPLEMENTATION_ETH_BRIDGE).encodeABI() + + await callMultiSigWallet({ + role: ROLE, + contract: multiSigWallet, + destination: FOREING_BRIDGE_ADDRESS, + fromBlock: FOREIGN_START_BLOCK, + gasPrice: FOREIGN_GAS_PRICE, + address, + data + }) + } catch (e) { + console.log(e.message) + } +} + +upgradeBridgeOnForeign() diff --git a/upgrade/src/mcdUpgrade/migrateToMCD.js b/upgrade/src/mcdUpgrade/migrateToMCD.js index daac290e1..0aeb2ce18 100644 --- a/upgrade/src/mcdUpgrade/migrateToMCD.js +++ b/upgrade/src/mcdUpgrade/migrateToMCD.js @@ -3,7 +3,7 @@ const Web3 = require('web3') const multiSigWalletAbi = require('../../abi/multiSigwallet') const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi const foreignBridgeAbi = require('../../../build/contracts/ForeignBridgeErcToNative').abi -const confirmTransaction = require('../utils/confirmTransaction') +const callMultiSigWallet = require('../utils/callMultiSigWallet') const validatorState = require('../utils/validatorState') const { @@ -30,24 +30,15 @@ const migrateToMCD = async () => { const data = bridge.methods.migrateToMCD().encodeABI() - if (ROLE === 'leader') { - const gas = await multiSigWallet.methods - .submitTransaction(FOREING_BRIDGE_ADDRESS, 0, data) - .estimateGas({ from: address }) - const receipt = await multiSigWallet.methods - .submitTransaction(FOREING_BRIDGE_ADDRESS, 0, data) - .send({ from: address, gas, gasPrice: FOREIGN_GAS_PRICE }) - console.log(`Submission status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`) - } else { - await confirmTransaction({ - fromBlock: FOREIGN_START_BLOCK, - contract: multiSigWallet, - destination: FOREING_BRIDGE_ADDRESS, - data, - address, - gasPrice: FOREIGN_GAS_PRICE - }) - } + await callMultiSigWallet({ + role: ROLE, + contract: multiSigWallet, + destination: FOREING_BRIDGE_ADDRESS, + fromBlock: FOREIGN_START_BLOCK, + gasPrice: FOREIGN_GAS_PRICE, + address, + data + }) } catch (e) { console.log(e.message) } diff --git a/upgrade/src/mcdUpgrade/upgradeBridgeOnForeign.js b/upgrade/src/mcdUpgrade/upgradeBridgeOnForeign.js index bc0abb0d7..2e177a62f 100644 --- a/upgrade/src/mcdUpgrade/upgradeBridgeOnForeign.js +++ b/upgrade/src/mcdUpgrade/upgradeBridgeOnForeign.js @@ -2,7 +2,7 @@ require('dotenv').config() const Web3 = require('web3') const multiSigWalletAbi = require('../../abi/multiSigwallet') const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi -const confirmTransaction = require('../utils/confirmTransaction') +const callMultiSigWallet = require('../utils/callMultiSigWallet') const validatorState = require('../utils/validatorState') const { @@ -42,24 +42,15 @@ const upgradeBridgeOnForeign = async () => { const upgradeData = bridge.methods.upgradeToV250().encodeABI() const data = proxy.methods.upgradeToAndCall('3', NEW_IMPLEMENTATION_ETH_BRIDGE, upgradeData).encodeABI() - if (ROLE === 'leader') { - const gas = await multiSigWallet.methods.submitTransaction(FOREING_BRIDGE_ADDRESS, 0, data).estimateGas({ - from: address - }) - const receipt = await multiSigWallet.methods - .submitTransaction(FOREING_BRIDGE_ADDRESS, 0, data) - .send({ from: address, gas, gasPrice: FOREIGN_GAS_PRICE }) - console.log(`Submission status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`) - } else { - await confirmTransaction({ - fromBlock: FOREIGN_START_BLOCK, - contract: multiSigWallet, - destination: FOREING_BRIDGE_ADDRESS, - data, - address, - gasPrice: FOREIGN_GAS_PRICE - }) - } + await callMultiSigWallet({ + role: ROLE, + contract: multiSigWallet, + destination: FOREING_BRIDGE_ADDRESS, + fromBlock: FOREIGN_START_BLOCK, + gasPrice: FOREIGN_GAS_PRICE, + address, + data + }) } catch (e) { console.log(e.message) } diff --git a/upgrade/src/mcdUpgrade/upgradeBridgeOnHome.js b/upgrade/src/mcdUpgrade/upgradeBridgeOnHome.js index 62e085d7d..62bd1dcea 100644 --- a/upgrade/src/mcdUpgrade/upgradeBridgeOnHome.js +++ b/upgrade/src/mcdUpgrade/upgradeBridgeOnHome.js @@ -2,7 +2,7 @@ require('dotenv').config() const Web3 = require('web3') const multiSigWalletAbi = require('../../abi/multiSigwallet') const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi -const confirmTransaction = require('../utils/confirmTransaction') +const callMultiSigWallet = require('../utils/callMultiSigWallet') const validatorState = require('../utils/validatorState') const { @@ -29,24 +29,15 @@ const upgradeBridgeOnHome = async () => { const data = proxy.methods.upgradeTo('3', NEW_IMPLEMENTATION_XDAI_BRIDGE).encodeABI() - if (ROLE === 'leader') { - const gas = await multiSigWallet.methods - .submitTransaction(HOME_BRIDGE_ADDRESS, 0, data) - .estimateGas({ from: address }) - const receipt = await multiSigWallet.methods - .submitTransaction(HOME_BRIDGE_ADDRESS, 0, data) - .send({ from: address, gas, gasPrice: HOME_GAS_PRICE }) - console.log(`Submission status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`) - } else { - await confirmTransaction({ - fromBlock: HOME_START_BLOCK, - contract: multiSigWallet, - destination: HOME_BRIDGE_ADDRESS, - data, - address, - gasPrice: HOME_GAS_PRICE - }) - } + await callMultiSigWallet({ + role: ROLE, + contract: multiSigWallet, + destination: HOME_BRIDGE_ADDRESS, + fromBlock: HOME_START_BLOCK, + gasPrice: HOME_GAS_PRICE, + address, + data + }) } catch (e) { console.log(e.message) } diff --git a/upgrade/src/mcdUpgrade/upgradeValidatorsOnForeign.js b/upgrade/src/mcdUpgrade/upgradeValidatorsOnForeign.js index e1a9b6bf2..162d0bb0b 100644 --- a/upgrade/src/mcdUpgrade/upgradeValidatorsOnForeign.js +++ b/upgrade/src/mcdUpgrade/upgradeValidatorsOnForeign.js @@ -3,7 +3,7 @@ const Web3 = require('web3') const multiSigWalletAbi = require('../../abi/multiSigwallet') const proxyAbi = require('../../../build/contracts/EternalStorageProxy').abi const foreignBridgeAbi = require('../../../build/contracts/ForeignBridgeErcToNative').abi -const confirmTransaction = require('../utils/confirmTransaction') +const callMultiSigWallet = require('../utils/callMultiSigWallet') const validatorState = require('../utils/validatorState') const migrationMethodAbi = [ @@ -49,24 +49,15 @@ const upgradeValidatorsOnForeign = async () => { const data = proxy.methods.upgradeToAndCall('2', NEW_IMPLEMENTATION_ETH_VALIDATORS, upgradeData).encodeABI() - if (ROLE === 'leader') { - const gas = await multiSigWallet.methods - .submitTransaction(validatorsAddress, 0, data) - .estimateGas({ from: address }) - const receipt = await multiSigWallet.methods - .submitTransaction(validatorsAddress, 0, data) - .send({ from: address, gas, gasPrice: FOREIGN_GAS_PRICE }) - console.log(`Submission status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`) - } else { - await confirmTransaction({ - fromBlock: FOREIGN_START_BLOCK, - contract: multiSigWallet, - destination: validatorsAddress, - data, - address, - gasPrice: FOREIGN_GAS_PRICE - }) - } + await callMultiSigWallet({ + role: ROLE, + contract: multiSigWallet, + destination: FOREING_BRIDGE_ADDRESS, + fromBlock: FOREIGN_START_BLOCK, + gasPrice: FOREIGN_GAS_PRICE, + address, + data + }) } catch (e) { console.log(e.message) } diff --git a/upgrade/src/setHomeDailyLimit.js b/upgrade/src/setHomeDailyLimit.js new file mode 100644 index 000000000..4069c2740 --- /dev/null +++ b/upgrade/src/setHomeDailyLimit.js @@ -0,0 +1,48 @@ +require('dotenv').config() +const Web3 = require('web3') +const multiSigWalletAbi = require('../abi/multiSigwallet') +const proxyAbi = require('../../build/contracts/EternalStorageProxy').abi +const homeBridgeAbi = require('../../build/contracts/HomeBridgeErcToNative').abi +const validatorState = require('./utils/validatorState') +const callMultiSigWallet = require('./utils/callMultiSigWallet') + +const { + HOME_PRIVKEY, + HOME_RPC_URL, + HOME_BRIDGE_ADDRESS, + ROLE, + HOME_START_BLOCK, + HOME_GAS_PRICE, + HOME_DAILY_LIMIT +} = process.env + +const web3 = new Web3(new Web3.providers.HttpProvider(HOME_RPC_URL)) +const { address } = web3.eth.accounts.wallet.add(HOME_PRIVKEY) + +const setHomeDailyLimit = async () => { + try { + const proxy = new web3.eth.Contract(proxyAbi, HOME_BRIDGE_ADDRESS) + const bridge = new web3.eth.Contract(homeBridgeAbi, HOME_BRIDGE_ADDRESS) + + const ownerAddress = await proxy.methods.upgradeabilityOwner().call() + const multiSigWallet = new web3.eth.Contract(multiSigWalletAbi, ownerAddress) + + await validatorState(web3, address, multiSigWallet) + + const data = bridge.methods.setDailyLimit(HOME_DAILY_LIMIT).encodeABI() + + await callMultiSigWallet({ + role: ROLE, + contract: multiSigWallet, + destination: HOME_BRIDGE_ADDRESS, + fromBlock: HOME_START_BLOCK, + gasPrice: HOME_GAS_PRICE, + address, + data + }) + } catch (e) { + console.log(e.message) + } +} + +setHomeDailyLimit() diff --git a/upgrade/src/utils/confirmTransaction.js b/upgrade/src/utils/callMultiSigWallet.js similarity index 73% rename from upgrade/src/utils/confirmTransaction.js rename to upgrade/src/utils/callMultiSigWallet.js index c221d0e4f..531732813 100644 --- a/upgrade/src/utils/confirmTransaction.js +++ b/upgrade/src/utils/callMultiSigWallet.js @@ -46,4 +46,23 @@ function addExtraGas(initialGas) { return gas.mul(extraPercentage) } -module.exports = confirmTransaction +const callMultiSigWallet = async ({ role, contract, destination, fromBlock, gasPrice, address, data }) => { + if (role === 'leader') { + const gas = await contract.methods.submitTransaction(destination, 0, data).estimateGas({ from: address }) + const receipt = await contract.methods + .submitTransaction(destination, 0, data) + .send({ from: address, gas, gasPrice }) + console.log(`Submission status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`) + } else { + await confirmTransaction({ + fromBlock, + contract, + destination, + data, + address, + gasPrice + }) + } +} + +module.exports = callMultiSigWallet