UNPKG

hardhat

Version:

Hardhat is an extensible developer tool that helps smart contract developers increase productivity by reliably bringing together the tools they want.

138 lines (109 loc) 4.45 kB
import type { ProviderRpcError } from "../../../types/providers.js"; import { CustomError } from "@nomicfoundation/hardhat-utils/error"; import { isObject } from "@nomicfoundation/hardhat-utils/lang"; const IS_PROVIDER_ERROR_PROPERTY_NAME = "_isProviderError"; // Codes taken from: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1474.md#error-codes // // Code Message Meaning Category // // -32600 Invalid request JSON is not a valid request object standard // -32601 Method not found Method does not exist standard // -32602 Invalid params Invalid method parameters standard // -32603 Internal error Internal JSON-RPC error standard // -32700 Parse error Invalid JSON standard // // -32003 Transaction rejected Transaction creation failed non-standard // -32004 Method not supported Method is not implemented non-standard // -32005 Limit exceeded Request exceeds defined limit non-standard // // -32999 Invalid response The server returned a JSON-RPC hardhat-specific // response, but the result is not // in the expected format export class ProviderError extends CustomError implements ProviderRpcError { public code: number; public data?: unknown; constructor(message: string, code: number, parentError?: Error) { super(message, parentError); this.code = code; Object.defineProperty(this, IS_PROVIDER_ERROR_PROPERTY_NAME, { configurable: false, enumerable: false, writable: false, value: true, }); } public static isProviderError(other: unknown): other is ProviderError { if (!isObject(other)) { return false; } const isProviderErrorProperty = Object.getOwnPropertyDescriptor( other, IS_PROVIDER_ERROR_PROPERTY_NAME, ); return isProviderErrorProperty?.value === true; } } export class LimitExceededError extends ProviderError { public static readonly CODE = -32005; constructor(message: string = "Limit exceeded", parent?: Error) { super(message, LimitExceededError.CODE, parent); } } export class InvalidJsonInputError extends ProviderError { public static readonly CODE = -32700; constructor(message: string = "Parse error", parent?: Error) { super(message, InvalidJsonInputError.CODE, parent); } } export class InvalidRequestError extends ProviderError { public static readonly CODE = -32600; constructor(message: string = "Invalid request", parent?: Error) { super(message, InvalidRequestError.CODE, parent); } } // TODO: not used, should we remove it? export class MethodNotFoundError extends ProviderError { public static readonly CODE = -32601; constructor(message: string = "Method not found", parent?: Error) { super(message, MethodNotFoundError.CODE, parent); } } export class InvalidArgumentsError extends ProviderError { public static readonly CODE = -32602; constructor(message: string = "Invalid params", parent?: Error) { super(message, InvalidArgumentsError.CODE, parent); } } export class InternalError extends ProviderError { public static readonly CODE = -32603; constructor(message: string = "Internal error", parent?: Error) { super(message, InternalError.CODE, parent); } } // TODO: not used, should we remove it? export class TransactionExecutionError extends ProviderError { public static readonly CODE = -32003; constructor(message: string = "Transaction rejected", parent?: Error) { super(message, TransactionExecutionError.CODE, parent); } } // TODO: not used, should we remove it? export class MethodNotSupportedError extends ProviderError { public static readonly CODE = -32004; constructor(message: string = "Method not supported", parent?: Error) { super(message, MethodNotSupportedError.CODE, parent); } } // TODO: not used, should we remove it? export class InvalidResponseError extends ProviderError { public static readonly CODE = -32999; constructor(message: string = "Invalid response", parent?: Error) { super(message, InvalidResponseError.CODE, parent); } } export class UnknownError extends ProviderError { public static readonly CODE = -1; constructor(message: string = "Unknown error", parent?: Error) { super(message, UnknownError.CODE, parent); } }