From dc7cd68a239a852381b57d932c5f66640c7ba225 Mon Sep 17 00:00:00 2001 From: boneyard93501 <4523011+boneyard93501@users.noreply.github.com> Date: Mon, 11 Jul 2022 19:29:28 -0500 Subject: [PATCH] add ifs and utility services --- .../wasm-modules/ipfs-adapter/Cargo.toml | 22 ++++++ .../wasm-modules/ipfs-adapter/src/main.rs | 32 ++++++++ .../wasm-modules/ipfs-cli/Cargo.toml | 24 ++++++ .../wasm-modules/ipfs-cli/src/main.rs | 76 +++++++++++++++++++ .../wasm-modules/utilities/Cargo.toml | 25 ++++++ .../wasm-modules/utilities/src/main.rs | 28 +++++++ 6 files changed, 207 insertions(+) create mode 100644 aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-adapter/Cargo.toml create mode 100644 aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-adapter/src/main.rs create mode 100644 aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-cli/Cargo.toml create mode 100644 aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-cli/src/main.rs create mode 100644 aqua-examples/decentralized-blockchain-gateway/wasm-modules/utilities/Cargo.toml create mode 100644 aqua-examples/decentralized-blockchain-gateway/wasm-modules/utilities/src/main.rs diff --git a/aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-adapter/Cargo.toml b/aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-adapter/Cargo.toml new file mode 100644 index 0000000..9299242 --- /dev/null +++ b/aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-adapter/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "ipfs-adapter" +version = "0.1.5" +authors = ["boneyard93501 <4523011+boneyard93501@users.noreply.github.com>"] +edition = "2018" +description = "ipfs-adapter, a Marine wasi module" +license = "Apache-2.0" + +[[bin]] +name = "ipfs_adapter" +path = "src/main.rs" + +[dependencies] +marine-rs-sdk = { version = "0.6.15", features = ["logger"] } +log = "0.4.14" + +[dev-dependencies] +marine-rs-sdk-test = "0.6.0" + +[dev] +[profile.release] +opt-level = "s" diff --git a/aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-adapter/src/main.rs b/aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-adapter/src/main.rs new file mode 100644 index 0000000..bc31a3f --- /dev/null +++ b/aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-adapter/src/main.rs @@ -0,0 +1,32 @@ +/* + * Copyright 2022 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, module_manifest, MountedBinaryResult}; + +module_manifest!(); + +fn main() {} + +#[marine] +pub fn ipfs_request(cmd: Vec) -> MountedBinaryResult { + ipfs(cmd) +} + +#[marine] +#[link(wasm_import_module = "host")] +extern "C" { + pub fn ipfs(cmd: Vec) -> MountedBinaryResult; +} diff --git a/aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-cli/Cargo.toml b/aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-cli/Cargo.toml new file mode 100644 index 0000000..405849e --- /dev/null +++ b/aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-cli/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "ipfs-cli" +version = "0.1.5" +authors = ["boneyard93501 <4523011+boneyard93501@users.noreply.github.com>"] +edition = "2018" +description = "ipfs-cli, a Marine wasi module" +license = "Apache-2.0" + +[[bin]] +name = "ipfs_cli" +path = "src/main.rs" + +[dependencies] +marine-rs-sdk = { version = "0.6.15", features = ["logger"] } +log = "0.4.14" +serde_json = "1.0.81" +serde = "1.0.137" + +[dev-dependencies] +marine-rs-sdk-test = "0.6.0" + +[dev] +[profile.release] +opt-level = "s" diff --git a/aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-cli/src/main.rs b/aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-cli/src/main.rs new file mode 100644 index 0000000..2bfecf4 --- /dev/null +++ b/aqua-examples/decentralized-blockchain-gateway/wasm-modules/ipfs-cli/src/main.rs @@ -0,0 +1,76 @@ +/* + * Copyright 2022 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, module_manifest, MountedBinaryResult}; +use serde::{Deserialize, Serialize}; +use serde_json; + +module_manifest!(); + +fn main() {} + +#[marine] +pub struct ProviderInfo { + pub url: String, +} + +#[marine] +pub struct IpfsResult { + pub stdout: String, + pub stderr: String, +} + +#[marine] +#[derive(Deserialize, Serialize, Debug)] +pub struct FuncAddr { + peer_id: String, + service_id: String, +} + +impl FuncAddr { + pub fn new(peer_id: &str, service_id: &str) -> Self { + FuncAddr { + peer_id: peer_id.to_string(), + service_id: service_id.to_string(), + } + } +} + +#[marine] +pub fn params_from_cid(multiaddr: String, cid: String) -> Vec { + let ipfs_cmd = vec!["--api".to_string(), multiaddr, "cat".to_string(), cid]; + + let ipfs_response = ipfs_request(ipfs_cmd); + let stdout = String::from_utf8(ipfs_response.stdout).unwrap(); + let stderr = String::from_utf8(ipfs_response.stderr).unwrap(); + + if stderr.len() > 0 { + return vec![FuncAddr::new("", "")]; + } + match serde_json::from_str(&stdout) { + Ok(r) => r, + Err(e) => { + println!("err: {}", e); + vec![FuncAddr::new("", "")] + } + } +} + +#[marine] +#[link(wasm_import_module = "ipfs_adapter")] +extern "C" { + pub fn ipfs_request(cmd: Vec) -> MountedBinaryResult; +} diff --git a/aqua-examples/decentralized-blockchain-gateway/wasm-modules/utilities/Cargo.toml b/aqua-examples/decentralized-blockchain-gateway/wasm-modules/utilities/Cargo.toml new file mode 100644 index 0000000..8df6a08 --- /dev/null +++ b/aqua-examples/decentralized-blockchain-gateway/wasm-modules/utilities/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "utilities" +version = "0.1.0" +authors = ["boneyard93501 <4523011+boneyard93501@users.noreply.github.com>"] +edition = "2018" +description = "utilities, a Marine wasi module" +license = "Apache-2.0" + +[[bin]] +name = "utilities" +path = "src/main.rs" + +[dependencies] +marine-rs-sdk = { version = "0.6.15", features = ["logger"] } +log = "0.4.14" +serde_json = "1.0.81" +serde = "1.0.137" +streaming-stats = "0.2.3" + +[dev-dependencies] +marine-rs-sdk-test = "0.6.0" + +[dev] +[profile.release] +opt-level = "s" diff --git a/aqua-examples/decentralized-blockchain-gateway/wasm-modules/utilities/src/main.rs b/aqua-examples/decentralized-blockchain-gateway/wasm-modules/utilities/src/main.rs new file mode 100644 index 0000000..c3b9784 --- /dev/null +++ b/aqua-examples/decentralized-blockchain-gateway/wasm-modules/utilities/src/main.rs @@ -0,0 +1,28 @@ +/* + * Copyright 2022 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, module_manifest}; +use serde_json; + +module_manifest!(); + +fn main() {} + +#[marine] +fn kv_to_u64(kv_string: String, k: String) -> u64 { + let obj: serde_json::Value = serde_json::from_str(&kv_string).unwrap(); + obj[&k].as_u64().unwrap() +}