Merge pull request #525 from ethereum/fixLibReference

Fix source location highlight for code that use sol lib
pull/7/head
yann300 7 years ago committed by GitHub
commit fae944fcd5
  1. 2
      src/code/sourceLocationTracker.js
  2. 25
      src/helpers/util.js
  3. 2
      src/solidity/solidityProxy.js

@ -68,7 +68,7 @@ function getSourceMap (address, code, contracts) {
var isCreation = helper.isContractCreation(address)
var byteProp = isCreation ? 'bytecode' : 'runtimeBytecode'
for (var k in contracts) {
if (contracts[k][byteProp] && code.replace(util.swarmHashExtraction(), '').indexOf('0x' + contracts[k][byteProp].replace(util.swarmHashExtraction(), '')) === 0) {
if (util.compareByteCode(code, '0x' + contracts[k][byteProp])) {
return isCreation ? contracts[k].srcmap : srcmapRuntime(contracts[k])
}
}

@ -148,7 +148,32 @@ 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} code1 - the bytecode that is actually deployed (contains resolved library reference and a potentially different swarmhash)
* @param {String} code2 - 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) {

@ -137,7 +137,7 @@ function contractNameFromCode (contracts, code, address) {
var isCreation = traceHelper.isContractCreation(address)
var byteProp = isCreation ? 'bytecode' : 'runtimeBytecode'
for (var k in contracts) {
if (code.replace(util.swarmHashExtraction(), '').indexOf('0x' + contracts[k][byteProp].replace(util.swarmHashExtraction(), '')) === 0) {
if (util.compareByteCode(code, '0x' + contracts[k][byteProp])) {
return k
}
}

Loading…
Cancel
Save