Skip to content

Commit

Permalink
feat: add fee rate calculation readme section
Browse files Browse the repository at this point in the history
  • Loading branch information
Polybius93 committed Dec 16, 2024
1 parent bd0237e commit fe388de
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
# dlc-btc-lib

**dlc-btc-lib** is a comprehensive library for interacting with DLC.Link smart contracts and the Bitcoin blockchain. It includes functions for creating valid Partially Signed Bitcoin Transactions, handling setup, deposit, and withdrawal interactions, and interfacing with Attestors. This library provides all the essential tools and utilities for seamless blockchain and smart contract interactions.

## Fee Rate Calculation

The transaction fee rate is calculated by taking the maximum value among three metrics from the Bitcoin blockchain:

- Average fee rate from the last two blocks
- Current mempool block's median fee rate
- Estimated "fastest" fee rate

Each metric is adjusted by an optional multiplier (defaults to 1.0) and the final result is rounded up to the nearest whole number. For regtest environments, a fixed fee rate of 2 is used.
11 changes: 5 additions & 6 deletions src/functions/bitcoin/bitcoin-functions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -213,25 +213,24 @@ export async function getEstimatedFeeRate(bitcoinBlockchainAPIFeeURL: string): P
*/
export async function getFeeRate(
bitcoinBlockchainAPIFeeURL: string,
feeRateMultiplier?: number,
feeRateMultiplier = 1,
isRegtest = false
): Promise<number> {
if (isRegtest) return 2;

const multiplier = feeRateMultiplier ?? 1;

const [lastTwoBlocksFeeRate, currentBlockFeeRate, estimatedFeeRate] = await Promise.all([
getLastTwoBlocksFeeRate(bitcoinBlockchainAPIFeeURL),
getCurrentMempoolBlockFeeRate(bitcoinBlockchainAPIFeeURL),
getEstimatedFeeRate(bitcoinBlockchainAPIFeeURL),
]);

const currentBlockFeeRateMultiplied = currentBlockFeeRate * multiplier;
const currentBlockFeeRateMultiplied = currentBlockFeeRate * feeRateMultiplier;

const lastTwoBlocksfeeRateAverageMultiplied =
(lastTwoBlocksFeeRate.reduce((a, b) => a + b) / lastTwoBlocksFeeRate.length) * multiplier;
(lastTwoBlocksFeeRate.reduce((a, b) => a + b) / lastTwoBlocksFeeRate.length) *
feeRateMultiplier;

const estimatedFeeRateMultiplied = estimatedFeeRate * multiplier;
const estimatedFeeRateMultiplied = estimatedFeeRate * feeRateMultiplier;

return Math.ceil(
Math.max(
Expand Down

0 comments on commit fe388de

Please sign in to comment.