Skip to content
This repository has been archived by the owner on Apr 15, 2024. It is now read-only.

Commit

Permalink
binary no_std
Browse files Browse the repository at this point in the history
  • Loading branch information
semenov-vladyslav committed Aug 19, 2020
1 parent 6ab1e78 commit ced7b73
Show file tree
Hide file tree
Showing 57 changed files with 1,535 additions and 1,254 deletions.
4 changes: 4 additions & 0 deletions .rustfmt.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
unstable_features = true
imports_layout = "Vertical"
merge_imports = true
comment_width = 120
max_width = 120
format_code_in_doc_comments = true
normalize_comments = true
normalize_doc_attributes = true
wrap_comments = true
2 changes: 1 addition & 1 deletion iota-streams-app-channels/examples/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ description = "A rust implementation of the IOTA Streams"

[dependencies]
iota-streams-core = { version = "0.2.0", path = "../../iota-streams-core" }
iota-streams-core-edsig = { version = "^0.1.0", path = "../../iota-streams-core-edsig" }
iota-streams-core-edsig = { version = "0.2.0", path = "../../iota-streams-core-edsig" }
iota-streams-protobuf3 = { version = "0.2.0", path = "../../iota-streams-protobuf3" }
iota-streams-app = { version = "0.2.0", path = "../../iota-streams-app" }
iota-streams-app-channels = { version = "0.2.0", path = "../../iota-streams-app-channels"}
Expand Down
4 changes: 2 additions & 2 deletions iota-streams-app-channels/examples/src/branching/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
pub mod single_branch;
pub mod multi_branch;
pub mod utils;
pub mod single_branch;
pub mod utils;
245 changes: 185 additions & 60 deletions iota-streams-app-channels/examples/src/branching/multi_branch.rs

Large diffs are not rendered by default.

193 changes: 144 additions & 49 deletions iota-streams-app-channels/examples/src/branching/single_branch.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use iota_streams_app::message::HasLink;
use iota_streams_app_channels::{
api::tangle::{
Address,
Expand All @@ -8,23 +9,29 @@ use iota_streams_app_channels::{
message,
};
use iota_streams_protobuf3::types::*;
use iota_streams_app::message::HasLink;

use anyhow::{
ensure,
Result,
};

use heapless::consts::U256;
use heapless::Vec;
use heapless::{
consts::U256,
Vec,
};

#[path = "utils.rs"]
mod utils;

pub fn example<T: Transport>(transport: &mut T, send_opt: T::SendOptions, recv_opt: T::RecvOptions, seed: &str) -> Result<()>
where
T::SendOptions: Copy,
T::RecvOptions: Copy,
pub fn example<T: Transport>(
transport: &mut T,
send_opt: T::SendOptions,
recv_opt: T::RecvOptions,
seed: &str,
) -> Result<()>
where
T::SendOptions: Copy,
T::RecvOptions: Copy,
{
let multi_branching_flag = &0_u8;
let mut author = Author::new(seed, multi_branching_flag == &1_u8);
Expand All @@ -50,29 +57,45 @@ pub fn example<T: Transport>(transport: &mut T, send_opt: T::SendOptions, recv_o
let mut v2 = Vec::<u8, U256>::new();
v2.extend_from_slice(&announcement_tag).unwrap();

let announcement_link = Address::from_str(&hex::encode(announcement_address), &hex::encode(announcement_tag)).unwrap();
let announcement_link =
Address::from_str(&hex::encode(announcement_address), &hex::encode(announcement_tag)).unwrap();
println!("Announcement link at: {}", &announcement_link);
{
let msg = transport.recv_message_with_options(&announcement_link, multi_branching_flag.clone(), recv_opt).unwrap();
let msg = transport
.recv_message_with_options(&announcement_link, multi_branching_flag.clone(), recv_opt)
.unwrap();
let preparsed = msg.parse_header().unwrap();
ensure!(preparsed.check_content_type(&message::announce::TYPE), "Message is not an announcement");
ensure!(
preparsed.check_content_type(&message::announce::TYPE),
"Message is not an announcement"
);

subscriberA.unwrap_announcement(preparsed.clone()).unwrap();
ensure!((author.channel_address() == subscriberA.channel_address().unwrap()),
"SubscriberA channel address does not match Author channel address");
ensure!(
(author.channel_address() == subscriberA.channel_address().unwrap()),
"SubscriberA channel address does not match Author channel address"
);
subscriberB.unwrap_announcement(preparsed.clone()).unwrap();
ensure!(subscriberA.channel_address() == subscriberB.channel_address(),
"SubscriberB channel address does not match Author channel address");
ensure!(
subscriberA.channel_address() == subscriberB.channel_address(),
"SubscriberB channel address does not match Author channel address"
);
subscriberC.unwrap_announcement(preparsed).unwrap();
ensure!(subscriberA.channel_address() == subscriberC.channel_address(),
"SubscriberC channel address does not match Author channel address");

ensure!(subscriberA
.channel_address()
.map_or(false, |appinst| appinst == announcement_link.base()),
"SubscriberA app instance does not match announcement link base");
ensure!(subscriberA.get_branching_flag() == author.get_branching_flag(),
"Subscribers should have the same branching flag as the author after unwrapping");
ensure!(
subscriberA.channel_address() == subscriberC.channel_address(),
"SubscriberC channel address does not match Author channel address"
);

ensure!(
subscriberA
.channel_address()
.map_or(false, |appinst| appinst == announcement_link.base()),
"SubscriberA app instance does not match announcement link base"
);
ensure!(
subscriberA.get_branching_flag() == author.get_branching_flag(),
"Subscribers should have the same branching flag as the author after unwrapping"
);
}

println!("\nSubscribe A");
Expand All @@ -84,9 +107,15 @@ pub fn example<T: Transport>(transport: &mut T, send_opt: T::SendOptions, recv_o
};

{
let msg = transport.recv_message_with_options(&subscribeA_link, multi_branching_flag.clone(), recv_opt).unwrap();
let msg = transport
.recv_message_with_options(&subscribeA_link, multi_branching_flag.clone(), recv_opt)
.unwrap();
let preparsed = msg.parse_header()?;
ensure!(preparsed.check_content_type(&message::subscribe::TYPE), "Wrong message type: {}", preparsed.header.content_type);
ensure!(
preparsed.check_content_type(&message::subscribe::TYPE),
"Wrong message type: {}",
preparsed.header.content_type
);
author.unwrap_subscribe(preparsed)?;
}

Expand All @@ -99,9 +128,15 @@ pub fn example<T: Transport>(transport: &mut T, send_opt: T::SendOptions, recv_o
};

{
let msg = transport.recv_message_with_options(&subscribeB_link, multi_branching_flag.clone(), recv_opt).unwrap();
let msg = transport
.recv_message_with_options(&subscribeB_link, multi_branching_flag.clone(), recv_opt)
.unwrap();
let preparsed = msg.parse_header()?;
ensure!(preparsed.check_content_type(&message::subscribe::TYPE), "Wrong message type: {}", preparsed.header.content_type);
ensure!(
preparsed.check_content_type(&message::subscribe::TYPE),
"Wrong message type: {}",
preparsed.header.content_type
);
author.unwrap_subscribe(preparsed)?;
}

Expand All @@ -114,9 +149,15 @@ pub fn example<T: Transport>(transport: &mut T, send_opt: T::SendOptions, recv_o
};

{
let msg = transport.recv_message_with_options(&previous_msg_link, multi_branching_flag.clone(), recv_opt).unwrap();
let msg = transport
.recv_message_with_options(&previous_msg_link, multi_branching_flag.clone(), recv_opt)
.unwrap();
let preparsed = msg.parse_header()?;
ensure!(preparsed.check_content_type(&message::keyload::TYPE), "Wrong message type: {}", preparsed.header.content_type);
ensure!(
preparsed.check_content_type(&message::keyload::TYPE),
"Wrong message type: {}",
preparsed.header.content_type
);

let resultC = subscriberC.unwrap_keyload(preparsed.clone());
ensure!(resultC.is_err(), "SubscriberC should not be able to unwrap the keyload");
Expand All @@ -127,16 +168,24 @@ pub fn example<T: Transport>(transport: &mut T, send_opt: T::SendOptions, recv_o

println!("\nSigned packet");
let previous_msg_link = {
let msg = author.sign_packet(&previous_msg_link, &public_payload, &masked_payload).unwrap();
let msg = author
.sign_packet(&previous_msg_link, &public_payload, &masked_payload)
.unwrap();
transport.send_message_with_options(&msg.0, send_opt)?;
println!("Signed packet at {}", &msg.0.link.msgid);
msg.0.link
};

{
let msg = transport.recv_message_with_options(&previous_msg_link, multi_branching_flag.clone(), recv_opt).unwrap();
let msg = transport
.recv_message_with_options(&previous_msg_link, multi_branching_flag.clone(), recv_opt)
.unwrap();
let preparsed = msg.parse_header()?;
ensure!(preparsed.check_content_type(&message::signed_packet::TYPE), "Wrong message type: {}", preparsed.header.content_type);
ensure!(
preparsed.check_content_type(&message::signed_packet::TYPE),
"Wrong message type: {}",
preparsed.header.content_type
);

let (unwrapped_public, unwrapped_masked) = subscriberA.unwrap_signed_packet(preparsed)?;
ensure!(public_payload == unwrapped_public, "Public payloads do not match");
Expand All @@ -148,92 +197,138 @@ pub fn example<T: Transport>(transport: &mut T, send_opt: T::SendOptions, recv_o

println!("\nTagged packet 1 - SubscriberA");
let previous_msg_link = {
let msg = subscriberA.tag_packet(&previous_msg_link, &public_payload, &masked_payload).unwrap();
let msg = subscriberA
.tag_packet(&previous_msg_link, &public_payload, &masked_payload)
.unwrap();
transport.send_message_with_options(&msg.0, send_opt)?;
println!("Tagged packet at {}", &msg.0.link.msgid);
msg.0.link
};

{
let msg = transport.recv_message_with_options(&previous_msg_link, multi_branching_flag.clone(), recv_opt).unwrap();
let msg = transport
.recv_message_with_options(&previous_msg_link, multi_branching_flag.clone(), recv_opt)
.unwrap();
let preparsed = msg.parse_header()?;
ensure!(preparsed.check_content_type(&message::tagged_packet::TYPE), "Wrong message type: {}", preparsed.header.content_type);
ensure!(
preparsed.check_content_type(&message::tagged_packet::TYPE),
"Wrong message type: {}",
preparsed.header.content_type
);

let (unwrapped_public, unwrapped_masked) = author.unwrap_tagged_packet(preparsed.clone())?;
ensure!(public_payload == unwrapped_public, "Public payloads do not match");
ensure!(masked_payload == unwrapped_masked, "Masked payloads do not match");

let resultC = subscriberC.unwrap_tagged_packet(preparsed);
ensure!(resultC.is_err(), "Subscriber C should not be able to access this message");
ensure!(
resultC.is_err(),
"Subscriber C should not be able to access this message"
);
}

println!("\nTagged packet 2 - SubscriberA");
let previous_msg_link = {
let msg = subscriberA.tag_packet(&previous_msg_link, &public_payload, &masked_payload).unwrap();
let msg = subscriberA
.tag_packet(&previous_msg_link, &public_payload, &masked_payload)
.unwrap();
transport.send_message_with_options(&msg.0, send_opt)?;
println!("Tagged packet at {}", &msg.0.link.msgid);
msg.0.link
};

{
let msg = transport.recv_message_with_options(&previous_msg_link, multi_branching_flag.clone(), recv_opt).unwrap();
let msg = transport
.recv_message_with_options(&previous_msg_link, multi_branching_flag.clone(), recv_opt)
.unwrap();
let preparsed = msg.parse_header()?;
ensure!(preparsed.check_content_type(&message::tagged_packet::TYPE), "Wrong message type: {}", preparsed.header.content_type);
ensure!(
preparsed.check_content_type(&message::tagged_packet::TYPE),
"Wrong message type: {}",
preparsed.header.content_type
);
}

println!("\nTagged packet 3 - SubscriberA");
let previous_msg_link = {
let msg = subscriberA.tag_packet(&previous_msg_link, &public_payload, &masked_payload).unwrap();
let msg = subscriberA
.tag_packet(&previous_msg_link, &public_payload, &masked_payload)
.unwrap();
transport.send_message_with_options(&msg.0, send_opt)?;
println!("Tagged packet at {}", &msg.0.link.msgid);
msg.0.link
};

{
let msg = transport.recv_message_with_options(&previous_msg_link, multi_branching_flag.clone(), recv_opt).unwrap();
let msg = transport
.recv_message_with_options(&previous_msg_link, multi_branching_flag.clone(), recv_opt)
.unwrap();
let preparsed = msg.parse_header()?;
ensure!(preparsed.check_content_type(&message::tagged_packet::TYPE), "Wrong message type: {}", preparsed.header.content_type);
ensure!(
preparsed.check_content_type(&message::tagged_packet::TYPE),
"Wrong message type: {}",
preparsed.header.content_type
);
}

println!("\nSubscriber B fetching transactions...");
utils::s_fetch_next_messages(&mut subscriberB, transport, recv_opt, multi_branching_flag.clone());

println!("\nTagged packet 4 - SubscriberB");
let previous_msg_link = {
let msg = subscriberB.tag_packet(&previous_msg_link, &public_payload, &masked_payload).unwrap();
let msg = subscriberB
.tag_packet(&previous_msg_link, &public_payload, &masked_payload)
.unwrap();
transport.send_message_with_options(&msg.0, send_opt)?;
println!("Tagged packet at {}", &msg.0.link.msgid);
msg.0.link
};

{
let msg = transport.recv_message_with_options(&previous_msg_link, multi_branching_flag.clone(), recv_opt).unwrap();
let msg = transport
.recv_message_with_options(&previous_msg_link, multi_branching_flag.clone(), recv_opt)
.unwrap();
let preparsed = msg.parse_header()?;
ensure!(preparsed.check_content_type(&message::tagged_packet::TYPE), "Wrong message type: {}", preparsed.header.content_type);
ensure!(
preparsed.check_content_type(&message::tagged_packet::TYPE),
"Wrong message type: {}",
preparsed.header.content_type
);

let (unwrapped_public, unwrapped_masked) = subscriberA.unwrap_tagged_packet(preparsed.clone())?;
ensure!(public_payload == unwrapped_public, "Public payloads do not match");
ensure!(masked_payload == unwrapped_masked, "Masked payloads do not match");

let resultC = subscriberC.unwrap_tagged_packet(preparsed);
ensure!(resultC.is_err(), "Subscriber C should not be able to access this message");
ensure!(
resultC.is_err(),
"Subscriber C should not be able to access this message"
);
}

println!("\nAuthor fetching transactions...");
utils::a_fetch_next_messages(&mut author, transport, recv_opt, multi_branching_flag.clone());

println!("\nSigned packet");
let previous_msg_link = {
let msg = author.sign_packet(&previous_msg_link, &public_payload, &masked_payload).unwrap();
let msg = author
.sign_packet(&previous_msg_link, &public_payload, &masked_payload)
.unwrap();
transport.send_message_with_options(&msg.0, send_opt)?;
println!("Signed packet at {}", &msg.0.link.msgid);
msg.0.link
};

{
let msg = transport.recv_message_with_options(&previous_msg_link, multi_branching_flag.clone(), recv_opt).unwrap();
let msg = transport
.recv_message_with_options(&previous_msg_link, multi_branching_flag.clone(), recv_opt)
.unwrap();
let preparsed = msg.parse_header()?;
ensure!(preparsed.check_content_type(&message::signed_packet::TYPE), "Wrong message type: {}", preparsed.header.content_type);
ensure!(
preparsed.check_content_type(&message::signed_packet::TYPE),
"Wrong message type: {}",
preparsed.header.content_type
);

let (unwrapped_public, unwrapped_masked) = subscriberA.unwrap_signed_packet(preparsed.clone())?;
ensure!(public_payload == unwrapped_public, "Public payloads do not match");
Expand Down
Loading

0 comments on commit ced7b73

Please sign in to comment.