Finish error message to constants process.

This commit is contained in:
cheatfate 2021-04-08 17:34:05 +03:00 committed by zah
parent b3ad573b1f
commit 5268d03b68
4 changed files with 86 additions and 45 deletions

View File

@ -145,8 +145,7 @@ proc installNimbusApiHandlers*(router: var RestRouter, node: BeaconNode) =
node.graffitiBytes = value.get().get() node.graffitiBytes = value.get().get()
return RestApiResponse.jsonResponse((result: true)) return RestApiResponse.jsonResponse((result: true))
else: else:
return RestApiResponse.jsonError( return RestApiResponse.jsonError(Http400, InvalidGraffitiBytesValye)
Http400, "You must specify a valid graffiti string")
router.api(MethodGet, "/api/nimbus/v1/graffiti") do ( router.api(MethodGet, "/api/nimbus/v1/graffiti") do (
) -> RestApiResponse: ) -> RestApiResponse:
@ -159,7 +158,7 @@ proc installNimbusApiHandlers*(router: var RestRouter, node: BeaconNode) =
block: block:
let res = log_level.get() let res = log_level.get()
if res.isErr(): if res.isErr():
return RestApiResponse.jsonError(Http400, "Invalid log_level value", return RestApiResponse.jsonError(Http400, InvalidLogLevelValueError,
$res.error()) $res.error())
res.get() res.get()
{.gcsafe.}: {.gcsafe.}:
@ -182,7 +181,7 @@ proc installNimbusApiHandlers*(router: var RestRouter, node: BeaconNode) =
block: block:
let res = node.getCurrentHead(wallSlot) let res = node.getCurrentHead(wallSlot)
if res.isErr(): if res.isErr():
return RestApiResponse.jsonError(Http503, "Node is not synced yet") return RestApiResponse.jsonError(Http503, BeaconNodeInSyncError)
res.get() res.get()
let proposalState = assignClone(node.chainDag.headState) let proposalState = assignClone(node.chainDag.headState)
node.chainDag.withState(proposalState[], head.atSlot(wallSlot)): node.chainDag.withState(proposalState[], head.atSlot(wallSlot)):

View File

@ -162,25 +162,23 @@ proc installNodeApiHandlers*(router: var RestRouter, node: BeaconNode) =
let connectionMask = let connectionMask =
block: block:
if state.isErr(): if state.isErr():
return RestApiResponse.jsonError(Http400, return RestApiResponse.jsonError(Http400, InvalidPeerStateValueError,
"Invalid state value(s)",
$state.error()) $state.error())
let sres = validateState(state.get()) let sres = validateState(state.get())
if sres.isErr(): if sres.isErr():
return RestApiResponse.jsonError(Http400, return RestApiResponse.jsonError(Http400, InvalidPeerStateValueError,
"Invalid state value(s)",
$sres.error()) $sres.error())
sres.get() sres.get()
let directionMask = let directionMask =
block: block:
if direction.isErr(): if direction.isErr():
return RestApiResponse.jsonError(Http400, return RestApiResponse.jsonError(Http400,
"Invalid direction value(s)", InvalidPeerDirectionValueError,
$direction.error()) $direction.error())
let dres = validateDirection(direction.get()) let dres = validateDirection(direction.get())
if dres.isErr(): if dres.isErr():
return RestApiResponse.jsonError(Http400, return RestApiResponse.jsonError(Http400,
"Invalid direction value(s)", InvalidPeerDirectionValueError,
$dres.error()) $dres.error())
dres.get() dres.get()
@ -221,12 +219,11 @@ proc installNodeApiHandlers*(router: var RestRouter, node: BeaconNode) =
let peer = let peer =
block: block:
if peer_id.isErr(): if peer_id.isErr():
return RestApiResponse.jsonError(Http400, return RestApiResponse.jsonError(Http400, InvalidPeerIdValueError,
"Unable to parse PeerID value",
$peer_id.error()) $peer_id.error())
let res = node.network.peers.getOrDefault(peer_id.get()) let res = node.network.peers.getOrDefault(peer_id.get())
if isNil(res): if isNil(res):
return RestApiResponse.jsonError(Http404, "Peer not found") return RestApiResponse.jsonError(Http404, PeerNotFoundError)
res res
return RestApiResponse.jsonResponse( return RestApiResponse.jsonResponse(
( (

View File

@ -38,6 +38,8 @@ const
"Beacon node is currently syncing and not serving request on that endpoint" "Beacon node is currently syncing and not serving request on that endpoint"
BlockNotFoundError* = BlockNotFoundError* =
"Block header/data has not been found" "Block header/data has not been found"
BlockProduceError* =
"Could not produce the block"
EmptyRequestBodyError* = EmptyRequestBodyError* =
"Empty request's body" "Empty request's body"
InvalidBlockObjectError* = InvalidBlockObjectError* =
@ -66,6 +68,13 @@ const
"Invalid voluntary exit, it will never pass validation so it's rejected" "Invalid voluntary exit, it will never pass validation so it's rejected"
VoluntaryExitValidationSuccess* = VoluntaryExitValidationSuccess* =
"Voluntary exit object(s) was broadcasted" "Voluntary exit object(s) was broadcasted"
InvalidAggregateAndProofObjectError* =
"Unable to decode aggregate and proof object(s)"
AggregateAndProofValidationError* =
"Invalid aggregate and proof, it will never pass validation so it's " &
"rejected"
AggregateAndProofValidationSuccess* =
"Aggregate and proof object(s) was broadcasted"
InvalidParentRootValueError* = InvalidParentRootValueError* =
"Invalid parent root value" "Invalid parent root value"
MissingSlotValueError* = MissingSlotValueError* =
@ -76,6 +85,18 @@ const
"Missing `committee_index` value" "Missing `committee_index` value"
InvalidCommitteeIndexValueError* = InvalidCommitteeIndexValueError* =
"Invalid committee index value" "Invalid committee index value"
MissingAttestationDataRootValueError* =
"Missing `attestation_data_root` value"
InvalidAttestationDataRootValueError* =
"Invalid attestation data root value"
UnableToGetAggregatedAttestationError* =
"Unable to retrieve an aggregated attestation"
MissingRandaoRevealValue* =
"Missing `randao_reveal` value"
InvalidRandaoRevealValue* =
"Invalid randao reveal value"
InvalidGraffitiBytesValye* =
"Invalid graffiti bytes value"
InvalidEpochValueError* = InvalidEpochValueError* =
"Invalid epoch value" "Invalid epoch value"
InvalidStateIdValueError* = InvalidStateIdValueError* =
@ -88,6 +109,12 @@ const
"Maximum number of validator identifier values exceeded" "Maximum number of validator identifier values exceeded"
InvalidValidatorStatusValueError* = InvalidValidatorStatusValueError* =
"Invalid validator's status value error" "Invalid validator's status value error"
InvalidValidatorIndexValueError* =
"Invalid validator's index value(s)"
EmptyValidatorIndexArrayError* =
"Empty validator's index array"
InvalidSubscriptionRequestValueError* =
"Invalid subscription request object(s)"
ValidatorNotFoundError* = ValidatorNotFoundError* =
"Could not find validator" "Could not find validator"
ValidatorStatusNotFoundError* = ValidatorStatusNotFoundError* =
@ -104,10 +131,26 @@ const
"State not found" "State not found"
SlotNotFoundError* = SlotNotFoundError* =
"Slot number is too far away" "Slot number is too far away"
SlotNotInNextWallSlotEpochError* =
"Requested slot not in next wall-slot epoch"
SlotFromThePastError* =
"Requested slot from the past"
ProposerNotFoundError* =
"Could not find proposer for the head and slot"
NoHeadForSlotError* = NoHeadForSlotError* =
"Cound not find head for slot" "Cound not find head for slot"
EpochOverflowValueError* = EpochOverflowValueError* =
"Requesting epoch for which slot would overflow" "Requesting epoch for which slot would overflow"
InvalidPeerStateValueError* =
"Invalid peer's state value(s) error"
InvalidPeerDirectionValueError* =
"Invalid peer's direction value(s) error"
InvalidPeerIdValueError* =
"Invalid peer's id value(s) error"
PeerNotFoundError* =
"Peer not found"
InvalidLogLevelValueError* =
"Invalid log level value error"
InternalServerError* = InternalServerError* =
"Internal server error" "Internal server error"
NoImplementationError* = NoImplementationError* =

View File

@ -50,8 +50,9 @@ proc installValidatorApiHandlers*(router: var RestRouter, node: BeaconNode) =
return RestApiResponse.jsonError(Http400, EmptyRequestBodyError) return RestApiResponse.jsonError(Http400, EmptyRequestBodyError)
let dres = decodeBody(seq[RestValidatorIndex], contentBody.get()) let dres = decodeBody(seq[RestValidatorIndex], contentBody.get())
if dres.isErr(): if dres.isErr():
return RestApiResponse.jsonError(Http400, "Unable to decode " & return RestApiResponse.jsonError(Http400,
"list of validator indexes", $dres.error()) InvalidValidatorIndexValueError,
$dres.error())
var res: seq[ValidatorIndex] var res: seq[ValidatorIndex]
let items = dres.get() let items = dres.get()
for item in items: for item in items:
@ -66,7 +67,8 @@ proc installValidatorApiHandlers*(router: var RestRouter, node: BeaconNode) =
UnsupportedValidatorIndexValueError) UnsupportedValidatorIndexValueError)
res.add(vres.get()) res.add(vres.get())
if len(res) == 0: if len(res) == 0:
return RestApiResponse.jsonError(Http400, "Empty indexes list") return RestApiResponse.jsonError(Http400,
EmptyValidatorIndexArrayError)
res res
let qepoch = let qepoch =
block: block:
@ -96,8 +98,7 @@ proc installValidatorApiHandlers*(router: var RestRouter, node: BeaconNode) =
if not(node.isSynced(node.chainDag.head)): if not(node.isSynced(node.chainDag.head)):
return RestApiResponse.jsonError(Http503, BeaconNodeInSyncError) return RestApiResponse.jsonError(Http503, BeaconNodeInSyncError)
else: else:
return RestApiResponse.jsonError(Http400, return RestApiResponse.jsonError(Http400, BlockNotFoundError)
"Cound not find slot data")
bref.root bref.root
else: else:
node.chainDag.genesis.root node.chainDag.genesis.root
@ -195,15 +196,15 @@ proc installValidatorApiHandlers*(router: var RestRouter, node: BeaconNode) =
return RestApiResponse.jsonError(Http400, InvalidSlotValueError, return RestApiResponse.jsonError(Http400, InvalidSlotValueError,
$slot.error()) $slot.error())
slot.get() slot.get()
let qrandao = let qrandao =
if randao_reveal.isNone(): if randao_reveal.isNone():
return RestApiResponse.jsonError(Http400, return RestApiResponse.jsonError(Http400, MissingRandaoRevealValue)
"Missing randao_reveal value")
else: else:
let res = randao_reveal.get() let res = randao_reveal.get()
if res.isErr(): if res.isErr():
return RestApiResponse.jsonError(Http400, return RestApiResponse.jsonError(Http400,
"Incorrect randao_reveal value", InvalidRandaoRevealValue,
$res.error()) $res.error())
res.get() res.get()
let qgraffiti = let qgraffiti =
@ -213,7 +214,7 @@ proc installValidatorApiHandlers*(router: var RestRouter, node: BeaconNode) =
let res = graffiti.get() let res = graffiti.get()
if res.isErr(): if res.isErr():
return RestApiResponse.jsonError(Http400, return RestApiResponse.jsonError(Http400,
"Incorrect graffiti bytes value", InvalidGraffitiBytesValye,
$res.error()) $res.error())
res.get() res.get()
let qhead = let qhead =
@ -228,14 +229,13 @@ proc installValidatorApiHandlers*(router: var RestRouter, node: BeaconNode) =
res.get() res.get()
let proposer = node.chainDag.getProposer(qhead, qslot) let proposer = node.chainDag.getProposer(qhead, qslot)
if proposer.isNone(): if proposer.isNone():
return RestApiResponse.jsonError(Http400, return RestApiResponse.jsonError(Http400, ProposerNotFoundError)
"Could not retrieve block for slot")
let res = makeBeaconBlockForHeadAndSlot( let res = makeBeaconBlockForHeadAndSlot(
node, qrandao, proposer.get()[0], qgraffiti, qhead, qslot) node, qrandao, proposer.get()[0], qgraffiti, qhead, qslot)
if res.isNone(): if res.isNone():
return RestApiResponse.jsonError(Http400, return RestApiResponse.jsonError(Http400, BlockProduceError)
"Could not make block for slot")
res.get() res.get()
return RestApiResponse.jsonResponse(message) return RestApiResponse.jsonResponse(message)
# https://ethereum.github.io/eth2.0-APIs/#/Validator/produceAttestationData # https://ethereum.github.io/eth2.0-APIs/#/Validator/produceAttestationData
@ -296,18 +296,17 @@ proc installValidatorApiHandlers*(router: var RestRouter, node: BeaconNode) =
let qroot = let qroot =
block: block:
if attestation_data_root.isNone(): if attestation_data_root.isNone():
return RestApiResponse.jsonError(Http400, "Missing " & return RestApiResponse.jsonError(Http400,
"attestation_data_root value") MissingAttestationDataRootValueError)
let res = attestation_data_root.get() let res = attestation_data_root.get()
if res.isErr(): if res.isErr():
return RestApiResponse.jsonError(Http400, "Incorrect " & return RestApiResponse.jsonError(Http400,
"attestation_data_root value", InvalidAttestationDataRootValueError, $res.error())
$res.error())
res.get() res.get()
let res = node.attestationPool[].getAggregatedAttestation(qslot, qroot) let res = node.attestationPool[].getAggregatedAttestation(qslot, qroot)
if res.isNone(): if res.isNone():
return RestApiResponse.jsonError(Http400, "Could not retrieve an " & return RestApiResponse.jsonError(Http400,
"aggregated attestation") UnableToGetAggregatedAttestationError)
res.get() res.get()
return RestApiResponse.jsonResponse(attestation) return RestApiResponse.jsonResponse(attestation)
@ -320,8 +319,9 @@ proc installValidatorApiHandlers*(router: var RestRouter, node: BeaconNode) =
return RestApiResponse.jsonError(Http400, EmptyRequestBodyError) return RestApiResponse.jsonError(Http400, EmptyRequestBodyError)
let dres = decodeBody(SignedAggregateAndProof, contentBody.get()) let dres = decodeBody(SignedAggregateAndProof, contentBody.get())
if dres.isErr(): if dres.isErr():
return RestApiResponse.jsonError(Http400, "Unable to decode " & return RestApiResponse.jsonError(Http400,
"SignedAggregateAndProof object", $dres.error()) InvalidAggregateAndProofObjectError,
$dres.error())
dres.get() dres.get()
let wallTime = node.processor.getWallTime() let wallTime = node.processor.getWallTime()
@ -329,11 +329,12 @@ proc installValidatorApiHandlers*(router: var RestRouter, node: BeaconNode) =
node.processor.batchCrypto, payload, wallTime node.processor.batchCrypto, payload, wallTime
) )
if res.isErr(): if res.isErr():
return RestApiResponse.jsonError(Http400, "Aggregate and proofs " & return RestApiResponse.jsonError(Http400,
"verification failed", $res.error()) AggregateAndProofValidationError,
$res.error())
node.network.broadcast(node.topicAggregateAndProofs, payload) node.network.broadcast(node.topicAggregateAndProofs, payload)
return RestApiResponse.jsonError(Http200, return RestApiResponse.jsonError(Http200,
"Aggregate and proofs was broadcasted") AggregateAndProofValidationSuccess)
# https://ethereum.github.io/eth2.0-APIs/#/Validator/prepareBeaconCommitteeSubnet # https://ethereum.github.io/eth2.0-APIs/#/Validator/prepareBeaconCommitteeSubnet
router.api(MethodPost, router.api(MethodPost,
@ -348,8 +349,9 @@ proc installValidatorApiHandlers*(router: var RestRouter, node: BeaconNode) =
let dres = decodeBody(seq[RestCommitteeSubscriptionTuple], let dres = decodeBody(seq[RestCommitteeSubscriptionTuple],
contentBody.get()) contentBody.get())
if dres.isErr(): if dres.isErr():
return RestApiResponse.jsonError(Http400, "Unable to decode " & return RestApiResponse.jsonError(Http400,
"subscription request(s)") InvalidSubscriptionRequestValueError,
$dres.error())
dres.get() dres.get()
if not(node.isSynced(node.chainDag.head)): if not(node.isSynced(node.chainDag.head)):
return RestApiResponse.jsonError(Http503, BeaconNodeInSyncError) return RestApiResponse.jsonError(Http503, BeaconNodeInSyncError)
@ -364,21 +366,21 @@ proc installValidatorApiHandlers*(router: var RestRouter, node: BeaconNode) =
if uint64(idx) >= if uint64(idx) >=
lenu64(node.chainDag.headState.data.data.validators): lenu64(node.chainDag.headState.data.data.validators):
return RestApiResponse.jsonError(Http400, return RestApiResponse.jsonError(Http400,
"Invalid validator_index value") InvalidValidatorIndexValueError)
node.chainDag.headState.data.data.validators[idx].pubkey node.chainDag.headState.data.data.validators[idx].pubkey
let wallSlot = node.beaconClock.now.slotOrZero let wallSlot = node.beaconClock.now.slotOrZero
if wallSlot > request.slot + 1: if wallSlot > request.slot + 1:
return RestApiResponse.jsonError(Http400, "Past slot requested") return RestApiResponse.jsonError(Http400, SlotFromThePastError)
let epoch = request.slot.epoch let epoch = request.slot.epoch
if epoch >= wallSlot.epoch and epoch - wallSlot.epoch > 1: if epoch >= wallSlot.epoch and epoch - wallSlot.epoch > 1:
return RestApiResponse.jsonError(Http400, "Slot requested not in " & return RestApiResponse.jsonError(Http400,
"next wall-slot epoch") SlotNotInNextWallSlotEpochError)
let head = let head =
block: block:
let res = node.getCurrentHead(epoch) let res = node.getCurrentHead(epoch)
if res.isErr(): if res.isErr():
return RestApiResponse.jsonError(Http400, "Unable to obtain head", return RestApiResponse.jsonError(Http400, NoHeadForSlotError,
$res.error()) $res.error())
res.get() res.get()
let epochRef = node.chainDag.getEpochRef(head, epoch) let epochRef = node.chainDag.getEpochRef(head, epoch)