new pool attester slashings endpoint version (V2) for electra (#6585)
* new pool attester slashings endpoint version (V2) for electra * formatting --------- Co-authored-by: Pedro Miranda <pedro.miranda@nimbus.team>
This commit is contained in:
parent
a441695c51
commit
4beb890385
|
@ -1509,6 +1509,55 @@ proc installBeaconApiHandlers*(router: var RestRouter, node: BeaconNode) =
|
||||||
$res.error)
|
$res.error)
|
||||||
RestApiResponse.jsonMsgResponse(AttesterSlashingValidationSuccess)
|
RestApiResponse.jsonMsgResponse(AttesterSlashingValidationSuccess)
|
||||||
|
|
||||||
|
# https://ethereum.github.io/beacon-APIs/?urls.primaryName=dev#/Beacon/getPoolAttesterSlashingsV2
|
||||||
|
router.api2(MethodGet, "/eth/v2/beacon/pool/attester_slashings") do (
|
||||||
|
) -> RestApiResponse:
|
||||||
|
|
||||||
|
let contextFork =
|
||||||
|
node.dag.cfg.consensusForkAtEpoch(node.currentSlot.epoch)
|
||||||
|
|
||||||
|
withConsensusFork(contextFork):
|
||||||
|
when consensusFork < ConsensusFork.Electra:
|
||||||
|
RestApiResponse.jsonResponseWVersion(
|
||||||
|
toSeq(node.validatorChangePool.phase0_attester_slashings),
|
||||||
|
contextFork)
|
||||||
|
else:
|
||||||
|
RestApiResponse.jsonResponseWVersion(
|
||||||
|
toSeq(node.validatorChangePool.electra_attester_slashings),
|
||||||
|
contextFork)
|
||||||
|
|
||||||
|
# https://ethereum.github.io/beacon-APIs/?urls.primaryName=dev#/Beacon/submitPoolAttesterSlashingsV2
|
||||||
|
router.api(MethodPost, "/eth/v2/beacon/pool/attester_slashings") do (
|
||||||
|
contentBody: Option[ContentBody]) -> RestApiResponse:
|
||||||
|
|
||||||
|
let
|
||||||
|
headerVersion = request.headers.getString("Eth-Consensus-Version")
|
||||||
|
consensusVersion = ConsensusFork.init(headerVersion)
|
||||||
|
if consensusVersion.isNone():
|
||||||
|
return RestApiResponse.jsonError(Http400, FailedToObtainConsensusForkError)
|
||||||
|
|
||||||
|
if contentBody.isNone():
|
||||||
|
return RestApiResponse.jsonError(Http400, EmptyRequestBodyError)
|
||||||
|
|
||||||
|
template decodeAttesterSlashing(AttesterSlashingType: untyped) =
|
||||||
|
let dres = decodeBody(AttesterSlashingType, contentBody.get())
|
||||||
|
if dres.isErr():
|
||||||
|
return RestApiResponse.jsonError(Http400,
|
||||||
|
InvalidAttesterSlashingObjectError,
|
||||||
|
$dres.error)
|
||||||
|
let res = await node.router.routeAttesterSlashing(dres.get())
|
||||||
|
if res.isErr():
|
||||||
|
return RestApiResponse.jsonError(Http400,
|
||||||
|
AttesterSlashingValidationError,
|
||||||
|
$res.error)
|
||||||
|
return RestApiResponse.jsonMsgResponse(AttesterSlashingValidationSuccess)
|
||||||
|
|
||||||
|
case consensusVersion.get():
|
||||||
|
of ConsensusFork.Phase0 .. ConsensusFork.Deneb:
|
||||||
|
decodeAttesterSlashing(phase0.AttesterSlashing)
|
||||||
|
of ConsensusFork.Electra:
|
||||||
|
decodeAttesterSlashing(electra.AttesterSlashing)
|
||||||
|
|
||||||
# https://ethereum.github.io/beacon-APIs/#/Beacon/getPoolProposerSlashings
|
# https://ethereum.github.io/beacon-APIs/#/Beacon/getPoolProposerSlashings
|
||||||
router.api2(MethodGet, "/eth/v1/beacon/pool/proposer_slashings") do (
|
router.api2(MethodGet, "/eth/v1/beacon/pool/proposer_slashings") do (
|
||||||
) -> RestApiResponse:
|
) -> RestApiResponse:
|
||||||
|
|
|
@ -359,6 +359,18 @@ proc submitPoolAttesterSlashings*(body: phase0.AttesterSlashing):
|
||||||
meth: MethodPost.}
|
meth: MethodPost.}
|
||||||
## https://ethereum.github.io/beacon-APIs/#/Beacon/submitPoolAttesterSlashings
|
## https://ethereum.github.io/beacon-APIs/#/Beacon/submitPoolAttesterSlashings
|
||||||
|
|
||||||
|
proc getPoolAttesterSlashingsV2Plain*(): RestPlainResponse {.
|
||||||
|
rest, endpoint: "/eth/v2/beacon/pool/attester_slashings",
|
||||||
|
meth: MethodGet.}
|
||||||
|
## https://ethereum.github.io/beacon-APIs/?urls.primaryName=dev#/Beacon/getPoolAttesterSlashingsV2
|
||||||
|
|
||||||
|
proc submitPoolAttesterSlashings*(
|
||||||
|
body: phase0.AttesterSlashing | electra.AttesterSlashing
|
||||||
|
): RestPlainResponse {.
|
||||||
|
rest, endpoint: "/eth/v1/beacon/pool/attester_slashings",
|
||||||
|
meth: MethodPost.}
|
||||||
|
## https://ethereum.github.io/beacon-APIs/#/Beacon/submitPoolAttesterSlashings
|
||||||
|
|
||||||
proc getPoolProposerSlashings*(): RestResponse[GetPoolProposerSlashingsResponse] {.
|
proc getPoolProposerSlashings*(): RestResponse[GetPoolProposerSlashingsResponse] {.
|
||||||
rest, endpoint: "/eth/v1/beacon/pool/proposer_slashings",
|
rest, endpoint: "/eth/v1/beacon/pool/proposer_slashings",
|
||||||
meth: MethodGet.}
|
meth: MethodGet.}
|
||||||
|
@ -369,7 +381,9 @@ proc submitPoolProposerSlashings*(body: ProposerSlashing): RestPlainResponse {.
|
||||||
meth: MethodPost.}
|
meth: MethodPost.}
|
||||||
## https://ethereum.github.io/beacon-APIs/#/Beacon/submitPoolProposerSlashings
|
## https://ethereum.github.io/beacon-APIs/#/Beacon/submitPoolProposerSlashings
|
||||||
|
|
||||||
proc submitPoolSyncCommitteeSignatures*(body: seq[RestSyncCommitteeMessage]): RestPlainResponse {.
|
proc submitPoolSyncCommitteeSignatures*(
|
||||||
|
body: seq[RestSyncCommitteeMessage]
|
||||||
|
): RestPlainResponse {.
|
||||||
rest, endpoint: "/eth/v1/beacon/pool/sync_committees",
|
rest, endpoint: "/eth/v1/beacon/pool/sync_committees",
|
||||||
meth: MethodPost.}
|
meth: MethodPost.}
|
||||||
## https://ethereum.github.io/beacon-APIs/#/Beacon/submitPoolSyncCommitteeSignatures
|
## https://ethereum.github.io/beacon-APIs/#/Beacon/submitPoolSyncCommitteeSignatures
|
||||||
|
|
|
@ -483,7 +483,8 @@ proc routeSignedVoluntaryExit*(
|
||||||
return ok()
|
return ok()
|
||||||
|
|
||||||
proc routeAttesterSlashing*(
|
proc routeAttesterSlashing*(
|
||||||
router: ref MessageRouter, slashing: phase0.AttesterSlashing):
|
router: ref MessageRouter,
|
||||||
|
slashing: phase0.AttesterSlashing | electra.AttesterSlashing):
|
||||||
Future[SendResult] {.async: (raises: [CancelledError]).} =
|
Future[SendResult] {.async: (raises: [CancelledError]).} =
|
||||||
block:
|
block:
|
||||||
let res =
|
let res =
|
||||||
|
|
|
@ -3975,6 +3975,18 @@
|
||||||
"body": [{"operator": "jstructcmps", "start": ["data"],"value": [{"attestation_1": {"attesting_indices": [""], "signature": "", "data": {"slot": "", "index": "", "beacon_block_root": "", "source": {"epoch": "", "root": ""}, "target": {"epoch": "", "root": ""}}}, "attestation_2": {"attesting_indices": [""], "signature": "", "data": {"slot": "", "index": "", "beacon_block_root": "", "source": {"epoch": "", "root": ""}, "target": {"epoch": "", "root": ""}}}}]}]
|
"body": [{"operator": "jstructcmps", "start": ["data"],"value": [{"attestation_1": {"attesting_indices": [""], "signature": "", "data": {"slot": "", "index": "", "beacon_block_root": "", "source": {"epoch": "", "root": ""}, "target": {"epoch": "", "root": ""}}}, "attestation_2": {"attesting_indices": [""], "signature": "", "data": {"slot": "", "index": "", "beacon_block_root": "", "source": {"epoch": "", "root": ""}, "target": {"epoch": "", "root": ""}}}}]}]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"topics": ["beacon", "pool_attester_slashings_electra"],
|
||||||
|
"request": {
|
||||||
|
"url": "/eth/v2/beacon/pool/attester_slashings",
|
||||||
|
"headers": {"Accept": "application/json"}
|
||||||
|
},
|
||||||
|
"response": {
|
||||||
|
"status": {"operator": "equals", "value": "200"},
|
||||||
|
"headers": [{"key": "Content-Type", "value": "application/json", "operator": "equals"}, {"key": "eth-consensus-version", "value": ["phase0", "altair", "bellatrix"], "operator": "oneof"}],
|
||||||
|
"body": [{"operator": "jstructcmps", "start": ["data"],"value": [{"attestation_1": {"attesting_indices": [""], "signature": "", "data": {"slot": "", "index": "", "beacon_block_root": "", "source": {"epoch": "", "root": ""}, "target": {"epoch": "", "root": ""}}}, "attestation_2": {"attesting_indices": [""], "signature": "", "data": {"slot": "", "index": "", "beacon_block_root": "", "source": {"epoch": "", "root": ""}, "target": {"epoch": "", "root": ""}}}}]}]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"topics": ["beacon", "pool_proposer_slashings"],
|
"topics": ["beacon", "pool_proposer_slashings"],
|
||||||
"request": {
|
"request": {
|
||||||
|
|
Loading…
Reference in New Issue