|
|
|
@ -148,9 +148,34 @@ module.exports = { |
|
|
|
|
*/ |
|
|
|
|
swarmHashExtraction: function () { |
|
|
|
|
return /a165627a7a72305820([0-9a-f]{64})0029$/ |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Compare bytecode. return true if the code is equal (handle swarm hash and library references) |
|
|
|
|
* @param {String} code2 - the bytecode that is actually deployed (contains resolved library reference and a potentially different swarmhash) |
|
|
|
|
* @param {String} code1 - the bytecode generated by the compiler (contains unresolved library reference and a potentially different swarmhash) |
|
|
|
|
* |
|
|
|
|
* @return {bool} |
|
|
|
|
*/ |
|
|
|
|
compareByteCode: function (code1, code2) { |
|
|
|
|
var pos = -1 |
|
|
|
|
while ((pos = code2.search(/__(.*)__/)) !== -1) { |
|
|
|
|
code2 = replaceLibReference(code2, pos) |
|
|
|
|
code1 = replaceLibReference(code1, pos) |
|
|
|
|
} |
|
|
|
|
code1 = code1.replace(this.swarmHashExtraction(), '') |
|
|
|
|
code2 = code2.replace(this.swarmHashExtraction(), '') |
|
|
|
|
if (code1 && code2 && code1.indexOf(code2) === 0) { |
|
|
|
|
return true |
|
|
|
|
} |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function replaceLibReference (code, pos) { |
|
|
|
|
return code.substring(0, pos) + '0000000000000000000000000000000000000000' + code.substring(pos + 40) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function buildCallPath (index, rootCall) { |
|
|
|
|
var ret = [] |
|
|
|
|
findCallInternal(index, rootCall, ret) |
|
|
|
|