Add baseFeeUpdateFraction to blobSchedule genesis config (#8128)

* Add baseFeeUpdateFraction to blobSchedule genesis config

Signed-off-by: Daniel Lehrner <daniel.lehrner@consensys.net>

* added genesis file for CodeDelegationTransactionAcceptanceTest

Signed-off-by: Daniel Lehrner <daniel.lehrner@consensys.net>

* remove hard coded baseFeeUpdateFraction from CancunFeeMarket & PragueFeeMarket

Signed-off-by: Daniel Lehrner <daniel.lehrner@consensys.net>

* make FeeMarket constructors package private

Signed-off-by: Daniel Lehrner <daniel.lehrner@consensys.net>

---------

Signed-off-by: Daniel Lehrner <daniel.lehrner@consensys.net>
This commit is contained in:
daniellehrner
2025-01-17 13:09:39 +01:00
committed by GitHub
parent 89632d7743
commit a98e950eac
28 changed files with 168 additions and 81 deletions

View File

@@ -18,15 +18,18 @@
"blobSchedule": {
"cancun": {
"target": 3,
"max": 6
"max": 6,
"baseFeeUpdateFraction": 3338477
},
"prague": {
"target": 6,
"max": 9
"max": 9,
"baseFeeUpdateFraction": 5007716
},
"osaka": {
"target": 9,
"max": 12
"max": 12,
"baseFeeUpdateFraction": 5007716
}
},
"clique": {

View File

@@ -49,7 +49,7 @@ import org.hyperledger.besu.ethereum.eth.sync.SynchronizerConfiguration;
import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolConfiguration;
import org.hyperledger.besu.ethereum.mainnet.MainnetBlockHeaderFunctions;
import org.hyperledger.besu.ethereum.mainnet.feemarket.BaseFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.LondonFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket;
import org.hyperledger.besu.ethereum.p2p.config.NetworkingConfiguration;
import org.hyperledger.besu.ethereum.storage.StorageProvider;
import org.hyperledger.besu.ethereum.storage.keyvalue.KeyValueStoragePrefixedKeyBlockchainStorage;
@@ -106,7 +106,7 @@ public class MergeBesuControllerBuilderTest {
BigInteger networkId = BigInteger.ONE;
private final BlockHeaderTestFixture headerGenerator = new BlockHeaderTestFixture();
private final BaseFeeMarket feeMarket = new LondonFeeMarket(0, Optional.of(Wei.of(42)));
private final BaseFeeMarket feeMarket = FeeMarket.london(0, Optional.of(Wei.of(42)));
private final TransactionPoolConfiguration poolConfiguration =
TransactionPoolConfiguration.DEFAULT;
private final ObservableMetricsSystem observableMetricsSystem = new NoOpMetricsSystem();

View File

@@ -82,15 +82,16 @@ public class BlobScheduleOptions {
public static class BlobSchedule {
private final int target;
private final int max;
private final int baseFeeUpdateFraction;
/** The constant CANCUN_DEFAULT. */
public static final BlobSchedule CANCUN_DEFAULT = new BlobSchedule(3, 6);
public static final BlobSchedule CANCUN_DEFAULT = new BlobSchedule(3, 6, 3338477);
/** The constant PRAGUE_DEFAULT. */
public static final BlobSchedule PRAGUE_DEFAULT = new BlobSchedule(6, 9);
public static final BlobSchedule PRAGUE_DEFAULT = new BlobSchedule(6, 9, 5007716);
/** The constant OSAKA_DEFAULT. */
public static final BlobSchedule OSAKA_DEFAULT = new BlobSchedule(9, 12);
public static final BlobSchedule OSAKA_DEFAULT = new BlobSchedule(9, 12, 5007716);
/**
* Instantiates a new Blob schedule.
@@ -100,11 +101,14 @@ public class BlobScheduleOptions {
public BlobSchedule(final ObjectNode blobScheduleConfigRoot) {
this.target = JsonUtil.getInt(blobScheduleConfigRoot, "target").orElseThrow();
this.max = JsonUtil.getInt(blobScheduleConfigRoot, "max").orElseThrow();
this.baseFeeUpdateFraction =
JsonUtil.getInt(blobScheduleConfigRoot, "basefeeupdatefraction").orElseThrow();
}
private BlobSchedule(final int target, final int max) {
private BlobSchedule(final int target, final int max, final int baseFeeUpdateFraction) {
this.target = target;
this.max = max;
this.baseFeeUpdateFraction = baseFeeUpdateFraction;
}
/**
@@ -125,13 +129,22 @@ public class BlobScheduleOptions {
return max;
}
/**
* Gets base fee update fraction.
*
* @return the base fee update fraction
*/
public int getBaseFeeUpdateFraction() {
return baseFeeUpdateFraction;
}
/**
* As map.
*
* @return the map
*/
Map<String, Object> asMap() {
return Map.of("target", target, "max", max);
return Map.of("target", target, "max", max, "baseFeeUpdateFraction", baseFeeUpdateFraction);
}
}
}

View File

@@ -15,6 +15,18 @@
"terminalTotalDifficulty": 0,
"shanghaiTime": 1696000704,
"cancunTime": 1707305664,
"blobSchedule": {
"cancun": {
"target": 3,
"max": 6,
"baseFeeUpdateFraction": 3338477
},
"prague": {
"target": 6,
"max": 9,
"baseFeeUpdateFraction": 5007716
}
},
"ethash": {},
"discovery": {
"dns": "enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7YPOHJLEF6W26QOE4VTUDPE@all.holesky.ethdisco.net",

View File

@@ -19,11 +19,13 @@
"blobSchedule": {
"cancun": {
"target": 3,
"max": 6
"max": 6,
"baseFeeUpdateFraction": 3338477
},
"prague": {
"target": 6,
"max": 9
"max": 9,
"baseFeeUpdateFraction": 5007716
}
},
"ethash": {

View File

@@ -15,6 +15,18 @@
"terminalTotalDifficulty": 17000000000000000,
"shanghaiTime": 1677557088,
"cancunTime": 1706655072,
"blobSchedule": {
"cancun": {
"target": 3,
"max": 6,
"baseFeeUpdateFraction": 3338477
},
"prague": {
"target": 6,
"max": 9,
"baseFeeUpdateFraction": 5007716
}
},
"ethash":{},
"discovery": {
"dns": "enrtree://AKA3AM6LPBYEUDMVNU3BSVQJ5AD45Y7YPOHJLEF6W26QOE4VTUDPE@all.sepolia.ethdisco.net",

View File

@@ -31,11 +31,14 @@ public class BlobScheduleOptionsTest {
assertThat(blobScheduleOptions.getCancun()).isNotEmpty();
assertThat(blobScheduleOptions.getCancun().get().getTarget()).isEqualTo(4);
assertThat(blobScheduleOptions.getCancun().get().getMax()).isEqualTo(7);
assertThat(blobScheduleOptions.getCancun().get().getBaseFeeUpdateFraction()).isEqualTo(3338477);
assertThat(blobScheduleOptions.getPrague()).isNotEmpty();
assertThat(blobScheduleOptions.getPrague().get().getTarget()).isEqualTo(7);
assertThat(blobScheduleOptions.getPrague().get().getMax()).isEqualTo(10);
assertThat(blobScheduleOptions.getPrague().get().getBaseFeeUpdateFraction()).isEqualTo(5007716);
assertThat(blobScheduleOptions.getOsaka()).isNotEmpty();
assertThat(blobScheduleOptions.getOsaka().get().getTarget()).isEqualTo(10);
assertThat(blobScheduleOptions.getOsaka().get().getMax()).isEqualTo(13);
assertThat(blobScheduleOptions.getOsaka().get().getBaseFeeUpdateFraction()).isEqualTo(5007716);
}
}

View File

@@ -418,15 +418,18 @@ class GenesisConfigOptionsTest {
+ " \"blobSchedule\": {\n"
+ " \"cancun\": {\n"
+ " \"target\": 1,\n"
+ " \"max\": 2\n"
+ " \"max\": 2,\n"
+ " \"baseFeeUpdateFraction\": 3\n"
+ " },\n"
+ " \"prague\": {\n"
+ " \"target\": 3,\n"
+ " \"max\": 4\n"
+ " \"target\": 4,\n"
+ " \"max\": 5,\n"
+ " \"baseFeeUpdateFraction\": 6\n"
+ " },\n"
+ " \"osaka\": {\n"
+ " \"target\": 4,\n"
+ " \"max\": 5\n"
+ " \"target\": 7,\n"
+ " \"max\": 8,\n"
+ " \"baseFeeUpdateFraction\": 9\n"
+ " }\n"
+ " }\n"
+ " }\n"
@@ -438,14 +441,14 @@ class GenesisConfigOptionsTest {
final Map<String, Object> blobSchedule = (Map<String, Object>) map.get("blobSchedule");
assertThat(blobSchedule).containsOnlyKeys("cancun", "prague", "osaka");
assertThat((Map<String, Object>) blobSchedule.get("cancun"))
.containsOnlyKeys("target", "max")
.containsValues(1, 2);
.containsOnlyKeys("target", "max", "baseFeeUpdateFraction")
.containsValues(1, 2, 3);
assertThat((Map<String, Object>) blobSchedule.get("prague"))
.containsOnlyKeys("target", "max")
.containsValues(3, 4);
.containsOnlyKeys("target", "max", "baseFeeUpdateFraction")
.containsValues(4, 5, 6);
assertThat((Map<String, Object>) blobSchedule.get("osaka"))
.containsOnlyKeys("target", "max")
.containsValues(4, 5);
.containsOnlyKeys("target", "max", "baseFeeUpdateFraction")
.containsValues(7, 8, 9);
}
private GenesisConfigOptions fromConfigOptions(final Map<String, Object> configOptions) {

View File

@@ -19,15 +19,18 @@
"blobSchedule": {
"cancun": {
"target": 4,
"max": 7
"max": 7,
"baseFeeUpdateFraction": 3338477
},
"prague": {
"target": 7,
"max": 10
"max": 10,
"baseFeeUpdateFraction": 5007716
},
"osaka": {
"target": 10,
"max": 13
"max": 13,
"baseFeeUpdateFraction": 5007716
}
},
"depositContractAddress": "0x4242424242424242424242424242424242424242",

View File

@@ -73,7 +73,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.TransactionPoolMetrics;
import org.hyperledger.besu.ethereum.eth.transactions.sorter.BaseFeePendingTransactionsSorter;
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
import org.hyperledger.besu.ethereum.mainnet.feemarket.BaseFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.LondonFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket;
import org.hyperledger.besu.ethereum.trie.MerkleTrieException;
import org.hyperledger.besu.ethereum.worldstate.WorldStateArchive;
import org.hyperledger.besu.metrics.StubMetricsSystem;
@@ -158,7 +158,7 @@ public class MergeCoordinatorTest implements MergeGenesisConfigHelper {
private final Address suggestedFeeRecipient = Address.ZERO;
private final BlockHeaderTestFixture headerGenerator = new BlockHeaderTestFixture();
private final BaseFeeMarket feeMarket =
new LondonFeeMarket(0, genesisState.getBlock().getHeader().getBaseFee());
FeeMarket.london(0, genesisState.getBlock().getHeader().getBaseFee());
private final org.hyperledger.besu.metrics.StubMetricsSystem metricsSystem =
new StubMetricsSystem();

View File

@@ -42,7 +42,7 @@ import org.hyperledger.besu.ethereum.eth.transactions.TransactionPool;
import org.hyperledger.besu.ethereum.mainnet.BlockHeaderValidator;
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
import org.hyperledger.besu.ethereum.mainnet.feemarket.BaseFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.LondonFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket;
import org.hyperledger.besu.ethereum.worldstate.WorldStateArchive;
import org.hyperledger.besu.testutil.DeterministicEthScheduler;
import org.hyperledger.besu.util.LogConfigurator;
@@ -81,7 +81,7 @@ public class MergeReorgTest implements MergeGenesisConfigHelper {
private final Address coinbase = genesisAllocations(getPowGenesisConfig()).findFirst().get();
private final BlockHeaderTestFixture headerGenerator = new BlockHeaderTestFixture();
private final BaseFeeMarket feeMarket =
new LondonFeeMarket(0, genesisState.getBlock().getHeader().getBaseFee());
FeeMarket.london(0, genesisState.getBlock().getHeader().getBaseFee());
@BeforeEach
public void setUp() {

View File

@@ -43,10 +43,7 @@ import org.hyperledger.besu.ethereum.core.MiningConfiguration;
import org.hyperledger.besu.ethereum.core.Transaction;
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec;
import org.hyperledger.besu.ethereum.mainnet.feemarket.CancunFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.LegacyFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.LondonFeeMarket;
import org.hyperledger.besu.evm.log.LogsBloomFilter;
import java.util.HashMap;
@@ -289,11 +286,11 @@ public class EthGasPriceTest {
}
private void mockBaseFeeMarket() {
mockFeeMarket(new LondonFeeMarket(0));
mockFeeMarket(FeeMarket.london(0));
}
private void mockGasPriceMarket() {
mockFeeMarket(new LegacyFeeMarket());
mockFeeMarket(FeeMarket.legacy());
}
private void mockFeeMarket(final FeeMarket feeMarket) {
@@ -313,7 +310,7 @@ public class EthGasPriceTest {
final var genesisBlock = createFakeBlock(0, 0, genesisBaseFee);
blocksByNumber.put(0L, genesisBlock);
final var baseFeeMarket = new CancunFeeMarket(0, Optional.empty());
final var baseFeeMarket = FeeMarket.cancun(0, Optional.empty());
var baseFee = genesisBaseFee;
for (long i = 1; i <= chainHeadBlockNumber; i++) {

View File

@@ -48,7 +48,6 @@ import org.hyperledger.besu.ethereum.mainnet.PoWHasher;
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec;
import org.hyperledger.besu.ethereum.mainnet.blockhash.FrontierBlockHashProcessor;
import org.hyperledger.besu.ethereum.mainnet.feemarket.CancunFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket;
import org.hyperledger.besu.ethereum.worldstate.WorldStateArchive;
import org.hyperledger.besu.evm.gascalculator.CancunGasCalculator;
@@ -322,7 +321,7 @@ public class EthGetTransactionReceiptTest {
}
private void mockProtocolSpec(final BlockHeader blockHeader) {
FeeMarket feeMarket = new CancunFeeMarket(0, Optional.empty());
FeeMarket feeMarket = FeeMarket.cancun(0, Optional.empty());
ProtocolSpec spec = mock(ProtocolSpec.class);
when(spec.getFeeMarket()).thenReturn(feeMarket);
when(spec.getGasCalculator()).thenReturn(new CancunGasCalculator());

View File

@@ -38,7 +38,7 @@ import org.hyperledger.besu.ethereum.core.Difficulty;
import org.hyperledger.besu.ethereum.core.MiningConfiguration;
import org.hyperledger.besu.ethereum.core.Transaction;
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
import org.hyperledger.besu.ethereum.mainnet.feemarket.CancunFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket;
import org.hyperledger.besu.evm.log.LogsBloomFilter;
import java.math.BigInteger;
@@ -148,7 +148,7 @@ public class EthMaxPriorityFeePerGasTest {
final var genesisBlock = createFakeBlock(0, 0, genesisBaseFee);
blocksByNumber.put(0L, genesisBlock);
final var baseFeeMarket = new CancunFeeMarket(0, Optional.empty());
final var baseFeeMarket = FeeMarket.cancun(0, Optional.empty());
var baseFee = genesisBaseFee;
for (long i = 1; i <= chainHeadBlockNumber; i++) {

View File

@@ -677,6 +677,13 @@ public abstract class MainnetProtocolSpecs {
final boolean isParallelTxProcessingEnabled,
final MetricsSystem metricsSystem) {
final long londonForkBlockNumber = genesisConfigOptions.getLondonBlockNumber().orElse(0L);
final var cancunBlobSchedule =
genesisConfigOptions
.getBlobScheduleOptions()
.flatMap(BlobScheduleOptions::getCancun)
.orElse(BlobScheduleOptions.BlobSchedule.CANCUN_DEFAULT);
final BaseFeeMarket cancunFeeMarket;
if (genesisConfigOptions.isZeroBaseFee()) {
cancunFeeMarket = FeeMarket.zeroBaseFee(londonForkBlockNumber);
@@ -686,15 +693,12 @@ public abstract class MainnetProtocolSpecs {
londonForkBlockNumber, miningConfiguration.getMinTransactionGasPrice());
} else {
cancunFeeMarket =
FeeMarket.cancun(londonForkBlockNumber, genesisConfigOptions.getBaseFeePerGas());
FeeMarket.cancun(
londonForkBlockNumber,
genesisConfigOptions.getBaseFeePerGas(),
cancunBlobSchedule.getBaseFeeUpdateFraction());
}
final var cancunBlobSchedule =
genesisConfigOptions
.getBlobScheduleOptions()
.flatMap(BlobScheduleOptions::getCancun)
.orElse(BlobScheduleOptions.BlobSchedule.CANCUN_DEFAULT);
final java.util.function.Supplier<GasCalculator> cancunGasCalcSupplier =
() -> new CancunGasCalculator(cancunBlobSchedule.getTarget());
@@ -830,7 +834,10 @@ public abstract class MainnetProtocolSpecs {
londonForkBlockNumber, miningConfiguration.getMinTransactionGasPrice());
} else {
pragueFeeMarket =
FeeMarket.prague(londonForkBlockNumber, genesisConfigOptions.getBaseFeePerGas());
FeeMarket.prague(
londonForkBlockNumber,
genesisConfigOptions.getBaseFeePerGas(),
pragueBlobSchedule.getBaseFeeUpdateFraction());
}
return cancunDefinition(

View File

@@ -14,6 +14,7 @@
*/
package org.hyperledger.besu.ethereum.mainnet.feemarket;
import org.hyperledger.besu.config.BlobScheduleOptions;
import org.hyperledger.besu.datatypes.BlobGas;
import org.hyperledger.besu.datatypes.Wei;
@@ -26,11 +27,23 @@ import org.slf4j.LoggerFactory;
public class CancunFeeMarket extends LondonFeeMarket {
private static final Logger LOG = LoggerFactory.getLogger(CancunFeeMarket.class);
protected static final BigInteger BLOB_GAS_PRICE = BigInteger.ONE;
private static final BigInteger BLOB_GAS_PRICE_UPDATE_FRACTION = BigInteger.valueOf(3338477);
public CancunFeeMarket(
final long londonForkBlockNumber, final Optional<Wei> baseFeePerGasOverride) {
private final BigInteger baseFeeUpdateFraction;
CancunFeeMarket(
final long londonForkBlockNumber,
final Optional<Wei> baseFeePerGasOverride,
final long baseFeeUpdateFraction) {
super(londonForkBlockNumber, baseFeePerGasOverride);
this.baseFeeUpdateFraction = BigInteger.valueOf(baseFeeUpdateFraction);
}
CancunFeeMarket(final long londonForkBlockNumber, final Optional<Wei> baseFeePerGasOverride) {
this(
londonForkBlockNumber,
baseFeePerGasOverride,
BlobScheduleOptions.BlobSchedule.CANCUN_DEFAULT.getBaseFeeUpdateFraction());
}
@Override
@@ -42,8 +55,7 @@ public class CancunFeeMarket extends LondonFeeMarket {
public Wei blobGasPricePerGas(final BlobGas excessBlobGas) {
final var blobGasPrice =
Wei.of(
fakeExponential(
BLOB_GAS_PRICE, excessBlobGas.toBigInteger(), BLOB_GAS_PRICE_UPDATE_FRACTION));
fakeExponential(BLOB_GAS_PRICE, excessBlobGas.toBigInteger(), baseFeeUpdateFraction));
LOG.atTrace()
.setMessage("parentExcessBlobGas: {} blobGasPrice: {}")
.addArgument(excessBlobGas::toShortHexString)
@@ -67,4 +79,8 @@ public class CancunFeeMarket extends LondonFeeMarket {
}
return output.divide(denominator);
}
protected BigInteger getBaseFeeUpdateFraction() {
return baseFeeUpdateFraction;
}
}

View File

@@ -49,11 +49,25 @@ public interface FeeMarket {
return new CancunFeeMarket(londonForkBlockNumber, baseFeePerGasOverride);
}
static BaseFeeMarket cancun(
final long londonForkBlockNumber,
final Optional<Wei> baseFeePerGasOverride,
final long baseFeeUpdateFraction) {
return new CancunFeeMarket(londonForkBlockNumber, baseFeePerGasOverride, baseFeeUpdateFraction);
}
static BaseFeeMarket prague(
final long londonForkBlockNumber, final Optional<Wei> baseFeePerGasOverride) {
return new PragueFeeMarket(londonForkBlockNumber, baseFeePerGasOverride);
}
static BaseFeeMarket prague(
final long londonForkBlockNumber,
final Optional<Wei> baseFeePerGasOverride,
final long baseFeeUpdateFraction) {
return new PragueFeeMarket(londonForkBlockNumber, baseFeePerGasOverride, baseFeeUpdateFraction);
}
static BaseFeeMarket zeroBaseFee(final long londonForkBlockNumber) {
return new ZeroBaseFeeMarket(londonForkBlockNumber);
}

View File

@@ -20,7 +20,7 @@ import java.util.Optional;
public class FixedBaseFeeMarket extends LondonFeeMarket {
public FixedBaseFeeMarket(final long londonForkBlockNumber, final Wei fixedBaseFee) {
FixedBaseFeeMarket(final long londonForkBlockNumber, final Wei fixedBaseFee) {
super(londonForkBlockNumber, Optional.of(fixedBaseFee));
}

View File

@@ -21,7 +21,7 @@ public class LegacyFeeMarket implements FeeMarket {
private final TransactionPriceCalculator txPriceCalculator;
public LegacyFeeMarket() {
LegacyFeeMarket() {
this.txPriceCalculator = TransactionPriceCalculator.frontier();
}

View File

@@ -39,16 +39,15 @@ public class LondonFeeMarket implements BaseFeeMarket {
private final TransactionPriceCalculator txPriceCalculator;
private final Wei baseFeeFloor;
public LondonFeeMarket(final long londonForkBlockNumber) {
LondonFeeMarket(final long londonForkBlockNumber) {
this(londonForkBlockNumber, Optional.empty());
}
public LondonFeeMarket(
final long londonForkBlockNumber, final Optional<Wei> baseFeePerGasOverride) {
LondonFeeMarket(final long londonForkBlockNumber, final Optional<Wei> baseFeePerGasOverride) {
this(TransactionPriceCalculator.eip1559(), londonForkBlockNumber, baseFeePerGasOverride);
}
protected LondonFeeMarket(
LondonFeeMarket(
final TransactionPriceCalculator txPriceCalculator,
final long londonForkBlockNumber,
final Optional<Wei> baseFeePerGasOverride) {

View File

@@ -14,23 +14,30 @@
*/
package org.hyperledger.besu.ethereum.mainnet.feemarket;
import org.hyperledger.besu.config.BlobScheduleOptions;
import org.hyperledger.besu.datatypes.BlobGas;
import org.hyperledger.besu.datatypes.Wei;
import java.math.BigInteger;
import java.util.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class PragueFeeMarket extends CancunFeeMarket {
private static final BigInteger BLOB_BASE_FEE_UPDATE_FRACTION_ELECTRA =
BigInteger.valueOf(5007716);
private static final Logger LOG = LoggerFactory.getLogger(PragueFeeMarket.class);
public PragueFeeMarket(
final long londonForkBlockNumber, final Optional<Wei> baseFeePerGasOverride) {
super(londonForkBlockNumber, baseFeePerGasOverride);
PragueFeeMarket(
final long londonForkBlockNumber,
final Optional<Wei> baseFeePerGasOverride,
final long baseFeeUpdateFraction) {
super(londonForkBlockNumber, baseFeePerGasOverride, baseFeeUpdateFraction);
}
PragueFeeMarket(final long londonForkBlockNumber, final Optional<Wei> baseFeePerGasOverride) {
this(
londonForkBlockNumber,
baseFeePerGasOverride,
BlobScheduleOptions.BlobSchedule.PRAGUE_DEFAULT.getBaseFeeUpdateFraction());
}
@Override
@@ -38,9 +45,7 @@ public class PragueFeeMarket extends CancunFeeMarket {
final var blobGasPrice =
Wei.of(
fakeExponential(
BLOB_GAS_PRICE,
excessBlobGas.toBigInteger(),
BLOB_BASE_FEE_UPDATE_FRACTION_ELECTRA));
BLOB_GAS_PRICE, excessBlobGas.toBigInteger(), getBaseFeeUpdateFraction()));
LOG.atTrace()
.setMessage("parentExcessBlobGas: {} blobGasPrice: {}")
.addArgument(excessBlobGas::toShortHexString)

View File

@@ -18,7 +18,7 @@ import org.hyperledger.besu.datatypes.Wei;
public class ZeroBaseFeeMarket extends FixedBaseFeeMarket {
public ZeroBaseFeeMarket(final long londonForkBlockNumber) {
ZeroBaseFeeMarket(final long londonForkBlockNumber) {
super(londonForkBlockNumber, Wei.ZERO);
}

View File

@@ -30,7 +30,7 @@ class CancunFeeMarketTest {
@Test
void dataPricePerGas() {
CancunFeeMarket cancunFeeMarket = new CancunFeeMarket(0, Optional.empty());
final BaseFeeMarket cancunFeeMarket = FeeMarket.cancun(0, Optional.empty());
// when no excess blob gas, data price per gas is 1
assertEquals(1, cancunFeeMarket.blobGasPricePerGas(BlobGas.ZERO).getAsBigInteger().intValue());

View File

@@ -40,7 +40,7 @@ public class LondonFeeMarketTest {
.gasPrice(Wei.of(7))
.createTransaction(KEY_PAIR1);
final LondonFeeMarket londonFeeMarket = new LondonFeeMarket(0);
final BaseFeeMarket londonFeeMarket = FeeMarket.london(0);
assertThat(londonFeeMarket.satisfiesFloorTxFee(transaction)).isTrue();
}
@@ -54,7 +54,7 @@ public class LondonFeeMarketTest {
.gasPrice(null)
.createTransaction(KEY_PAIR1);
final LondonFeeMarket londonFeeMarket = new LondonFeeMarket(0);
final BaseFeeMarket londonFeeMarket = FeeMarket.london(0);
assertThat(londonFeeMarket.satisfiesFloorTxFee(transaction)).isFalse();
}
@@ -68,7 +68,7 @@ public class LondonFeeMarketTest {
.gasPrice(null)
.createTransaction(KEY_PAIR1);
final LondonFeeMarket londonFeeMarket = new LondonFeeMarket(0, Optional.of(Wei.ZERO));
final BaseFeeMarket londonFeeMarket = FeeMarket.london(0, Optional.of(Wei.ZERO));
assertThat(londonFeeMarket.satisfiesFloorTxFee(transaction)).isTrue();
}
}

View File

@@ -20,7 +20,6 @@ import static org.hyperledger.besu.ethereum.mainnet.headervalidationrules.EIP155
import org.hyperledger.besu.datatypes.Wei;
import org.hyperledger.besu.ethereum.mainnet.feemarket.BaseFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.LondonFeeMarket;
import java.util.Optional;
@@ -30,7 +29,7 @@ import org.junit.jupiter.api.Test;
public class BaseFeeMarketBlockHeaderGasPriceValidationRuleTest {
private static final long FORK_BLOCK = 800L;
private final BaseFeeMarket baseFeeMarket = new LondonFeeMarket(FORK_BLOCK);
private final BaseFeeMarket baseFeeMarket = FeeMarket.london(FORK_BLOCK);
private BaseFeeMarketBlockHeaderGasPriceValidationRule validationRule;
private final BaseFeeMarket feeMarket = FeeMarket.london(FORK_BLOCK);

View File

@@ -21,7 +21,7 @@ import org.hyperledger.besu.datatypes.Wei;
import org.hyperledger.besu.ethereum.core.BlockHeader;
import org.hyperledger.besu.ethereum.core.BlockHeaderTestFixture;
import org.hyperledger.besu.ethereum.mainnet.feemarket.BaseFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.FixedBaseFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket;
import java.util.Optional;
@@ -32,7 +32,7 @@ import org.junit.jupiter.params.provider.CsvSource;
public class GasLimitElasticityValidationRuleFixedBaseFeeMarketTest {
private static final Optional<BaseFeeMarket> fixedBaseFeeMarket =
Optional.of(new FixedBaseFeeMarket(10, Wei.ONE));
Optional.of(FeeMarket.fixedBaseFee(10, Wei.ONE));
public GasLimitRangeAndDeltaValidationRule uut =
new GasLimitRangeAndDeltaValidationRule(5000, MAX_VALUE, fixedBaseFeeMarket);

View File

@@ -20,7 +20,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import org.hyperledger.besu.ethereum.core.BlockHeader;
import org.hyperledger.besu.ethereum.core.BlockHeaderTestFixture;
import org.hyperledger.besu.ethereum.mainnet.feemarket.BaseFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.LondonFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket;
import java.util.Optional;
@@ -30,7 +30,7 @@ import org.junit.jupiter.params.provider.CsvSource;
public class GasLimitElasticityValidationRuleTest {
private static final Optional<BaseFeeMarket> baseFeeMarket = Optional.of(new LondonFeeMarket(10));
private static final Optional<BaseFeeMarket> baseFeeMarket = Optional.of(FeeMarket.london(10));
public GasLimitRangeAndDeltaValidationRule uut =
new GasLimitRangeAndDeltaValidationRule(5000, MAX_VALUE, baseFeeMarket);

View File

@@ -20,7 +20,7 @@ import static org.assertj.core.api.Assertions.assertThat;
import org.hyperledger.besu.ethereum.core.BlockHeader;
import org.hyperledger.besu.ethereum.core.BlockHeaderTestFixture;
import org.hyperledger.besu.ethereum.mainnet.feemarket.BaseFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.ZeroBaseFeeMarket;
import org.hyperledger.besu.ethereum.mainnet.feemarket.FeeMarket;
import java.util.Optional;
@@ -31,7 +31,7 @@ import org.junit.jupiter.params.provider.CsvSource;
public class GasLimitElasticityValidationRuleZeroBaseFeeMarketTest {
private static final Optional<BaseFeeMarket> zeroBaseFeeMarket =
Optional.of(new ZeroBaseFeeMarket(10));
Optional.of(FeeMarket.zeroBaseFee(10));
public GasLimitRangeAndDeltaValidationRule uut =
new GasLimitRangeAndDeltaValidationRule(5000, MAX_VALUE, zeroBaseFeeMarket);