Browse Source

Taker handles order received from maker already known

In case we already have a cfd for the received order we bail, because that should not happen.
If we already know the order, but don't have a related cfd we don't insert but still send it out on the order feed.
new-http-api
Daniel Karzel 3 years ago
parent
commit
a95b218aaf
No known key found for this signature in database GPG Key ID: 30C3FC2E438ADB6E
  1. 13
      daemon/src/taker_cfd.rs

13
daemon/src/taker_cfd.rs

@ -9,7 +9,7 @@ use crate::model::{BitMexPriceEventId, Price, Timestamp, Usd};
use crate::monitor::{self, MonitorParams};
use crate::wire::{MakerToTaker, RollOverMsg, SetupMsg};
use crate::{log_error, oracle, setup_contract, wallet, wire};
use anyhow::{Context as _, Result};
use anyhow::{bail, Context as _, Result};
use async_trait::async_trait;
use bdk::bitcoin::secp256k1::schnorrsig;
use futures::channel::mpsc;
@ -305,7 +305,16 @@ impl<O, M, W> Actor<O, M, W> {
order.origin = Origin::Theirs;
let mut conn = self.db.acquire().await?;
insert_order(&order, &mut conn).await?;
if load_cfd_by_order_id(order.id, &mut conn).await.is_ok() {
bail!("Received order {} from maker, but already have a cfd in the database for that order. The maker did not properly remove the order.", order.id)
}
if load_order_by_id(order.id, &mut conn).await.is_err() {
// only insert the order if we don't know it yet
insert_order(&order, &mut conn).await?;
}
self.order_feed_actor_inbox.send(Some(order))?;
}
None => {

Loading…
Cancel
Save