From 541cef55b84e5fa09cd7e6af2ec4b6cc80cc0854 Mon Sep 17 00:00:00 2001 From: Andrew Camilleri Date: Thu, 14 Dec 2023 13:20:45 +0100 Subject: [PATCH] Random feerate and ensure sanity (#5556) Suggested at https://github.com/btcpayserver/btcpayserver/pull/5490#issuecomment-1851066223 We can also configure this httpclient to use tor --- .../Services/Fees/MempoolSpaceFeeProvider.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/BTCPayServer/Services/Fees/MempoolSpaceFeeProvider.cs b/BTCPayServer/Services/Fees/MempoolSpaceFeeProvider.cs index 703978b7b..fb0f64da1 100644 --- a/BTCPayServer/Services/Fees/MempoolSpaceFeeProvider.cs +++ b/BTCPayServer/Services/Fees/MempoolSpaceFeeProvider.cs @@ -56,9 +56,22 @@ public class MempoolSpaceFeeProvider( "minimumFee" => 144, _ => -1 }; - feesByBlockTarget.TryAdd(target, new FeeRate(value)); + feesByBlockTarget.TryAdd(target, new FeeRate(RandomizeByPercentage(value, 10))); } return feesByBlockTarget; })!; } + + static decimal RandomizeByPercentage(decimal value, int percentage) + { + decimal range = value * percentage / 100m; + var res = value + range * (Random.Shared.NextDouble() < 0.5 ? -1 : 1); + + return res switch + { + < 1m => 1m, + > 850 => 850, + _ => res + }; + } }