Skip to content

Commit 249a9b2

Browse files
committed
Replace library reference using linkReferences
1 parent 414dea6 commit 249a9b2

File tree

1 file changed

+23
-2
lines changed

1 file changed

+23
-2
lines changed

linker.js

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@ function libraryHashPlaceholder (input) {
88
return '$' + keccak256(input).toString('hex').slice(0, 34) + '$';
99
}
1010

11-
var linkBytecode = function (bytecode, libraries) {
11+
var linkBytecode = function (bytecode, libraries, linkReferences) {
12+
13+
if (typeof linkReferences === typeof '' || linkReferences === null || linkReferences === undefined) {
14+
linkReferences = findLinkReferences(bytecode);
15+
}
16+
1217
// NOTE: for backwards compatibility support old compiler which didn't use file names
1318
var librariesComplete = {};
1419
for (var libraryName in libraries) {
@@ -39,7 +44,7 @@ var linkBytecode = function (bytecode, libraries) {
3944

4045
// Support old (library name) and new (hash of library name)
4146
// placeholders.
42-
var replace = function (name) {
47+
var findAndReplace = function (name) {
4348
// truncate to 37 characters
4449
var truncatedName = name.slice(0, 36);
4550
var libLabel = '__' + truncatedName + Array(37 - truncatedName.length).join('_') + '__';
@@ -48,6 +53,22 @@ var linkBytecode = function (bytecode, libraries) {
4853
}
4954
};
5055

56+
var replace = function (name) {
57+
// truncate to 37 characters
58+
var truncatedName = name.slice(0, 36);
59+
if (linkReferences && linkReferences[truncatedName]) {
60+
linkReferences[truncatedName].forEach(function (reference) {
61+
var start = reference.start * 2;
62+
var end = (reference.start + reference.length) * 2;
63+
bytecode = bytecode.slice(0, start) + hexAddress + bytecode.slice(end);
64+
});
65+
66+
} else {
67+
// manually find and replace if link reference is not present
68+
findAndReplace(name);
69+
}
70+
}
71+
5172
replace(libraryName);
5273
replace(libraryHashPlaceholder(libraryName));
5374
}

0 commit comments

Comments
 (0)