Skip to content

Commit 94f8bdb

Browse files
authored
Merge pull request #150 from ethereum/linker
Split linker helper into its own file
2 parents f512e43 + 8aaa01e commit 94f8bdb

File tree

2 files changed

+28
-24
lines changed

2 files changed

+28
-24
lines changed

linker.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
var linkBytecode = function (bytecode, libraries) {
2+
for (var libraryName in libraries) {
3+
// truncate to 37 characters
4+
var internalName = libraryName.slice(0, 36);
5+
// prefix and suffix with __
6+
var libLabel = '__' + internalName + Array(37 - internalName.length).join('_') + '__';
7+
8+
var hexAddress = libraries[libraryName];
9+
if (hexAddress.slice(0, 2) !== '0x' || hexAddress.length > 42) {
10+
throw new Error('Invalid address specified for ' + libraryName);
11+
}
12+
// remove 0x prefix
13+
hexAddress = hexAddress.slice(2);
14+
hexAddress = Array(40 - hexAddress.length + 1).join('0') + hexAddress;
15+
16+
while (bytecode.indexOf(libLabel) >= 0) {
17+
bytecode = bytecode.replace(libLabel, hexAddress);
18+
}
19+
}
20+
21+
return bytecode;
22+
};
23+
24+
module.exports = {
25+
linkBytecode: linkBytecode
26+
};

wrapper.js

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
var translate = require('./translate.js');
2+
var linker = require('./linker.js');
23
var requireFromString = require('require-from-string');
34
var https = require('https');
45
var MemoryStream = require('memorystream');
@@ -153,29 +154,6 @@ function setupMethods (soljson) {
153154
return translateOutput(compileJSON(sources[0], isOptimizerEnabled(input)));
154155
};
155156

156-
var linkBytecode = function (bytecode, libraries) {
157-
for (var libraryName in libraries) {
158-
// truncate to 37 characters
159-
var internalName = libraryName.slice(0, 36);
160-
// prefix and suffix with __
161-
var libLabel = '__' + internalName + Array(37 - internalName.length).join('_') + '__';
162-
163-
var hexAddress = libraries[libraryName];
164-
if (hexAddress.slice(0, 2) !== '0x' || hexAddress.length > 42) {
165-
throw new Error('Invalid address specified for ' + libraryName);
166-
}
167-
// remove 0x prefix
168-
hexAddress = hexAddress.slice(2);
169-
hexAddress = Array(40 - hexAddress.length + 1).join('0') + hexAddress;
170-
171-
while (bytecode.indexOf(libLabel) >= 0) {
172-
bytecode = bytecode.replace(libLabel, hexAddress);
173-
}
174-
}
175-
176-
return bytecode;
177-
};
178-
179157
var version = soljson.cwrap('version', 'string', []);
180158

181159
var license = function () {
@@ -192,7 +170,7 @@ function setupMethods (soljson) {
192170
compile: compile,
193171
compileStandard: compileStandard,
194172
compileStandardWrapper: compileStandardWrapper,
195-
linkBytecode: linkBytecode,
173+
linkBytecode: linker.linkBytecode,
196174
supportsMulti: compileJSONMulti !== null,
197175
supportsImportCallback: compileJSONCallback !== null,
198176
supportsStandard: compileStandard !== null,

0 commit comments

Comments
 (0)