Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Bls gas costs #7890

Draft
wants to merge 10 commits into
base: master
Choose a base branch
from
274 changes: 136 additions & 138 deletions src/Nethermind/Nethermind.Evm/Precompiles/Bls/Discount.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// SPDX-License-Identifier: LGPL-3.0-only

using System.Collections.Generic;
using System.Reflection.Metadata;

namespace Nethermind.Evm.Precompiles.Bls
{
Expand All @@ -10,146 +11,143 @@ namespace Nethermind.Evm.Precompiles.Bls
/// </summary>
internal static class Discount
{
public static int For(int k)
{
return k switch
{
0 => 0,
var x when x >= 128 => 174,
_ => _discountTable[k]
};
}
public static int ForG1(int k) => k >= 128 ? _maxDiscountG1 : _discountTable[k].g1;
public static int ForG2(int k) => k >= 128 ? _maxDiscountG2 : _discountTable[k].g2;

private const int _maxDiscountG1 = 519;
private const int _maxDiscountG2 = 524;

private static readonly Dictionary<int, int> _discountTable = new()
private static readonly (int g1, int g2)[] _discountTable =
{
{ 1, 1200 },
{ 2, 888 },
{ 3, 764 },
{ 4, 641 },
{ 5, 594 },
{ 6, 547 },
{ 7, 500 },
{ 8, 453 },
{ 9, 438 },
{ 10, 423 },
{ 11, 408 },
{ 12, 394 },
{ 13, 379 },
{ 14, 364 },
{ 15, 349 },
{ 16, 334 },
{ 17, 330 },
{ 18, 326 },
{ 19, 322 },
{ 20, 318 },
{ 21, 314 },
{ 22, 310 },
{ 23, 306 },
{ 24, 302 },
{ 25, 298 },
{ 26, 294 },
{ 27, 289 },
{ 28, 285 },
{ 29, 281 },
{ 30, 277 },
{ 31, 273 },
{ 32, 269 },
{ 33, 268 },
{ 34, 266 },
{ 35, 265 },
{ 36, 263 },
{ 37, 262 },
{ 38, 260 },
{ 39, 259 },
{ 40, 257 },
{ 41, 256 },
{ 42, 254 },
{ 43, 253 },
{ 44, 251 },
{ 45, 250 },
{ 46, 248 },
{ 47, 247 },
{ 48, 245 },
{ 49, 244 },
{ 50, 242 },
{ 51, 241 },
{ 52, 239 },
{ 53, 238 },
{ 54, 236 },
{ 55, 235 },
{ 56, 233 },
{ 57, 232 },
{ 58, 231 },
{ 59, 229 },
{ 60, 228 },
{ 61, 226 },
{ 62, 225 },
{ 63, 223 },
{ 64, 222 },
{ 65, 221 },
{ 66, 220 },
{ 67, 219 },
{ 68, 219 },
{ 69, 218 },
{ 70, 217 },
{ 71, 216 },
{ 72, 216 },
{ 73, 215 },
{ 74, 214 },
{ 75, 213 },
{ 76, 213 },
{ 77, 212 },
{ 78, 211 },
{ 79, 211 },
{ 80, 210 },
{ 81, 209 },
{ 82, 208 },
{ 83, 208 },
{ 84, 207 },
{ 85, 206 },
{ 86, 205 },
{ 87, 205 },
{ 88, 204 },
{ 89, 203 },
{ 90, 202 },
{ 91, 202 },
{ 92, 201 },
{ 93, 200 },
{ 94, 199 },
{ 95, 199 },
{ 96, 198 },
{ 97, 197 },
{ 98, 196 },
{ 99, 196 },
{ 100, 195 },
{ 101, 194 },
{ 102, 193 },
{ 103, 193 },
{ 104, 192 },
{ 105, 191 },
{ 106, 191 },
{ 107, 190 },
{ 108, 189 },
{ 109, 188 },
{ 110, 188 },
{ 111, 187 },
{ 112, 186 },
{ 113, 185 },
{ 114, 185 },
{ 115, 184 },
{ 116, 183 },
{ 117, 182 },
{ 118, 182 },
{ 119, 181 },
{ 120, 180 },
{ 121, 179 },
{ 122, 179 },
{ 123, 178 },
{ 124, 177 },
{ 125, 176 },
{ 126, 176 },
{ 127, 175 },
{ 128, 174 }
(0, 0), // 0
(1000, 1000), // 1
(949, 1000), // 2
(848, 923), // 3
(797, 884), // 4
(764, 855), // 5
(750, 832), // 6
(738, 812), // 7
(728, 796), // 8
(719, 782), // 9
(712, 770), // 10
(705, 759), // 11
(698, 749), // 12
(692, 740), // 13
(687, 732), // 14
(682, 724), // 15
(677, 717), // 16
(673, 711), // 17
(669, 704), // 18
(665, 699), // 19
(661, 693), // 20
(658, 688), // 21
(654, 683), // 22
(651, 679), // 23
(648, 674), // 24
(645, 670), // 25
(642, 666), // 26
(640, 663), // 27
(637, 659), // 28
(635, 655), // 29
(632, 652), // 30
(630, 649), // 31
(627, 646), // 32
(625, 643), // 33
(623, 640), // 34
(621, 637), // 35
(619, 634), // 36
(617, 632), // 37
(615, 629), // 38
(613, 627), // 39
(611, 624), // 40
(609, 622), // 41
(608, 620), // 42
(606, 618), // 43
(604, 615), // 44
(603, 613), // 45
(601, 611), // 46
(599, 609), // 47
(598, 607), // 48
(596, 606), // 49
(595, 604), // 50
(593, 602), // 51
(592, 600), // 52
(591, 598), // 53
(589, 597), // 54
(588, 595), // 55
(586, 593), // 56
(585, 592), // 57
(584, 590), // 58
(582, 589), // 59
(581, 587), // 60
(580, 586), // 61
(579, 584), // 62
(577, 583), // 63
(576, 582), // 64
(575, 580), // 65
(574, 579), // 66
(573, 578), // 67
(572, 576), // 68
(570, 575), // 69
(569, 574), // 70
(568, 573), // 71
(567, 571), // 72
(566, 570), // 73
(565, 569), // 74
(564, 568), // 75
(563, 567), // 76
(562, 566), // 77
(561, 565), // 78
(560, 563), // 79
(559, 562), // 80
(558, 561), // 81
(557, 560), // 82
(556, 559), // 83
(555, 558), // 84
(554, 557), // 85
(553, 556), // 86
(552, 555), // 87
(551, 554), // 88
(550, 553), // 89
(549, 552), // 90
(548, 552), // 91
(547, 551), // 92
(547, 550), // 93
(546, 549), // 94
(545, 548), // 95
(544, 547), // 96
(543, 546), // 97
(542, 545), // 98
(541, 545), // 99
(540, 544), // 100
(540, 543), // 101
(539, 542), // 102
(538, 541), // 103
(537, 541), // 104
(536, 540), // 105
(536, 539), // 106
(535, 538), // 107
(534, 537), // 108
(533, 537), // 109
(532, 536), // 110
(532, 535), // 111
(531, 535), // 112
(530, 534), // 113
(529, 533), // 114
(528, 532), // 115
(528, 532), // 116
(527, 531), // 117
(526, 530), // 118
(525, 530), // 119
(525, 529), // 120
(524, 528), // 121
(523, 528), // 122
(522, 527), // 123
(522, 526), // 124
(521, 526), // 125
(520, 525), // 126
(520, 524), // 127
(519, 524) // 128
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ private G1AddPrecompile()

public static Address Address { get; } = Address.FromNumber(0x0b);

public long BaseGasCost(IReleaseSpec releaseSpec) => 500L;
public long BaseGasCost(IReleaseSpec releaseSpec) => 375L;

public long DataGasCost(ReadOnlyMemory<byte> inputData, IReleaseSpec releaseSpec) => 0L;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ private G1MSMPrecompile()
public long DataGasCost(ReadOnlyMemory<byte> inputData, IReleaseSpec releaseSpec)
{
int k = inputData.Length / ItemSize;
return 12000L * k * Discount.For(k) / 1000;
return 12000L * k * Discount.ForG1(k) / 1000;
}

public const int ItemSize = 160;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ private G2AddPrecompile()

public static Address Address { get; } = Address.FromNumber(0x0e);

public long BaseGasCost(IReleaseSpec releaseSpec) => 800L;
public long BaseGasCost(IReleaseSpec releaseSpec) => 600L;

public long DataGasCost(ReadOnlyMemory<byte> inputData, IReleaseSpec releaseSpec) => 0L;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ private G2MSMPrecompile()
public long DataGasCost(ReadOnlyMemory<byte> inputData, IReleaseSpec releaseSpec)
{
int k = inputData.Length / ItemSize;
return 45000L * k * Discount.For(k) / 1000;
return 45000L * k * Discount.ForG2(k) / 1000;
}

public const int ItemSize = 288;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ private G2MulPrecompile()

public static Address Address { get; } = Address.FromNumber(0x0f);

public long BaseGasCost(IReleaseSpec releaseSpec) => 45000L;
public long BaseGasCost(IReleaseSpec releaseSpec) => 22500L;

public long DataGasCost(ReadOnlyMemory<byte> inputData, IReleaseSpec releaseSpec) => 0L;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ private MapFp2ToG2Precompile()

public static Address Address { get; } = Address.FromNumber(0x13);

public long BaseGasCost(IReleaseSpec releaseSpec) => 75000;
public long BaseGasCost(IReleaseSpec releaseSpec) => 23800L;

public long DataGasCost(ReadOnlyMemory<byte> inputData, IReleaseSpec releaseSpec) => 0L;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ private PairingCheckPrecompile() { }

public static Address Address { get; } = Address.FromNumber(0x11);

public long BaseGasCost(IReleaseSpec releaseSpec) => 65000L;
public long BaseGasCost(IReleaseSpec releaseSpec) => 37698L;

public long DataGasCost(ReadOnlyMemory<byte> inputData, IReleaseSpec releaseSpec) => 43000L * (inputData.Length / PairSize);
public long DataGasCost(ReadOnlyMemory<byte> inputData, IReleaseSpec releaseSpec) => 32587L * (inputData.Length / PairSize);

[SkipLocalsInit]
public (ReadOnlyMemory<byte>, bool) Run(ReadOnlyMemory<byte> inputData, IReleaseSpec releaseSpec)
Expand Down
Loading