remix-project mirror
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
remix-project/remix-debug/rdb.js

120 lines
3.6 KiB

var CmdLine = require('./src/cmdline/index.js')
var compilation = require('./compilation.json')
var solc = require('solc')
var fs = require('fs')
//var filename = 'test/sol/ballot.sol'
var filename = 'test/sol/simple_storage.sol'
var short_filename = "simple_storage.sol"
//var filename = 'browser/ballot.sol'
var input_json = {
language: 'Solidity',
sources: {
//"test/sol/ballot.sol": {content: fs.readFileSync('test/sol/ballot.sol').toString()}
},
settings: {
optimizer: {
enabled: true,
runs: 200
},
outputSelection: {
'*': {
'': [ 'legacyAST' ],
'*': [ 'abi', 'metadata', 'devdoc', 'userdoc', 'evm.legacyAssembly', 'evm.bytecode', 'evm.deployedBytecode', 'evm.methodIdentifiers', 'evm.gasEstimates' ]
}
}
}
}
input_json.sources[short_filename] = {content: fs.readFileSync(filename).toString()}
console.dir(input_json)
console.log("compiling...")
let compilationData = JSON.parse(solc.compileStandardWrapper(JSON.stringify(input_json)))
console.dir(Object.keys(compilationData))
var compilation = {}
compilation.data = compilationData
compilation.source = { sources: input_json.sources }
console.dir(compilation)
console.dir(compilation.data.errors)
var cmd_line = new CmdLine()
cmd_line.connect("http", "http://localhost:8545")
cmd_line.loadCompilationResult(compilation)
cmd_line.initDebugger()
var deployContract = function (cb) {
let _web3 = cmd_line.debugger.debugger.web3
let blockNumber = null
let txNumber = null
let tx = null
let code = compilation.data.contracts[short_filename].SimpleStorage.evm.bytecode.object
console.dir("deploying...")
console.dir(code)
_web3.eth.sendTransaction({data: "0x" + code, from: _web3.eth.accounts[0], gas: 800000}, cb)
}
let _web3 = cmd_line.debugger.debugger.web3
// var tx = "0x8c44e1b6bcb557512184f851502e43160f415e2e12b2b98ba12b96b699b85859"
// var tx = "0xae365458de8c6669eb146ce2ade4c7767c0edddaee98f5c1878c7c5e5510a0de"
// var tx = "0x04aa74287b3c52e2ecab1cb066d22116317155503681870c516c95cdb148fa28"
// var tx = "0x04aa74287b3c52e2ecab1cb066d22116317155503681870c516c95cdb148fa28"
// var tx = "0x28bd66d99bc45b3f8d959126a26b8c97092892e63fc8ed90eb1598ebedf600ef"
var tx = "0xf510c4f0b1d9ee262d7b9e9e87b4262f275fe029c2c733feef7dfa1e2b1e32aa"
// _web3.eth.getTransactionReceipt(tx, (err, data) => {
// console.dir(err)
// console.dir(data)
// deployContract((err, tx) => {
cmd_line.startDebug(tx, short_filename)
cmd_line.events.on("source", () => {
cmd_line.getSource().forEach(console.dir)
})
// })
//})
const repl = require('repl')
const r = repl.start({
prompt: '> ',
eval: (cmd, context, filename, cb) => {
let command = cmd.trim()
if (command === 'next' || command === 'n') {
cmd_line.debugger.step_manager.stepOverForward(true)
}
if (command === 'previous' || command === 'p' || command === 'prev') {
cmd_line.debugger.step_manager.stepOverBack(true)
}
if (command === 'step' || command === 's') {
cmd_line.debugger.step_manager.stepIntoForward(true)
}
if (command === 'stepback' || command === 'sb') {
cmd_line.debugger.step_manager.stepIntoBack(true)
}
if (command === 'exit' || command === 'quit') {
process.exit(0)
}
if (command === 'var local' || command === 'v l' || command === 'vl') {
cmd_line.displayLocals()
}
if (command === 'var global' || command === 'v g' || command === 'vg') {
cmd_line.displayGlobals()
}
if (command.split(' ')[0] === 'jump') {
let stepIndex = parseInt(command.split(' ')[1], 10)
cmd_line.debugger.step_manager.jumpTo(stepIndex)
}
cb(null, '');
}
});
module.exports = cmd_line