-
Notifications
You must be signed in to change notification settings - Fork 216
/
Copy path4_deploy_modules.js
93 lines (73 loc) · 3.13 KB
/
4_deploy_modules.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
89
90
91
92
93
/* global artifacts */
global.web3 = web3;
global.artifacts = artifacts;
const childProcess = require("child_process");
const ArgentModule = artifacts.require("ArgentModule");
const ModuleRegistry = artifacts.require("ModuleRegistry");
const MultiSig = artifacts.require("MultiSigWallet");
const utils = require("../utils/utilities.js");
const deployManager = require("../utils/deploy-manager.js");
const MultisigExecutor = require("../utils/multisigexecutor.js");
// ///////////////////////////////////////////////////////
// Version 2.5
// ///////////////////////////////////////////////////////
async function main() {
const { deploymentAccount, configurator, abiUploader, versionUploader } = await deployManager.getProps();
const { config } = configurator;
const MultiSigWrapper = await MultiSig.at(config.contracts.MultiSigWallet);
const ModuleRegistryWrapper = await ModuleRegistry.at(config.contracts.ModuleRegistry);
// //////////////////////////////////
// Deploy modules
// //////////////////////////////////
const wrappers = [];
// Deploy ArgentModule
const ArgentModuleWrapper = await ArgentModule.new(
config.contracts.ModuleRegistry,
config.modules.GuardianStorage,
config.modules.TransferStorage,
config.trustlist.dappRegistry,
config.defi.uniswap.v2Router,
config.settings.securityPeriod || 0,
config.settings.securityWindow || 0,
config.settings.recoveryPeriod || 0,
config.settings.lockPeriod || 0);
console.log("Deployed ArgentModule at ", ArgentModuleWrapper.address);
wrappers.push(ArgentModuleWrapper);
// /////////////////////////////////////////////////
// Update config and Upload ABIs
// /////////////////////////////////////////////////
configurator.updateModuleAddresses({
ArgentModule: ArgentModuleWrapper.address,
});
const gitHash = childProcess.execSync("git rev-parse HEAD").toString("utf8").replace(/\n$/, "");
configurator.updateGitHash(gitHash);
await configurator.save();
await Promise.all([
abiUploader.upload(ArgentModuleWrapper, "modules"),
]);
// //////////////////////////////////
// Register and configure module wrappers
// //////////////////////////////////
const multisigExecutor = new MultisigExecutor(MultiSigWrapper, deploymentAccount, config.multisig.autosign);
for (let idx = 0; idx < wrappers.length; idx += 1) {
const wrapper = wrappers[idx];
await multisigExecutor.executeCall(ModuleRegistryWrapper, "registerModule",
[wrapper.address, utils.asciiToBytes32(wrapper.constructor.contractName)]);
}
// //////////////////////////////////
// Upload Version
// //////////////////////////////////
const modules = wrappers.map((wrapper) => ({ address: wrapper.address, name: wrapper.constructor.contractName }));
const version = {
modules,
fingerprint: utils.versionFingerprint(modules),
version: "2.5.0",
createdAt: Math.floor((new Date()).getTime() / 1000),
};
await versionUploader.upload(version);
console.log("## completed deployment script 4 ##");
}
// For truffle exec
module.exports = function (callback) {
main().then(() => callback()).catch((err) => callback(err));
};