from enum import Enum from typing import Any, List class Err(Enum): # temporary errors. Don't blacklist DOES_NOT_EXTEND = -1 BAD_HEADER_SIGNATURE = -2 MISSING_FROM_STORAGE = -3 INVALID_PROTOCOL_MESSAGE = -4 # We WILL ban for a protocol violation. SELF_CONNECTION = -5 INVALID_HANDSHAKE = -6 INVALID_ACK = -7 INCOMPATIBLE_PROTOCOL_VERSION = -8 DUPLICATE_CONNECTION = -9 BLOCK_NOT_IN_BLOCKCHAIN = -10 NO_PROOF_OF_SPACE_FOUND = -11 PEERS_DONT_HAVE_BLOCK = -12 MAX_INBOUND_CONNECTIONS_REACHED = -13 UNKNOWN = 1 # permanent errors. Block is un-salvageable garbage. INVALID_BLOCK_SOLUTION = 2 INVALID_COIN_SOLUTION = 3 DUPLICATE_OUTPUT = 4 DOUBLE_SPEND = 5 UNKNOWN_UNSPENT = 6 BAD_AGGREGATE_SIGNATURE = 7 WRONG_PUZZLE_HASH = 8 BAD_FARMER_COIN_AMOUNT = 9 INVALID_CONDITION = 10 ASSERT_MY_COIN_ID_FAILED = 11 ASSERT_ANNOUNCE_CONSUMED_FAILED = 12 ASSERT_HEIGHT_RELATIVE_FAILED = 13 ASSERT_HEIGHT_ABSOLUTE_FAILED = 14 ASSERT_SECONDS_ABSOLUTE_FAILED = 15 COIN_AMOUNT_EXCEEDS_MAXIMUM = 16 SEXP_ERROR = 17 INVALID_FEE_LOW_FEE = 18 MEMPOOL_CONFLICT = 19 MINTING_COIN = 20 EXTENDS_UNKNOWN_BLOCK = 21 COINBASE_NOT_YET_SPENDABLE = 22 BLOCK_COST_EXCEEDS_MAX = 23 BAD_ADDITION_ROOT = 24 BAD_REMOVAL_ROOT = 25 INVALID_POSPACE_HASH = 26 INVALID_COINBASE_SIGNATURE = 27 INVALID_PLOT_SIGNATURE = 28 TIMESTAMP_TOO_FAR_IN_PAST = 29 TIMESTAMP_TOO_FAR_IN_FUTURE = 30 INVALID_TRANSACTIONS_FILTER_HASH = 31 INVALID_POSPACE_CHALLENGE = 32 INVALID_POSPACE = 33 INVALID_HEIGHT = 34 INVALID_COINBASE_AMOUNT = 35 INVALID_MERKLE_ROOT = 36 INVALID_BLOCK_FEE_AMOUNT = 37 INVALID_WEIGHT = 38 INVALID_TOTAL_ITERS = 39 BLOCK_IS_NOT_FINISHED = 40 INVALID_NUM_ITERATIONS = 41 INVALID_POT = 42 INVALID_POT_CHALLENGE = 43 INVALID_TRANSACTIONS_GENERATOR_HASH = 44 INVALID_POOL_TARGET = 45 INVALID_COINBASE_PARENT = 46 INVALID_FEES_COIN_PARENT = 47 RESERVE_FEE_CONDITION_FAILED = 48 NOT_BLOCK_BUT_HAS_DATA = 49 IS_TRANSACTION_BLOCK_BUT_NO_DATA = 50 INVALID_PREV_BLOCK_HASH = 51 INVALID_TRANSACTIONS_INFO_HASH = 52 INVALID_FOLIAGE_BLOCK_HASH = 53 INVALID_REWARD_COINS = 54 INVALID_BLOCK_COST = 55 NO_END_OF_SLOT_INFO = 56 INVALID_PREV_CHALLENGE_SLOT_HASH = 57 INVALID_SUB_EPOCH_SUMMARY_HASH = 58 NO_SUB_EPOCH_SUMMARY_HASH = 59 SHOULD_NOT_MAKE_CHALLENGE_BLOCK = 60 SHOULD_MAKE_CHALLENGE_BLOCK = 61 INVALID_CHALLENGE_CHAIN_DATA = 62 INVALID_CC_EOS_VDF = 65 INVALID_RC_EOS_VDF = 66 INVALID_CHALLENGE_SLOT_HASH_RC = 67 INVALID_PRIOR_POINT_RC = 68 INVALID_DEFICIT = 69 INVALID_SUB_EPOCH_SUMMARY = 70 INVALID_PREV_SUB_EPOCH_SUMMARY_HASH = 71 INVALID_REWARD_CHAIN_HASH = 72 INVALID_SUB_EPOCH_OVERFLOW = 73 INVALID_NEW_DIFFICULTY = 74 INVALID_NEW_SUB_SLOT_ITERS = 75 INVALID_CC_SP_VDF = 76 INVALID_RC_SP_VDF = 77 INVALID_CC_SIGNATURE = 78 INVALID_RC_SIGNATURE = 79 CANNOT_MAKE_CC_BLOCK = 80 INVALID_RC_SP_PREV_IP = 81 INVALID_RC_IP_PREV_IP = 82 INVALID_IS_TRANSACTION_BLOCK = 83 INVALID_URSB_HASH = 84 OLD_POOL_TARGET = 85 INVALID_POOL_SIGNATURE = 86 INVALID_FOLIAGE_BLOCK_PRESENCE = 87 INVALID_CC_IP_VDF = 88 INVALID_RC_IP_VDF = 89 IP_SHOULD_BE_NONE = 90 INVALID_REWARD_BLOCK_HASH = 91 INVALID_MADE_NON_OVERFLOW_INFUSIONS = 92 NO_OVERFLOWS_IN_FIRST_SUB_SLOT_NEW_EPOCH = 93 MEMPOOL_NOT_INITIALIZED = 94 SHOULD_NOT_HAVE_ICC = 95 SHOULD_HAVE_ICC = 96 INVALID_ICC_VDF = 97 INVALID_ICC_HASH_CC = 98 INVALID_ICC_HASH_RC = 99 INVALID_ICC_EOS_VDF = 100 INVALID_SP_INDEX = 101 TOO_MANY_BLOCKS = 102 INVALID_CC_CHALLENGE = 103 INVALID_PREFARM = 104 ASSERT_SECONDS_RELATIVE_FAILED = 105 BAD_COINBASE_SIGNATURE = 106 # INITIAL_TRANSACTION_FREEZE = 107 # removed NO_TRANSACTIONS_WHILE_SYNCING = 108 ALREADY_INCLUDING_TRANSACTION = 109 INCOMPATIBLE_NETWORK_ID = 110 PRE_SOFT_FORK_MAX_GENERATOR_SIZE = 111 # Size in bytes INVALID_REQUIRED_ITERS = 112 TOO_MANY_GENERATOR_REFS = 113 # Number of uint32 entries in the List ASSERT_MY_PARENT_ID_FAILED = 114 ASSERT_MY_PUZZLEHASH_FAILED = 115 ASSERT_MY_AMOUNT_FAILED = 116 GENERATOR_RUNTIME_ERROR = 117 INVALID_COST_RESULT = 118 INVALID_TRANSACTIONS_GENERATOR_REFS_ROOT = 119 FUTURE_GENERATOR_REFS = 120 # All refs must be to blocks in the past GENERATOR_REF_HAS_NO_GENERATOR = 121 DOUBLE_SPEND_IN_FORK = 122 INVALID_FEE_TOO_CLOSE_TO_ZERO = 123 COIN_AMOUNT_NEGATIVE = 124 INTERNAL_PROTOCOL_ERROR = 125 INVALID_SPEND_BUNDLE = 126 class ValidationError(Exception): def __init__(self, code: Err, error_msg: str = ""): self.code = code self.error_msg = error_msg class ConsensusError(Exception): def __init__(self, code: Err, errors: List[Any] = []): super(ConsensusError, self).__init__(f"Error code: {code.name}") self.errors = errors class ProtocolError(Exception): def __init__(self, code: Err, errors: List[Any] = []): super(ProtocolError, self).__init__(f"Error code: {code.name}") self.code = code self.errors = errors