From e3c366e6346b2ecca8f85688069bbefc679dc94a Mon Sep 17 00:00:00 2001 From: SHANiTH K K <59169878+shanithkk@users.noreply.github.com> Date: Sun, 24 Mar 2024 18:09:58 +0530 Subject: [PATCH] feat: add readme and producer example (#108) * chore: added example for producer * chore: update the read me --- docs/runtime-lite.png | Bin 0 -> 59572 bytes runtime/lite/Readme.md | 58 +++++++++++++++ runtime/lite/examples/basic-producer.rs | 94 ++++++++++++++++++++++++ runtime/lite/scripts/docker-compose.yml | 5 +- runtime/lite/scripts/ssb-up.sh | 15 +++- runtime/lite/src/consumer.rs | 3 - 6 files changed, 168 insertions(+), 7 deletions(-) create mode 100644 docs/runtime-lite.png create mode 100644 runtime/lite/Readme.md create mode 100644 runtime/lite/examples/basic-producer.rs diff --git a/docs/runtime-lite.png b/docs/runtime-lite.png new file mode 100644 index 0000000000000000000000000000000000000000..186fc85c18ae03d0d5b3a827f159caff28cfdf93 GIT binary patch literal 59572 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�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 XoSnIOba|^c4nAvqSw0oas6+n&5C}f` literal 0 HcmV?d00001 diff --git a/runtime/lite/Readme.md b/runtime/lite/Readme.md new file mode 100644 index 00000000..b74f0a78 --- /dev/null +++ b/runtime/lite/Readme.md @@ -0,0 +1,58 @@ +# Aurras Lite Runtime +A runtime leveraging Secure Scuttlebutt for event streaming, designed to facilitate the seamless execution of workflows on the user side in response to specific events. +This runtime harnesses the capabilities of Secure Scuttlebutt, a decentralized messaging protocol, to efficiently stream events securely across a network. As events are emitted, the runtime captures and processes them, initiating corresponding workflows tailored to the user's preferences and requirements. + +![alt text](../../docs/runtime-lite.png) + +# Pre-requisites +- [SSB-server](https://github.com/ssbc/ssb-server) +- [Rust](https://www.rust-lang.org/tools/install) + + +## Setup +1. Install the ssb-server and start it. + + ssb-server start +2. Run the client producer or consumer or client + + corgo run --bin consumer + +### Integration test setup +1. Setup a network, got the script folder + + ./ssb-up.sh start + +2. Create an invite + + ./ssb-up.sh create-invite + +3. Copy the invite and run + + ./ssb-up.sh accept-invite + +4. Export the secret for connecting the client + + ./ssb-up.sh copy-secret + *Note:* This will export the secret to secret folder in the current directory. + +5. Move to lite directort and create a .env file and export the secret path port for consumer. + + SECRET=../aurras/runtime/lite/scripts/secret/consumer_secret + PORT=8015 + +6. Run the consumer client + + congo run --bin consumer + +7. Run a local polakdot chain for test purpose + + docker run -p 9944:9944 parity/polkadot:v1.0.0 --dev --rpc-external + +8. Run the basic example for producer with required environment variables + + PUB_ADDRESS="@pjrBmtifFU9P9NhoHRiPbn3O3xGUXtsLWJXhxLEpkug=.ed25519" + PRODUCER_SECRET=./runtime/lite/scripts/secret/consumer_secret + PRODUCER_PORT=8014 + *Note:* Get the pub address using script `./ssb-up.sh pub-whoami` + +9. Make transfer event on the chain manually. \ No newline at end of file diff --git a/runtime/lite/examples/basic-producer.rs b/runtime/lite/examples/basic-producer.rs new file mode 100644 index 00000000..215eae65 --- /dev/null +++ b/runtime/lite/examples/basic-producer.rs @@ -0,0 +1,94 @@ +use dotenv::dotenv; +use kuska_ssb::{api::dto::content::Mention, keystore::read_patchwork_config}; +use runtime::kuska_ssb_client::client::Client; + +#[tokio::main] +async fn main() { + dotenv().ok(); + println!("start"); + let secret = std::env::var("PRODUCER_SECRET").unwrap_or_else(|_| { + let home_dir = dirs::home_dir().unwrap(); + std::format!("{}/.ssb/secret", home_dir.to_string_lossy()) + }); + + let port = std::env::var("PRODUCER_PORT").unwrap_or("8014".to_string()); + let pub_address = std::env::var("PUB_ADDRESS").expect("Pub address must be provided"); + + let mut file = async_std::fs::File::open(secret).await.unwrap(); + let key = read_patchwork_config(&mut file).await.unwrap(); + + let mut client = Client::new(Some(key), "0.0.0.0".to_string(), port) + .await + .unwrap(); + + use subxt::{OnlineClient, PolkadotConfig}; + + #[subxt::subxt(runtime_metadata_path = "./src/modules/utils/polkadot_metadata_small.scale")] + pub mod polkadot {} + + let api = OnlineClient::::new().await.unwrap(); + + // Subscribe to all finalized blocks: + let mut blocks_sub = api.blocks().subscribe_finalized().await.unwrap(); + + // For each block, print a bunch of information about it: + while let Some(block) = blocks_sub.next().await { + let block = block.unwrap(); + + let block_number = block.header().number; + let block_hash = block.hash(); + + println!("Block #{block_number}:"); + println!(" Hash: {block_hash}"); + println!(" Extrinsics:"); + + // Code for automate transfer + // use subxt_signer::sr25519::dev; + // if block_number == 10 { + // let dest = dev::bob().public_key().into(); + // let tx = polkadot::tx().balances().transfer_allow_death(dest, 10_000); + // let from = dev::alice(); + // let _events = api + // .tx() + // .sign_and_submit_then_watch_default(&tx, &from) + // .await + // .unwrap(); + // } + + // Log each of the extrinsic with it's associated events: + let extrinsics = block.extrinsics().await.unwrap(); + for ext in extrinsics.iter() { + let ext = ext.unwrap(); + let events = ext.events().await.unwrap(); + let transfer = events + .find_first::() + .unwrap(); + + match transfer { + Some(transfer) => { + let from_addr = transfer.from.to_string(); + let to_addr = transfer.from.to_string(); + let amount = transfer.amount; + println!("{from_addr:?}"); + + let value = format!( + "{{\"from\":\"{}\",\"to\":\"{}\",\"amount\":\"{}\"}}", + from_addr, to_addr, amount + ); + + let menttion = Mention { + link: pub_address.clone(), + name: None, + }; + + let result = client + .publish(&value.to_string(), Some(vec![menttion])) + .await; + // assert!(result.is_ok()); + // break 'outer; + } + None => (), + } + } + } +} diff --git a/runtime/lite/scripts/docker-compose.yml b/runtime/lite/scripts/docker-compose.yml index 1e5dd0ed..45a65661 100644 --- a/runtime/lite/scripts/docker-compose.yml +++ b/runtime/lite/scripts/docker-compose.yml @@ -16,16 +16,17 @@ services: # cp /tmp/config /home/node/.ssb # entrypoint: ["ssb-server", "start"] command: "start" - restart: unless-stopped + restart: always consumer: image: kkshanith/ssb-server ports: - "8014:8008" # Map container port 8088 to host port - restart: unless-stopped + restart: on-failure producer: image: kkshanith/ssb-server ports: - "8015:8008" # Map container port 8088 to host port 8082 + restart: on-failure \ No newline at end of file diff --git a/runtime/lite/scripts/ssb-up.sh b/runtime/lite/scripts/ssb-up.sh index 69232d57..2a1ec541 100755 --- a/runtime/lite/scripts/ssb-up.sh +++ b/runtime/lite/scripts/ssb-up.sh @@ -90,6 +90,7 @@ accept_invite(){ producer_container=$(find_container "ssb-producer") consumer_accept=$(docker exec -it "$consumer_container" bash -c "ssb-server invite.accept $invite") + sleep 3 producer_accept=$(docker exec -it "$producer_container" bash -c "ssb-server invite.accept $invite") echo $consumer_accept echo $producer_accept @@ -102,8 +103,8 @@ copy_secrets_to(){ mkdir -p ./secret - docker cp $consumer_container:/root/.ssb/secret ./secret/consumer_secret - docker cp $producer_container:/root/.ssb/secret ./secret/producer_secret + docker cp $consumer_container:/root/.ssb/secret ./secret/producer_secret + docker cp $producer_container:/root/.ssb/secret ./secret/consumer_secret docker cp $pubs_container:/home/node/.ssb/secret ./secret/pubs_secret } start_specific_service() { @@ -111,6 +112,13 @@ start_specific_service() { docker-compose --project-name ssb up -d $service } +pub_whoami(){ + container=$(find_container "ssb-pubs") + whoami=$(docker exec -it "$container" bash -c "ssb-server whoami") + echo $whoami +} + + case "$1" in start) initialize @@ -136,6 +144,9 @@ case "$1" in copy-secret) copy_secrets_to ;; + pub-whoami) + pub_whoami + ;; *) echo "Invalid command. Please enter start, copy or stop." ;; diff --git a/runtime/lite/src/consumer.rs b/runtime/lite/src/consumer.rs index 16a70d52..22c8b765 100644 --- a/runtime/lite/src/consumer.rs +++ b/runtime/lite/src/consumer.rs @@ -12,9 +12,6 @@ use std::{ sync::{Arc, Mutex}, }; -// pub mod context; -// pub use context::*; - pub use runtime; use runtime::Context;