diff --git a/Cargo.lock b/Cargo.lock index 218009af2..d6242dc30 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -102,7 +102,7 @@ checksum = "a2e1373abdaa212b704512ec2bd8b26bd0b7d5c3f70117411a5d9a451383c859" name = "arguments-passing-test" version = "0.1.0" dependencies = [ - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", "safe-transmute", ] @@ -110,7 +110,7 @@ dependencies = [ name = "arrays-passing-test" version = "0.1.0" dependencies = [ - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", "safe-transmute", ] @@ -122,7 +122,7 @@ checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.49", ] [[package]] @@ -227,10 +227,35 @@ dependencies = [ ] [[package]] -name = "call_parameters" +name = "call-parameters-v0-test" +version = "0.1.0" +dependencies = [ + "marine-rs-sdk 0.10.3", + "serde_json", +] + +[[package]] +name = "call-parameters-v1-test" version = "0.1.0" dependencies = [ "marine-rs-sdk 0.12.0", + "serde_json", +] + +[[package]] +name = "call-parameters-v2-test" +version = "0.1.0" +dependencies = [ + "marine-rs-sdk 0.13.0", + "serde_json", +] + +[[package]] +name = "call_parameters" +version = "0.1.0" +dependencies = [ + "marine-rs-sdk 0.13.0", + "serde_json", ] [[package]] @@ -673,7 +698,7 @@ name = "curl_adapter" version = "0.1.0" dependencies = [ "log", - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", ] [[package]] @@ -697,7 +722,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.28", + "syn 2.0.49", ] [[package]] @@ -708,7 +733,7 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", - "syn 2.0.28", + "syn 2.0.49", ] [[package]] @@ -824,7 +849,7 @@ dependencies = [ name = "donkey" version = "0.1.0" dependencies = [ - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", ] [[package]] @@ -913,7 +938,7 @@ version = "0.1.0" dependencies = [ "anyhow", "log", - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", ] [[package]] @@ -980,7 +1005,7 @@ dependencies = [ [[package]] name = "fluence-app-service" -version = "0.31.3" +version = "0.32.0" dependencies = [ "log", "maplit", @@ -1092,7 +1117,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.49", ] [[package]] @@ -1464,7 +1489,7 @@ name = "ipfs-effector" version = "0.1.0" dependencies = [ "log", - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", ] [[package]] @@ -1472,7 +1497,7 @@ name = "ipfs-pure" version = "0.1.0" dependencies = [ "log", - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", ] [[package]] @@ -1607,7 +1632,7 @@ checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" name = "lilo-after-2gb-test" version = "0.1.0" dependencies = [ - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", "safe-transmute", ] @@ -1628,7 +1653,7 @@ name = "local_storage" version = "0.1.0" dependencies = [ "log", - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", "wasm-tracing-allocator", ] @@ -1712,6 +1737,17 @@ dependencies = [ "serde", ] +[[package]] +name = "marine-call-parameters" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d16852b36a3cfc8fa044955380901e78109db0035dc93eea4f666d8f3979072" +dependencies = [ + "marine-macro 0.13.0", + "marine-rs-sdk-main 0.13.0", + "serde", +] + [[package]] name = "marine-core" version = "0.27.0" @@ -1748,7 +1784,7 @@ version = "0.14.0" dependencies = [ "it-lilo", "marine-it-parser", - "marine-macro-impl 0.12.0", + "marine-macro-impl 0.13.0", "once_cell", "serde", "serde_json", @@ -1848,6 +1884,16 @@ dependencies = [ "marine-rs-sdk-main 0.12.0", ] +[[package]] +name = "marine-macro" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cec2cd19fedf559833d0f1e6a33cbcc5cf0efa338bb0975346ff12538a3cdde4" +dependencies = [ + "marine-macro-impl 0.13.0", + "marine-rs-sdk-main 0.13.0", +] + [[package]] name = "marine-macro-impl" version = "0.9.0" @@ -1887,6 +1933,19 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "marine-macro-impl" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e09acb3ada67e69a301b6d7b52a915a36176c5eedb312647de7d5b6cf17f51e4" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn 1.0.109", +] + [[package]] name = "marine-min-it-version" version = "0.3.2" @@ -1902,7 +1961,7 @@ dependencies = [ "anyhow", "chrono", "derivative", - "marine-rs-sdk-main 0.12.0", + "marine-rs-sdk-main 0.13.0", "marine-wasm-backend-traits", "semver", "serde", @@ -1937,6 +1996,19 @@ dependencies = [ "serde", ] +[[package]] +name = "marine-rs-sdk" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "034cab8adf708e87db08f093e0c7b8ea49359cc875ed2a778c1bf245b5d9d9f8" +dependencies = [ + "marine-call-parameters 0.10.3", + "marine-macro 0.10.3", + "marine-rs-sdk-main 0.10.3", + "marine-timestamp-macro 0.10.3", + "serde", +] + [[package]] name = "marine-rs-sdk" version = "0.12.0" @@ -1950,6 +2022,19 @@ dependencies = [ "serde", ] +[[package]] +name = "marine-rs-sdk" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f33834365d1e6dd041e821a758000f32bed5b960edb09f9d8c61e340dd82e29" +dependencies = [ + "marine-call-parameters 0.13.0", + "marine-macro 0.13.0", + "marine-rs-sdk-main 0.13.0", + "marine-timestamp-macro 0.13.0", + "serde", +] + [[package]] name = "marine-rs-sdk-main" version = "0.9.0" @@ -1980,6 +2065,16 @@ dependencies = [ "serde", ] +[[package]] +name = "marine-rs-sdk-main" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58b487a1a1b288ba06c832942eadb43384cd99c9754c1454e1e061dd9866be92" +dependencies = [ + "log", + "serde", +] + [[package]] name = "marine-runtime" version = "0.33.0" @@ -1991,10 +2086,11 @@ dependencies = [ "itertools", "log", "marine-call-parameters 0.10.3", + "marine-call-parameters 0.12.0", "marine-core", "marine-module-interface", - "marine-rs-sdk 0.12.0", - "marine-rs-sdk-main 0.12.0", + "marine-rs-sdk 0.13.0", + "marine-rs-sdk-main 0.13.0", "marine-utils", "marine-wasm-backend-traits", "marine-wasmtime-backend", @@ -2031,6 +2127,16 @@ dependencies = [ "quote", ] +[[package]] +name = "marine-timestamp-macro" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f812a03cb13b79ab75e38053a77ecc4b4738a1b485b650d971dec3dbbcb2561" +dependencies = [ + "chrono", + "quote", +] + [[package]] name = "marine-timestamp-macro" version = "0.12.0" @@ -2041,6 +2147,16 @@ dependencies = [ "quote", ] +[[package]] +name = "marine-timestamp-macro" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5086357724dc2a65e7abe39c85d58b9971198f8678ebc642a69aae1bbc7ae0" +dependencies = [ + "chrono", + "quote", +] + [[package]] name = "marine-utils" version = "0.5.1" @@ -2107,7 +2223,7 @@ dependencies = [ name = "memory-limiting-test" version = "0.1.0" dependencies = [ - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", "safe-transmute", ] @@ -2156,7 +2272,7 @@ dependencies = [ "fluence-app-service", "itertools", "log", - "marine-rs-sdk-main 0.12.0", + "marine-rs-sdk-main 0.13.0", "marine-wasm-backend-traits", "rustop", "rustyline", @@ -2293,7 +2409,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.49", ] [[package]] @@ -2385,9 +2501,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.70" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] @@ -2414,9 +2530,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -2487,7 +2603,7 @@ dependencies = [ name = "record-effector" version = "0.1.0" dependencies = [ - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", "test-record", ] @@ -2495,7 +2611,7 @@ dependencies = [ name = "record-pure" version = "0.1.0" dependencies = [ - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", "test-record", ] @@ -2503,7 +2619,7 @@ dependencies = [ name = "records-passing-test" version = "0.1.0" dependencies = [ - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", "safe-transmute", ] @@ -2827,9 +2943,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.189" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537" +checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" dependencies = [ "serde_derive", ] @@ -2847,20 +2963,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.189" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5" +checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.49", ] [[package]] name = "serde_json" -version = "1.0.107" +version = "1.0.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" dependencies = [ "itoa", "ryu", @@ -2913,7 +3029,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.49", ] [[package]] @@ -2940,7 +3056,7 @@ dependencies = [ name = "shrek" version = "0.1.0" dependencies = [ - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", ] [[package]] @@ -3063,9 +3179,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.28" +version = "2.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567" +checksum = "915aea9e586f80826ee59f8453c1101f9d1c4b3964cd2460185ee8e299ada496" dependencies = [ "proc-macro2", "quote", @@ -3132,7 +3248,7 @@ dependencies = [ name = "test-record" version = "0.1.0" dependencies = [ - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", ] [[package]] @@ -3161,7 +3277,7 @@ checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.49", ] [[package]] @@ -3232,7 +3348,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.49", ] [[package]] @@ -3339,7 +3455,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.49", ] [[package]] @@ -3568,7 +3684,7 @@ dependencies = [ name = "wasi-test" version = "0.1.0" dependencies = [ - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", "safe-transmute", ] @@ -3593,7 +3709,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.49", "wasm-bindgen-shared", ] @@ -3637,7 +3753,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.49", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3679,14 +3795,14 @@ dependencies = [ name = "wasm-failing" version = "0.1.0" dependencies = [ - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", ] [[package]] name = "wasm-greeting" version = "0.1.0" dependencies = [ - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", ] [[package]] @@ -3694,14 +3810,14 @@ name = "wasm-greeting-record" version = "0.1.0" dependencies = [ "log", - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", ] [[package]] name = "wasm-sqlite-test" version = "0.1.0" dependencies = [ - "marine-rs-sdk 0.12.0", + "marine-rs-sdk 0.13.0", "marine-sqlite-connector", ] @@ -3870,7 +3986,7 @@ dependencies = [ "anyhow", "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.49", "wasmtime-component-util", "wasmtime-wit-bindgen", "wit-parser", @@ -4061,7 +4177,7 @@ checksum = "fe877472cbdd6d96b4ecdc112af764e3b9d58c2e4175a87828f892ab94c60643" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.49", ] [[package]] @@ -4227,7 +4343,7 @@ dependencies = [ "proc-macro2", "quote", "shellexpand", - "syn 2.0.28", + "syn 2.0.49", "witx", ] @@ -4239,7 +4355,7 @@ checksum = "7d72d838b7c9302b2ca7c44f36d6af5ce1988239a16deba951d99c4630d17caf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.28", + "syn 2.0.49", "wiggle-generate", ] diff --git a/Cargo.toml b/Cargo.toml index 07078219b..851d71b45 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,6 +32,9 @@ members = [ "marine", "marine/tests/wasm_tests/arguments_passing", "marine/tests/wasm_tests/arrays_passing", + "marine/tests/wasm_tests/call_parameters_v0", + "marine/tests/wasm_tests/call_parameters_v1", + "marine/tests/wasm_tests/call_parameters_v2", "marine/tests/wasm_tests/memory_limiting", "marine/tests/wasm_tests/records_passing", "marine/tests/wasm_tests/wasi", diff --git a/core/src/config.rs b/core/src/config.rs index aba713b03..5d624a8be 100644 --- a/core/src/config.rs +++ b/core/src/config.rs @@ -57,6 +57,7 @@ pub struct HostImportDescriptor { pub enum HostAPIVersion { V0, V1, + V2, } impl HostAPIVersion { @@ -65,6 +66,7 @@ impl HostAPIVersion { match self { Self::V0 => "host", Self::V1 => "__marine_host_api_v1", + Self::V2 => "__marine_host_api_v2", } } } diff --git a/core/tests/wasm_tests/lilo_after_2gb/Cargo.toml b/core/tests/wasm_tests/lilo_after_2gb/Cargo.toml index 32fc3fe56..81ea4155e 100644 --- a/core/tests/wasm_tests/lilo_after_2gb/Cargo.toml +++ b/core/tests/wasm_tests/lilo_after_2gb/Cargo.toml @@ -10,5 +10,5 @@ name = "lilo_after_2gb" path = "src/pure.rs" [dependencies] -marine-rs-sdk = "0.12.0" +marine-rs-sdk = "0.13.0" safe-transmute = "0.11.0" diff --git a/crates/fluence-app-service/src/lib.rs b/crates/fluence-app-service/src/lib.rs index 4f1bbb15f..86318e05b 100644 --- a/crates/fluence-app-service/src/lib.rs +++ b/crates/fluence-app-service/src/lib.rs @@ -70,4 +70,5 @@ pub use marine_min_it_version::min_sdk_version; pub use marine_min_it_version::min_it_version; pub use marine::CallParameters; +pub use marine::ParticleParameters; pub use marine::SecurityTetraplet; diff --git a/crates/it-generator/Cargo.toml b/crates/it-generator/Cargo.toml index 3f7de1ce5..603a22c71 100644 --- a/crates/it-generator/Cargo.toml +++ b/crates/it-generator/Cargo.toml @@ -13,7 +13,7 @@ path = "src/lib.rs" [dependencies] marine-it-parser = { path = "../it-parser", version = "0.15.1" } -marine-macro-impl = "0.12.0" +marine-macro-impl = "0.13.0" wasmer-it = { package = "wasmer-interface-types-fl", version = "0.27.0" } it-lilo = "0.6.0" diff --git a/crates/module-info-parser/Cargo.toml b/crates/module-info-parser/Cargo.toml index 55cfb9c21..022173c7f 100644 --- a/crates/module-info-parser/Cargo.toml +++ b/crates/module-info-parser/Cargo.toml @@ -12,7 +12,7 @@ name = "marine_module_info_parser" path = "src/lib.rs" [dependencies] -marine-rs-sdk-main = { version = "0.12.0", default-features = false } +marine-rs-sdk-main = { version = "0.13.0", default-features = false } marine-wasm-backend-traits = { path = "../wasm-backend-traits", version = "0.5.1" } diff --git a/examples/call_parameters/Cargo.toml b/examples/call_parameters/Cargo.toml index 000acfbe6..8be6aaea0 100644 --- a/examples/call_parameters/Cargo.toml +++ b/examples/call_parameters/Cargo.toml @@ -10,4 +10,5 @@ name = "call_parameters" path = "src/main.rs" [dependencies] -marine-rs-sdk = { version = "0.12.0", features = ["logger"] } +marine-rs-sdk = { version = "0.13.0", features = ["logger"] } +serde_json = "1.0.111" \ No newline at end of file diff --git a/examples/call_parameters/artifacts/call_parameters.wasm b/examples/call_parameters/artifacts/call_parameters.wasm index ba1e09a29..bd1c542f7 100755 Binary files a/examples/call_parameters/artifacts/call_parameters.wasm and b/examples/call_parameters/artifacts/call_parameters.wasm differ diff --git a/examples/call_parameters/src/main.rs b/examples/call_parameters/src/main.rs index 453933165..b152bc987 100644 --- a/examples/call_parameters/src/main.rs +++ b/examples/call_parameters/src/main.rs @@ -14,6 +14,7 @@ * limitations under the License. */ +use marine_rs_sdk::CallParameters; #[cfg(target_arch = "wasm32")] use marine_rs_sdk::marine; #[cfg(target_arch = "wasm32")] @@ -26,16 +27,6 @@ pub fn main() {} #[marine] #[cfg(target_arch = "wasm32")] -pub fn call_parameters() -> String { - let cp = marine_rs_sdk::get_call_parameters(); - format!( - "{}\n{}\n{}\n{}\n{}\n{}\n{:?}", - cp.init_peer_id, - cp.service_id, - cp.service_creator_peer_id, - cp.host_id, - cp.worker_id, - cp.particle_id, - cp.tetraplets - ) +pub fn call_parameters() -> CallParameters { + marine_rs_sdk::get_call_parameters() } diff --git a/examples/failing/Cargo.toml b/examples/failing/Cargo.toml index ea887f190..af77095c4 100644 --- a/examples/failing/Cargo.toml +++ b/examples/failing/Cargo.toml @@ -11,4 +11,4 @@ name = "failing" path = "src/main.rs" [dependencies] -marine-rs-sdk = "0.12.0" +marine-rs-sdk = "0.13.0" diff --git a/examples/greeting/Cargo.toml b/examples/greeting/Cargo.toml index 129f41aa9..04b321018 100644 --- a/examples/greeting/Cargo.toml +++ b/examples/greeting/Cargo.toml @@ -11,4 +11,4 @@ name = "greeting" path = "src/main.rs" [dependencies] -marine-rs-sdk = "0.12.0" +marine-rs-sdk = "0.13.0" diff --git a/examples/greeting_record/Cargo.toml b/examples/greeting_record/Cargo.toml index 9e702a709..5753cd096 100644 --- a/examples/greeting_record/Cargo.toml +++ b/examples/greeting_record/Cargo.toml @@ -11,6 +11,6 @@ name = "greeting-record" path = "src/main.rs" [dependencies] -marine-rs-sdk = { version = "0.12.0", features = ["logger"] } +marine-rs-sdk = { version = "0.13.0", features = ["logger"] } log = "0.4.8" diff --git a/examples/ipfs-node/effector/Cargo.toml b/examples/ipfs-node/effector/Cargo.toml index fddb41225..214c420a6 100644 --- a/examples/ipfs-node/effector/Cargo.toml +++ b/examples/ipfs-node/effector/Cargo.toml @@ -10,5 +10,5 @@ name = "ipfs_effector" path = "src/main.rs" [dependencies] -marine-rs-sdk = { version = "0.12.0", features = ["logger"] } +marine-rs-sdk = { version = "0.13.0", features = ["logger"] } log = "0.4.14" diff --git a/examples/ipfs-node/pure/Cargo.toml b/examples/ipfs-node/pure/Cargo.toml index 68226d223..b1f3386c0 100644 --- a/examples/ipfs-node/pure/Cargo.toml +++ b/examples/ipfs-node/pure/Cargo.toml @@ -10,5 +10,5 @@ name = "ipfs_pure" path = "src/main.rs" [dependencies] -marine-rs-sdk = { version = "0.12.0", features = ["logger"] } +marine-rs-sdk = { version = "0.13.0", features = ["logger"] } log = "0.4.14" diff --git a/examples/motivational-example/donkey/Cargo.toml b/examples/motivational-example/donkey/Cargo.toml index 55d6525ad..d4bd23036 100644 --- a/examples/motivational-example/donkey/Cargo.toml +++ b/examples/motivational-example/donkey/Cargo.toml @@ -10,4 +10,4 @@ name = "donkey" path = "src/main.rs" [dependencies] -marine-rs-sdk = { version = "0.12.0", features = ["logger"] } +marine-rs-sdk = { version = "0.13.0", features = ["logger"] } diff --git a/examples/motivational-example/shrek/Cargo.toml b/examples/motivational-example/shrek/Cargo.toml index 5ce24ac3f..7c13e85f3 100644 --- a/examples/motivational-example/shrek/Cargo.toml +++ b/examples/motivational-example/shrek/Cargo.toml @@ -10,4 +10,4 @@ path = "src/main.rs" name = "shrek" [dependencies] -marine-rs-sdk = { version = "0.12.0", features = ["logger"] } +marine-rs-sdk = { version = "0.13.0", features = ["logger"] } diff --git a/examples/records/effector/Cargo.toml b/examples/records/effector/Cargo.toml index f70adfd60..a3f1f8b60 100644 --- a/examples/records/effector/Cargo.toml +++ b/examples/records/effector/Cargo.toml @@ -10,5 +10,5 @@ name = "records_effector" path = "src/main.rs" [dependencies] -marine-rs-sdk = "0.12.0" +marine-rs-sdk = "0.13.0" test-record = { path = "../test-record" } diff --git a/examples/records/pure/Cargo.toml b/examples/records/pure/Cargo.toml index 019790487..efa4a743c 100644 --- a/examples/records/pure/Cargo.toml +++ b/examples/records/pure/Cargo.toml @@ -10,5 +10,5 @@ name = "records_pure" path = "src/main.rs" [dependencies] -marine-rs-sdk = "0.12.0" +marine-rs-sdk = "0.13.0" test-record = { path = "../test-record" } diff --git a/examples/records/test-record/Cargo.toml b/examples/records/test-record/Cargo.toml index e6ef9251f..dc400899d 100644 --- a/examples/records/test-record/Cargo.toml +++ b/examples/records/test-record/Cargo.toml @@ -10,4 +10,4 @@ name = "test_record" path = "src/test_record.rs" [dependencies] -marine-rs-sdk = "0.12.0" +marine-rs-sdk = "0.13.0" diff --git a/examples/sqlite/Cargo.toml b/examples/sqlite/Cargo.toml index eb0df9b4f..152a56a90 100644 --- a/examples/sqlite/Cargo.toml +++ b/examples/sqlite/Cargo.toml @@ -10,5 +10,5 @@ name = "sqlite_test" path = "src/main.rs" [dependencies] -marine-rs-sdk = "0.12.0" +marine-rs-sdk = "0.13.0" marine-sqlite-connector = "0.9.0" diff --git a/examples/url-downloader/curl_adapter/Cargo.toml b/examples/url-downloader/curl_adapter/Cargo.toml index 55262b092..a9d575960 100644 --- a/examples/url-downloader/curl_adapter/Cargo.toml +++ b/examples/url-downloader/curl_adapter/Cargo.toml @@ -10,5 +10,5 @@ path = "src/main.rs" name = "curl_adapter" [dependencies] -marine-rs-sdk = { version = "0.12.0", features = ["logger"] } +marine-rs-sdk = { version = "0.13.0", features = ["logger"] } log = "0.4.8" diff --git a/examples/url-downloader/facade/Cargo.toml b/examples/url-downloader/facade/Cargo.toml index 3e496c42e..d5e446b83 100644 --- a/examples/url-downloader/facade/Cargo.toml +++ b/examples/url-downloader/facade/Cargo.toml @@ -10,6 +10,6 @@ name = "facade" path = "src/main.rs" [dependencies] -marine-rs-sdk = { version = "0.12.0", features = ["logger"] } +marine-rs-sdk = { version = "0.13.0", features = ["logger"] } anyhow = "1.0.31" log = "0.4.8" diff --git a/examples/url-downloader/local_storage/Cargo.toml b/examples/url-downloader/local_storage/Cargo.toml index ab1b5183b..290d8395c 100644 --- a/examples/url-downloader/local_storage/Cargo.toml +++ b/examples/url-downloader/local_storage/Cargo.toml @@ -10,7 +10,7 @@ name = "local_storage" path = "src/main.rs" [dependencies] -marine-rs-sdk = { version = "0.12.0", features = ["logger"] } +marine-rs-sdk = { version = "0.13.0", features = ["logger"] } wasm-tracing-allocator = "0.1.0" log = "0.4.8" diff --git a/marine-js/npm-package/src/__test__/test.spec.ts b/marine-js/npm-package/src/__test__/test.spec.ts index 2421f0243..08defe30e 100644 --- a/marine-js/npm-package/src/__test__/test.spec.ts +++ b/marine-js/npm-package/src/__test__/test.spec.ts @@ -7,7 +7,14 @@ import * as url from 'url'; import downloadRaw from 'download'; import { MarineService } from '../MarineService.js'; import { callAvm } from '@fluencelabs/avm'; -import {JSONArray, JSONObject, CallParameters, SecurityTetraplet, defaultCallParameters} from '../types.js'; +import { + JSONArray, + JSONObject, + CallParameters, + SecurityTetraplet, + defaultCallParameters, + ParticleParameters +} from '../types.js'; import {MarineServiceConfig, Env, Args, ModuleDescriptor} from '../config.js'; import exp = require("constants"); @@ -405,9 +412,19 @@ describe('Fluence app service tests', () => { const worker_id = "worker_id"; const particle_id = "particle_id"; + const particleParameters: ParticleParameters = { + id: particle_id, + init_peer_id: init_peer_id_2, + timestamp: 42, + ttl: 84, + script: "(null)", + signature: [43,44,45,46], + token: "token", + } + const tetraplet: SecurityTetraplet = { function_name: "some_func_name", - json_path: "some_json_path", + lambda: "some_lambda", peer_pk: "peer_pk", service_id: "service_id" } @@ -415,26 +432,16 @@ describe('Fluence app service tests', () => { const tetraplets = [[tetraplet]] const call_parameters: CallParameters = { - init_peer_id: init_peer_id_2, + particle: particleParameters, service_id: service_id, service_creator_peer_id: service_creator_peer_id, host_id: host_id, worker_id: worker_id, - particle_id: particle_id, tetraplets: tetraplets, }; - const expected_result = - "init_peer_id\n" + - "service_id\n" + - "service_creator_peer_id\n" + - "host_id\n" + - "worker_id\n" + - "particle_id\n" + - "[[SecurityTetraplet { peer_pk: \"peer_pk\", service_id: \"service_id\", function_name: \"some_func_name\", json_path: \"some_json_path\" }]]"; - const result1 = marineService.call("call_parameters", [], call_parameters); - expect(result1).toStrictEqual(expected_result) + expect(result1).toStrictEqual(call_parameters) }); }); diff --git a/marine-js/npm-package/src/marine_js.js b/marine-js/npm-package/src/marine_js.js index e0318160c..743fea7b3 100644 --- a/marine-js/npm-package/src/marine_js.js +++ b/marine-js/npm-package/src/marine_js.js @@ -252,9 +252,9 @@ export async function init(module) { return stack_pointer; } - function __wbg_adapter_42(arg0, arg1, arg2) { + function __wbg_adapter_46(arg0, arg1, arg2) { try { - const ret = wasm.wasm_bindgen__convert__closures__invoke1_mut_ref__h68489fc227c6e812(arg0, arg1, addBorrowedObject(arg2)); + const ret = wasm.wasm_bindgen__convert__closures__invoke1_mut_ref__h5fde7982251d0d6e(arg0, arg1, addBorrowedObject(arg2)); return takeObject(ret); } finally { heap[stack_pointer++] = undefined; @@ -405,36 +405,6 @@ export async function init(module) { const imports = {}; imports.wbg = {}; - imports.wbg.__wbindgen_object_drop_ref = function(arg0) { - takeObject(arg0); - }; - - imports.wbg.__wbindgen_object_clone_ref = function(arg0) { - const ret = getObject(arg0); - return addHeapObject(ret); - }; - - imports.wbg.__wbg_apply_f9ecfcbfefaf7349 = function() { - return handleError(function(arg0, arg1, arg2) { - const ret = Reflect.apply(getObject(arg0), getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }, arguments); - }; - - imports.wbg.__wbindgen_string_new = function(arg0, arg1) { - const ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); - }; - - imports.wbg.__wbg_log_576ca876af0d4a77 = function(arg0, arg1) { - console.log(getObject(arg0), getObject(arg1)); - }; - - imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) { - const ret = getObject(arg0) == getObject(arg1); - return ret; - }; - imports.wbg.__wbindgen_is_object = function(arg0) { const val = getObject(arg0); const ret = typeof val === "object" && val !== null; @@ -456,10 +426,8 @@ export async function init(module) { return ret; }; - imports.wbg.__wbindgen_boolean_get = function(arg0) { - const v = getObject(arg0); - const ret = typeof v === "boolean" ? (v ? 1 : 0) : 2; - return ret; + imports.wbg.__wbindgen_object_drop_ref = function(arg0) { + takeObject(arg0); }; imports.wbg.__wbg_isArray_4c24b343cb13cfb1 = function(arg0) { @@ -494,18 +462,6 @@ export async function init(module) { return addHeapObject(ret); }; - imports.wbg.__wbindgen_number_get = function(arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof obj === "number" ? obj : undefined; - getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret; - getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); - }; - - imports.wbg.__wbg_isSafeInteger_bb8e18dd21c97288 = function(arg0) { - const ret = Number.isSafeInteger(getObject(arg0)); - return ret; - }; - imports.wbg.__wbg_keys_386d224d0262f361 = function(arg0) { const ret = Object.keys(getObject(arg0)); return addHeapObject(ret); @@ -542,6 +498,40 @@ export async function init(module) { return ret; }; + imports.wbg.__wbindgen_is_bigint = function(arg0) { + const ret = typeof (getObject(arg0)) === "bigint"; + return ret; + }; + + imports.wbg.__wbindgen_bigint_get_as_i64 = function(arg0, arg1) { + const v = getObject(arg1); + const ret = typeof v === "bigint" ? v : undefined; + getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret; + getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); + }; + + imports.wbg.__wbindgen_bigint_from_u64 = function(arg0) { + const ret = BigInt.asUintN(64, arg0); + return addHeapObject(ret); + }; + + imports.wbg.__wbindgen_jsval_eq = function(arg0, arg1) { + const ret = getObject(arg0) === getObject(arg1); + return ret; + }; + + imports.wbg.__wbindgen_number_get = function(arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof obj === "number" ? obj : undefined; + getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret; + getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); + }; + + imports.wbg.__wbg_isSafeInteger_bb8e18dd21c97288 = function(arg0) { + const ret = Number.isSafeInteger(getObject(arg0)); + return ret; + }; + imports.wbg.__wbg_iterator_97f0c81209c6c35a = function() { const ret = Symbol.iterator; return addHeapObject(ret); @@ -588,28 +578,66 @@ export async function init(module) { return addHeapObject(ret); }; - imports.wbg.__wbg_setindex_24de8908d99d47eb = function(arg0, arg1, arg2) { - getObject(arg0)[arg1 >>> 0] = arg2; + imports.wbg.__wbg_byteLength_0488a7a303dccf40 = function(arg0) { + const ret = getObject(arg0).byteLength; + return ret; }; - imports.wbg.__wbg_entries_e51f29c7bba0c054 = function(arg0) { - const ret = Object.entries(getObject(arg0)); + imports.wbg.__wbg_getindex_961202524f8271d6 = function(arg0, arg1) { + const ret = getObject(arg0)[arg1 >>> 0]; + return ret; + }; + + imports.wbg.__wbindgen_object_clone_ref = function(arg0) { + const ret = getObject(arg0); return addHeapObject(ret); }; - imports.wbg.__wbg_byteLength_0488a7a303dccf40 = function(arg0) { - const ret = getObject(arg0).byteLength; - return ret; + imports.wbg.__wbg_apply_f9ecfcbfefaf7349 = function() { + return handleError(function(arg0, arg1, arg2) { + const ret = Reflect.apply(getObject(arg0), getObject(arg1), getObject(arg2)); + return addHeapObject(ret); + }, arguments); }; - imports.wbg.__wbg_new_898a68150f225f2e = function() { - const ret = new Array(); + imports.wbg.__wbindgen_string_new = function(arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); return addHeapObject(ret); }; - imports.wbg.__wbg_getindex_961202524f8271d6 = function(arg0, arg1) { - const ret = getObject(arg0)[arg1 >>> 0]; - return ret; + imports.wbg.__wbg_log_576ca876af0d4a77 = function(arg0, arg1) { + console.log(getObject(arg0), getObject(arg1)); + }; + + imports.wbg.__wbg_newwithlength_e5d69174d6984cd7 = function(arg0) { + const ret = new Uint8Array(arg0 >>> 0); + return addHeapObject(ret); + }; + + imports.wbg.__wbg_new_553093d7f6eb5551 = function() { + return handleError(function(arg0) { + const ret = new WebAssembly.Module(getObject(arg0)); + return addHeapObject(ret); + }, arguments); + }; + + imports.wbg.__wbg_new_56693dbed0c32988 = function() { + const ret = new Map(); + return addHeapObject(ret); + }; + + imports.wbg.__wbg_set_bedc3d02d0f05eb0 = function(arg0, arg1, arg2) { + const ret = getObject(arg0).set(getObject(arg1), getObject(arg2)); + return addHeapObject(ret); + }; + + imports.wbg.__wbg_createwasi_b2f38d9d47d4b768 = function(arg0) { + const ret = create_wasi(takeObject(arg0)); + return addHeapObject(ret); + }; + + imports.wbg.__wbg_setindex_24de8908d99d47eb = function(arg0, arg1, arg2) { + getObject(arg0)[arg1 >>> 0] = arg2; }; imports.wbg.__wbg_String_88810dfeb4021902 = function(arg0, arg1) { @@ -641,6 +669,11 @@ export async function init(module) { getObject(arg0)[takeObject(arg1)] = takeObject(arg2); }; + imports.wbg.__wbg_new_898a68150f225f2e = function() { + const ret = new Array(); + return addHeapObject(ret); + }; + imports.wbg.__wbg_push_ca1c26067ef907ac = function(arg0, arg1) { const ret = getObject(arg0).push(getObject(arg1)); return ret; @@ -650,30 +683,19 @@ export async function init(module) { console.error(getObject(arg0), getObject(arg1)); }; - imports.wbg.__wbg_newwithlength_e5d69174d6984cd7 = function(arg0) { - const ret = new Uint8Array(arg0 >>> 0); - return addHeapObject(ret); - }; - - imports.wbg.__wbg_new_553093d7f6eb5551 = function() { - return handleError(function(arg0) { - const ret = new WebAssembly.Module(getObject(arg0)); - return addHeapObject(ret); - }, arguments); - }; - - imports.wbg.__wbg_new_56693dbed0c32988 = function() { - const ret = new Map(); - return addHeapObject(ret); + imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) { + const ret = getObject(arg0) == getObject(arg1); + return ret; }; - imports.wbg.__wbg_set_bedc3d02d0f05eb0 = function(arg0, arg1, arg2) { - const ret = getObject(arg0).set(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); + imports.wbg.__wbindgen_boolean_get = function(arg0) { + const v = getObject(arg0); + const ret = typeof v === "boolean" ? (v ? 1 : 0) : 2; + return ret; }; - imports.wbg.__wbg_createwasi_b2f38d9d47d4b768 = function(arg0) { - const ret = create_wasi(takeObject(arg0)); + imports.wbg.__wbg_entries_e51f29c7bba0c054 = function(arg0) { + const ret = Object.entries(getObject(arg0)); return addHeapObject(ret); }; @@ -724,18 +746,6 @@ export async function init(module) { return addHeapObject(ret); }; - imports.wbg.__wbindgen_bigint_get_as_i64 = function(arg0, arg1) { - const v = getObject(arg1); - const ret = typeof v === "bigint" ? v : undefined; - getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret; - getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); - }; - - imports.wbg.__wbindgen_jsval_eq = function(arg0, arg1) { - const ret = getObject(arg0) === getObject(arg1); - return ret; - }; - imports.wbg.__wbg_newwithargs_a0432b7780c1dfa1 = function(arg0, arg1, arg2, arg3) { const ret = new Function(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3)); return addHeapObject(ret); @@ -784,8 +794,8 @@ export async function init(module) { throw new Error(getStringFromWasm0(arg0, arg1)); }; - imports.wbg.__wbindgen_closure_wrapper1436 = function(arg0, arg1, arg2) { - const ret = makeMutClosure(arg0, arg1, 131, __wbg_adapter_42); + imports.wbg.__wbindgen_closure_wrapper1464 = function(arg0, arg1, arg2) { + const ret = makeMutClosure(arg0, arg1, 132, __wbg_adapter_46); return addHeapObject(ret); }; diff --git a/marine-js/npm-package/src/types.ts b/marine-js/npm-package/src/types.ts index a3c38bdb9..52a2c4bc5 100644 --- a/marine-js/npm-package/src/types.ts +++ b/marine-js/npm-package/src/types.ts @@ -18,8 +18,8 @@ export type JSONValue = string | number | boolean | { [x: string]: JSONValue } | export type JSONArray = Array; export type JSONObject = { [x: string]: JSONValue }; export type CallParameters = { - /// Peer id of the AIR script initiator. - init_peer_id: string, + /// Parameters of the particle that caused this call. + particle: ParticleParameters, /// Id of the current service. service_id: string, @@ -33,13 +33,33 @@ export type CallParameters = { /// PeerId of the worker who hosts this service. worker_id: string, - /// Id of the particle which execution resulted a call this service. - particle_id: string, - /// Security tetraplets which described origin of the arguments. tetraplets: Array>, } +export type ParticleParameters = { + /// Id of the particle which execution resulted a call this service. + id: string, + + /// Peer id of the AIR script initiator. + init_peer_id: string, + + /// Unix timestamp of the particle start time. + timestamp: number, + + /// Time to live for this particle in milliseconds. + ttl: number, + + /// AIR script in this particle. + script: string, + + /// Signature made by particle initiator -- init_peer_id. + signature: Array, + + /// particle.signature signed by host_id -- used for FS access. + token: string, +} + export type SecurityTetraplet = { /// Id of a peer where corresponding value was set. peer_pk: string, @@ -50,9 +70,8 @@ export type SecurityTetraplet = { /// Name of a function that returned corresponding value. function_name: string, - /// Value was produced by applying this `json_path` to the output from `call_service`. - // TODO: since it's not a json path anymore, it's needed to rename it to lambda - json_path: string, + /// Value was produced by applying this `lambda` to the output from `call_service`. + lambda: string, } export type LogFunction = (message: LogMessage) => void; @@ -76,9 +95,16 @@ export const logLevelToEnv = (level: LogLevel): { WASM_LOG: LogLevel } => { }; export const defaultCallParameters: CallParameters = { + particle: { + id: "", + init_peer_id: "", + timestamp: 0, + ttl: 0, + script: "", + signature: [], + token: "", + }, host_id: "", - init_peer_id: "", - particle_id: "", service_creator_peer_id: "", service_id: "", tetraplets: [], diff --git a/marine/Cargo.toml b/marine/Cargo.toml index ecf6aeaab..44bbc1078 100644 --- a/marine/Cargo.toml +++ b/marine/Cargo.toml @@ -15,9 +15,10 @@ path = "src/lib.rs" marine-core = { path = "../core", version = "0.27.0", default-features = false} marine-module-interface = { path = "../crates/module-interface", version = "0.8.1" } marine-utils = { path = "../crates/utils", version = "0.5.1" } -marine-rs-sdk-main = { version = "0.12.0", default-features = false, features = ["logger"] } -marine-rs-sdk = { version = "0.12.0", default-features = false, features = ["logger"] } -old_sdk_call_parameters = { package = "marine-call-parameters", version = "0.10.3", default-features = false } +marine-rs-sdk-main = { version = "0.13.0", default-features = false, features = ["logger"] } +marine-rs-sdk = { version = "0.13.0", default-features = false, features = ["logger"] } +marine_call_parameters_v0 = { package = "marine-call-parameters", version = "=0.10.3", default-features = false } +marine_call_parameters_v1 = { package = "marine-call-parameters", version = "=0.12.0", default-features = false } it-json-serde = { path = "../crates/it-json-serde", version = "0.5.1" } marine-wasm-backend-traits = { path = "../crates/wasm-backend-traits", version = "0.5.1" } diff --git a/marine/src/config/marine_config.rs b/marine/src/config/marine_config.rs index 0da5b4f53..18c42d8bf 100644 --- a/marine/src/config/marine_config.rs +++ b/marine/src/config/marine_config.rs @@ -284,6 +284,7 @@ impl<'c, WB: WasmBackend> TryFrom> let mut host_cli_imports_v0 = HashMap::new(); let mut host_cli_imports_v1 = HashMap::new(); + let mut host_cli_imports_v2 = HashMap::new(); for (import_name, host_cmd) in mounted_binaries { let host_cmd = as_relative_to_base(context.base_path.as_deref(), &host_cmd)?; host_cli_imports_v0.insert( @@ -291,6 +292,10 @@ impl<'c, WB: WasmBackend> TryFrom> crate::host_imports::create_mounted_binary_import(host_cmd.clone()), ); host_cli_imports_v1.insert( + import_name.clone(), + crate::host_imports::create_mounted_binary_import(host_cmd.clone()), + ); + host_cli_imports_v2.insert( import_name, crate::host_imports::create_mounted_binary_import(host_cmd), ); @@ -299,6 +304,7 @@ impl<'c, WB: WasmBackend> TryFrom> let host_imports = HashMap::from([ (HostAPIVersion::V0, host_cli_imports_v0), (HostAPIVersion::V1, host_cli_imports_v1), + (HostAPIVersion::V2, host_cli_imports_v2), ]); let wasi = toml_config.wasi.map(|w| w.try_into()).transpose()?; diff --git a/marine/src/config/to_marine_config.rs b/marine/src/config/to_marine_config.rs index 57a918004..846cae026 100644 --- a/marine/src/config/to_marine_config.rs +++ b/marine/src/config/to_marine_config.rs @@ -23,6 +23,7 @@ use crate::host_imports::logger::LoggerFilter; use crate::host_imports::logger::WASM_LOG_ENV_NAME; use crate::host_imports::create_call_parameters_import_v0; use crate::host_imports::create_call_parameters_import_v1; +use crate::host_imports::create_call_parameters_import_v2; use marine_core::generic::HostImportDescriptor; use marine_core::generic::MModuleConfig; @@ -53,8 +54,9 @@ impl MModuleConfigBuilder { self, module_name: String, marine_module_config: Option>, - call_parameters_v0: Arc>, - call_parameters_v1: Arc>, + call_parameters_v0: Arc>, + call_parameters_v1: Arc>, + call_parameters_v2: Arc>, logger_filter: &LoggerFilter<'_>, ) -> MarineResult> { let marine_module_config = match marine_module_config { @@ -71,7 +73,12 @@ impl MModuleConfigBuilder { let config = self .populate_logger(logger_enabled, logging_mask, logger_filter, module_name) - .populate_host_imports(host_imports, call_parameters_v0, call_parameters_v1) + .populate_host_imports( + host_imports, + call_parameters_v0, + call_parameters_v1, + call_parameters_v2, + ) .populate_wasi(wasi)? .into_config(); @@ -124,8 +131,9 @@ impl MModuleConfigBuilder { fn populate_host_imports( mut self, host_imports: HashMap>>, - call_parameters_v0: Arc>, - call_parameters_v1: Arc>, + call_parameters_v0: Arc>, + call_parameters_v1: Arc>, + call_parameters_v2: Arc>, ) -> Self { self.config.host_imports = host_imports; self.config @@ -146,6 +154,15 @@ impl MModuleConfigBuilder { create_call_parameters_import_v1(call_parameters_v1), ); + self.config + .host_imports + .entry(HostAPIVersion::V2) + .or_default() + .insert( + String::from("get_call_parameters"), + create_call_parameters_import_v2(call_parameters_v2), + ); + self } @@ -191,6 +208,12 @@ impl MModuleConfigBuilder { .raw_imports .entry(HostAPIVersion::V1) .or_default() + .insert("log_utf8_string".to_string(), creator.clone()); + + self.config + .raw_imports + .entry(HostAPIVersion::V2) + .or_default() .insert("log_utf8_string".to_string(), creator); self @@ -205,8 +228,9 @@ impl MModuleConfigBuilder { pub(crate) fn make_marine_config( module_name: String, marine_module_config: Option>, - call_parameters_v0: Arc>, - call_parameters_v1: Arc>, + call_parameters_v0: Arc>, + call_parameters_v1: Arc>, + call_parameters_v2: Arc>, logger_filter: &LoggerFilter<'_>, ) -> MarineResult> { MModuleConfigBuilder::new().build( @@ -214,6 +238,7 @@ pub(crate) fn make_marine_config( marine_module_config, call_parameters_v0, call_parameters_v1, + call_parameters_v2, logger_filter, ) } diff --git a/marine/src/host_imports/call_parameters.rs b/marine/src/host_imports/call_parameters.rs index b0eced236..1f3e6b1b8 100644 --- a/marine/src/host_imports/call_parameters.rs +++ b/marine/src/host_imports/call_parameters.rs @@ -29,7 +29,7 @@ use std::sync::Arc; /// Create the import intended for handling get_call_parameters SDK api. -pub(crate) fn create_call_parameters_import_v1( +pub(crate) fn create_call_parameters_import_v2( call_parameters: Arc>, // TODO try to avoid using mutex ) -> HostImportDescriptor { let call_parameters_closure = move |_ctx: &mut ::ImportCallContext<'_>, @@ -51,8 +51,30 @@ pub(crate) fn create_call_parameters_import_v1( } } +pub(crate) fn create_call_parameters_import_v1( + call_parameters: Arc>, // TODO try to avoid using mutex +) -> HostImportDescriptor { + let call_parameters_closure = move |_ctx: &mut ::ImportCallContext<'_>, + _args: Vec| { + let result = { + // a separate code block to unlock the mutex ASAP and to avoid double locking + crate::to_interface_value(call_parameters.lock().deref()) + .unwrap_or_else(|_| panic!("CallParameters should be convertible to IValue")) + }; + + Some(result) + }; + + HostImportDescriptor { + host_exported_func: Box::new(call_parameters_closure), + argument_types: vec![], + output_type: Some(IType::Record(0)), + error_handler: None, + } +} + pub(crate) fn create_call_parameters_import_v0( - call_parameters: Arc>, // TODO try to avoid using mutex + call_parameters: Arc>, // TODO try to avoid using mutex ) -> HostImportDescriptor { let call_parameters_closure = move |_ctx: &mut ::ImportCallContext<'_>, _args: Vec| { @@ -73,52 +95,101 @@ pub(crate) fn create_call_parameters_import_v0( } } -pub(crate) fn call_parameters_v1_to_v0( +pub(crate) fn call_parameters_v2_to_v0( call_parameters: marine_rs_sdk::CallParameters, -) -> old_sdk_call_parameters::CallParameters { +) -> marine_call_parameters_v0::CallParameters { let marine_rs_sdk::CallParameters { - init_peer_id, + particle, service_id, service_creator_peer_id, host_id, - particle_id, tetraplets, .. } = call_parameters; - old_sdk_call_parameters::CallParameters { - init_peer_id, + marine_call_parameters_v0::CallParameters { + init_peer_id: particle.init_peer_id, service_id, service_creator_peer_id, host_id, - particle_id, - tetraplets: to_old_sdk_tetraplets(tetraplets), + particle_id: particle.id, + tetraplets: to_v0_sdk_tetraplets(tetraplets), + } +} + +pub(crate) fn call_parameters_v2_to_v1( + call_parameters: marine_rs_sdk::CallParameters, +) -> marine_call_parameters_v1::CallParameters { + let marine_rs_sdk::CallParameters { + particle, + service_id, + service_creator_peer_id, + host_id, + tetraplets, + worker_id, + } = call_parameters; + + marine_call_parameters_v1::CallParameters { + init_peer_id: particle.init_peer_id, + service_id, + service_creator_peer_id, + host_id, + worker_id, + particle_id: particle.id, + tetraplets: to_v1_sdk_tetraplets(tetraplets), + } +} + +fn to_v0_sdk_tetraplets( + tetraplets: Vec>, +) -> Vec> { + tetraplets + .into_iter() + .map(|tetraplets| tetraplets.into_iter().map(to_v0_sdk_tetraplet).collect()) + .collect() +} + +fn to_v0_sdk_tetraplet( + tetraplet: SecurityTetraplet, +) -> marine_call_parameters_v0::SecurityTetraplet { + let SecurityTetraplet { + peer_pk, + service_id, + function_name, + lambda, + } = tetraplet; + + marine_call_parameters_v0::SecurityTetraplet { + peer_pk, + service_id, + function_name, + json_path: lambda, } } -fn to_old_sdk_tetraplets( +fn to_v1_sdk_tetraplets( tetraplets: Vec>, -) -> Vec> { +) -> Vec> { tetraplets .into_iter() - .map(|tetraplets| tetraplets.into_iter().map(to_old_sdk_tetraplet).collect()) + .map(|tetraplets| tetraplets.into_iter().map(to_v1_sdk_tetraplet).collect()) .collect() } -fn to_old_sdk_tetraplet( +fn to_v1_sdk_tetraplet( tetraplet: SecurityTetraplet, -) -> old_sdk_call_parameters::SecurityTetraplet { +) -> marine_call_parameters_v1::SecurityTetraplet { let SecurityTetraplet { peer_pk, service_id, function_name, - json_path, + lambda, } = tetraplet; - old_sdk_call_parameters::SecurityTetraplet { + marine_call_parameters_v1::SecurityTetraplet { peer_pk, service_id, function_name, - json_path, + json_path: lambda, } } diff --git a/marine/src/host_imports/mod.rs b/marine/src/host_imports/mod.rs index 3e04a29ee..8ab01e53b 100644 --- a/marine/src/host_imports/mod.rs +++ b/marine/src/host_imports/mod.rs @@ -18,7 +18,9 @@ pub(crate) mod logger; mod call_parameters; mod mounted_binaries; -pub(crate) use call_parameters::create_call_parameters_import_v1; pub(crate) use call_parameters::create_call_parameters_import_v0; -pub(crate) use call_parameters::call_parameters_v1_to_v0; +pub(crate) use call_parameters::create_call_parameters_import_v1; +pub(crate) use call_parameters::create_call_parameters_import_v2; +pub(crate) use call_parameters::call_parameters_v2_to_v0; +pub(crate) use call_parameters::call_parameters_v2_to_v1; pub(crate) use mounted_binaries::create_mounted_binary_import; diff --git a/marine/src/lib.rs b/marine/src/lib.rs index 7528cb1b8..22434575b 100644 --- a/marine/src/lib.rs +++ b/marine/src/lib.rs @@ -64,6 +64,7 @@ pub use marine_core::ne_vec; pub use marine_module_interface::interface::itype_text_view; pub use marine_rs_sdk::CallParameters; +pub use marine_rs_sdk::ParticleParameters; pub use marine_rs_sdk::SecurityTetraplet; pub mod generic { diff --git a/marine/src/marine.rs b/marine/src/marine.rs index be709a3fa..27bc599ca 100644 --- a/marine/src/marine.rs +++ b/marine/src/marine.rs @@ -24,7 +24,8 @@ use crate::MemoryStats; use crate::module_loading::load_modules_from_fs; use crate::host_imports::logger::LoggerFilter; use crate::host_imports::logger::WASM_LOG_ENV_NAME; -use crate::host_imports::call_parameters_v1_to_v0; +use crate::host_imports::call_parameters_v2_to_v0; +use crate::host_imports::call_parameters_v2_to_v1; use crate::json_to_marine_err; use marine_wasm_backend_traits::WasmBackend; @@ -61,10 +62,12 @@ pub struct Marine { core: MarineCore, /// Parameters of call accessible by Wasm modules. - call_parameters_v0: Arc>, + call_parameters_v0: Arc>, + + call_parameters_v1: Arc>, /// Parameters of call accessible by Wasm modules. - call_parameters_v1: Arc>, + call_parameters_v2: Arc>, /// Cached module interfaces by names. module_interfaces_cache: HashMap, @@ -100,8 +103,9 @@ impl Marine { .total_memory_limit(config.total_memory_limit.unwrap_or(INFINITE_MEMORY_LIMIT)) .build(); let mut marine = MarineCore::new(core_config)?; - let call_parameters_v0 = Arc::>::default(); - let call_parameters_v1 = Arc::>::default(); + let call_parameters_v0 = Arc::>::default(); + let call_parameters_v1 = Arc::>::default(); + let call_parameters_v2 = Arc::>::default(); let modules_dir = config.modules_dir; @@ -123,6 +127,7 @@ impl Marine { Some(module.config), call_parameters_v0.clone(), call_parameters_v1.clone(), + call_parameters_v2.clone(), &logger_filter, )?; @@ -135,6 +140,7 @@ impl Marine { core: marine, call_parameters_v0, call_parameters_v1, + call_parameters_v2, module_interfaces_cache: HashMap::new(), }) } @@ -281,14 +287,20 @@ impl Marine { fn update_call_parameters(&mut self, call_parameters: CallParameters) { { // a separate code block to unlock the mutex ASAP and to avoid double locking - let mut cp = self.call_parameters_v1.lock(); + let mut cp = self.call_parameters_v2.lock(); *cp = call_parameters.clone(); } { // a separate code block to unlock the mutex ASAP and to avoid double locking let mut cp = self.call_parameters_v0.lock(); - *cp = call_parameters_v1_to_v0(call_parameters); + *cp = call_parameters_v2_to_v0(call_parameters.clone()); + } + + { + // a separate code block to unlock the mutex ASAP and to avoid double locking + let mut cp = self.call_parameters_v1.lock(); + *cp = call_parameters_v2_to_v1(call_parameters); } } } @@ -319,6 +331,7 @@ impl Marine { config, self.call_parameters_v0.clone(), self.call_parameters_v1.clone(), + self.call_parameters_v2.clone(), &logger_filter, )?; self.core diff --git a/marine/tests/call_parameters.rs b/marine/tests/call_parameters.rs index 3b082f777..0c2efe583 100644 --- a/marine/tests/call_parameters.rs +++ b/marine/tests/call_parameters.rs @@ -15,26 +15,95 @@ */ use marine::Marine; -use marine::IValue; use pretty_assertions::assert_eq; +use once_cell::sync::Lazy; -use std::path::PathBuf; +use serde_json::json; + +static CONFIG_V0: Lazy = Lazy::new(|| { + marine::TomlMarineConfig::load("./tests/wasm_tests/call_parameters_v0/Config.toml") + .expect("toml faas config should be created") +}); + +static CONFIG_V1: Lazy = Lazy::new(|| { + marine::TomlMarineConfig::load("./tests/wasm_tests/call_parameters_v1/Config.toml") + .expect("toml faas config should be created") +}); + +static CONFIG_V2: Lazy = Lazy::new(|| { + marine::TomlMarineConfig::load("./tests/wasm_tests/call_parameters_v2/Config.toml") + .expect("toml faas config should be created") +}); #[test] -pub fn call_parameters() { - let call_parameters_config_path = "../examples/call_parameters/Config.toml"; +pub fn call_parameters_v0() { + let mut faas = Marine::with_raw_config(CONFIG_V0.clone()) + .unwrap_or_else(|e| panic!("can't create Fluence FaaS instance: {}", e)); + + let init_peer_id = "init_peer_id"; + let service_id = "service_id"; + let service_creator_peer_id = "service_creator_peer_id"; + let worker_id = "worker_id"; + let host_id = "host_id"; + let particle_id = "particle_id"; + + let tetraplet = marine_rs_sdk::SecurityTetraplet { + function_name: "some_func_name".to_string(), + lambda: "some_lambda".to_string(), + ..Default::default() + }; + + let tetraplets = vec![vec![tetraplet]]; - let call_parameters_config_raw = std::fs::read(call_parameters_config_path) - .expect("../examples/call_parameters/Config.toml should presence"); + let particle = marine_rs_sdk::ParticleParameters { + id: particle_id.to_string(), + init_peer_id: init_peer_id.to_string(), + timestamp: 0, + ttl: 0, + script: "(null)".to_string(), + signature: vec![], + token: "token".to_string(), + }; + let call_parameters = marine_rs_sdk::CallParameters { + particle: particle.clone(), + service_id: service_id.to_string(), + service_creator_peer_id: service_creator_peer_id.to_string(), + host_id: host_id.to_string(), + worker_id: worker_id.to_string(), + tetraplets: tetraplets.clone(), + }; + + let result = faas + .call_with_json( + "call_parameters_v0", + "call_parameters", + json!([]), + call_parameters, + ) + .unwrap_or_else(|e| panic!("can't invoke call_parameters: {:?}", e)); - let mut call_parameters_config: marine::TomlMarineConfig = - toml::from_slice(&call_parameters_config_raw) - .expect("call_parameters config should be well-formed"); - call_parameters_config.modules_dir = - Some(PathBuf::from("../examples/call_parameters/artifacts")); + let expected = json!({ + "init_peer_id": particle.init_peer_id, + "service_id": service_id, + "service_creator_peer_id": service_creator_peer_id, + "host_id": host_id, + "particle_id": particle.id, + "tetraplets": [[{ + "peer_pk": "", + "service_id": "", + "function_name": "some_func_name", + "json_path": "some_lambda", + }]], + }); - let mut faas = Marine::with_raw_config(call_parameters_config) + let result_json: serde_json::Value = serde_json::from_str(result.as_str().unwrap()).unwrap(); + assert_eq!(expected, result_json,); +} + +#[test] +pub fn call_parameters_v1() { + let mut faas = Marine::with_raw_config(CONFIG_V1.clone()) .unwrap_or_else(|e| panic!("can't create Fluence FaaS instance: {}", e)); let init_peer_id = "init_peer_id"; @@ -46,37 +115,107 @@ pub fn call_parameters() { let tetraplet = marine_rs_sdk::SecurityTetraplet { function_name: "some_func_name".to_string(), - json_path: "some_json_path".to_string(), + lambda: "some_lambda".to_string(), ..Default::default() }; let tetraplets = vec![vec![tetraplet]]; + let particle = marine_rs_sdk::ParticleParameters { + id: particle_id.to_string(), + init_peer_id: init_peer_id.to_string(), + timestamp: 0, + ttl: 0, + script: "(null)".to_string(), + signature: vec![], + token: "token".to_string(), + }; let call_parameters = marine_rs_sdk::CallParameters { + particle: particle.clone(), + service_id: service_id.to_string(), + service_creator_peer_id: service_creator_peer_id.to_string(), + host_id: host_id.to_string(), + worker_id: worker_id.to_string(), + tetraplets: tetraplets.clone(), + }; + + let result = faas + .call_with_json( + "call_parameters_v1", + "call_parameters", + json!([]), + call_parameters, + ) + .unwrap_or_else(|e| panic!("can't invoke call_parameters: {:?}", e)); + + let expected = json!({ + "init_peer_id": particle.init_peer_id, + "service_id": service_id, + "service_creator_peer_id": service_creator_peer_id, + "host_id": host_id, + "worker_id": worker_id, + "particle_id": particle.id, + "tetraplets": [[{ + "peer_pk": "", + "service_id": "", + "function_name": "some_func_name", + "json_path": "some_lambda", + }]], + }); + + let result_json: serde_json::Value = serde_json::from_str(result.as_str().unwrap()).unwrap(); + assert_eq!(expected, result_json,); +} + +#[test] +pub fn call_parameters_v2() { + let mut faas = Marine::with_raw_config(CONFIG_V2.clone()) + .unwrap_or_else(|e| panic!("can't create Fluence FaaS instance: {}", e)); + + let init_peer_id = "init_peer_id"; + let service_id = "service_id"; + let service_creator_peer_id = "service_creator_peer_id"; + let worker_id = "worker_id"; + let host_id = "host_id"; + let particle_id = "particle_id"; + + let tetraplet = marine_rs_sdk::SecurityTetraplet { + function_name: "some_func_name".to_string(), + lambda: "some_lambda".to_string(), + ..Default::default() + }; + + let tetraplets = vec![vec![tetraplet]]; + + let particle = marine_rs_sdk::ParticleParameters { + id: particle_id.to_string(), init_peer_id: init_peer_id.to_string(), + timestamp: 0, + ttl: 0, + script: "(null)".to_string(), + signature: vec![], + token: "token".to_string(), + }; + let call_parameters = marine_rs_sdk::CallParameters { + particle: particle.clone(), service_id: service_id.to_string(), service_creator_peer_id: service_creator_peer_id.to_string(), host_id: host_id.to_string(), worker_id: worker_id.to_string(), - particle_id: particle_id.to_string(), tetraplets: tetraplets.clone(), }; let result = faas - .call_with_ivalues("call_parameters", "call_parameters", &[], call_parameters) + .call_with_json( + "call_parameters_v2", + "call_parameters", + json!([]), + call_parameters.clone(), + ) .unwrap_or_else(|e| panic!("can't invoke call_parameters: {:?}", e)); - assert_eq!( - result, - vec![IValue::String(format!( - "{}\n{}\n{}\n{}\n{}\n{}\n{:?}", - init_peer_id, - service_id, - service_creator_peer_id, - host_id, - worker_id, - particle_id, - tetraplets - ))] - ); + let expected = serde_json::to_value(call_parameters).unwrap(); + + let result_json: serde_json::Value = serde_json::from_str(result.as_str().unwrap()).unwrap(); + assert_eq!(expected, result_json,); } diff --git a/marine/tests/wasm_tests/arguments_passing/Cargo.toml b/marine/tests/wasm_tests/arguments_passing/Cargo.toml index 5f0d7c36e..3e304a448 100644 --- a/marine/tests/wasm_tests/arguments_passing/Cargo.toml +++ b/marine/tests/wasm_tests/arguments_passing/Cargo.toml @@ -14,5 +14,5 @@ name = "arguments_passing_effector" path = "src/effector.rs" [dependencies] -marine-rs-sdk = "0.12.0" +marine-rs-sdk = "0.13.0" safe-transmute = "0.11.0" diff --git a/marine/tests/wasm_tests/arrays_passing/Cargo.toml b/marine/tests/wasm_tests/arrays_passing/Cargo.toml index 3683e24c6..31d11ce42 100644 --- a/marine/tests/wasm_tests/arrays_passing/Cargo.toml +++ b/marine/tests/wasm_tests/arrays_passing/Cargo.toml @@ -14,5 +14,5 @@ name = "arrays_passing_effector" path = "src/effector.rs" [dependencies] -marine-rs-sdk = "0.12.0" +marine-rs-sdk = "0.13.0" safe-transmute = "0.11.0" diff --git a/marine/tests/wasm_tests/call_parameters_v0/Cargo.toml b/marine/tests/wasm_tests/call_parameters_v0/Cargo.toml new file mode 100644 index 000000000..bbe59aef0 --- /dev/null +++ b/marine/tests/wasm_tests/call_parameters_v0/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "call-parameters-v0-test" +version = "0.1.0" +authors = ["Fluence Labs"] +edition = "2021" +publish = false + +[[bin]] +name = "call_parameters_v0" +path = "src/main.rs" + +[dependencies] +marine-rs-sdk = "0.10.3" # do not update, host API v0 test +serde_json = "1.0.111" diff --git a/marine/tests/wasm_tests/call_parameters_v0/Config.toml b/marine/tests/wasm_tests/call_parameters_v0/Config.toml new file mode 100644 index 000000000..ba62e0b34 --- /dev/null +++ b/marine/tests/wasm_tests/call_parameters_v0/Config.toml @@ -0,0 +1,6 @@ +modules_dir = "./artifacts/" +total_memory_limit = "10 MiB" + +[[module]] +name = "call_parameters_v0" + diff --git a/marine/tests/wasm_tests/call_parameters_v0/src/main.rs b/marine/tests/wasm_tests/call_parameters_v0/src/main.rs new file mode 100644 index 000000000..0b810969e --- /dev/null +++ b/marine/tests/wasm_tests/call_parameters_v0/src/main.rs @@ -0,0 +1,25 @@ +/* + * Copyright 2024 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use marine_rs_sdk::marine; + +pub fn main() {} + +#[marine] +pub fn call_parameters() -> String { + let cp = marine_rs_sdk::get_call_parameters(); + serde_json::to_string(&cp).unwrap() +} diff --git a/marine/tests/wasm_tests/call_parameters_v1/Cargo.toml b/marine/tests/wasm_tests/call_parameters_v1/Cargo.toml new file mode 100644 index 000000000..c25559eba --- /dev/null +++ b/marine/tests/wasm_tests/call_parameters_v1/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "call-parameters-v1-test" +version = "0.1.0" +authors = ["Fluence Labs"] +edition = "2021" +publish = false + +[[bin]] +name = "call_parameters_v1" +path = "src/main.rs" + +[dependencies] +marine-rs-sdk = "0.12.0" # do not update, host API v1 test +serde_json = "1.0.111" diff --git a/marine/tests/wasm_tests/call_parameters_v1/Config.toml b/marine/tests/wasm_tests/call_parameters_v1/Config.toml new file mode 100644 index 000000000..59f36c7cb --- /dev/null +++ b/marine/tests/wasm_tests/call_parameters_v1/Config.toml @@ -0,0 +1,6 @@ +modules_dir = "./artifacts/" +total_memory_limit = "10 MiB" + +[[module]] +name = "call_parameters_v1" + diff --git a/marine/tests/wasm_tests/call_parameters_v1/src/main.rs b/marine/tests/wasm_tests/call_parameters_v1/src/main.rs new file mode 100644 index 000000000..0b810969e --- /dev/null +++ b/marine/tests/wasm_tests/call_parameters_v1/src/main.rs @@ -0,0 +1,25 @@ +/* + * Copyright 2024 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use marine_rs_sdk::marine; + +pub fn main() {} + +#[marine] +pub fn call_parameters() -> String { + let cp = marine_rs_sdk::get_call_parameters(); + serde_json::to_string(&cp).unwrap() +} diff --git a/marine/tests/wasm_tests/call_parameters_v2/Cargo.toml b/marine/tests/wasm_tests/call_parameters_v2/Cargo.toml new file mode 100644 index 000000000..ce35c189a --- /dev/null +++ b/marine/tests/wasm_tests/call_parameters_v2/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "call-parameters-v2-test" +version = "0.1.0" +authors = ["Fluence Labs"] +edition = "2021" +publish = false + +[[bin]] +name = "call_parameters_v2" +path = "src/main.rs" + +[dependencies] +marine-rs-sdk = "=0.13.0" # do not update, host API v2 test +serde_json = "1.0.111" diff --git a/marine/tests/wasm_tests/call_parameters_v2/Config.toml b/marine/tests/wasm_tests/call_parameters_v2/Config.toml new file mode 100644 index 000000000..4b7961389 --- /dev/null +++ b/marine/tests/wasm_tests/call_parameters_v2/Config.toml @@ -0,0 +1,6 @@ +modules_dir = "./artifacts/" +total_memory_limit = "10 MiB" + +[[module]] + name = "call_parameters_v2" + diff --git a/marine/tests/wasm_tests/call_parameters_v2/src/main.rs b/marine/tests/wasm_tests/call_parameters_v2/src/main.rs new file mode 100644 index 000000000..0b810969e --- /dev/null +++ b/marine/tests/wasm_tests/call_parameters_v2/src/main.rs @@ -0,0 +1,25 @@ +/* + * Copyright 2024 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +use marine_rs_sdk::marine; + +pub fn main() {} + +#[marine] +pub fn call_parameters() -> String { + let cp = marine_rs_sdk::get_call_parameters(); + serde_json::to_string(&cp).unwrap() +} diff --git a/marine/tests/wasm_tests/memory_limiting/Cargo.toml b/marine/tests/wasm_tests/memory_limiting/Cargo.toml index cfaa7e925..afaa5c987 100644 --- a/marine/tests/wasm_tests/memory_limiting/Cargo.toml +++ b/marine/tests/wasm_tests/memory_limiting/Cargo.toml @@ -14,5 +14,5 @@ name = "memory_limiting_effector" path = "src/effector.rs" [dependencies] -marine-rs-sdk = "0.12.0" +marine-rs-sdk = "0.13.0" safe-transmute = "0.11.0" diff --git a/marine/tests/wasm_tests/records_passing/Cargo.toml b/marine/tests/wasm_tests/records_passing/Cargo.toml index ee8f61ed3..4019be849 100644 --- a/marine/tests/wasm_tests/records_passing/Cargo.toml +++ b/marine/tests/wasm_tests/records_passing/Cargo.toml @@ -14,5 +14,5 @@ name = "records_passing_pure" path = "src/pure.rs" [dependencies] -marine-rs-sdk = "0.12.0" +marine-rs-sdk = "0.13.0" safe-transmute = "0.11.0" diff --git a/marine/tests/wasm_tests/wasi/Cargo.toml b/marine/tests/wasm_tests/wasi/Cargo.toml index 7bd67e9a7..73e3dd324 100644 --- a/marine/tests/wasm_tests/wasi/Cargo.toml +++ b/marine/tests/wasm_tests/wasi/Cargo.toml @@ -10,5 +10,5 @@ name = "wasi_effector" path = "src/effector.rs" [dependencies] -marine-rs-sdk = "0.12.0" +marine-rs-sdk = "0.13.0" safe-transmute = "0.11.0" diff --git a/tools/repl/Cargo.toml b/tools/repl/Cargo.toml index 6d75669d1..7fb7988a8 100644 --- a/tools/repl/Cargo.toml +++ b/tools/repl/Cargo.toml @@ -13,7 +13,7 @@ path = "src/main.rs" [dependencies] fluence-app-service = { path = "../../crates/fluence-app-service", version = "0.32.0", features = ["raw-module-api"] } -marine-rs-sdk-main = { version = "0.12.0", default-features = false, features = ["logger"] } +marine-rs-sdk-main = { version = "0.13.0", default-features = false, features = ["logger"] } marine-wasm-backend-traits = {path = "../../crates/wasm-backend-traits", version = "0.5.1" } anyhow = "1.0.75" diff --git a/tools/repl/src/repl.rs b/tools/repl/src/repl.rs index aceee94e3..f6ce6caab 100644 --- a/tools/repl/src/repl.rs +++ b/tools/repl/src/repl.rs @@ -22,6 +22,7 @@ use crate::ReplResult; use fluence_app_service::AppService; use fluence_app_service::CallParameters; +use fluence_app_service::ParticleParameters; use fluence_app_service::SecurityTetraplet; use fluence_app_service::MarineModuleConfig; use fluence_app_service::TomlAppServiceConfig; @@ -289,11 +290,42 @@ impl REPL { } #[derive(Clone, PartialEq, Default, Eq, Debug, Deserialize)] -struct PartialCallParameters { +struct PartialParticleParameters { + /// Id of the particle which execution resulted a call this service. + #[serde(default)] + pub id: String, + /// Peer id of the AIR script initiator. #[serde(default)] pub init_peer_id: String, + /// Unix timestamp of the particle start time. + #[serde(default)] + pub timestamp: u64, + + /// Time to live for this particle in milliseconds. + #[serde(default)] + pub ttl: u32, + + /// AIR script in this particle. + #[serde(default)] + pub script: String, + + /// Signature made by particle initiator -- init_peer_id. + #[serde(default)] + pub signature: Vec, + + /// particle.signature signed by host_id -- used for FS access. + #[serde(default)] + pub token: String, +} + +#[derive(Clone, PartialEq, Default, Eq, Debug, Deserialize)] +struct PartialCallParameters { + /// Peer id of the AIR script initiator. + #[serde(default)] + pub particle: PartialParticleParameters, + /// Id of the current service. #[serde(default)] pub service_id: String, @@ -310,10 +342,6 @@ struct PartialCallParameters { #[serde(default)] pub worker_id: String, - /// Id of the particle which execution resulted a call this service. - #[serde(default)] - pub particle_id: String, - /// Security tetraplets which described origin of the arguments. #[serde(default)] pub tetraplets: Vec>, @@ -322,22 +350,28 @@ struct PartialCallParameters { impl From for CallParameters { fn from(partial_call_params: PartialCallParameters) -> Self { let PartialCallParameters { - init_peer_id, + particle, service_id, service_creator_peer_id, host_id, worker_id, - particle_id, tetraplets, } = partial_call_params; Self { - init_peer_id, + particle: ParticleParameters { + id: particle.id, + init_peer_id: particle.init_peer_id, + timestamp: particle.timestamp, + ttl: particle.ttl, + script: particle.script, + signature: particle.signature, + token: particle.token, + }, service_id, service_creator_peer_id, host_id, worker_id, - particle_id, tetraplets, } }