-
Notifications
You must be signed in to change notification settings - Fork 36
/
Copy pathgenerate-contractsinfo.js
125 lines (108 loc) · 4.49 KB
/
generate-contractsinfo.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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
const fs = require("fs");
const { migrationFileLocation: defaultMigrationFileLocation, network } = require("./settings");
const { forEachTemplate } = require("./utils");
const path = require("path");
const currentDir = path.resolve(`${__dirname}`);
/**
* Generate a `src/contractinfo.js` file from `migration.json`
*/
async function generateContractInfo(opts={}) {
if (!opts.migrationFile) {
opts.migrationFile = defaultMigrationFileLocation
}
let daodir
if (opts.daodir) {
daodir = path.resolve(`${opts.daodir}/${network}/`)
} else {
daodir = path.resolve(`./daos/${network}/`)
}
let othersFile
if (opts.othersFile) {
othersFile = path.resolve(`./${opts.othersFile}`)
} else {
othersFile = path.resolve(`./ops/contract-info-others.json`)
}
const migration = JSON.parse(fs.readFileSync(require.resolve(opts.migrationFile), "utf-8"));
let versions = migration[network].base
let buffer = "import {\n setBlacklistedDAO,\n setContractInfo,\n setTemplateInfo,\n} from './utils';\n";
buffer += "\n// this code was generated automatically . please not edit it -:)\n";
buffer += "/* tslint:disable:max-line-length */\n";
buffer += "export function setContractsInfo(): void {\n";
let contractsAddresses = {};
for (var version in versions) {
if (versions.hasOwnProperty(version)) {
let addresses = migration[network].base[version];
for (var name in addresses) {
if (addresses.hasOwnProperty(name)) {
if(!contractsAddresses[addresses[name]]) {
buffer += " setContractInfo("+"'"+addresses[name].toLowerCase()+"'"+", " +"'"+name+"'"+", "+"'"+name+"', "+"'"+version+"'"+");\n";
}
contractsAddresses[addresses[name]] = true;
}
}
}
}
const others = JSON.parse(fs.readFileSync(othersFile, "utf-8"))[network];
if (others) {
for (let contract of others) {
if (!contractsAddresses[contract.address.toLowerCase()]) {
buffer += " setContractInfo("+"'"+contract.address.toLowerCase()+"'"+", " +"'"+contract.name+"'"+", "+"'"+ (contract.alias ? contract.alias : contract.name) +"', "+"'"+contract.arcVersion+"'"+");\n";
}
contractsAddresses[contract.address.toLowerCase()] = true;
}
}
fs.readdir(daodir, function(err, files) {
if (err) {
console.error("Could not list the directory.", err);
process.exit(1);
}
files.forEach(function(file) {
const dao = JSON.parse(fs.readFileSync(daodir + '/' + file, "utf-8"));
if (dao.Schemes !== undefined) {
for (var i = 0, len = dao.Schemes.length; i < len; i++) {
var scheme = dao.Schemes[i];
if (!contractsAddresses[scheme.address.toLowerCase()]) {
buffer += " setContractInfo("+"'"+scheme.address.toLowerCase()+"'"+", " +"'"+scheme.name+"'"+", "+"'"+ scheme.alias +"', "+"'"+(scheme.arcVersion ? scheme.arcVersion : dao.arcVersion)+"'"+");\n";
}
contractsAddresses[scheme.address.toLowerCase()] = true;
}
}
if (dao.StandAloneContracts !== undefined) {
for (var j = 0; j < dao.StandAloneContracts.length; j++) {
var saContract = dao.StandAloneContracts[j];
if (!contractsAddresses[saContract.address.toLowerCase()]) {
buffer += " setContractInfo("+"'"+saContract.address.toLowerCase()+"'"+", " +"'"+saContract.name+"'"+", "+"'"+ (saContract.alias ? saContract.alias : saContract.name) +"', "+"'"+(saContract.arcVersion ? saContract.arcVersion : dao.arcVersion)+"'"+");\n";
}
contractsAddresses[saContract.address.toLowerCase()] = true;
}
}
});
buffer += "}\n";
buffer += "\nexport function setTemplatesInfo(): void {\n";
forEachTemplate((name, mapping, arcVersion) => {
const templateName = arcVersion.replace(/\.|-/g, '_');
buffer += ` setTemplateInfo('${name}', '${arcVersion}', '${name}_${templateName}');\n`;
});
buffer += "}\n";
const blacklist = require("./blacklist.json")[network];
buffer += "\nexport function setBlacklistedDAOs(): void {\n";
blacklist.forEach(function(avatar) {
buffer += ` setBlacklistedDAO('${avatar.toLowerCase()}');\n`;
});
buffer += " return;\n";
buffer += "}\n";
fs.writeFileSync(
`${currentDir}/../src/contractsInfo.ts`,
buffer,
"utf-8"
);
});
}
if (require.main === module) {
generateContractInfo().catch(err => {
console.log(err);
process.exit(1);
});
} else {
module.exports = generateContractInfo;
}