adding `retrieveTrace` to the remix-plugin API

pull/3094/head
yann300 5 years ago
parent 117f9c2be3
commit 0a27120608
  1. 8
      src/app/tabs/debugger-tab.js
  2. 69
      src/app/tabs/debugger/debuggerUI.js

@ -9,7 +9,7 @@ import * as packageJson from '../../../package.json'
const profile = { const profile = {
name: 'debugger', name: 'debugger',
displayName: 'Debugger', displayName: 'Debugger',
methods: ['debug'], methods: ['debug', 'retrieveTrace'],
events: [], events: [],
icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNjk2IDk2MHEwIDI2LTE5IDQ1dC00NSAxOWgtMjI0cTAgMTcxLTY3IDI5MGwyMDggMjA5cTE5IDE5IDE5IDQ1dC0xOSA0NXEtMTggMTktNDUgMTl0LTQ1LTE5bC0xOTgtMTk3cS01IDUtMTUgMTN0LTQyIDI4LjUtNjUgMzYuNS04MiAyOS05NyAxM3YtODk2aC0xMjh2ODk2cS01MSAwLTEwMS41LTEzLjV0LTg3LTMzLTY2LTM5LTQzLjUtMzIuNWwtMTUtMTQtMTgzIDIwN3EtMjAgMjEtNDggMjEtMjQgMC00My0xNi0xOS0xOC0yMC41LTQ0LjV0MTUuNS00Ni41bDIwMi0yMjdxLTU4LTExNC01OC0yNzRoLTIyNHEtMjYgMC00NS0xOXQtMTktNDUgMTktNDUgNDUtMTloMjI0di0yOTRsLTE3My0xNzNxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5IDQ1IDE5bDE3MyAxNzNoODQ0bDE3My0xNzNxMTktMTkgNDUtMTl0NDUgMTkgMTkgNDUtMTkgNDVsLTE3MyAxNzN2Mjk0aDIyNHEyNiAwIDQ1IDE5dDE5IDQ1em0tNDgwLTU3NmgtNjQwcTAtMTMzIDkzLjUtMjI2LjV0MjI2LjUtOTMuNSAyMjYuNSA5My41IDkzLjUgMjI2LjV6Ii8+PC9zdmc+', icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNjk2IDk2MHEwIDI2LTE5IDQ1dC00NSAxOWgtMjI0cTAgMTcxLTY3IDI5MGwyMDggMjA5cTE5IDE5IDE5IDQ1dC0xOSA0NXEtMTggMTktNDUgMTl0LTQ1LTE5bC0xOTgtMTk3cS01IDUtMTUgMTN0LTQyIDI4LjUtNjUgMzYuNS04MiAyOS05NyAxM3YtODk2aC0xMjh2ODk2cS01MSAwLTEwMS41LTEzLjV0LTg3LTMzLTY2LTM5LTQzLjUtMzIuNWwtMTUtMTQtMTgzIDIwN3EtMjAgMjEtNDggMjEtMjQgMC00My0xNi0xOS0xOC0yMC41LTQ0LjV0MTUuNS00Ni41bDIwMi0yMjdxLTU4LTExNC01OC0yNzRoLTIyNHEtMjYgMC00NS0xOXQtMTktNDUgMTktNDUgNDUtMTloMjI0di0yOTRsLTE3My0xNzNxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5IDQ1IDE5bDE3MyAxNzNoODQ0bDE3My0xNzNxMTktMTkgNDUtMTl0NDUgMTkgMTkgNDUtMTkgNDVsLTE3MyAxNzN2Mjk0aDIyNHEyNiAwIDQ1IDE5dDE5IDQ1em0tNDgwLTU3NmgtNjQwcTAtMTMzIDkzLjUtMjI2LjV0MjI2LjUtOTMuNSAyMjYuNSA5My41IDkzLjUgMjI2LjV6Ii8+PC9zdmc+',
description: 'Debug transactions', description: 'Debug transactions',
@ -38,7 +38,11 @@ class DebuggerTab extends ViewPlugin {
} }
debug (hash) { debug (hash) {
if (this.debugger) this.debuggerUI.debug(hash) if (this.debuggerUI) this.debuggerUI.debug(hash)
}
async retrieveTrace (hash) {
return await this.debuggerUI.retrieveTrace(hash)
} }
debugger () { debugger () {

@ -103,7 +103,23 @@ class DebuggerUI {
return this.isActive return this.isActive
} }
startDebugging (blockNumber, txNumber, tx) { async getDebugWeb3 () {
return new Promise((resolve, reject) => {
executionContext.detectNetwork((error, network) => {
let web3
if (error || !network) {
web3 = init.web3DebugNode(executionContext.web3())
} else {
var webDebugNode = init.web3DebugNode(network.name)
web3 = (!webDebugNode ? executionContext.web3() : webDebugNode)
}
init.extendWeb3(web3)
resolve(web3)
})
})
}
async startDebugging (blockNumber, txNumber, tx) {
const self = this const self = this
if (this.debugger) this.unLoad() if (this.debugger) this.unLoad()
@ -111,30 +127,41 @@ class DebuggerUI {
let lastCompilationResult let lastCompilationResult
if (compilers['__last']) lastCompilationResult = compilers['__last'] if (compilers['__last']) lastCompilationResult = compilers['__last']
executionContext.detectNetwork((error, network) => { let web3 = await this.getDebugWeb3()
let web3 this.debugger = new Debugger({
if (error || !network) { web3,
web3 = init.web3DebugNode(executionContext.web3()) offsetToLineColumnConverter: this.registry.get('offsettolinecolumnconverter').api,
} else { compiler: { lastCompilationResult }
var webDebugNode = init.web3DebugNode(network.name) })
web3 = (!webDebugNode ? executionContext.web3() : webDebugNode)
} this.listenToEvents()
init.extendWeb3(web3) this.debugger.debug(blockNumber, txNumber, tx, () => {
this.debugger = new Debugger({ self.stepManager = new StepManagerUI(this.debugger.step_manager)
self.vmDebugger = new VmDebugger(this.debugger.vmDebuggerLogic)
self.txBrowser.setState({ blockNumber, txNumber, debugging: true })
self.renderDebugger()
}).catch((error) => {
toaster(error)
this.unLoad()
})
}
async retrieveTrace (hash) {
return new Promise(async (resolve, reject) => {
let compilers = this.registry.get('compilersartefacts').api
let lastCompilationResult
if (compilers['__last']) lastCompilationResult = compilers['__last']
let web3 = await this.getDebugWeb3()
let debug = new Debugger({
web3, web3,
offsetToLineColumnConverter: this.registry.get('offsettolinecolumnconverter').api, offsetToLineColumnConverter: this.registry.get('offsettolinecolumnconverter').api,
compiler: { lastCompilationResult } compiler: { lastCompilationResult }
}) })
debug.debugger.traceManager.traceRetriever.getTrace(hash, (error, trace) => {
this.listenToEvents() if (error) return reject(error)
this.debugger.debug(blockNumber, txNumber, tx, () => { resolve(trace)
self.stepManager = new StepManagerUI(this.debugger.step_manager)
self.vmDebugger = new VmDebugger(this.debugger.vmDebuggerLogic)
self.txBrowser.setState({ blockNumber, txNumber, debugging: true })
self.renderDebugger()
}).catch((error) => {
toaster(error)
this.unLoad()
}) })
}) })
} }

Loading…
Cancel
Save