{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/trident/latest.json",
  "title": "Trident Configuration",
  "description": "Configuration schema for Trident fuzzing framework",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/Ackee-Blockchain/trident/refs/heads/master/trident-spec.json",
    "sourceSha256": "bd57d7ab20fb6e25ca3084ee7ff7417eaba654e5f4ed12e6c0a06a10463625de",
    "fileMatch": [
      "**/*Trident.toml",
      "**/*.Trident.toml"
    ],
    "parsers": [
      "toml"
    ]
  },
  "type": "object",
  "properties": {
    "fuzz": {
      "type": "object",
      "description": "Fuzzing configuration section",
      "properties": {
        "metrics": {
          "type": "object",
          "description": "Metrics collection configuration",
          "properties": {
            "enabled": {
              "type": "boolean",
              "description": "Enable metrics collection",
              "default": false
            },
            "json": {
              "type": "boolean",
              "description": "Enable JSON metrics output",
              "default": false
            },
            "dashboard": {
              "type": "boolean",
              "description": "Enable metrics dashboard",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "regression": {
          "type": "object",
          "description": "Regression testing configuration",
          "properties": {
            "enabled": {
              "type": "boolean",
              "description": "Enable regression testing",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "coverage": {
          "type": "object",
          "description": "Code coverage configuration",
          "properties": {
            "enable": {
              "type": "boolean",
              "description": "Enable code coverage collection",
              "default": false
            },
            "server_port": {
              "type": "integer",
              "description": "Port for coverage server",
              "minimum": 1,
              "maximum": 65535,
              "default": 58432
            },
            "loopcount": {
              "type": "integer",
              "description": "Number of loops for coverage collection",
              "minimum": 0,
              "default": 0
            },
            "format": {
              "type": "string",
              "description": "Coverage output format",
              "default": "json"
            },
            "attach_extension": {
              "type": "boolean",
              "description": "Attach extension to coverage files",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "programs": {
          "type": "array",
          "description": "List of programs to fuzz",
          "items": {
            "type": "object",
            "properties": {
              "address": {
                "type": "string",
                "description": "Program address (as base-58 encoded string)"
              },
              "upgrade_authority": {
                "type": "string",
                "description": "Program upgrade authority (as base-58 encoded string)"
              },
              "program": {
                "type": "string",
                "description": "Path to program binary"
              }
            },
            "required": [
              "address",
              "program"
            ],
            "additionalProperties": false
          },
          "default": []
        },
        "accounts": {
          "type": "array",
          "description": "List of accounts to use in fuzzing",
          "items": {
            "type": "object",
            "properties": {
              "address": {
                "type": "string",
                "description": "Account address (as base-58 encoded string)"
              },
              "filename": {
                "type": "string",
                "description": "Path to account data file"
              }
            },
            "required": [
              "address",
              "filename"
            ],
            "additionalProperties": false
          },
          "default": []
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
