diff --git a/src/app/debugger/remix-debugger/src/ui/styles/basicStyles.js b/src/app/debugger/debuggerUI/styles/basicStyles.js similarity index 100% rename from src/app/debugger/remix-debugger/src/ui/styles/basicStyles.js rename to src/app/debugger/debuggerUI/styles/basicStyles.js diff --git a/src/app/debugger/remix-debugger/src/ui/styles/dropdownPanel.js b/src/app/debugger/debuggerUI/styles/dropdownPanel.js similarity index 100% rename from src/app/debugger/remix-debugger/src/ui/styles/dropdownPanel.js rename to src/app/debugger/debuggerUI/styles/dropdownPanel.js diff --git a/src/app/debugger/remix-debugger/src/ui/styles/sliderStyles.js b/src/app/debugger/debuggerUI/styles/sliderStyles.js similarity index 100% rename from src/app/debugger/remix-debugger/src/ui/styles/sliderStyles.js rename to src/app/debugger/debuggerUI/styles/sliderStyles.js diff --git a/src/app/debugger/remix-debugger/src/ui/styles/treeView.js b/src/app/debugger/debuggerUI/styles/treeView.js similarity index 100% rename from src/app/debugger/remix-debugger/src/ui/styles/treeView.js rename to src/app/debugger/debuggerUI/styles/treeView.js diff --git a/src/app/debugger/debuggerUI/vmDebugger/CodeListView.js b/src/app/debugger/debuggerUI/vmDebugger/CodeListView.js index 01d7e42354..505302cc8a 100644 --- a/src/app/debugger/debuggerUI/vmDebugger/CodeListView.js +++ b/src/app/debugger/debuggerUI/vmDebugger/CodeListView.js @@ -1,5 +1,5 @@ 'use strict' -var style = require('../../remix-debugger/src/ui/styles/basicStyles') +var style = require('../styles/basicStyles') var yo = require('yo-yo') var remixLib = require('remix-lib') var DropdownPanel = require('./DropdownPanel') diff --git a/src/app/debugger/remix-debugger/src/ui/ButtonNavigator.js b/src/app/debugger/remix-debugger/src/ui/ButtonNavigator.js deleted file mode 100644 index ef0aca9aef..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/ButtonNavigator.js +++ /dev/null @@ -1,184 +0,0 @@ -'use strict' -var remixLib = require('remix-lib') -var EventManager = remixLib.EventManager -var yo = require('yo-yo') - -var csjs = require('csjs-inject') -var styleGuide = require('../../../../ui/styles-guide/theme-chooser') -var styles = styleGuide.chooser() - -var css = csjs` - .buttons { - display: flex; - flex-wrap: wrap; - } - .stepButtons { - width: 100%; - display: flex; - justify-content: center; - } - .stepButton { - ${styles.rightPanel.debuggerTab.button_Debugger} - } - .jumpButtons { - width: 100%; - display: flex; - justify-content: center; - } - .jumpButton { - ${styles.rightPanel.debuggerTab.button_Debugger} - } - .navigator { - color: ${styles.rightPanel.debuggerTab.text_Primary}; - } - .navigator:hover { - color: ${styles.rightPanel.debuggerTab.button_Debugger_icon_HoverColor}; - } -` - -function ButtonNavigator (_parent, _traceManager) { - this.event = new EventManager() - this.intoBackDisabled = true - this.overBackDisabled = true - this.intoForwardDisabled = true - this.overForwardDisabled = true - this.jumpOutDisabled = true - this.jumpNextBreakpointDisabled = true - this.jumpPreviousBreakpointDisabled = true - - this.traceManager = _traceManager - this.currentCall = null - this.revertionPoint = null - - _parent.event.register('indexChanged', this, (index) => { - if (!this.view) return - if (index < 0) return - if (_parent.currentStepIndex !== index) return - - this.traceManager.buildCallPath(index, (error, callsPath) => { - if (error) { - console.log(error) - resetWarning(this) - } else { - this.currentCall = callsPath[callsPath.length - 1] - if (this.currentCall.reverted) { - this.revertionPoint = this.currentCall.return - this.view.querySelector('#reverted').style.display = 'block' - this.view.querySelector('#reverted #outofgas').style.display = this.currentCall.outOfGas ? 'inline' : 'none' - this.view.querySelector('#reverted #parenthasthrown').style.display = 'none' - } else { - var k = callsPath.length - 2 - while (k >= 0) { - var parent = callsPath[k] - if (parent.reverted) { - this.revertionPoint = parent.return - this.view.querySelector('#reverted').style.display = 'block' - this.view.querySelector('#reverted #parenthasthrown').style.display = parent ? 'inline' : 'none' - this.view.querySelector('#reverted #outofgas').style.display = 'none' - return - } - k-- - } - resetWarning(this) - } - } - }) - }) - - this.view -} - -module.exports = ButtonNavigator - -ButtonNavigator.prototype.render = function () { - var self = this - var view = yo`
-
- - - - -
- -
- - - -
- -
` - if (!this.view) { - this.view = view - } - return view -} - -ButtonNavigator.prototype.reset = function () { - this.intoBackDisabled = true - this.overBackDisabled = true - this.intoForwardDisabled = true - this.overForwardDisabled = true - this.jumpOutDisabled = true - this.jumpNextBreakpointDisabled = true - this.jumpPreviousBreakpointDisabled = true - resetWarning(this) -} - -ButtonNavigator.prototype.stepChanged = function (step) { - this.intoBackDisabled = step <= 0 - this.overBackDisabled = step <= 0 - if (!this.traceManager) { - this.intoForwardDisabled = true - this.overForwardDisabled = true - } else { - var self = this - this.traceManager.getLength(function (error, length) { - if (error) { - self.reset() - console.log(error) - } else { - self.jumpNextBreakpointDisabled = step >= length - 1 - self.jumpPreviousBreakpointDisabled = step <= 0 - self.intoForwardDisabled = step >= length - 1 - self.overForwardDisabled = step >= length - 1 - var stepOut = self.traceManager.findStepOut(step) - self.jumpOutDisabled = stepOut === step - } - self.updateAll() - }) - } - this.updateAll() -} - -ButtonNavigator.prototype.updateAll = function () { - this.updateDisabled('intoback', this.intoBackDisabled) - this.updateDisabled('overback', this.overBackDisabled) - this.updateDisabled('overforward', this.overForwardDisabled) - this.updateDisabled('intoforward', this.intoForwardDisabled) - this.updateDisabled('jumpout', this.jumpOutDisabled) - this.updateDisabled('jumptoexception', this.jumpOutDisabled) - this.updateDisabled('jumpnextbreakpoint', this.jumpNextBreakpointDisabled) - this.updateDisabled('jumppreviousbreakpoint', this.jumpPreviousBreakpointDisabled) -} - -ButtonNavigator.prototype.updateDisabled = function (id, disabled) { - if (disabled) { - document.getElementById(id).setAttribute('disabled', true) - } else { - document.getElementById(id).removeAttribute('disabled') - } -} - -function resetWarning (self) { - self.view.querySelector('#reverted #outofgas').style.display = 'none' - self.view.querySelector('#reverted #parenthasthrown').style.display = 'none' - self.view.querySelector('#reverted').style.display = 'none' -} - -module.exports = ButtonNavigator diff --git a/src/app/debugger/remix-debugger/src/ui/CalldataPanel.js b/src/app/debugger/remix-debugger/src/ui/CalldataPanel.js deleted file mode 100644 index 6207b078cb..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/CalldataPanel.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict' -var DropdownPanel = require('./DropdownPanel') -var yo = require('yo-yo') - -function CalldataPanel (_parentUI, _traceManager) { - this._parentUI = _parentUI - this.traceManager = _traceManager - this.basicPanel = new DropdownPanel('Call Data', {json: true}) - this.init() -} - -CalldataPanel.prototype.render = function () { - return yo`
${this.basicPanel.render()}
` -} - -CalldataPanel.prototype.init = function () { - var self = this - this._parentUI.event.register('indexChanged', this, function (index) { - if (index < 0) return - if (self._parentUI.currentStepIndex !== index) return - - self.traceManager.getCallDataAt(index, function (error, calldata) { - if (error) { - self.basicPanel.update({}) - console.log(error) - } else if (self._parentUI.currentStepIndex === index) { - self.basicPanel.update(calldata) - } - }) - }) -} - -module.exports = CalldataPanel diff --git a/src/app/debugger/remix-debugger/src/ui/CallstackPanel.js b/src/app/debugger/remix-debugger/src/ui/CallstackPanel.js deleted file mode 100644 index a9ecdbac5e..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/CallstackPanel.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict' -var DropdownPanel = require('./DropdownPanel') -var yo = require('yo-yo') - -function CallstackPanel (_parent, _traceManager) { - this.parent = _parent - this.traceManager = _traceManager - this.basicPanel = new DropdownPanel('Call Stack', {json: true}) - this.init() -} - -CallstackPanel.prototype.render = function () { - return yo`
${this.basicPanel.render()}
` -} - -CallstackPanel.prototype.init = function () { - var self = this - this.parent.event.register('indexChanged', this, function (index) { - if (index < 0) return - if (self.parent.currentStepIndex !== index) return - - self.traceManager.getCallStackAt(index, function (error, callstack) { - if (error) { - console.log(error) - self.basicPanel.update({}) - } else if (self.parent.currentStepIndex === index) { - self.basicPanel.update(callstack) - } - }) - }) -} - -module.exports = CallstackPanel diff --git a/src/app/debugger/remix-debugger/src/ui/CodeListView.js b/src/app/debugger/remix-debugger/src/ui/CodeListView.js deleted file mode 100644 index 552782a394..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/CodeListView.js +++ /dev/null @@ -1,88 +0,0 @@ -'use strict' -var style = require('./styles/basicStyles') -var yo = require('yo-yo') -var remixLib = require('remix-lib') -var DropdownPanel = require('./DropdownPanel') -var EventManager = remixLib.EventManager -var csjs = require('csjs-inject') -var styleGuide = require('../../../../ui/styles-guide/theme-chooser') -var styles = styleGuide.chooser() - -var css = csjs` - .instructions { - ${styles.rightPanel.debuggerTab.box_Debugger} - overflow-y: scroll; - max-height: 150px; - } -` -function CodeListView (_parent, _codeManager) { - this.event = new EventManager() - this.parent = _parent - this.codeManager = _codeManager - this.code - this.address - this.codeView - this.itemSelected - this.basicPanel = new DropdownPanel('Instructions', {json: false, displayContentOnly: true}) - this.basicPanel.event.register('hide', () => { - this.event.trigger('hide', []) - }) - this.basicPanel.event.register('show', () => { - this.event.trigger('show', []) - }) - this.init() -} - -CodeListView.prototype.render = function () { - return yo`
${this.basicPanel.render({height: style.instructionsList.height})}
` -} - -CodeListView.prototype.init = function () { - var self = this - this.codeManager.event.register('changed', this, this.changed) - this.parent.event.register('traceUnloaded', this, function () { - self.changed([], '', -1) - }) -} - -CodeListView.prototype.indexChanged = function (index) { - if (index >= 0) { - if (this.itemSelected) { - this.itemSelected.removeAttribute('selected') - this.itemSelected.removeAttribute('style') - if (this.itemSelected.firstChild) { - this.itemSelected.firstChild.removeAttribute('style') - } - } - this.itemSelected = this.codeView.children[index] - this.itemSelected.setAttribute('style', 'background-color: ' + styles.rightPanel.debuggerTab.text_BgHighlight) - this.itemSelected.setAttribute('selected', 'selected') - if (this.itemSelected.firstChild) { - this.itemSelected.firstChild.setAttribute('style', 'margin-left: 2px') - } - this.codeView.scrollTop = this.itemSelected.offsetTop - parseInt(this.codeView.offsetTop) - } -} - -CodeListView.prototype.changed = function (code, address, index) { - if (this.address !== address) { - this.code = code - this.address = address - this.codeView = this.renderAssemblyItems() - this.basicPanel.setContent(this.codeView) - } - this.indexChanged(index) -} - -CodeListView.prototype.renderAssemblyItems = function () { - if (this.code) { - var codeView = this.code.map(function (item, i) { - return yo`
${item}
` - }) - return yo`
- ${codeView} -
` - } -} - -module.exports = CodeListView diff --git a/src/app/debugger/remix-debugger/src/ui/DropdownPanel.js b/src/app/debugger/remix-debugger/src/ui/DropdownPanel.js deleted file mode 100644 index 860cfde7fd..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/DropdownPanel.js +++ /dev/null @@ -1,208 +0,0 @@ -'use strict' -var yo = require('yo-yo') -const copy = require('clipboard-copy') -var remixLib = require('remix-lib') -var TreeView = require('../../../../ui/TreeView') // TODO setup a direct reference to the UI components -var EventManager = remixLib.EventManager - -var csjs = require('csjs-inject') -var styleGuide = require('../../../../ui/styles-guide/theme-chooser') -var styles = styleGuide.chooser() - -var css = csjs` - .title { - margin-top: 10px; - ${styles.rightPanel.debuggerTab.dropdown_Debugger}; - display: flex; - align-items: center; - } - .name { - font-weight: bold; - } - .nameDetail { - font-weight: bold; - margin-left: 3px; - } - .icon { - color: ${styles.rightPanel.debuggerTab.button_Debugger_icon_Color}; - margin-right: 5%; - } - .eyeButton { - margin: 3px; - } - .eyeButton:hover { - color: ${styles.rightPanel.debuggerTab.button_Debugger_icon_HoverColor}; - } - .dropdownpanel { - ${styles.rightPanel.debuggerTab.dropdown_Debugger}; - width: 100%; - } - .dropdownrawcontent { - padding: 2px; - word-break: break-all; - } - .message { - padding: 2px; - word-break: break-all; - } - .refresh { - display: none; - margin-left: 4px; - margin-top: 4px; - animation: spin 2s linear infinite; - } -` - -function DropdownPanel (_name, _opts) { - this.event = new EventManager() - if (!_opts) { - _opts = {} - } - this.name = _name - this.header = '' - this.json = _opts.json - this.displayContentOnly = _opts.displayContentOnly - if (this.json) { - this.treeView = new TreeView(_opts) - } - this.view -} - -DropdownPanel.prototype.setMessage = function (message) { - if (this.view) { - this.view.querySelector('.dropdownpanel .dropdownrawcontent').style.display = 'none' - this.view.querySelector('.dropdownpanel .dropdowncontent').style.display = 'none' - this.view.querySelector('.dropdownpanel .fa-refresh').style.display = 'none' - this.message(message) - } -} - -DropdownPanel.prototype.setLoading = function () { - if (this.view) { - this.view.querySelector('.dropdownpanel .dropdownrawcontent').style.display = 'none' - this.view.querySelector('.dropdownpanel .dropdowncontent').style.display = 'none' - this.view.querySelector('.dropdownpanel .fa-refresh').style.display = 'inline-block' - this.message('') - } -} - -DropdownPanel.prototype.setUpdating = function () { - if (this.view) { - this.view.querySelector('.dropdownpanel .dropdowncontent').style.color = styles.appProperties.greyedText_color - } -} - -DropdownPanel.prototype.update = function (_data, _header) { - if (this.view) { - this.view.querySelector('.dropdownpanel .fa-refresh').style.display = 'none' - this.view.querySelector('.dropdownpanel .dropdowncontent').style.display = 'block' - this.view.querySelector('.dropdownpanel .dropdowncontent').style.color = styles.appProperties.mainText_Color - this.view.querySelector('.dropdownpanel .dropdownrawcontent').innerText = JSON.stringify(_data, null, '\t') - if (!this.displayContentOnly) { - this.view.querySelector('.title div.btn').style.display = 'block' - this.view.querySelector('.title span').innerText = _header || ' ' - } - this.message('') - if (this.json) { - this.treeView.update(_data) - } - } -} - -DropdownPanel.prototype.setContent = function (node) { - if (this.view) { - var parent = this.view.querySelector('.dropdownpanel div.dropdowncontent') - parent.replaceChild(node, parent.firstElementChild) - } -} - -DropdownPanel.prototype.render = function (overridestyle) { - var content = yo`
Empty
` - if (this.json) { - content = this.treeView.render({}) - } - overridestyle === undefined ? {} : overridestyle - var self = this - var title = !self.displayContentOnly ? yo`
-
-
${this.name}
-
-
` : yo`
` - - var contentNode = yo`` - var view = yo` -
- - ${title} - ${contentNode} -
` - if (!this.view) { - this.view = view - } - if (self.displayContentOnly) contentNode.style.display = 'block' - return view -} - -DropdownPanel.prototype.copyClipboard = function () { - var content = this.view.querySelector('.dropdownpanel .dropdownrawcontent') - if (content) copy(content.innerText ? content.innerText : content.textContent) -} - -DropdownPanel.prototype.toggle = function () { - var el = this.view.querySelector('.dropdownpanel') - var caret = this.view.querySelector('.title').firstElementChild - if (el.style.display === '') { - el.style.display = 'none' - caret.className = `${css.icon} fa fa-caret-right` - this.event.trigger('hide', []) - } else { - el.style.display = '' - caret.className = `${css.icon} fa fa-caret-down` - this.event.trigger('show', []) - } -} - -DropdownPanel.prototype.hide = function () { - if (this.view && !this.displayContentOnly) { - var caret = this.view.querySelector('.title').firstElementChild - var el = this.view.querySelector('.dropdownpanel') - el.style.display = 'none' - caret.className = `${css.icon} fa fa-caret-right` - this.event.trigger('hide', []) - } -} - -DropdownPanel.prototype.show = function () { - if (this.view && !this.displayContentOnly) { - var caret = this.view.querySelector('.title').firstElementChild - var el = this.view.querySelector('.dropdownpanel') - el.style.display = '' - caret.className = `${css.icon} fa fa-caret-down` - this.event.trigger('show', []) - } -} - -DropdownPanel.prototype.message = function (message) { - if (this.view) { - var mes = this.view.querySelector('.dropdownpanel .message') - mes.innerText = message - mes.style.display = (message === '') ? 'none' : 'block' - } -} - -module.exports = DropdownPanel diff --git a/src/app/debugger/remix-debugger/src/ui/Ethdebugger.js b/src/app/debugger/remix-debugger/src/ui/Ethdebugger.js deleted file mode 100644 index 6a0ee8a152..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/Ethdebugger.js +++ /dev/null @@ -1,210 +0,0 @@ -'use strict' -var TxBrowser = require('./TxBrowser') -var StepManager = require('./StepManager') -var remixLib = require('remix-lib') -var TraceManager = remixLib.trace.TraceManager -var VmDebugger = require('./VmDebugger') -var init = remixLib.init -var executionContext = remixLib.execution.executionContext -var EventManager = remixLib.EventManager -var yo = require('yo-yo') -var csjs = require('csjs-inject') -var Web3Providers = remixLib.vm.Web3Providers -var DummyProvider = remixLib.vm.DummyProvider -var CodeManager = remixLib.code.CodeManager -var remixDebug = require('remix-debug') -var SolidityProxy = remixDebug.SolidityDecoder.SolidityProxy -var InternalCallTree = remixDebug.SolidityDecoder.InternalCallTree - -var css = csjs` - .statusMessage { - margin-left: 15px; - } - .innerShift { - padding: 2px; - margin-left: 10px; - } -` - -function Ethdebugger (opts) { - this.opts = opts || {} - if (!this.opts.compilationResult) this.opts.compilationResult = () => { return null } - - var self = this - this.event = new EventManager() - - this.currentStepIndex = -1 - this.tx - this.statusMessage = '' - - this.view - this.web3Providers = new Web3Providers() - this.addProvider('DUMMYWEB3', new DummyProvider()) - this.switchProvider('DUMMYWEB3') - this.traceManager = new TraceManager() - this.codeManager = new CodeManager(this.traceManager) - this.solidityProxy = new SolidityProxy(this.traceManager, this.codeManager) - - var callTree = new InternalCallTree(this.event, this.traceManager, this.solidityProxy, this.codeManager, { includeLocalVariables: true }) - this.callTree = callTree // TODO: currently used by browser solidity, we should improve the API - - this.event.register('indexChanged', this, function (index) { - self.codeManager.resolveStep(index, self.tx) - }) - - this.txBrowser = new TxBrowser(this) - this.txBrowser.event.register('newTxLoading', this, function () { - self.unLoad() - }) - this.txBrowser.event.register('newTraceRequested', this, function (blockNumber, txIndex, tx) { - console.dir('newTraceRequestd') - console.dir(arguments) - self.startDebugging(blockNumber, txIndex, tx) - }) - this.txBrowser.event.register('unloadRequested', this, function (blockNumber, txIndex, tx) { - self.unLoad() - }) - this.stepManager = new StepManager(this, this.traceManager) - this.stepManager.event.register('stepChanged', this, function (stepIndex) { - self.stepChanged(stepIndex) - }) - this.vmDebugger = new VmDebugger(this, this.traceManager, this.codeManager, this.solidityProxy, callTree) - - this.codeManager.event.register('changed', this, (code, address, instIndex) => { - this.callTree.sourceLocationTracker.getSourceLocationFromVMTraceIndex(address, this.currentStepIndex, this.solidityProxy.contracts, (error, sourceLocation) => { - if (!error) { - this.event.trigger('sourceLocationChanged', [sourceLocation]) - } - }) - }) -} - -Ethdebugger.prototype.setManagers = function () { - this.traceManager = new TraceManager({web3: this.web3}) - this.codeManager = new CodeManager(this.traceManager) - this.solidityProxy = new SolidityProxy(this.traceManager, this.codeManager) - this.storageResolver = null - var callTree = new InternalCallTree(this.event, this.traceManager, this.solidityProxy, this.codeManager, { includeLocalVariables: true }) - this.callTree = callTree // TODO: currently used by browser solidity, we should improve the API - this.vmDebugger = new VmDebugger(this, this.traceManager, this.codeManager, this.solidityProxy, callTree) - - this.callTree = new InternalCallTree(this.event, this.traceManager, this.solidityProxy, this.codeManager, { includeLocalVariables: true }) -} - -Ethdebugger.prototype.setBreakpointManager = function (breakpointManager) { - this.breakpointManager = breakpointManager -} - -Ethdebugger.prototype.web3 = function () { - return global.web3 -} - -Ethdebugger.prototype.addProvider = function (type, obj) { - this.web3Providers.addProvider(type, obj) - this.event.trigger('providerAdded', [type]) -} - -Ethdebugger.prototype.updateWeb3Reference = function () { - if (!this.txBrowser) return - this.txBrowser.web3 = this.web3 -} - -Ethdebugger.prototype.switchProvider = function (type) { - var self = this - this.web3Providers.get(type, function (error, obj) { - if (error) { - console.log('provider ' + type + ' not defined') - } else { - self.web3 = obj - self.setManagers() - self.updateWeb3Reference() - executionContext.detectNetwork((error, network) => { - if (error || !network) { - global.web3Debug = obj - } else { - var webDebugNode = init.web3DebugNode(network.name) - global.web3Debug = !webDebugNode ? obj : webDebugNode - } - self.updateWeb3Reference() - }) - self.event.trigger('providerChanged', [type]) - } - }) -} - -Ethdebugger.prototype.setCompilationResult = function (compilationResult) { - if (compilationResult && compilationResult.sources && compilationResult.contracts) { - this.solidityProxy.reset(compilationResult) - } else { - this.solidityProxy.reset({}) - } -} - -Ethdebugger.prototype.debug = function (tx) { - this.setCompilationResult(this.opts.compilationResult()) - if (tx instanceof Object) { - this.txBrowser.load(tx.hash) - } else if (tx instanceof String) { - this.txBrowser.load(tx) - } -} - -Ethdebugger.prototype.render = function () { - var view = yo`
-
- ${this.txBrowser.render()} - ${this.vmDebugger.renderHead()} - ${this.stepManager.render()} -
-
${this.statusMessage}
- ${this.vmDebugger.render()} -
` - if (!this.view) { - this.view = view - } - return view -} - -Ethdebugger.prototype.unLoad = function () { - this.traceManager.init() - this.codeManager.clear() - this.stepManager.reset() - this.event.trigger('traceUnloaded') -} - -Ethdebugger.prototype.stepChanged = function (stepIndex) { - this.currentStepIndex = stepIndex - this.event.trigger('indexChanged', [stepIndex]) -} - -Ethdebugger.prototype.startDebugging = function (blockNumber, txIndex, tx) { - console.dir('startDebugging') - console.dir(arguments) - if (this.traceManager.isLoading) { - return - } - this.setCompilationResult(this.opts.compilationResult()) - this.statusMessage = 'Loading trace...' - yo.update(this.view, this.render()) - console.log('loading trace...') - this.tx = tx - var self = this - console.dir('resolving a trace with tx: ') - console.dir(tx) - this.traceManager.resolveTrace(tx, function (error, result) { - console.log('trace loaded ' + result) - if (result) { - self.statusMessage = '' - yo.update(self.view, self.render()) - self.event.trigger('newTraceLoaded', [self.traceManager.trace]) - if (self.breakpointManager && self.breakpointManager.hasBreakpoint()) { - self.breakpointManager.jumpNextBreakpoint(0, false) - } - } else { - self.statusMessage = error ? error.message : 'Trace not loaded' - yo.update(self.view, self.render()) - } - }) -} - -module.exports = Ethdebugger diff --git a/src/app/debugger/remix-debugger/src/ui/FullStoragesChanges.js b/src/app/debugger/remix-debugger/src/ui/FullStoragesChanges.js deleted file mode 100644 index 7051efac05..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/FullStoragesChanges.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict' -var DropdownPanel = require('./DropdownPanel') -var remixDebug = require('remix-debug') -var StorageViewer = remixDebug.storage.StorageViewer -var yo = require('yo-yo') - -function FullStoragesChanges (_parent, _traceManager) { - this.storageResolver = null - this.parent = _parent - this.debugger = _parent.debugger - this.traceManager = _traceManager - this.addresses = [] - this.view - this.traceLength - this.basicPanel = new DropdownPanel('Full Storages Changes', {json: true}) - this.init() -} - -FullStoragesChanges.prototype.render = function () { - var view = yo`
${this.basicPanel.render()}
` - if (!this.view) { - this.view = view - } - return view -} - -FullStoragesChanges.prototype.init = function () { - var self = this - this.debugger.event.register('newTraceLoaded', this, function (length) { - self.panels = [] - self.traceManager.getAddresses(function (error, addresses) { - if (!error) { - self.addresses = addresses - self.basicPanel.update({}) - } - }) - - self.traceManager.getLength(function (error, length) { - if (!error) { - self.traceLength = length - } - }) - }) - - this.debugger.event.register('indexChanged', this, function (index) { - if (index < 0) return - if (self.parent.currentStepIndex !== index) return - if (!self.storageResolver) return - - if (index === self.traceLength - 1) { - var storageJSON = {} - for (var k in self.addresses) { - var address = self.addresses[k] - var storageViewer = new StorageViewer({ - stepIndex: self.parent.currentStepIndex, - tx: self.parent.tx, - address: address - }, self.storageResolver, self.traceManager) - storageViewer.storageRange(function (error, result) { - if (!error) { - storageJSON[address] = result - self.basicPanel.update(storageJSON) - } - }) - } - } else { - self.basicPanel.update({}) - } - }) -} - -module.exports = FullStoragesChanges diff --git a/src/app/debugger/remix-debugger/src/ui/MemoryPanel.js b/src/app/debugger/remix-debugger/src/ui/MemoryPanel.js deleted file mode 100644 index c37cf48b2c..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/MemoryPanel.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict' -var DropdownPanel = require('./DropdownPanel') -var remixLib = require('remix-lib') -var ui = remixLib.helpers.ui -var yo = require('yo-yo') - -function MemoryPanel (_parent, _traceManager) { - this.parent = _parent - this.traceManager = _traceManager - this.basicPanel = new DropdownPanel('Memory', { - json: true, - css: { - 'font-family': 'monospace' - }}) - this.init() -} - -MemoryPanel.prototype.render = function () { - return yo`
${this.basicPanel.render()}
` -} - -MemoryPanel.prototype.init = function () { - var self = this - this.parent.event.register('indexChanged', this, function (index) { - if (index < 0) return - if (self.parent.currentStepIndex !== index) return - - self.traceManager.getMemoryAt(index, function (error, memory) { - if (error) { - console.log(error) - self.basicPanel.update({}) - } else if (self.parent.currentStepIndex === index) { - self.basicPanel.update(ui.formatMemory(memory, 16)) - } - }) - }) -} - -module.exports = MemoryPanel diff --git a/src/app/debugger/remix-debugger/src/ui/Slider.js b/src/app/debugger/remix-debugger/src/ui/Slider.js deleted file mode 100644 index 10ca255d81..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/Slider.js +++ /dev/null @@ -1,75 +0,0 @@ -'use strict' -var remixLib = require('remix-lib') -var EventManager = remixLib.EventManager -var yo = require('yo-yo') - -class Slider { - constructor (_traceManager, _stepOverride) { - this.event = new EventManager() - this.traceManager = _traceManager - this.max - this.disabled = true - this.view - this.solidityMode = false - this.stepOverride = _stepOverride - - this.previousValue = null - } - - render () { - var self = this - var view = yo`
- -
` - if (!this.view) { - this.view = view - } - return view - } - - init (length) { - var slider = this.view.querySelector('#slider') - slider.setAttribute('max', length - 1) - this.max = length - 1 - this.updateDisabled(length === 0) - this.disabled = length === 0 - this.setValue(0) - } - - onChange (event) { - var value = parseInt(this.view.querySelector('#slider').value) - if (this.stepOverride) { - var correctedValue = this.stepOverride(value) - if (correctedValue !== value) { - this.setValue(correctedValue) - value = correctedValue - } - } - if (value === this.previousValue) return - this.previousValue = value - this.event.trigger('moved', [value]) - } - - setValue (value) { - this.view.querySelector('#slider').value = value - } - - updateDisabled (disabled) { - if (disabled) { - this.view.querySelector('#slider').setAttribute('disabled', true) - } else { - this.view.querySelector('#slider').removeAttribute('disabled') - } - } -} - -module.exports = Slider diff --git a/src/app/debugger/remix-debugger/src/ui/SolidityLocals.js b/src/app/debugger/remix-debugger/src/ui/SolidityLocals.js deleted file mode 100644 index 2fc5861a42..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/SolidityLocals.js +++ /dev/null @@ -1,83 +0,0 @@ -'use strict' -var DropdownPanel = require('./DropdownPanel') -var remixDebug = require('remix-debug') -var localDecoder = remixDebug.SolidityDecoder.localDecoder -var solidityTypeFormatter = require('./SolidityTypeFormatter') -var StorageViewer = remixDebug.storage.StorageViewer -var yo = require('yo-yo') - -class SolidityLocals { - - constructor (_parent, _traceManager, _internalTreeCall) { - this.parent = _parent - this.internalTreeCall = _internalTreeCall - this.storageResolver = null - this.traceManager = _traceManager - this.basicPanel = new DropdownPanel('Solidity Locals', { - json: true, - formatSelf: solidityTypeFormatter.formatSelf, - extractData: solidityTypeFormatter.extractData - }) - this.init() - this.view - } - - render () { - this.view = yo`
- ${this.basicPanel.render()} -
` - return this.view - } - - init () { - var decodeTimeout = null - this.parent.event.register('sourceLocationChanged', this, (sourceLocation) => { - if (!this.storageResolver) { - this.basicPanel.setMessage('storage not ready') - return - } - if (decodeTimeout) { - window.clearTimeout(decodeTimeout) - } - this.basicPanel.setUpdating() - decodeTimeout = setTimeout(() => { - decode(this, sourceLocation) - }, 500) - }) - } -} - -function decode (self, sourceLocation) { - self.basicPanel.setMessage('') - self.traceManager.waterfall([ - self.traceManager.getStackAt, - self.traceManager.getMemoryAt, - self.traceManager.getCurrentCalledAddressAt], - self.parent.currentStepIndex, - (error, result) => { - if (!error) { - var stack = result[0].value - var memory = result[1].value - try { - var storageViewer = new StorageViewer({ - stepIndex: self.parent.currentStepIndex, - tx: self.parent.tx, - address: result[2].value - }, self.storageResolver, self.traceManager) - localDecoder.solidityLocals(self.parent.currentStepIndex, self.internalTreeCall, stack, memory, storageViewer, sourceLocation).then((locals) => { - if (!locals.error) { - self.basicPanel.update(locals) - } - if (!Object.keys(locals).length) { - self.basicPanel.setMessage('no locals') - } - }) - } catch (e) { - self.basicPanel.setMessage(e.message) - } - } else { - console.log(error) - } - }) -} -module.exports = SolidityLocals diff --git a/src/app/debugger/remix-debugger/src/ui/SolidityState.js b/src/app/debugger/remix-debugger/src/ui/SolidityState.js deleted file mode 100644 index 2f9ec08d6c..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/SolidityState.js +++ /dev/null @@ -1,103 +0,0 @@ -'use strict' -var DropdownPanel = require('./DropdownPanel') -var remixDebug = require('remix-debug') -var stateDecoder = remixDebug.SolidityDecoder.stateDecoder -var solidityTypeFormatter = require('./SolidityTypeFormatter') -var StorageViewer = remixDebug.storage.StorageViewer -var yo = require('yo-yo') - -function SolidityState (_parent, _traceManager, _codeManager, _solidityProxy) { - this.storageResolver = null - this.parent = _parent - this.traceManager = _traceManager - this.codeManager = _codeManager - this.solidityProxy = _solidityProxy - this.basicPanel = new DropdownPanel('Solidity State', { - json: true, - formatSelf: solidityTypeFormatter.formatSelf, - extractData: solidityTypeFormatter.extractData - }) - this.init() - this.view - this.stateVariablesByAddresses = {} - _parent.event.register('traceUnloaded', () => { this.stateVariablesByAddresses = {} }) - _parent.event.register('newTraceLoaded', () => { this.stateVariablesByAddresses = {} }) -} - -SolidityState.prototype.render = function () { - if (!this.view) { - this.view = yo`
- ${this.basicPanel.render()} -
` - } - return this.view -} - -SolidityState.prototype.init = function () { - var self = this - var decodeTimeout = null - this.parent.event.register('indexChanged', this, function (index) { - if (index < 0) { - self.basicPanel.setMessage('invalid step index') - return - } - - if (self.parent.currentStepIndex !== index) return - if (!self.solidityProxy.loaded()) { - self.basicPanel.setMessage('no source has been specified') - return - } - - if (!self.storageResolver) { - return - } - if (decodeTimeout) { - window.clearTimeout(decodeTimeout) - } - self.basicPanel.setUpdating() - decodeTimeout = setTimeout(() => { - decode(self, index) - }, 500) - }) -} - -function decode (self, index) { - self.traceManager.getCurrentCalledAddressAt(self.parent.currentStepIndex, (error, address) => { - if (error) { - self.basicPanel.update({}) - console.log(error) - } else { - if (self.stateVariablesByAddresses[address]) { - extractStateVariables(self, self.stateVariablesByAddresses[address], address) - } else { - self.solidityProxy.extractStateVariablesAt(index, function (error, stateVars) { - if (error) { - self.basicPanel.update({}) - console.log(error) - } else { - self.stateVariablesByAddresses[address] = stateVars - extractStateVariables(self, stateVars, address) - } - }) - } - } - }) -} - -function extractStateVariables (self, stateVars, address) { - var storageViewer = new StorageViewer({ - stepIndex: self.parent.currentStepIndex, - tx: self.parent.tx, - address: address - }, self.storageResolver, self.traceManager) - stateDecoder.decodeState(stateVars, storageViewer).then((result) => { - self.basicPanel.setMessage('') - if (!result.error) { - self.basicPanel.update(result) - } else { - self.basicPanel.setMessage(result.error) - } - }) -} - -module.exports = SolidityState diff --git a/src/app/debugger/remix-debugger/src/ui/SolidityTypeFormatter.js b/src/app/debugger/remix-debugger/src/ui/SolidityTypeFormatter.js deleted file mode 100644 index 48c422418c..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/SolidityTypeFormatter.js +++ /dev/null @@ -1,71 +0,0 @@ -'use strict' -var yo = require('yo-yo') -var BN = require('ethereumjs-util').BN - -module.exports = { - formatSelf: formatSelf, - extractData: extractData -} - -function formatSelf (key, data) { - var style = fontColor(data) - var keyStyle = data.isProperty ? 'color:#847979' : '' - if (data.type === 'string') { - data.self = JSON.stringify(data.self) - } - return yo`` -} - -function extractData (item, parent, key) { - var ret = {} - if (item.isProperty) { - return item - } - if (item.type.lastIndexOf(']') === item.type.length - 1) { - ret.children = (item.value || []).map(function (item, index) { - return {key: index, value: item} - }) - ret.children.unshift({ - key: 'length', - value: { - self: (new BN(item.length.replace('0x', ''), 16)).toString(10), - type: 'uint', - isProperty: true - } - }) - ret.isArray = true - ret.self = parent.isArray ? '' : item.type - } else if (item.type.indexOf('struct') === 0) { - ret.children = Object.keys((item.value || {})).map(function (key) { - return {key: key, value: item.value[key]} - }) - ret.self = item.type - ret.isStruct = true - } else if (item.type.indexOf('mapping') === 0) { - ret.children = Object.keys((item.value || {})).map(function (key) { - return {key: key, value: item.value[key]} - }) - ret.isMapping = true - ret.self = item.type - } else { - ret.children = null - ret.self = item.value - ret.type = item.type - } - return ret -} - -function fontColor (data) { - var color = '#124B46' - if (data.isArray || data.isStruct || data.isMapping) { - color = '#847979' - } else if (data.type.indexOf('uint') === 0 || - data.type.indexOf('int') === 0 || - data.type.indexOf('bool') === 0 || - data.type.indexOf('enum') === 0) { - color = '#0F0CE9' - } else if (data.type === 'string') { - color = '#E91E0C' - } - return 'color:' + color -} diff --git a/src/app/debugger/remix-debugger/src/ui/StackPanel.js b/src/app/debugger/remix-debugger/src/ui/StackPanel.js deleted file mode 100644 index e13eee96cf..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/StackPanel.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict' -var DropdownPanel = require('./DropdownPanel') -var yo = require('yo-yo') - -function StackPanel (_parent, _traceManager) { - this.parent = _parent - this.traceManager = _traceManager - this.basicPanel = new DropdownPanel('Stack', {json: true, displayContentOnly: false}) - this.init() -} - -StackPanel.prototype.render = function () { - return yo`
${this.basicPanel.render()}
` -} - -StackPanel.prototype.init = function () { - var self = this - this.parent.event.register('indexChanged', this, function (index) { - if (index < 0) return - if (self.parent.currentStepIndex !== index) return - - self.traceManager.getStackAt(index, function (error, stack) { - if (error) { - self.basicPanel.update({}) - console.log(error) - } else if (self.parent.currentStepIndex === index) { - self.basicPanel.update(stack) - } - }) - }) -} - -module.exports = StackPanel diff --git a/src/app/debugger/remix-debugger/src/ui/StepDetail.js b/src/app/debugger/remix-debugger/src/ui/StepDetail.js deleted file mode 100644 index a14b9e192d..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/StepDetail.js +++ /dev/null @@ -1,101 +0,0 @@ -'use strict' -var yo = require('yo-yo') -var DropdownPanel = require('./DropdownPanel') - -function StepDetail (_parentUI, _traceManager) { - this.debugger = _parentUI.debugger - this.parentUI = _parentUI - this.traceManager = _traceManager - - this.basicPanel = new DropdownPanel('Step detail', {json: true, displayContentOnly: true}) - - this.detail = initDetail() - this.view - this.init() -} - -StepDetail.prototype.render = function () { - return yo`
${this.basicPanel.render()}
` -} - -StepDetail.prototype.init = function () { - var self = this - this.debugger.event.register('traceUnloaded', this, function () { - self.detail = initDetail() - self.basicPanel.update(self.detail) - }) - - this.debugger.event.register('newTraceLoaded', this, function () { - self.detail = initDetail() - self.basicPanel.update(self.detail) - }) - - this.parentUI.event.register('indexChanged', this, function (index) { - if (index < 0) return - - self.detail['vm trace step'] = index - - self.traceManager.getCurrentStep(index, function (error, step) { - if (error) { - console.log(error) - self.detail['execution step'] = '-' - } else { - self.detail['execution step'] = step - } - self.basicPanel.update(self.detail) - }) - - self.traceManager.getMemExpand(index, function (error, addmem) { - if (error) { - console.log(error) - self.detail['add memory'] = '-' - } else { - self.detail['add memory'] = addmem - } - self.basicPanel.update(self.detail) - }) - - self.traceManager.getStepCost(index, function (error, gas) { - if (error) { - console.log(error) - self.detail.gas = '-' - } else { - self.detail.gas = gas - } - self.basicPanel.update(self.detail) - }) - - self.traceManager.getCurrentCalledAddressAt(index, function (error, address) { - if (error) { - console.log(error) - self.detail['loaded address'] = '-' - } else { - self.detail['loaded address'] = address - } - self.basicPanel.update(self.detail) - }) - - self.traceManager.getRemainingGas(index, function (error, remaingas) { - if (error) { - console.log(error) - self.detail['remaining gas'] = '-' - } else { - self.detail['remaining gas'] = remaingas - } - self.basicPanel.update(self.detail) - }) - }) -} - -module.exports = StepDetail - -function initDetail () { - return { - 'vm trace step': '-', - 'execution step': '-', - 'add memory': '', - 'gas': '', - 'remaining gas': '-', - 'loaded address': '-' - } -} diff --git a/src/app/debugger/remix-debugger/src/ui/StepManager.js b/src/app/debugger/remix-debugger/src/ui/StepManager.js deleted file mode 100644 index d464b292cc..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/StepManager.js +++ /dev/null @@ -1,205 +0,0 @@ -'use strict' -var ButtonNavigator = require('./ButtonNavigator') -var Slider = require('./Slider') -var remixLib = require('remix-lib') -var EventManager = remixLib.EventManager -var yo = require('yo-yo') -var util = remixLib.util - -function StepManager (_parent, _traceManager) { - this.event = new EventManager() - this.parent = _parent.debugger - this.traceManager = _traceManager - this.sourceMapByAddress = {} - this.solidityMode = false - - var self = this - this.parent.event.register('newTraceLoaded', this, function () { - if (!this.slider) return - self.traceManager.getLength(function (error, length) { - if (error) { - console.log(error) - } else { - self.slider.init(length) - self.init() - } - }) - }) - - this.slider = new Slider(this.traceManager, (step) => { - return this.solidityMode ? this.resolveToReducedTrace(step, 0) : step - }) - this.slider.event.register('moved', this, function (step) { - self.sliderMoved(step) - }) - - this.parent.callTree.event.register('callTreeReady', () => { - if (!this.slider) return - if (this.parent.callTree.functionCallStack.length) { - this.jumpTo(this.parent.callTree.functionCallStack[0]) - } - }) - - this.buttonNavigator = new ButtonNavigator(_parent, this.traceManager) - this.buttonNavigator.event.register('stepIntoBack', this, function () { - self.stepIntoBack() - }) - this.buttonNavigator.event.register('stepIntoForward', this, function () { - self.stepIntoForward() - }) - this.buttonNavigator.event.register('stepOverBack', this, function () { - self.stepOverBack() - }) - this.buttonNavigator.event.register('stepOverForward', this, function () { - self.stepOverForward() - }) - this.buttonNavigator.event.register('jumpOut', this, function () { - self.jumpOut() - }) - this.buttonNavigator.event.register('jumpToException', this, function (exceptionIndex) { - self.jumpTo(exceptionIndex) - }) - this.buttonNavigator.event.register('jumpNextBreakpoint', (exceptionIndex) => { - self.parent.breakpointManager.jumpNextBreakpoint(_parent.currentStepIndex, true) - }) - this.buttonNavigator.event.register('jumpPreviousBreakpoint', (exceptionIndex) => { - self.parent.breakpointManager.jumpPreviousBreakpoint(_parent.currentStepIndex, true) - }) -} - -StepManager.prototype.remove = function () { - // used to stop listenning on event. bad and should be "refactored" - this.slider.view = null - this.slider = null - this.buttonNavigator.view = null - this.buttonNavigator = null -} - -StepManager.prototype.resolveToReducedTrace = function (value, incr) { - if (this.parent.callTree.reducedTrace.length) { - var nextSource = util.findClosestIndex(value, this.parent.callTree.reducedTrace) - nextSource = nextSource + incr - if (nextSource <= 0) { - nextSource = 0 - } else if (nextSource > this.parent.callTree.reducedTrace.length) { - nextSource = this.parent.callTree.reducedTrace.length - 1 - } - return this.parent.callTree.reducedTrace[nextSource] - } - return value -} - -StepManager.prototype.render = function () { - return yo`
- ${this.slider.render()} - ${this.buttonNavigator.render()} -
` -} - -StepManager.prototype.reset = function () { - this.slider.setValue(0) - this.currentStepIndex = 0 - this.buttonNavigator.reset() -} - -StepManager.prototype.init = function () { - this.slider.setValue(0) - this.changeState(0) -} - -StepManager.prototype.newTraceAvailable = function () { - this.init() -} - -StepManager.prototype.jumpTo = function (step) { - if (!this.traceManager.inRange(step)) { - return - } - this.slider.setValue(step) - this.changeState(step) -} - -StepManager.prototype.sliderMoved = function (step) { - if (!this.traceManager.inRange(step)) { - return - } - this.changeState(step) -} - -StepManager.prototype.stepIntoForward = function () { - if (!this.traceManager.isLoaded()) { - return - } - var step = this.currentStepIndex - if (this.solidityMode) { - step = this.resolveToReducedTrace(step, 1) - } else { - step += 1 - } - if (!this.traceManager.inRange(step)) { - return - } - this.slider.setValue(step) - this.changeState(step) -} - -StepManager.prototype.stepIntoBack = function () { - if (!this.traceManager.isLoaded()) { - return - } - var step = this.currentStepIndex - if (this.solidityMode) { - step = this.resolveToReducedTrace(step, -1) - } else { - step -= 1 - } - if (!this.traceManager.inRange(step)) { - return - } - this.slider.setValue(step) - this.changeState(step) -} - -StepManager.prototype.stepOverForward = function () { - if (!this.traceManager.isLoaded()) { - return - } - var step = this.traceManager.findStepOverForward(this.currentStepIndex) - if (this.solidityMode) { - step = this.resolveToReducedTrace(step, 1) - } - this.slider.setValue(step) - this.changeState(step) -} - -StepManager.prototype.stepOverBack = function () { - if (!this.traceManager.isLoaded()) { - return - } - var step = this.traceManager.findStepOverBack(this.currentStepIndex) - if (this.solidityMode) { - step = this.resolveToReducedTrace(step, -1) - } - this.slider.setValue(step) - this.changeState(step) -} - -StepManager.prototype.jumpOut = function () { - if (!this.traceManager.isLoaded()) { - return - } - var step = this.traceManager.findStepOut(this.currentStepIndex) - if (this.solidityMode) { - step = this.resolveToReducedTrace(step, 0) - } - this.slider.setValue(step) - this.changeState(step) -} - -StepManager.prototype.changeState = function (step) { - this.currentStepIndex = step - this.buttonNavigator.stepChanged(step) - this.event.trigger('stepChanged', [step]) -} - -module.exports = StepManager diff --git a/src/app/debugger/remix-debugger/src/ui/StoragePanel.js b/src/app/debugger/remix-debugger/src/ui/StoragePanel.js deleted file mode 100644 index 3fdb8218c5..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/StoragePanel.js +++ /dev/null @@ -1,50 +0,0 @@ -'use strict' -var DropdownPanel = require('./DropdownPanel') -var remixDebug = require('remix-debug') -var StorageViewer = remixDebug.storage.StorageViewer -var yo = require('yo-yo') - -function StoragePanel (_parent, _traceManager) { - this.parent = _parent - this.storageResolver = null - this.traceManager = _traceManager - this.basicPanel = new DropdownPanel('Storage', {json: true}) - this.init() - this.disabled = false -} - -StoragePanel.prototype.render = function () { - return yo`
${this.basicPanel.render()}
` -} - -StoragePanel.prototype.init = function () { - var self = this - this.parent.event.register('indexChanged', this, function (index) { - if (self.disabled) return - if (index < 0) return - if (self.parent.currentStepIndex !== index) return - if (!self.storageResolver) return - - this.traceManager.getCurrentCalledAddressAt(index, (error, address) => { - if (!error) { - var storageViewer = new StorageViewer({ - stepIndex: self.parent.currentStepIndex, - tx: self.parent.tx, - address: address - }, self.storageResolver, self.traceManager) - - storageViewer.storageRange((error, storage) => { - if (error) { - console.log(error) - self.basicPanel.update({}) - } else if (self.parent.currentStepIndex === index) { - var header = storageViewer.isComplete(address) ? 'completely loaded' : 'partially loaded...' - self.basicPanel.update(storage, header) - } - }) - } - }) - }) -} - -module.exports = StoragePanel diff --git a/src/app/debugger/remix-debugger/src/ui/TxBrowser.js b/src/app/debugger/remix-debugger/src/ui/TxBrowser.js deleted file mode 100644 index b326cfe41f..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/TxBrowser.js +++ /dev/null @@ -1,206 +0,0 @@ -var remixLib = require('remix-lib') -var EventManager = remixLib.EventManager -var traceHelper = remixLib.helpers.trace -var yo = require('yo-yo') -var init = remixLib.init -var csjs = require('csjs-inject') -var styleGuide = require('../../../../ui/styles-guide/theme-chooser') -var styles = styleGuide.chooser() - -var css = csjs` - .container { - display: flex; - flex-direction: column; - } - .txContainer { - display: flex; - flex-direction: column; - } - .txinputs { - width: 100%; - display: flex; - justify-content: center; - } - .txinput { - ${styles.rightPanel.debuggerTab.input_Debugger} - margin: 3px; - width: inherit; - } - .txbuttons { - width: 100%; - display: flex; - justify-content: center; - } - .txbutton { - ${styles.rightPanel.debuggerTab.button_Debugger} - width: inherit; - } - .txbuttonstart { - ${styles.rightPanel.debuggerTab.button_Debugger} - } - .txbutton:hover { - color: ${styles.rightPanel.debuggerTab.button_Debugger_icon_HoverColor}; - } - .vmargin { - margin-top: 10px; - margin-bottom: 10px; - } -` -function TxBrowser (_parent, opts) { - this.event = new EventManager() - - this.blockNumber - this.txNumber - this.view - this.displayConnectionSetting = opts.displayConnectionSetting - this.web3 = opts.web3 - var self = this - _parent.event.register('providerChanged', this, function (provider) { - self.setDefaultValues() - if (self.view) { - yo.update(self.view, self.render()) - } - }) -} - -// creation 0xa9619e1d0a35b2c1d686f5b661b3abd87f998d2844e8e9cc905edb57fc9ce349 -// invokation 0x71a6d583d16d142c5c3e8903060e8a4ee5a5016348a9448df6c3e63b68076ec4 0xcda2b2835add61af54cf83bd076664d98d7908c6cd98d86423b3b48d8b8e51ff -// test: -// creation: 0x72908de76f99fca476f9e3a3b5d352f350a98cd77d09cebfc59ffe32a6ecaa0b -// invokation: 0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51 - -TxBrowser.prototype.setDefaultValues = function () { - this.connectInfo = '' - if (this.view) { - yo.update(this.view, this.render()) - } -} - -TxBrowser.prototype.submit = function (tx) { - var self = this - self.event.trigger('newTxLoading', [this.blockNumber, this.txNumber]) - if (tx) { - return self.update(null, tx) - } - if (!this.txNumber) { - self.update('no tx index or tx hash to look for') - return - } - try { - if (this.txNumber.indexOf('0x') !== -1) { - self.web3.eth.getTransaction(this.txNumber, function (error, result) { - self.update(error, result) - }) - } else { - self.web3.eth.getTransactionFromBlock(this.blockNumber, this.txNumber, function (error, result) { - self.update(error, result) - }) - } - } catch (e) { - self.update(e.message) - } -} - -TxBrowser.prototype.update = function (error, tx) { - var info = {} - if (error) { - this.view.querySelector('#error').innerHTML = error - } else { - if (tx) { - this.view.querySelector('#error').innerHTML = '' - if (!tx.to) { - tx.to = traceHelper.contractCreationToken('0') - } - info.from = tx.from - info.to = tx.to - info.hash = tx.hash - this.event.trigger('newTraceRequested', [this.blockNumber, this.txNumber, tx]) - } else { - var mes = '' - info.from = mes - info.to = mes - info.hash = mes - this.view.querySelector('#error').innerHTML = 'Cannot find transaction with reference. Block number: ' + this.blockNumber + '. Transaction index/hash: ' + this.txNumber - } - } -} - -TxBrowser.prototype.updateWeb3Url = function (newhost) { - init.setProvider(global.web3, newhost) - var self = this - this.checkWeb3(function (error, block) { - if (!error) { - self.connectInfo = 'Connected to ' + global.web3.currentProvider.host + '. Current block number: ' + block - } else { - self.connectInfo = 'Unable to connect to ' + global.web3.currentProvider.host + '. ' + error.message - } - yo.update(self.view, self.render()) - }) -} - -TxBrowser.prototype.checkWeb3 = function (callback) { - try { - global.web3.eth.getBlockNumber(function (error, block) { - callback(error, block) - }) - } catch (e) { - console.log(e) - callback(e.message, null) - } -} - -TxBrowser.prototype.updateBlockN = function (ev) { - this.blockNumber = ev.target.value -} - -TxBrowser.prototype.updateTxN = function (ev) { - this.txNumber = ev.target.value -} - -TxBrowser.prototype.load = function (txHash, tx) { - this.txNumber = txHash - this.submit(tx) -} - -TxBrowser.prototype.unload = function (txHash) { - this.event.trigger('unloadRequested') - this.init() -} - -TxBrowser.prototype.init = function (ev) { - this.setDefaultValues() -} - -TxBrowser.prototype.connectionSetting = function () { - if (this.displayConnectionSetting) { - var self = this - return yo`
Node URL: - ${this.connectInfo}
` - } else { - return '' - } -} - -TxBrowser.prototype.render = function () { - var self = this - var view = yo`
- ${this.connectionSetting()} -
-
- - -
-
- - -
-
- -
` - if (!this.view) { - this.view = view - } - return view -} - -module.exports = TxBrowser diff --git a/src/app/debugger/remix-debugger/src/ui/VmDebugger.js b/src/app/debugger/remix-debugger/src/ui/VmDebugger.js deleted file mode 100644 index 06953b2ccf..0000000000 --- a/src/app/debugger/remix-debugger/src/ui/VmDebugger.js +++ /dev/null @@ -1,126 +0,0 @@ -'use strict' -var csjs = require('csjs-inject') -var CodeListView = require('./CodeListView') -var CalldataPanel = require('./CalldataPanel') -var MemoryPanel = require('./MemoryPanel') -var CallstackPanel = require('./CallstackPanel') -var StackPanel = require('./StackPanel') -var StoragePanel = require('./StoragePanel') -var FullStoragesChangesPanel = require('./FullStoragesChanges') -var StepDetail = require('./StepDetail') -var DropdownPanel = require('./DropdownPanel') -var SolidityState = require('./SolidityState') -var SolidityLocals = require('./SolidityLocals') -var remixDebug = require('remix-debug') -var StorageResolver = remixDebug.storage.StorageResolver -var yo = require('yo-yo') - -var css = csjs` - .asmCode { - float: left; - width: 50%; - } - .stepDetail { - } - .vmheadView { - margin-top:10px; - } -` - -function VmDebugger (_parentUI, _traceManager, _codeManager, _solidityProxy, _callTree) { - let _parent = _parentUI.debugger - var self = this - this.view - this.asmCode = new CodeListView(_parent, _codeManager) - this.stackPanel = new StackPanel(_parentUI, _traceManager) - this.storagePanel = new StoragePanel(_parentUI, _traceManager) - this.memoryPanel = new MemoryPanel(_parentUI, _traceManager) - this.calldataPanel = new CalldataPanel(_parentUI, _traceManager) - this.callstackPanel = new CallstackPanel(_parentUI, _traceManager) - this.stepDetail = new StepDetail(_parentUI, _traceManager) - this.solidityState = new SolidityState(_parentUI, _traceManager, _codeManager, _solidityProxy) - this.solidityLocals = new SolidityLocals(_parentUI, _traceManager, _callTree) - - /* Return values - */ - this.returnValuesPanel = new DropdownPanel('Return Value', {json: true}) - this.returnValuesPanel.data = {} - _parentUI.event.register('indexChanged', this.returnValuesPanel, function (index) { - if (!self.view) return - var innerself = this - _traceManager.getReturnValue(index, function (error, returnValue) { - if (error) { - innerself.update([error]) - } else if (_parentUI.currentStepIndex === index) { - innerself.update([returnValue]) - } - }) - }) - /* Return values - */ - - this.fullStoragesChangesPanel = new FullStoragesChangesPanel(_parentUI, _traceManager) - - _parent.event.register('newTraceLoaded', this, function () { - if (!self.view) return - var storageResolver = new StorageResolver({web3: _parent.web3}) - self.storagePanel.storageResolver = storageResolver - self.solidityState.storageResolver = storageResolver - self.solidityLocals.storageResolver = storageResolver - self.fullStoragesChangesPanel.storageResolver = storageResolver - self.asmCode.basicPanel.show() - self.stackPanel.basicPanel.show() - self.storagePanel.basicPanel.show() - self.memoryPanel.basicPanel.show() - self.calldataPanel.basicPanel.show() - self.callstackPanel.basicPanel.show() - }) - _parent.event.register('traceUnloaded', this, function () { - if (!self.view) return - }) - _parent.callTree.event.register('callTreeReady', () => { - if (!self.view) return - if (_parent.callTree.reducedTrace.length) { - self.solidityLocals.basicPanel.show() - self.solidityState.basicPanel.show() - } - }) -} - -VmDebugger.prototype.renderHead = function () { - var headView = yo`
-
-
${this.asmCode.render()}
-
${this.stepDetail.render()}
-
-
` - if (!this.headView) { - this.headView = headView - } - return headView -} - -VmDebugger.prototype.remove = function () { - // used to stop listenning on event. bad and should be "refactored" - this.view = null -} - -VmDebugger.prototype.render = function () { - var view = yo`
-
- ${this.solidityLocals.render()} - ${this.solidityState.render()} - ${this.stackPanel.render()} - ${this.memoryPanel.render()} - ${this.storagePanel.render()} - ${this.callstackPanel.render()} - ${this.calldataPanel.render()} - ${this.returnValuesPanel.render()} - ${this.fullStoragesChangesPanel.render()} -
-
` - if (!this.view) { - this.view = view - } - return view -} - -module.exports = VmDebugger diff --git a/src/lib/cmdInterpreterAPI.js b/src/lib/cmdInterpreterAPI.js index e74e2cdaf3..5013a23554 100644 --- a/src/lib/cmdInterpreterAPI.js +++ b/src/lib/cmdInterpreterAPI.js @@ -10,7 +10,7 @@ var globalRegistry = require('../global/registry') var SourceHighlighter = require('../app/editor/sourceHighlighter') var RemixDebug = require('remix-debug').EthDebugger var TreeView = require('../app/ui/TreeView') // TODO setup a direct reference to the UI components -var solidityTypeFormatter = require('../app/debugger/remix-debugger/src/ui/SolidityTypeFormatter') +var solidityTypeFormatter = require('../app/debugger/debuggerUI/vmDebugger/utils/SolidityTypeFormatter') class CmdInterpreterAPI { constructor (terminal, localRegistry) {