foundry_config/
vyper.rs

1//! Vyper specific configuration types.
2
3use foundry_compilers::artifacts::{vyper::VyperOptimizationMode, EvmVersion};
4use serde::{Deserialize, Serialize};
5use std::path::PathBuf;
6
7#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
8pub struct VyperConfig {
9    /// Vyper optimization mode. "gas", "none" or "codesize"
10    #[serde(default, skip_serializing_if = "Option::is_none")]
11    pub optimize: Option<VyperOptimizationMode>,
12    /// The Vyper instance to use if any.
13    #[serde(default, skip_serializing_if = "Option::is_none")]
14    pub path: Option<PathBuf>,
15    /// Optionally enables experimental Venom pipeline
16    #[serde(default, skip_serializing_if = "Option::is_none")]
17    pub experimental_codegen: Option<bool>,
18}
19
20/// Vyper does not yet support the Prague EVM version, so we normalize it to Cancun.
21/// This is a temporary workaround until Vyper supports Prague.
22pub fn normalize_evm_version_vyper(evm_version: EvmVersion) -> EvmVersion {
23    if evm_version >= EvmVersion::Prague {
24        return EvmVersion::Cancun;
25    }
26
27    evm_version
28}