Finish error message to constants process.
This commit is contained in:
parent
b3ad573b1f
commit
5268d03b68
|
@ -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)):
|
||||||
|
|
|
@ -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(
|
||||||
(
|
(
|
||||||
|
|
|
@ -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* =
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue