Skip to content

Conversation

@twoeths
Copy link
Collaborator

@twoeths twoeths commented Dec 8, 2025

Motivation

  • when upgrading BeaconState, we have to manually clone() each field of ExecutionPayloadHeader from bellatrix -> capella and capella->deneb

Description

  • enhance clone() api to accept a pointer to super-set type
  • this is comptime check so should be safe
  • list of types are applied: Container, List, Vector

@gemini-code-assist
Copy link

Summary of Changes

Hello @twoeths, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a powerful enhancement to the clone API for SSZ (Simple Serialize) Container, List, and Vector types. By allowing the clone function to accept a pointer to any type (anytype) as its output, it facilitates seamless data migration from a source type to a destination type that is a superset of the source. This feature is particularly beneficial for managing evolving data structures, such as those encountered during Ethereum beacon state upgrades (e.g., Bellatrix to Capella, Capella to Deneb), where fields are added over time. The change reduces manual field-by-field assignments, making the code cleaner, more maintainable, and less prone to errors, all while maintaining compile-time type safety.

Highlights

  • Enhanced clone API: The clone functions for Container, List, and Vector types now accept anytype as the output parameter, enabling cloning into a superset type.
  • Compile-time Safety: This enhancement is designed with compile-time checks, ensuring type safety when cloning between compatible (superset) structures.
  • Simplified State Upgrades: The new API significantly reduces boilerplate code in state transition logic, as demonstrated by refactoring upgradeStateToCapella and upgradeStateToDeneb to use the enhanced clone for ExecutionPayloadHeader.
  • Improved Test Coverage: New test cases have been added for FixedContainerType, VariableContainerType, FixedListType, VariableListType, FixedVectorType, and VariableVectorType to validate cloning into larger, compatible types.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a significant enhancement to the clone API for SSZ types (Container, List, Vector), allowing cloning into a superset type. This is a well-executed improvement that greatly simplifies the state upgrade logic, as demonstrated by the refactoring in upgrade_state_to_capella.zig and upgrade_state_to_deneb.zig. The use of anytype and compile-time checks is idiomatic and effective. The accompanying tests are thorough and validate the new functionality well. My review comments focus on further improving safety by adding comptime assertions to the new clone functions, in accordance with the repository's style guide, which emphasizes the rigorous use of assertions.

capella_latest_execution_payload_header.base_fee_per_gas = bellatrix_latest_execution_payload_header.base_fee_per_gas;
capella_latest_execution_payload_header.block_hash = bellatrix_latest_execution_payload_header.block_hash;
capella_latest_execution_payload_header.transactions_root = bellatrix_latest_execution_payload_header.transactions_root;
try ssz.bellatrix.ExecutionPayloadHeader.clone(allocator, &bellatrix_latest_execution_payload_header, &capella_latest_execution_payload_header);
Copy link
Collaborator Author

@twoeths twoeths Dec 8, 2025

Choose a reason for hiding this comment

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

applied the new clone() api here and the below upgrade_state_to_deneb.zig

Copy link
Contributor

Choose a reason for hiding this comment

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

amazing!

@twoeths twoeths marked this pull request as ready for review December 8, 2025 06:37
@twoeths twoeths force-pushed the te/enhance_clone_api branch from 75296fb to 979862a Compare December 18, 2025 08:51
@twoeths twoeths requested a review from a team as a code owner January 12, 2026 10:25
spiral-ladder
spiral-ladder previously approved these changes Jan 12, 2026
Copy link
Contributor

@spiral-ladder spiral-ladder left a comment

Choose a reason for hiding this comment

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

LGTM with nits

Copy link
Contributor

@spiral-ladder spiral-ladder left a comment

Choose a reason for hiding this comment

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

committed my nitpicks; LGTM

@spiral-ladder spiral-ladder merged commit 138b94d into main Jan 12, 2026
8 checks passed
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.

3 participants