Nearly there

This commit is contained in:
Dave Hrycyszyn
2024-06-07 17:35:38 +01:00
parent d91a631fdc
commit 5d6a1e806a
3 changed files with 34 additions and 5 deletions

View File

@@ -1,5 +1,6 @@
use bft_json_crdt::json_crdt::BaseCrdt; use bft_json_crdt::json_crdt::BaseCrdt;
use cli::{parse_args, Commands}; use cli::{parse_args, Commands};
use fastcrypto::ed25519::Ed25519KeyPair;
use list_transaction_crdt::TransactionList; use list_transaction_crdt::TransactionList;
use node::SideNode; use node::SideNode;
use websocket::WebSocketClient; use websocket::WebSocketClient;
@@ -25,8 +26,8 @@ async fn main() {
let _ = init::init(utils::home(name), config); let _ = init::init(utils::home(name), config);
} }
Some(Commands::Run { name }) => { Some(Commands::Run { name }) => {
let (crdt, websocket_client) = setup(name); let (crdt, websocket_client, keys) = setup(name);
let side_node = &mut SideNode::new(websocket_client, crdt); let side_node = &mut SideNode::new(websocket_client, crdt, keys);
side_node.start().await; side_node.start().await;
} }
None => println!("No command provided. Exiting. See --help for more information."), 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 /// Wire everything up outside the application so we can test more easily later
fn setup(name: &String) -> (BaseCrdt<TransactionList>, WebSocketClient) { fn setup(name: &String) -> (BaseCrdt<TransactionList>, WebSocketClient, Ed25519KeyPair) {
let side_dir = utils::home(name); let side_dir = utils::home(name);
let keys = keys::load_from_file(side_dir); let keys = keys::load_from_file(side_dir);
let websocket_client = WebSocketClient::new(); let websocket_client = WebSocketClient::new();
let crdt = BaseCrdt::<TransactionList>::new(&keys); let crdt = BaseCrdt::<TransactionList>::new(&keys);
(crdt, websocket_client) (crdt, websocket_client, keys)
} }

View File

@@ -1,16 +1,23 @@
use bft_json_crdt::json_crdt::BaseCrdt; use bft_json_crdt::json_crdt::BaseCrdt;
use fastcrypto::ed25519::Ed25519KeyPair;
use crate::{list_transaction_crdt::TransactionList, websocket::WebSocketClient}; use crate::{list_transaction_crdt::TransactionList, websocket::WebSocketClient};
pub(crate) struct SideNode { pub(crate) struct SideNode {
crdt: BaseCrdt<TransactionList>, crdt: BaseCrdt<TransactionList>,
keys: fastcrypto::ed25519::Ed25519KeyPair,
websocket_client: WebSocketClient, websocket_client: WebSocketClient,
} }
impl SideNode { impl SideNode {
pub(crate) fn new(websocket_client: WebSocketClient, crdt: BaseCrdt<TransactionList>) -> Self { pub(crate) fn new(
websocket_client: WebSocketClient,
crdt: BaseCrdt<TransactionList>,
keys: Ed25519KeyPair,
) -> Self {
Self { Self {
crdt, crdt,
keys,
websocket_client, websocket_client,
} }
} }
@@ -18,4 +25,25 @@ impl SideNode {
pub(crate) async fn start(&mut self) { pub(crate) async fn start(&mut self) {
self.websocket_client.start().await; self.websocket_client.start().await;
} }
fn add_transaction_locally(
&mut self,
transaction: serde_json::Value,
) -> bft_json_crdt::json_crdt::SignedOp {
// let last: &Op<Transaction>;
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
}
} }