Commit 00620484 authored by yann300's avatar yann300

Merge pull request #24 from yann300/codingStd

Coding standard
parents b4d7d8c4 43443b64
build
node_modules
npm-debug.log
lint.xml
...@@ -20,12 +20,14 @@ ...@@ -20,12 +20,14 @@
}, },
"devDependencies": { "devDependencies": {
"babel-preset-react": "^6.5.0", "babel-preset-react": "^6.5.0",
"babelify": "^7.2.0" "babelify": "^7.2.0",
"standard": "^7.0.1",
"standard-reporter": "^0.0.9"
}, },
"scripts": { "scripts": {
"install": "npm install --save react react-dom; npm install -g browserify; npm install --save babelify babel-preset-react; npm install web3",
"start_node": "eth --rpccorsdomain \"*\" -j -v 0", "start_node": "eth --rpccorsdomain \"*\" -j -v 0",
"build": "mkdir -p build; browserify -t [ babelify --presets [ react ] ] src/index.js -o build/app.js" "build": "mkdir -p build; browserify -t [ babelify --presets [ react ] ] src/index.js -o build/app.js",
"test" : "standard 2>&1 | standard-reporter > lint.xml"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
...@@ -36,5 +38,11 @@ ...@@ -36,5 +38,11 @@
"bugs": { "bugs": {
"url": "https://github.com/ethereum/remix/issues" "url": "https://github.com/ethereum/remix/issues"
}, },
"homepage": "https://github.com/ethereum/remix#readme" "homepage": "https://github.com/ethereum/remix#readme",
"standard": {
"ignore": [
"node_modules/*",
"build/*"
]
}
} }
This diff is collapsed.
var React = require('react'); 'use strict'
var React = require('react')
var style = require('./basicStyles') var style = require('./basicStyles')
module.exports = React.createClass({ module.exports = React.createClass({
getDefaultProps: function () {
return {
data: null,
name: null,
renderRow: null
}
},
getDefaultProps: function() render: function () {
{ return (
return { <div style={style.panel.container}>
data: null, <div style={style.panel.title}>
name: null, {this.props.name}
renderRow: null </div>
}; <div style={style.panel.tableContainer}>
}, <table style={style.panel.table}>
<tbody>
{this.renderItems()}
</tbody>
</table>
</div>
</div>
)
},
render: function() renderItems: function () {
{ if (!this.props.data) {
return ( return []
<div style={style.panel.container}> }
<div style={style.panel.title} >{this.props.name}</div> if (!this.props.renderRow) {
<div style={style.panel.tableContainer} > var ret = []
<table style={style.panel.table}> for (var key in this.props.data) {
<tbody> ret.push(
{this.renderItems()} <tr key={key}>
</tbody> <td>
</table> {this.props.data[key]}
</div> </td>
</div> </tr>)
); }
}, return ret
} else {
renderItems: function() return this.props.renderRow(this.props.data)
{ }
if (!this.props.data) }
return []
if (!this.props.renderRow)
{
var ret = []
for (var key in this.props.data)
ret.push(<tr key={key} ><td>{this.props.data[key]}</td></tr>)
return ret
}
else
return this.props.renderRow(this.props.data)
}
}) })
'use strict'
module.exports = { module.exports = {
wrapper: wrapper: {
{ 'fontFamily': 'arial,sans-serif'
'fontFamily': "arial,sans-serif" },
}, container: {
container: 'margin': '10px',
{ 'padding': '5px'
'margin': '10px', },
'padding': '5px' address: {
}, 'fontStyle': 'italic'
address: },
{ instructionsList: {
'fontStyle': 'italic' 'width': '320px'
}, },
instructionsList: transactionInfo: {
{ 'marginTop': '5px'
'width': "320px" },
}, panel: {
transactionInfo: container: {
{ 'border': '1px solid',
'marginTop': '5px' 'width': '600px'
}, },
panel: tableContainer: {
{ 'height': '150px',
container: 'overflowY': 'auto'
{ },
'border': '1px solid', table: {
'width': '600px' 'padding': '5px'
}, },
tableContainer: title: {
{ 'padding': '5px',
'height': '150px', 'fontStyle': 'italic'
'overflowY': 'auto' }
}, },
table: hidden: {
{ 'display': 'none'
'padding': '5px' },
}, display: {
title: 'display': 'block'
{ },
'padding': '5px', sticker: {
'fontStyle': 'italic' 'verticalAlign': 'top',
} 'margin': '5px'
}, },
hidden: inline: {
{ 'display': 'inline-block'
'display': 'none' }
}, }
display:
{
'display': 'block'
},
sticker:
{
'verticalAlign': 'top',
'margin': '5px'
},
inline:
{
'display': 'inline-block'
}
}
\ No newline at end of file
'use strict'
var opcodes = require('./opcodes') var opcodes = require('./opcodes')
module.exports = { module.exports = {
nameOpCodes: function (raw) {
var pushData = ''
var codeMap = {}
var code = []
nameOpCodes: function (raw) for (var i = 0; i < raw.length; i++) {
{ var pc = i
var pushData = '' var curOpCode = opcodes(raw[pc], false).name
var codeMap = {} codeMap[i] = code.length
var code = [] // no destinations into the middle of PUSH
if (curOpCode.slice(0, 4) === 'PUSH') {
var jumpNum = raw[pc] - 0x5f
pushData = raw.slice(pc + 1, pc + jumpNum + 1)
i += jumpNum
}
for (var i = 0; i < raw.length; i++) code.push(this.pad(pc, this.roundLog(raw.length, 10)) + ' ' + curOpCode + ' ' + pushData.toString('hex'))
{ pushData = ''
var pc = i }
var curOpCode = opcodes(raw[pc], false).name return [ code, codeMap ]
codeMap[i] = code.length },
// no destinations into the middle of PUSH
if (curOpCode.slice(0, 4) === 'PUSH')
{
var jumpNum = raw[pc] - 0x5f
pushData = raw.slice(pc + 1, pc + jumpNum + 1)
i += jumpNum
}
code.push(this.pad(pc, this.roundLog(raw.length, 10)) + ' ' + curOpCode + ' ' + pushData.toString('hex'))
pushData = ''
}
return [ code, codeMap ]
},
pad: function (num, size) { pad: function (num, size) {
var s = num + '' var s = num + ''
while (s.length < size) s = '0' + s while (s.length < size) s = '0' + s
return s return s
}, },
log: function (num, base) { log: function (num, base) {
return Math.log(num) / Math.log(base) return Math.log(num) / Math.log(base)
}, },
roundLog: function (num, base) { roundLog: function (num, base) {
return Math.ceil(this.log(num, base)) return Math.ceil(this.log(num, base))
} }
} }
\ No newline at end of file
var React = require('react'); 'use strict'
var TxBrowser = require('./txBrowser'); var React = require('react')
var VmTraceManager = require('./vmTraceManager'); var TxBrowser = require('./txBrowser')
var VmTraceBrowser = require('./vmTraceBrowser'); var VmTraceBrowser = require('./vmTraceBrowser')
var style = require('./basicStyles') var style = require('./basicStyles')
module.exports = React.createClass({ module.exports = React.createClass({
getInitialState: function() { getInitialState: function () {
return {vmTrace: null, state: "", currentStep: -1} return {vmTrace: null, state: '', currentStep: -1}
}, },
render: function() { childContextTypes: {
return ( web3: React.PropTypes.object
<div style={style.wrapper} > },
<h1 style={style.container} >Eth Debugger</h1>
<TxBrowser onNewTxRequested={this.retrieveVmTrace} />
<div style={style.container} >{this.state.state}</div>
<VmTraceBrowser vmTrace={this.state.vmTrace} />
</div>
);
},
retrieveVmTrace: function(blockNumber, txNumber) getChildContext: function () {
{ return { web3: this.props.web3 }
this.setState({state: "loading..."}) },
var deb = this
VmTraceManager.retrieveVmTrace(blockNumber, txNumber, function(error, result) render: function () {
{ return (
deb.setState({vmTrace: result, state: ""}); <div style={style.wrapper}>
}) <h1 style={style.container}>Eth Debugger</h1>
} <TxBrowser onNewTxRequested={this.retrieveVmTrace} />
}); <div style={style.container}>
{this.state.state}
</div>
<VmTraceBrowser vmTrace={this.state.vmTrace} />
</div>
)
},
retrieveVmTrace: function (blockNumber, txNumber) {
this.setState({state: 'loading...'})
var self = this
this.props.web3.debug.trace(blockNumber, parseInt(txNumber), function (error, result) {
if (error) {
console.log(error)
} else {
self.setState({vmTrace: result, state: ''})
}
})
}
})
var ReactDOM = require('react-dom'); 'use strict'
var React = require('react'); var ReactDOM = require('react-dom')
var Web3 = require('web3'); var React = require('react')
var Web3 = require('web3')
var Web3Admin = require('./web3Admin') var Web3Admin = require('./web3Admin')
web3 = new Web3(); function loadWeb3 () {
web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); var web3 = new Web3()
Web3Admin.extend(web3); web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'))
Web3Admin.extend(web3)
return web3
}
var Debugger = require('./debugger'); var Debugger = require('./debugger')
ReactDOM.render( ReactDOM.render(
<Debugger/>, <Debugger web3={loadWeb3()} />,
document.getElementById('app') document.getElementById('app')
); )
'use strict'
const codes = { const codes = {
// 0x0 range - arithmetic ops // 0x0 range - arithmetic ops
// name, baseCost, off stack, on stack, dynamic // name, baseCost, off stack, on stack, dynamic
...@@ -12,7 +13,7 @@ const codes = { ...@@ -12,7 +13,7 @@ const codes = {
0x08: ['ADDMOD', 8, 3, 1, false], 0x08: ['ADDMOD', 8, 3, 1, false],
0x09: ['MULMOD', 8, 3, 1, false], 0x09: ['MULMOD', 8, 3, 1, false],
0x0a: ['EXP', 10, 2, 1, false], 0x0a: ['EXP', 10, 2, 1, false],
0x0b: ['SIGNEXTEND', 5, 1, 1, false], 0x0b: ['SIGNEXTEND', 5, 1, 1, false]
// 0x10 range - bit ops // 0x10 range - bit ops
0x10: ['LT', 3, 2, 1, false], 0x10: ['LT', 3, 2, 1, false],
...@@ -175,4 +176,4 @@ module.exports = function (op, full) { ...@@ -175,4 +176,4 @@ module.exports = function (op, full) {
} }
return {name: opcode, fee: code[1], in: code[2], out: code[3], dynamic: code[4], async: code[5]} return {name: opcode, fee: code[1], in: code[2], out: code[3], dynamic: code[4], async: code[5]}
} }
\ No newline at end of file
var React = require('react'); 'use strict'
var React = require('react')
var style = require('./sliderStyles') var style = require('./sliderStyles')
module.exports = React.createClass({ module.exports = React.createClass({
propTypes: {
onChange: React.PropTypes.func.isRequired
},
propTypes: { getDefaultProps: function () {
onChange: React.PropTypes.func.isRequired, return {
}, min: 0,
max: 500
getDefaultProps: function () { }
return { },
min: 0,
max: 500
};
},
render: function () { render: function () {
return ( return (
<div> <div>
<input ref="rule" style={style.rule} type="range" min={this.props.min} max={this.props.max} onMouseUp={this.onMouseUp} /> <input
</div> ref='rule'
); style={style.rule}
}, type='range'
min={this.props.min}
max={this.props.max}
onMouseUp={this.onMouseUp} />
</div>
)
},
onMouseUp: function (event) { onMouseUp: function (event) {
this.props.onChange(parseInt(this.refs.rule.value)) this.props.onChange(parseInt(this.refs.rule.value))
}, },
setValue: function (value) { setValue: function (value) {
var diff = value - this.refs.rule.value var diff = value - this.refs.rule.value
if (diff > 0) if (diff > 0) {
this.refs.rule.stepUp(diff) this.refs.rule.stepUp(diff)
else } else {
this.refs.rule.stepDown(Math.abs(diff)) this.refs.rule.stepDown(Math.abs(diff))
} }
}
}) })
'use strict'
module.exports = { module.exports = {
rule: rule: {
{ 'width': '600px'
'width': '600px', },
}, runner: {
runner: 'position': 'absolute',
{ 'width': '16px',
'position': 'absolute', 'height': '16px',
'width': '16px', 'margin': '0',
'height': '16px', 'padding': '0',
'margin': '0', 'overflow': 'hidden',
'padding': '0', 'border': '1px solid #a4bed4',
'overflow': 'hidden', 'background-color': '#f1f7ff'
'border': '1px solid #a4bed4', }
'background-color': '#f1f7ff' }
}
}
\ No newline at end of file
var React = require('react'); 'use strict'
var style = require('./basicStyles') var React = require('react')
module.exports = React.createClass({ module.exports = React.createClass({
getDefaultProps: function () {
return {
data: null
}
},
getDefaultProps: function() render: function () {
{ return (
return { <div>
data: null, <table>
}; <tbody>
}, {this.renderItems()}
</tbody>
</table>
</div>
)
},
render: function() renderItems: function () {
{ if (this.props.data) {
return ( var ret = []
<div> for (var key in this.props.data) {
<table><tbody> ret.push(
{this.renderItems()} <tr key={key}>
</tbody></table> <td>
</div> {this.props.data[key]}
); </td>
}, </tr>)
}
renderItems: function() return ret
{ }
return null
if (this.props.data) }
{
var ret = []
for (var key in this.props.data)
ret.push(<tr key={key}><td>{this.props.data[key]}</td></tr>)
return ret
}
return null
},
}) })
var React = require('react'); 'use strict'
var React = require('react')
var style = require('./basicStyles') var style = require('./basicStyles')
module.exports = React.createClass({ module.exports = React.createClass({
propTypes: { contextTypes: {
onNewTxRequested: React.PropTypes.func.isRequired, web3: React.PropTypes.object
}, },
getInitialState: function() { propTypes: {
return {blockNumber: "1382256", txNumber: "1", from: "", to: "", hash: ""} onNewTxRequested: React.PropTypes.func.isRequired
}, },
submit: function() getInitialState: function () {
{ return {blockNumber: '1382256', txNumber: '1', from: '', to: '', hash: ''}
var tx = web3.eth.getTransactionFromBlock(this.state.blockNumber, this.state.txNumber) },
if (tx)
this.setState({from: tx.from, to: tx.to, hash: tx.hash})
this.props.onNewTxRequested(this.state.blockNumber, parseInt(this.state.txNumber))
},
updateBlockN: function(ev) {
this.state.blockNumber = ev.target.value;
},
updateTxN: function(ev) {
this.state.txNumber = ev.target.value;
},
render: function() { submit: function () {
return ( var tx = this.context.web3.eth.getTransactionFromBlock(this.state.blockNumber, this.state.txNumber)
<div style={style.container} > if (tx) {
<input onChange={this.updateBlockN} type="text" placeholder= {"Block number or hash (default 1382256)" + this.state.blockNumber}></input> this.setState({from: tx.from, to: tx.to, hash: tx.hash})
<input onChange={this.updateTxN} type="text" placeholder={"Transaction Number (default 1) " + this.state.txNumber}></input> }
<button onClick={this.submit}>Get</button> this.props.onNewTxRequested(this.state.blockNumber, parseInt(this.state.txNumber))
<div style={style.transactionInfo}> }
<div>Hash: {this.state.hash}</div>
<div>From: {this.state.from}</div> updateBlockN: function (ev) {
<div>To: {this.state.to}</div> this.state.blockNumber = ev.target.value
</div> },
</div>
); updateTxN: function (ev) {
} this.state.txNumber = ev.target.value
},
render: function () {
return (
<div style={style.container}>
<input onChange={this.updateBlockN} type='text' placeholder={'Block number or hash (default 1382256)' + this.state.blockNumber}></input>
<input onChange={this.updateTxN} type='text' placeholder={'Transaction Number (default 1) ' + this.state.txNumber}></input>
<button onClick={this.submit}>
Get
</button>
<div style={style.transactionInfo}>
<div>
Hash:
{this.state.hash}
</div>
<div>
From:
{this.state.from}
</div>
<div>
To:
{this.state.to}
</div>
</div>
</div>
)
}
}) })
var React = require('react'); 'use strict'
var AssemblyItemsBrowser = require('./assemblyItemsBrowser'); var React = require('react')
var AssemblyItemsBrowser = require('./assemblyItemsBrowser')
module.exports = React.createClass({ module.exports = React.createClass({
render: function () {
render: function() { return (
return ( <div>
<div> <AssemblyItemsBrowser vmTrace={this.props.vmTrace} />
<AssemblyItemsBrowser vmTrace={this.props.vmTrace} /> </div>
</div> )
) }
}, })
});
var React = require('react'); 'use strict'
var React = require('react')
module.exports = React.createClass({ module.exports = React.createClass({
propTypes: {
propTypes: { stepIntoBack: React.PropTypes.func.isRequired,
stepIntoBack: React.PropTypes.func.isRequired, stepIntoForward: React.PropTypes.func.isRequired,
stepIntoForward: React.PropTypes.func.isRequired, stepOverBack: React.PropTypes.func.isRequired,
stepOverBack: React.PropTypes.func.isRequired, stepOverForward: React.PropTypes.func.isRequired
stepOverForward: React.PropTypes.func.isRequired, },
},
render: function () {
render: function() { return (
return ( <div>
<div> <button onClick={this.props.stepIntoBack} disabled={this.checkButtonState(-1)}>
<button onClick={this.props.stepIntoBack} disabled={this.checkButtonState(-1)} >Step Into Back</button> Step Into Back
<button onClick={this.props.stepOverBack} disabled={this.checkButtonState(-1)} >Step Over Back</button> </button>
<button onClick={this.props.stepOverForward} disabled={this.checkButtonState(1)} >Step Over Forward</button> <button onClick={this.props.stepOverBack} disabled={this.checkButtonState(-1)}>
<button onClick={this.props.stepIntoForward} disabled={this.checkButtonState(1)} >Step Into Forward</button> Step Over Back
</div> </button>
); <button onClick={this.props.stepOverForward} disabled={this.checkButtonState(1)}>
}, Step Over Forward
</button>
checkButtonState: function(incr) <button onClick={this.props.stepIntoForward} disabled={this.checkButtonState(1)}>
{ Step Into Forward
if (incr === -1) </button>
return this.props.step === 0 ? "disabled" : "" </div>
else if (incr === 1) )
return this.props.step >= this.props.vmTraceLength - 1 ? "disabled" : "" },
},
}) checkButtonState: function (incr) {
\ No newline at end of file if (incr === -1) {
return this.props.step === 0 ? 'disabled' : ''
} else if (incr === 1) {
return this.props.step >= this.props.vmTraceLength - 1 ? 'disabled' : ''
}
}
})
'use strict'
module.exports = { module.exports = {
retrieveVmTrace: function(blockNumber, txNumber, callBack) { retrieveVmTrace: function (blockNumber, txNumber, callBack) {
web3.debug.trace(blockNumber, parseInt(txNumber), function(error, result) this.context.web3.debug.trace(blockNumber, parseInt(txNumber), function (error, result) {
{ callBack(error, result)
callBack(error, result) })
}); }
}
} }
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment