check RETURN and REVERT instruction

pull/7/head
yann300 6 years ago
parent ad07fdb471
commit f000b5db38
  1. 4
      remix-lib/src/helpers/traceHelper.js
  2. 5
      remix-lib/src/trace/traceAnalyser.js
  3. 5
      remix-lib/src/trace/traceCache.js

@ -33,6 +33,10 @@ module.exports = {
return step.op === 'STOP'
},
isRevertInstruction: function (step) {
return step.op === 'REVERT'
},
isSSTOREInstruction: function (step) {
return step.op === 'SSTORE'
},

@ -82,9 +82,12 @@ TraceAnalyser.prototype.buildStorage = function (index, step, context) {
this.traceCache.pushStoreChanges(index + 1, context.storageContext[context.storageContext.length - 1])
} else if (traceHelper.isSSTOREInstruction(step)) {
this.traceCache.pushStoreChanges(index + 1, context.storageContext[context.storageContext.length - 1], step.stack[step.stack.length - 1], step.stack[step.stack.length - 2])
} else if (traceHelper.isReturnInstruction(step)) {
} else if (traceHelper.isReturnInstruction(step) || traceHelper.isStopInstruction(step)) {
context.storageContext.pop()
this.traceCache.pushStoreChanges(index + 1, context.storageContext[context.storageContext.length - 1])
} else if (traceHelper.isRevertInstruction(step)) {
context.storageContext.pop()
this.traceCache.resetStoreChanges()
}
return context
}

@ -82,6 +82,11 @@ TraceCache.prototype.pushContractCreation = function (token, code) {
this.contractCreation[token] = code
}
TraceCache.prototype.resetStoreChanges = function (index, address, key, value) {
this.sstore = {}
this.storageChanges = []
}
TraceCache.prototype.pushStoreChanges = function (index, address, key, value) {
this.sstore[index] = {
'address': address,

Loading…
Cancel
Save