From bf0b3584578f13e378eae19ec7c07b81f8d700f1 Mon Sep 17 00:00:00 2001 From: Artur Michalek Date: Fri, 7 Nov 2025 12:21:06 +0100 Subject: [PATCH] Make oracles support not experimental Closes #3732 commit-id:cf38af52 # Conflicts: # CHANGELOG.md --- CHANGELOG.md | 5 +++++ .../runtime_extensions/forge_runtime_extension/mod.rs | 10 ---------- crates/forge-runner/src/forge_config.rs | 3 --- crates/forge-runner/src/running.rs | 1 - crates/forge/src/combine_configs.rs | 10 ---------- crates/forge/src/lib.rs | 4 ---- crates/forge/src/run_tests/package.rs | 1 - crates/forge/tests/e2e/oracles.rs | 1 - crates/forge/tests/integration/setup_fork.rs | 2 -- crates/forge/tests/utils/running_tests.rs | 1 - docs/src/appendix/snforge/test.md | 4 ---- docs/src/snforge-advanced-features/oracles.md | 4 ++-- 12 files changed, 7 insertions(+), 39 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93fe4cbdd4..30a1abc0f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `--gas-report` flag to display a table of L2 gas breakdown for each contract and selector +#### Changed + +- Oracles are fully supported for Scarb versions >= 2.13.1. Bugs related to oracles' output handling have been fixed. + Removed the `--experimental-oracles` flag.` + ## [0.52.0] - 2025-11-05 ### Forge diff --git a/crates/cheatnet/src/runtime_extensions/forge_runtime_extension/mod.rs b/crates/cheatnet/src/runtime_extensions/forge_runtime_extension/mod.rs index 94c01942b4..be4b24ea60 100644 --- a/crates/cheatnet/src/runtime_extensions/forge_runtime_extension/mod.rs +++ b/crates/cheatnet/src/runtime_extensions/forge_runtime_extension/mod.rs @@ -65,8 +65,6 @@ pub struct ForgeExtension<'a> { pub environment_variables: &'a HashMap, pub contracts_data: &'a ContractsData, pub fuzzer_rng: Option>>, - /// Whether `--experimental-oracles` flag has been enabled. - pub experimental_oracles_enabled: bool, pub oracle_hint_service: OracleHintService, } @@ -87,14 +85,6 @@ impl<'a> ExtensionLogic for ForgeExtension<'a> { .oracle_hint_service .accept_cheatcode(selector.as_bytes()) { - if !self.experimental_oracles_enabled { - return Err(anyhow!( - "Oracles are an experimental feature. \ - To enable them, pass `--experimental-oracles` CLI flag." - ) - .into()); - } - let output = self .oracle_hint_service .execute_cheatcode(oracle_selector, input_reader.into_remaining()); diff --git a/crates/forge-runner/src/forge_config.rs b/crates/forge-runner/src/forge_config.rs index 8553659c50..97a1df5ef1 100644 --- a/crates/forge-runner/src/forge_config.rs +++ b/crates/forge-runner/src/forge_config.rs @@ -26,7 +26,6 @@ pub struct TestRunnerConfig { pub contracts_data: ContractsData, pub environment_variables: HashMap, pub tracked_resource: ForgeTrackedResource, - pub experimental_oracles: bool, } #[derive(Debug, PartialEq)] @@ -91,7 +90,6 @@ pub struct RuntimeConfig<'a> { pub contracts_data: &'a ContractsData, pub environment_variables: &'a HashMap, pub tracked_resource: &'a ForgeTrackedResource, - pub experimental_oracles: bool, } impl<'a> RuntimeConfig<'a> { @@ -104,7 +102,6 @@ impl<'a> RuntimeConfig<'a> { contracts_data: &value.contracts_data, environment_variables: &value.environment_variables, tracked_resource: &value.tracked_resource, - experimental_oracles: value.experimental_oracles, } } } diff --git a/crates/forge-runner/src/running.rs b/crates/forge-runner/src/running.rs index ede702ba1b..bb26b58221 100644 --- a/crates/forge-runner/src/running.rs +++ b/crates/forge-runner/src/running.rs @@ -238,7 +238,6 @@ pub fn run_test_case( environment_variables: runtime_config.environment_variables, contracts_data: runtime_config.contracts_data, fuzzer_rng, - experimental_oracles_enabled: runtime_config.experimental_oracles, oracle_hint_service: OracleHintService::new(Some(versioned_program_path.as_std_path())), }; diff --git a/crates/forge/src/combine_configs.rs b/crates/forge/src/combine_configs.rs index ff5518e6aa..b1c79bb6fd 100644 --- a/crates/forge/src/combine_configs.rs +++ b/crates/forge/src/combine_configs.rs @@ -29,7 +29,6 @@ pub fn combine_configs( forge_config_from_scarb: &ForgeConfigFromScarb, additional_args: &[OsString], trace_args: TraceArgs, - experimental_oracles: bool, ) -> ForgeConfig { let execution_data_to_save = ExecutionDataToSave::from_flags( save_trace_data || forge_config_from_scarb.save_trace_data, @@ -53,7 +52,6 @@ pub fn combine_configs( contracts_data, tracked_resource, environment_variables: env::vars().collect(), - experimental_oracles, }), output_config: Arc::new(OutputConfig { trace_args, @@ -86,7 +84,6 @@ mod tests { &ForgeConfigFromScarb::default(), &[], TraceArgs::default(), - false, ); let config2 = combine_configs( false, @@ -104,7 +101,6 @@ mod tests { &ForgeConfigFromScarb::default(), &[], TraceArgs::default(), - false, ); assert_ne!(config.test_runner_config.fuzzer_seed, 0); @@ -133,7 +129,6 @@ mod tests { &ForgeConfigFromScarb::default(), &[], TraceArgs::default(), - false, ); assert_eq!( config, @@ -148,7 +143,6 @@ mod tests { cache_dir: Utf8PathBuf::default(), contracts_data: ContractsData::default(), environment_variables: config.test_runner_config.environment_variables.clone(), - experimental_oracles: false, }), output_config: Arc::new(OutputConfig { detailed_resources: false, @@ -192,7 +186,6 @@ mod tests { &config_from_scarb, &[], TraceArgs::default(), - false, ); assert_eq!( config, @@ -207,7 +200,6 @@ mod tests { cache_dir: Utf8PathBuf::default(), contracts_data: ContractsData::default(), environment_variables: config.test_runner_config.environment_variables.clone(), - experimental_oracles: false, }), output_config: Arc::new(OutputConfig { detailed_resources: true, @@ -255,7 +247,6 @@ mod tests { &config_from_scarb, &[], TraceArgs::default(), - false, ); assert_eq!( @@ -271,7 +262,6 @@ mod tests { cache_dir: Utf8PathBuf::default(), contracts_data: ContractsData::default(), environment_variables: config.test_runner_config.environment_variables.clone(), - experimental_oracles: false, }), output_config: Arc::new(OutputConfig { detailed_resources: true, diff --git a/crates/forge/src/lib.rs b/crates/forge/src/lib.rs index a6752018cc..d6adb0b39c 100644 --- a/crates/forge/src/lib.rs +++ b/crates/forge/src/lib.rs @@ -221,10 +221,6 @@ pub struct TestArgs { #[arg(last = true)] additional_args: Vec, - /// Enable experimental oracles support. - #[arg(long, default_value_t = false, env = "SNFORGE_EXPERIMENTAL_ORACLES")] - experimental_oracles: bool, - #[command(flatten)] scarb_args: ScarbArgs, } diff --git a/crates/forge/src/run_tests/package.rs b/crates/forge/src/run_tests/package.rs index bf23495cb0..11dee02c1c 100644 --- a/crates/forge/src/run_tests/package.rs +++ b/crates/forge/src/run_tests/package.rs @@ -110,7 +110,6 @@ impl RunForPackageArgs { &forge_config_from_scarb, &args.additional_args, args.trace_args.clone(), - args.experimental_oracles, )); let test_filter = TestsFilter::from_flags( diff --git a/crates/forge/tests/e2e/oracles.rs b/crates/forge/tests/e2e/oracles.rs index c8dc88c9c0..a254346cbc 100644 --- a/crates/forge/tests/e2e/oracles.rs +++ b/crates/forge/tests/e2e/oracles.rs @@ -18,7 +18,6 @@ fn wasm() { let output = test_runner(&temp) // Output of oracle is different depending on the env, and Intellij sets it automatically .env_remove("RUST_BACKTRACE") - .arg("--experimental-oracles") .assert() .code(1); diff --git a/crates/forge/tests/integration/setup_fork.rs b/crates/forge/tests/integration/setup_fork.rs index 43d628415b..3b98111fa3 100644 --- a/crates/forge/tests/integration/setup_fork.rs +++ b/crates/forge/tests/integration/setup_fork.rs @@ -157,7 +157,6 @@ fn fork_aliased_decorator() { .unwrap(), tracked_resource: ForgeTrackedResource::CairoSteps, environment_variables: test.env().clone(), - experimental_oracles: false, }), output_config: Arc::new(OutputConfig { detailed_resources: false, @@ -248,7 +247,6 @@ fn fork_aliased_decorator_overrding() { .unwrap(), tracked_resource: ForgeTrackedResource::CairoSteps, environment_variables: test.env().clone(), - experimental_oracles: false, }), output_config: Arc::new(OutputConfig { detailed_resources: false, diff --git a/crates/forge/tests/utils/running_tests.rs b/crates/forge/tests/utils/running_tests.rs index 107e0fe021..b172748f17 100644 --- a/crates/forge/tests/utils/running_tests.rs +++ b/crates/forge/tests/utils/running_tests.rs @@ -73,7 +73,6 @@ pub fn run_test_case( contracts_data: ContractsData::try_from(test.contracts(&ui).unwrap()).unwrap(), tracked_resource, environment_variables: test.env().clone(), - experimental_oracles: false, }), output_config: Arc::new(OutputConfig { detailed_resources: false, diff --git a/docs/src/appendix/snforge/test.md b/docs/src/appendix/snforge/test.md index f490f25c41..c155617e3b 100644 --- a/docs/src/appendix/snforge/test.md +++ b/docs/src/appendix/snforge/test.md @@ -142,10 +142,6 @@ Use Scarb release profile. ## `--dev` Use Scarb dev profile. -## `--experimental-oracles` - -Enable experimental [oracles](../../snforge-advanced-features/oracles.md) support. - ## `-h`, `--help` Print help. diff --git a/docs/src/snforge-advanced-features/oracles.md b/docs/src/snforge-advanced-features/oracles.md index 7c96741f5f..c666dd0f1e 100644 --- a/docs/src/snforge-advanced-features/oracles.md +++ b/docs/src/snforge-advanced-features/oracles.md @@ -2,8 +2,8 @@ > ⚠️ **Warning** > -> Oracles are an experimental feature. -> To enable them, you must pass the `--experimental-oracles` flag to `snforge`. +> Oracles are fully supported starting from Scarb 2.13.1. +> Using oracles in Starknet Foundry with older versions of Scarb is not supported and may result in unexpected behavior. An [oracle][oracle docs] is an external process (like a script, binary, or web service) that exposes custom logic or data to a Cairo program at runtime. You use it to perform tasks the Cairo VM can't, such as