Skip to content

wake.config.data_model module #

AnvilConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class AnvilConfig(WakeConfigModel):
    cmd_args: str = (
        "--prune-history 100 --transaction-block-keeper 10 --steps-tracing --silent"
    )
    """
    Command line arguments to pass to `anvil`.
    """

cmd_args: str = '--prune-history 100 --transaction-block-keeper 10 --steps-tracing --silent' class-attribute instance-attribute #

Command line arguments to pass to anvil.

CodeLensConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class CodeLensConfig(WakeConfigModel):
    enable: bool = True
    """
    Show code lenses.
    """

enable: bool = True class-attribute instance-attribute #

Show code lenses.

CompilerConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class CompilerConfig(WakeConfigModel):
    solc: SolcConfig = Field(default_factory=SolcConfig)

solc: SolcConfig = Field(default_factory=SolcConfig) class-attribute instance-attribute #

ControlFlowGraphConfig class #

Bases: WakeConfigModel

Unstable, may change in the future.

Source code in wake/config/data_model.py
class ControlFlowGraphConfig(WakeConfigModel):
    """
    Unstable, may change in the future.
    """

    direction: GraphsDirection = GraphsDirection.TopBottom
    vscode_urls: bool = True

direction: GraphsDirection = GraphsDirection.TopBottom class-attribute instance-attribute #

vscode_urls: bool = True class-attribute instance-attribute #

DeploymentConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class DeploymentConfig(WakeConfigModel):
    confirm_transactions: bool = True
    """
    Require confirmation for each transaction.
    """
    silent: bool = False
    """
    Do not require confirmation for each transaction and do not print transaction status.
    """

confirm_transactions: bool = True class-attribute instance-attribute #

Require confirmation for each transaction.

silent: bool = False class-attribute instance-attribute #

Do not require confirmation for each transaction and do not print transaction status.

DetectorConfig class #

Bases: WakeConfigModel

Namespace for detector-specific config options. Each attribute should be named after the detector name and hold a dictionary with string keys matching the Click option names.

Source code in wake/config/data_model.py
class DetectorConfig(WakeConfigModel, extra=Extra.allow):
    """
    Namespace for detector-specific config options.
    Each attribute should be named after the detector name and hold a dictionary with string keys matching the Click option names.
    """

DetectorsConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class DetectorsConfig(WakeConfigModel):
    exclude: FrozenSet[str] = frozenset()
    """
    Names of detectors that should not be loaded.
    """
    only: Optional[FrozenSet[str]] = None
    """
    Names of detectors that should only be loaded.
    """
    ignore_paths: FrozenSet[Path] = Field(
        default_factory=lambda: frozenset(
            [
                Path.cwd() / "venv",
                Path.cwd() / ".venv",
                Path.cwd() / "test",
            ]
        )
    )
    """
    Detections in these paths must be ignored under all circumstances.
    Useful for ignoring detections in Solidity test files.
    """
    exclude_paths: FrozenSet[Path] = Field(
        default_factory=lambda: frozenset(
            [
                Path.cwd() / "node_modules",
                Path.cwd() / "lib",
                Path.cwd() / "script",
            ]
        )
    )
    """
    Detections in these paths are ignored unless linked to a (sub)detection in a non-excluded path.
    Useful for ignoring detections in dependencies.
    """

    @validator("ignore_paths", pre=True, each_item=True)
    def set_ignore_paths(cls, v):
        return Path(v).resolve()

    @validator("exclude_paths", pre=True, each_item=True)
    def set_exclude_paths(cls, v):
        return Path(v).resolve()

exclude: FrozenSet[str] = frozenset() class-attribute instance-attribute #

Names of detectors that should not be loaded.

exclude_paths: FrozenSet[Path] = Field(default_factory=lambda : frozenset([Path.cwd() / 'node_modules', Path.cwd() / 'lib', Path.cwd() / 'script'])) class-attribute instance-attribute #

Detections in these paths are ignored unless linked to a (sub)detection in a non-excluded path. Useful for ignoring detections in dependencies.

ignore_paths: FrozenSet[Path] = Field(default_factory=lambda : frozenset([Path.cwd() / 'venv', Path.cwd() / '.venv', Path.cwd() / 'test'])) class-attribute instance-attribute #

Detections in these paths must be ignored under all circumstances. Useful for ignoring detections in Solidity test files.

only: Optional[FrozenSet[str]] = None class-attribute instance-attribute #

Names of detectors that should only be loaded.

set_exclude_paths(v) #

Source code in wake/config/data_model.py
@validator("exclude_paths", pre=True, each_item=True)
def set_exclude_paths(cls, v):
    return Path(v).resolve()

set_ignore_paths(v) #

Source code in wake/config/data_model.py
@validator("ignore_paths", pre=True, each_item=True)
def set_ignore_paths(cls, v):
    return Path(v).resolve()

DetectorsLspConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class DetectorsLspConfig(WakeConfigModel):
    enable: bool = True
    """
    Run detectors in LSP.
    """

enable: bool = True class-attribute instance-attribute #

Run detectors in LSP.

FindReferencesConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class FindReferencesConfig(WakeConfigModel):
    include_declarations: bool = False
    """
    Include declarations in the results.
    """

include_declarations: bool = False class-attribute instance-attribute #

Include declarations in the results.

GanacheConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class GanacheConfig(WakeConfigModel):
    cmd_args: str = "-k istanbul -q"
    """
    Command line arguments to pass to `ganache`.
    """

cmd_args: str = '-k istanbul -q' class-attribute instance-attribute #

Command line arguments to pass to ganache.

GeneralConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class GeneralConfig(WakeConfigModel):
    call_trace_options: FrozenSet[str] = frozenset(
        [
            "contract_name",
            "function_name",
            "named_arguments",
            "status",
            "call_type",
            "value",
            "return_value",
            "error",
        ]
    )
    """
    Options to include in call traces.
    """
    json_rpc_timeout: float = 15
    """
    Timeout applied to JSON-RPC requests.
    """
    link_format: str = "vscode://file/{path}:{line}:{col}"
    """
    Format of links used in detectors and printers.
    """

call_trace_options: FrozenSet[str] = frozenset(['contract_name', 'function_name', 'named_arguments', 'status', 'call_type', 'value', 'return_value', 'error']) class-attribute instance-attribute #

Options to include in call traces.

json_rpc_timeout: float = 15 class-attribute instance-attribute #

Timeout applied to JSON-RPC requests.

Format of links used in detectors and printers.

GeneratorConfig class #

Bases: WakeConfigModel

Unstable, may change in the future.

Source code in wake/config/data_model.py
class GeneratorConfig(WakeConfigModel):
    """
    Unstable, may change in the future.
    """

    control_flow_graph: ControlFlowGraphConfig = Field(
        default_factory=ControlFlowGraphConfig
    )
    imports_graph: ImportsGraphConfig = Field(default_factory=ImportsGraphConfig)
    inheritance_graph: InheritanceGraphConfig = Field(
        default_factory=InheritanceGraphConfig
    )
    inheritance_graph_full: InheritanceGraphConfig = Field(
        default_factory=InheritanceGraphConfig
    )
    linearized_inheritance_graph: LinearizedInheritanceGraphConfig = Field(
        default_factory=LinearizedInheritanceGraphConfig
    )

control_flow_graph: ControlFlowGraphConfig = Field(default_factory=ControlFlowGraphConfig) class-attribute instance-attribute #

imports_graph: ImportsGraphConfig = Field(default_factory=ImportsGraphConfig) class-attribute instance-attribute #

inheritance_graph: InheritanceGraphConfig = Field(default_factory=InheritanceGraphConfig) class-attribute instance-attribute #

inheritance_graph_full: InheritanceGraphConfig = Field(default_factory=InheritanceGraphConfig) class-attribute instance-attribute #

linearized_inheritance_graph: LinearizedInheritanceGraphConfig = Field(default_factory=LinearizedInheritanceGraphConfig) class-attribute instance-attribute #

GraphsDirection class #

Bases: StrEnum

Source code in wake/config/data_model.py
class GraphsDirection(StrEnum):
    TopBottom = "TB"
    BottomTop = "BT"
    LeftRight = "LR"
    RightLeft = "RL"

BottomTop = 'BT' class-attribute instance-attribute #

LeftRight = 'LR' class-attribute instance-attribute #

RightLeft = 'RL' class-attribute instance-attribute #

TopBottom = 'TB' class-attribute instance-attribute #

HardhatConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class HardhatConfig(WakeConfigModel):
    cmd_args: str = ""
    """
    Command line arguments to pass to `npx hardhat node`.
    """

cmd_args: str = '' class-attribute instance-attribute #

Command line arguments to pass to npx hardhat node.

ImportsDirection class #

Bases: StrEnum

Source code in wake/config/data_model.py
class ImportsDirection(StrEnum):
    ImportedToImporting = "imported-to-importing"
    ImportingToImported = "importing-to-imported"

ImportedToImporting = 'imported-to-importing' class-attribute instance-attribute #

ImportingToImported = 'importing-to-imported' class-attribute instance-attribute #

ImportsGraphConfig class #

Bases: WakeConfigModel

Unstable, may change in the future.

Source code in wake/config/data_model.py
class ImportsGraphConfig(WakeConfigModel):
    """
    Unstable, may change in the future.
    """

    direction: GraphsDirection = GraphsDirection.TopBottom
    imports_direction: ImportsDirection = ImportsDirection.ImportedToImporting
    vscode_urls: bool = True

direction: GraphsDirection = GraphsDirection.TopBottom class-attribute instance-attribute #

imports_direction: ImportsDirection = ImportsDirection.ImportedToImporting class-attribute instance-attribute #

vscode_urls: bool = True class-attribute instance-attribute #

InheritanceGraphConfig class #

Bases: WakeConfigModel

Unstable, may change in the future.

Source code in wake/config/data_model.py
class InheritanceGraphConfig(WakeConfigModel):
    """
    Unstable, may change in the future.
    """

    direction: GraphsDirection = GraphsDirection.BottomTop
    vscode_urls: bool = True

direction: GraphsDirection = GraphsDirection.BottomTop class-attribute instance-attribute #

vscode_urls: bool = True class-attribute instance-attribute #

LinearizedInheritanceGraphConfig class #

Bases: WakeConfigModel

Unstable, may change in the future.

Source code in wake/config/data_model.py
class LinearizedInheritanceGraphConfig(WakeConfigModel):
    """
    Unstable, may change in the future.
    """

    direction: GraphsDirection = GraphsDirection.LeftRight
    vscode_urls: bool = True

direction: GraphsDirection = GraphsDirection.LeftRight class-attribute instance-attribute #

vscode_urls: bool = True class-attribute instance-attribute #

LspConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class LspConfig(WakeConfigModel):
    compilation_delay: float = 0
    """
    Delay to wait after a file content change before recompiling.
    """
    code_lens: CodeLensConfig = Field(default_factory=CodeLensConfig)
    """
    Code lens config options.
    """
    detectors: DetectorsLspConfig = Field(default_factory=DetectorsLspConfig)
    """
    Detectors config options specific to LSP.
    """
    find_references: FindReferencesConfig = Field(default_factory=FindReferencesConfig)
    """
    Find references config options.
    """

code_lens: CodeLensConfig = Field(default_factory=CodeLensConfig) class-attribute instance-attribute #

Code lens config options.

compilation_delay: float = 0 class-attribute instance-attribute #

Delay to wait after a file content change before recompiling.

detectors: DetectorsLspConfig = Field(default_factory=DetectorsLspConfig) class-attribute instance-attribute #

Detectors config options specific to LSP.

find_references: FindReferencesConfig = Field(default_factory=FindReferencesConfig) class-attribute instance-attribute #

Find references config options.

PrinterConfig class #

Bases: WakeConfigModel

Namespace for printer-specific config options. Each attribute should be named after the printer name and hold a dictionary with string keys matching the Click option names.

Source code in wake/config/data_model.py
class PrinterConfig(WakeConfigModel, extra=Extra.allow):
    """
    Namespace for printer-specific config options.
    Each attribute should be named after the printer name and hold a dictionary with string keys matching the Click option names.
    """

PrintersConfig class #

Bases: WakeConfigModel

Holds general printer config options for all printers. Currently unused.

Source code in wake/config/data_model.py
class PrintersConfig(WakeConfigModel):
    """
    Holds general printer config options for all printers.
    Currently unused.
    """

SolcConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class SolcConfig(WakeConfigModel):
    allow_paths: FrozenSet[Path] = frozenset()
    """Wake should set solc `--allow-paths` automatically. This option allows to specify additional allowed paths."""
    evm_version: Optional[EvmVersionEnum] = None
    """Version of the EVM to compile for. Leave unset to let the solc decide."""
    exclude_paths: FrozenSet[Path] = Field(
        default_factory=lambda: frozenset(
            [
                Path.cwd() / "node_modules",
                Path.cwd() / "venv",
                Path.cwd() / ".venv",
                Path.cwd() / "lib",
                Path.cwd() / "script",
                Path.cwd() / "test",
            ]
        )
    )
    """
    Solidity files in these paths are excluded from compilation unless imported from a non-excluded file.
    """
    include_paths: FrozenSet[Path] = Field(
        default_factory=lambda: frozenset([Path.cwd() / "node_modules"])
    )
    """
    Paths where to search for Solidity files imported using direct (non-relative) import paths.
    """
    optimizer: SolcOptimizerConfig = Field(default_factory=SolcOptimizerConfig)
    """
    Optimizer config options.
    """
    remappings: List[SolcRemapping] = []
    """
    Remappings to apply during compilation.
    """
    target_version: Optional[SolidityVersion] = None
    """
    Target Solidity version to use for all files during compilation.
    """
    via_IR: Optional[bool] = None
    """
    Use new IR-based compiler pipeline.
    """

    @validator("allow_paths", pre=True, each_item=True)
    def set_allow_path(cls, v):
        return Path(v).resolve()

    @validator("exclude_paths", pre=True, each_item=True)
    def set_exclude_paths(cls, v):
        return Path(v).resolve()

    @validator("include_paths", pre=True, each_item=True)
    def set_include_path(cls, v):
        return Path(v).resolve()

    @validator("remappings", pre=True, each_item=True)
    def set_remapping(cls, v):
        if isinstance(v, SolcRemapping):
            return v
        remapping_re = re.compile(
            r"(?:(?P<context>[^:\s]+)?:)?(?P<prefix>[^\s=]+)=(?P<target>[^\s]+)?"
        )
        match = remapping_re.match(v)
        assert match, f"`{v}` is not a valid solc remapping."

        groupdict = match.groupdict()
        context = groupdict["context"]
        prefix = groupdict["prefix"]
        target = groupdict["target"]
        return SolcRemapping(context=context, prefix=prefix, target=target)

allow_paths: FrozenSet[Path] = frozenset() class-attribute instance-attribute #

Wake should set solc --allow-paths automatically. This option allows to specify additional allowed paths.

evm_version: Optional[EvmVersionEnum] = None class-attribute instance-attribute #

Version of the EVM to compile for. Leave unset to let the solc decide.

exclude_paths: FrozenSet[Path] = Field(default_factory=lambda : frozenset([Path.cwd() / 'node_modules', Path.cwd() / 'venv', Path.cwd() / '.venv', Path.cwd() / 'lib', Path.cwd() / 'script', Path.cwd() / 'test'])) class-attribute instance-attribute #

Solidity files in these paths are excluded from compilation unless imported from a non-excluded file.

include_paths: FrozenSet[Path] = Field(default_factory=lambda : frozenset([Path.cwd() / 'node_modules'])) class-attribute instance-attribute #

Paths where to search for Solidity files imported using direct (non-relative) import paths.

optimizer: SolcOptimizerConfig = Field(default_factory=SolcOptimizerConfig) class-attribute instance-attribute #

Optimizer config options.

remappings: List[SolcRemapping] = [] class-attribute instance-attribute #

Remappings to apply during compilation.

target_version: Optional[SolidityVersion] = None class-attribute instance-attribute #

Target Solidity version to use for all files during compilation.

via_IR: Optional[bool] = None class-attribute instance-attribute #

Use new IR-based compiler pipeline.

set_allow_path(v) #

Source code in wake/config/data_model.py
@validator("allow_paths", pre=True, each_item=True)
def set_allow_path(cls, v):
    return Path(v).resolve()

set_exclude_paths(v) #

Source code in wake/config/data_model.py
@validator("exclude_paths", pre=True, each_item=True)
def set_exclude_paths(cls, v):
    return Path(v).resolve()

set_include_path(v) #

Source code in wake/config/data_model.py
@validator("include_paths", pre=True, each_item=True)
def set_include_path(cls, v):
    return Path(v).resolve()

set_remapping(v) #

Source code in wake/config/data_model.py
@validator("remappings", pre=True, each_item=True)
def set_remapping(cls, v):
    if isinstance(v, SolcRemapping):
        return v
    remapping_re = re.compile(
        r"(?:(?P<context>[^:\s]+)?:)?(?P<prefix>[^\s=]+)=(?P<target>[^\s]+)?"
    )
    match = remapping_re.match(v)
    assert match, f"`{v}` is not a valid solc remapping."

    groupdict = match.groupdict()
    context = groupdict["context"]
    prefix = groupdict["prefix"]
    target = groupdict["target"]
    return SolcRemapping(context=context, prefix=prefix, target=target)

SolcOptimizerConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class SolcOptimizerConfig(WakeConfigModel):
    enabled: Optional[bool] = None
    runs: int = 200
    details: SolcOptimizerDetailsConfig = Field(
        default_factory=SolcOptimizerDetailsConfig
    )

details: SolcOptimizerDetailsConfig = Field(default_factory=SolcOptimizerDetailsConfig) class-attribute instance-attribute #

enabled: Optional[bool] = None class-attribute instance-attribute #

runs: int = 200 class-attribute instance-attribute #

SolcOptimizerDetailsConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class SolcOptimizerDetailsConfig(WakeConfigModel):
    peephole: Optional[bool] = None
    inliner: Optional[bool] = None
    jumpdest_remover: Optional[bool] = None
    order_literals: Optional[bool] = None
    deduplicate: Optional[bool] = None
    cse: Optional[bool] = None
    constant_optimizer: Optional[bool] = None
    simple_counter_for_loop_unchecked_increment: Optional[bool] = None
    # no need to add yul option here, since it applies only to solc < 0.6.0
    yul_details: SolcOptimizerYulDetailsConfig = Field(
        default_factory=SolcOptimizerYulDetailsConfig
    )

constant_optimizer: Optional[bool] = None class-attribute instance-attribute #

cse: Optional[bool] = None class-attribute instance-attribute #

deduplicate: Optional[bool] = None class-attribute instance-attribute #

inliner: Optional[bool] = None class-attribute instance-attribute #

jumpdest_remover: Optional[bool] = None class-attribute instance-attribute #

order_literals: Optional[bool] = None class-attribute instance-attribute #

peephole: Optional[bool] = None class-attribute instance-attribute #

simple_counter_for_loop_unchecked_increment: Optional[bool] = None class-attribute instance-attribute #

yul_details: SolcOptimizerYulDetailsConfig = Field(default_factory=SolcOptimizerYulDetailsConfig) class-attribute instance-attribute #

SolcOptimizerYulDetailsConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class SolcOptimizerYulDetailsConfig(WakeConfigModel):
    stack_allocation: Optional[bool] = None
    optimizer_steps: Optional[str] = None

optimizer_steps: Optional[str] = None class-attribute instance-attribute #

stack_allocation: Optional[bool] = None class-attribute instance-attribute #

SolcRemapping class #

Source code in wake/config/data_model.py
@dataclass
class SolcRemapping:
    context: Optional[str]
    prefix: str
    target: Optional[str]

    def __iter__(self):
        return iter(astuple(self))

    def __str__(self):
        if self.context is None:
            return f"{self.prefix}={self.target or ''}"
        else:
            return f"{self.context}:{self.prefix}={self.target or ''}"

context: Optional[str] instance-attribute #

prefix: str instance-attribute #

target: Optional[str] instance-attribute #

__iter__() #

Source code in wake/config/data_model.py
def __iter__(self):
    return iter(astuple(self))

TestingConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class TestingConfig(WakeConfigModel):
    cmd: str = "anvil"
    """
    Which development chain to use for testing. Should be one of `anvil`, `ganache` or `hardhat`.
    """
    anvil: AnvilConfig = Field(default_factory=AnvilConfig)
    """
    Anvil-specific config options.
    """
    ganache: GanacheConfig = Field(default_factory=GanacheConfig)
    """
    Ganache-specific config options.
    """
    hardhat: HardhatConfig = Field(default_factory=HardhatConfig)
    """
    Hardhat-specific config options.
    """

anvil: AnvilConfig = Field(default_factory=AnvilConfig) class-attribute instance-attribute #

Anvil-specific config options.

cmd: str = 'anvil' class-attribute instance-attribute #

Which development chain to use for testing. Should be one of anvil, ganache or hardhat.

ganache: GanacheConfig = Field(default_factory=GanacheConfig) class-attribute instance-attribute #

Ganache-specific config options.

hardhat: HardhatConfig = Field(default_factory=HardhatConfig) class-attribute instance-attribute #

Hardhat-specific config options.

TopLevelConfig class #

Bases: WakeConfigModel

Source code in wake/config/data_model.py
class TopLevelConfig(WakeConfigModel):
    subconfigs: List[Path] = []
    api_keys: Dict[str, str] = {}
    compiler: CompilerConfig = Field(default_factory=CompilerConfig)
    detectors: DetectorsConfig = Field(default_factory=DetectorsConfig)
    detector: DetectorConfig = Field(default_factory=DetectorConfig)
    generator: GeneratorConfig = Field(default_factory=GeneratorConfig)
    lsp: LspConfig = Field(default_factory=LspConfig)
    testing: TestingConfig = Field(default_factory=TestingConfig)
    deployment: DeploymentConfig = Field(default_factory=DeploymentConfig)
    printers: PrintersConfig = Field(default_factory=PrintersConfig)
    printer: PrinterConfig = Field(default_factory=PrinterConfig)
    general: GeneralConfig = Field(default_factory=GeneralConfig)

    @validator("subconfigs", pre=True, each_item=True)
    def set_subconfig(cls, v):
        return Path(v).resolve()

api_keys: Dict[str, str] = {} class-attribute instance-attribute #

compiler: CompilerConfig = Field(default_factory=CompilerConfig) class-attribute instance-attribute #

deployment: DeploymentConfig = Field(default_factory=DeploymentConfig) class-attribute instance-attribute #

detector: DetectorConfig = Field(default_factory=DetectorConfig) class-attribute instance-attribute #

detectors: DetectorsConfig = Field(default_factory=DetectorsConfig) class-attribute instance-attribute #

general: GeneralConfig = Field(default_factory=GeneralConfig) class-attribute instance-attribute #

generator: GeneratorConfig = Field(default_factory=GeneratorConfig) class-attribute instance-attribute #

lsp: LspConfig = Field(default_factory=LspConfig) class-attribute instance-attribute #

printer: PrinterConfig = Field(default_factory=PrinterConfig) class-attribute instance-attribute #

printers: PrintersConfig = Field(default_factory=PrintersConfig) class-attribute instance-attribute #

subconfigs: List[Path] = [] class-attribute instance-attribute #

testing: TestingConfig = Field(default_factory=TestingConfig) class-attribute instance-attribute #

set_subconfig(v) #

Source code in wake/config/data_model.py
@validator("subconfigs", pre=True, each_item=True)
def set_subconfig(cls, v):
    return Path(v).resolve()

WakeConfigModel class #

Bases: BaseModel

Source code in wake/config/data_model.py
class WakeConfigModel(BaseModel):
    class Config:
        allow_mutation = False
        json_encoders = {
            SolidityVersion: str,
        }
        extra = Extra.forbid

Config class #

Source code in wake/config/data_model.py
class Config:
    allow_mutation = False
    json_encoders = {
        SolidityVersion: str,
    }
    extra = Extra.forbid

allow_mutation = False class-attribute instance-attribute #

extra = Extra.forbid class-attribute instance-attribute #

json_encoders = {SolidityVersion: str} class-attribute instance-attribute #