From b028ed6e8419f1e0e34fe62ce4646f290f81fe05 Mon Sep 17 00:00:00 2001 From: Mariusz Klochowicz Date: Mon, 29 Nov 2021 16:21:28 +1030 Subject: [PATCH] Pass in `Role` and `Network` into projection actor Projection actor needs this information for creating Cfds for display in the UI. --- daemon/src/maker.rs | 4 +++- daemon/src/projection.rs | 18 +++++++++++++++++- daemon/src/taker.rs | 4 +++- daemon/tests/harness/mod.rs | 9 ++++++--- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/daemon/src/maker.rs b/daemon/src/maker.rs index 75c8db6..9e39f7d 100644 --- a/daemon/src/maker.rs +++ b/daemon/src/maker.rs @@ -5,6 +5,7 @@ use bdk::{bitcoin, FeeRate}; use clap::{Parser, Subcommand}; use daemon::auth::{self, MAKER_USERNAME}; use daemon::db::load_all_cfds; +use daemon::model::cfd::Role; use daemon::model::WalletInfo; use daemon::seed::Seed; use daemon::tokio_ext::FutureExt; @@ -275,7 +276,8 @@ async fn main() -> Result<()> { load_all_cfds(&mut conn).await? }; - let (proj_actor, projection_feeds) = projection::Actor::new(cfds, init_quote); + let (proj_actor, projection_feeds) = + projection::Actor::new(Role::Maker, bitcoin_network, cfds, init_quote); tasks.add(projection_context.run(proj_actor)); let listener_stream = futures::stream::poll_fn(move |ctx| { diff --git a/daemon/src/projection.rs b/daemon/src/projection.rs index 33147ae..0eb8561 100644 --- a/daemon/src/projection.rs +++ b/daemon/src/projection.rs @@ -13,6 +13,7 @@ use xtra_productivity::xtra_productivity; pub struct Actor { tx: Tx, + _state: State, } pub struct Feeds { @@ -25,7 +26,12 @@ pub struct Feeds { } impl Actor { - pub fn new(init_cfds: Vec, init_quote: bitmex_price_feed::Quote) -> (Self, Feeds) { + pub fn new( + role: Role, + network: Network, + init_cfds: Vec, + init_quote: bitmex_price_feed::Quote, + ) -> (Self, Feeds) { let (tx_cfds, rx_cfds) = watch::channel(init_cfds); let (tx_order, rx_order) = watch::channel(None); let (tx_update_cfd_feed, rx_update_cfd_feed) = watch::channel(HashMap::new()); @@ -41,6 +47,10 @@ impl Actor { settlements: tx_update_cfd_feed, connected_takers: tx_connected_takers, }, + _state: State { + _role: role, + _network: network, + }, }, Feeds { cfds: rx_cfds, @@ -64,6 +74,12 @@ struct Tx { pub connected_takers: watch::Sender>, } +/// Internal struct to keep state in one place +struct State { + pub _role: Role, + pub _network: Network, +} + pub struct Update(pub T); #[xtra_productivity] diff --git a/daemon/src/taker.rs b/daemon/src/taker.rs index 0e57871..87f4926 100644 --- a/daemon/src/taker.rs +++ b/daemon/src/taker.rs @@ -5,6 +5,7 @@ use bdk::{bitcoin, FeeRate}; use clap::{Parser, Subcommand}; use daemon::connection::connect; use daemon::db::load_all_cfds; +use daemon::model::cfd::Role; use daemon::model::WalletInfo; use daemon::seed::Seed; use daemon::tokio_ext::FutureExt; @@ -255,7 +256,8 @@ async fn main() -> Result<()> { load_all_cfds(&mut conn).await? }; - let (proj_actor, projection_feeds) = projection::Actor::new(cfds, init_quote); + let (proj_actor, projection_feeds) = + projection::Actor::new(Role::Taker, bitcoin_network, cfds, init_quote); tasks.add(projection_context.run(proj_actor)); let possible_addresses = resolve_maker_addresses(&opts.maker).await?; diff --git a/daemon/tests/harness/mod.rs b/daemon/tests/harness/mod.rs index b090ac4..70880b5 100644 --- a/daemon/tests/harness/mod.rs +++ b/daemon/tests/harness/mod.rs @@ -2,9 +2,10 @@ use crate::harness::mocks::monitor::MonitorActor; use crate::harness::mocks::oracle::OracleActor; use crate::harness::mocks::wallet::WalletActor; use crate::schnorrsig; +use ::bdk::bitcoin::Network; use daemon::bitmex_price_feed::Quote; use daemon::connection::{connect, ConnectionStatus}; -use daemon::model::cfd::Cfd; +use daemon::model::cfd::{Cfd, Role}; use daemon::model::{self, Price, Timestamp, Usd}; use daemon::projection::{CfdOrder, Feeds, Identity}; use daemon::seed::Seed; @@ -179,7 +180,8 @@ impl Maker { ask: Price::new(dec!(10000)).unwrap(), }; - let (proj_actor, feeds) = projection::Actor::new(vec![], dummy_quote); + let (proj_actor, feeds) = + projection::Actor::new(Role::Maker, Network::Testnet, vec![], dummy_quote); tasks.add(projection_context.run(proj_actor)); let address = listener.local_addr().unwrap(); @@ -300,7 +302,8 @@ impl Taker { ask: Price::new(dec!(10000)).unwrap(), }; - let (proj_actor, feeds) = projection::Actor::new(vec![], dummy_quote); + let (proj_actor, feeds) = + projection::Actor::new(Role::Taker, Network::Testnet, vec![], dummy_quote); tasks.add(projection_context.run(proj_actor)); tasks.add(connect(