diff --git a/index.html b/index.html index 052c51ed95..26cf0b6c91 100644 --- a/index.html +++ b/index.html @@ -6,7 +6,9 @@ diff --git a/package.json b/package.json index 968c78a54c..afaf2cfcae 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ethereum-remix", - "version": "0.0.2-alpha.0.0.4", + "version": "0.0.2-alpha.0.0.5", "description": "Ethereum IDE and tools for the web", "contributors": [ { @@ -13,17 +13,16 @@ } ], "main": "./src/index.js", - "dependencies": { - "browserify": "^13.0.1", - "web3": "^0.15.3", - "yo-yo": "^1.2.1" - }, "devDependencies": { + "browserify": "^13.0.1", + "ethereumjs-util": "^4.5.0", "http-server": "^0.9.0", "nightwatch": "^0.9.5", "standard": "^7.0.1", "standard-reporter": "^1.0.5", "tape": "^4.6.0", + "web3": "^0.15.3", + "yo-yo": "^1.2.1", "yo-yoify": "^3.1.0" }, "scripts": { diff --git a/src/code/codeManager.js b/src/code/codeManager.js index 029e225ea5..cbd45a5a8a 100644 --- a/src/code/codeManager.js +++ b/src/code/codeManager.js @@ -13,13 +13,11 @@ var EventManager = require('../lib/eventManager') - resolvingStep: when CodeManager resolves code/selected instruction of a new step */ -function CodeManager (_web3, _traceManager) { +function CodeManager (_traceManager) { util.extend(this, new EventManager()) - this.web3 = _web3 this.isLoading = false this.traceManager = _traceManager this.currentAddress = '' - codeResolver.setWeb3(_web3) this.codeResolver = codeResolver } diff --git a/src/code/codeResolver.js b/src/code/codeResolver.js index a206e7b93d..0d2a858b85 100644 --- a/src/code/codeResolver.js +++ b/src/code/codeResolver.js @@ -1,16 +1,11 @@ 'use strict' var codeUtils = require('./codeUtils') +var util = require('../helpers/global') module.exports = { - web3: null, - codes: {}, // assembly items instructions list by contract addesses instructionsIndexByBytesOffset: {}, // mapping between bytes offset and instructions index. - setWeb3: function (web3) { - this.web3 = web3 - }, - resolveCode: function (address, vmTraceIndex, transaction, callBack) { var cache = this.getExecutingCodeFromCache(address) if (cache) { @@ -26,7 +21,7 @@ module.exports = { loadCode: function (address, callback) { console.log('loading new code from web3 ' + address) - this.web3.eth.getCode(address, function (error, result) { + util.web3.eth.getCode(address, function (error, result) { if (error) { console.log(error) } else { diff --git a/src/helpers/global.js b/src/helpers/global.js index 8665889c16..e652127824 100644 --- a/src/helpers/global.js +++ b/src/helpers/global.js @@ -4,5 +4,6 @@ module.exports = { for (var property in source) { destination[property] = source[property] } - } + }, + web3: null } diff --git a/src/trace/traceAnalyser.js b/src/trace/traceAnalyser.js index 6532fc8629..fbeafabb4e 100644 --- a/src/trace/traceAnalyser.js +++ b/src/trace/traceAnalyser.js @@ -40,7 +40,6 @@ TraceAnalyser.prototype.buildReturnValues = function (index, step) { var offset = 2 * parseInt(step.stack[step.stack.length - 1], 16) var size = 2 * parseInt(step.stack[step.stack.length - 2], 16) var memory = this.trace[this.traceCache.memoryChanges[this.traceCache.memoryChanges.length - 1]].memory - console.log('push returnValue ' + index) this.traceCache.pushReturnValue(index, '0x' + memory.join('').substr(offset, size)) } } diff --git a/src/trace/traceManager.js b/src/trace/traceManager.js index f3762f02b3..8d9215fd77 100644 --- a/src/trace/traceManager.js +++ b/src/trace/traceManager.js @@ -4,14 +4,14 @@ var TraceRetriever = require('./traceRetriever') var TraceCache = require('./traceCache') var TraceStepManager = require('./traceStepManager') var traceHelper = require('../helpers/traceHelper') +var util = require('../helpers/global') -function TraceManager (_web3) { - this.web3 = _web3 +function TraceManager () { this.isLoading = false this.trace = null this.traceCache = new TraceCache() this.traceAnalyser = new TraceAnalyser(this.traceCache) - this.traceRetriever = new TraceRetriever(_web3) + this.traceRetriever = new TraceRetriever() this.traceStepManager = new TraceStepManager(this.traceAnalyser) this.tx } @@ -20,7 +20,7 @@ function TraceManager (_web3) { TraceManager.prototype.resolveTrace = function (tx, callback) { this.tx = tx this.init() - if (!this.web3) callback('web3 not loaded', false) + if (!util.web3) callback('web3 not loaded', false) this.isLoading = true var self = this this.traceRetriever.getTrace(tx.hash, function (error, result) { diff --git a/src/trace/traceRetriever.js b/src/trace/traceRetriever.js index 1ea39133d7..4face2e815 100644 --- a/src/trace/traceRetriever.js +++ b/src/trace/traceRetriever.js @@ -1,8 +1,8 @@ 'use strict' var traceHelper = require('../helpers/traceHelper') +var util = require('../helpers/global') -function TraceRetriever (_web3) { - this.web3 = _web3 +function TraceRetriever () { this.storages = {} // contains all intial storage (by addresses) } @@ -13,7 +13,7 @@ TraceRetriever.prototype.getTrace = function (txHash, callback) { disableStack: false, fullStorage: false } - this.web3.debug.traceTransaction(txHash, options, function (error, result) { + util.web3.debug.traceTransaction(txHash, options, function (error, result) { callback(error, result) }) } @@ -28,7 +28,7 @@ TraceRetriever.prototype.getStorage = function (tx, address, callback) { callback(null, {}) /* var self = this - this.web3.debug.storageAt(tx.blockNumber.toString(), tx.transactionIndex, address, function (error, result) { + util.web3.debug.storageAt(tx.blockNumber.toString(), tx.transactionIndex, address, function (error, result) { self.storages[address] = result callback(error, result) }) @@ -37,7 +37,7 @@ TraceRetriever.prototype.getStorage = function (tx, address, callback) { } TraceRetriever.prototype.debugStorageAtAvailable = function () { - return false // this.web3.version.node.toLowerCase().indexOf('geth') === -1 // storageAt not available if using geth + return false // util.web3.version.node.toLowerCase().indexOf('geth') === -1 // storageAt not available if using geth } module.exports = TraceRetriever diff --git a/src/ui/ASMCode.js b/src/ui/ASMCode.js index 025c17ed59..54c2f8b8ff 100644 --- a/src/ui/ASMCode.js +++ b/src/ui/ASMCode.js @@ -4,9 +4,9 @@ var yo = require('yo-yo') var CodeManager = require('../code/codeManager') var ui = require('../helpers/ui') -function ASMCode (_parent, _traceManager, _web3) { +function ASMCode (_parent, _traceManager) { this.parent = _parent - this.codeManager = new CodeManager(_web3, _traceManager) + this.codeManager = new CodeManager(_traceManager) this.code this.address this.codeView diff --git a/src/ui/Ethdebugger.js b/src/ui/Ethdebugger.js index aefe926ed3..fdc0eb9a50 100644 --- a/src/ui/Ethdebugger.js +++ b/src/ui/Ethdebugger.js @@ -8,30 +8,25 @@ var style = require('./styles/basicStyles') var util = require('../helpers/global') var EventManager = require('../lib/eventManager') var yo = require('yo-yo') -var init = require('../helpers/init') var ui = require('../helpers/ui') -var Web3Provider = require('../web3Provider/web3Provider') +var Web3Providers = require('../web3Provider/web3Providers') +var init = require('../helpers/init') -function Ethdebugger (_web) { +function Ethdebugger () { util.extend(this, new EventManager()) + this.currentStepIndex = -1 this.tx this.statusMessage = '' this.view - this.displayConnectionSetting = true - - this.web3 = new Web3Provider() - if (_web) { - this.setProvider('EXTERNAL', _web) - } else { - this.setProvider('EXTERNAL', init.loadWeb3()) - } - - this.traceManager = new TraceManager(this.web3) + this.web3Providers = new Web3Providers() + this.addProvider('INTERNAL', init.loadWeb3()) + this.switchProvider('INTERNAL') + this.traceManager = new TraceManager() var self = this - this.txBrowser = new TxBrowser(this.web3, this.displayConnectionSetting) + this.txBrowser = new TxBrowser(this) this.txBrowser.register('newTxLoading', this, function () { self.unLoad() }) @@ -45,29 +40,27 @@ function Ethdebugger (_web) { this.stepManager.register('stepChanged', this, function (stepIndex) { self.stepChanged(stepIndex) }) - this.vmDebugger = new VmDebugger(this, this.traceManager, this.web3) - this.sticker = new Sticker(this, this.traceManager, this.web3) + this.vmDebugger = new VmDebugger(this, this.traceManager) + this.sticker = new Sticker(this, this.traceManager) } -Ethdebugger.prototype.setProvider = function (type, obj) { - if (type === 'EXTERNAL') { - init.extendWeb3(obj) - this.web3.initWeb3(obj) - this.displayConnectionSetting = true - } else if (type === 'VM') { - this.web3.initVM(obj) - this.displayConnectionSetting = false - } +Ethdebugger.prototype.web3 = function () { + return util.web3 } -Ethdebugger.prototype.getWeb3Provider = function () { - return this.web3 +Ethdebugger.prototype.addProvider = function (type, obj) { + this.web3Providers.addProvider(type, obj) + this.trigger('providerAdded', [type]) } -Ethdebugger.prototype.changeProvider = function (type) { - this.web3.switchTo(type, function (error, result) { +Ethdebugger.prototype.switchProvider = function (type) { + var self = this + this.web3Providers.get(type, function (error, obj) { if (error) { console.log('provider ' + type + ' not defined') + } else { + util.web3 = obj + self.trigger('providerChanged', [type]) } }) } diff --git a/src/ui/TxBrowser.js b/src/ui/TxBrowser.js index c549bafb0c..a4d18413f9 100644 --- a/src/ui/TxBrowser.js +++ b/src/ui/TxBrowser.js @@ -6,9 +6,8 @@ var yo = require('yo-yo') var ui = require('../helpers/ui') var init = require('../helpers/init') -function TxBrowser (_web3, _displayConnectionSetting) { +function TxBrowser (_parent) { util.extend(this, new EventManager()) - this.web3 = _web3 this.blockNumber this.txNumber @@ -17,12 +16,14 @@ function TxBrowser (_web3, _displayConnectionSetting) { this.to this.view this.displayConnectionSetting = true - if (_displayConnectionSetting !== undefined) { - this.displayConnectionSetting = _displayConnectionSetting - } - if (this.displayConnectionSetting) { - this.setDefaultValues() - } + var self = this + _parent.register('providerChanged', this, function (provider) { + self.displayConnectionSetting = provider === 'INTERNAL' + self.setDefaultValues() + if (self.view) { + yo.update(self.view, self.render()) + } + }) } // creation 0xa9619e1d0a35b2c1d686f5b661b3abd87f998d2844e8e9cc905edb57fc9ce349 @@ -36,9 +37,9 @@ TxBrowser.prototype.setDefaultValues = function () { this.to = ' - ' this.hash = ' - ' this.blockNumber = null - this.txNumber = '0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51' + this.txNumber = '' this.connectInfo = '' - this.updateWeb3Url(this.web3.currentProvider.host) + this.updateWeb3Url(util.web3.currentProvider.host) } TxBrowser.prototype.submit = function () { @@ -49,9 +50,9 @@ TxBrowser.prototype.submit = function () { var tx try { if (this.txNumber.indexOf('0x') !== -1) { - tx = this.web3.eth.getTransaction(this.txNumber) + tx = util.web3.eth.getTransaction(this.txNumber) } else { - tx = this.web3.eth.getTransactionFromBlock(this.blockNumber, this.txNumber) + tx = util.web3.eth.getTransactionFromBlock(this.blockNumber, this.txNumber) } } catch (e) { console.log(e) @@ -76,13 +77,13 @@ TxBrowser.prototype.submit = function () { } TxBrowser.prototype.updateWeb3Url = function (newhost) { - init.setProvider(this.web3, newhost) + init.setProvider(util.web3, newhost) var self = this this.checkWeb3(function (error, block) { if (!error) { - self.connectInfo = 'Connected to ' + self.web3.currentProvider.host + '. Current block number: ' + block + self.connectInfo = 'Connected to ' + util.web3.currentProvider.host + '. Current block number: ' + block } else { - self.connectInfo = 'Unable to connect to ' + self.web3.currentProvider.host + '. ' + error.message + self.connectInfo = 'Unable to connect to ' + util.web3.currentProvider.host + '. ' + error.message } yo.update(self.view, self.render()) }) @@ -90,7 +91,7 @@ TxBrowser.prototype.updateWeb3Url = function (newhost) { TxBrowser.prototype.checkWeb3 = function (callback) { try { - this.web3.eth.getBlockNumber(function (error, block) { + util.web3.eth.getBlockNumber(function (error, block) { callback(error, block) }) } catch (e) { @@ -121,7 +122,7 @@ TxBrowser.prototype.init = function (ev) { TxBrowser.prototype.connectionSetting = function () { if (this.displayConnectionSetting) { var self = this - return yo`
Node URL: + return yo`
Node URL: ${this.connectInfo}
` } else { return '' diff --git a/src/ui/VmDebugger.js b/src/ui/VmDebugger.js index 1a67ac8731..d319d02d2c 100644 --- a/src/ui/VmDebugger.js +++ b/src/ui/VmDebugger.js @@ -11,8 +11,8 @@ var FullStoragesChangesPanel = require('./FullStoragesChanges') var yo = require('yo-yo') var ui = require('../helpers/ui') -function VmDebugger (_parent, _traceManager, _web3) { - this.asmCode = new ASMCode(_parent, _traceManager, _web3) +function VmDebugger (_parent, _traceManager) { + this.asmCode = new ASMCode(_parent, _traceManager) this.stackPanel = new StackPanel(_parent, _traceManager) this.storagePanel = new StoragePanel(_parent, _traceManager) this.memoryPanel = new MemoryPanel(_parent, _traceManager) diff --git a/src/web3Provider/web3Provider.js b/src/web3Provider/web3Provider.js deleted file mode 100644 index 45285c84ce..0000000000 --- a/src/web3Provider/web3Provider.js +++ /dev/null @@ -1,70 +0,0 @@ -var Web3VMProvider = require('./web3VmProvider') - -function Web3Provider () { - var self = this - this.currentMode - this.actions = {} - this.modes = {} - this.currentProvider = {'host': 'browser-solidity proxy provider'} - this.providers = { 'HttpProvider': function (url) {} } - this.eth = {} - this.debug = {} - this.eth.getCode = function (address, cb) { if (self.check(cb)) { return self.actions[self.currentMode]['eth.getCode'].apply(self.executingMode(), arguments) } } - this.setProvider = function (provider) { if (self.check()) { return self.actions[self.currentMode]['setProvider'].apply(self.executingMode(), [provider]) } } - this.debug.traceTransaction = function (txHash, options, cb) { if (self.check()) { return self.actions[self.currentMode]['debug.traceTransaction'].apply(self.executingMode(), arguments) } } - this.debug.storageAt = function (blockNumber, txIndex, address, cb) { if (self.check()) { return self.actions[self.currentMode]['debug.storageAt'].apply(self.executingMode(), arguments) } } - this.eth.getTransaction = function (txHash) { if (self.check()) { return self.actions[self.currentMode]['eth.getTransaction'].apply(self.executingMode(), arguments) } } - this.eth.getTransactionFromBlock = function (blockNumber, txIndex) { if (self.check()) { return self.actions[self.currentMode]['eth.getTransactionFromBlock'].apply(self.executingMode(), arguments) } } - this.eth.getBlockNumber = function (cb) { if (self.check()) { return self.actions[self.currentMode]['eth.getBlockNumber'].apply(self.executingMode(), arguments) } } -} - -Web3Provider.prototype.check = function (cb) { - if (!this.currentMode) { - if (cb) { - cb('error: no provider has been setup ', null) - } - return false - } - return true -} - -Web3Provider.prototype.switchTo = function (type, cb) { - if (this.actions[type]) { - this.currentMode = type - cb(null, 'ok') - } else { - cb('error: this provider has not been setup (' + type + ')', null) - } -} - -Web3Provider.prototype.executingMode = function () { - return this.modes[this.currentMode] -} - -Web3Provider.prototype.initWeb3 = function (web3) { - this.actions['EXTERNAL'] = {} - this.actions['EXTERNAL']['eth.getCode'] = web3.eth.getCode - this.actions['EXTERNAL']['setProvider'] = web3.setProvider - this.actions['EXTERNAL']['debug.traceTransaction'] = web3.debug.traceTransaction - this.actions['EXTERNAL']['debug.storageAt'] = web3.debug.storageAt - this.actions['EXTERNAL']['eth.getTransaction'] = web3.eth.getTransaction - this.actions['EXTERNAL']['eth.getTransactionFromBlock'] = web3.eth.getTransactionFromBlock - this.actions['EXTERNAL']['eth.getBlockNumber'] = web3.eth.getBlockNumber - this.modes['EXTERNAL'] = web3 -} - -Web3Provider.prototype.initVM = function (vm) { - var vmProvider = new Web3VMProvider() - vmProvider.setVM(vm) - this.actions['VM'] = {} - this.actions['VM']['eth.getCode'] = vmProvider.getCode - this.actions['VM']['setProvider'] = vmProvider.setProvider - this.actions['VM']['debug.traceTransaction'] = vmProvider.traceTransaction - this.actions['VM']['debug.storageAt'] = vmProvider.storageAt - this.actions['VM']['eth.getTransaction'] = vmProvider.getTransaction - this.actions['VM']['eth.getTransactionFromBlock'] = vmProvider.getTransactionFromBlock - this.actions['VM']['eth.getBlockNumber'] = vmProvider.getBlockNumber - this.modes['VM'] = vmProvider -} - -module.exports = Web3Provider diff --git a/src/web3Provider/web3Providers.js b/src/web3Provider/web3Providers.js new file mode 100644 index 0000000000..4fbe0b673c --- /dev/null +++ b/src/web3Provider/web3Providers.js @@ -0,0 +1,41 @@ +var Web3VMProvider = require('./web3VmProvider') +var init = require('../helpers/init') + +function Web3Providers () { + this.modes = {} +} + +Web3Providers.prototype.addProvider = function (type, obj) { + if (type === 'INTERNAL') { + var web3 = init.loadWeb3() + this.addWeb3(type, web3) + } else if (type === 'EXTERNAL') { + init.extendWeb3(obj) + this.addWeb3(type, obj) + } else if (type === 'VM') { + this.addVM(obj) + } else { + this.addWeb3(type, obj) + } +} + +Web3Providers.prototype.get = function (type, cb) { + if (this.modes[type]) { + this.currentMode = type + cb(null, this.modes[type]) + } else { + cb('error: this provider has not been setup (' + type + ')', null) + } +} + +Web3Providers.prototype.addWeb3 = function (type, web3) { + this.modes[type] = web3 +} + +Web3Providers.prototype.addVM = function (vm) { + var vmProvider = new Web3VMProvider() + vmProvider.setVM(vm) + this.modes['VM'] = vmProvider +} + +module.exports = Web3Providers diff --git a/src/web3Provider/web3VmProvider.js b/src/web3Provider/web3VmProvider.js index 069b0c2f75..4f1cb75d89 100644 --- a/src/web3Provider/web3VmProvider.js +++ b/src/web3Provider/web3VmProvider.js @@ -1,49 +1,22 @@ var ethJSUtil = require('ethereumjs-util') -var BN = ethJSUtil.BN function web3VmProvider () { + var self = this this.vm this.vmTraces = {} this.txs = {} this.processingHash this.incr = 0 -} - -var hexConvert = function (ints) { - var ret = '0x' - for (var i = 0; i < ints.length; i++) { - try { - var h = ints[i] - if (h) { - h = h.toString(16) - ret += ('0x' + h) < 0x10 ? '0' + h : h - } else { - ret += '00' - } - } catch (e) { - console.log('hexconvert ' + i + ' ' + ints.length) - console.log(e) - } - } - return ret -} - -var hexListConvert = function (intsList) { - var ret = [] - for (var k in intsList) { - ret.push(hexConvert(intsList[k])) - } - return ret -} - -var formatMemory = function (mem) { - var hexMem = hexConvert(mem).substr(2) - var ret = [] - for (var k = 0; k < hexMem.length; k += 32) { - var row = hexMem.substr(k, 32) - ret.push(row) - } - return ret + this.eth = {} + this.debug = {} + this.eth.getCode = function (address, cb) { return self.getCode(address, cb) } + this.eth.getTransaction = function (hash, cb) { return self.getTransaction(hash, cb) } + this.eth.getTransactionFromBlock = function (blockNumber, txIndex, cb) { return self.getTransactionFromBlock(blockNumber, txIndex, cb) } + this.eth.getBlockNumber = function (cb) { return self.getBlockNumber(cb) } + this.debug.traceTransaction = function (hash, options, cb) { return self.traceTransaction(hash, options, cb) } + this.debug.storageAt = function (blockNumber, txIndex, address, cb) { return self.storageAt(blockNumber, txIndex, address, cb) } + this.providers = { 'HttpProvider': function (url) {} } + this.currentProvider = {'host': 'vm provider'} } web3VmProvider.prototype.setVM = function (vm) { @@ -109,9 +82,8 @@ web3VmProvider.prototype.pushTrace = function (self, data) { storage: data.storage, op: data.opcode.name, pc: data.pc, - gas: data.opcode.fee.toString(), - gasLeft: data.gasLeft.toString(), - gasCost: self.vmTraces[self.processingHash].structLogs.length > 0 ? ((new BN(self.vmTraces[self.processingHash].structLogs[0].gasLeft)) - data.gasLeft).toString() : data.opcode.fee.toString() + gasCost: data.opcode.fee.toString(), + gas: data.gasLeft.toString() } self.vmTraces[self.processingHash].structLogs.push(step) } @@ -141,6 +113,8 @@ web3VmProvider.prototype.traceTransaction = function (txHash, options, cb) { web3VmProvider.prototype.storageAt = function (blockNumber, txIndex, address, cb) { cb(null, {}) } +web3VmProvider.prototype.getBlockNumber = function (cb) { cb(null, 'vm provider') } + web3VmProvider.prototype.getTransaction = function (txHash, cb) { if (this.txs[txHash]) { if (cb) { @@ -157,7 +131,7 @@ web3VmProvider.prototype.getTransaction = function (txHash, cb) { } web3VmProvider.prototype.getTransactionFromBlock = function (blockNumber, txIndex, cb) { - var mes = 'not supposed to be needed by remix' + var mes = 'not supposed to be needed by remix in vmmode' console.log(mes) if (cb) { cb(mes, null) @@ -165,4 +139,36 @@ web3VmProvider.prototype.getTransactionFromBlock = function (blockNumber, txInde throw mes } +var hexConvert = function (ints) { + var ret = '0x' + for (var i = 0; i < ints.length; i++) { + var h = ints[i] + if (h) { + h = h.toString(16) + ret += ('0x' + h) < 0x10 ? '0' + h : h + } else { + ret += '00' + } + } + return ret +} + +var hexListConvert = function (intsList) { + var ret = [] + for (var k in intsList) { + ret.push(hexConvert(intsList[k])) + } + return ret +} + +var formatMemory = function (mem) { + var hexMem = hexConvert(mem).substr(2) + var ret = [] + for (var k = 0; k < hexMem.length; k += 32) { + var row = hexMem.substr(k, 32) + ret.push(row) + } + return ret +} + module.exports = web3VmProvider diff --git a/test-browser/init.js b/test-browser/init.js index 9b853a72e1..11a014f8a2 100644 --- a/test-browser/init.js +++ b/test-browser/init.js @@ -15,7 +15,10 @@ function injectScript (file, browser, callback) { browser.execute(function (data) { var vmdebugger = document.getElementById('app').vmdebugger data = JSON.parse(data) - vmdebugger.web3.eth.getCode = function (address, callback) { + var uiTestweb3 = {} + uiTestweb3.eth = {} + uiTestweb3.debug = {} + uiTestweb3.eth.getCode = function (address, callback) { if (callback) { callback(null, data.testCodes[address]) } else { @@ -23,15 +26,15 @@ function injectScript (file, browser, callback) { } } - vmdebugger.web3.debug.traceTransaction = function (txHash, options, callback) { + uiTestweb3.debug.traceTransaction = function (txHash, options, callback) { callback(null, data.testTraces[txHash]) } - vmdebugger.web3.debug.storageAt = function (blockNumber, txIndex, address, callback) { + uiTestweb3.debug.storageAt = function (blockNumber, txIndex, address, callback) { callback(null, {}) } - vmdebugger.web3.eth.getTransaction = function (txHash, callback) { + uiTestweb3.eth.getTransaction = function (txHash, callback) { if (callback) { callback(null, data.testTxs[txHash]) } else { @@ -39,7 +42,7 @@ function injectScript (file, browser, callback) { } } - vmdebugger.web3.eth.getTransactionFromBlock = function (blockNumber, txIndex, callback) { + uiTestweb3.eth.getTransactionFromBlock = function (blockNumber, txIndex, callback) { if (callback) { callback(null, data.testTxsByBlock[blockNumber + '-' + txIndex]) } else { @@ -47,9 +50,16 @@ function injectScript (file, browser, callback) { } } - vmdebugger.web3.eth.getBlockNumber = function (callback) { callback(null, 'web3 modified for testing purposes :)') } + uiTestweb3.eth.getBlockNumber = function (callback) { callback(null, 'web3 modified for testing purposes :)') } - vmdebugger.web3.currentProvider = {host: 'web3 modified for testing purposes :)'} + uiTestweb3.eth.providers = { 'HttpProvider': function (url) {} } + + uiTestweb3.eth.setProvider = function (provider) {} + + uiTestweb3.currentProvider = {host: 'web3 modified for testing purposes :)'} + + vmdebugger.addProvider('TEST', uiTestweb3) + vmdebugger.switchProvider('TEST') }, [result], function () { callback() }) diff --git a/test/codeManager.js b/test/codeManager.js index bcb7653496..2d9ceb9da3 100644 --- a/test/codeManager.js +++ b/test/codeManager.js @@ -1,25 +1,34 @@ 'use strict' var tape = require('tape') -var init = require('../src/helpers/init') +var Web3Providers = require('../src/web3Provider/web3Providers') var TraceManager = require('../src/trace/traceManager') var CodeManager = require('../src/code/codeManager') var web3Test = require('./resources/testWeb3') -var initWeb3 = require('./init') +var util = require('../src/helpers/global') tape('CodeManager', function (t) { var codeManager - var web3 = init.loadWeb3() - initWeb3.overrideWeb3(web3, web3Test) - var traceManager = new TraceManager(web3) - codeManager = new CodeManager(web3, traceManager) - var contractCode = web3.eth.getCode('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5') - codeManager.codeResolver.cacheExecutingCode('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5', contractCode) // so a call to web3 is not necessary - var tx = web3.eth.getTransaction('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') - traceManager.resolveTrace(tx, function (error, result) { + var web3Providers = new Web3Providers() + web3Providers.addProvider('TEST', web3Test) + web3Providers.get('TEST', function (error, obj) { if (error) { - t.fail(' - traceManager.resolveTrace - failed ' + result) + var mes = 'provider TEST not defined' + console.log(mes) + t.fail(mes) } else { - continueTesting(t, codeManager) + util.web3 = obj + var traceManager = new TraceManager() + codeManager = new CodeManager(traceManager) + var contractCode = util.web3.eth.getCode('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5') + codeManager.codeResolver.cacheExecutingCode('0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5', contractCode) // so a call to web3 is not necessary + var tx = util.web3.eth.getTransaction('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') + traceManager.resolveTrace(tx, function (error, result) { + if (error) { + t.fail(' - traceManager.resolveTrace - failed ' + result) + } else { + continueTesting(t, codeManager) + } + }) } }) }) @@ -54,7 +63,7 @@ function continueTesting (t, codeManager) { } } }) - var tx = codeManager.web3.eth.getTransaction('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') + var tx = util.web3.eth.getTransaction('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') codeManager.resolveStep(0, tx) codeManager.resolveStep(70, tx) }) diff --git a/test/resources/testWeb3.js b/test/resources/testWeb3.js index f2e6467966..f5d8bbb4e7 100644 --- a/test/resources/testWeb3.js +++ b/test/resources/testWeb3.js @@ -1,10 +1,12 @@ 'use strict' var init = require('../init') var web3Override = {} +web3Override.eth = {} +web3Override.debug = {} var data = init.readFile(require('path').resolve(__dirname, 'testWeb3.json')) var data = JSON.parse(data) -web3Override.getCode = function (address, callback) { +web3Override.eth.getCode = function (address, callback) { if (callback) { callback(null, data.testCodes[address]) } else { @@ -12,15 +14,15 @@ web3Override.getCode = function (address, callback) { } } -web3Override.traceTransaction = function (txHash, options, callback) { +web3Override.debug.traceTransaction = function (txHash, options, callback) { callback(null, data.testTraces[txHash]) } -web3Override.storageAt = function (blockNumber, txIndex, address, callback) { +web3Override.debug.storageAt = function (blockNumber, txIndex, address, callback) { callback(null, {}) } -web3Override.getTransaction = function (txHash, callback) { +web3Override.eth.getTransaction = function (txHash, callback) { if (callback) { callback(null, data.testTxs[txHash]) } else { @@ -28,7 +30,7 @@ web3Override.getTransaction = function (txHash, callback) { } } -web3Override.getTransactionFromBlock = function (blockNumber, txIndex, callback) { +web3Override.eth.getTransactionFromBlock = function (blockNumber, txIndex, callback) { if (callback) { callback(null, data.testTxsByBlock[blockNumber + '-' + txIndex]) } else { @@ -36,7 +38,13 @@ web3Override.getTransactionFromBlock = function (blockNumber, txIndex, callback) } } -web3Override.getBlockNumber = function (callback) { callback('web3 modified testing purposes :)') } +web3Override.eth.getBlockNumber = function (callback) { callback('web3 modified testing purposes :)') } + +web3Override.eth.setProvider = function (provider) {} + +web3Override.eth.providers = { 'HttpProvider': function (url) {} } + +web3Override.eth.currentProvider = {'host': 'test provider'} if (typeof (module) !== 'undefined' && typeof (module.exports) !== 'undefined') { module.exports = web3Override diff --git a/test/traceManager.js b/test/traceManager.js index 7bc7d9ae4d..facb586eca 100644 --- a/test/traceManager.js +++ b/test/traceManager.js @@ -1,22 +1,31 @@ 'use strict' var TraceManager = require('../src/trace/traceManager') var tape = require('tape') -var init = require('../src/helpers/init') +var Web3Providers = require('../src/web3Provider/web3Providers') +var util = require('../src/helpers/global') var web3Test = require('./resources/testWeb3') -var initWeb3 = require('./init') tape('TraceManager', function (t) { var traceManager t.test('TraceManager.init', function (st) { - var web3 = init.loadWeb3() - initWeb3.overrideWeb3(web3, web3Test) - traceManager = new TraceManager(web3) - st.end() + var web3Providers = new Web3Providers() + web3Providers.addProvider('TEST', web3Test) + web3Providers.get('TEST', function (error, obj) { + if (error) { + var mes = 'provider TEST not defined' + console.log(mes) + st.fail(mes) + } else { + util.web3 = obj + traceManager = new TraceManager() + st.end() + } + }) }) t.test('TraceManager.resolveTrace', function (st) { - var tx = traceManager.web3.eth.getTransaction('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') + var tx = util.web3.eth.getTransaction('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') traceManager.resolveTrace(tx, function (error, result) { if (error) { st.fail(' - traceManager.resolveTrace - failed ' + result) @@ -45,7 +54,7 @@ tape('TraceManager', function (t) { }) t.test('TraceManager.getStorageAt', function (st) { - var tx = traceManager.web3.eth.getTransaction('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') + var tx = util.web3.eth.getTransaction('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') traceManager.getStorageAt(110, tx, function (error, result) { if (error) { st.fail(error)