Skip to content

Commit

Permalink
Ensure that fee minimum estimate is returned when no estimates
Browse files Browse the repository at this point in the history
  • Loading branch information
mrfelton committed Jul 15, 2024
1 parent f814142 commit fe23b48
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/lib/DataProviderManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,14 @@ export class DataProviderManager {
});
}

// If we don't have any valid estimates that are above the fee minimum, add the minimum fee.
if (Object.keys(mergedEstimates).length === 0) {
log.warn({
msg: `No valid estimates were available. Adding minimum fee of ${this.feeMinimum}.`,
});
mergedEstimates[1] = this.feeMinimum;
}

log.debug({ msg: "Final mergedEstimates:", mergedEstimates });
return mergedEstimates;
}
Expand Down
73 changes: 73 additions & 0 deletions test/DataProviderManager-minfee.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import { expect, test } from "bun:test";
import { DataProviderManager } from "../src/lib/DataProviderManager";

test("should exclude estimates that are below the fee minimum", async () => {
const feeEstimates = {
"1": 3,
"2": 2,
"3": 1,
};
class MockProvider implements Provider {
getBlockHeight = () => Promise.resolve(1001);
getBlockHash = () => Promise.resolve("hash1001");
getFeeEstimates = () => Promise.resolve(feeEstimates);
getAllData = () =>
Promise.resolve({
blockHeight: 1001,
blockHash: "hash1001",
feeEstimates,
});
}

const maxHeightDelta = 1;
const feeMultiplier = 1;
const feeMinimum = 2;
const manager = new DataProviderManager(
{ stdTTL: 0, checkperiod: 0 },
maxHeightDelta,
feeMultiplier,
feeMinimum,
);
manager.registerProvider(new MockProvider());

const mergedData = await manager.getData();
expect(mergedData.fee_by_block_target).toEqual({
"1": 3000,
"2": 2000,
});
});

test("should return single estimate at fee minimum if no valid estimates are available", async () => {
const feeEstimates = {
"1": 1,
"2": 1,
"3": 1,
};
class MockProvider implements Provider {
getBlockHeight = () => Promise.resolve(1001);
getBlockHash = () => Promise.resolve("hash1001");
getFeeEstimates = () => Promise.resolve(feeEstimates);
getAllData = () =>
Promise.resolve({
blockHeight: 1001,
blockHash: "hash1001",
feeEstimates,
});
}

const maxHeightDelta = 1;
const feeMultiplier = 1;
const feeMinimum = 2;
const manager = new DataProviderManager(
{ stdTTL: 0, checkperiod: 0 },
maxHeightDelta,
feeMultiplier,
feeMinimum,
);
manager.registerProvider(new MockProvider());

const mergedData = await manager.getData();
expect(mergedData.fee_by_block_target).toEqual({
"1": 2000,
});
});

0 comments on commit fe23b48

Please sign in to comment.