version number

pull/7/head
yann300 9 years ago
parent b163b1e062
commit c49b9c2e8b
  1. 4
      index.html
  2. 11
      package.json
  3. 4
      src/code/codeManager.js
  4. 9
      src/code/codeResolver.js
  5. 3
      src/helpers/global.js
  6. 1
      src/trace/traceAnalyser.js
  7. 8
      src/trace/traceManager.js
  8. 10
      src/trace/traceRetriever.js
  9. 4
      src/ui/ASMCode.js
  10. 51
      src/ui/Ethdebugger.js
  11. 35
      src/ui/TxBrowser.js
  12. 4
      src/ui/VmDebugger.js
  13. 70
      src/web3Provider/web3Provider.js
  14. 41
      src/web3Provider/web3Providers.js
  15. 90
      src/web3Provider/web3VmProvider.js
  16. 24
      test-browser/init.js
  17. 35
      test/codeManager.js
  18. 20
      test/resources/testWeb3.js
  19. 25
      test/traceManager.js

@ -6,7 +6,9 @@
<script type="text/javascript">
function loadDebugger() {
var container = document.getElementById('app')
container.vmdebugger = new window.remix.Debugger()
container.vmdebugger = new window.remix.ui.Debugger()
container.vmdebugger.addProvider('INTERNAL')
container.vmdebugger.switchProvider('INTERNAL')
container.appendChild(container.vmdebugger.render())
}
</script>

@ -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": {

@ -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
}

@ -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 {

@ -4,5 +4,6 @@ module.exports = {
for (var property in source) {
destination[property] = source[property]
}
}
},
web3: null
}

@ -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))
}
}

@ -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) {

@ -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

@ -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

@ -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])
}
})
}

@ -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`<div style=${ui.formatCss(style.vmargin)}><span>Node URL: </span><input onkeyup=${function () { self.updateWeb3Url(arguments[0].target.value) }} value=${this.web3.currentProvider ? this.web3.currentProvider.host : ' - none - '} type='text' />
return yo`<div style=${ui.formatCss(style.vmargin)}><span>Node URL: </span><input onkeyup=${function () { self.updateWeb3Url(arguments[0].target.value) }} value=${util.web3.currentProvider ? util.web3.currentProvider.host : ' - none - '} type='text' />
<span>${this.connectInfo}</span></div>`
} else {
return ''

@ -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)

@ -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

@ -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

@ -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

@ -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()
})

@ -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)
})

@ -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

@ -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)

Loading…
Cancel
Save