Skip to content

Commit bfebb3c

Browse files
jrainvilleiurimatias
authored andcommitted
fix(embark/compiler): fix errors and bugs with solc 0.4.18
1 parent eb9de68 commit bfebb3c

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

packages/embark/src/lib/modules/solidity/index.js

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,14 +129,21 @@ class Solidity {
129129

130130
for (let contractFile in json) {
131131
for (let contractName in json[contractFile]) {
132+
let className = contractName;
133+
let realContractFile = contractFile;
134+
// This is for solc 0.4.18 which outputs weirdly
135+
if (className.indexOf(':') > -1) {
136+
const nameParts = className.split(':');
137+
realContractFile += nameParts[0];
138+
className = nameParts[nameParts.length - 1];
139+
}
132140
let contract = json[contractFile][contractName];
133141

134-
const className = contractName;
135-
let filename = contractFile;
142+
let filename = realContractFile;
136143

137144
compiled_object[className] = {};
138145
compiled_object[className].code = contract.evm.bytecode.object;
139-
compiled_object[className].linkReferences = contract.evm.bytecode.linkReferences;
146+
compiled_object[className].linkReferences = self.getLinkReferences(contract.evm.bytecode.linkReferences);
140147
compiled_object[className].runtimeBytecode = contract.evm.deployedBytecode.object;
141148
compiled_object[className].realRuntimeBytecode = contract.evm.deployedBytecode.object.slice(0, -68);
142149
compiled_object[className].swarmHash = contract.evm.deployedBytecode.object.slice(-68).slice(0, 64);
@@ -157,6 +164,26 @@ class Solidity {
157164
});
158165
}
159166

167+
getLinkReferences(linkReferences) {
168+
const finalReferences = {};
169+
for (let contractFile in linkReferences) {
170+
for (let contractName in linkReferences[contractFile]) {
171+
let className = contractName;
172+
let realContractFile = contractFile;
173+
if (className.indexOf(':') > -1) {
174+
const nameParts = className.split(':');
175+
realContractFile += nameParts[0];
176+
className = nameParts[nameParts.length - 1];
177+
}
178+
if (!finalReferences[realContractFile]) {
179+
finalReferences[realContractFile] = {};
180+
}
181+
finalReferences[realContractFile][className] = linkReferences[contractFile][contractName];
182+
}
183+
}
184+
return finalReferences;
185+
}
186+
160187
compile_solidity(contractFiles, options, cb) {
161188
if (!contractFiles.length) {
162189
return cb();

packages/embark/src/lib/modules/solidity/solcP.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class SolcProcess extends ProcessWrapper {
5757
let output = func(JSON.stringify(jsonObj), this.findImports.bind(this));
5858
cb(null, output);
5959
} catch (err) {
60-
cb(err.message);
60+
cb(err.message || err);
6161
}
6262
}
6363

0 commit comments

Comments
 (0)