From f951aad96109d3c3da28fb6d416b4009e6650df3 Mon Sep 17 00:00:00 2001 From: Daniel Karzel Date: Mon, 8 Nov 2021 17:53:08 +1100 Subject: [PATCH] Transition to `SetupFailed` if the conract setup failed Otherwise, the user does not get feedback until restarting the application. --- daemon/src/maker_cfd.rs | 18 +++++++++++++++--- daemon/src/taker_cfd.rs | 20 +++++++++++++++++--- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/daemon/src/maker_cfd.rs b/daemon/src/maker_cfd.rs index 16bbc82..ee8d7e0 100644 --- a/daemon/src/maker_cfd.rs +++ b/daemon/src/maker_cfd.rs @@ -679,11 +679,23 @@ where ) -> Result<()> { self.setup_state = SetupState::None; - let dlc = dlc.context("Failed to setup contract with taker")?; - let mut conn = self.db.acquire().await?; - let mut cfd = load_cfd_by_order_id(order_id, &mut conn).await?; + + let dlc = match dlc { + Ok(dlc) => dlc, + Err(e) => { + cfd.state = CfdState::SetupFailed { + common: CfdStateCommon::default(), + info: e.to_string(), + }; + + append_cfd_state(&cfd, &mut conn, &self.cfd_feed_actor_inbox).await?; + + return Err(e); + } + }; + cfd.state = CfdState::PendingOpen { common: CfdStateCommon::default(), dlc: dlc.clone(), diff --git a/daemon/src/taker_cfd.rs b/daemon/src/taker_cfd.rs index a24847c..3a956d8 100644 --- a/daemon/src/taker_cfd.rs +++ b/daemon/src/taker_cfd.rs @@ -395,12 +395,26 @@ where dlc: Result, ) -> Result<()> { self.setup_state = SetupState::None; - let dlc = dlc.context("Failed to setup contract with maker")?; - - tracing::info!("Setup complete, publishing on chain now"); let mut conn = self.db.acquire().await?; let mut cfd = load_cfd_by_order_id(order_id, &mut conn).await?; + + let dlc = match dlc { + Ok(dlc) => dlc, + Err(e) => { + cfd.state = CfdState::SetupFailed { + common: CfdStateCommon::default(), + info: e.to_string(), + }; + + append_cfd_state(&cfd, &mut conn, &self.cfd_feed_actor_inbox).await?; + + return Err(e); + } + }; + + tracing::info!("Setup complete, publishing on chain now"); + cfd.state = CfdState::PendingOpen { common: CfdStateCommon::default(), dlc: dlc.clone(),