63 lines
1.4 KiB
JavaScript
63 lines
1.4 KiB
JavaScript
const path = require('path');
|
|
const fs = require('fs-extra');
|
|
const solc = require('solc');
|
|
|
|
const contractsPath = path.resolve(__dirname, '../', 'contracts');
|
|
|
|
function buildSources() {
|
|
const sources = {};
|
|
const contractsFiles = fs.readdirSync(contractsPath);
|
|
contractsFiles.forEach(file => {
|
|
if(file.endsWith(".sol")){
|
|
const contractFullPath = path.resolve(contractsPath, file);
|
|
sources[file] = {
|
|
content: fs.readFileSync(contractFullPath, 'utf8')
|
|
};
|
|
}
|
|
});
|
|
return sources;
|
|
}
|
|
|
|
const input = {
|
|
language: 'Solidity',
|
|
sources: buildSources(),
|
|
settings: {
|
|
outputSelection: {
|
|
'*': {
|
|
'*': [ '*', 'evm.bytecode' ]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function compileContracts() {
|
|
const stringifiedJson = JSON.stringify(input);
|
|
console.log(stringifiedJson)
|
|
const compilationResult = solc.compile(stringifiedJson);
|
|
console.log(compilationResult)
|
|
const output = JSON.parse(compilationResult);
|
|
console.log(output)
|
|
const compiledContracts = output.contracts;
|
|
for (let contract in compiledContracts) {
|
|
for(let contractName in compiledContracts[contract]) {
|
|
console.log(contract)
|
|
fs.outputJsonSync(
|
|
path.resolve(contractsPath, `${contractName}.json`),
|
|
compiledContracts[contract][contractName], { spaces: 2 }
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
const main = () => {
|
|
compileContracts();
|
|
}
|
|
|
|
if (require.main === module) {
|
|
main();
|
|
}
|
|
|
|
module.exports = exports = main
|
|
|
|
|