From ae6e1b06ecc8a0df5ec671c76eaac2212b89be78 Mon Sep 17 00:00:00 2001 From: Mihai Calin Luca Date: Mon, 24 Mar 2025 17:58:33 +0100 Subject: [PATCH 1/5] setup --- .../src/contract/sc_config/contract_variant_builder.rs | 4 ++++ framework/meta-lib/src/contract/sc_config/sc_config_model.rs | 1 + framework/meta-lib/src/contract/sc_config/sc_config_serde.rs | 2 ++ framework/meta-lib/tests/multi_contract_test.rs | 3 ++- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/framework/meta-lib/src/contract/sc_config/contract_variant_builder.rs b/framework/meta-lib/src/contract/sc_config/contract_variant_builder.rs index 43fb7b1a36..802dd3fcf6 100644 --- a/framework/meta-lib/src/contract/sc_config/contract_variant_builder.rs +++ b/framework/meta-lib/src/contract/sc_config/contract_variant_builder.rs @@ -315,6 +315,7 @@ impl ScConfig { path: &Path, config: &ScConfigSerde, original_abi: &ContractAbi, + std: bool, ) -> Self { if config.settings.main.is_some() { print_sc_config_main_deprecated(path); @@ -323,6 +324,7 @@ impl ScConfig { ScConfig { contracts: process_contracts(config, original_abi), proxy_configs: process_proxy_contracts(config, original_abi), + std, } } } @@ -368,6 +370,7 @@ impl ScConfig { abi: original_abi.clone(), }], proxy_configs: Vec::new(), + std: false, } } @@ -381,6 +384,7 @@ impl ScConfig { path.as_ref(), &config_serde, original_abi, + config_serde.std, )) }, Err(_) => None, diff --git a/framework/meta-lib/src/contract/sc_config/sc_config_model.rs b/framework/meta-lib/src/contract/sc_config/sc_config_model.rs index 1a7ccbff03..1a7283de55 100644 --- a/framework/meta-lib/src/contract/sc_config/sc_config_model.rs +++ b/framework/meta-lib/src/contract/sc_config/sc_config_model.rs @@ -18,6 +18,7 @@ pub const SC_CONFIG_FILE_NAMES: &[&str] = &["sc-config.toml", "multicontract.tom pub struct ScConfig { pub contracts: Vec, pub proxy_configs: Vec, + pub std: bool, } impl ScConfig { diff --git a/framework/meta-lib/src/contract/sc_config/sc_config_serde.rs b/framework/meta-lib/src/contract/sc_config/sc_config_serde.rs index 3a25812fbf..6bbbaa5e7d 100644 --- a/framework/meta-lib/src/contract/sc_config/sc_config_serde.rs +++ b/framework/meta-lib/src/contract/sc_config/sc_config_serde.rs @@ -15,6 +15,8 @@ pub struct ScConfigSerde { #[serde(default)] #[serde(rename = "labels-for-contracts")] pub labels_for_contracts: HashMap>, + #[serde(default)] + pub std: bool, } #[derive(Deserialize, Debug)] diff --git a/framework/meta-lib/tests/multi_contract_test.rs b/framework/meta-lib/tests/multi_contract_test.rs index 78e93435cc..37ec0854f8 100644 --- a/framework/meta-lib/tests/multi_contract_test.rs +++ b/framework/meta-lib/tests/multi_contract_test.rs @@ -92,7 +92,8 @@ fn test_sc_config() { let serde = get_serialized_toml(); let abi = get_contract_abi(); - let contract_config = ScConfig::load_from_config(PathBuf::default().as_path(), &serde, &abi); + let contract_config = + ScConfig::load_from_config(PathBuf::default().as_path(), &serde, &abi, false); assert_eq!(contract_config.contracts.len(), 2); assert!(contract_config From a7ce1b97a7d25cf362d3718e1aefa4dd6492b92d Mon Sep 17 00:00:00 2001 From: Mihai Calin Luca Date: Mon, 24 Mar 2025 18:50:54 +0100 Subject: [PATCH 2/5] generate with regards to std setting --- .../meta-lib/src/contract/meta_config.rs | 2 +- .../src/contract/sc_config/wasm_crate_gen.rs | 52 ++++++++++++------- 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/framework/meta-lib/src/contract/meta_config.rs b/framework/meta-lib/src/contract/meta_config.rs index 9f0bac7b32..8cff2b29fc 100644 --- a/framework/meta-lib/src/contract/meta_config.rs +++ b/framework/meta-lib/src/contract/meta_config.rs @@ -92,7 +92,7 @@ impl MetaConfig { impl MetaConfig { fn generate_wasm_src_lib(&self) { for contract_variant in &self.sc_config.contracts { - contract_variant.generate_wasm_src_lib_file(); + contract_variant.generate_wasm_src_lib_file(self.sc_config.std); } } diff --git a/framework/meta-lib/src/contract/sc_config/wasm_crate_gen.rs b/framework/meta-lib/src/contract/sc_config/wasm_crate_gen.rs index 7f5c54b5eb..b691e9b589 100644 --- a/framework/meta-lib/src/contract/sc_config/wasm_crate_gen.rs +++ b/framework/meta-lib/src/contract/sc_config/wasm_crate_gen.rs @@ -55,12 +55,15 @@ impl ContractVariant { ) } - fn panic_handler_macro_invocation(&self) -> &'static str { - if self.settings.panic_message { - "multiversx_sc_wasm_adapter::panic_handler_with_message!();" - } else { - "multiversx_sc_wasm_adapter::panic_handler!();" + fn panic_handler_macro_invocation(&self, std: bool) -> &'static str { + if !std { + if self.settings.panic_message { + return "multiversx_sc_wasm_adapter::panic_handler_with_message!();"; + } else { + return "multiversx_sc_wasm_adapter::panic_handler!();"; + } } + "" } fn endpoint_macro_name(&self) -> &'static str { @@ -72,20 +75,25 @@ impl ContractVariant { } /// Generates the wasm crate lib.rs source, st the given path. - pub fn generate_wasm_src_lib_file(&self) { + pub fn generate_wasm_src_lib_file(&self, std: bool) { let lib_path = Path::new(&self.wasm_crate_path()) .join("src") .join("lib.rs"); let mut wasm_lib_file = File::create(lib_path).unwrap(); - self.write_wasm_src_lib_contents(&mut wasm_lib_file); + self.write_wasm_src_lib_contents(&mut wasm_lib_file, std); } - fn write_wasm_src_lib_contents(&self, wasm_lib_file: &mut File) { + fn write_wasm_src_lib_contents(&self, wasm_lib_file: &mut File, std: bool) { writeln!(wasm_lib_file, "{PREFIX_AUTO_GENERATED}").unwrap(); self.write_stat_comments(wasm_lib_file); - write_prefix(wasm_lib_file); + write_prefix(wasm_lib_file, std); writeln!(wasm_lib_file, "{}", self.allocator_macro_invocation()).unwrap(); - writeln!(wasm_lib_file, "{}", self.panic_handler_macro_invocation()).unwrap(); + writeln!( + wasm_lib_file, + "{}", + self.panic_handler_macro_invocation(std) + ) + .unwrap(); if self.settings.external_view { write_external_view_init(wasm_lib_file); @@ -139,19 +147,23 @@ impl ContractVariant { } } -fn select_features() -> &'static str { - let meta = rustc_version::version_meta().unwrap(); - if meta.semver < Version::from_str(VER_1_71).unwrap() { - FEATURES_PRE_RUSTC_1_71 - } else if meta.semver < Version::from_str(VER_1_73).unwrap() { - FEATURES_PRE_RUSTC_1_73 - } else { - FEATURES_DEFAULT +fn select_features(std: bool) -> &'static str { + if !std { + let meta = rustc_version::version_meta().unwrap(); + + if meta.semver < Version::from_str(VER_1_71).unwrap() { + return FEATURES_PRE_RUSTC_1_71; + } else if meta.semver < Version::from_str(VER_1_73).unwrap() { + return FEATURES_PRE_RUSTC_1_73; + } else { + return FEATURES_DEFAULT; + } } + "" } -fn write_prefix(wasm_lib_file: &mut File) { - writeln!(wasm_lib_file, "{}", select_features()).unwrap(); +fn write_prefix(wasm_lib_file: &mut File, std: bool) { + writeln!(wasm_lib_file, "{}", select_features(std)).unwrap(); } fn write_endpoints_macro<'a, I>( From 5041c319a2fd36b971c5205013b4f4047cf363c0 Mon Sep 17 00:00:00 2001 From: Mihai Calin Luca Date: Mon, 24 Mar 2025 18:52:31 +0100 Subject: [PATCH 3/5] std-contract example --- Cargo.toml | 2 + .../feature-tests/std-contract/.gitignore | 7 ++++ .../feature-tests/std-contract/Cargo.toml | 20 ++++++++++ .../std-contract/meta/Cargo.toml | 13 +++++++ .../std-contract/meta/src/main.rs | 3 ++ .../std-contract/multiversx.json | 3 ++ .../feature-tests/std-contract/sc-config.toml | 1 + .../std-contract/scenarios/empty.scen.json | 39 +++++++++++++++++++ .../feature-tests/std-contract/src/lib.rs | 19 +++++++++ .../tests/empty_scenario_go_test.rs | 10 +++++ .../tests/empty_scenario_rs_test.rs | 17 ++++++++ .../std-contract/wasm/Cargo.toml | 35 +++++++++++++++++ .../std-contract/wasm/src/lib.rs | 24 ++++++++++++ 13 files changed, 193 insertions(+) create mode 100644 contracts/feature-tests/std-contract/.gitignore create mode 100644 contracts/feature-tests/std-contract/Cargo.toml create mode 100644 contracts/feature-tests/std-contract/meta/Cargo.toml create mode 100644 contracts/feature-tests/std-contract/meta/src/main.rs create mode 100644 contracts/feature-tests/std-contract/multiversx.json create mode 100644 contracts/feature-tests/std-contract/sc-config.toml create mode 100644 contracts/feature-tests/std-contract/scenarios/empty.scen.json create mode 100644 contracts/feature-tests/std-contract/src/lib.rs create mode 100644 contracts/feature-tests/std-contract/tests/empty_scenario_go_test.rs create mode 100644 contracts/feature-tests/std-contract/tests/empty_scenario_rs_test.rs create mode 100644 contracts/feature-tests/std-contract/wasm/Cargo.toml create mode 100644 contracts/feature-tests/std-contract/wasm/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index c2033d527d..ba59b30623 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -189,6 +189,8 @@ members = [ "contracts/feature-tests/rust-testing-framework-tester/meta", "contracts/feature-tests/scenario-tester", "contracts/feature-tests/scenario-tester/meta", + "contracts/feature-tests/std-contract", + "contracts/feature-tests/std-contract/meta", "contracts/feature-tests/use-module", "contracts/feature-tests/use-module/meta", ] diff --git a/contracts/feature-tests/std-contract/.gitignore b/contracts/feature-tests/std-contract/.gitignore new file mode 100644 index 0000000000..2c76bc983e --- /dev/null +++ b/contracts/feature-tests/std-contract/.gitignore @@ -0,0 +1,7 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ +*/target/ + +# The mxpy output +/output*/ diff --git a/contracts/feature-tests/std-contract/Cargo.toml b/contracts/feature-tests/std-contract/Cargo.toml new file mode 100644 index 0000000000..0ce0b77f4b --- /dev/null +++ b/contracts/feature-tests/std-contract/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "std-contract" +version = "0.0.0" +authors = ["you"] +edition = "2021" +publish = false + +[lib] +path = "src/lib.rs" + +[dependencies.multiversx-sc] +version = "0.57.0" +path = "../../../framework/base" + +[dev-dependencies.multiversx-sc-scenario] +version = "0.57.0" +path = "../../../framework/scenario" + +[dev-dependencies] +num-bigint = "0.4" diff --git a/contracts/feature-tests/std-contract/meta/Cargo.toml b/contracts/feature-tests/std-contract/meta/Cargo.toml new file mode 100644 index 0000000000..18562afe5c --- /dev/null +++ b/contracts/feature-tests/std-contract/meta/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "std-contract-meta" +version = "0.0.0" +edition = "2021" +publish = false + +[dependencies.std-contract] +path = ".." + +[dependencies.multiversx-sc-meta-lib] +version = "0.57.0" +path = "../../../../framework/meta-lib" +default-features = false diff --git a/contracts/feature-tests/std-contract/meta/src/main.rs b/contracts/feature-tests/std-contract/meta/src/main.rs new file mode 100644 index 0000000000..962cd7dc8f --- /dev/null +++ b/contracts/feature-tests/std-contract/meta/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + multiversx_sc_meta_lib::cli_main::(); +} diff --git a/contracts/feature-tests/std-contract/multiversx.json b/contracts/feature-tests/std-contract/multiversx.json new file mode 100644 index 0000000000..7365539625 --- /dev/null +++ b/contracts/feature-tests/std-contract/multiversx.json @@ -0,0 +1,3 @@ +{ + "language": "rust" +} \ No newline at end of file diff --git a/contracts/feature-tests/std-contract/sc-config.toml b/contracts/feature-tests/std-contract/sc-config.toml new file mode 100644 index 0000000000..477602d935 --- /dev/null +++ b/contracts/feature-tests/std-contract/sc-config.toml @@ -0,0 +1 @@ +std = true \ No newline at end of file diff --git a/contracts/feature-tests/std-contract/scenarios/empty.scen.json b/contracts/feature-tests/std-contract/scenarios/empty.scen.json new file mode 100644 index 0000000000..916d87d8c5 --- /dev/null +++ b/contracts/feature-tests/std-contract/scenarios/empty.scen.json @@ -0,0 +1,39 @@ +{ + "name": "empty", + "steps": [ + { + "step": "setState", + "accounts": { + "address:owner": { + "nonce": "1", + "balance": "0" + } + }, + "newAddresses": [ + { + "creatorAddress": "address:owner", + "creatorNonce": "1", + "newAddress": "sc:empty" + } + ] + }, + { + "step": "scDeploy", + "id": "deploy", + "tx": { + "from": "address:owner", + "contractCode": "mxsc:../output/std-contract.mxsc.json", + "arguments": [], + "gasLimit": "5,000,000", + "gasPrice": "0" + }, + "expect": { + "out": [], + "status": "", + "logs": [], + "gas": "*", + "refund": "*" + } + } + ] +} diff --git a/contracts/feature-tests/std-contract/src/lib.rs b/contracts/feature-tests/std-contract/src/lib.rs new file mode 100644 index 0000000000..207670f3ce --- /dev/null +++ b/contracts/feature-tests/std-contract/src/lib.rs @@ -0,0 +1,19 @@ +use std::sync::Arc; + +#[allow(unused_imports)] +use multiversx_sc::imports::*; + +pub struct Config { + pub settings: Arc>, + pub allowed: bool, +} + +/// An empty contract. To be used as a template when starting a new contract from scratch. +#[multiversx_sc::contract] +pub trait StdContract { + #[init] + fn init(&self) {} + + #[upgrade] + fn upgrade(&self) {} +} diff --git a/contracts/feature-tests/std-contract/tests/empty_scenario_go_test.rs b/contracts/feature-tests/std-contract/tests/empty_scenario_go_test.rs new file mode 100644 index 0000000000..ef0a7f213a --- /dev/null +++ b/contracts/feature-tests/std-contract/tests/empty_scenario_go_test.rs @@ -0,0 +1,10 @@ +use multiversx_sc_scenario::*; + +fn world() -> ScenarioWorld { + ScenarioWorld::vm_go() +} + +#[test] +fn empty_go() { + world().run("scenarios/empty.scen.json"); +} diff --git a/contracts/feature-tests/std-contract/tests/empty_scenario_rs_test.rs b/contracts/feature-tests/std-contract/tests/empty_scenario_rs_test.rs new file mode 100644 index 0000000000..1c82662c90 --- /dev/null +++ b/contracts/feature-tests/std-contract/tests/empty_scenario_rs_test.rs @@ -0,0 +1,17 @@ +use multiversx_sc_scenario::*; + +fn world() -> ScenarioWorld { + let mut blockchain = ScenarioWorld::new(); + + blockchain.set_current_dir_from_workspace("contracts/examples/feature-tests/std-contract"); + blockchain.register_contract( + "mxsc:output/std-contract.mxsc.json", + std_contract::ContractBuilder, + ); + blockchain +} + +#[test] +fn empty_rs() { + world().run("scenarios/empty.scen.json"); +} diff --git a/contracts/feature-tests/std-contract/wasm/Cargo.toml b/contracts/feature-tests/std-contract/wasm/Cargo.toml new file mode 100644 index 0000000000..685e772034 --- /dev/null +++ b/contracts/feature-tests/std-contract/wasm/Cargo.toml @@ -0,0 +1,35 @@ +# Code generated by the multiversx-sc build system. DO NOT EDIT. + +# ########################################## +# ############## AUTO-GENERATED ############# +# ########################################## + +[package] +name = "std-contract-wasm" +version = "0.0.0" +edition = "2021" +publish = false + +[lib] +crate-type = ["cdylib"] + +[profile.release] +codegen-units = 1 +opt-level = "z" +lto = true +debug = false +panic = "abort" +overflow-checks = false + +[profile.dev] +panic = "abort" + +[dependencies.std-contract] +path = ".." + +[dependencies.multiversx-sc-wasm-adapter] +version = "0.57.0" +path = "../../../../framework/wasm-adapter" + +[workspace] +members = ["."] diff --git a/contracts/feature-tests/std-contract/wasm/src/lib.rs b/contracts/feature-tests/std-contract/wasm/src/lib.rs new file mode 100644 index 0000000000..a0dca3121b --- /dev/null +++ b/contracts/feature-tests/std-contract/wasm/src/lib.rs @@ -0,0 +1,24 @@ +// Code generated by the multiversx-sc build system. DO NOT EDIT. + +//////////////////////////////////////////////////// +////////////////// AUTO-GENERATED ////////////////// +//////////////////////////////////////////////////// + +// Init: 1 +// Upgrade: 1 +// Endpoints: 0 +// Async Callback (empty): 1 +// Total number of exported functions: 3 + +multiversx_sc_wasm_adapter::allocator!(); + + +multiversx_sc_wasm_adapter::endpoints! { + std_contract + ( + init => init + upgrade => upgrade + ) +} + +multiversx_sc_wasm_adapter::async_callback_empty! {} From 729245aa22058d3de74fbb9a4e7aaf1149628e3f Mon Sep 17 00:00:00 2001 From: Mihai Calin Luca Date: Tue, 8 Apr 2025 00:52:04 +0200 Subject: [PATCH 4/5] fixes after review --- .../feature-tests/std-contract/sc-config.toml | 3 +- .../meta-lib/src/contract/meta_config.rs | 2 +- .../sc_config/contract_variant_builder.rs | 5 +-- .../sc_config/contract_variant_settings.rs | 4 ++ .../src/contract/sc_config/sc_config_model.rs | 1 - .../src/contract/sc_config/sc_config_serde.rs | 5 ++- .../src/contract/sc_config/wasm_crate_gen.rs | 40 +++++++++---------- .../meta-lib/tests/multi_contract_test.rs | 3 +- 8 files changed, 31 insertions(+), 32 deletions(-) diff --git a/contracts/feature-tests/std-contract/sc-config.toml b/contracts/feature-tests/std-contract/sc-config.toml index 477602d935..91c48f0b8e 100644 --- a/contracts/feature-tests/std-contract/sc-config.toml +++ b/contracts/feature-tests/std-contract/sc-config.toml @@ -1 +1,2 @@ -std = true \ No newline at end of file +[contracts.std-contract] +std = true diff --git a/framework/meta-lib/src/contract/meta_config.rs b/framework/meta-lib/src/contract/meta_config.rs index 8cff2b29fc..9f0bac7b32 100644 --- a/framework/meta-lib/src/contract/meta_config.rs +++ b/framework/meta-lib/src/contract/meta_config.rs @@ -92,7 +92,7 @@ impl MetaConfig { impl MetaConfig { fn generate_wasm_src_lib(&self) { for contract_variant in &self.sc_config.contracts { - contract_variant.generate_wasm_src_lib_file(self.sc_config.std); + contract_variant.generate_wasm_src_lib_file(); } } diff --git a/framework/meta-lib/src/contract/sc_config/contract_variant_builder.rs b/framework/meta-lib/src/contract/sc_config/contract_variant_builder.rs index 802dd3fcf6..659e1d7a2b 100644 --- a/framework/meta-lib/src/contract/sc_config/contract_variant_builder.rs +++ b/framework/meta-lib/src/contract/sc_config/contract_variant_builder.rs @@ -81,6 +81,7 @@ impl ContractVariantBuilder { default_features: cms.default_features, kill_legacy_callback: cms.kill_legacy_callback, profile: ContractVariantProfile::from_serde(&cms.profile), + std: cms.std.unwrap_or(default.settings.std), }, ..default }, @@ -315,7 +316,6 @@ impl ScConfig { path: &Path, config: &ScConfigSerde, original_abi: &ContractAbi, - std: bool, ) -> Self { if config.settings.main.is_some() { print_sc_config_main_deprecated(path); @@ -324,7 +324,6 @@ impl ScConfig { ScConfig { contracts: process_contracts(config, original_abi), proxy_configs: process_proxy_contracts(config, original_abi), - std, } } } @@ -370,7 +369,6 @@ impl ScConfig { abi: original_abi.clone(), }], proxy_configs: Vec::new(), - std: false, } } @@ -384,7 +382,6 @@ impl ScConfig { path.as_ref(), &config_serde, original_abi, - config_serde.std, )) }, Err(_) => None, diff --git a/framework/meta-lib/src/contract/sc_config/contract_variant_settings.rs b/framework/meta-lib/src/contract/sc_config/contract_variant_settings.rs index 660604bd37..3198b0b78c 100644 --- a/framework/meta-lib/src/contract/sc_config/contract_variant_settings.rs +++ b/framework/meta-lib/src/contract/sc_config/contract_variant_settings.rs @@ -36,6 +36,9 @@ pub struct ContractVariantSettings { pub kill_legacy_callback: bool, pub profile: ContractVariantProfile, + + /// Allows the contract to be built with std. + pub std: bool, } impl Default for ContractVariantSettings { @@ -50,6 +53,7 @@ impl Default for ContractVariantSettings { default_features: None, kill_legacy_callback: false, profile: Default::default(), + std: false, } } } diff --git a/framework/meta-lib/src/contract/sc_config/sc_config_model.rs b/framework/meta-lib/src/contract/sc_config/sc_config_model.rs index 1a7283de55..1a7ccbff03 100644 --- a/framework/meta-lib/src/contract/sc_config/sc_config_model.rs +++ b/framework/meta-lib/src/contract/sc_config/sc_config_model.rs @@ -18,7 +18,6 @@ pub const SC_CONFIG_FILE_NAMES: &[&str] = &["sc-config.toml", "multicontract.tom pub struct ScConfig { pub contracts: Vec, pub proxy_configs: Vec, - pub std: bool, } impl ScConfig { diff --git a/framework/meta-lib/src/contract/sc_config/sc_config_serde.rs b/framework/meta-lib/src/contract/sc_config/sc_config_serde.rs index 6bbbaa5e7d..99f4894d18 100644 --- a/framework/meta-lib/src/contract/sc_config/sc_config_serde.rs +++ b/framework/meta-lib/src/contract/sc_config/sc_config_serde.rs @@ -15,8 +15,6 @@ pub struct ScConfigSerde { #[serde(default)] #[serde(rename = "labels-for-contracts")] pub labels_for_contracts: HashMap>, - #[serde(default)] - pub std: bool, } #[derive(Deserialize, Debug)] @@ -66,6 +64,9 @@ pub struct ContractVariantSerde { #[serde(default)] pub profile: Option, + + #[serde(default)] + pub std: Option, } #[derive(Deserialize, Default, Debug)] diff --git a/framework/meta-lib/src/contract/sc_config/wasm_crate_gen.rs b/framework/meta-lib/src/contract/sc_config/wasm_crate_gen.rs index b691e9b589..0f956ef7a1 100644 --- a/framework/meta-lib/src/contract/sc_config/wasm_crate_gen.rs +++ b/framework/meta-lib/src/contract/sc_config/wasm_crate_gen.rs @@ -55,8 +55,8 @@ impl ContractVariant { ) } - fn panic_handler_macro_invocation(&self, std: bool) -> &'static str { - if !std { + fn panic_handler_macro_invocation(&self) -> &'static str { + if !self.settings.std { if self.settings.panic_message { return "multiversx_sc_wasm_adapter::panic_handler_with_message!();"; } else { @@ -75,25 +75,20 @@ impl ContractVariant { } /// Generates the wasm crate lib.rs source, st the given path. - pub fn generate_wasm_src_lib_file(&self, std: bool) { + pub fn generate_wasm_src_lib_file(&self) { let lib_path = Path::new(&self.wasm_crate_path()) .join("src") .join("lib.rs"); let mut wasm_lib_file = File::create(lib_path).unwrap(); - self.write_wasm_src_lib_contents(&mut wasm_lib_file, std); + self.write_wasm_src_lib_contents(&mut wasm_lib_file); } - fn write_wasm_src_lib_contents(&self, wasm_lib_file: &mut File, std: bool) { + fn write_wasm_src_lib_contents(&self, wasm_lib_file: &mut File) { writeln!(wasm_lib_file, "{PREFIX_AUTO_GENERATED}").unwrap(); self.write_stat_comments(wasm_lib_file); - write_prefix(wasm_lib_file, std); + write_prefix(wasm_lib_file, self.select_features()); writeln!(wasm_lib_file, "{}", self.allocator_macro_invocation()).unwrap(); - writeln!( - wasm_lib_file, - "{}", - self.panic_handler_macro_invocation(std) - ) - .unwrap(); + writeln!(wasm_lib_file, "{}", self.panic_handler_macro_invocation()).unwrap(); if self.settings.external_view { write_external_view_init(wasm_lib_file); @@ -145,25 +140,28 @@ impl ContractVariant { write_stat_comment(wasm_lib_file, "Total number of exported functions:", total); } -} -fn select_features(std: bool) -> &'static str { - if !std { + fn select_features(&self) -> &'static str { + if self.settings.std { + return ""; + } + let meta = rustc_version::version_meta().unwrap(); if meta.semver < Version::from_str(VER_1_71).unwrap() { return FEATURES_PRE_RUSTC_1_71; - } else if meta.semver < Version::from_str(VER_1_73).unwrap() { + } + + if meta.semver < Version::from_str(VER_1_73).unwrap() { return FEATURES_PRE_RUSTC_1_73; - } else { - return FEATURES_DEFAULT; } + + FEATURES_DEFAULT } - "" } -fn write_prefix(wasm_lib_file: &mut File, std: bool) { - writeln!(wasm_lib_file, "{}", select_features(std)).unwrap(); +fn write_prefix(wasm_lib_file: &mut File, features: &str) { + writeln!(wasm_lib_file, "{}", features).unwrap(); } fn write_endpoints_macro<'a, I>( diff --git a/framework/meta-lib/tests/multi_contract_test.rs b/framework/meta-lib/tests/multi_contract_test.rs index 37ec0854f8..78e93435cc 100644 --- a/framework/meta-lib/tests/multi_contract_test.rs +++ b/framework/meta-lib/tests/multi_contract_test.rs @@ -92,8 +92,7 @@ fn test_sc_config() { let serde = get_serialized_toml(); let abi = get_contract_abi(); - let contract_config = - ScConfig::load_from_config(PathBuf::default().as_path(), &serde, &abi, false); + let contract_config = ScConfig::load_from_config(PathBuf::default().as_path(), &serde, &abi); assert_eq!(contract_config.contracts.len(), 2); assert!(contract_config From b24b22d0d2fdef8b949b47fb8a7ede5ca0313f23 Mon Sep 17 00:00:00 2001 From: Mihai Calin Luca Date: Tue, 8 Apr 2025 00:55:29 +0200 Subject: [PATCH 5/5] test fix --- .../feature-tests/std-contract/tests/empty_scenario_rs_test.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/feature-tests/std-contract/tests/empty_scenario_rs_test.rs b/contracts/feature-tests/std-contract/tests/empty_scenario_rs_test.rs index 1c82662c90..640820298f 100644 --- a/contracts/feature-tests/std-contract/tests/empty_scenario_rs_test.rs +++ b/contracts/feature-tests/std-contract/tests/empty_scenario_rs_test.rs @@ -3,7 +3,7 @@ use multiversx_sc_scenario::*; fn world() -> ScenarioWorld { let mut blockchain = ScenarioWorld::new(); - blockchain.set_current_dir_from_workspace("contracts/examples/feature-tests/std-contract"); + blockchain.set_current_dir_from_workspace("contracts/feature-tests/std-contract"); blockchain.register_contract( "mxsc:output/std-contract.mxsc.json", std_contract::ContractBuilder,