update solidity module to use compileStandard and the standard json

This commit is contained in:
Iuri Matias 2018-01-27 15:07:48 -05:00
parent 5c5ef44f2f
commit 7a7330e695
3 changed files with 41 additions and 26 deletions

View File

@ -26,7 +26,7 @@ class Solidity {
} }
file.content(function(fileContent) { file.content(function(fileContent) {
input[filename] = fileContent; input[filename] = {content: fileContent};
fileCb(); fileCb();
}); });
}, },
@ -49,13 +49,30 @@ class Solidity {
}, },
function compileContracts(callback) { function compileContracts(callback) {
self.logger.info("compiling contracts..."); self.logger.info("compiling contracts...");
solcW.compile({sources: input}, 1, function (output) { let jsonObj = {
language: 'Solidity',
sources: input,
settings: {
optimizer: {
enabled: true,
runs: 200
},
outputSelection: {
'*': {
'*': ['abi', 'metadata', 'userdoc', 'devdoc', 'evm.legacyAssembly', 'evm.bytecode', 'evm.deployedBytecode', 'evm.methodIdentifiers', 'evm.gasEstimates']
}
}
}
};
solcW.compile(jsonObj, function (output) {
if (output.errors) { if (output.errors) {
for (let i=0; i<output.errors.length; i++) { for (let i=0; i<output.errors.length; i++) {
if (output.errors[i].indexOf('Warning:') >= 0) { if (output.errors[i].type === 'Warning') {
self.logger.warn(output.errors[i].formattedMessage);
//return callback(new Error("Solidity errors: " + output.errors).message); //return callback(new Error("Solidity errors: " + output.errors).message);
} }
if (output.errors[i].indexOf('Error:') >= 0) { if (output.errors[i].type === 'Error') {
return callback(new Error("Solidity errors: " + output.errors).message); return callback(new Error("Solidity errors: " + output.errors).message);
} }
} }
@ -77,26 +94,23 @@ class Solidity {
let compiled_object = {}; let compiled_object = {};
for (let contractName in json) { for (let contractFile in json) {
let contract = json[contractName]; for (let contractName in json[contractFile]) {
let contract = json[contractFile][contractName];
// Pull out filename:classname const className = contractName;
// [0] filename:classname const filename = contractFile;
// [1] filename
// [2] classname
const regex = /(.*):(.*)/;
const className = contractName.match(regex)[2];
const filename = contractName.match(regex)[1];
compiled_object[className] = {}; compiled_object[className] = {};
compiled_object[className].code = contract.bytecode; compiled_object[className].code = contract.evm.bytecode.object;
compiled_object[className].runtimeBytecode = contract.runtimeBytecode; compiled_object[className].runtimeBytecode = contract.evm.deployedBytecode.object;
compiled_object[className].realRuntimeBytecode = contract.runtimeBytecode.slice(0, -68); compiled_object[className].realRuntimeBytecode = contract.evm.deployedBytecode.object.slice(0, -68);
compiled_object[className].swarmHash = contract.runtimeBytecode.slice(-68).slice(0, 64); compiled_object[className].swarmHash = contract.evm.deployedBytecode.object.slice(-68).slice(0, 64);
compiled_object[className].gasEstimates = contract.gasEstimates; compiled_object[className].gasEstimates = contract.evm.gasEstimates;
compiled_object[className].functionHashes = contract.functionHashes; compiled_object[className].functionHashes = contract.evm.methodIdentifiers;
compiled_object[className].abiDefinition = JSON.parse(contract.interface); compiled_object[className].abiDefinition = contract.abi;
compiled_object[className].filename = filename; compiled_object[className].filename = filename;
}
} }
callback(null, compiled_object); callback(null, compiled_object);

View File

@ -7,7 +7,8 @@ process.on('message', function (msg) {
} }
if (msg.action === 'compile') { if (msg.action === 'compile') {
let output = solc.compile(msg.obj, msg.optimize); // TODO: only available in 0.4.11; need to make versions warn about this
let output = solc.compileStandardWrapper(JSON.stringify(msg.jsonObj));
process.send({result: "compilation", output: output}); process.send({result: "compilation", output: output});
} }
}); });

View File

@ -44,14 +44,14 @@ class SolcW {
return (compilerLoaded === true); return (compilerLoaded === true);
} }
compile(obj, optimize, done) { compile(jsonObj, done) {
solcProcess.once('message', function (msg) { solcProcess.once('message', function (msg) {
if (msg.result !== 'compilation') { if (msg.result !== 'compilation') {
return; return;
} }
done(msg.output); done(JSON.parse(msg.output));
}); });
solcProcess.send({action: 'compile', obj: obj, optimize: optimize}); solcProcess.send({action: 'compile', jsonObj: jsonObj});
} }
} }