Skip to content

Commit 451b21f

Browse files
arthcpaxic
authored andcommitted
Replace library reference using linkReferences
1 parent 2480e79 commit 451b21f

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

linker.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ function libraryHashPlaceholder (input) {
44
return '$' + keccak256(input).slice(0, 34) + '$';
55
}
66

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+
812
// NOTE: for backwards compatibility support old compiler which didn't use file names
913
var librariesComplete = {};
1014
for (var libraryName in libraries) {
@@ -35,7 +39,7 @@ var linkBytecode = function (bytecode, libraries) {
3539

3640
// Support old (library name) and new (hash of library name)
3741
// placeholders.
38-
var replace = function (name) {
42+
var findAndReplace = function (name) {
3943
// truncate to 37 characters
4044
var truncatedName = name.slice(0, 36);
4145
var libLabel = '__' + truncatedName + Array(37 - truncatedName.length).join('_') + '__';
@@ -44,6 +48,21 @@ var linkBytecode = function (bytecode, libraries) {
4448
}
4549
};
4650

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+
4766
replace(libraryName);
4867
replace(libraryHashPlaceholder(libraryName));
4968
}

0 commit comments

Comments
 (0)