-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathsetup.js
88 lines (75 loc) · 3.51 KB
/
setup.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
const fs = require('fs');
const ethers = require('ethers');
const { mine } = require('./helpers');
const { generatedConfigPath } = require('./getEnv');
const setValidator = require('leap-guardian/scripts/setValidator')
module.exports.setupValidators = async (
{ contracts, nodes, wallet, accounts, plasmaWallet, networkConfig }
) => {
const msg = `\r${' '.repeat(100)}\rSetting up nodes...`;
for (let i = 0; i < nodes.length; i++) {
const validatorInfo = await nodes[i].getValidatorInfo();
await setValidator(i, validatorInfo.tendermintAddress, validatorInfo.ethAddress, 0, {
plasmaWallet, nodeConfig: networkConfig, rootWallet: wallet
});
}
process.stdout.write(`${msg} set epoch length`);
data = contracts.operator.interface.functions.setEpochLength.encode([nodes.length]);
await mine(
contracts.governance.propose(
contracts.operator.address, data,
{
gasLimit: 2000000
}
)
);
process.stdout.write(`${msg} finalize`);
await mine(contracts.governance.finalize({ gasLimit: 2000000 }));
process.stdout.write(`${msg} done\n`);
};
module.exports.setupPlasma = async ({ contracts, accounts, wallet }) => {
const alice = accounts[0].addr;
const msg = `\r${' '.repeat(100)}\rSetting up plasma contracts...`;
let data;
const noHeartbeat = !!process.argv.find(a => a === '--noHeartbeat');
if (!noHeartbeat) {
process.stdout.write(`${msg} mint heartbeat token`);
const heartbeatColor = 32769;
const heartbeatToken = require('../build/contracts/build/contracts/HeartbeatToken');
const { abi, bytecode } = heartbeatToken;
const hbtFactory = new ethers.ContractFactory(abi, bytecode, wallet);
const { contractAddress } = await hbtFactory.deploy().then(({ deployTransaction }) => deployTransaction.wait());
process.stdout.write(`${msg} register heartbeat token`);
data = contracts.exitHandler.interface.functions.registerToken.encode([contractAddress, 1]);
await mine(contracts.governance.propose(contracts.exitHandler.address, data));
data = contracts.operator.interface.functions.setHeartbeatParams.encode([1, heartbeatColor]);
await mine(contracts.governance.propose(contracts.operator.address, data));
await mine(contracts.governance.finalize());
const config = require(generatedConfigPath);
config.heartbeat = { color: heartbeatColor, filter: false };
fs.writeFileSync(generatedConfigPath, JSON.stringify(config, null, 2));
}
process.stdout.write(`${msg} add minter`);
data = contracts.token.interface.functions.addMinter.encode([alice]);
await mine(contracts.governance.propose(contracts.token.address, data, { gasLimit: 2000000 }));
await mine(contracts.governance.finalize());
process.stdout.write(`${msg} mint token`);
await mine(contracts.token.mint(alice, '500000000000000000000'));
process.stdout.write(`${msg} set allowance for exitHandler`);
await mine(contracts.token.approve(contracts.exitHandler.address, '500000000000000000000'));
process.stdout.write(`${msg} set allowance for operator`);
await mine(contracts.token.approve(contracts.operator.address, '500000000000000000000'));
process.stdout.write(`${msg} set exit duration`);
data = contracts.exitHandler.interface.functions.setExitDuration.encode([0]);
await mine(
contracts.governance.propose(
contracts.exitHandler.address, data,
{
gasLimit: 2000000
}
)
);
process.stdout.write(`${msg} finalize`);
await mine(contracts.governance.finalize({ gasLimit: 2000000 }));
process.stdout.write(`${msg} done\n`);
}