Nearly there
This commit is contained in:
@@ -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<TransactionList>, WebSocketClient) {
|
||||
fn setup(name: &String) -> (BaseCrdt<TransactionList>, WebSocketClient, Ed25519KeyPair) {
|
||||
let side_dir = utils::home(name);
|
||||
let keys = keys::load_from_file(side_dir);
|
||||
let websocket_client = WebSocketClient::new();
|
||||
let crdt = BaseCrdt::<TransactionList>::new(&keys);
|
||||
|
||||
(crdt, websocket_client)
|
||||
(crdt, websocket_client, keys)
|
||||
}
|
||||
|
||||
@@ -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<TransactionList>,
|
||||
keys: fastcrypto::ed25519::Ed25519KeyPair,
|
||||
websocket_client: WebSocketClient,
|
||||
}
|
||||
|
||||
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 {
|
||||
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<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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user