diff --git a/package.json b/package.json
index a2a6684c51..d549119332 100644
--- a/package.json
+++ b/package.json
@@ -21,13 +21,15 @@
"devDependencies": {
"babel-preset-react": "^6.5.0",
"babelify": "^7.2.0",
+ "mocha": "^2.5.3",
+ "should": "^9.0.2",
"standard": "^7.0.1",
"standard-reporter": "^1.0.5"
},
"scripts": {
"start_node": "eth --rpccorsdomain \"*\" -j -v 0",
"build": "mkdir -p build; browserify -t [ babelify --presets [ react ] ] src/index.js -o build/app.js",
- "test" : "standard"
+ "test": "standard && mocha"
},
"repository": {
"type": "git",
diff --git a/src/codeManager.js b/src/code/codeManager.js
similarity index 94%
rename from src/codeManager.js
rename to src/code/codeManager.js
index da98f3f307..ed61b451be 100644
--- a/src/codeManager.js
+++ b/src/code/codeManager.js
@@ -1,8 +1,8 @@
'use strict'
-var traceManagerUtil = require('./traceManagerUtil')
+var traceHelper = require('../helpers/traceHelper')
var codeResolver = require('./codeResolver')
-var util = require('./util')
-var EventManager = require('./eventManager')
+var util = require('../helpers/global')
+var EventManager = require('../lib/eventManager')
/*
resolve contract code referenced by vmtrace in order to be used by asm listview.
@@ -42,7 +42,7 @@ CodeManager.prototype.resolveStep = function (stepIndex, tx) {
CodeManager.prototype.ensureCodeLoaded = function (address, currentStep, tx) {
var self = this
if (address !== this.currentAddress) {
- if (traceManagerUtil.isContractCreation(address)) {
+ if (traceHelper.isContractCreation(address)) {
this.traceManager.getContractCreationCode(address, function (error, hexCode) {
// contract creation
if (error) {
diff --git a/src/codeResolver.js b/src/code/codeResolver.js
similarity index 100%
rename from src/codeResolver.js
rename to src/code/codeResolver.js
diff --git a/src/codeUtils.js b/src/code/codeUtils.js
similarity index 100%
rename from src/codeUtils.js
rename to src/code/codeUtils.js
diff --git a/src/opcodes.js b/src/code/opcodes.js
similarity index 100%
rename from src/opcodes.js
rename to src/code/opcodes.js
diff --git a/src/debugger.js b/src/debugger.js
index 84709b7374..8baa0b8a9a 100644
--- a/src/debugger.js
+++ b/src/debugger.js
@@ -4,8 +4,8 @@ var TxBrowser = require('./txBrowser')
var StepManager = require('./stepManager')
var VmDebugger = require('./vmDebugger')
var style = require('./basicStyles')
-var util = require('./util')
-var EventManager = require('./eventManager')
+var util = require('./helpers/global')
+var EventManager = require('./lib/eventManager')
module.exports = React.createClass({
ethDebuggerSelectedItem: -1,
diff --git a/src/util.js b/src/helpers/global.js
similarity index 100%
rename from src/util.js
rename to src/helpers/global.js
diff --git a/src/helpers/init.js b/src/helpers/init.js
new file mode 100644
index 0000000000..e4c93ae891
--- /dev/null
+++ b/src/helpers/init.js
@@ -0,0 +1,19 @@
+'use strict'
+var Web3 = require('web3')
+var Web3Admin = require('../util/web3Admin')
+var TraceManager = require('../trace/traceManager')
+var CodeManager = require('../code/codeManager')
+
+module.exports = {
+ loadContext: function () {
+ var web3 = new Web3()
+ web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'))
+ Web3Admin.extend(web3)
+ var traceManager = new TraceManager(web3)
+ return {
+ web3: web3,
+ traceManager: traceManager,
+ codeManager: new CodeManager(web3, traceManager)
+ }
+ }
+}
diff --git a/src/traceManagerUtil.js b/src/helpers/traceHelper.js
similarity index 100%
rename from src/traceManagerUtil.js
rename to src/helpers/traceHelper.js
diff --git a/src/helpers/ui.js b/src/helpers/ui.js
new file mode 100644
index 0000000000..615c9959ce
--- /dev/null
+++ b/src/helpers/ui.js
@@ -0,0 +1,35 @@
+'use strict'
+module.exports = {
+ formatMemory: function (mem, width) {
+ var ret = ''
+ if (!mem) {
+ return ret
+ }
+
+ if (!mem.substr) {
+ mem = mem.join('') // geth returns an array, eth return raw string
+ }
+
+ for (var k = 0; k < mem.length; k += (width * 2)) {
+ var memory = mem.substr(k, width * 2)
+ var content = this.tryConvertAsciiFormat(memory)
+ ret += '0x' + k.toString(16) + ' ' + content.raw + ' ' + content.ascii + '\n'
+ }
+ return ret
+ },
+
+ tryConvertAsciiFormat: function (memorySlot) {
+ var ret = { ascii: '', raw: '' }
+ for (var k = 0; k < memorySlot.length; k += 2) {
+ var raw = memorySlot.substr(k, 2)
+ var ascii = String.fromCharCode(parseInt(raw, 16))
+ ascii = ascii.replace(/\W/g, '?')
+ if (ascii === '') {
+ ascii = '?'
+ }
+ ret.ascii += ascii
+ ret.raw += ' ' + raw
+ }
+ return ret
+ }
+}
diff --git a/src/index.js b/src/index.js
index 3b970a9867..a3b608a91f 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,26 +1,10 @@
'use strict'
var ReactDOM = require('react-dom')
var React = require('react')
-var Web3 = require('web3')
-var Web3Admin = require('./web3Admin')
-var TraceManager = require('./traceManager')
-var CodeManager = require('./codeManager')
-
-function loadContext () {
- var web3 = new Web3()
- web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'))
- Web3Admin.extend(web3)
- var traceManager = new TraceManager(web3)
- return {
- web3: web3,
- traceManager: traceManager,
- codeManager: new CodeManager(web3, traceManager)
- }
-}
-
+var util = require('./helpers/init')
var Debugger = require('./debugger')
ReactDOM.render(
- ,
+ ,
document.getElementById('app')
)
diff --git a/src/eventManager.js b/src/lib/eventManager.js
similarity index 100%
rename from src/eventManager.js
rename to src/lib/eventManager.js
diff --git a/src/memoryPanel.js b/src/memoryPanel.js
index 4a656309d2..804055ec0b 100644
--- a/src/memoryPanel.js
+++ b/src/memoryPanel.js
@@ -1,6 +1,7 @@
'use strict'
var React = require('react')
var BasicPanel = require('./basicPanel')
+var util = require('./helpers/ui')
module.exports = React.createClass({
contextTypes: {
@@ -33,43 +34,10 @@ module.exports = React.createClass({
console.log(error)
} else if (self.context.root.ethDebuggerSelectedItem === index) {
self.setState({
- data: self.formatMemory(memory, 16)
+ data: util.formatMemory(memory, 16)
})
}
})
})
- },
-
- formatMemory: function (mem, width) {
- var ret = ''
- if (!mem) {
- return ret
- }
-
- if (!mem.substr) {
- mem = mem.join('') // geth returns an array, eth return raw string
- }
-
- for (var k = 0; k < mem.length; k += (width * 2)) {
- var memory = mem.substr(k, width * 2)
- var content = this.tryAsciiFormat(memory)
- ret += this.context.web3.toHex(k) + ' ' + content.raw + ' ' + content.ascii + '\n'
- }
- return ret
- },
-
- tryAsciiFormat: function (memorySlot) {
- var ret = { ascii: '', raw: '' }
- for (var k = 0; k < memorySlot.length; k += 2) {
- var raw = memorySlot.substr(k, 2)
- var ascii = String.fromCharCode(parseInt(raw, 16))
- ascii = ascii.replace(/\W/g, '?')
- if (ascii === '') {
- ascii = '?'
- }
- ret.ascii += ascii
- ret.raw += ' ' + raw
- }
- return ret
}
})
diff --git a/src/traceAnalyser.js b/src/trace/traceAnalyser.js
similarity index 77%
rename from src/traceAnalyser.js
rename to src/trace/traceAnalyser.js
index 2e7f67a9c4..b482ae86d3 100644
--- a/src/traceAnalyser.js
+++ b/src/trace/traceAnalyser.js
@@ -1,5 +1,5 @@
'use strict'
-var traceManagerUtil = require('./traceManagerUtil')
+var traceHelper = require('../helpers/traceHelper')
function TraceAnalyser (_cache) {
this.traceCache = _cache
@@ -18,7 +18,7 @@ TraceAnalyser.prototype.analyse = function (trace, tx, callback) {
callStack: callStack.slice(0)
})
- if (traceManagerUtil.isContractCreation(tx.to)) {
+ if (traceHelper.isContractCreation(tx.to)) {
this.traceCache.pushContractCreation(tx.to, tx.input)
}
@@ -45,17 +45,17 @@ TraceAnalyser.prototype.buildMemory = function (index, step) {
}
TraceAnalyser.prototype.buildStorage = function (index, step, context) {
- if (traceManagerUtil.newContextStorage(step)) {
- var calledAddress = traceManagerUtil.resolveCalledAddress(index, this.trace)
+ if (traceHelper.newContextStorage(step)) {
+ var calledAddress = traceHelper.resolveCalledAddress(index, this.trace)
if (calledAddress) {
context.currentStorageAddress = calledAddress
} else {
console.log('unable to build storage changes. ' + index + ' does not match with a CALL. storage changes will be corrupted')
}
this.traceCache.pushStoreChanges(index + 1, context.currentStorageAddress)
- } else if (traceManagerUtil.isSSTOREInstruction(step)) {
+ } else if (traceHelper.isSSTOREInstruction(step)) {
this.traceCache.pushStoreChanges(index + 1, context.currentStorageAddress, step.stack[step.stack.length - 1], step.stack[step.stack.length - 2])
- } else if (traceManagerUtil.isReturnInstruction(step)) {
+ } else if (traceHelper.isReturnInstruction(step)) {
context.currentStorageAddress = context.previousStorageAddress
this.traceCache.pushStoreChanges(index + 1, context.currentStorageAddress)
}
@@ -63,14 +63,14 @@ TraceAnalyser.prototype.buildStorage = function (index, step, context) {
}
TraceAnalyser.prototype.buildDepth = function (index, step, callStack) {
- if (traceManagerUtil.isCallInstruction(step) && !traceManagerUtil.isCallToPrecompiledContract(index, this.trace)) {
- if (traceManagerUtil.isCreateInstruction(step)) {
- var contractToken = traceManagerUtil.contractCreationToken(index)
+ if (traceHelper.isCallInstruction(step) && !traceHelper.isCallToPrecompiledContract(index, this.trace)) {
+ if (traceHelper.isCreateInstruction(step)) {
+ var contractToken = traceHelper.contractCreationToken(index)
callStack.push(contractToken)
var lastMemoryChange = this.traceCache.memoryChanges[this.traceCache.memoryChanges.length - 1]
this.traceCache.pushContractCreationFromMemory(index, contractToken, this.trace, lastMemoryChange)
} else {
- var newAddress = traceManagerUtil.resolveCalledAddress(index, this.trace)
+ var newAddress = traceHelper.resolveCalledAddress(index, this.trace)
if (newAddress) {
callStack.push(newAddress)
} else {
@@ -81,7 +81,7 @@ TraceAnalyser.prototype.buildDepth = function (index, step, callStack) {
this.traceCache.pushCallStack(index + 1, {
callStack: callStack.slice(0)
})
- } else if (traceManagerUtil.isReturnInstruction(step)) {
+ } else if (traceHelper.isReturnInstruction(step)) {
callStack.pop()
this.traceCache.pushCallChanges(step, index + 1)
this.traceCache.pushCallStack(index + 1, {
diff --git a/src/traceCache.js b/src/trace/traceCache.js
similarity index 100%
rename from src/traceCache.js
rename to src/trace/traceCache.js
diff --git a/src/traceManager.js b/src/trace/traceManager.js
similarity index 92%
rename from src/traceManager.js
rename to src/trace/traceManager.js
index 8c33bdf6c4..f736d9afb9 100644
--- a/src/traceManager.js
+++ b/src/trace/traceManager.js
@@ -3,7 +3,7 @@ var TraceAnalyser = require('./traceAnalyser')
var TraceRetriever = require('./traceRetriever')
var TraceCache = require('./traceCache')
var TraceStepManager = require('./traceStepManager')
-var traceManagerUtil = require('./traceManagerUtil')
+var traceHelper = require('../helpers/traceHelper')
function TraceManager (_web3) {
this.web3 = _web3
@@ -74,7 +74,7 @@ TraceManager.prototype.getStorageAt = function (stepIndex, tx, callback) {
if (check) {
return callback(check, null)
}
- var stoChange = traceManagerUtil.findLowerBound(stepIndex, this.traceCache.storageChanges)
+ var stoChange = traceHelper.findLowerBound(stepIndex, this.traceCache.storageChanges)
if (stoChange === undefined) return callback('no storage found', null)
var self = this
if (this.traceRetriever.debugStorageAtAvailable()) {
@@ -98,7 +98,7 @@ TraceManager.prototype.getCallDataAt = function (stepIndex, callback) {
if (check) {
return callback(check, null)
}
- var callDataChange = traceManagerUtil.findLowerBound(stepIndex, this.traceCache.callDataChanges)
+ var callDataChange = traceHelper.findLowerBound(stepIndex, this.traceCache.callDataChanges)
if (callDataChange === undefined) return callback('no calldata found', null)
callback(null, [this.trace[callDataChange].calldata])
}
@@ -108,7 +108,7 @@ TraceManager.prototype.getCallStackAt = function (stepIndex, callback) {
if (check) {
return callback(check, null)
}
- var callStackChange = traceManagerUtil.findLowerBound(stepIndex, this.traceCache.callChanges)
+ var callStackChange = traceHelper.findLowerBound(stepIndex, this.traceCache.callChanges)
if (callStackChange === undefined) return callback('no callstack found', null)
callback(null, this.traceCache.callStack[callStackChange].callStack)
}
@@ -133,7 +133,7 @@ TraceManager.prototype.getLastCallChangeSince = function (stepIndex, callback) {
if (check) {
return callback(check, null)
}
- var callChange = traceManagerUtil.findLowerBound(stepIndex, this.traceCache.callChanges)
+ var callChange = traceHelper.findLowerBound(stepIndex, this.traceCache.callChanges)
if (callChange === undefined) {
callback(null, 0)
} else {
@@ -179,7 +179,7 @@ TraceManager.prototype.getMemoryAt = function (stepIndex, callback) {
if (check) {
return callback(check, null)
}
- var lastChanges = traceManagerUtil.findLowerBound(stepIndex, this.traceCache.memoryChanges)
+ var lastChanges = traceHelper.findLowerBound(stepIndex, this.traceCache.memoryChanges)
if (lastChanges === undefined) return callback('no memory found', null)
callback(null, this.trace[lastChanges].memory)
}
@@ -225,7 +225,7 @@ TraceManager.prototype.getRemainingGas = function (stepIndex, callback) {
}
TraceManager.prototype.isCreationStep = function (stepIndex) {
- return traceManagerUtil.isCreateInstruction(stepIndex, this.trace)
+ return traceHelper.isCreateInstruction(stepIndex, this.trace)
}
// step section
diff --git a/src/traceRetriever.js b/src/trace/traceRetriever.js
similarity index 90%
rename from src/traceRetriever.js
rename to src/trace/traceRetriever.js
index 2c2956c34f..88859facbb 100644
--- a/src/traceRetriever.js
+++ b/src/trace/traceRetriever.js
@@ -1,5 +1,6 @@
'use strict'
-var traceManagerUtil = require('./traceManagerUtil')
+var traceHelper = require('../helpers/traceHelper')
+
function TraceRetriever (_web3) {
this.web3 = _web3
this.storages = {} // contains all intial storage (by addresses)
@@ -18,7 +19,7 @@ TraceRetriever.prototype.getTrace = function (txHash, callback) {
}
TraceRetriever.prototype.getStorage = function (tx, address, callback) {
- if (traceManagerUtil.isContractCreation(address)) {
+ if (traceHelper.isContractCreation(address)) {
callback(null, {})
} else if (this.storages[address]) {
callback(null, this.storages[address])
diff --git a/src/traceStepManager.js b/src/trace/traceStepManager.js
similarity index 92%
rename from src/traceStepManager.js
rename to src/trace/traceStepManager.js
index 74fb033622..5f20aa25d2 100644
--- a/src/traceStepManager.js
+++ b/src/trace/traceStepManager.js
@@ -1,5 +1,5 @@
'use strict'
-var traceManagerUtil = require('./traceManagerUtil')
+var traceHelper = require('../helpers/traceHelper')
function TraceStepManager (_traceAnalyser) {
this.traceAnalyser = _traceAnalyser
@@ -7,12 +7,12 @@ function TraceStepManager (_traceAnalyser) {
TraceStepManager.prototype.isCallInstruction = function (index) {
var state = this.traceAnalyser.trace[index]
- return traceManagerUtil.isCallInstruction(state)
+ return traceHelper.isCallInstruction(state)
}
TraceStepManager.prototype.isReturnInstruction = function (index) {
var state = this.traceAnalyser.trace[index]
- return traceManagerUtil.isReturnInstruction(state)
+ return traceHelper.isReturnInstruction(state)
}
TraceStepManager.prototype.findStepOverBack = function (currentStep) {
diff --git a/src/txBrowser.js b/src/txBrowser.js
index f4ff916b9a..945ed8c552 100644
--- a/src/txBrowser.js
+++ b/src/txBrowser.js
@@ -1,7 +1,7 @@
'use strict'
var React = require('react')
var style = require('./basicStyles')
-var traceManagerUtil = require('./traceManagerUtil')
+var traceHelper = require('./helpers/traceHelper')
module.exports = React.createClass({
contextTypes: {
@@ -31,7 +31,7 @@ module.exports = React.createClass({
}
if (tx) {
if (!tx.to) {
- tx.to = traceManagerUtil.contractCreationToken('0')
+ tx.to = traceHelper.contractCreationToken('0')
}
this.setState({from: tx.from, to: tx.to, hash: tx.hash})
this.props.onNewTxRequested(this.state.blockNumber, parseInt(this.state.txNumber), tx)
diff --git a/src/web3Admin.js b/src/util/web3Admin.js
similarity index 100%
rename from src/web3Admin.js
rename to src/util/web3Admin.js
diff --git a/test/index.js b/test/index.js
new file mode 100644
index 0000000000..1542d841f9
--- /dev/null
+++ b/test/index.js
@@ -0,0 +1,12 @@
+/* global describe it*/
+var should = require('should')
+
+var init = require('../src/helpers/init')
+describe('index', function () {
+ describe('loadContext', function () {
+ it('web3', function () {
+ var context = init.loadContext()
+ should.exist(context.web3)
+ })
+ })
+})