Browse Source

Save counterparty identity for cfds to the database

We need this on the maker side to be able to get stats on what takers do.
For the taker it will also become relevant in the future so it is not wrong to add it.
release/0.3.1
Daniel Karzel 3 years ago
parent
commit
95d8b7c9ab
No known key found for this signature in database GPG Key ID: 30C3FC2E438ADB6E
  1. 25
      daemon/migrations/20211208000000_associate_counterpart_identity_with_cfd.sql
  2. 76
      daemon/sqlx-data.json
  3. 42
      daemon/src/db.rs
  4. 3
      daemon/src/lib.rs
  5. 1
      daemon/src/maker_cfd.rs
  6. 5
      daemon/src/model/cfd.rs
  7. 3
      daemon/src/projection.rs
  8. 1
      daemon/src/setup_maker.rs
  9. 7
      daemon/src/setup_taker.rs
  10. 5
      daemon/src/taker.rs
  11. 7
      daemon/src/taker_cfd.rs
  12. 1
      daemon/tests/harness/mod.rs
  13. 2
      maker-frontend/src/components/Types.tsx
  14. 2
      taker-frontend/src/types.ts

25
daemon/migrations/20211208000000_associate_counterpart_identity_with_cfd.sql

@ -0,0 +1,25 @@
-- Add migration script here
drop table cfd_states;
drop table cfds;
create table if not exists cfds
(
id integer primary key autoincrement,
order_id integer unique not null,
order_uuid text unique not null,
quantity_usd text not null,
counterparty text not null,
foreign key (order_id) references orders (id)
);
create unique index if not exists cfd_order_uuid
on cfds (order_uuid);
create table if not exists cfd_states
(
id integer primary key autoincrement,
cfd_id integer not null,
state text not null,
foreign key (cfd_id) references cfds (id)
);

76
daemon/sqlx-data.json

@ -108,8 +108,8 @@
]
}
},
"278833084178753ca86aa8bf9ac50fad8b6fd22dd978e2c803a8b7ba79bd5e1d": {
"query": "\n with ord as (\n select\n id as order_id,\n uuid,\n trading_pair,\n position,\n initial_price,\n min_quantity,\n max_quantity,\n leverage,\n liquidation_price,\n creation_timestamp_seconds as ts_secs,\n settlement_time_interval_seconds as settlement_time_interval_secs,\n origin,\n oracle_event_id,\n fee_rate\n from orders\n ),\n\n cfd as (\n select\n ord.order_id,\n id as cfd_id,\n quantity_usd\n from cfds\n inner join ord on ord.order_id = cfds.order_id\n ),\n\n state as (\n select\n id as state_id,\n cfd.order_id,\n cfd.quantity_usd,\n state\n from cfd_states\n inner join cfd on cfd.cfd_id = cfd_states.cfd_id\n where id in (\n select\n max(id) as id\n from cfd_states\n group by (cfd_id)\n )\n )\n\n select\n ord.uuid as \"uuid: crate::model::cfd::OrderId\",\n ord.trading_pair as \"trading_pair: crate::model::TradingPair\",\n ord.position as \"position: crate::model::Position\",\n ord.initial_price as \"initial_price: crate::model::Price\",\n ord.min_quantity as \"min_quantity: crate::model::Usd\",\n ord.max_quantity as \"max_quantity: crate::model::Usd\",\n ord.leverage as \"leverage: crate::model::Leverage\",\n ord.liquidation_price as \"liquidation_price: crate::model::Price\",\n ord.ts_secs as \"ts_secs: crate::model::Timestamp\",\n ord.settlement_time_interval_secs as \"settlement_time_interval_secs: i64\",\n ord.origin as \"origin: crate::model::cfd::Origin\",\n ord.oracle_event_id as \"oracle_event_id: crate::model::BitMexPriceEventId\",\n ord.fee_rate as \"fee_rate: u32\",\n state.quantity_usd as \"quantity_usd: crate::model::Usd\",\n state.state\n\n from ord\n inner join state on state.order_id = ord.order_id\n ",
"28d8b9ddd2dd85a9096200e6abd170a09ed35e1c905c081e535e19800016cd7d": {
"query": "\n with ord as (\n select\n id as order_id,\n uuid,\n trading_pair,\n position,\n initial_price,\n min_quantity,\n max_quantity,\n leverage,\n liquidation_price,\n creation_timestamp_seconds as ts_secs,\n settlement_time_interval_seconds as settlement_time_interval_secs,\n origin,\n oracle_event_id,\n fee_rate\n from orders\n ),\n\n cfd as (\n select\n ord.order_id,\n id as cfd_id,\n quantity_usd,\n counterparty\n from cfds\n inner join ord on ord.order_id = cfds.order_id\n ),\n\n state as (\n select\n id as state_id,\n cfd.order_id,\n cfd.quantity_usd,\n cfd.counterparty,\n state\n from cfd_states\n inner join cfd on cfd.cfd_id = cfd_states.cfd_id\n where id in (\n select\n max(id) as id\n from cfd_states\n group by (cfd_id)\n )\n )\n\n select\n ord.uuid as \"uuid: crate::model::cfd::OrderId\",\n ord.trading_pair as \"trading_pair: crate::model::TradingPair\",\n ord.position as \"position: crate::model::Position\",\n ord.initial_price as \"initial_price: crate::model::Price\",\n ord.min_quantity as \"min_quantity: crate::model::Usd\",\n ord.max_quantity as \"max_quantity: crate::model::Usd\",\n ord.leverage as \"leverage: crate::model::Leverage\",\n ord.liquidation_price as \"liquidation_price: crate::model::Price\",\n ord.ts_secs as \"ts_secs: crate::model::Timestamp\",\n ord.settlement_time_interval_secs as \"settlement_time_interval_secs: i64\",\n ord.origin as \"origin: crate::model::cfd::Origin\",\n ord.oracle_event_id as \"oracle_event_id: crate::model::BitMexPriceEventId\",\n ord.fee_rate as \"fee_rate: u32\",\n state.quantity_usd as \"quantity_usd: crate::model::Usd\",\n state.counterparty as \"counterparty: crate::model::Identity\",\n state.state\n\n from ord\n inner join state on state.order_id = ord.order_id\n\n where ord.uuid = $1\n ",
"describe": {
"columns": [
{
@ -183,13 +183,18 @@
"type_info": "Text"
},
{
"name": "state",
"name": "counterparty: crate::model::Identity",
"ordinal": 14,
"type_info": "Text"
},
{
"name": "state",
"ordinal": 15,
"type_info": "Text"
}
],
"parameters": {
"Right": 0
"Right": 1
},
"nullable": [
false,
@ -206,12 +211,31 @@
false,
false,
false,
false,
false
]
}
},
"898c1f59733397d90d39a73e160f47ab8dc68322f5b421056ffdf38c911cac2d": {
"query": "\n with ord as (\n select\n id as order_id,\n uuid,\n trading_pair,\n position,\n initial_price,\n min_quantity,\n max_quantity,\n leverage,\n liquidation_price,\n creation_timestamp_seconds as ts_secs,\n settlement_time_interval_seconds as settlement_time_interval_secs,\n origin,\n oracle_event_id,\n fee_rate\n from orders\n ),\n\n cfd as (\n select\n ord.order_id,\n id as cfd_id,\n quantity_usd\n from cfds\n inner join ord on ord.order_id = cfds.order_id\n ),\n\n state as (\n select\n id as state_id,\n cfd.order_id,\n cfd.quantity_usd,\n state\n from cfd_states\n inner join cfd on cfd.cfd_id = cfd_states.cfd_id\n where id in (\n select\n max(id) as id\n from cfd_states\n group by (cfd_id)\n )\n )\n\n select\n ord.uuid as \"uuid: crate::model::cfd::OrderId\",\n ord.trading_pair as \"trading_pair: crate::model::TradingPair\",\n ord.position as \"position: crate::model::Position\",\n ord.initial_price as \"initial_price: crate::model::Price\",\n ord.min_quantity as \"min_quantity: crate::model::Usd\",\n ord.max_quantity as \"max_quantity: crate::model::Usd\",\n ord.leverage as \"leverage: crate::model::Leverage\",\n ord.liquidation_price as \"liquidation_price: crate::model::Price\",\n ord.ts_secs as \"ts_secs: crate::model::Timestamp\",\n ord.settlement_time_interval_secs as \"settlement_time_interval_secs: i64\",\n ord.origin as \"origin: crate::model::cfd::Origin\",\n ord.oracle_event_id as \"oracle_event_id: crate::model::BitMexPriceEventId\",\n ord.fee_rate as \"fee_rate: u32\",\n state.quantity_usd as \"quantity_usd: crate::model::Usd\",\n state.state\n\n from ord\n inner join state on state.order_id = ord.order_id\n\n where ord.oracle_event_id = $1\n ",
"8cbe349911b35d8e79763d64b4f5813b4bd98f12e0bba5ada84d2cae8b08ef4f": {
"query": "\n select\n id\n from cfds\n where order_uuid = $1;\n ",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Int64"
}
],
"parameters": {
"Right": 1
},
"nullable": [
true
]
}
},
"ef4fb6c58e79051bd09ad04f59b7896df5228c6c848c999149668d7c733115c2": {
"query": "\n with ord as (\n select\n id as order_id,\n uuid,\n trading_pair,\n position,\n initial_price,\n min_quantity,\n max_quantity,\n leverage,\n liquidation_price,\n creation_timestamp_seconds as ts_secs,\n settlement_time_interval_seconds as settlement_time_interval_secs,\n origin,\n oracle_event_id,\n fee_rate\n from orders\n ),\n\n cfd as (\n select\n ord.order_id,\n id as cfd_id,\n quantity_usd,\n counterparty\n from cfds\n inner join ord on ord.order_id = cfds.order_id\n ),\n\n state as (\n select\n id as state_id,\n cfd.order_id,\n cfd.quantity_usd,\n cfd.counterparty,\n state\n from cfd_states\n inner join cfd on cfd.cfd_id = cfd_states.cfd_id\n where id in (\n select\n max(id) as id\n from cfd_states\n group by (cfd_id)\n )\n )\n\n select\n ord.uuid as \"uuid: crate::model::cfd::OrderId\",\n ord.trading_pair as \"trading_pair: crate::model::TradingPair\",\n ord.position as \"position: crate::model::Position\",\n ord.initial_price as \"initial_price: crate::model::Price\",\n ord.min_quantity as \"min_quantity: crate::model::Usd\",\n ord.max_quantity as \"max_quantity: crate::model::Usd\",\n ord.leverage as \"leverage: crate::model::Leverage\",\n ord.liquidation_price as \"liquidation_price: crate::model::Price\",\n ord.ts_secs as \"ts_secs: crate::model::Timestamp\",\n ord.settlement_time_interval_secs as \"settlement_time_interval_secs: i64\",\n ord.origin as \"origin: crate::model::cfd::Origin\",\n ord.oracle_event_id as \"oracle_event_id: crate::model::BitMexPriceEventId\",\n ord.fee_rate as \"fee_rate: u32\",\n state.quantity_usd as \"quantity_usd: crate::model::Usd\",\n state.counterparty as \"counterparty: crate::model::Identity\",\n state.state\n\n from ord\n inner join state on state.order_id = ord.order_id\n ",
"describe": {
"columns": [
{
@ -285,13 +309,18 @@
"type_info": "Text"
},
{
"name": "state",
"name": "counterparty: crate::model::Identity",
"ordinal": 14,
"type_info": "Text"
},
{
"name": "state",
"ordinal": 15,
"type_info": "Text"
}
],
"parameters": {
"Right": 1
"Right": 0
},
"nullable": [
false,
@ -308,30 +337,13 @@
false,
false,
false,
false,
false
]
}
},
"8cbe349911b35d8e79763d64b4f5813b4bd98f12e0bba5ada84d2cae8b08ef4f": {
"query": "\n select\n id\n from cfds\n where order_uuid = $1;\n ",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Int64"
}
],
"parameters": {
"Right": 1
},
"nullable": [
true
]
}
},
"a6031f4720d1c6acf7043c9f9ee5035f5ffea0520220ad6b578b7ad0117ab58f": {
"query": "\n with ord as (\n select\n id as order_id,\n uuid,\n trading_pair,\n position,\n initial_price,\n min_quantity,\n max_quantity,\n leverage,\n liquidation_price,\n creation_timestamp_seconds as ts_secs,\n settlement_time_interval_seconds as settlement_time_interval_secs,\n origin,\n oracle_event_id,\n fee_rate\n from orders\n ),\n\n cfd as (\n select\n ord.order_id,\n id as cfd_id,\n quantity_usd\n from cfds\n inner join ord on ord.order_id = cfds.order_id\n ),\n\n state as (\n select\n id as state_id,\n cfd.order_id,\n cfd.quantity_usd,\n state\n from cfd_states\n inner join cfd on cfd.cfd_id = cfd_states.cfd_id\n where id in (\n select\n max(id) as id\n from cfd_states\n group by (cfd_id)\n )\n )\n\n select\n ord.uuid as \"uuid: crate::model::cfd::OrderId\",\n ord.trading_pair as \"trading_pair: crate::model::TradingPair\",\n ord.position as \"position: crate::model::Position\",\n ord.initial_price as \"initial_price: crate::model::Price\",\n ord.min_quantity as \"min_quantity: crate::model::Usd\",\n ord.max_quantity as \"max_quantity: crate::model::Usd\",\n ord.leverage as \"leverage: crate::model::Leverage\",\n ord.liquidation_price as \"liquidation_price: crate::model::Price\",\n ord.ts_secs as \"ts_secs: crate::model::Timestamp\",\n ord.settlement_time_interval_secs as \"settlement_time_interval_secs: i64\",\n ord.origin as \"origin: crate::model::cfd::Origin\",\n ord.oracle_event_id as \"oracle_event_id: crate::model::BitMexPriceEventId\",\n ord.fee_rate as \"fee_rate: u32\",\n state.quantity_usd as \"quantity_usd: crate::model::Usd\",\n state.state\n\n from ord\n inner join state on state.order_id = ord.order_id\n\n where ord.uuid = $1\n ",
"f6ac595731d61e166b2afaa4923e9f05c75cfad6d1d734ab43e7567d0e29adec": {
"query": "\n with ord as (\n select\n id as order_id,\n uuid,\n trading_pair,\n position,\n initial_price,\n min_quantity,\n max_quantity,\n leverage,\n liquidation_price,\n creation_timestamp_seconds as ts_secs,\n settlement_time_interval_seconds as settlement_time_interval_secs,\n origin,\n oracle_event_id,\n fee_rate\n from orders\n ),\n\n cfd as (\n select\n ord.order_id,\n id as cfd_id,\n quantity_usd,\n counterparty\n from cfds\n inner join ord on ord.order_id = cfds.order_id\n ),\n\n state as (\n select\n id as state_id,\n cfd.order_id,\n cfd.quantity_usd,\n cfd.counterparty,\n state\n from cfd_states\n inner join cfd on cfd.cfd_id = cfd_states.cfd_id\n where id in (\n select\n max(id) as id\n from cfd_states\n group by (cfd_id)\n )\n )\n\n select\n ord.uuid as \"uuid: crate::model::cfd::OrderId\",\n ord.trading_pair as \"trading_pair: crate::model::TradingPair\",\n ord.position as \"position: crate::model::Position\",\n ord.initial_price as \"initial_price: crate::model::Price\",\n ord.min_quantity as \"min_quantity: crate::model::Usd\",\n ord.max_quantity as \"max_quantity: crate::model::Usd\",\n ord.leverage as \"leverage: crate::model::Leverage\",\n ord.liquidation_price as \"liquidation_price: crate::model::Price\",\n ord.ts_secs as \"ts_secs: crate::model::Timestamp\",\n ord.settlement_time_interval_secs as \"settlement_time_interval_secs: i64\",\n ord.origin as \"origin: crate::model::cfd::Origin\",\n ord.oracle_event_id as \"oracle_event_id: crate::model::BitMexPriceEventId\",\n ord.fee_rate as \"fee_rate: u32\",\n state.quantity_usd as \"quantity_usd: crate::model::Usd\",\n state.counterparty as \"counterparty: crate::model::Identity\",\n state.state\n\n from ord\n inner join state on state.order_id = ord.order_id\n\n where ord.oracle_event_id = $1\n ",
"describe": {
"columns": [
{
@ -405,9 +417,14 @@
"type_info": "Text"
},
{
"name": "state",
"name": "counterparty: crate::model::Identity",
"ordinal": 14,
"type_info": "Text"
},
{
"name": "state",
"ordinal": 15,
"type_info": "Text"
}
],
"parameters": {
@ -428,6 +445,7 @@
false,
false,
false,
false,
false
]
}

42
daemon/src/db.rs

@ -113,12 +113,14 @@ pub async fn insert_cfd(cfd: &Cfd, conn: &mut PoolConnection<Sqlite>) -> anyhow:
insert into cfds (
order_id,
order_uuid,
quantity_usd
quantity_usd,
counterparty
)
select
id as order_id,
uuid as order_uuid,
$2 as quantity_usd
$2 as quantity_usd,
$3 as counterparty
from orders
where uuid = $1;
@ -128,13 +130,14 @@ pub async fn insert_cfd(cfd: &Cfd, conn: &mut PoolConnection<Sqlite>) -> anyhow:
)
select
id as cfd_id,
$3 as state
$4 as state
from cfds
order by id desc limit 1;
"#,
)
.bind(&cfd.order.id)
.bind(&cfd.quantity_usd)
.bind(&cfd.counterparty)
.bind(state)
.execute(conn)
.await?;
@ -254,7 +257,8 @@ pub async fn load_cfd_by_order_id(
select
ord.order_id,
id as cfd_id,
quantity_usd
quantity_usd,
counterparty
from cfds
inner join ord on ord.order_id = cfds.order_id
),
@ -264,6 +268,7 @@ pub async fn load_cfd_by_order_id(
id as state_id,
cfd.order_id,
cfd.quantity_usd,
cfd.counterparty,
state
from cfd_states
inner join cfd on cfd.cfd_id = cfd_states.cfd_id
@ -290,6 +295,7 @@ pub async fn load_cfd_by_order_id(
ord.oracle_event_id as "oracle_event_id: crate::model::BitMexPriceEventId",
ord.fee_rate as "fee_rate: u32",
state.quantity_usd as "quantity_usd: crate::model::Usd",
state.counterparty as "counterparty: crate::model::Identity",
state.state
from ord
@ -325,6 +331,7 @@ pub async fn load_cfd_by_order_id(
order,
quantity_usd: row.quantity_usd,
state: serde_json::from_str(row.state.as_str())?,
counterparty: row.counterparty,
})
}
@ -355,7 +362,8 @@ pub async fn load_all_cfds(conn: &mut PoolConnection<Sqlite>) -> anyhow::Result<
select
ord.order_id,
id as cfd_id,
quantity_usd
quantity_usd,
counterparty
from cfds
inner join ord on ord.order_id = cfds.order_id
),
@ -365,6 +373,7 @@ pub async fn load_all_cfds(conn: &mut PoolConnection<Sqlite>) -> anyhow::Result<
id as state_id,
cfd.order_id,
cfd.quantity_usd,
cfd.counterparty,
state
from cfd_states
inner join cfd on cfd.cfd_id = cfd_states.cfd_id
@ -391,6 +400,7 @@ pub async fn load_all_cfds(conn: &mut PoolConnection<Sqlite>) -> anyhow::Result<
ord.oracle_event_id as "oracle_event_id: crate::model::BitMexPriceEventId",
ord.fee_rate as "fee_rate: u32",
state.quantity_usd as "quantity_usd: crate::model::Usd",
state.counterparty as "counterparty: crate::model::Identity",
state.state
from ord
@ -423,6 +433,7 @@ pub async fn load_all_cfds(conn: &mut PoolConnection<Sqlite>) -> anyhow::Result<
order,
quantity_usd: row.quantity_usd,
state: serde_json::from_str(row.state.as_str())?,
counterparty: row.counterparty,
})
})
.collect::<Result<Vec<_>>>()?;
@ -461,7 +472,8 @@ pub async fn load_cfds_by_oracle_event_id(
select
ord.order_id,
id as cfd_id,
quantity_usd
quantity_usd,
counterparty
from cfds
inner join ord on ord.order_id = cfds.order_id
),
@ -471,6 +483,7 @@ pub async fn load_cfds_by_oracle_event_id(
id as state_id,
cfd.order_id,
cfd.quantity_usd,
cfd.counterparty,
state
from cfd_states
inner join cfd on cfd.cfd_id = cfd_states.cfd_id
@ -497,6 +510,7 @@ pub async fn load_cfds_by_oracle_event_id(
ord.oracle_event_id as "oracle_event_id: crate::model::BitMexPriceEventId",
ord.fee_rate as "fee_rate: u32",
state.quantity_usd as "quantity_usd: crate::model::Usd",
state.counterparty as "counterparty: crate::model::Identity",
state.state
from ord
@ -532,6 +546,7 @@ pub async fn load_cfds_by_oracle_event_id(
order,
quantity_usd: row.quantity_usd,
state: serde_json::from_str(row.state.as_str())?,
counterparty: row.counterparty,
})
})
.collect::<Result<Vec<_>>>()?;
@ -541,6 +556,11 @@ pub async fn load_cfds_by_oracle_event_id(
#[cfg(test)]
mod tests {
use super::*;
use crate::db::insert_order;
use crate::model::cfd::{Cfd, CfdState, Order, Origin};
use crate::model::{Identity, Price, Usd};
use crate::seed::Seed;
use pretty_assertions::assert_eq;
use rand::Rng;
use rust_decimal_macros::dec;
@ -548,12 +568,6 @@ mod tests {
use time::macros::datetime;
use time::OffsetDateTime;
use crate::db::insert_order;
use crate::model::cfd::{Cfd, CfdState, Order, Origin};
use crate::model::{Price, Usd};
use super::*;
#[tokio::test]
async fn test_insert_and_load_order() {
let mut conn = setup_test_db().await;
@ -753,10 +767,14 @@ mod tests {
impl Cfd {
fn dummy() -> Self {
let (pub_key, _) = Seed::default().derive_identity();
let dummy_identity = Identity::new(pub_key);
Cfd::new(
Order::dummy(),
Usd::new(dec!(1000)),
CfdState::outgoing_order_request(),
dummy_identity,
)
}

3
daemon/src/lib.rs

@ -3,6 +3,7 @@
use crate::db::load_all_cfds;
use crate::maker_cfd::{FromTaker, TakerConnected};
use crate::model::cfd::{Cfd, Order, UpdateCfdProposals};
use crate::model::Identity;
use crate::oracle::Attestation;
use crate::tokio_ext::FutureExt;
use address_map::Stopping;
@ -235,6 +236,7 @@ where
maker_heartbeat_interval: Duration,
connect_timeout: Duration,
projection_actor: Address<projection::Actor>,
maker_identity: Identity,
) -> Result<Self>
where
F: Future<Output = Result<M>>,
@ -261,6 +263,7 @@ where
monitor_addr.clone(),
oracle_addr,
n_payouts,
maker_identity,
)
.create(None)
.run();

1
daemon/src/maker_cfd.rs

@ -478,6 +478,7 @@ where
},
taker_id,
},
taker_id,
);
insert_cfd_and_update_feed(&cfd, &mut conn, &self.projection_actor).await?;

5
daemon/src/model/cfd.rs

@ -577,16 +577,19 @@ pub struct Cfd {
pub order: Order,
pub quantity_usd: Usd,
pub state: CfdState,
pub counterparty: Identity,
/* TODO: Leverage is currently derived from the Order, but the actual leverage should be
* stored in the Cfd once there is multiple choices of leverage */
}
impl Cfd {
pub fn new(order: Order, quantity: Usd, state: CfdState) -> Self {
pub fn new(order: Order, quantity: Usd, state: CfdState, counterparty: Identity) -> Self {
Cfd {
order,
quantity_usd: quantity,
state,
counterparty,
}
}

3
daemon/src/projection.rs

@ -500,6 +500,8 @@ pub struct Cfd {
#[serde(with = "::time::serde::timestamp")]
pub expiry_timestamp: OffsetDateTime,
pub counterparty: Identity,
}
impl From<CfdsWithAuxData> for Vec<Cfd> {
@ -546,6 +548,7 @@ impl From<CfdsWithAuxData> for Vec<Cfd> {
None => cfd.order.oracle_event_id.timestamp(),
Some(timestamp) => timestamp,
},
counterparty: cfd.counterparty.into(),
}
})
.collect::<Vec<Cfd>>();

1
daemon/src/setup_maker.rs

@ -70,6 +70,7 @@ impl Actor {
self.order.clone(),
self.quantity,
CfdState::contract_setup(),
self.taker_id,
);
let (sender, receiver) = mpsc::unbounded();

7
daemon/src/setup_taker.rs

@ -1,5 +1,5 @@
use crate::model::cfd::{Cfd, CfdState, Completed, Dlc, Order, OrderId, Role};
use crate::model::Usd;
use crate::model::{Identity, Usd};
use crate::oracle::Announcement;
use crate::setup_contract::{self, SetupParams};
use crate::tokio_ext::spawn_fallible;
@ -25,9 +25,11 @@ pub struct Actor {
on_accepted: Box<dyn MessageChannel<Started>>,
on_completed: Box<dyn MessageChannel<Completed>>,
setup_msg_sender: Option<UnboundedSender<SetupMsg>>,
maker_identity: Identity,
}
impl Actor {
#[allow(clippy::too_many_arguments)]
pub fn new(
(order, quantity, n_payouts): (Order, Usd, usize),
(oracle_pk, announcement): (schnorrsig::PublicKey, Announcement),
@ -36,6 +38,7 @@ impl Actor {
maker: xtra::Address<connection::Actor>,
on_accepted: &(impl MessageChannel<Started> + 'static),
on_completed: &(impl MessageChannel<Completed> + 'static),
maker_identity: Identity,
) -> Self {
Self {
order,
@ -49,6 +52,7 @@ impl Actor {
on_accepted: on_accepted.clone_channel(),
on_completed: on_completed.clone_channel(),
setup_msg_sender: None,
maker_identity,
}
}
}
@ -67,6 +71,7 @@ impl Actor {
self.order.clone(),
self.quantity,
CfdState::contract_setup(),
self.maker_identity,
);
let (sender, receiver) = mpsc::unbounded::<SetupMsg>();

5
daemon/src/taker.rs

@ -162,6 +162,8 @@ async fn main() -> Result<()> {
tokio::fs::create_dir_all(&data_dir).await?;
}
let maker_identity = Identity::new(opts.maker_id);
let seed = Seed::initialize(&data_dir.join("taker_seed")).await?;
let bitcoin_network = opts.network.bitcoin_network();
@ -238,6 +240,7 @@ async fn main() -> Result<()> {
HEARTBEAT_INTERVAL * 2,
Duration::from_secs(10),
projection_actor.clone(),
maker_identity,
)
.await?;
@ -259,7 +262,7 @@ async fn main() -> Result<()> {
tasks.add(connect(
maker_online_status_feed_receiver.clone(),
connection_actor_addr,
Identity::new(opts.maker_id),
maker_identity,
possible_addresses,
));

7
daemon/src/taker_cfd.rs

@ -2,7 +2,7 @@ use crate::address_map::{AddressMap, Stopping};
use crate::cfd_actors::{self, append_cfd_state, insert_cfd_and_update_feed};
use crate::db::{insert_order, load_cfd_by_order_id, load_order_by_id};
use crate::model::cfd::{Cfd, CfdState, CfdStateCommon, Completed, Order, OrderId, Origin, Role};
use crate::model::{Price, Usd};
use crate::model::{Identity, Price, Usd};
use crate::monitor::{self, MonitorParams};
use crate::{
collab_settlement_taker, connection, log_error, oracle, projection, rollover_taker,
@ -48,6 +48,7 @@ pub struct Actor<O, M, W> {
oracle_actor: Address<O>,
n_payouts: usize,
tasks: Tasks,
maker_identity: Identity,
}
impl<O, M, W> Actor<O, M, W>
@ -66,6 +67,7 @@ where
monitor_actor: Address<M>,
oracle_actor: Address<O>,
n_payouts: usize,
maker_identity: Identity,
) -> Self {
Self {
db,
@ -80,6 +82,7 @@ where
collab_settlement_actors: AddressMap::default(),
rollover_actors: AddressMap::default(),
tasks: Tasks::default(),
maker_identity,
}
}
}
@ -295,6 +298,7 @@ where
current_order.clone(),
quantity,
CfdState::outgoing_order_request(),
self.maker_identity,
);
insert_cfd_and_update_feed(&cfd, &mut conn, &self.projection_actor).await?;
@ -321,6 +325,7 @@ where
self.conn_actor.clone(),
&this,
&this,
self.maker_identity,
)
.create(None)
.run();

1
daemon/tests/harness/mod.rs

@ -292,6 +292,7 @@ impl Taker {
config.heartbeat_timeout,
Duration::from_secs(10),
projection_actor,
maker_identity,
)
.await
.unwrap();

2
maker-frontend/src/components/Types.tsx

@ -50,6 +50,8 @@ export interface Cfd {
state_transition_timestamp: number;
details: CfdDetails;
expiry_timestamp: number;
counterparty: string;
}
export interface CfdDetails {

2
taker-frontend/src/types.ts

@ -59,6 +59,8 @@ export interface Cfd {
state_transition_timestamp: number;
details: CfdDetails;
expiry_timestamp: number;
counterparty: string;
}
export interface CfdDetails {

Loading…
Cancel
Save