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' return step.op === 'STOP'
}, },
isRevertInstruction: function (step) {
return step.op === 'REVERT'
},
isSSTOREInstruction: function (step) { isSSTOREInstruction: function (step) {
return step.op === 'SSTORE' 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]) this.traceCache.pushStoreChanges(index + 1, context.storageContext[context.storageContext.length - 1])
} else if (traceHelper.isSSTOREInstruction(step)) { } 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]) 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() context.storageContext.pop()
this.traceCache.pushStoreChanges(index + 1, context.storageContext[context.storageContext.length - 1]) this.traceCache.pushStoreChanges(index + 1, context.storageContext[context.storageContext.length - 1])
} else if (traceHelper.isRevertInstruction(step)) {
context.storageContext.pop()
this.traceCache.resetStoreChanges()
} }
return context return context
} }

@ -82,6 +82,11 @@ TraceCache.prototype.pushContractCreation = function (token, code) {
this.contractCreation[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) { TraceCache.prototype.pushStoreChanges = function (index, address, key, value) {
this.sstore[index] = { this.sstore[index] = {
'address': address, 'address': address,

Loading…
Cancel
Save