From e1a8c5535b2efb657968c8165faf73f6ae43ee3e Mon Sep 17 00:00:00 2001 From: Matthew Black Date: Sat, 16 May 2026 23:32:34 -0500 Subject: [PATCH] feat: add refundPayout override to createDlcTxs Adds optional offerRefundPayout/acceptRefundPayout params that flow through PartyParams to the DDK, allowing custom refund TX payout amounts independent of collateral contribution. --- packages/bitcoin-ddk-provider/lib/BitcoinDdkProvider.ts | 3 +++ packages/bitcoin-dlc-provider/lib/BitcoinDlcProvider.ts | 1 + packages/client/lib/Dlc.ts | 3 ++- packages/types/lib/ddk.ts | 1 + packages/types/lib/dlc.ts | 1 + 5 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/bitcoin-ddk-provider/lib/BitcoinDdkProvider.ts b/packages/bitcoin-ddk-provider/lib/BitcoinDdkProvider.ts index 20bebed0..24302200 100644 --- a/packages/bitcoin-ddk-provider/lib/BitcoinDdkProvider.ts +++ b/packages/bitcoin-ddk-provider/lib/BitcoinDdkProvider.ts @@ -706,6 +706,7 @@ export default class BitcoinDdkProvider extends Provider { public async createDlcTxs( dlcOffer: DlcOffer, dlcAccept: DlcAccept, + options?: { offerRefundPayout?: bigint; acceptRefundPayout?: bigint }, ): Promise { const localFundPubkey = dlcOffer.fundingPubkey.toString('hex'); const remoteFundPubkey = dlcAccept.fundingPubkey.toString('hex'); @@ -810,6 +811,7 @@ export default class BitcoinDdkProvider extends Provider { inputAmount: BigInt(localInputAmount), collateral: BigInt(dlcOffer.offerCollateral), dlcInputs: localDlcInputs, + refundPayout: options?.offerRefundPayout, }; const remoteParams: PartyParams = { @@ -822,6 +824,7 @@ export default class BitcoinDdkProvider extends Provider { inputAmount: BigInt(remoteInputAmount), collateral: BigInt(dlcAccept.acceptCollateral), dlcInputs: [], + refundPayout: options?.acceptRefundPayout, }; // Determine whether to use regular or spliced DLC transactions diff --git a/packages/bitcoin-dlc-provider/lib/BitcoinDlcProvider.ts b/packages/bitcoin-dlc-provider/lib/BitcoinDlcProvider.ts index b5117bcb..20a958ec 100644 --- a/packages/bitcoin-dlc-provider/lib/BitcoinDlcProvider.ts +++ b/packages/bitcoin-dlc-provider/lib/BitcoinDlcProvider.ts @@ -695,6 +695,7 @@ export default class BitcoinDlcProvider public async createDlcTxs( dlcOffer: DlcOffer, dlcAccept: DlcAccept, + _options?: { offerRefundPayout?: bigint; acceptRefundPayout?: bigint }, ): Promise { const localFundPubkey = dlcOffer.fundingPubkey.toString('hex'); const remoteFundPubkey = dlcAccept.fundingPubkey.toString('hex'); diff --git a/packages/client/lib/Dlc.ts b/packages/client/lib/Dlc.ts index dca839bc..3f101ea6 100644 --- a/packages/client/lib/Dlc.ts +++ b/packages/client/lib/Dlc.ts @@ -88,8 +88,9 @@ export default class Dlc implements DlcProvider { async createDlcTxs( dlcOffer: DlcOffer, dlcAccept: DlcAccept, + options?: { offerRefundPayout?: bigint; acceptRefundPayout?: bigint }, ): Promise { - return this.client.getMethod('createDlcTxs')(dlcOffer, dlcAccept); + return this.client.getMethod('createDlcTxs')(dlcOffer, dlcAccept, options); } /** diff --git a/packages/types/lib/ddk.ts b/packages/types/lib/ddk.ts index f9e67173..c5fa69a9 100644 --- a/packages/types/lib/ddk.ts +++ b/packages/types/lib/ddk.ts @@ -49,6 +49,7 @@ export interface PartyParams { inputAmount: bigint; collateral: bigint; dlcInputs: Array; + refundPayout?: bigint; } export interface Payout { diff --git a/packages/types/lib/dlc.ts b/packages/types/lib/dlc.ts index b7135cd3..cd806528 100644 --- a/packages/types/lib/dlc.ts +++ b/packages/types/lib/dlc.ts @@ -39,6 +39,7 @@ export interface DlcProvider { createDlcTxs( _dlcOffer: DlcOffer, _dlcAccept: DlcAccept, + _options?: { offerRefundPayout?: bigint; acceptRefundPayout?: bigint }, ): Promise; /**