Safrole Errors
- exception jam.consensus.safrole.errors.SafroleError(code: Enum, message: str = None, *args: Any)[source]
Bases:
JamError
- class jam.consensus.safrole.errors.SafroleErrorCode(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
EnumError codes for the Safrole consensus protocol.
- BAD_SLOT = None
- UNEXPECTED_TICKET = None
- BAD_TICKET_ORDER = None
- BAD_TICKET_PROOF = None
- BAD_TICKET_ATTEMPT = None
- RESERVED = None
- DUPLICATE_TICKET = None
Error Types
The Safrole consensus protocol defines specific error types for handling various failure cases.
SafroleErrorCode
Enumeration of possible error conditions:
BAD_SLOT- Invalid slot number in block headerUNEXPECTED_TICKET- Ticket received when not expectedBAD_TICKET_ORDER- Tickets not in sorted order by VRF outputBAD_TICKET_PROOF- Invalid VRF proof for ticketBAD_TICKET_ATTEMPT- Invalid ticket attempt indexRESERVED- Reserved for future useDUPLICATE_TICKET- Duplicate ticket submission
SafroleError
Base error class that wraps error codes with descriptive messages. Used throughout the protocol implementation to signal specific failure conditions.
Example Usage
# Verify ticket order
if not is_ordered(tickets):
raise SafroleError(
SafroleErrorCode.BAD_TICKET_ORDER,
"Tickets must be ordered by VRF output"
)
# Check for duplicates
if is_duplicate(ticket):
raise SafroleError(
SafroleErrorCode.DUPLICATE_TICKET,
f"Ticket {ticket.id} already exists"
)
Handle Them
try:
process_tickets(block)
except SafroleError as e:
if e.code == SafroleErrorCode.BAD_TICKET_PROOF:
# Handle invalid VRF proof
pass
elif e.code == SafroleErrorCode.BAD_TICKET_ORDER:
# Handle ordering violation
pass
API Reference
- exception jam.consensus.safrole.errors.SafroleError(code: Enum, message: str = None, *args: Any)[source]
Bases:
JamError
- class jam.consensus.safrole.errors.SafroleErrorCode(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]
Bases:
EnumError codes for the Safrole consensus protocol.
- BAD_SLOT = None
- UNEXPECTED_TICKET = None
- BAD_TICKET_ORDER = None
- BAD_TICKET_PROOF = None
- BAD_TICKET_ATTEMPT = None
- RESERVED = None
- DUPLICATE_TICKET = None