use bft_json_crdt::json_crdt::{BaseCrdt, SignedOp}; use fastcrypto::ed25519::Ed25519KeyPair; use tokio::sync::mpsc; use crate::crdt::TransactionList; pub(crate) struct SideNode { crdt: BaseCrdt, keys: fastcrypto::ed25519::Ed25519KeyPair, incoming_receiver: mpsc::Receiver, } impl SideNode { pub(crate) fn new( crdt: BaseCrdt, keys: Ed25519KeyPair, incoming_receiver: mpsc::Receiver, ) -> Self { let node = Self { crdt, keys, incoming_receiver, }; node } pub(crate) async fn start(&mut self) { println!("Starting node..."); loop { let incoming = self.incoming_receiver.recv().await.unwrap(); println!("Received incoming message: {:?}", incoming); self.handle_incoming(incoming); } } fn handle_incoming(&mut self, incoming: SignedOp) { println!("WINNNINGINGINGINGINGIGNIGN"); self.crdt.apply(incoming.clone()); } pub(crate) fn _add_transaction_local( &mut self, transaction: serde_json::Value, ) -> bft_json_crdt::json_crdt::SignedOp { let last = self .crdt .doc .list .ops .last() .expect("couldn't find last op"); let signed_op = self .crdt .doc .list .insert(last.id, transaction) .sign(&self.keys); signed_op } /// Print the current state of the CRDT, can be used to debug pub(crate) fn _trace_crdt(&self) { println!("{:?}", self.crdt.doc.list); } }