{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$ref": "#/definitions/hyperlaneChainMetadata",
  "definitions": {
    "hyperlaneChainMetadata": {
      "type": "object",
      "properties": {
        "availability": {
          "$ref": "#/definitions/__schema0"
        },
        "bech32Prefix": {
          "$ref": "#/definitions/__schema3"
        },
        "blockExplorers": {
          "$ref": "#/definitions/__schema5"
        },
        "blocks": {
          "$ref": "#/definitions/__schema9"
        },
        "bypassBatchSimulation": {
          "$ref": "#/definitions/__schema14"
        },
        "chainId": {
          "$ref": "#/definitions/__schema16"
        },
        "customGrpcUrls": {
          "$ref": "#/definitions/__schema18"
        },
        "deployer": {
          "$ref": "#/definitions/__schema20"
        },
        "displayName": {
          "$ref": "#/definitions/__schema24"
        },
        "displayNameShort": {
          "$ref": "#/definitions/__schema26"
        },
        "domainId": {
          "$ref": "#/definitions/__schema28"
        },
        "gasCurrencyCoinGeckoId": {
          "$ref": "#/definitions/__schema30"
        },
        "gnosisSafeTransactionServiceUrl": {
          "$ref": "#/definitions/__schema32"
        },
        "gnosisSafeApiKey": {
          "$ref": "#/definitions/__schema34"
        },
        "grpcUrls": {
          "$ref": "#/definitions/__schema36"
        },
        "index": {
          "$ref": "#/definitions/__schema43"
        },
        "isTestnet": {
          "$ref": "#/definitions/__schema46"
        },
        "logoURI": {
          "$ref": "#/definitions/__schema48"
        },
        "name": {
          "$ref": "#/definitions/__schema50"
        },
        "nativeToken": {
          "$ref": "#/definitions/__schema51"
        },
        "protocol": {
          "$ref": "#/definitions/__schema53"
        },
        "restUrls": {
          "$ref": "#/definitions/__schema55"
        },
        "rpcUrls": {
          "$ref": "#/definitions/__schema56"
        },
        "slip44": {
          "$ref": "#/definitions/__schema57"
        },
        "technicalStack": {
          "$ref": "#/definitions/__schema59"
        },
        "transactionOverrides": {
          "$ref": "#/definitions/__schema61"
        },
        "gasPrice": {
          "$ref": "#/definitions/__schema63"
        }
      },
      "required": [
        "chainId",
        "domainId",
        "name",
        "protocol",
        "rpcUrls"
      ],
      "additionalProperties": false
    },
    "__schema0": {
      "description": "Specifies if the chain is available and the reasons why it is disabled.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema1"
        }
      ]
    },
    "__schema1": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "status": {
              "type": "string",
              "const": "disabled",
              "description": "The status that represents the chain availability. See ChainStatus for valid values."
            },
            "reasons": {
              "minItems": 1,
              "type": "array",
              "items": {
                "$ref": "#/definitions/__schema2"
              },
              "description": "List of reasons explaining why the chain is disabled."
            }
          },
          "required": [
            "status",
            "reasons"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "status": {
              "type": "string",
              "const": "live",
              "description": "The status that represents the chain availability. See ChainStatus for valid values."
            }
          },
          "required": [
            "status"
          ],
          "additionalProperties": false
        }
      ]
    },
    "__schema2": {
      "type": "string",
      "enum": [
        "badrpc",
        "deprecated",
        "private",
        "unavailable",
        "other"
      ]
    },
    "__schema3": {
      "description": "The human readable address prefix for the chains using bech32.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema4"
        }
      ]
    },
    "__schema4": {
      "type": "string"
    },
    "__schema5": {
      "description": "A list of block explorers with data for this chain",
      "allOf": [
        {
          "$ref": "#/definitions/__schema6"
        }
      ]
    },
    "__schema6": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "A human readable name for the explorer."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The base URL for the explorer."
          },
          "apiUrl": {
            "type": "string",
            "format": "uri",
            "description": "The base URL for requests to the explorer API."
          },
          "apiKey": {
            "description": "An API key for the explorer (recommended for better reliability).",
            "allOf": [
              {
                "$ref": "#/definitions/__schema7"
              }
            ]
          },
          "family": {
            "description": "The type of the block explorer. See ExplorerFamily for valid values.",
            "allOf": [
              {
                "$ref": "#/definitions/__schema8"
              }
            ]
          }
        },
        "required": [
          "name",
          "url",
          "apiUrl"
        ],
        "additionalProperties": false
      }
    },
    "__schema7": {
      "type": "string"
    },
    "__schema8": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "etherscan",
            "blockscout",
            "routescan",
            "voyager",
            "zksync",
            "radixdashboard",
            "tronscan",
            "other",
            "unknown"
          ]
        },
        {
          "type": "string"
        }
      ]
    },
    "__schema9": {
      "description": "Block settings for the chain/deployment.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema10"
        }
      ]
    },
    "__schema10": {
      "type": "object",
      "properties": {
        "confirmations": {
          "description": "Number of blocks to wait before considering a transaction confirmed.",
          "allOf": [
            {
              "$ref": "#/definitions/__schema11"
            }
          ]
        },
        "reorgPeriod": {
          "description": "Number of blocks before a transaction has a near-zero chance of reverting or block tag.",
          "allOf": [
            {
              "$ref": "#/definitions/__schema12"
            }
          ]
        },
        "estimateBlockTime": {
          "description": "Rough estimate of time per block in seconds.",
          "allOf": [
            {
              "$ref": "#/definitions/__schema13"
            }
          ]
        }
      },
      "required": [
        "confirmations"
      ],
      "additionalProperties": false
    },
    "__schema11": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "__schema12": {
      "anyOf": [
        {
          "$ref": "#/definitions/__schema11"
        },
        {
          "type": "string"
        }
      ]
    },
    "__schema13": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "__schema14": {
      "description": "Whether to bypass batch simulation for this chain.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema15"
        }
      ]
    },
    "__schema15": {
      "type": "boolean"
    },
    "__schema16": {
      "anyOf": [
        {
          "$ref": "#/definitions/__schema11"
        },
        {
          "$ref": "#/definitions/__schema17"
        }
      ],
      "description": "The chainId of the chain. Uses EIP-155 for EVM chains"
    },
    "__schema17": {
      "type": "string"
    },
    "__schema18": {
      "description": "Specify a comma separated list of custom GRPC URLs to use for this chain. If not specified, the default GRPC urls will be used.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema19"
        }
      ]
    },
    "__schema19": {
      "type": "string"
    },
    "__schema20": {
      "description": "Identity information of the deployer of a Hyperlane instance to this chain",
      "allOf": [
        {
          "$ref": "#/definitions/__schema21"
        }
      ]
    },
    "__schema21": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of the deployer."
        },
        "email": {
          "description": "The email address of the deployer.",
          "allOf": [
            {
              "$ref": "#/definitions/__schema22"
            }
          ]
        },
        "url": {
          "description": "The URL of the deployer.",
          "allOf": [
            {
              "$ref": "#/definitions/__schema23"
            }
          ]
        }
      },
      "required": [
        "name"
      ],
      "additionalProperties": false
    },
    "__schema22": {
      "type": "string",
      "format": "email",
      "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "__schema23": {
      "type": "string",
      "format": "uri"
    },
    "__schema24": {
      "description": "Human-readable name of the chain.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema25"
        }
      ]
    },
    "__schema25": {
      "type": "string"
    },
    "__schema26": {
      "description": "A shorter human-readable name of the chain for use in user interfaces.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema27"
        }
      ]
    },
    "__schema27": {
      "type": "string"
    },
    "__schema28": {
      "description": "The domainId of the chain, should generally default to `chainId`. Consumer of `ChainMetadata` should use this value or `name` as a unique identifier.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema29"
        }
      ]
    },
    "__schema29": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "__schema30": {
      "description": "The ID on CoinGecko of the token used for gas payments.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema31"
        }
      ]
    },
    "__schema31": {
      "type": "string"
    },
    "__schema32": {
      "description": "The URL of the gnosis safe transaction service.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema33"
        }
      ]
    },
    "__schema33": {
      "type": "string"
    },
    "__schema34": {
      "description": "The API key for the gnosis safe transaction service.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema35"
        }
      ]
    },
    "__schema35": {
      "type": "string"
    },
    "__schema36": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/__schema37"
      },
      "description": "For cosmos chains only, a list of gRPC API URLs"
    },
    "__schema37": {
      "type": "object",
      "properties": {
        "http": {
          "type": "string",
          "format": "uri",
          "description": "The HTTP URL of the RPC endpoint (preferably HTTPS)."
        },
        "concurrency": {
          "description": "Maximum number of concurrent RPC requests.",
          "allOf": [
            {
              "$ref": "#/definitions/__schema38"
            }
          ]
        },
        "webSocket": {
          "description": "The WSS URL if the endpoint also supports websockets.",
          "allOf": [
            {
              "$ref": "#/definitions/__schema39"
            }
          ]
        },
        "pagination": {
          "description": "Limitations on the block range/age that can be queried.",
          "allOf": [
            {
              "$ref": "#/definitions/__schema40"
            }
          ]
        },
        "retry": {
          "description": "Default retry settings to be used by a provider such as MultiProvider.",
          "allOf": [
            {
              "$ref": "#/definitions/__schema41"
            }
          ]
        },
        "public": {
          "description": "Flag if the RPC is publicly available.",
          "allOf": [
            {
              "$ref": "#/definitions/__schema42"
            }
          ]
        }
      },
      "required": [
        "http"
      ],
      "additionalProperties": false
    },
    "__schema38": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "__schema39": {
      "type": "string"
    },
    "__schema40": {
      "type": "object",
      "properties": {
        "maxBlockRange": {
          "description": "The maximum range between block numbers for which the RPC can query data",
          "allOf": [
            {
              "$ref": "#/definitions/__schema29"
            }
          ]
        },
        "minBlockNumber": {
          "description": "The absolute minimum block number that this RPC supports.",
          "allOf": [
            {
              "$ref": "#/definitions/__schema11"
            }
          ]
        },
        "maxBlockAge": {
          "description": "The relative different from latest block that this RPC supports.",
          "allOf": [
            {
              "$ref": "#/definitions/__schema29"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "__schema41": {
      "type": "object",
      "properties": {
        "maxRequests": {
          "description": "The maximum number of requests to attempt before failing.",
          "allOf": [
            {
              "$ref": "#/definitions/__schema29"
            }
          ]
        },
        "baseRetryMs": {
          "description": "The base retry delay in milliseconds.",
          "allOf": [
            {
              "$ref": "#/definitions/__schema29"
            }
          ]
        }
      },
      "required": [
        "maxRequests",
        "baseRetryMs"
      ],
      "additionalProperties": false
    },
    "__schema42": {
      "type": "boolean"
    },
    "__schema43": {
      "description": "Indexing settings for the chain.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema44"
        }
      ]
    },
    "__schema44": {
      "type": "object",
      "properties": {
        "from": {
          "description": "The block to start any indexing from.",
          "allOf": [
            {
              "$ref": "#/definitions/__schema45"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "__schema45": {
      "type": "number"
    },
    "__schema46": {
      "description": "Whether the chain is considered a testnet or a mainnet.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema47"
        }
      ]
    },
    "__schema47": {
      "type": "boolean"
    },
    "__schema48": {
      "description": "A URI to a logo image for this chain for use in user interfaces.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema49"
        }
      ]
    },
    "__schema49": {
      "type": "string"
    },
    "__schema50": {
      "type": "string",
      "pattern": "^[a-z][a-z0-9]*$",
      "description": "The unique string identifier of the chain, used as the key in ChainMap dictionaries."
    },
    "__schema51": {
      "description": "The metadata of the native token of the chain (e.g. ETH for Ethereum).",
      "allOf": [
        {
          "$ref": "#/definitions/__schema52"
        }
      ]
    },
    "__schema52": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "symbol": {
          "type": "string"
        },
        "decimals": {
          "exclusiveMaximum": 256,
          "allOf": [
            {
              "$ref": "#/definitions/__schema11"
            }
          ]
        },
        "denom": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "symbol",
        "decimals"
      ],
      "additionalProperties": false
    },
    "__schema53": {
      "description": "The type of protocol used by this chain. See ProtocolType for valid values.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema54"
        }
      ]
    },
    "__schema54": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "ethereum",
            "sealevel",
            "cosmos",
            "cosmosnative",
            "starknet",
            "radix",
            "aleo",
            "tron",
            "unknown"
          ]
        },
        {
          "type": "string"
        }
      ]
    },
    "__schema55": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/__schema37"
      },
      "description": "For cosmos chains only, a list of Rest API URLs"
    },
    "__schema56": {
      "minItems": 1,
      "type": "array",
      "items": {
        "$ref": "#/definitions/__schema37"
      },
      "description": "The list of RPC endpoints for interacting with the chain."
    },
    "__schema57": {
      "description": "The SLIP-0044 coin type.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema58"
        }
      ]
    },
    "__schema58": {
      "type": "number"
    },
    "__schema59": {
      "description": "The technical stack of the chain. See ChainTechnicalStack for valid values.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema60"
        }
      ]
    },
    "__schema60": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "arbitrumnitro",
            "opstack",
            "polygoncdk",
            "polkadotsubstrate",
            "seismic",
            "zksync",
            "other",
            "unknown"
          ]
        },
        {
          "type": "string"
        }
      ]
    },
    "__schema61": {
      "description": "Properties to include when forming transaction requests.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema62"
        }
      ]
    },
    "__schema62": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "__schema63": {
      "description": "The gas price of Cosmos chains.",
      "allOf": [
        {
          "$ref": "#/definitions/__schema64"
        }
      ]
    },
    "__schema64": {
      "type": "object",
      "properties": {
        "denom": {
          "type": "string"
        },
        "amount": {
          "type": "string"
        }
      },
      "required": [
        "denom",
        "amount"
      ],
      "additionalProperties": false
    }
  }
}