Skip to content

Commit a5946e7

Browse files
authored
Add upgrade scripts for chai support on xdai bridge contracts (#379)
1 parent e2c8d3f commit a5946e7

File tree

9 files changed

+58
-209
lines changed

9 files changed

+58
-209
lines changed

upgrade/.env.example

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
HOME_RPC_URL=https://dai.poa.network
2-
HOME_PRIVKEY=0x...
3-
HOME_BRIDGE_ADDRESS=0x7301CFA0e1756B71869E93d4e4Dca5c7d0eb0AA6
4-
HOME_START_BLOCK=7384314
5-
HOME_GAS_PRICE=1000000000
6-
71
FOREIGN_RPC_URL=https://mainnet.infura.io/v3/API_KEY
82
FOREIGN_PRIVKEY=0x...
93
FOREING_BRIDGE_ADDRESS=0x4aa42145Aa6Ebf72e164C9bBC74fbD3788045016
@@ -13,6 +7,6 @@ FOREIGN_GAS_PRICE=1000000000
137
# leader or confirm
148
ROLE=confirm
159

16-
NEW_IMPLEMENTATION_XDAI_BRIDGE=
17-
NEW_IMPLEMENTATION_ETH_VALIDATORS=
10+
# Optional parameters, depends on the script used
1811
NEW_IMPLEMENTATION_ETH_BRIDGE=
12+
CHAI_INTEREST_RECEIVER=

upgrade/README.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,5 @@ cp .env.example .env
2121
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.
2222

2323
Run the script. The following are available:
24-
* `npm run upgradeBridgeOnHome`
25-
* `npm run upgradeValidatorsOnForeign`
26-
* `npm run upgradeBridgeOnForeign`
27-
* `npm run migrateToMCD`
24+
* `npm run chaiUpgrade:upgradeBridgeOnForeign` (Requires `NEW_IMPLEMENTATION_ETH_BRIDGE` .env param)
25+
* `npm run chaiUpgrade:initializeChai` (Requires `CHAI_INTEREST_RECEIVER` .env param)

upgrade/package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@
44
"main": "index.js",
55
"license": "GPLv3",
66
"scripts": {
7-
"upgradeBridgeOnHome": "node src/upgradeBridgeOnHome.js",
8-
"upgradeValidatorsOnForeign": "node src/upgradeValidatorsOnForeign.js",
97
"upgradeBridgeOnForeign": "node src/upgradeBridgeOnForeign.js",
10-
"migrateToMCD": "node src/migrateToMCD.js"
8+
"initializeChai": "node src/initializeChai.js",
9+
"lint": "eslint ."
1110
},
1211
"dependencies": {
1312
"dotenv": "^8.2.0",

upgrade/src/migrateToMCD.js renamed to upgrade/src/initializeChai.js

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,23 @@ const Web3 = require('web3')
33
const multiSigWalletAbi = require('../abi/multiSigwallet')
44
const proxyAbi = require('../../build/contracts/EternalStorageProxy').abi
55
const foreignBridgeAbi = require('../../build/contracts/ForeignBridgeErcToNative').abi
6-
const confirmTransaction = require('./confirmTransaction')
7-
const validatorState = require('./validatorState')
6+
const callMultiSigWallet = require('./utils/callMultiSigWallet')
7+
const validatorState = require('./utils/validatorState')
88

99
const {
1010
FOREIGN_PRIVKEY,
1111
FOREIGN_RPC_URL,
1212
FOREING_BRIDGE_ADDRESS,
1313
ROLE,
1414
FOREIGN_START_BLOCK,
15-
FOREIGN_GAS_PRICE
15+
FOREIGN_GAS_PRICE,
16+
CHAI_INTEREST_RECEIVER
1617
} = process.env
1718

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

21-
const migrateToMCD = async () => {
22+
const initializeChai = async () => {
2223
try {
2324
const proxy = new web3.eth.Contract(proxyAbi, FOREING_BRIDGE_ADDRESS)
2425
const bridge = new web3.eth.Contract(foreignBridgeAbi, FOREING_BRIDGE_ADDRESS)
@@ -28,29 +29,20 @@ const migrateToMCD = async () => {
2829

2930
await validatorState(web3, address, multiSigWallet)
3031

31-
const data = bridge.methods.migrateToMCD().encodeABI()
32-
33-
if (ROLE === 'leader') {
34-
const gas = await multiSigWallet.methods
35-
.submitTransaction(FOREING_BRIDGE_ADDRESS, 0, data)
36-
.estimateGas({ from: address })
37-
const receipt = await multiSigWallet.methods
38-
.submitTransaction(FOREING_BRIDGE_ADDRESS, 0, data)
39-
.send({ from: address, gas, gasPrice: FOREIGN_GAS_PRICE })
40-
console.log(`Submission status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`)
41-
} else {
42-
await confirmTransaction({
43-
fromBlock: FOREIGN_START_BLOCK,
44-
contract: multiSigWallet,
45-
destination: FOREING_BRIDGE_ADDRESS,
46-
data,
47-
address,
48-
gasPrice: FOREIGN_GAS_PRICE
49-
})
50-
}
32+
const data = bridge.methods.initializeChaiToken(CHAI_INTEREST_RECEIVER).encodeABI()
33+
34+
await callMultiSigWallet({
35+
role: ROLE,
36+
contract: multiSigWallet,
37+
destination: FOREING_BRIDGE_ADDRESS,
38+
fromBlock: FOREIGN_START_BLOCK,
39+
gasPrice: FOREIGN_GAS_PRICE,
40+
address,
41+
data
42+
})
5143
} catch (e) {
5244
console.log(e.message)
5345
}
5446
}
5547

56-
migrateToMCD()
48+
initializeChai()

upgrade/src/upgradeBridgeOnForeign.js

Lines changed: 13 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ require('dotenv').config()
22
const Web3 = require('web3')
33
const multiSigWalletAbi = require('../abi/multiSigwallet')
44
const proxyAbi = require('../../build/contracts/EternalStorageProxy').abi
5-
const confirmTransaction = require('./confirmTransaction')
6-
const validatorState = require('./validatorState')
5+
const callMultiSigWallet = require('./utils/callMultiSigWallet')
6+
const validatorState = require('./utils/validatorState')
77

88
const {
99
FOREIGN_PRIVKEY,
@@ -15,18 +15,6 @@ const {
1515
NEW_IMPLEMENTATION_ETH_BRIDGE
1616
} = process.env
1717

18-
const migrationMethodAbi = [
19-
{
20-
constant: false,
21-
inputs: [],
22-
name: 'upgradeToV250',
23-
outputs: [],
24-
payable: false,
25-
stateMutability: 'nonpayable',
26-
type: 'function'
27-
}
28-
]
29-
3018
const web3 = new Web3(new Web3.providers.HttpProvider(FOREIGN_RPC_URL))
3119
const { address } = web3.eth.accounts.wallet.add(FOREIGN_PRIVKEY)
3220

@@ -38,28 +26,17 @@ const upgradeBridgeOnForeign = async () => {
3826

3927
await validatorState(web3, address, multiSigWallet)
4028

41-
const bridge = new web3.eth.Contract(migrationMethodAbi, FOREING_BRIDGE_ADDRESS)
42-
const upgradeData = bridge.methods.upgradeToV250().encodeABI()
43-
const data = proxy.methods.upgradeToAndCall('3', NEW_IMPLEMENTATION_ETH_BRIDGE, upgradeData).encodeABI()
44-
45-
if (ROLE === 'leader') {
46-
const gas = await multiSigWallet.methods.submitTransaction(FOREING_BRIDGE_ADDRESS, 0, data).estimateGas({
47-
from: address
48-
})
49-
const receipt = await multiSigWallet.methods
50-
.submitTransaction(FOREING_BRIDGE_ADDRESS, 0, data)
51-
.send({ from: address, gas, gasPrice: FOREIGN_GAS_PRICE })
52-
console.log(`Submission status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`)
53-
} else {
54-
await confirmTransaction({
55-
fromBlock: FOREIGN_START_BLOCK,
56-
contract: multiSigWallet,
57-
destination: FOREING_BRIDGE_ADDRESS,
58-
data,
59-
address,
60-
gasPrice: FOREIGN_GAS_PRICE
61-
})
62-
}
29+
const data = proxy.methods.upgradeTo('4', NEW_IMPLEMENTATION_ETH_BRIDGE).encodeABI()
30+
31+
await callMultiSigWallet({
32+
role: ROLE,
33+
contract: multiSigWallet,
34+
destination: FOREING_BRIDGE_ADDRESS,
35+
fromBlock: FOREIGN_START_BLOCK,
36+
gasPrice: FOREIGN_GAS_PRICE,
37+
address,
38+
data
39+
})
6340
} catch (e) {
6441
console.log(e.message)
6542
}

upgrade/src/upgradeBridgeOnHome.js

Lines changed: 0 additions & 55 deletions
This file was deleted.

upgrade/src/upgradeValidatorsOnForeign.js

Lines changed: 0 additions & 75 deletions
This file was deleted.

upgrade/src/confirmTransaction.js renamed to upgrade/src/utils/callMultiSigWallet.js

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,30 @@ const confirmTransaction = async ({ contract, fromBlock = 0, destination, data,
3939
console.log(`Confirmation status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`)
4040
}
4141

42-
function addExtraGas(gas) {
43-
gas = toBN(gas)
42+
function addExtraGas(initialGas) {
43+
const gas = toBN(initialGas)
4444
const extraPercentage = toBN(4)
4545

4646
return gas.mul(extraPercentage)
4747
}
4848

49-
module.exports = confirmTransaction
49+
const callMultiSigWallet = async ({ role, contract, destination, fromBlock, gasPrice, address, data }) => {
50+
if (role === 'leader') {
51+
const gas = await contract.methods.submitTransaction(destination, 0, data).estimateGas({ from: address })
52+
const receipt = await contract.methods
53+
.submitTransaction(destination, 0, data)
54+
.send({ from: address, gas, gasPrice })
55+
console.log(`Submission status: ${receipt.status} - Tx Hash: ${receipt.transactionHash}`)
56+
} else {
57+
await confirmTransaction({
58+
fromBlock,
59+
contract,
60+
destination,
61+
data,
62+
address,
63+
gasPrice
64+
})
65+
}
66+
}
67+
68+
module.exports = callMultiSigWallet
File renamed without changes.

0 commit comments

Comments
 (0)