Skip to content

feat: expand forkChoiceUpdatedV3 with basic block building#540

Merged
fmoletta merged 24 commits into
mainfrom
engine-hive
Sep 27, 2024
Merged

feat: expand forkChoiceUpdatedV3 with basic block building#540
fmoletta merged 24 commits into
mainfrom
engine-hive

Conversation

@fmoletta

@fmoletta fmoletta commented Sep 23, 2024

Copy link
Copy Markdown
Contributor

Motivation

Add basic block building to forkChoiceUpdatedV3

Description

  • Expand engine_forkChoiceUpdated:
    • Add validations
    • Fix fork state update conditions
    • Add basic block building

With these changes hive engine tests no longer fail after calling engine_forkChoiceUpdatedV3. We still need to implement engine_getPayload to progress further
NOTE: Some fixes over this code have been included in #571 (Computing the state root for newly built payloads instead of using the parent state root)

Closes None, is part of #344

@fmoletta fmoletta changed the title [WIP] Work on hive engine tests feat: expand forkChoiceUpdatedV3 with basic block building Sep 24, 2024
@fmoletta fmoletta marked this pull request as ready for review September 26, 2024 16:50
@fmoletta fmoletta requested a review from a team as a code owner September 26, 2024 16:50
}

impl BuildPayloadArgs {
/// Computes an 8-byte identifier by hashing the components of the payload arguments.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

this is what the spec says? not against it, just curious

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I think I took it from geth. The spec says 8 Bytes - identifier of the payload build process

Comment thread crates/blockchain/payload.rs Outdated
gas_limit,
gas_used: 0,
timestamp: args.timestamp,
// TODO: should use miner config's extra_data

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

nit, the concept of miner doesn't exist anymore in post merge networks. it's either proposer or builder

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Switched to builder

Comment thread crates/storage/engines/api.rs Outdated
// Set the canonical block hash for a given block number.
fn set_canonical_block(&self, number: BlockNumber, hash: BlockHash) -> Result<(), StoreError>;

fn add_local_block(&self, payload_id: u64, block: Block) -> Result<(), StoreError>;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

hmm, I would rename to payload, since block might be a bit confusing. WDYT?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I figured block should be included in the name as the type stored is a Block, but I agree

@fmoletta fmoletta added this pull request to the merge queue Sep 27, 2024
Merged via the queue into main with commit 0270aef Sep 27, 2024
@fmoletta fmoletta deleted the engine-hive branch September 27, 2024 16:14
github-merge-queue Bot pushed a commit that referenced this pull request Sep 30, 2024
…g pipeline (#571)

Depends on #540 
**Motivation**
Being able to run the full basic block building pipeline
(forkChoiceUpdated -> getPayload -> newPayload)
CURRENT_STATUS: I could successfully run some tests that ran the above
sequence, we still need to add transactions sent by sendRawTransaction
endpoint to the payload in order to fully build blocks
<!-- Why does this pull request exist? What are its goals? -->

**Description**
* Add rpc endpoint `engine_getPayloadV3`
* Compute new state root (after applying beacon_root contract &
withdrawals) when building a new payload (`engine_forkChoiceUpdated`)
* Set new block as canonical in `engine_newPayloadV3` (TEMP FIX for not
being able to fetch non canonical blocks)

Missing work (for a later PR)
* Fetch transactions from the mempool and add them to the block
* Populate BlobsBundle 

<!-- A clear and concise general description of the changes this PR
introduces -->

<!-- Link to issues: Resolves #111, Resolves #222 -->

Closes None, but is part of #344
mpaulucci pushed a commit that referenced this pull request Oct 16, 2024
**Motivation**

Add basic block building to forkChoiceUpdatedV3

<!-- Why does this pull request exist? What are its goals? -->

**Description**

* Expand engine_forkChoiceUpdated:
   - Add validations
   - Fix fork state update conditions
   - Add basic block building

With these changes hive engine tests no longer fail after calling
engine_forkChoiceUpdatedV3. We still need to implement engine_getPayload
to progress further
NOTE: Some fixes over this code have been included in #571 (Computing
the state root for newly built payloads instead of using the parent
state root)
<!-- A clear and concise general description of the changes this PR
introduces -->

<!-- Link to issues: Resolves #111, Resolves #222 -->

Closes None, is part of #344
mpaulucci pushed a commit that referenced this pull request Oct 16, 2024
…g pipeline (#571)

Depends on #540 
**Motivation**
Being able to run the full basic block building pipeline
(forkChoiceUpdated -> getPayload -> newPayload)
CURRENT_STATUS: I could successfully run some tests that ran the above
sequence, we still need to add transactions sent by sendRawTransaction
endpoint to the payload in order to fully build blocks
<!-- Why does this pull request exist? What are its goals? -->

**Description**
* Add rpc endpoint `engine_getPayloadV3`
* Compute new state root (after applying beacon_root contract &
withdrawals) when building a new payload (`engine_forkChoiceUpdated`)
* Set new block as canonical in `engine_newPayloadV3` (TEMP FIX for not
being able to fetch non canonical blocks)

Missing work (for a later PR)
* Fetch transactions from the mempool and add them to the block
* Populate BlobsBundle 

<!-- A clear and concise general description of the changes this PR
introduces -->

<!-- Link to issues: Resolves #111, Resolves #222 -->

Closes None, but is part of #344
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.

2 participants