Integrate nim-prompt
This commit is contained in:
parent
4c0b2a9a32
commit
d3f88929da
|
@ -121,3 +121,13 @@
|
||||||
url = https://github.com/arnetheduck/nim-result.git
|
url = https://github.com/arnetheduck/nim-result.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
branch = master
|
branch = master
|
||||||
|
[submodule "vendor/nim-prompt"]
|
||||||
|
path = vendor/nim-prompt
|
||||||
|
url = https://github.com/status-im/nim-prompt.git
|
||||||
|
ignore = dirty
|
||||||
|
branch = master
|
||||||
|
[submodule "vendor/nim-unicodedb"]
|
||||||
|
path = vendor/nim-unicodedb
|
||||||
|
url = https://github.com/nitely/nim-unicodedb.git
|
||||||
|
ignore = dirty
|
||||||
|
branch = master
|
||||||
|
|
|
@ -29,6 +29,7 @@ requires "nim >= 0.19.0",
|
||||||
"nimcrypto",
|
"nimcrypto",
|
||||||
"serialization",
|
"serialization",
|
||||||
"stew",
|
"stew",
|
||||||
|
"prompt",
|
||||||
"web3",
|
"web3",
|
||||||
"yaml"
|
"yaml"
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,14 @@
|
||||||
import
|
import
|
||||||
|
# Standard library
|
||||||
net, sequtils, tables, osproc, random, strutils, times, strformat,
|
net, sequtils, tables, osproc, random, strutils, times, strformat,
|
||||||
|
|
||||||
|
# Nimble packages
|
||||||
stew/shims/os, stew/[objects, bitseqs],
|
stew/shims/os, stew/[objects, bitseqs],
|
||||||
chronos, chronicles, confutils, metrics,
|
chronos, chronicles, confutils, metrics,
|
||||||
json_serialization/std/[options, sets], serialization/errors,
|
json_serialization/std/[options, sets], serialization/errors,
|
||||||
eth/trie/db, eth/trie/backends/rocksdb_backend, eth/async_utils,
|
eth/trie/db, eth/trie/backends/rocksdb_backend, eth/async_utils,
|
||||||
|
|
||||||
|
# Local modules
|
||||||
spec/[datatypes, digest, crypto, beaconstate, helpers, validator,
|
spec/[datatypes, digest, crypto, beaconstate, helpers, validator,
|
||||||
state_transition_block, network],
|
state_transition_block, network],
|
||||||
conf, time, state_transition, fork_choice, ssz, beacon_chain_db,
|
conf, time, state_transition, fork_choice, ssz, beacon_chain_db,
|
||||||
|
@ -16,6 +21,7 @@ const
|
||||||
networkMetadataFile = "network.json"
|
networkMetadataFile = "network.json"
|
||||||
genesisFile = "genesis.json"
|
genesisFile = "genesis.json"
|
||||||
testnetsBaseUrl = "https://serenity-testnets.status.im"
|
testnetsBaseUrl = "https://serenity-testnets.status.im"
|
||||||
|
hasPrompt = not defined(withoutPrompt)
|
||||||
|
|
||||||
declareGauge beacon_slot, "Latest slot of the beacon chain state"
|
declareGauge beacon_slot, "Latest slot of the beacon chain state"
|
||||||
declareGauge beacon_head_slot, "Slot of the head block of the beacon chain"
|
declareGauge beacon_head_slot, "Slot of the head block of the beacon chain"
|
||||||
|
@ -825,6 +831,32 @@ proc start(node: BeaconNode, headState: BeaconState) =
|
||||||
node.addLocalValidators(headState)
|
node.addLocalValidators(headState)
|
||||||
node.run()
|
node.run()
|
||||||
|
|
||||||
|
when hasPrompt:
|
||||||
|
from unicode import Rune
|
||||||
|
import terminal, prompt
|
||||||
|
|
||||||
|
proc providePromptCompletions*(line: seq[Rune], cursorPos: int): seq[string] =
|
||||||
|
# TODO
|
||||||
|
# The completions should be generated with the general-purpose command-line
|
||||||
|
# parsing API of Confutils
|
||||||
|
result = @[]
|
||||||
|
|
||||||
|
proc initPrompt(node: BeaconNode) =
|
||||||
|
doAssert defaultChroniclesStream.outputs.len > 0
|
||||||
|
doAssert defaultChroniclesStream.output is DynamicOutput
|
||||||
|
|
||||||
|
if isatty(stdout):
|
||||||
|
var p = Prompt.init("nimbus > ", providePromptCompletions)
|
||||||
|
p.useHistoryFile()
|
||||||
|
|
||||||
|
defaultChroniclesStream.output.writer =
|
||||||
|
proc (logLevel: LogLevel, msg: LogOutputStr) {.gcsafe.} =
|
||||||
|
p.writeLine(msg)
|
||||||
|
else:
|
||||||
|
defaultChroniclesStream.output.writer =
|
||||||
|
proc (logLevel: LogLevel, msg: LogOutputStr) {.gcsafe.} =
|
||||||
|
stdout.writeLine(msg)
|
||||||
|
|
||||||
when isMainModule:
|
when isMainModule:
|
||||||
randomize()
|
randomize()
|
||||||
let config = BeaconNodeConf.load(version = fullVersionStr())
|
let config = BeaconNodeConf.load(version = fullVersionStr())
|
||||||
|
@ -855,7 +887,6 @@ when isMainModule:
|
||||||
stderr.write "Please regenerate the deposit files by running makeDeposits again\n"
|
stderr.write "Please regenerate the deposit files by running makeDeposits again\n"
|
||||||
quit 1
|
quit 1
|
||||||
|
|
||||||
|
|
||||||
var
|
var
|
||||||
startTime = uint64(times.toUnix(times.getTime()) + config.genesisOffset)
|
startTime = uint64(times.toUnix(times.getTime()) + config.genesisOffset)
|
||||||
initialState = initialize_beacon_state_from_eth1(
|
initialState = initialize_beacon_state_from_eth1(
|
||||||
|
@ -933,6 +964,7 @@ when isMainModule:
|
||||||
createPidFile(config.dataDir.string / "beacon_node.pid")
|
createPidFile(config.dataDir.string / "beacon_node.pid")
|
||||||
|
|
||||||
var node = waitFor BeaconNode.init(config)
|
var node = waitFor BeaconNode.init(config)
|
||||||
|
when hasPrompt: initPrompt(node)
|
||||||
|
|
||||||
# TODO slightly ugly to rely on node.stateCache state here..
|
# TODO slightly ugly to rely on node.stateCache state here..
|
||||||
if node.nickname != "":
|
if node.nickname != "":
|
||||||
|
|
|
@ -47,7 +47,7 @@ RUN cd nim-beacon-chain \
|
||||||
-d:"SLOTS_PER_EPOCH=${SLOTS_PER_EPOCH}" \
|
-d:"SLOTS_PER_EPOCH=${SLOTS_PER_EPOCH}" \
|
||||||
-d:"SECONDS_PER_SLOT=${SECONDS_PER_SLOT}" \
|
-d:"SECONDS_PER_SLOT=${SECONDS_PER_SLOT}" \
|
||||||
-d:"chronicles_log_level=DEBUG" \
|
-d:"chronicles_log_level=DEBUG" \
|
||||||
-d:"chronicles_sinks=json" \
|
-d:"testnet_docker_node" \
|
||||||
c beacon_chain/beacon_node.nim
|
c beacon_chain/beacon_node.nim
|
||||||
|
|
||||||
# --------------------------------- #
|
# --------------------------------- #
|
||||||
|
|
7
nim.cfg
7
nim.cfg
|
@ -13,6 +13,13 @@
|
||||||
--tlsEmulation:off
|
--tlsEmulation:off
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@if testnet_docker_node:
|
||||||
|
-d:"chronicles_sinks=json"
|
||||||
|
-d:"withoutPrompt"
|
||||||
|
@else:
|
||||||
|
-d:"chronicles_default_output_device=dynamic"
|
||||||
|
@end
|
||||||
|
|
||||||
--threads:on
|
--threads:on
|
||||||
--opt:speed
|
--opt:speed
|
||||||
--excessiveStackTrace:on
|
--excessiveStackTrace:on
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 743f14cf68f213a0cbead5e6dfc00ee3edc7fe1e
|
Subproject commit a2ea339569878720571bbadabdde72b55c411d78
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit b0ea27c34ca7aaee42333541f37b182fa239c844
|
|
@ -1 +1 @@
|
||||||
Subproject commit 5f1dc751ca436e599c59df939344a641f935dd4d
|
Subproject commit 2bdd2fab6e9bdcdcb51ea7e09d077f36a29faf4c
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 2afc384ae17d4bd30078164fbfc2356b06d1a7f4
|
Loading…
Reference in New Issue