Deduplicate SecuityTetraplet with marine-rs-sdk (#164)

This commit is contained in:
Mike Voronov 2021-11-04 16:59:05 +03:00 committed by GitHub
parent 653f42167a
commit d9f10cb26d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 84 additions and 71 deletions

48
Cargo.lock generated
View File

@ -681,9 +681,9 @@ dependencies = [
[[package]]
name = "errno"
version = "0.2.7"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa68f2fb9cae9d37c9b2b3584aba698a2e97f72d7aef7b9f7aa71d8b54ce46fe"
checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
dependencies = [
"errno-dragonfly",
"libc",
@ -867,9 +867,9 @@ dependencies = [
[[package]]
name = "half"
version = "1.8.0"
version = "1.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac5956d4e63858efaec57e0d6c1c2f6a41e1487f830314a324ccd7e2223a7ca0"
checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
[[package]]
name = "hashbrown"
@ -1074,9 +1074,9 @@ dependencies = [
[[package]]
name = "libc"
version = "0.2.104"
version = "0.2.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b2f96d100e1cf1929e7719b7edb3b90ab5298072638fccd77be9ce942ecdfce"
checksum = "a60553f9a9e039a333b4e9b20573b9e9b9c0bb3a11e201ccc48ef4283456d673"
[[package]]
name = "lock_api"
@ -1160,18 +1160,19 @@ dependencies = [
[[package]]
name = "marine-macro"
version = "0.6.14"
version = "0.6.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94b05da94255c230b7bf139c39c04447677b5d238579bf38ca7b3fcdc3e04993"
checksum = "dfc907943772cf966ebe2a2d462d09bc79e898ef102ed065ba3d3abcc93fbb71"
dependencies = [
"marine-macro-impl",
"marine-rs-sdk-main",
]
[[package]]
name = "marine-macro-impl"
version = "0.6.14"
version = "0.6.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7846a749f35186f923f71b3132a15add0735376e73978f41f552b92e9d43cbab"
checksum = "bfdbed3a10ae9b22df06bee8cd0023255358935aae8e8daf9d1a006cfaeeb11e"
dependencies = [
"proc-macro2",
"quote",
@ -1217,24 +1218,24 @@ dependencies = [
[[package]]
name = "marine-rs-sdk"
version = "0.6.14"
version = "0.6.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b349c8b5a09045a2a509f7ee5106a52c70ef6782febe9be6748044c6f8c477a"
checksum = "4d17d44016675abdf18caf3ac1bdd4437cc17ec0db019da141bb06a9ea991726"
dependencies = [
"marine-macro",
"marine-rs-sdk-main",
"marine-timestamp-macro",
"polyplets",
"serde",
]
[[package]]
name = "marine-rs-sdk-main"
version = "0.6.14"
version = "0.6.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e9d9b9ecd87f0dfa8ad9ee594e71f71d8b4f0b819d3b025632a1a6597063088"
checksum = "8ff262801664ce22f9d274504d6e8088c217034aba0ca431eca8d0258f3699c6"
dependencies = [
"log",
"marine-macro",
"serde",
]
@ -1270,9 +1271,9 @@ dependencies = [
[[package]]
name = "marine-timestamp-macro"
version = "0.6.14"
version = "0.6.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb6e81c03cc0c2f546680bf21e10f3514f69acfa4d4d84a8f2b17b2fcebe8ce9"
checksum = "85a9f5b1adeff98ac5a14cfc5fa814185a807ba4a0d3849c9f9e9fd868b27d1f"
dependencies = [
"chrono",
"quote",
@ -1542,9 +1543,10 @@ dependencies = [
[[package]]
name = "polyplets"
version = "0.1.2"
version = "0.2.0"
dependencies = [
"marine-rs-sdk",
"marine-macro",
"marine-rs-sdk-main",
"serde",
]
@ -1574,9 +1576,9 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
[[package]]
name = "proc-macro2"
version = "1.0.30"
version = "1.0.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edc3358ebc67bc8b7fa0c007f945b0b18226f78437d61bec735a9eb96b61ee70"
checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43"
dependencies = [
"unicode-xid",
]
@ -1901,9 +1903,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
[[package]]
name = "syn"
version = "1.0.80"
version = "1.0.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d010a1623fbd906d51d650a9916aaefc05ffa0e4053ff7fe601167f3e715d194"
checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966"
dependencies = [
"proc-macro2",
"quote",

View File

@ -29,3 +29,6 @@ debug = true
overflow-checks = true
debug-assertions = false
panic = "unwind"
[patch.crates-io]
polyplets = { path = "crates/air-lib/polyplets" }

View File

@ -21,7 +21,7 @@ path = "src/marine.rs"
air = { path = "../air" }
air-log-targets = { path = "../crates/air-lib/log-targets" }
marine-rs-sdk = { version = "0.6.11", features = ["logger"] }
marine-rs-sdk = { version = "0.6.15", features = ["logger"] }
# Keep 0.2.65 until this is resolved https://github.com/rustwasm/wasm-pack/issues/886
wasm-bindgen = "=0.2.65"

View File

@ -24,7 +24,7 @@ air-lambda-ast = { path = "../crates/air-lib/lambda/ast" }
air-lambda-parser = { path = "../crates/air-lib/lambda/parser" }
air-trace-handler = { path = "../crates/air-lib/trace-handler" }
polyplets = { path = "../crates/air-lib/polyplets" }
marine-rs-sdk = { version = "0.6.11", features = ["logger"] }
marine-rs-sdk = { version = "0.6.15", features = ["logger"] }
serde = { version = "1.0.118", features = [ "derive", "rc" ] }
serde_json = "1.0.61"

View File

@ -63,7 +63,7 @@ fn set_last_error<'i>(
// use tetraplet if they set, because an error could be propagated from data
// (from CallServiceFailed state) and exec_ctx.current_peer_id won't mean
// a peer where the error was occurred
Some(tetraplet) => tetraplet.borrow().triplet.peer_pk.clone(),
Some(tetraplet) => tetraplet.borrow().peer_pk.clone(),
None => exec_ctx.current_peer_id.to_string(),
};

View File

@ -62,7 +62,7 @@ pub(super) fn handle_prev_state<'i>(
}
RequestSentBy(..) => {
// check whether current node can execute this call
let is_current_peer = tetraplet.borrow().triplet.peer_pk.as_str() == exec_ctx.current_peer_id.as_str();
let is_current_peer = tetraplet.borrow().peer_pk.as_str() == exec_ctx.current_peer_id.as_str();
if is_current_peer {
// if this peer could execute this call early return and
return Ok(true);

View File

@ -31,7 +31,6 @@ use air_interpreter_interface::CallRequestParams;
use air_parser::ast::{AstVariable, CallInstrArgValue, CallOutputValue};
use air_trace_handler::MergerCallResult;
use air_trace_handler::TraceHandler;
use polyplets::ResolvedTriplet;
use std::cell::RefCell;
use std::rc::Rc;
@ -75,7 +74,7 @@ impl<'i> ResolvedCall<'i> {
}
// call can be executed only on peers with such peer_id
let tetraplet = &self.tetraplet.borrow().triplet;
let tetraplet = &self.tetraplet.borrow();
if tetraplet.peer_pk.as_str() != exec_ctx.current_peer_id.as_str() {
set_remote_call_result(tetraplet.peer_pk.clone(), exec_ctx, trace_ctx);
return Ok(());
@ -101,7 +100,7 @@ impl<'i> ResolvedCall<'i> {
fn prepare_request_params(
&self,
exec_ctx: &ExecutionCtx<'i>,
triplet: &ResolvedTriplet,
tetraplet: &SecurityTetraplet,
) -> ExecutionResult<CallRequestParams> {
let ResolvedArguments {
call_arguments,
@ -111,8 +110,8 @@ impl<'i> ResolvedCall<'i> {
let serialized_tetraplets = serde_json::to_string(&tetraplets).expect("default serializer shouldn't fail");
let request_params = CallRequestParams::new(
triplet.service_id.to_string(),
triplet.function_name.to_string(),
tetraplet.service_id.to_string(),
tetraplet.function_name.to_string(),
call_arguments,
serialized_tetraplets,
);

View File

@ -76,10 +76,10 @@ fn last_error_tetraplets() {
r#"Local service error, ret_code is 1, error message is '"error"'"#
);
let triplet = (*tetraplets.borrow()).as_ref().unwrap()[0][0].triplet.clone();
assert_eq!(triplet.peer_pk, fallible_peer_id);
assert_eq!(triplet.service_id, "fallible_call_service");
assert_eq!(triplet.function_name, "");
let tetraplet = (*tetraplets.borrow()).as_ref().unwrap()[0][0].clone();
assert_eq!(tetraplet.peer_pk, fallible_peer_id);
assert_eq!(tetraplet.service_id, "fallible_call_service");
assert_eq!(tetraplet.function_name, "");
assert_eq!(&(*tetraplets.borrow()).as_ref().unwrap()[0][0].json_path, "");
}

View File

@ -14,7 +14,6 @@
* limitations under the License.
*/
use air::ResolvedTriplet;
use air::SecurityTetraplet;
use air_test_utils::prelude::*;
@ -74,23 +73,17 @@ fn simple_fold() {
let result = checked_call_vm!(set_variable_vm, init_peer_id.clone(), script.clone(), "", "");
let mut data = result.data;
let first_arg_triplet = ResolvedTriplet {
let first_arg_tetraplet = SecurityTetraplet {
peer_pk: set_variable_vm_peer_id,
service_id,
function_name,
};
let first_arg_tetraplet = SecurityTetraplet {
triplet: first_arg_triplet,
json_path: String::new(),
};
let second_arg_triplet = ResolvedTriplet {
let second_arg_tetraplet = SecurityTetraplet {
peer_pk: init_peer_id.clone(),
service_id: String::new(),
function_name: String::new(),
};
let second_arg_tetraplet = SecurityTetraplet {
triplet: second_arg_triplet,
json_path: String::new(),
};
@ -137,23 +130,17 @@ fn fold_json_path() {
let init_peer_id = String::from("some_init_peer_id");
let result = checked_call_vm!(set_variable_vm, init_peer_id.clone(), script.clone(), "", "");
let first_arg_triplet = ResolvedTriplet {
let first_arg_tetraplet = SecurityTetraplet {
peer_pk: set_variable_vm_peer_id,
service_id,
function_name,
};
let first_arg_tetraplet = SecurityTetraplet {
triplet: first_arg_triplet,
json_path: String::from(".args"),
};
let second_arg_triplet = ResolvedTriplet {
let second_arg_tetraplet = SecurityTetraplet {
peer_pk: init_peer_id.clone(),
service_id: String::new(),
function_name: String::new(),
};
let second_arg_tetraplet = SecurityTetraplet {
triplet: second_arg_triplet,
json_path: String::new(),
};

View File

@ -10,6 +10,6 @@ path = "src/main.rs"
[dependencies]
air = { path = "../../../../../../air" }
marine-rs-sdk = "0.6.11"
marine-rs-sdk = "0.6.15"
[workspace]

View File

@ -10,6 +10,6 @@ path = "src/main.rs"
[dependencies]
air = { path = "../../../../../../air" }
marine-rs-sdk = "0.6.11"
marine-rs-sdk = "0.6.15"
[workspace]

View File

@ -19,7 +19,7 @@ path = "src/lib.rs"
air-interpreter-interface = { version = "0.7.0", path = "../../crates/air-lib/interpreter-interface" }
avm-data-store = { version = "0.1.0", path = "../../crates/data-store" }
fluence-faas = "0.9.2"
polyplets = { version = "0.1.2", path = "../../crates/air-lib/polyplets" }
polyplets = { version = "0.2.0", path = "../../crates/air-lib/polyplets" }
eyre = "0.6.5"
thiserror = "1.0.29"

View File

@ -16,7 +16,7 @@ name = "air_interpreter_interface"
path = "src/lib.rs"
[dependencies]
marine-rs-sdk = "0.6.11"
marine-rs-sdk = "0.6.15"
fluence-it-types = "0.3.0"
serde = "1.0.118"

View File

@ -1,6 +1,6 @@
[package]
name = "polyplets"
version = "0.1.2"
version = "0.2.0"
description = "Security primitives to verify origin of service calls in Fluence network"
authors = ["Fluence Labs"]
edition = "2018"
@ -16,6 +16,7 @@ name = "polyplets"
path = "src/lib.rs"
[dependencies]
marine-rs-sdk = { version = "0.6.11", features = ["logger"] }
serde = { version = "1.0.118", features = ["rc", "derive"] }
marine-macro = "0.6.15"
marine-rs-sdk-main = "0.6.15"
serde = { version = "1.0.118", features = ["rc", "derive"] }

View File

@ -30,3 +30,17 @@ mod triplet;
pub use tetraplet::SecurityTetraplet;
pub use triplet::ResolvedTriplet;
// This is a temporary solution that allow using the marine macro by importing
// just marine-macro crate instead of marine-rs-sdk.
#[allow(unused_extern_crates)]
extern crate self as marine_rs_sdk;
#[allow(unused_imports)]
mod internal {
pub(crate) use marine_rs_sdk_main::add_object_to_release;
pub(crate) use marine_rs_sdk_main::get_result_ptr;
pub(crate) use marine_rs_sdk_main::get_result_size;
pub(crate) use marine_rs_sdk_main::set_result_ptr;
pub(crate) use marine_rs_sdk_main::set_result_size;
}

View File

@ -16,15 +16,22 @@
use crate::ResolvedTriplet;
use marine_macro::marine;
use serde::Deserialize;
use serde::Serialize;
/// Describes an origin returned corresponding value.
/// Describes an origin that set corresponding value.
#[marine]
#[derive(Clone, Debug, Default, Eq, PartialEq, Hash, Serialize, Deserialize)]
pub struct SecurityTetraplet {
/// Describes origin of the value in the network.
#[serde(flatten)]
pub triplet: ResolvedTriplet,
/// Id of a peer where corresponding value was set.
pub peer_pk: String,
/// Id of a service that set corresponding value.
pub service_id: String,
/// Name of a function that returned corresponding value.
pub 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
@ -35,15 +42,11 @@ impl SecurityTetraplet {
/// Create a tetraplet for string literals defined in the script
/// such as variable here `(call ("" "") "" ["variable_1"])`.
pub fn literal_tetraplet(init_peer_id: String) -> Self {
let triplet = ResolvedTriplet {
Self {
// these variables represent the initiator peer
peer_pk: init_peer_id,
service_id: String::new(),
function_name: String::new(),
};
Self {
triplet,
// json path can't be applied to the string literals
json_path: String::new(),
}
@ -51,7 +54,9 @@ impl SecurityTetraplet {
pub fn from_triplet(triplet: ResolvedTriplet) -> Self {
Self {
triplet,
peer_pk: triplet.peer_pk,
service_id: triplet.service_id,
function_name: triplet.function_name,
json_path: String::new(),
}
}

View File

@ -19,6 +19,8 @@ use serde::Serialize;
/// ResolvedTriplet represents peer network location with all
/// variables, literals and etc resolved into final string.
/// This structure contains a subset of values that
/// SecurityTetraplet consists of.
#[derive(Debug, Default, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)]
pub struct ResolvedTriplet {
pub peer_pk: String,

View File

@ -17,6 +17,6 @@ path = "src/lib.rs"
air = { path = "../../../air" }
air-interpreter-interface = { path = "../interpreter-interface" }
avm-server = { path = "../../../avm/server" }
marine-rs-sdk = "0.6.13"
marine-rs-sdk = "0.6.15"
serde_json = "1.0.61"