Browse Source

Pass in `Role` and `Network` into projection actor

Projection actor needs this information for creating Cfds for display in the UI.
chore/leaner-release-process
Mariusz Klochowicz 3 years ago
parent
commit
b028ed6e84
No known key found for this signature in database GPG Key ID: 470C865699C8D4D
  1. 4
      daemon/src/maker.rs
  2. 18
      daemon/src/projection.rs
  3. 4
      daemon/src/taker.rs
  4. 9
      daemon/tests/harness/mod.rs

4
daemon/src/maker.rs

@ -5,6 +5,7 @@ use bdk::{bitcoin, FeeRate};
use clap::{Parser, Subcommand}; use clap::{Parser, Subcommand};
use daemon::auth::{self, MAKER_USERNAME}; use daemon::auth::{self, MAKER_USERNAME};
use daemon::db::load_all_cfds; use daemon::db::load_all_cfds;
use daemon::model::cfd::Role;
use daemon::model::WalletInfo; use daemon::model::WalletInfo;
use daemon::seed::Seed; use daemon::seed::Seed;
use daemon::tokio_ext::FutureExt; use daemon::tokio_ext::FutureExt;
@ -275,7 +276,8 @@ async fn main() -> Result<()> {
load_all_cfds(&mut conn).await? 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)); tasks.add(projection_context.run(proj_actor));
let listener_stream = futures::stream::poll_fn(move |ctx| { let listener_stream = futures::stream::poll_fn(move |ctx| {

18
daemon/src/projection.rs

@ -13,6 +13,7 @@ use xtra_productivity::xtra_productivity;
pub struct Actor { pub struct Actor {
tx: Tx, tx: Tx,
_state: State,
} }
pub struct Feeds { pub struct Feeds {
@ -25,7 +26,12 @@ pub struct Feeds {
} }
impl Actor { impl Actor {
pub fn new(init_cfds: Vec<ModelCfd>, init_quote: bitmex_price_feed::Quote) -> (Self, Feeds) { pub fn new(
role: Role,
network: Network,
init_cfds: Vec<ModelCfd>,
init_quote: bitmex_price_feed::Quote,
) -> (Self, Feeds) {
let (tx_cfds, rx_cfds) = watch::channel(init_cfds); let (tx_cfds, rx_cfds) = watch::channel(init_cfds);
let (tx_order, rx_order) = watch::channel(None); let (tx_order, rx_order) = watch::channel(None);
let (tx_update_cfd_feed, rx_update_cfd_feed) = watch::channel(HashMap::new()); let (tx_update_cfd_feed, rx_update_cfd_feed) = watch::channel(HashMap::new());
@ -41,6 +47,10 @@ impl Actor {
settlements: tx_update_cfd_feed, settlements: tx_update_cfd_feed,
connected_takers: tx_connected_takers, connected_takers: tx_connected_takers,
}, },
_state: State {
_role: role,
_network: network,
},
}, },
Feeds { Feeds {
cfds: rx_cfds, cfds: rx_cfds,
@ -64,6 +74,12 @@ struct Tx {
pub connected_takers: watch::Sender<Vec<Identity>>, pub connected_takers: watch::Sender<Vec<Identity>>,
} }
/// Internal struct to keep state in one place
struct State {
pub _role: Role,
pub _network: Network,
}
pub struct Update<T>(pub T); pub struct Update<T>(pub T);
#[xtra_productivity] #[xtra_productivity]

4
daemon/src/taker.rs

@ -5,6 +5,7 @@ use bdk::{bitcoin, FeeRate};
use clap::{Parser, Subcommand}; use clap::{Parser, Subcommand};
use daemon::connection::connect; use daemon::connection::connect;
use daemon::db::load_all_cfds; use daemon::db::load_all_cfds;
use daemon::model::cfd::Role;
use daemon::model::WalletInfo; use daemon::model::WalletInfo;
use daemon::seed::Seed; use daemon::seed::Seed;
use daemon::tokio_ext::FutureExt; use daemon::tokio_ext::FutureExt;
@ -255,7 +256,8 @@ async fn main() -> Result<()> {
load_all_cfds(&mut conn).await? 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)); tasks.add(projection_context.run(proj_actor));
let possible_addresses = resolve_maker_addresses(&opts.maker).await?; let possible_addresses = resolve_maker_addresses(&opts.maker).await?;

9
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::oracle::OracleActor;
use crate::harness::mocks::wallet::WalletActor; use crate::harness::mocks::wallet::WalletActor;
use crate::schnorrsig; use crate::schnorrsig;
use ::bdk::bitcoin::Network;
use daemon::bitmex_price_feed::Quote; use daemon::bitmex_price_feed::Quote;
use daemon::connection::{connect, ConnectionStatus}; 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::model::{self, Price, Timestamp, Usd};
use daemon::projection::{CfdOrder, Feeds, Identity}; use daemon::projection::{CfdOrder, Feeds, Identity};
use daemon::seed::Seed; use daemon::seed::Seed;
@ -179,7 +180,8 @@ impl Maker {
ask: Price::new(dec!(10000)).unwrap(), 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)); tasks.add(projection_context.run(proj_actor));
let address = listener.local_addr().unwrap(); let address = listener.local_addr().unwrap();
@ -300,7 +302,8 @@ impl Taker {
ask: Price::new(dec!(10000)).unwrap(), 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(projection_context.run(proj_actor));
tasks.add(connect( tasks.add(connect(

Loading…
Cancel
Save