Skip to content

Config Schema#

The following is the schema for the wake.toml TOML config file.

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "title": "Schema for Wake - development, testing, and static analysis framework for Solidity",
  "properties": {
    "subconfigs": {
      "type": "array",
      "description": "List of paths to additional config files to load",
      "items": {
        "type": "string",
        "format": "path"
      }
    },
    "api_keys": {
      "type": "object",
      "description": "API keys for various services",
      "additionalProperties": {
        "type": "string"
      }
    },
    "compiler": {
      "type": "object",
      "properties": {
        "solc": {
          "description": "Default configuration for Solidity files not belonging to a subproject",
          "type": "object",
          "properties": {
            "allow_paths": {
              "type": "array",
              "description": "Additional allowed paths for solc --allow-paths",
              "items": {
                "type": "string",
                "format": "path"
              }
            },
            "evm_version": {
              "type": "string",
              "description": "Version of the EVM to compile for",
              "enum": ["homestead", "tangerineWhistle", "spuriousDragon", "byzantium", "constantinople", "petersburg", "istanbul", "berlin", "london", "paris", "shanghai", "cancun", "prague"]
            },
            "exclude_paths": {
              "type": "array",
              "description": "Files in these paths are excluded from compilation unless imported from non-excluded file",
              "default": ["node_modules", "venv", ".venv", "lib", "script", "test"],
              "items": {
                "type": "string",
                "format": "path"
              }
            },
            "include_paths": {
              "type": "array",
              "description": "Paths to search for direct (non-relative) imports",
              "default": ["node_modules"],
              "items": {
                "type": "string",
                "format": "path"
              }
            },
            "optimizer": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean"
                },
                "runs": {
                  "type": "integer",
                  "default": 200,
                  "minimum": 1
                },
                "details": {
                  "type": "object",
                  "properties": {
                    "peephole": { "type": "boolean" },
                    "inliner": { "type": "boolean" },
                    "jumpdest_remover": { "type": "boolean" },
                    "order_literals": { "type": "boolean" },
                    "deduplicate": { "type": "boolean" },
                    "cse": { "type": "boolean" },
                    "constant_optimizer": { "type": "boolean" },
                    "simple_counter_for_loop_unchecked_increment": { "type": "boolean" },
                    "yul_details": {
                      "type": "object",
                      "properties": {
                        "stack_allocation": { "type": "boolean" },
                        "optimizer_steps": { "type": "string" }
                      }
                    }
                  }
                }
              }
            },
            "remappings": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "target_version": {
              "type": "string",
              "description": "Target Solidity version for all files",
              "pattern": "^\\d+\\.\\d+\\.\\d+$"
            },
            "via_IR": {
              "type": "boolean",
              "description": "Use new IR-based compiler pipeline"
            },
            "metadata": {
              "type": "object",
              "properties": {
                "append_CBOR": { "type": "boolean" },
                "use_literal_content": { "type": "boolean" },
                "bytecode_hash": {
                  "type": "string",
                  "enum": ["none", "ipfs", "bzzr1"]
                }
              }
            }
          }
        }
      }
    },
    "lsp": {
      "type": "object",
      "description": "Configuration for the Language Server Protocol features",
      "properties": {
        "compilation_delay": {
          "type": "number",
          "description": "Delay to wait after a file content change before recompiling",
          "default": 0,
          "minimum": 0
        },
        "code_lens": {
          "type": "object",
          "description": "Configuration for LSP code lens features",
          "properties": {
            "enable": {
              "type": "boolean",
              "default": true,
              "description": "Show code lenses"
            },
            "sort_tag_priority": {
              "type": "array",
              "description": "Order of code lens with the same start and end position",
              "default": ["lsp-references", "lsp-selectors", "lsp-inheritance-graph", "lsp-linearized-inheritance-graph"],
              "items": {
                "type": "string"
              }
            }
          }
        },
        "detectors": {
          "type": "object",
          "properties": {
            "enable": {
              "type": "boolean",
              "default": true,
              "description": "Run detectors in LSP"
            }
          }
        },
        "inlay_hints": {
          "type": "object",
          "description": "Configuration for LSP inlay hints",
          "properties": {
            "enable": {
              "type": "boolean",
              "default": true,
              "description": "Show inlay hints"
            },
            "sort_tag_priority": {
              "type": "array",
              "description": "Priority order for inlay hint types",
              "default": [],
              "items": {
                "type": "string"
              }
            }
          }
        },
        "find_references": {
          "type": "object",
          "properties": {
            "include_declarations": {
              "type": "boolean",
              "default": false,
              "description": "Include declarations in the results"
            }
          }
        }
      }
    },
    "testing": {
      "type": "object",
      "description": "Configuration for testing",
      "properties": {
        "cmd": {
          "type": "string",
          "enum": ["anvil", "ganache", "hardhat"],
          "default": "anvil",
          "description": "Which development chain to use for testing"
        },
        "anvil": {
          "type": "object",
          "properties": {
            "cmd_args": {
              "type": "string",
              "default": "--prune-history 100 --transaction-block-keeper 10 --steps-tracing --silent",
              "description": "Arguments for the Anvil command"
            }
          }
        },
        "ganache": {
          "type": "object",
          "properties": {
            "cmd_args": {
              "type": "string",
              "default": "-k istanbul -q",
              "description": "Arguments for the Ganache command"
            }
          }
        },
        "hardhat": {
          "type": "object",
          "properties": {
            "cmd_args": {
              "type": "string",
              "default": "",
              "description": "Arguments for the Hardhat command"
            }
          }
        }
      }
    },
    "deployment": {
      "type": "object",
      "description": "Configuration for deployment",
      "properties": {
        "confirm_transactions": {
          "type": "boolean",
          "default": true,
          "description": "Require confirmation for each transaction"
        },
        "silent": {
          "type": "boolean",
          "default": false,
          "description": "Do not require confirmation for each transaction and do not print transaction status"
        }
      }
    },
    "detectors": {
      "type": "object",
      "description": "Configuration for detectors",
      "properties": {
        "exclude": {
          "type": "array",
          "description": "Names of detectors that should not be loaded",
          "items": {
            "type": "string"
          },
          "default": []
        },
        "only": {
          "type": "array",
          "description": "Names of detectors that should only be loaded",
          "items": {
            "type": "string"
          }
        },
        "ignore_paths": {
          "type": "array",
          "description": "Detections in these paths must be ignored under all circumstances. Useful for ignoring detections in Solidity test files",
          "items": {
            "type": "string",
            "format": "path"
          },
          "default": ["venv", ".venv", "test"]
        },
        "exclude_paths": {
          "type": "array",
          "description": "Detections in these paths are ignored unless linked to a (sub)detection in a non-excluded path. Useful for ignoring detections in dependencies",
          "items": {
            "type": "string",
            "format": "path"
          },
          "default": ["node_modules", "lib", "script"]
        }
      }
    },
    "printers": {
      "type": "object",
      "description": "Configuration for printers",
      "properties": {
        "exclude": {
          "type": "array",
          "description": "Names of printers that should not be loaded",
          "items": {
            "type": "string"
          },
          "default": []
        },
        "only": {
          "type": "array",
          "description": "Names of printers that should only be loaded",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "detector": {
      "type": "object",
      "description": "Namespace for detector-specific config options. Each property should be named after the detector name and hold an object with string keys matching the Click option names",
      "additionalProperties": {
        "type": "object"
      }
    },
    "printer": {
      "type": "object",
      "description": "Namespace for printer-specific config options. Each property should be named after the printer name and hold an object with string keys matching the Click option names",
      "additionalProperties": {
        "type": "object"
      }
    },
    "general": {
      "type": "object",
      "properties": {
        "call_trace_options": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": ["contract_name", "address", "function_name", "named_arguments", "arguments", "status", "call_type", "value", "gas", "sender", "return_value", "error", "events"]
          },
          "default": ["contract_name", "function_name", "named_arguments", "status", "call_type", "value", "return_value", "error", "events"],
          "description": "Information to show in call traces"
        },
        "json_rpc_timeout": {
          "type": "number",
          "default": 15,
          "minimum": 0,
          "description": "Timeout applied to JSON-RPC requests"
        },
        "link_format": {
          "type": "string",
          "default": "vscode://file/{path}:{line}:{col}",
          "description": "Format of links used in detectors and printers"
        }
      }
    },
    "generator": {
      "type": "object",
      "description": "Unstable, may change in the future",
      "properties": {
        "control_flow_graph": {
          "type": "object",
          "properties": {
            "direction": {
              "type": "string",
              "enum": ["TB", "BT", "LR", "RL"],
              "description": "Graph direction: TB (top-bottom), BT (bottom-top), LR (left-right), RL (right-left)",
              "default": "TB"
            },
            "vscode_urls": {
              "type": "boolean",
              "description": "Generate VSCode-compatible URLs in graph output",
              "default": true
            }
          }
        },
        "imports_graph": {
          "type": "object",
          "properties": {
            "direction": {
              "type": "string",
              "enum": ["TB", "BT", "LR", "RL"],
              "description": "Graph direction: TB (top-bottom), BT (bottom-top), LR (left-right), RL (right-left)",
              "default": "TB"
            },
            "imports_direction": {
              "type": "string",
              "enum": ["imported-to-importing", "importing-to-imported"],
              "description": "Direction of import arrows in the graph",
              "default": "imported-to-importing"
            },
            "vscode_urls": {
              "type": "boolean",
              "description": "Generate VSCode-compatible URLs in graph output",
              "default": true
            }
          }
        },
        "inheritance_graph": {
          "type": "object",
          "properties": {
            "direction": {
              "type": "string",
              "enum": ["TB", "BT", "LR", "RL"],
              "default": "BT",
              "description": "Graph direction: TB (top-bottom), BT (bottom-top), LR (left-right), RL (right-left)"
            },
            "vscode_urls": {
              "type": "boolean",
              "default": true,
              "description": "Generate VSCode-compatible URLs in graph output"
            }
          }
        },
        "inheritance_graph_full": {
          "type": "object",
          "properties": {
            "direction": {
              "type": "string",
              "enum": ["TB", "BT", "LR", "RL"],
              "default": "BT",
              "description": "Graph direction: TB (top-bottom), BT (bottom-top), LR (left-right), RL (right-left)"
            },
            "vscode_urls": {
              "type": "boolean",
              "default": true,
              "description": "Generate VSCode-compatible URLs in graph output"
            }
          }
        },
        "linearized_inheritance_graph": {
          "type": "object",
          "properties": {
            "direction": {
              "type": "string",
              "enum": ["TB", "BT", "LR", "RL"],
              "default": "LR",
              "description": "Graph direction: TB (top-bottom), BT (bottom-top), LR (left-right), RL (right-left)"
            },
            "vscode_urls": {
              "type": "boolean",
              "default": true,
              "description": "Generate VSCode-compatible URLs in graph output"
            }
          }
        }
      }
    },
    "subproject": {
      "type": "object",
      "description": "Configuration for subdirectories requiring different compiler settings than the default",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "paths": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "path"
            },
            "default": [],
            "description": "Paths to subproject files and directories"
          },
          "target_version": {
            "type": "string",
            "description": "Target Solidity version for this subproject",
            "pattern": "^\\d+\\.\\d+\\.\\d+$"
          },
          "evm_version": {
            "type": "string",
            "description": "Version of the EVM to compile for",
            "enum": ["homestead", "tangerineWhistle", "spuriousDragon", "byzantium", "constantinople", "petersburg", "istanbul", "berlin", "london", "paris", "shanghai", "cancun", "prague"]
          },
          "optimizer": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "runs": {
                "type": "integer",
                "default": 200,
                "minimum": 1
              },
              "details": {
                "type": "object",
                "properties": {
                  "peephole": { "type": "boolean" },
                  "inliner": { "type": "boolean" },
                  "jumpdest_remover": { "type": "boolean" },
                  "order_literals": { "type": "boolean" },
                  "deduplicate": { "type": "boolean" },
                  "cse": { "type": "boolean" },
                  "constant_optimizer": { "type": "boolean" },
                  "simple_counter_for_loop_unchecked_increment": { "type": "boolean" },
                  "yul_details": {
                    "type": "object",
                    "properties": {
                      "stack_allocation": { "type": "boolean" },
                      "optimizer_steps": { "type": "string" }
                    }
                  }
                }
              }
            }
          },
          "via_IR": {
            "type": "boolean",
            "description": "Use new IR-based compiler pipeline"
          },
          "metadata": {
            "type": "object",
            "properties": {
              "append_CBOR": { "type": "boolean" },
              "use_literal_content": { "type": "boolean" },
              "bytecode_hash": {
                "type": "string",
                "enum": ["none", "ipfs", "bzzr1"]
              }
            }
          }
        }
      }
    }
  }
}