Skip to content

Commit

Permalink
Optimize TryCalculateFeePerBlobGas (#8173)
Browse files Browse the repository at this point in the history
  • Loading branch information
benaadams authored Feb 6, 2025
1 parent f692ff1 commit 83c72fa
Showing 1 changed file with 13 additions and 8 deletions.
21 changes: 13 additions & 8 deletions src/Nethermind/Nethermind.Evm/BlobGasCalculator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,35 +50,40 @@ public static bool TryCalculateFeePerBlobGas(ulong excessBlobGas, UInt256 blobGa
{
static bool FakeExponentialOverflow(UInt256 factor, UInt256 num, UInt256 denominator, out UInt256 feePerBlobGas)
{
UInt256 output = UInt256.Zero;

if (UInt256.MultiplyOverflow(factor, denominator, out UInt256 numAccum))
UInt256 accumulator;
if (factor == UInt256.One)
{
// Skip expensive 256bit multiplication if factor is 1
accumulator = denominator;
}
else if (UInt256.MultiplyOverflow(factor, denominator, out accumulator))
{
feePerBlobGas = UInt256.MaxValue;
return true;
}

for (UInt256 i = 1; numAccum > 0; i++)
UInt256 output = default;
for (ulong i = 1; !accumulator.IsZero; i++)
{
if (UInt256.AddOverflow(output, numAccum, out output))
if (UInt256.AddOverflow(output, accumulator, out output))
{
feePerBlobGas = UInt256.MaxValue;
return true;
}

if (UInt256.MultiplyOverflow(numAccum, num, out UInt256 updatedNumAccum))
if (UInt256.MultiplyOverflow(accumulator, num, out UInt256 updatedAccumulator))
{
feePerBlobGas = UInt256.MaxValue;
return true;
}

if (UInt256.MultiplyOverflow(i, denominator, out UInt256 multipliedDeniminator))
if (UInt256.MultiplyOverflow(i, denominator, out UInt256 multipliedDenominator))
{
feePerBlobGas = UInt256.MaxValue;
return true;
}

numAccum = updatedNumAccum / multipliedDeniminator;
accumulator = updatedAccumulator / multipliedDenominator;
}

feePerBlobGas = output / denominator;
Expand Down

0 comments on commit 83c72fa

Please sign in to comment.