From c3f5b2890b538ffc47f63f03ec85bdcb302c1255 Mon Sep 17 00:00:00 2001 From: Dave Hrycyszyn Date: Fri, 7 Jun 2024 18:42:28 +0100 Subject: [PATCH] More pushing code around --- side-node/src/crdt.rs | 34 ++++++++++++++++++ side-node/src/list_transaction_crdt.rs | 48 -------------------------- side-node/src/main.rs | 4 +-- side-node/src/node.rs | 5 ++- side-node/src/utils.rs | 11 ++++++ side-node/src/websocket.rs | 3 +- 6 files changed, 51 insertions(+), 54 deletions(-) create mode 100644 side-node/src/crdt.rs delete mode 100644 side-node/src/list_transaction_crdt.rs diff --git a/side-node/src/crdt.rs b/side-node/src/crdt.rs new file mode 100644 index 0000000..1a803e4 --- /dev/null +++ b/side-node/src/crdt.rs @@ -0,0 +1,34 @@ +use bft_crdt_derive::add_crdt_fields; +use bft_json_crdt::{ + json_crdt::{CrdtNode, IntoCrdtNode}, + list_crdt::ListCrdt, +}; +use serde::{Deserialize, Serialize}; + +#[add_crdt_fields] +#[derive(Clone, CrdtNode, Serialize, Deserialize)] +pub(crate) struct TransactionList { + pub(crate) list: ListCrdt, +} + +/// A fake Transaction struct we can use as a simulated payload +#[add_crdt_fields] +#[derive(Clone, CrdtNode, Serialize, Deserialize)] +pub(crate) struct Transaction { + from: String, + to: String, + amount: f64, +} + +// impl TransactionList { +// fn create(&mut self, keys: &Ed25519KeyPair) -> bft_json_crdt::json_crdt::SignedOp { +// // generate a placeholder transaction +// let transaction = _fake_transaction(keys.public().to_string()); + +// // next job is to keep adding to this guy +// let last: &Op; +// last = self.list.ops.last().expect("couldn't find last op"); +// let signed_op = self.list.insert(last.id, transaction.clone()).sign(&keys); +// signed_op +// } +// } diff --git a/side-node/src/list_transaction_crdt.rs b/side-node/src/list_transaction_crdt.rs deleted file mode 100644 index 4f353fb..0000000 --- a/side-node/src/list_transaction_crdt.rs +++ /dev/null @@ -1,48 +0,0 @@ -use bft_crdt_derive::add_crdt_fields; - -use bft_json_crdt::{ - json_crdt::{CrdtNode, IntoCrdtNode}, - keypair::{Ed25519KeyPair, KeyPair}, - list_crdt::ListCrdt, - op::Op, -}; - -use serde::{Deserialize, Serialize}; -use serde_json::{json, Value}; - -#[add_crdt_fields] -#[derive(Clone, CrdtNode, Serialize, Deserialize)] -pub(crate) struct TransactionList { - pub(crate) list: ListCrdt, -} - -impl TransactionList { - fn create(&mut self, keys: &Ed25519KeyPair) -> bft_json_crdt::json_crdt::SignedOp { - // generate a placeholder transaction - let transaction = fake_transaction(keys.public().to_string()); - - // next job is to keep adding to this guy - let last: &Op; - last = self.list.ops.last().expect("couldn't find last op"); - let signed_op = self.list.insert(last.id, transaction.clone()).sign(&keys); - signed_op - } -} - -/// A fake Transaction struct we can use as a simulated payload -#[add_crdt_fields] -#[derive(Clone, CrdtNode, Serialize, Deserialize)] -pub(crate) struct Transaction { - from: String, - to: String, - amount: f64, -} - -/// Generate a fake transaction with customizable from_pubkey String -fn fake_transaction(from_pubkey: String) -> Value { - json!({ - "from": from_pubkey, - "to": "Bob", - "amount": 1 - }) -} diff --git a/side-node/src/main.rs b/side-node/src/main.rs index bcecb9f..b7aa8de 100644 --- a/side-node/src/main.rs +++ b/side-node/src/main.rs @@ -1,14 +1,14 @@ use bft_json_crdt::json_crdt::BaseCrdt; use cli::{parse_args, Commands}; +use crdt::TransactionList; use fastcrypto::ed25519::Ed25519KeyPair; -use list_transaction_crdt::TransactionList; use node::SideNode; use websocket::WebSocketClient; pub(crate) mod cli; +pub(crate) mod crdt; pub(crate) mod init; pub(crate) mod keys; -pub(crate) mod list_transaction_crdt; pub(crate) mod node; pub(crate) mod utils; pub(crate) mod websocket; diff --git a/side-node/src/node.rs b/side-node/src/node.rs index cbe3e08..300765a 100644 --- a/side-node/src/node.rs +++ b/side-node/src/node.rs @@ -1,7 +1,7 @@ use bft_json_crdt::json_crdt::BaseCrdt; use fastcrypto::ed25519::Ed25519KeyPair; -use crate::{list_transaction_crdt::TransactionList, websocket::WebSocketClient}; +use crate::{crdt::TransactionList, websocket::WebSocketClient}; pub(crate) struct SideNode { crdt: BaseCrdt, @@ -26,11 +26,10 @@ impl SideNode { self.websocket_client.start().await; } - fn add_transaction_locally( + fn add_transaction_local( &mut self, transaction: serde_json::Value, ) -> bft_json_crdt::json_crdt::SignedOp { - // let last: &Op; let last = self .crdt .doc diff --git a/side-node/src/utils.rs b/side-node/src/utils.rs index ef94e2b..d847d37 100644 --- a/side-node/src/utils.rs +++ b/side-node/src/utils.rs @@ -1,5 +1,7 @@ use std::path::PathBuf; +use serde_json::{json, Value}; + pub(crate) const KEY_FILE: &str = "keys.pem"; pub(crate) const CONFIG_FILE: &str = "config.toml"; @@ -20,3 +22,12 @@ pub(crate) fn home(name: &String) -> std::path::PathBuf { path.push(name); path } + +/// Generate a fake transaction with customizable from_pubkey String +pub(crate) fn fake_transaction(from_pubkey: String) -> Value { + json!({ + "from": from_pubkey, + "to": "Bob", + "amount": 1 + }) +} diff --git a/side-node/src/websocket.rs b/side-node/src/websocket.rs index b229bea..a358084 100644 --- a/side-node/src/websocket.rs +++ b/side-node/src/websocket.rs @@ -39,7 +39,8 @@ impl ezsockets::ClientExt for WebSocketClient { async fn on_text(&mut self, text: String) -> Result<(), ezsockets::Error> { tracing::info!("received message: {text}"); - let incoming: bft_json_crdt::json_crdt::SignedOp = serde_json::from_str(&text).unwrap(); + let _incoming: bft_json_crdt::json_crdt::SignedOp = serde_json::from_str(&text).unwrap(); + // TODO: make this sucker work // self.bft_crdt.apply(incoming.clone()); Ok(()) }