@@ -129,14 +129,21 @@ class Solidity {
129
129
130
130
for ( let contractFile in json ) {
131
131
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
+ }
132
140
let contract = json [ contractFile ] [ contractName ] ;
133
141
134
- const className = contractName ;
135
- let filename = contractFile ;
142
+ let filename = realContractFile ;
136
143
137
144
compiled_object [ className ] = { } ;
138
145
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 ) ;
140
147
compiled_object [ className ] . runtimeBytecode = contract . evm . deployedBytecode . object ;
141
148
compiled_object [ className ] . realRuntimeBytecode = contract . evm . deployedBytecode . object . slice ( 0 , - 68 ) ;
142
149
compiled_object [ className ] . swarmHash = contract . evm . deployedBytecode . object . slice ( - 68 ) . slice ( 0 , 64 ) ;
@@ -157,6 +164,26 @@ class Solidity {
157
164
} ) ;
158
165
}
159
166
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
+
160
187
compile_solidity ( contractFiles , options , cb ) {
161
188
if ( ! contractFiles . length ) {
162
189
return cb ( ) ;
0 commit comments