diff --git a/side-node/src/main.rs b/side-node/src/main.rs index e6bb301..bcecb9f 100644 --- a/side-node/src/main.rs +++ b/side-node/src/main.rs @@ -1,5 +1,6 @@ use bft_json_crdt::json_crdt::BaseCrdt; use cli::{parse_args, Commands}; +use fastcrypto::ed25519::Ed25519KeyPair; use list_transaction_crdt::TransactionList; use node::SideNode; use websocket::WebSocketClient; @@ -25,8 +26,8 @@ async fn main() { let _ = init::init(utils::home(name), config); } Some(Commands::Run { name }) => { - let (crdt, websocket_client) = setup(name); - let side_node = &mut SideNode::new(websocket_client, crdt); + let (crdt, websocket_client, keys) = setup(name); + let side_node = &mut SideNode::new(websocket_client, crdt, keys); side_node.start().await; } None => println!("No command provided. Exiting. See --help for more information."), @@ -34,11 +35,11 @@ async fn main() { } /// Wire everything up outside the application so we can test more easily later -fn setup(name: &String) -> (BaseCrdt, WebSocketClient) { +fn setup(name: &String) -> (BaseCrdt, WebSocketClient, Ed25519KeyPair) { let side_dir = utils::home(name); let keys = keys::load_from_file(side_dir); let websocket_client = WebSocketClient::new(); let crdt = BaseCrdt::::new(&keys); - (crdt, websocket_client) + (crdt, websocket_client, keys) } diff --git a/side-node/src/node.rs b/side-node/src/node.rs index f624d79..cbe3e08 100644 --- a/side-node/src/node.rs +++ b/side-node/src/node.rs @@ -1,16 +1,23 @@ use bft_json_crdt::json_crdt::BaseCrdt; +use fastcrypto::ed25519::Ed25519KeyPair; use crate::{list_transaction_crdt::TransactionList, websocket::WebSocketClient}; pub(crate) struct SideNode { crdt: BaseCrdt, + keys: fastcrypto::ed25519::Ed25519KeyPair, websocket_client: WebSocketClient, } impl SideNode { - pub(crate) fn new(websocket_client: WebSocketClient, crdt: BaseCrdt) -> Self { + pub(crate) fn new( + websocket_client: WebSocketClient, + crdt: BaseCrdt, + keys: Ed25519KeyPair, + ) -> Self { Self { crdt, + keys, websocket_client, } } @@ -18,4 +25,25 @@ impl SideNode { pub(crate) async fn start(&mut self) { self.websocket_client.start().await; } + + fn add_transaction_locally( + &mut self, + transaction: serde_json::Value, + ) -> bft_json_crdt::json_crdt::SignedOp { + // let last: &Op; + 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 + } } diff --git a/side-node/src/websocket/mod.rs b/side-node/src/websocket.rs similarity index 100% rename from side-node/src/websocket/mod.rs rename to side-node/src/websocket.rs