From 7200f44bd65a0a1aa0f4bf213059d61554582e8f Mon Sep 17 00:00:00 2001 From: Richard Holzeis Date: Fri, 22 Mar 2024 15:22:17 +0100 Subject: [PATCH] feat: Add coordinator and trader funding collateral to dlc channels --- .../down.sql | 3 +++ .../up.sql | 3 +++ coordinator/src/admin.rs | 4 ++++ coordinator/src/db/dlc_channels.rs | 5 +++++ coordinator/src/node/channel.rs | 6 ++++++ coordinator/src/schema.rs | 2 ++ 6 files changed, 23 insertions(+) create mode 100644 coordinator/migrations/2024-03-22-145200_add_total_collateral_to_dlc_channels/down.sql create mode 100644 coordinator/migrations/2024-03-22-145200_add_total_collateral_to_dlc_channels/up.sql diff --git a/coordinator/migrations/2024-03-22-145200_add_total_collateral_to_dlc_channels/down.sql b/coordinator/migrations/2024-03-22-145200_add_total_collateral_to_dlc_channels/down.sql new file mode 100644 index 000000000..45cd52235 --- /dev/null +++ b/coordinator/migrations/2024-03-22-145200_add_total_collateral_to_dlc_channels/down.sql @@ -0,0 +1,3 @@ +ALTER TABLE "dlc_channels" + DROP COLUMN IF EXISTS coordinator_funding_sats, + DROP COLUMN IF EXISTS trader_funding_sats; diff --git a/coordinator/migrations/2024-03-22-145200_add_total_collateral_to_dlc_channels/up.sql b/coordinator/migrations/2024-03-22-145200_add_total_collateral_to_dlc_channels/up.sql new file mode 100644 index 000000000..3bede2e21 --- /dev/null +++ b/coordinator/migrations/2024-03-22-145200_add_total_collateral_to_dlc_channels/up.sql @@ -0,0 +1,3 @@ +ALTER TABLE "dlc_channels" + ADD COLUMN coordinator_funding_sats BIGINT NOT NULL DEFAULT 0, + ADD COLUMN trader_funding_sats BIGINT NOT NULL DEFAULT 0; diff --git a/coordinator/src/admin.rs b/coordinator/src/admin.rs index e4f6e719c..208040a42 100644 --- a/coordinator/src/admin.rs +++ b/coordinator/src/admin.rs @@ -570,6 +570,8 @@ pub async fn migrate_dlc_channels(State(state): State>) -> Result< .inner .get_dlc_channel_usable_balance_counterparty(&channel.channel_id) .map_err(|e| AppError::InternalServerError(format!("{e:#}")))?; + let coordinator_funding = Amount::from_sat(channel.own_params.collateral); + let trader_funding = Amount::from_sat(channel.counter_params.collateral); let protocol_id = match channel.reference_id { Some(reference_id) => ProtocolId::try_from(reference_id) @@ -592,6 +594,8 @@ pub async fn migrate_dlc_channels(State(state): State>) -> Result< to_txid_30(channel.fund_tx.txid()), coordinator_reserve, trader_reserve, + coordinator_funding, + trader_funding, ) .map_err(|e| AppError::InternalServerError(format!("{e:#}")))?; diff --git a/coordinator/src/db/dlc_channels.rs b/coordinator/src/db/dlc_channels.rs index 6504b0266..c639c4812 100644 --- a/coordinator/src/db/dlc_channels.rs +++ b/coordinator/src/db/dlc_channels.rs @@ -56,6 +56,7 @@ pub(crate) fn insert_pending_dlc_channel( .execute(conn) } +#[allow(clippy::too_many_arguments)] pub(crate) fn set_dlc_channel_open( conn: &mut PgConnection, open_protocol_id: &ProtocolId, @@ -63,6 +64,8 @@ pub(crate) fn set_dlc_channel_open( funding_txid: Txid, coordinator_reserve: Amount, trader_reserve: Amount, + coordinator_funding: Amount, + trader_funding: Amount, ) -> QueryResult { diesel::update(dlc_channels::table) .set(( @@ -72,6 +75,8 @@ pub(crate) fn set_dlc_channel_open( dlc_channels::updated_at.eq(OffsetDateTime::now_utc()), dlc_channels::coordinator_reserve_sats.eq(coordinator_reserve.to_sat() as i64), dlc_channels::trader_reserve_sats.eq(trader_reserve.to_sat() as i64), + dlc_channels::coordinator_funding_sats.eq(coordinator_funding.to_sat() as i64), + dlc_channels::trader_funding_sats.eq(trader_funding.to_sat() as i64), )) .filter(dlc_channels::open_protocol_id.eq(open_protocol_id.to_uuid())) .execute(conn) diff --git a/coordinator/src/node/channel.rs b/coordinator/src/node/channel.rs index 0fd53953f..6eed585ba 100644 --- a/coordinator/src/node/channel.rs +++ b/coordinator/src/node/channel.rs @@ -5,6 +5,7 @@ use crate::node::Node; use anyhow::bail; use anyhow::Context; use anyhow::Result; +use bitcoin::Amount; use dlc_manager::channel::signed_channel::SignedChannel; use dlc_manager::channel::signed_channel::SignedChannelState; use dlc_manager::channel::Channel; @@ -107,6 +108,9 @@ impl Node { .inner .get_dlc_channel_usable_balance(&signed_channel.channel_id)?; + let coordinator_funding = Amount::from_sat(signed_channel.own_params.collateral); + let trader_funding = Amount::from_sat(signed_channel.counter_params.collateral); + let protocol_id = ProtocolId::try_from(protocol_id)?; let dlc_protocol = db::dlc_protocols::get_dlc_protocol(&mut conn, protocol_id)?; @@ -119,6 +123,8 @@ impl Node { to_txid_30(signed_channel.fund_tx.txid()), coordinator_reserve, trader_reserve, + coordinator_funding, + trader_funding, )?; } DlcProtocolType::Renew { .. } diff --git a/coordinator/src/schema.rs b/coordinator/src/schema.rs index 46bfbb031..060c52229 100644 --- a/coordinator/src/schema.rs +++ b/coordinator/src/schema.rs @@ -142,6 +142,8 @@ diesel::table! { punish_txid -> Nullable, created_at -> Timestamptz, updated_at -> Timestamptz, + coordinator_funding_sats -> Int8, + trader_funding_sats -> Int8, } }