export declare const CONTRACT_FLAG_REFUND_TO_ACCEPTER = 1; import { Tx } from '@node-dlc/bitcoin'; import { CetAdaptorSignatures, ContractInfo, DlcAccept, DlcClose, DlcCloseMetadata, DlcOffer, DlcSign, DlcTransactions, FundingInput, OracleAttestation } from '@node-dlc/messaging'; import { TxOutRequest } from './common'; import Input, { InputSupplementationMode } from './models/Input'; export interface DlcProvider { GetInputsForAmount(amounts: bigint[], feeRatePerVb: bigint, fixedInputs: Input[]): Promise; /** * Check whether wallet is offerer of DlcOffer or DlcAccept * @param dlcOffer Dlc Offer Message * @param dlcAccept Dlc Accept Message * @returns {Promise} */ isOfferer(_dlcOffer: DlcOffer, _dlcAccept: DlcAccept): Promise; /** * Create DlcTxs object from DlcOffer and DlcAccept * @param dlcOffer Dlc Offer Message * @param dlcAccept Dlc Accept Message * @param dlcSign Dlc Sign Message of an existing contract; required to * rebuild a single-funded contract created before ddk-dlc 2.0.0-rc.4 * @returns {Promise} */ createDlcTxs(_dlcOffer: DlcOffer, _dlcAccept: DlcAccept, _dlcSign?: DlcSign): Promise; /** * Calculate the maximum collateral possible with given inputs * @param inputs Array of inputs to use for funding * @param feeRatePerVb Fee rate in satoshis per virtual byte * @param contractCount Number of DLC contracts (default: 1) * @returns {Promise} Maximum collateral amount in satoshis */ calculateMaxCollateral(inputs: Input[], feeRatePerVb: bigint, contractCount?: number): Promise; /** * Create DLC Offer Message * @param contractInfo ContractInfo TLV (V0 or V1) * @param offerCollateralSatoshis Amount DLC Initiator is putting into the contract * @param feeRatePerVb Fee rate in satoshi per virtual byte that both sides use to compute fees in funding tx * @param cetLocktime The nLockTime to be put on CETs * @param refundLocktime The nLockTime to be put on the refund transaction * @returns {Promise} */ createDlcOffer(contractInfo: ContractInfo, offerCollateralSatoshis: bigint, feeRatePerVb: bigint, cetLocktime: number, refundLocktime: number, fixedInputs?: Input[], inputSupplementationMode?: InputSupplementationMode, contractFlags?: number): Promise; /** * Accept DLC Offer * @param _dlcOffer Dlc Offer Message * @param fixedInputs Optional inputs to use for Funding Inputs * @returns {Promise; /** * Sign Dlc Accept Message * @param _dlcOffer Dlc Offer Message * @param _dlcAccept Dlc Accept Message * @returns {Promise; /** * Finalize Dlc Sign * @param _dlcOffer Dlc Offer Message * @param _dlcAccept Dlc Accept Message * @param _dlcSign Dlc Sign Message * @param _dlcTxs Dlc Transactions Message * @returns {Promise} */ finalizeDlcSign(_dlcOffer: DlcOffer, _dlcAccept: DlcAccept, _dlcSign: DlcSign, _dlcTxs: DlcTransactions): Promise; /** * Execute DLC * @param _dlcOffer Dlc Offer Message * @param _dlcAccept Dlc Accept Message * @param _dlcSign Dlc Sign Message * @param _dlcTxs Dlc Transactions Message * @param oracleAttestation Oracle Attestations TLV (V0) * @param isOfferer Whether party is Dlc Offerer * @returns {Promise} */ execute(_dlcOffer: DlcOffer, _dlcAccept: DlcAccept, _dlcSign: DlcSign, _dlcTxs: DlcTransactions, oracleAttestation: OracleAttestation, isOfferer?: boolean): Promise; /** * Refund DLC * @param _dlcOffer Dlc Offer Message * @param _dlcAccept Dlc Accept Message * @param _dlcSign Dlc Sign Message * @param _dlcTxs Dlc Transactions message * @returns {Promise} */ refund(_dlcOffer: DlcOffer, _dlcAccept: DlcAccept, _dlcSign: DlcSign, _dlcTxs: DlcTransactions): Promise; /** * Generate multiple DlcClose messagetypes for closing DLC with Mutual Consent * @param _dlcOffer DlcOffer TLV (V0) * @param _dlcAccept DlcAccept TLV (V0) * @param _dlcTxs DlcTransactions TLV (V0) * @param initiatorPayouts Array of amounts initiator expects as payouts * @param isOfferer Whether offerer or not * @param _inputs Optionally specified closing inputs * @returns {Promise} */ createBatchDlcClose(_dlcOffer: DlcOffer, _dlcAccept: DlcAccept, _dlcTxs: DlcTransactions, initiatorPayouts: bigint[], isOfferer?: boolean, _inputs?: Input[]): Promise; verifyBatchDlcCloseUsingMetadata(dlcCloseMetadata: DlcCloseMetadata, _dlcCloses: DlcClose[], isOfferer?: boolean): Promise; /** * Verify multiple DlcClose messagetypes for closing DLC with Mutual Consent * @param _dlcOffer DlcOffer TLV (V0) * @param _dlcAccept DlcAccept TLV (V0) * @param _dlcTxs DlcTransactions TLV (V0) * @param _dlcCloses DlcClose[] TLV (V0) * @param isOfferer Whether offerer or not * @returns {Promise} */ verifyBatchDlcClose(_dlcOffer: DlcOffer, _dlcAccept: DlcAccept, _dlcTxs: DlcTransactions, _dlcCloses: DlcClose[], isOfferer?: boolean): Promise; /** * Finalize Dlc Close * @param _dlcOffer Dlc Offer Message * @param _dlcAccept Dlc Accept Message * @param _dlcClose Dlc Close Message * @param _dlcTxs Dlc Transactions Message * @returns {Promise} */ finalizeDlcClose(_dlcOffer: DlcOffer, _dlcAccept: DlcAccept, _dlcClose: DlcClose, _dlcTxs: DlcTransactions): Promise; AddSignatureToFundTransaction(jsonObject: AddSignatureToFundTransactionRequest): Promise; CreateCetAdaptorSignature(jsonObject: CreateCetAdaptorSignatureRequest): Promise; CreateCetAdaptorSignatures(jsonObject: CreateCetAdaptorSignaturesRequest): Promise; AddSignaturesToRefundTx(jsonObject: AddSignaturesToRefundTxRequest): Promise; CreateCet(jsonObject: CreateCetRequest): Promise; CreateDlcTransactions(jsonObject: CreateDlcTransactionsRequest): Promise; CreateFundTransaction(jsonObject: CreateFundTransactionRequest): Promise; CreateRefundTransaction(jsonObject: CreateRefundTransactionRequest): Promise; GetRawFundTxSignature(jsonObject: GetRawFundTxSignatureRequest): Promise; GetRawRefundTxSignature(jsonObject: GetRawRefundTxSignatureRequest): Promise; SignCet(jsonObject: SignCetRequest): Promise; VerifyCetAdaptorSignature(jsonObject: VerifyCetAdaptorSignatureRequest): Promise; VerifyCetAdaptorSignatures(jsonObject: VerifyCetAdaptorSignaturesRequest): Promise; SignFundTransaction(jsonObject: SignFundTransactionRequest): Promise; VerifyFundTxSignature(jsonObject: VerifyFundTxSignatureRequest): Promise; VerifyRefundTxSignature(jsonObject: VerifyRefundTxSignatureRequest): Promise; CreateSplicedDlcTransactions(jsonObject: CreateSplicedDlcTransactionsRequest): Promise; GetRawDlcFundingInputSignature(jsonObject: GetRawDlcFundingInputSignatureRequest): Promise; SignDlcFundingInput(jsonObject: SignDlcFundingInputRequest): Promise; VerifyDlcFundingInputSignature(jsonObject: VerifyDlcFundingInputSignatureRequest): Promise; fundingInputToInput(_input: FundingInput): Promise; inputToFundingInput(input: Input): Promise; } export interface InitializeResponse { fundingPubKey: Buffer; payoutSPK: Buffer; payoutSerialId: bigint; fundingInputs: FundingInput[]; changeSPK: Buffer; changeSerialId: bigint; } export interface AcceptDlcOfferResponse { dlcAccept: DlcAccept; dlcTransactions: DlcTransactions; } export interface BatchAcceptDlcOfferResponse { dlcAccepts: DlcAccept[]; dlcTransactionsList: DlcTransactions[]; } export interface SignDlcAcceptResponse { dlcSign: DlcSign; dlcTransactions: DlcTransactions; } export interface BatchSignDlcAcceptResponse { dlcSigns: DlcSign[]; dlcTransactionsList: DlcTransactions[]; } export interface GetPayoutsResponse { payouts: PayoutRequest[]; payoutGroups: PayoutGroup[]; messagesList: Messages[]; } export interface CreateDlcTxsResponse { dlcTransactions: DlcTransactions; messagesList: Messages[]; } export interface CreateCetAdaptorAndRefundSigsResponse { cetSignatures: CetAdaptorSignatures; refundSignature: Buffer; } interface PayoutGroup { payout: bigint; groups: number[][]; } export interface AdaptorPair { signature: string; proof: string; } /** Add signatures to a refund transaction */ export interface AddSignaturesToRefundTxRequest { refundTxHex: string; signatures: string[]; fundTxId: string; fundVout?: number; localFundPubkey: string; remoteFundPubkey: string; } export interface AddSignaturesToRefundTxResponse { hex: string; } /** Add a signature to fund transaction */ export interface AddSignatureToFundTransactionRequest { fundTxHex: string; signature: string; prevTxId: string; prevVout: number; pubkey: string; } export interface AddSignatureToFundTransactionResponse { hex: string; } /** Create an adaptor signature for a CET */ export interface CreateCetAdaptorSignatureRequest { cetHex: string; privkey: string; fundTxId: string; fundVout?: number; localFundPubkey: string; remoteFundPubkey: string; oraclePubkey: string; oracleRValues: string[]; fundInputAmount: bigint | number; messages: string[]; } export interface CreateCetAdaptorSignatureResponse { signature: string; proof: string; } /** Create an adaptor signature for a CET */ export interface CreateCetAdaptorSignaturesRequest { cetsHex: string[]; privkey: string; fundTxId: string; fundVout?: number; localFundPubkey: string; remoteFundPubkey: string; oraclePubkey: string; oracleRValues: string[]; fundInputAmount: bigint | number; messagesList: Messages[]; } export interface CreateCetAdaptorSignaturesResponse { adaptorPairs: AdaptorPair[]; } /** Create a CET */ export interface CreateCetRequest { localFundPubkey: string; remoteFundPubkey: string; localFinalAddress: string; remoteFinalAddress: string; localPayout: bigint | number; remotePayout: bigint | number; fundTxId: string; fundVout?: number; lockTime: bigint | number; localSerialId?: bigint | number; remoteSerialId?: bigint | number; } export interface CreateCetResponse { hex: string; } /** Create Dlc transactions */ export interface CreateDlcTransactionsRequest { payouts: PayoutRequest[]; localFundPubkey: string; localFinalScriptPubkey: string; remoteFundPubkey: string; remoteFinalScriptPubkey: string; localInputAmount: bigint | number; localCollateralAmount: bigint | number; localPayoutSerialId: bigint | number; localChangeSerialId: bigint | number; remoteInputAmount: bigint | number; remoteCollateralAmount: bigint | number; remotePayoutSerialId: bigint | number; remoteChangeSerialId: bigint | number; refundLocktime: bigint | number; localInputs: TxInInfoRequest[]; localChangeScriptPubkey: string; remoteInputs: TxInInfoRequest[]; remoteChangeScriptPubkey: string; feeRate: number; cetLockTime?: bigint | number; fundLockTime?: bigint | number; fundOutputSerialId?: bigint | number; optionDest?: string; optionPremium?: bigint | number; } export interface CreateDlcTransactionsResponse { fundTxHex: string; cetsHex: string[]; refundTxHex: string; } /** Create Batch Dlc transactions */ /** Create Batch Dlc transactions */ export interface CreateBatchDlcTransactionsRequest { localPayouts: (bigint | number)[]; remotePayouts: (bigint | number)[]; numPayouts: (bigint | number)[]; localFundPubkeys: string[]; localFinalScriptPubkeys: string[]; remoteFundPubkeys: string[]; remoteFinalScriptPubkeys: string[]; localInputAmount: bigint | number; localCollateralAmounts: (bigint | number)[]; localPayoutSerialIds: (bigint | number)[]; localChangeSerialId: bigint | number; remoteInputAmount: bigint | number; remoteCollateralAmounts: (bigint | number)[]; remotePayoutSerialIds: (bigint | number)[]; remoteChangeSerialId: bigint | number; refundLocktimes: (bigint | number)[]; localInputs: TxInInfoRequest[]; localChangeScriptPubkey: string; remoteInputs: TxInInfoRequest[]; remoteChangeScriptPubkey: string; feeRate: number; cetLockTime?: bigint | number; fundLockTime?: bigint | number; fundOutputSerialIds?: (bigint | number)[]; } export interface CreateBatchDlcTransactionsResponse { fundTxHex: string; cetsHexList: string[]; refundTxHexList: string[]; } /** Create a fund transaction */ export interface CreateFundTransactionRequest { localPubkey: string; remotePubkey: string; outputAmount: bigint | number; localInputs: TxInInfoRequest[]; localChange: TxOutRequest; remoteInputs: TxInInfoRequest[]; remoteChange: TxOutRequest; feeRate: bigint | number; optionDest?: string; optionPremium?: bigint | number; lockTime?: bigint | number; localSerialId?: bigint | number; remoteSerialId?: bigint | number; outputSerialId?: bigint | number; } export interface CreateFundTransactionResponse { hex: string; } /** Create a batch fund transaction */ export interface CreateBatchFundTransactionRequest { localPubkeys: string[]; remotePubkeys: string[]; outputAmounts: (bigint | number)[]; localInputs: TxInInfoRequest[]; localChange: TxOutRequest; remoteInputs: TxInInfoRequest[]; remoteChange: TxOutRequest; feeRate: bigint | number; lockTime?: bigint | number; localSerialId?: bigint | number; remoteSerialId?: bigint | number; outputSerialIds: (bigint | number)[]; } export interface CreateBatchFundTransactionResponse { hex: string; } /** Create a refund transaction */ export interface CreateRefundTransactionRequest { localFinalScriptPubkey: string; remoteFinalScriptPubkey: string; localAmount: bigint | number; remoteAmount: bigint | number; lockTime: bigint | number; fundTxId: string; fundVout?: number; } export interface CreateRefundTransactionResponse { hex: string; } /** Get a signature for a fund transaction input */ export interface GetRawFundTxSignatureRequest { fundTxHex: string; privkey: string; prevTxId: string; prevVout: number; amount: bigint | number; } export interface GetRawFundTxSignatureResponse { hex: string; } /** Get a signature for a CET */ export interface GetRawRefundTxSignatureRequest { refundTxHex: string; privkey: string; fundTxId: string; fundVout?: number; localFundPubkey: string; remoteFundPubkey: string; fundInputAmount: bigint | number; } export interface GetRawRefundTxSignatureResponse { hex: string; } export interface Messages { messages: string[]; } export interface PayoutRequest { local: bigint | number; remote: bigint | number; } /** Sign a CET */ export interface SignCetRequest { cetHex: string; fundPrivkey: string; fundTxId: string; fundVout?: number; localFundPubkey: string; remoteFundPubkey: string; fundInputAmount: bigint | number; adaptorSignature: string; oracleSignatures: string[]; } export interface SignCetResponse { hex: string; } /** Sign a fund transaction input */ export interface SignFundTransactionRequest { fundTxHex: string; privkey: string; prevTxId: string; prevVout: number; amount: bigint | number; } export interface SignFundTransactionResponse { hex: string; } export interface TxInInfoRequest { txid: string; vout: number; redeemScript?: string; maxWitnessLength: number; inputSerialId?: bigint | number; } /** Verify a signature for a CET */ export interface VerifyCetAdaptorSignatureRequest { cetHex: string; adaptorSignature: string; adaptorProof: string; messages: string[]; localFundPubkey: string; remoteFundPubkey: string; oraclePubkey: string; oracleRValues: string[]; fundTxId: string; fundVout?: number; fundInputAmount: bigint | number; verifyRemote: boolean; } export interface VerifyCetAdaptorSignatureResponse { valid: boolean; } /** Verify a set of signatures for a set of CET */ export interface VerifyCetAdaptorSignaturesRequest { cetsHex: string[]; adaptorPairs: AdaptorPair[]; messagesList: Messages[]; localFundPubkey: string; remoteFundPubkey: string; oraclePubkey: string; oracleRValues: string[]; fundTxId: string; fundVout?: number; fundInputAmount: bigint | number; verifyRemote: boolean; } export interface VerifyCetAdaptorSignaturesResponse { valid: boolean; } /** Verify a signature for a mutual closing transaction */ export interface VerifyFundTxSignatureRequest { fundTxHex: string; signature: string; pubkey: string; prevTxId: string; prevVout: number; fundInputAmount: bigint | number; } export interface VerifyFundTxSignatureResponse { valid: boolean; } /** Verify a signature for a refund transaction */ export interface VerifyRefundTxSignatureRequest { refundTxHex: string; signature: string; localFundPubkey: string; remoteFundPubkey: string; fundTxId: string; fundVout?: number; fundInputAmount: bigint | number; verifyRemote: boolean; } export interface VerifyRefundTxSignatureResponse { valid: boolean; } export interface DlcInputInfoRequest { fundTxid: string; fundVout: number; fundAmount: bigint | number; localFundPubkey: string; remoteFundPubkey: string; contractId: string; maxWitnessLength: number; inputSerialId?: bigint | number; } /** Create Spliced Dlc transactions */ export interface CreateSplicedDlcTransactionsRequest { payouts: PayoutRequest[]; localFundPubkey: string; localFinalScriptPubkey: string; remoteFundPubkey: string; remoteFinalScriptPubkey: string; localInputAmount: bigint | number; localCollateralAmount: bigint | number; localPayoutSerialId: bigint | number; localChangeSerialId: bigint | number; remoteInputAmount: bigint | number; remoteCollateralAmount: bigint | number; remotePayoutSerialId: bigint | number; remoteChangeSerialId: bigint | number; refundLocktime: bigint | number; localInputs: TxInInfoRequest[]; localDlcInputs?: DlcInputInfoRequest[]; localChangeScriptPubkey: string; remoteInputs: TxInInfoRequest[]; remoteDlcInputs?: DlcInputInfoRequest[]; remoteChangeScriptPubkey: string; feeRate: number; cetLockTime?: bigint | number; fundLockTime?: bigint | number; fundOutputSerialId?: bigint | number; optionDest?: string; optionPremium?: bigint | number; } export interface CreateSplicedDlcTransactionsResponse { fundTxHex: string; cetsHex: string[]; refundTxHex: string; } /** Get raw DLC funding input signature */ export interface GetRawDlcFundingInputSignatureRequest { fundTxHex: string; fundTxid: string; fundVout: number; fundAmount: bigint | number; localFundPubkey: string; remoteFundPubkey: string; privkey: string; } export interface GetRawDlcFundingInputSignatureResponse { hex: string; } /** Sign DLC funding input */ export interface SignDlcFundingInputRequest { fundTxHex: string; fundTxid: string; fundVout: number; fundAmount: bigint | number; localFundPubkey: string; remoteFundPubkey: string; localPrivkey: string; remoteSignature: string; } export interface SignDlcFundingInputResponse { hex: string; } /** Verify DLC funding input signature */ export interface VerifyDlcFundingInputSignatureRequest { fundTxHex: string; fundTxid: string; fundVout: number; fundAmount: bigint | number; localFundPubkey: string; remoteFundPubkey: string; signature: string; pubkey: string; } export interface VerifyDlcFundingInputSignatureResponse { valid: boolean; } export {};