Conversation
… latest_fork_id panic
* feat: add get_payload_v5 engine API method and BlobsBundleV2 re-export * feat: add ExecutionPayloadEnvelopeV5 engine type and payload builder V5 conversion * feat: add EngineGetPayloadVersion::V5 for Base V1, wire get_payload_v5 through consensus engine * fix: add Vec import for no_std and fix import ordering * fix: clarify EngineNewPayloadVersion V4 doc comment
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
| /// Logs hardfork activation when building the first block of a fork. | ||
| fn log_hardfork_activation(&self, timestamp: u64) { | ||
| if self.rollup_config.is_first_ecotone_block(timestamp) { | ||
| info!(target: "sequencer", "Sequencing ecotone upgrade block"); | ||
| } else if self.rollup_config.is_first_fjord_block(timestamp) { | ||
| info!(target: "sequencer", "Sequencing fjord upgrade block"); | ||
| } else if self.rollup_config.is_first_granite_block(timestamp) { | ||
| info!(target: "sequencer", "Sequencing granite upgrade block"); | ||
| } else if self.rollup_config.is_first_holocene_block(timestamp) { | ||
| info!(target: "sequencer", "Sequencing holocene upgrade block"); | ||
| } else if self.rollup_config.is_first_isthmus_block(timestamp) { | ||
| info!(target: "sequencer", "Sequencing isthmus upgrade block"); | ||
| } else if self.rollup_config.is_first_jovian_block(timestamp) { | ||
| info!(target: "sequencer", "Sequencing jovian upgrade block"); | ||
| } else if self.rollup_config.is_first_base_v1_block(timestamp) { | ||
| info!(target: "sequencer", "Sequencing base v1 upgrade block"); | ||
| } |
There was a problem hiding this comment.
should_use_tx_pool disables the tx pool for the first block of every fork from Ecotone through Jovian, but there's no corresponding check for is_first_base_v1_block. The logging was moved here, but the tx-pool-disable guard was not added for Base V1.
If the Base V1 activation block should be deposit-only (consistent with every other fork), should_use_tx_pool needs:
// Do not include transactions in the first Base V1 block.
if self.rollup_config.is_first_base_v1_block(attributes.payload_attributes.timestamp) {
return false;
}If this is intentionally different for Base V1, a comment in should_use_tx_pool explaining why would prevent future readers from assuming it's a bug.
| if [ -f "$OUTPUT_DIR/genesis.json" ] && [ -f "$OUTPUT_DIR/rollup.json" ]; then | ||
| echo "=== L2 Genesis already exists, skipping generation ===" | ||
| exit 0 | ||
| if [ -n "$L2_BASE_V1_BLOCK" ] && ! [[ "$L2_BASE_V1_BLOCK" =~ ^[0-9]+$ ]]; then |
There was a problem hiding this comment.
The early-exit guard that skipped genesis regeneration when genesis.json and rollup.json already exist was removed:
# Skip if L2 genesis already exists (for restarts)
if [ -f "$OUTPUT_DIR/genesis.json" ] && [ -f "$OUTPUT_DIR/rollup.json" ]; then
echo "=== L2 Genesis already exists, skipping generation ==="
exit 0
fiWithout this, every container restart will re-run the full genesis generation including op-deployer apply --deployment-target live, which re-deploys contracts to L1. Was this removal intentional? If so, it may be worth adding a comment explaining why idempotency is no longer needed. If not, the guard should be restored (possibly moved below the L2_BASE_V1_BLOCK validation).
Review Summary2 findings across the Rust sequencer code and devnet setup script. 1. Missing Base V1 tx pool guard (correctness)
File: 2. Removed genesis-exists guard (devnet reliability)The early-exit check that skipped genesis regeneration on container restarts was removed. Without it, File: |
cc7439f to
6657f4e
Compare
🟡 Heimdall Review Status
|
Description