add premix and browser launcher code

This commit is contained in:
andri lim 2019-01-12 19:48:28 +07:00 committed by zah
parent 2b66716d9c
commit e104153379
3 changed files with 50 additions and 5 deletions

40
nimbus/launcher.nim Normal file
View File

@ -0,0 +1,40 @@
import os, osproc, json
when defined(windows):
const
premixExecutable = "premix.exe"
browserLauncher = "cmd /c start"
elif defined(macos):
const
premixExecutable = "premix"
browserLauncher = "open"
else:
const
premixExecutable = "premix"
browserLauncher = "xdg-open"
proc getPremixDir(): (bool, string) =
var premixDir = [
"." ,
".." & DirSep & "premix"
]
for c in premixDir:
if fileExists(c & DirSep & premixExecutable):
return (true, c)
result = (false, ".")
proc launchPremix*(fileName: string, metaData: JsonNode) =
let
(premixAvailable, premixDir) = getPremixDir()
premixExe = premixDir & DirSep & premixExecutable
writeFile(premixDir & DirSep & fileName, metaData.pretty)
if premixAvailable:
if execCmd(premixExe & " " & premixDir & DirSep & fileName) == 0:
if execCmd(browserLauncher & " " & premixDir & DirSep & "index.html") != 0:
echo "failed to launch default browser"
else:
echo "failed to execute premix debugging tool"

View File

@ -2,7 +2,7 @@ import
db/[db_chain, state_db, capturedb], eth_common, utils, json, db/[db_chain, state_db, capturedb], eth_common, utils, json,
constants, vm_state, vm_types, transaction, p2p/executor, constants, vm_state, vm_types, transaction, p2p/executor,
eth_trie/db, nimcrypto, strutils, ranges, ./utils/addresses, eth_trie/db, nimcrypto, strutils, ranges, ./utils/addresses,
chronicles, rpc/hexstrings chronicles, rpc/hexstrings, launcher
proc getParentHeader(self: BaseChainDB, header: BlockHeader): BlockHeader = proc getParentHeader(self: BaseChainDB, header: BlockHeader): BlockHeader =
self.getBlockHeader(header.parentHash) self.getBlockHeader(header.parentHash)
@ -230,7 +230,8 @@ proc traceTransactions*(chainDB: BaseChainDB, header: BlockHeader, blockBody: Bl
for i in 0 ..< blockBody.transactions.len: for i in 0 ..< blockBody.transactions.len:
result.add traceTransaction(chainDB, header, blockBody, i, {DisableState}) result.add traceTransaction(chainDB, header, blockBody, i, {DisableState})
proc dumpDebuggingMetaData*(chainDB: BaseChainDB, header: BlockHeader, blockBody: BlockBody, receipts: seq[Receipt]) = proc dumpDebuggingMetaData*(chainDB: BaseChainDB, header: BlockHeader,
blockBody: BlockBody, receipts: seq[Receipt], launchDebugger = true) =
let let
blockNumber = header.blockNumber blockNumber = header.blockNumber
@ -249,5 +250,9 @@ proc dumpDebuggingMetaData*(chainDB: BaseChainDB, header: BlockHeader, blockBody
} }
metaData.dumpMemoryDB(memoryDB) metaData.dumpMemoryDB(memoryDB)
# this is a placeholder until premix debugging tool is ready
writeFile("debug" & $blockNumber & ".json", metaData.pretty()) let jsonFileName = "debug" & $blockNumber & ".json"
if launchDebugger:
launchPremix(jsonFileName, metaData)
else:
writeFile(jsonFileName, metaData.pretty())

View File

@ -26,7 +26,7 @@ proc dumpDebug(chainDB: BaseChainDB, blockNumber: Uint256) =
captureChainDB.setHead(parent, true) captureChainDB.setHead(parent, true)
let validationResult = processBlock(captureChainDB, parent, header, body, vmState) let validationResult = processBlock(captureChainDB, parent, header, body, vmState)
dumpDebuggingMetaData(captureChainDB, header, body, vmState.receipts) dumpDebuggingMetaData(captureChainDB, header, body, vmState.receipts, false)
proc main() = proc main() =
let conf = getConfiguration() let conf = getConfiguration()