Skip to content

Conversation

@alpe
Copy link
Contributor

@alpe alpe commented Nov 27, 2025

Overview

Resolves #2609

The basic idea is to store an additional DAHightHint field within the p2p store.

As SignedHeader and Data are used in other places, too. I added an an DAHeightHintContainer type to wrap the tuple for the store only.
The DAHeight Hint is added by the da_submitter and read in the syncer to fetch the missing DA header/data for the most recent block as required.

Please note: this is a breaking change to the p2p network and store

@claude
Copy link
Contributor

claude bot commented Nov 27, 2025

Claude finished @alpe's task in 4m 39s —— View job


Comprehensive Code Review ✅

I've completed a thorough review of this PR, which introduces DA height hints to optimize block syncing by providing hints about where headers/data can be found in the DA layer. Here's my detailed analysis:


1. Architecture & Design

✅ Strengths

Clean Generic Design: The P2PEnvelope[H] generic wrapper in types/p2p_envelope.go:14-48 is well-designed, allowing flexible wrapping of different message types while maintaining type safety and satisfying the header.Header interface.

Binary Compatibility Strategy: The use of P2PSignedHeader and P2PData protobuf messages with optional DA hint fields (proto/evnode/v1/evnode.proto:111-123) achieves backward compatibility. Old nodes can decode new messages (ignoring the optional field), and new nodes can decode old messages (DA hint defaults to 0).

Async DA Retrieval: The new AsyncDARetriever (block/internal/syncing/async_da_retriever.go:11-112) with worker pool pattern is excellent for non-blocking DA fetches. The deduplication via inFlight map prevents redundant DA queries.

⚠️ Concerns

Incomplete Migration: Line 661 in block/internal/syncing/syncer.go has a TODO comment stating "To be reverted once DA Hints are merged" - but this PR IS the DA hints PR. This code writes to P2P stores WITHOUT DA hints when events come from DA. This creates an inconsistency:

  • DA submitter adds hints via AppendDAHint (lines 213, 258)
  • But syncer writes to P2P stores without hints when processing DA events (lines 666, 671)

Recommendation: Remove the TODO and update the code to properly set DA hints when writing to P2P stores from DA events. The DA height is available in the event (event.DaHeight).

// Instead of:
s.headerStore.WriteToStoreAndBroadcast(ctx, &types.P2PSignedHeader{Message: event.Header}, ...)

// Should be:
s.headerStore.WriteToStoreAndBroadcast(ctx, &types.P2PSignedHeader{
    Message: event.Header, 
    DAHeightHint: event.DaHeight,
}, ...)

DA Hint Source of Truth: There are now multiple ways DA hints get set:

  1. DA submitter sets hints after successful submission (da_submitter.go:213, 258)
  2. DA retriever provides hints when fetching from DA store (sync_service.go:102-104, 164-166)
  3. P2P network propagates hints in envelopes

This complexity could lead to inconsistencies. Consider documenting the precedence and lifecycle of DA hints more explicitly.


2. Error Handling & Resilience

✅ Strengths

Graceful Error Handling: DA hint appending errors are logged but don't block operations (da_submitter.go:213-216, 258-261). This is correct since hints are optimizations, not critical for correctness.

Context Cancellation: AsyncDARetriever properly handles context cancellation in both worker loop (async_da_retriever.go:83) and result channel sending (async_da_retriever.go:107).

⚠️ Concerns

Silent DA Hint Failures: When AppendDAHint fails in da_submitter.go:213-216, the error is only logged. While this prevents blocking submissions, there's no metric or alert to track DA hint append failures. This makes it hard to detect if the optimization is degraded.

Recommendation: Add a metric for DA hint append failures to track this optimization's health:

s.metrics.DAHintAppendFailures.Add(1)

Unbounded Retry in SetProcessedHeight: p2p_handler.go:63-72 has a 1,000 iteration loop for compare-and-swap. While unlikely to fail repeatedly, there's no timeout or error return if all attempts fail.

Recommendation: Consider logging if retries exceed a threshold (e.g., 10) to detect potential contention issues.


3. Concurrency & Thread Safety

✅ Strengths

Proper Synchronization:

  • AsyncDARetriever uses mutex for inFlight map (async_da_retriever.go:62-67)
  • Atomic operations for processedHeight in P2PHandler (p2p_handler.go:63-72)
  • Proper worker pool lifecycle management with WaitGroup (async_da_retriever.go:51-56)

Deadlock Prevention: Channel sends in AsyncDARetriever.RequestRetrieval use non-blocking select with default case (async_da_retriever.go:69-75), preventing blocking when worker pool is full.

⚠️ Concerns

Worker Pool Size: Hardcoded 5 workers in AsyncDARetriever.Start (async_da_retriever.go:43). For high-throughput scenarios with many concurrent sync operations, this might become a bottleneck.

Recommendation: Make worker pool size configurable, potentially based on the expected DA query latency and block production rate.

Channel Buffer Sizes:

  • workCh buffer size is 100 (async_da_retriever.go:33)
  • resultCh buffer varies by caller

These magic numbers should be documented or made configurable. If 100 requests queue up, subsequent requests are silently dropped (line 74).


4. Security

✅ Strengths

Proposer Validation: P2PHandler.assertExpectedProposer (p2p_handler.go:132-138) validates proposer addresses, preventing malicious blocks from unauthorized proposers.

Data Consistency Checks: P2PHandler.ProcessHeight validates that header's data hash matches actual data commitment (p2p_handler.go:104-108), preventing header/data mismatch attacks.

⚠️ Concerns

No DA Hint Validation: DA hints are accepted from P2P peers without validation. A malicious peer could provide incorrect hints, causing unnecessary DA queries to wrong heights. While this doesn't compromise correctness (actual DA data is validated), it could be a DoS vector.

Recommendation: Consider adding validation or rate limiting:

  1. Track hint accuracy per peer
  2. Penalize peers providing consistently wrong hints
  3. Add metrics for hint miss rates

Optional Field Handling: The protobuf optional fields (DaHeightHint) default to 0 when not set. This is semantically ambiguous - does 0 mean "no hint" or "DA height 0"? For a DA starting at height 1, this works, but it's fragile.

Recommendation: Use a sentinel value (e.g., math.MaxUint64) to explicitly represent "no hint available" rather than relying on 0.


5. Performance & Resource Efficiency

✅ Strengths

Optimization Impact: This PR's main goal is performance optimization - avoiding full DA scans when syncing by using hints. The async retrieval pattern means DA queries don't block the sync path.

Efficient Marshaling: Binary compatibility approach means existing SignedHeader and Data types don't need changes, avoiding widespread refactoring.

⚠️ Concerns

Memory Overhead: Every P2P store entry now carries an additional uint64 (8 bytes) for the DA hint. For nodes storing millions of blocks, this adds up. However, the optimization likely outweighs the cost.

DA Store Queries: The sync_service.go getters query DA store for state (GetStateAtHeight) for EVERY P2P store read to populate DA hints (sync_service.go:97-104, 159-166, 188-195). This could be expensive if:

  1. State queries are not cached
  2. High read volume on P2P stores

Recommendation:

  1. Consider caching state-to-DA-height mappings
  2. Add metrics to track DA store query latency during P2P reads
  3. Evaluate whether hints should be populated lazily vs. eagerly

Hint Propagation Delay: DA hints are added AFTER DA submission succeeds (da_submitter.go:213, 258). There's a window where:

  1. Block is submitted to DA
  2. Block is written to P2P store (without hint)
  3. DA submission returns
  4. Hint is appended to P2P store

During this window, peers might fetch the block without the hint. While not incorrect, it reduces optimization effectiveness.


6. Testing

✅ Strengths

Comprehensive Unit Tests:

  • Binary compatibility verified in types/p2p_envelope_test.go:92-153
  • Async retriever deduplication tested in async_da_retriever_test.go:39-85
  • Worker pool limits tested in async_da_retriever_test.go:87-141

Test Coverage: 66.30% patch coverage per Codecov report is decent for new functionality.

⚠️ Concerns

93 Lines Missing Coverage: Key areas lacking coverage according to Codecov:

  • pkg/sync/sync_service.go: 57.83% (21 missing, 14 partials)
  • types/p2p_envelope.go: 53.42% (29 missing, 5 partials)
  • block/internal/syncing/syncer.go: 58.62% (12 missing)

No Integration Test for Full Flow: Tests verify individual components but not the end-to-end flow:

  1. Block produced and submitted to DA
  2. DA height hint added to P2P store
  3. Peer syncs and retrieves block with hint
  4. Peer uses hint to fetch from correct DA height

Recommendation: Add an integration test in test/integration/ that verifies the full sync optimization path using DA hints.

Missing Edge Cases:

  • What happens when DA hint points to wrong height?
  • What happens when DA height not yet available (hint points to future)?
  • Concurrent writes to same P2P store entry with different hints?

7. Documentation & Migration

⚠️ Major Concerns

No Migration Documentation: The PR description states "this is a breaking change to the p2p network and store" but provides no migration guide. Critical questions unanswered:

  1. Network Upgrade: How should existing networks upgrade without partitioning?
  2. Store Migration: How do nodes migrate existing P2P stores to include hints?
  3. Rollback Strategy: Can nodes safely rollback if issues arise?
  4. Compatibility Window: Should there be a version that supports both formats during transition?

Review Comments Reference Solution: @alpe mentioned (Dec 15) adding types "binary compatible" with old types. The code implements this, but it's not documented in the PR description or migration guide.

Recommendation: Add to PR description:

## Migration Strategy

### Network Compatibility
- New protobuf messages use optional fields for backward compatibility
- Old nodes can receive new messages (ignore DA hint field)
- New nodes can receive old messages (DA hint defaults to 0)
- Recommend coordinated upgrade across network

### Store Migration
- Existing P2P stores work without migration
- DA hints will be populated for new blocks
- Old blocks will have hint = 0 (no optimization, but functional)
- Optional: Background migration to populate hints for historical blocks

### Rollback
- Rolling back requires wiping P2P stores OR accepting that hints won't be read
- Not recommended after network majority upgrades

Missing Code Documentation:

  • P2PEnvelope generic type lacks doc comment explaining its purpose
  • DaHeightHints field in DAHeightEvent (common/event.go:25) has comment but doesn't explain why it's an array of 2
  • EntityWithDAHint interface (sync_service.go:40-44) lacks explanation of its role

8. Critical Issues Found

🔴 Issue 1: Incomplete DA Hint Propagation (High Priority)

File: block/internal/syncing/syncer.go:661-676

The TODO comment indicates this code path was meant to be updated but wasn't. When events from DA are written to P2P stores, DA hints are not included.

Impact: Reduces effectiveness of the optimization - blocks synced from DA won't have hints in P2P store, so subsequent peers won't benefit.

Fix: Fix incomplete DA hint propagation →

🟡 Issue 2: Ambiguous Zero Value (Medium Priority)

Files: proto/evnode/v1/evnode.proto:115, 122 and usage throughout

Using optional uint64 where 0 means "no hint" is ambiguous. If DA actually starts at height 0, there's confusion.

Impact: Could cause incorrect optimization behavior if DA uses height 0.

Fix: Document clearly that 0 means "no hint" or use sentinel value.

🟡 Issue 3: Missing Test for Network Upgrade (Medium Priority)

No test verifies that old message format can be decoded by new code and vice versa under realistic network conditions.

Impact: Risk of network partition during upgrade if compatibility breaks.

Fix: Add backward compatibility integration test →

🟢 Issue 4: Network Testing Required (Low Priority - Process Issue)

Per @tac0turtle's comment (Jan 12), this needs testing on an existing network. The PR shows no evidence of this testing.

Impact: Unknown real-world behavior, potential for production issues.

Recommendation: Deploy to testnet and provide results before merging.


9. Code Quality & Go Conventions

✅ Strengths

  • Consistent error wrapping with context
  • Proper use of zerolog for structured logging
  • Good separation of concerns (submitter, syncer, p2p handler)
  • Effective use of Go generics in P2PEnvelope

Minor Issues

Magic Numbers: Several hardcoded values without constants:

  • Worker pool size: 5 (async_da_retriever.go:43)
  • Work channel buffer: 100 (async_da_retriever.go:33)
  • CAS retry limit: 1000 (p2p_handler.go:63)

Inconsistent Naming:

  • DaHeightHints (camelCase in field) vs DAHeightHint (PascalCase in proto)
  • Should standardize on DA or Da for consistency

10. CI Status

Current Status: Most checks passing, one failure:

  • ❌ Docs Deploy Preview (failing)
  • ✅ Semantic PR, Docs Build, Rust Tests, Rust Lint (passing)
  • ⏳ CI, PR checks (in progress)

The docs deployment failure appears unrelated to this PR's core functionality.


11. Summary & Recommendations

Must Fix Before Merge

  1. Fix DA hint propagation in syncer.go:661-676 - Critical for feature to work correctly
  2. Add migration documentation - Required for safe network upgrade
  3. Test on existing network - As requested by maintainer (@tac0turtle)

Should Fix Before Merge

  1. Add metrics for DA hint append failures
  2. Improve test coverage for edge cases (wrong hints, concurrent writes)
  3. Document the zero-value ambiguity for DA hints
  4. Add integration test for backward compatibility

Consider for Follow-up

  1. Make worker pool size configurable
  2. Add hint accuracy tracking and peer reputation
  3. Optimize DA store queries with caching
  4. Background migration for historical blocks

Conclusion

This is a solid optimization PR with a thoughtful design for backward compatibility. The async DA retrieval pattern and binary-compatible protobuf approach are well-executed. However, there are critical gaps:

  1. Incomplete implementation (syncer.go TODO)
  2. Missing migration strategy documentation
  3. No network testing evidence

These must be addressed before merge. The code quality is generally good, with comprehensive unit tests, but integration testing and documentation need strengthening.

Estimated Merge Readiness: 75% - Core functionality is sound, but critical gaps in completeness and testing remain.


@github-actions
Copy link
Contributor

github-actions bot commented Nov 27, 2025

The latest Buf updates on your PR. Results from workflow CI / buf-check (pull_request).

BuildFormatLintBreakingUpdated (UTC)
✅ passed⏩ skipped✅ passed✅ passedJan 22, 2026, 10:32 AM

@alpe alpe changed the title Alex/hints feat: DA hints in p2p Nov 28, 2025
@codecov
Copy link

codecov bot commented Nov 28, 2025

Codecov Report

❌ Patch coverage is 66.30435% with 93 lines in your changes missing coverage. Please review.
✅ Project coverage is 58.97%. Comparing base (9348732) to head (94fe911).

Files with missing lines Patch % Lines
pkg/sync/sync_service.go 57.83% 21 Missing and 14 partials ⚠️
types/p2p_envelope.go 53.42% 29 Missing and 5 partials ⚠️
block/internal/syncing/syncer.go 58.62% 12 Missing ⚠️
block/internal/syncing/async_da_retriever.go 86.53% 6 Missing and 1 partial ⚠️
block/internal/submitting/da_submitter.go 80.95% 2 Missing and 2 partials ⚠️
pkg/store/store.go 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2891      +/-   ##
==========================================
+ Coverage   58.63%   58.97%   +0.33%     
==========================================
  Files         111      113       +2     
  Lines       10405    10634     +229     
==========================================
+ Hits         6101     6271     +170     
- Misses       3659     3699      +40     
- Partials      645      664      +19     
Flag Coverage Δ
combined 58.97% <66.30%> (+0.33%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

alpe added 3 commits November 28, 2025 17:20
* main:
  refactor: omit unnecessary reassignment (#2892)
  build(deps): Bump the all-go group across 5 directories with 6 updates (#2881)
  chore: fix inconsistent method name in retryWithBackoffOnPayloadStatus comment (#2889)
  fix: ensure consistent network ID usage in P2P subscriber (#2884)
cache.SetHeaderDAIncluded(headerHash.String(), res.Height, header.Height())
hashes[i] = headerHash
}
if err := s.headerDAHintAppender.AppendDAHint(ctx, res.Height, hashes...); err != nil {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is where the DA height is passed to the sync service to update the p2p store

Msg("P2P event with DA height hint, triggering targeted DA retrieval")

// Trigger targeted DA retrieval in background via worker pool
s.asyncDARetriever.RequestRetrieval(daHeightHint)
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is where the "fetch from DA" is triggered for the current block event height

type SignedHeaderWithDAHint = DAHeightHintContainer[*types.SignedHeader]
type DataWithDAHint = DAHeightHintContainer[*types.Data]

type DAHeightHintContainer[H header.Header[H]] struct {
Copy link
Contributor Author

@alpe alpe Dec 1, 2025

Choose a reason for hiding this comment

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

This is a data container to persist the DA hint together with the block header or data.
types.SignedHeader and types.Data are used all over the place so I did not modify them but added introduced this type for the p2p store and transfer only.

It may make sense to do make this a Proto type. WDYT?

return nil
}

func (s *SyncService[V]) AppendDAHint(ctx context.Context, daHeight uint64, hashes ...types.Hash) error {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Stores the DA height hints

@alpe alpe marked this pull request as ready for review December 1, 2025 09:32
@tac0turtle
Copy link
Contributor

if da hint is not in the proto how do other nodes get knowledge of the hint?

also how would an existing network handle using this feature? its breaking so is it safe to upgrade?

"github.com/evstack/ev-node/block/internal/cache"
"github.com/evstack/ev-node/block/internal/common"
"github.com/evstack/ev-node/block/internal/da"
coreda "github.com/evstack/ev-node/core/da"
Copy link
Member

Choose a reason for hiding this comment

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

nit: gci linter

Copy link
Member

@julienrbrt julienrbrt left a comment

Choose a reason for hiding this comment

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

Nice! It really makes sense.

I share the same concern as @tac0turtle however about the upgrade strategy given it is p2p breaking.

julienrbrt
julienrbrt previously approved these changes Dec 2, 2025
@alpe
Copy link
Contributor Author

alpe commented Dec 2, 2025

if da hint is not in the proto how do other nodes get knowledge of the hint?

The sync_service wraps the header/data payload in a DAHeightHintContainer object that is passed upstream to the p2p layer. When the DA height is known, the store is updated.

also how would an existing network handle using this feature? its breaking so is it safe to upgrade?

It is a breaking change. Instead of signed header or data types, the p2p network exchanges DAHeightHintContainer. This would be incompatible. Also the existing p2p stores would need migration to work.

@julienrbrt
Copy link
Member

julienrbrt commented Dec 4, 2025

Could we broadcast both until every networks are updated? Then for final we can basically discard the previous one.

@alpe
Copy link
Contributor Author

alpe commented Dec 5, 2025

fyi: This PR is missing a migration strategy for the p2p store ( and ideally network)

* main:
  refactor(sequencers): persist prepended batch (#2907)
  feat(evm): add force inclusion command (#2888)
  feat: DA client, remove interface part 1: copy subset of types needed for the client using blob rpc. (#2905)
  feat: forced inclusion (#2797)
  fix: fix and cleanup metrics (sequencers + block) (#2904)
  build(deps): Bump mdast-util-to-hast from 13.2.0 to 13.2.1 in /docs in the npm_and_yarn group across 1 directory (#2900)
  refactor(block): centralize timeout in client (#2903)
  build(deps): Bump the all-go group across 2 directories with 3 updates (#2898)
  chore: bump default timeout (#2902)
  fix: revert default db (#2897)
  refactor: remove obsolete // +build tag (#2899)
  fix:da visualiser namespace  (#2895)
alpe added 3 commits December 15, 2025 10:52
* main:
  chore: execute goimports to format the code (#2924)
  refactor(block)!: remove GetLastState from components (#2923)
  feat(syncing): add grace period for missing force txs inclusion (#2915)
  chore: minor improvement for docs (#2918)
  feat: DA Client remove interface part 2,  add client for celestia blob api   (#2909)
  chore: update rust deps (#2917)
  feat(sequencers/based): add based batch time (#2911)
  build(deps): Bump golangci/golangci-lint-action from 9.1.0 to 9.2.0 (#2914)
  refactor(sequencers): implement batch position persistance (#2908)
github-merge-queue bot pushed a commit that referenced this pull request Dec 15, 2025
<!--
Please read and fill out this form before submitting your PR.

Please make sure you have reviewed our contributors guide before
submitting your
first PR.

NOTE: PR titles should follow semantic commits:
https://www.conventionalcommits.org/en/v1.0.0/
-->

## Overview

Temporary fix until #2891.
After #2891 the verification for p2p blocks will be done in the
background.

ref: #2906

<!-- 
Please provide an explanation of the PR, including the appropriate
context,
background, goal, and rationale. If there is an issue with this
information,
please provide a tl;dr and link the issue. 

Ex: Closes #<issue number>
-->
@alpe
Copy link
Contributor Author

alpe commented Dec 15, 2025

I have added 2 new types for the p2p store that are binary compatible to the types.Data and SignedHeader. With this, we should be able to roll this out without breaking the in-flight p2p data and store.

@alpe alpe requested a review from julienrbrt December 15, 2025 15:00
julienrbrt
julienrbrt previously approved these changes Dec 15, 2025
Copy link
Member

@julienrbrt julienrbrt left a comment

Choose a reason for hiding this comment

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

lgtm! I can see how useful the async retriever will be for force inclusion verification as well. We should have @auricom verify if p2p still works with Eden.

Copy link
Member

Choose a reason for hiding this comment

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

This is going to be really useful for force inclusion checks as well.

* main:
  build(deps): Bump actions/cache from 4 to 5 (#2934)
  build(deps): Bump actions/download-artifact from 6 to 7 (#2933)
  build(deps): Bump actions/upload-artifact from 5 to 6 (#2932)
  feat: DA Client remove interface part 3, replace types with new code (#2910)
  DA Client remove interface: Part 2.5, create e2e test to validate that a blob is posted in DA layer. (#2920)
julienrbrt
julienrbrt previously approved these changes Dec 16, 2025
alpe added 3 commits December 19, 2025 17:00
* main:
  feat: use DA timestamp (#2939)
  chore: improve code comments clarity (#2943)
  build(deps): bump libp2p (#2937)
(cherry picked from commit ad3e21b)
julienrbrt
julienrbrt previously approved these changes Dec 19, 2025
* main:
  fix: make evm_execution more robust (#2942)
  fix(sequencers/single): deterministic queue (#2938)
  fix(block): fix init logic sequencer for da epoch fetching (#2926)
github-merge-queue bot pushed a commit that referenced this pull request Jan 2, 2026
Introduce envelope for headers on DA to fail fast on unauthorized
content.
Similar approach as in #2891 with a binary compatible sibling type that
carries the additional information.
 
* Add DAHeaderEnvelope type to wrap signed headers on DA
  * Binary compatible to `SignedHeader` proto type
  * Includes signature of of the plain content
* DARetriever checks for valid signature early in the process
* Supports `SignedHeader` for legacy support until first signed envelope
read
alpe added 2 commits January 8, 2026 10:06
* main:
  chore: fix some minor issues in the comments (#2955)
  feat: make reaper poll duration configurable (#2951)
  chore!: move sequencers to pkg (#2931)
  feat: Ensure Header integrity on DA (#2948)
  feat(testda): add header support with GetHeaderByHeight method (#2946)
  chore: improve code comments clarity (#2947)
  chore(sequencers): optimize store check (#2945)
@tac0turtle
Copy link
Contributor

ci seems to be having some issues, can these be fixed.

Also was this tested on an existing network? If not, please do that before merging

alpe added 9 commits January 19, 2026 09:46
* main:
  fix: inconsistent state detection and rollback (#2983)
  chore: improve graceful shutdown restarts (#2985)
  feat(submitting): add posting strategies (#2973)
  chore: adding syncing tracing (#2981)
  feat(tracing): adding block production tracing (#2980)
  feat(tracing): Add Store, P2P and Config tracing (#2972)
  chore: fix upgrade test (#2979)
  build(deps): Bump github.com/ethereum/go-ethereum from 1.16.7 to 1.16.8 in /execution/evm/test in the go_modules group across 1 directory (#2974)
  feat(tracing): adding tracing to DA client (#2968)
  chore: create onboarding skill  (#2971)
  test: add e2e tests for force inclusion (part 2) (#2970)
  feat(tracing): adding eth client tracing (#2960)
  test: add e2e tests for force inclusion (#2964)
  build(deps): Bump the all-go group across 4 directories with 10 updates (#2969)
  fix: Fail fast when executor ahead (#2966)
  feat(block): async epoch fetching (#2952)
  perf: tune badger defaults and add db bench (#2950)
  feat(tracing): add tracing to EngineClient (#2959)
  chore: inject W3C headers into engine client and eth client (#2958)
  feat: adding tracing for Executor and added initial configuration (#2957)
* main:
  feat(tracing): tracing part 9 sequencer (#2990)
  build(deps): use mainline go-header (#2988)
* main:
  chore: update calculator for strategies  (#2995)
  chore: adding tracing for da submitter (#2993)
  feat(tracing): part 10 da retriever tracing (#2991)
  chore: add da posting strategy to docs (#2992)
* main:
  build(deps): Bump the all-go group across 5 directories with 5 updates (#2999)
  feat(tracing): adding forced inclusion tracing (#2997)
* main:
  feat(tracing): add store tracing (#3001)
  feat: p2p exchange wrapper  (#2855)
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.

sync: P2P should provide da inclusion hints

4 participants