Commit f000b5db authored by yann300's avatar yann300

check RETURN and REVERT instruction

parent ad07fdb4
...@@ -33,6 +33,10 @@ module.exports = { ...@@ -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) { ...@@ -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) { ...@@ -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,
......
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