-
Notifications
You must be signed in to change notification settings - Fork 468
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
eip 7840 implementation #7964
base: master
Are you sure you want to change the base?
eip 7840 implementation #7964
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
looks good, but please add tests.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, as discussed. i dont think we need the EIP7840 enabled. we can just replace the constants with whatever we push in the chainspec for the cancun through the same mechanism
# Conflicts: # src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainParameters.cs
src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs
Outdated
Show resolved
Hide resolved
src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecLoader.cs
Outdated
Show resolved
Hide resolved
src/Nethermind/Nethermind.Blockchain.Test/TransactionSelectorTests.cs
Outdated
Show resolved
Hide resolved
src/Nethermind/Nethermind.Blockchain.Test/TransactionSelectorTests.cs
Outdated
Show resolved
Hide resolved
src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs
Outdated
Show resolved
Hide resolved
src/Nethermind/Nethermind.Blockchain.Test/Validators/ShardBlobBlockValidatorTests.cs
Outdated
Show resolved
Hide resolved
src/Nethermind/Nethermind.Blockchain.Test/Validators/TxValidatorTests.cs
Outdated
Show resolved
Hide resolved
src/Nethermind/Nethermind.Evm.Test/TransactionProcessorEip4844Tests.cs
Outdated
Show resolved
Hide resolved
src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/PooledTxsRequestor.cs
Outdated
Show resolved
Hide resolved
@@ -282,10 +283,10 @@ public async Task SendData( | |||
|
|||
if (defaultMaxFeePerBlobGas is null) | |||
{ | |||
ulong excessBlobsReserve = 2 * Eip4844Constants.TargetBlobGasPerBlock; | |||
ulong excessBlobsReserve = 2 * Cancun.Instance.TargetBlobCount; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we might need to change this
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe we add spec as command line param to this tool
src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/PooledTxsRequestor.cs
Outdated
Show resolved
Hide resolved
spec.TargetBlobCount = 3; | ||
spec.MaxBlobCount = 6; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think they should be zero as written here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes, according to the EIP it should be zero
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
changed back to zero
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@MarekM25 did this i think to fix hive tests. For hive, i think we should specifiy them in its chainspec
src/Nethermind/Nethermind.Network/P2P/Subprotocols/Eth/PooledTxsRequestor.cs
Outdated
Show resolved
Hide resolved
"terminalTotalDifficulty": "231707791542740786049188744689299064356246512" | ||
"terminalTotalDifficulty": "231707791542740786049188744689299064356246512", | ||
"blobSchedule": { | ||
"cancun": { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should it be by fork name? Normally we are using timestamps now to mark changes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes, as per EIp it should be by fork name
Co-authored-by: yerke26 <[email protected]>
{ | ||
int blobCount = transaction.BlobVersionedHashes!.Length; | ||
ulong totalDataGas = BlobGasCalculator.CalculateBlobGas(blobCount); | ||
return totalDataGas > Eip4844Constants.MaxBlobGasPerTransaction ? TxErrorMessages.BlobTxGasLimitExceeded | ||
// maxBlobGasPerTxn = maxBlobGasPerBlock | ||
var maxBlobGasPerTxn = spec.MaxBlobCount * Eip4844Constants.GasPerBlob; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
spec.MaxBlobCount * Eip4844Constants.GasPerBlob
is a pattern repeated in many places. @yerke26, you could consider creating an extension method in ReleaseSpecExtensions (create the class if it doesn't exist) and adding methods like MaxBlobGas => spec.MaxBlobCount * Eip4844Constants.GasPerBlob
. This approach will make the code more elegant and eliminate the need to calculate it in multiple places
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
or even you can think of method that take blobCount as an input and return if it is valid or not. The same pattern I have seen in BlockValidator
"prague": { | ||
"target": 6, | ||
"max": 9, | ||
"baseFeeUpdateFraction": 5007716 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mixed hex (chiado) and decimals
{ | ||
if (_logger.IsTrace) _logger.Trace($"Declining {blobTx.ToShortString()}, no more blob space. Block already have {blobGasCounter} blob gas which is max value allowed."); | ||
break; | ||
} | ||
|
||
checkedBlobTransactions++; | ||
|
||
ulong txBlobGas = (ulong)(blobTx.BlobVersionedHashes?.Length ?? 0) * _eip4844Config.GasPerBlob; | ||
if (txBlobGas > _eip4844Config.MaxBlobGasPerBlock - blobGasCounter) | ||
ulong txBlobGas = (ulong)(blobTx.BlobVersionedHashes?.Length ?? 0) * Eip4844Constants.GasPerBlob; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
refactor?
@@ -102,8 +102,8 @@ static bool FakeExponentialOverflow(UInt256 factor, UInt256 num, UInt256 denomin | |||
|
|||
ulong excessBlobGas = parentBlockHeader.ExcessBlobGas ?? 0; | |||
excessBlobGas += parentBlockHeader.BlobGasUsed ?? 0; | |||
return excessBlobGas < Eip4844Constants.TargetBlobGasPerBlock | |||
return excessBlobGas < releaseSpec.TargetBlobCount * Eip4844Constants.GasPerBlob |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
refactor?
ulong maxBlobCount = specProvider.TransitionActivations | ||
.Select(transitionActivation => specProvider.GetSpec(transitionActivation).MaxBlobCount) | ||
.DefaultIfEmpty(0ul) | ||
.Max(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we use head here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Revert
Closes #9129
What types of changes does your code introduce?
Testing
Requires testing
If yes, did you write tests?
Notes on testing
Optional. Remove if not applicable.
Documentation
Requires documentation update
If yes, link the PR to the docs update or the issue with the details labeled
docs
. Remove if not applicable.Requires explanation in Release Notes
If yes, fill in the details here. Remove if not applicable.
Remarks
Optional. Remove if not applicable.