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

eip 7840 implementation #7964

Open
wants to merge 47 commits into
base: master
Choose a base branch
from
Open

eip 7840 implementation #7964

wants to merge 47 commits into from

Conversation

yerke26
Copy link
Contributor

@yerke26 yerke26 commented Dec 23, 2024

Closes #9129

What types of changes does your code introduce?

  • Bugfix (a non-breaking change that fixes an issue)
  • New feature (a non-breaking change that adds functionality)
  • Breaking change (a change that causes existing functionality not to work as expected)
  • Optimization
  • Refactoring
  • Documentation update
  • Build-related changes
  • Other: Description

Testing

Requires testing

  • Yes
  • No

If yes, did you write tests?

  • Yes
  • No

Notes on testing

Optional. Remove if not applicable.

Documentation

Requires documentation update

  • Yes
  • No

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

  • Yes
  • No

If yes, fill in the details here. Remove if not applicable.

Remarks

Optional. Remove if not applicable.

Copy link
Contributor

@smartprogrammer93 smartprogrammer93 left a 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.

Copy link
Contributor

@smartprogrammer93 smartprogrammer93 left a 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

@yerke26 yerke26 requested a review from rubo as a code owner December 30, 2024 12:02
@@ -282,10 +283,10 @@ public async Task SendData(

if (defaultMaxFeePerBlobGas is null)
{
ulong excessBlobsReserve = 2 * Eip4844Constants.TargetBlobGasPerBlock;
ulong excessBlobsReserve = 2 * Cancun.Instance.TargetBlobCount;
Copy link
Contributor

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

Copy link
Contributor Author

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

Comment on lines +265 to +266
spec.TargetBlobCount = 3;
spec.MaxBlobCount = 6;
Copy link
Contributor Author

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

Copy link
Contributor

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

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed back to zero

Copy link
Contributor

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

"terminalTotalDifficulty": "231707791542740786049188744689299064356246512"
"terminalTotalDifficulty": "231707791542740786049188744689299064356246512",
"blobSchedule": {
"cancun": {
Copy link
Member

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.

Copy link
Contributor Author

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

{
int blobCount = transaction.BlobVersionedHashes!.Length;
ulong totalDataGas = BlobGasCalculator.CalculateBlobGas(blobCount);
return totalDataGas > Eip4844Constants.MaxBlobGasPerTransaction ? TxErrorMessages.BlobTxGasLimitExceeded
// maxBlobGasPerTxn = maxBlobGasPerBlock
var maxBlobGasPerTxn = spec.MaxBlobCount * Eip4844Constants.GasPerBlob;
Copy link
Contributor

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

Copy link
Contributor

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
Copy link
Contributor

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;
Copy link
Contributor

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
Copy link
Contributor

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();
Copy link
Contributor

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?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Revert

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants