Skip to content

Commit 179d697

Browse files
authored
feat!: support new CallParameters and generate particle token [NET-767] (#2099)
* Support new CallParameters and generate particle token * fix unit test * fix tetraplets test * refactor A BIT
1 parent 23e556b commit 179d697

File tree

9 files changed

+135
-35
lines changed

9 files changed

+135
-35
lines changed

Diff for: Cargo.lock

+86-18
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ fluence-spell-dtos = "=0.7.0"
105105
fluence-spell-distro = "=0.7.0"
106106

107107
# marine
108-
fluence-app-service = { version = "0.32.0" }
108+
fluence-app-service = { version = "0.33.0" }
109109
marine-utils = "0.5.1"
110110
marine-it-parser = "0.15.1"
111111

Diff for: aquamarine/src/plumber.rs

+18-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616

1717
use eyre::eyre;
18+
use fluence_keypair::KeyPair;
1819
use futures::future::BoxFuture;
1920
use futures::FutureExt;
2021
use std::collections::hash_map::Entry;
@@ -180,7 +181,13 @@ impl<RT: AquaRuntime, F: ParticleFunctionStatic> Plumber<RT, F> {
180181
match entry {
181182
Entry::Occupied(actor) => Ok(actor.into_mut()),
182183
Entry::Vacant(entry) => {
183-
let params = ParticleParams::clone_from(particle.as_ref(), peer_scope);
184+
// TODO: move to a better place
185+
let particle_token = get_particle_token(
186+
&self.key_storage.root_key_pair,
187+
&particle.particle.signature,
188+
)?;
189+
let params =
190+
ParticleParams::clone_from(particle.as_ref(), peer_scope, particle_token);
184191
let functions = Functions::new(params, builtins.clone());
185192
let key_pair = self
186193
.key_storage
@@ -416,6 +423,16 @@ impl<RT: AquaRuntime, F: ParticleFunctionStatic> Plumber<RT, F> {
416423
}
417424
}
418425

426+
fn get_particle_token(key_pair: &KeyPair, signature: &Vec<u8>) -> eyre::Result<String> {
427+
let particle_token = key_pair.sign(signature.as_slice()).map_err(|err| {
428+
eyre!(
429+
"Could not produce particle token by signing the particle signature: {}",
430+
err
431+
)
432+
})?;
433+
Ok(bs58::encode(particle_token.to_vec()).into_string())
434+
}
435+
419436
/// Implements `now` by taking number of non-leap seconds from `Utc::now()`
420437
mod real_time {
421438
#[allow(dead_code)]

Diff for: crates/nox-tests/tests/tetraplets.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ async fn test_tetraplets() {
9595
let tetraplet = &ap_literal_tetraplets[0][0];
9696
assert_eq!(tetraplet.function_name, "");
9797
assert_eq!(tetraplet.peer_pk, client.peer_id.to_base58());
98-
assert_eq!(tetraplet.json_path, "");
98+
assert_eq!(tetraplet.lambda, "");
9999
assert_eq!(tetraplet.service_id, "");
100100

101101
let first_tetraplets = args.next().unwrap();
@@ -108,7 +108,7 @@ async fn test_tetraplets() {
108108
let tetraplet = &first_tetraplets[0][0];
109109
assert_eq!(tetraplet.function_name, "identity");
110110
assert_eq!(tetraplet.peer_pk, client.node.to_base58());
111-
assert_eq!(tetraplet.json_path, "");
111+
assert_eq!(tetraplet.lambda, "");
112112
assert_eq!(tetraplet.service_id, "op");
113113

114114
let ap_first_tetraplets = args.next().unwrap();
@@ -127,6 +127,6 @@ async fn test_tetraplets() {
127127
let tetraplet = &second_tetraplets[0][0];
128128
assert_eq!(tetraplet.function_name, "get_tetraplets");
129129
assert_eq!(tetraplet.peer_pk, client.node.to_base58());
130-
assert_eq!(tetraplet.json_path, ".$.[0].[0].peer_pk");
130+
assert_eq!(tetraplet.lambda, ".$.[0].[0].peer_pk");
131131
assert_eq!(tetraplet.service_id, tetraplets_service.id.as_str());
132132
}

Diff for: crates/nox-tests/tests/tetraplets/Cargo.toml

+3-5
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@ authors = ["Fluence Labs"]
55
edition = "2021"
66

77
[dependencies]
8-
marine-rs-sdk = "0.7.0"
9-
once_cell = { workspace = true }
8+
marine-rs-sdk = "0.13.0"
9+
once_cell = "1.19.0"
1010

1111
[[bin]]
1212
name = "tetraplets"
13-
path = "src/main.rs"
14-
15-
[workspace]
13+
path = "src/main.rs"
-24.5 KB
Binary file not shown.

Diff for: crates/nox-tests/tests/tetraplets/src/main.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
#![feature(once_cell)]
21
/*
32
* Copyright 2021 Fluence Labs Limited
43
*

Diff for: particle-execution/src/particle_params.rs

+17-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17+
use fluence_app_service::ParticleParameters;
1718
use fluence_libp2p::PeerId;
1819
use particle_protocol::Particle;
1920
use types::peer_scope::PeerScope;
@@ -31,10 +32,12 @@ pub struct ParticleParams {
3132
pub ttl: u32,
3233
pub script: String,
3334
pub signature: Vec<u8>,
35+
// Particle token, `signature` signed with the peer's private key
36+
pub token: String,
3437
}
3538

3639
impl ParticleParams {
37-
pub fn clone_from(particle: &Particle, peer_scope: PeerScope) -> Self {
40+
pub fn clone_from(particle: &Particle, peer_scope: PeerScope, token: String) -> Self {
3841
let Particle {
3942
id,
4043
init_peer_id,
@@ -53,6 +56,7 @@ impl ParticleParams {
5356
ttl: *ttl,
5457
script: script.clone(),
5558
signature: signature.clone(),
59+
token,
5660
}
5761
}
5862

@@ -67,4 +71,16 @@ impl ParticleParams {
6771
None
6872
}
6973
}
74+
75+
pub fn to_particle_parameters(self) -> ParticleParameters {
76+
ParticleParameters {
77+
id: self.id,
78+
init_peer_id: self.init_peer_id.to_string(),
79+
timestamp: self.timestamp,
80+
ttl: self.ttl,
81+
script: self.script,
82+
signature: self.signature,
83+
token: self.token,
84+
}
85+
}
7086
}

0 commit comments

Comments
 (0)