@@ -4,7 +4,11 @@ function libraryHashPlaceholder (input) {
4
4
return '$' + keccak256 ( input ) . slice ( 0 , 34 ) + '$' ;
5
5
}
6
6
7
- var linkBytecode = function ( bytecode , libraries ) {
7
+ var linkBytecode = function ( bytecode , libraries , linkReferences ) {
8
+ if ( typeof linkReferences === typeof '' || linkReferences === null || linkReferences === undefined ) {
9
+ linkReferences = findLinkReferences ( bytecode ) ;
10
+ }
11
+
8
12
// NOTE: for backwards compatibility support old compiler which didn't use file names
9
13
var librariesComplete = { } ;
10
14
for ( var libraryName in libraries ) {
@@ -35,7 +39,7 @@ var linkBytecode = function (bytecode, libraries) {
35
39
36
40
// Support old (library name) and new (hash of library name)
37
41
// placeholders.
38
- var replace = function ( name ) {
42
+ var findAndReplace = function ( name ) {
39
43
// truncate to 37 characters
40
44
var truncatedName = name . slice ( 0 , 36 ) ;
41
45
var libLabel = '__' + truncatedName + Array ( 37 - truncatedName . length ) . join ( '_' ) + '__' ;
@@ -44,6 +48,21 @@ var linkBytecode = function (bytecode, libraries) {
44
48
}
45
49
} ;
46
50
51
+ var replace = function ( name ) {
52
+ // truncate to 37 characters
53
+ var truncatedName = name . slice ( 0 , 36 ) ;
54
+ if ( linkReferences && linkReferences [ truncatedName ] ) {
55
+ linkReferences [ truncatedName ] . forEach ( function ( reference ) {
56
+ var start = reference . start * 2 ;
57
+ var end = ( reference . start + reference . length ) * 2 ;
58
+ bytecode = bytecode . slice ( 0 , start ) + hexAddress + bytecode . slice ( end ) ;
59
+ } ) ;
60
+ } else {
61
+ // manually find and replace if link reference is not present
62
+ findAndReplace ( name ) ;
63
+ }
64
+ } ;
65
+
47
66
replace ( libraryName ) ;
48
67
replace ( libraryHashPlaceholder ( libraryName ) ) ;
49
68
}
0 commit comments