Nearly there
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user