Skip to content

Commit

Permalink
Merge 777c7fd into 4ffda3a
Browse files Browse the repository at this point in the history
  • Loading branch information
patitonar committed Feb 27, 2020
2 parents 4ffda3a + 777c7fd commit b14f2cc
Show file tree
Hide file tree
Showing 14 changed files with 308 additions and 167 deletions.
4 changes: 4 additions & 0 deletions upgrade/.env.example
Expand Up @@ -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=
17 changes: 13 additions & 4 deletions upgrade/README.md
Expand Up @@ -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:
* `npm run upgradeBridgeOnHome`
* `npm run upgradeValidatorsOnForeign`
* `npm run upgradeBridgeOnForeign`
* `npm run migrateToMCD`

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)
12 changes: 8 additions & 4 deletions upgrade/package.json
Expand Up @@ -4,10 +4,14 @@
"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",
"chaiUpgrade:upgradeBridgeOnForeign": "node src/chaiUpgrade/upgradeBridgeOnForeign.js",
"chaiUpgrade:initializeChai": "node src/chaiUpgrade/initializeChai.js",
"setHomeDailyLimit": "node src/setHomeDailyLimit.js",
"lint": "eslint ."
},
"dependencies": {
"dotenv": "^8.2.0",
Expand Down
48 changes: 48 additions & 0 deletions 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()
45 changes: 45 additions & 0 deletions 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()
47 changes: 47 additions & 0 deletions upgrade/src/mcdUpgrade/migrateToMCD.js
@@ -0,0 +1,47 @@
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
} = process.env

const web3 = new Web3(new Web3.providers.HttpProvider(FOREIGN_RPC_URL))
const { address } = web3.eth.accounts.wallet.add(FOREIGN_PRIVKEY)

const migrateToMCD = 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.migrateToMCD().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)
}
}

migrateToMCD()
@@ -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 callMultiSigWallet = require('../utils/callMultiSigWallet')
const validatorState = require('../utils/validatorState')

const {
FOREIGN_PRIVKEY,
Expand Down Expand Up @@ -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)
}
Expand Down
46 changes: 46 additions & 0 deletions upgrade/src/mcdUpgrade/upgradeBridgeOnHome.js
@@ -0,0 +1,46 @@
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 {
HOME_PRIVKEY,
HOME_RPC_URL,
HOME_BRIDGE_ADDRESS,
ROLE,
HOME_START_BLOCK,
HOME_GAS_PRICE,
NEW_IMPLEMENTATION_XDAI_BRIDGE
} = process.env

const web3 = new Web3(new Web3.providers.HttpProvider(HOME_RPC_URL))
const { address } = web3.eth.accounts.wallet.add(HOME_PRIVKEY)

const proxy = new web3.eth.Contract(proxyAbi, HOME_BRIDGE_ADDRESS)

const upgradeBridgeOnHome = async () => {
try {
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('3', NEW_IMPLEMENTATION_XDAI_BRIDGE).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)
}
}

upgradeBridgeOnHome()
@@ -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 callMultiSigWallet = require('../utils/callMultiSigWallet')
const validatorState = require('../utils/validatorState')

const migrationMethodAbi = [
{
Expand Down Expand Up @@ -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)
}
Expand Down
56 changes: 0 additions & 56 deletions upgrade/src/migrateToMCD.js

This file was deleted.

0 comments on commit b14f2cc

Please sign in to comment.