nimbus-eth2/beacon_chain/rpc/rest_debug_api.nim

80 lines
2.9 KiB
Nim
Raw Normal View History

import std/sequtils
import chronicles
import ".."/[version, beacon_node_common],
".."/spec/forks,
"."/rest_utils
2021-03-17 18:46:45 +00:00
logScope: topics = "rest_debug"
proc installDebugApiHandlers*(router: var RestRouter, node: BeaconNode) =
# https://ethereum.github.io/beacon-APIs/#/Debug/getState
2021-03-17 18:46:45 +00:00
router.api(MethodGet,
"/api/eth/v1/debug/beacon/states/{state_id}") do (
state_id: StateIdent) -> RestApiResponse:
let bslot =
block:
if state_id.isErr():
2021-04-08 10:49:28 +00:00
return RestApiResponse.jsonError(Http400, InvalidStateIdValueError,
$state_id.error())
let bres = node.getBlockSlot(state_id.get())
if bres.isErr():
2021-04-08 10:49:28 +00:00
return RestApiResponse.jsonError(Http404, StateNotFoundError,
$bres.error())
bres.get()
node.withStateForBlockSlot(bslot):
case stateData.data.beaconStateFork
of BeaconStateFork.forkPhase0:
return RestApiResponse.jsonResponse(stateData.data.hbsPhase0.data)
of BeaconStateFork.forkAltair:
return RestApiResponse.jsonError(Http404, StateNotFoundError)
2021-04-08 10:49:28 +00:00
return RestApiResponse.jsonError(Http500, InternalServerError)
2021-03-17 18:46:45 +00:00
# https://ethereum.github.io/beacon-APIs/#/Debug/getStateV2
router.api(MethodGet,
"/api/eth/v2/debug/beacon/states/{state_id}") do (
state_id: StateIdent) -> RestApiResponse:
let bslot =
block:
if state_id.isErr():
return RestApiResponse.jsonError(Http400, InvalidStateIdValueError,
$state_id.error())
let bres = node.getBlockSlot(state_id.get())
if bres.isErr():
return RestApiResponse.jsonError(Http404, StateNotFoundError,
$bres.error())
bres.get()
node.withStateForBlockSlot(bslot):
case stateData.data.beaconStateFork
of BeaconStateFork.forkPhase0:
return RestApiResponse.jsonResponse(
(version: "phase0", data: stateData.data.hbsPhase0.data)
)
of BeaconStateFork.forkAltair:
return RestApiResponse.jsonResponse(
(version: "altair", data: stateData.data.hbsAltair.data)
)
return RestApiResponse.jsonError(Http500, InternalServerError)
# https://ethereum.github.io/beacon-APIs/#/Debug/getDebugChainHeads
2021-03-17 18:46:45 +00:00
router.api(MethodGet,
"/api/eth/v1/debug/beacon/heads") do () -> RestApiResponse:
return RestApiResponse.jsonResponse(
node.dag.heads.mapIt((root: it.root, slot: it.slot))
2021-03-17 18:46:45 +00:00
)
2021-04-13 10:19:31 +00:00
router.redirect(
MethodGet,
"/eth/v1/debug/beacon/states/{state_id}",
"/api/eth/v1/debug/beacon/states/{state_id}"
)
router.redirect(
MethodGet,
"/eth/v1/debug/beacon/heads",
"/api/eth/v1/debug/beacon/heads"
)
router.redirect(
MethodGet,
"/eth/v2/debug/beacon/heads",
"/api/eth/v2/debug/beacon/heads"
)