Commit f000b5db authored by yann300's avatar yann300

check RETURN and REVERT instruction

parent ad07fdb4
......@@ -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,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment