Skip to content

Commit e3d435b

Browse files
committed
Move endpoint to /nimbus/v1/debug/ namespace for now
1 parent 099ed00 commit e3d435b

File tree

4 files changed

+109
-109
lines changed

4 files changed

+109
-109
lines changed

Diff for: beacon_chain/rpc/rest_debug_api.nim

-49
Original file line numberDiff line numberDiff line change
@@ -138,52 +138,3 @@ proc installDebugApiHandlers*(router: var RestRouter, node: BeaconNode) =
138138
bestDescendant: item.bestDescendant))
139139

140140
RestApiResponse.jsonResponsePlain(response)
141-
142-
router.metricsApi2(
143-
MethodGet,
144-
"/eth/v1/debug/beacon/states/{state_id}/historical_summaries",
145-
{RestServerMetricsType.Status, Response},
146-
) do(state_id: StateIdent) -> RestApiResponse:
147-
let
148-
sid = state_id.valueOr:
149-
return RestApiResponse.jsonError(Http400, InvalidStateIdValueError, $error)
150-
bslot = node.getBlockSlotId(sid).valueOr:
151-
return RestApiResponse.jsonError(Http404, StateNotFoundError, $error)
152-
contentType = preferredContentType(jsonMediaType, sszMediaType).valueOr:
153-
return RestApiResponse.jsonError(Http406, ContentNotAcceptableError)
154-
155-
node.withStateForBlockSlotId(bslot):
156-
return withState(state):
157-
when consensusFork >= ConsensusFork.Capella:
158-
# Build the proof for historical_summaries field (28th field in BeaconState)
159-
let gIndex = GeneralizedIndex(59) # 31 + 28 = 59
160-
var proof: array[5, Digest]
161-
if forkyState.data.build_proof(gIndex, proof).isErr:
162-
return RestApiResponse.jsonError(Http500, InvalidMerkleProofIndexError)
163-
164-
if contentType == jsonMediaType:
165-
let response = RestHistoricalSummaries(
166-
historical_summaries: forkyState.data.historical_summaries.asSeq(),
167-
proof: proof,
168-
slot: bslot.slot,
169-
)
170-
171-
RestApiResponse.jsonResponseFinalized(
172-
response, node.getStateOptimistic(state), node.dag.isFinalized(bslot.bid)
173-
)
174-
elif contentType == sszMediaType:
175-
let
176-
headers = [("eth-consensus-version", consensusFork.toString())]
177-
response = GetHistoricalSummariesV1Response(
178-
historical_summaries: forkyState.data.historical_summaries,
179-
proof: proof,
180-
slot: bslot.slot,
181-
)
182-
183-
RestApiResponse.sszResponse(response, headers)
184-
else:
185-
RestApiResponse.jsonError(Http500, InvalidAcceptError)
186-
else:
187-
RestApiResponse.jsonError(Http404, HistoricalSummariesUnavailable)
188-
189-
RestApiResponse.jsonError(Http404, StateNotFoundError)

Diff for: beacon_chain/rpc/rest_nimbus_api.nim

+49
Original file line numberDiff line numberDiff line change
@@ -531,3 +531,52 @@ proc installNimbusApiHandlers*(router: var RestRouter, node: BeaconNode) =
531531
delay: uint64(delay.nanoseconds)
532532
)
533533
RestApiResponse.jsonResponsePlain(response)
534+
535+
router.metricsApi2(
536+
MethodGet,
537+
"/nimbus/v1/debug/beacon/states/{state_id}/historical_summaries",
538+
{RestServerMetricsType.Status, Response},
539+
) do(state_id: StateIdent) -> RestApiResponse:
540+
let
541+
sid = state_id.valueOr:
542+
return RestApiResponse.jsonError(Http400, InvalidStateIdValueError, $error)
543+
bslot = node.getBlockSlotId(sid).valueOr:
544+
return RestApiResponse.jsonError(Http404, StateNotFoundError, $error)
545+
contentType = preferredContentType(jsonMediaType, sszMediaType).valueOr:
546+
return RestApiResponse.jsonError(Http406, ContentNotAcceptableError)
547+
548+
node.withStateForBlockSlotId(bslot):
549+
return withState(state):
550+
when consensusFork >= ConsensusFork.Capella:
551+
# Build the proof for historical_summaries field (28th field in BeaconState)
552+
let gIndex = GeneralizedIndex(59) # 31 + 28 = 59
553+
var proof: array[5, Digest]
554+
if forkyState.data.build_proof(gIndex, proof).isErr:
555+
return RestApiResponse.jsonError(Http500, InvalidMerkleProofIndexError)
556+
557+
if contentType == jsonMediaType:
558+
let response = RestHistoricalSummaries(
559+
historical_summaries: forkyState.data.historical_summaries.asSeq(),
560+
proof: proof,
561+
slot: bslot.slot,
562+
)
563+
564+
RestApiResponse.jsonResponseFinalized(
565+
response, node.getStateOptimistic(state), node.dag.isFinalized(bslot.bid)
566+
)
567+
elif contentType == sszMediaType:
568+
let
569+
headers = [("eth-consensus-version", consensusFork.toString())]
570+
response = GetHistoricalSummariesV1Response(
571+
historical_summaries: forkyState.data.historical_summaries,
572+
proof: proof,
573+
slot: bslot.slot,
574+
)
575+
576+
RestApiResponse.sszResponse(response, headers)
577+
else:
578+
RestApiResponse.jsonError(Http500, InvalidAcceptError)
579+
else:
580+
RestApiResponse.jsonError(Http404, HistoricalSummariesUnavailable)
581+
582+
RestApiResponse.jsonError(Http404, StateNotFoundError)

Diff for: beacon_chain/spec/eth2_apis/rest_debug_calls.nim

-60
Original file line numberDiff line numberDiff line change
@@ -73,63 +73,3 @@ proc getStateV2*(client: RestClientRef, state_id: StateIdent,
7373
msg: msg, status: error.code, message: error.message)
7474
else:
7575
raiseRestResponseError(resp)
76-
77-
proc getHistoricalSummariesV1Plain*(
78-
state_id: StateIdent
79-
): RestPlainResponse {.
80-
rest,
81-
endpoint: "/eth/v1/debug/beacon/states/{state_id}/historical_summaries",
82-
accept: preferSSZ,
83-
meth: MethodGet
84-
.}
85-
86-
proc getHistoricalSummariesV1*(
87-
client: RestClientRef, state_id: StateIdent, cfg: RuntimeConfig, restAccept = ""
88-
): Future[Option[GetHistoricalSummariesV1Response]] {.
89-
async: (
90-
raises: [
91-
CancelledError, RestEncodingError, RestDnsResolveError, RestCommunicationError,
92-
RestDecodingError, RestResponseError,
93-
]
94-
)
95-
.} =
96-
let resp =
97-
if len(restAccept) > 0:
98-
await client.getHistoricalSummariesV1Plain(state_id, restAcceptType = restAccept)
99-
else:
100-
await client.getHistoricalSummariesV1Plain(state_id)
101-
102-
return
103-
case resp.status
104-
of 200:
105-
if resp.contentType.isNone() or isWildCard(resp.contentType.get().mediaType):
106-
raise newException(RestDecodingError, "Missing or incorrect Content-Type")
107-
else:
108-
let mediaType = resp.contentType.get().mediaType
109-
if mediaType == ApplicationJsonMediaType:
110-
let summaries = decodeBytes(
111-
GetHistoricalSummariesV1Response, resp.data, resp.contentType
112-
).valueOr:
113-
raise newException(RestDecodingError, $error)
114-
some(summaries)
115-
elif mediaType == OctetStreamMediaType:
116-
let summaries =
117-
try:
118-
SSZ.decode(resp.data, GetHistoricalSummariesV1Response)
119-
except SerializationError as exc:
120-
raise newException(RestDecodingError, exc.msg)
121-
some(summaries)
122-
else:
123-
raise newException(RestDecodingError, "Unsupported Content-Type")
124-
of 404:
125-
none(GetHistoricalSummariesV1Response)
126-
of 400, 500:
127-
let error = decodeBytes(RestErrorMessage, resp.data, resp.contentType).valueOr:
128-
let msg =
129-
"Incorrect response error format (" & $resp.status & ") [" & $error & "]"
130-
raise (ref RestResponseError)(msg: msg, status: resp.status)
131-
let msg = "Error response (" & $resp.status & ") [" & error.message & "]"
132-
raise
133-
(ref RestResponseError)(msg: msg, status: error.code, message: error.message)
134-
else:
135-
raiseRestResponseError(resp)

Diff for: beacon_chain/spec/eth2_apis/rest_nimbus_calls.nim

+60
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,63 @@ proc getTimeOffset*(client: RestClientRef,
7676
let msg = "Error response (" & $resp.status & ") [" & error.message & "]"
7777
raise (ref RestResponseError)(
7878
msg: msg, status: error.code, message: error.message)
79+
80+
proc getHistoricalSummariesV1Plain*(
81+
state_id: StateIdent
82+
): RestPlainResponse {.
83+
rest,
84+
endpoint: "/nimbus/v1/debug/beacon/states/{state_id}/historical_summaries",
85+
accept: preferSSZ,
86+
meth: MethodGet
87+
.}
88+
89+
proc getHistoricalSummariesV1*(
90+
client: RestClientRef, state_id: StateIdent, cfg: RuntimeConfig, restAccept = ""
91+
): Future[Option[GetHistoricalSummariesV1Response]] {.
92+
async: (
93+
raises: [
94+
CancelledError, RestEncodingError, RestDnsResolveError, RestCommunicationError,
95+
RestDecodingError, RestResponseError,
96+
]
97+
)
98+
.} =
99+
let resp =
100+
if len(restAccept) > 0:
101+
await client.getHistoricalSummariesV1Plain(state_id, restAcceptType = restAccept)
102+
else:
103+
await client.getHistoricalSummariesV1Plain(state_id)
104+
105+
return
106+
case resp.status
107+
of 200:
108+
if resp.contentType.isNone() or isWildCard(resp.contentType.get().mediaType):
109+
raise newException(RestDecodingError, "Missing or incorrect Content-Type")
110+
else:
111+
let mediaType = resp.contentType.get().mediaType
112+
if mediaType == ApplicationJsonMediaType:
113+
let summaries = decodeBytes(
114+
GetHistoricalSummariesV1Response, resp.data, resp.contentType
115+
).valueOr:
116+
raise newException(RestDecodingError, $error)
117+
some(summaries)
118+
elif mediaType == OctetStreamMediaType:
119+
let summaries =
120+
try:
121+
SSZ.decode(resp.data, GetHistoricalSummariesV1Response)
122+
except SerializationError as exc:
123+
raise newException(RestDecodingError, exc.msg)
124+
some(summaries)
125+
else:
126+
raise newException(RestDecodingError, "Unsupported Content-Type")
127+
of 404:
128+
none(GetHistoricalSummariesV1Response)
129+
of 400, 500:
130+
let error = decodeBytes(RestErrorMessage, resp.data, resp.contentType).valueOr:
131+
let msg =
132+
"Incorrect response error format (" & $resp.status & ") [" & $error & "]"
133+
raise (ref RestResponseError)(msg: msg, status: resp.status)
134+
let msg = "Error response (" & $resp.status & ") [" & error.message & "]"
135+
raise
136+
(ref RestResponseError)(msg: msg, status: error.code, message: error.message)
137+
else:
138+
raiseRestResponseError(resp)

0 commit comments

Comments
 (0)