Commit Graph

10827 Commits

Author SHA1 Message Date
Cayman
497d67cb8a fix: use datastore-level by default (#8503)
**Motivation**

- Review of #8468 metrics
- In https://github.com/ChainSafe/lodestar/pull/8449, use of
`datastore-level` was unilaterally removed in favor of the bun-supported
`datastore-fs`
- This caused a regression

**Description**
- use `datastore-level` by default, only use `datastore-fs` in bun

---------

Co-authored-by: Nico Flaig <nflaig@protonmail.com>
2025-10-06 15:51:17 -04:00
Nico Flaig
29cdec0f0e fix: default port6 to ipv4 port if set explicitly (#8504)
Default `port6` to the `--port` (ipv4 port) if set explicitly and
`--port6` is not set.
2025-10-06 15:50:17 -04:00
Phil Ngo
f2a741bbe4 docs: update contributing.md to include AI disclosure (#8498)
**Motivation**

Recently, we have been experiencing many instances of AI generated slop
submitted by first time contributors and a policy rework is needed to
ensure our time is respected whilst allowing an external contributor
freely contribute to further enhancing this project. This proposal
ensures that new contributors self-disclose any use of AI technologies
as part of their submission to minimize time waste and allow issues to
be resolved with thorough understanding of the output at hand.

**Description**

This PR:
- Adds an AI Assistance Notice to contribution.md
- Moves important context for first time contributors to the top of the
document
- Corrects minor grammar

Additional credit to @nflaig and [Ghostly's
policy](https://github.com/ghostty-org/ghostty/blob/main/CONTRIBUTING.md#ai-assistance-notice)
to approach minimizing this problem.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-06 14:47:52 -04:00
Nico Flaig
f45a2be721 fix: unsubscribe from blob_sidecar topics during fulu fork transition (#8497) 2025-10-06 11:04:02 +01:00
Nico Flaig
894daf8b44 fix: return spec constants starting with 0x as hex strings instead of decimal (#8495)
- Closes https://github.com/ChainSafe/lodestar/issues/7710

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-10-06 15:44:37 +08:00
guha-rahul
be3c5220f4 refactor: replace * value with other more bash friendly value (#8491)
**Motivation**

Using `*` as a CLI flag value is not bash-friendly 

**Description**

Add backward-compatible support for the bash-friendly value `all` as an
alternative to `*` for the following CLI flags:
- `--rest.namespace` - now accepts both `*` and `all` to enable all API
namespaces
  - `--rest.cors` - now accepts both `*` and `all` to allow all origins
- `--keymanager.cors` - now accepts both `*` and `all` to allow all
origins

Closes #5963
2025-10-03 15:51:23 +01:00
Nico Flaig
c9deb9b59f fix: use previous slot to get sync aggregate for block (#8494)
**Motivation**

Since https://github.com/ChainSafe/lodestar/pull/7927 we started to use
parent slot (the slot of parent block) to get sync aggregate for block
but this can cause `BLOCK_ERROR_INVALID_SIGNATURE` during fork
transition as might include sync aggregates into our block that are
older than block slot - 1 which is used to compute domain during
signature verification.


8961b06c11/packages/state-transition/src/block/processSyncCommittee.ts (L81)

This means we will reject our own block due to invalid signature if
there are missed slots during the epoch transition.


> we currently hard code parent slot as producedSlot - 1 which is
incorrect in reorg scenario

This was the motivation from the previous change but this doesn't seem
right, sync committee messages are produced at latest 4 seconds into the
slot so if we re-org the block due to it being weak/late then sync
committee votes will also be for parent block root of that block and not
the block itself.

So irrespective of block being reorged or not we should always include
sync committee messages from previous slot.

**Description**

Use previous slot to get sync aggregate for block to avoid
`BLOCK_ERROR_INVALID_SIGNATURE` in case there are missed slots.
2025-10-03 11:32:34 +01:00
Nico Flaig
8961b06c11 chore: ignore local tsbuildinfo files in docker builds (#8492)
Local docker builds (with existing build artifacts) no longer work since
https://github.com/ChainSafe/lodestar/pull/8481 because the file
`packages/cli/tsconfig.build.tsbuildinfo` is copied to docker build
which causes typescript to skip the build, but we are not copying the
`lib` which means the whole build is missing (and not rebuilt). The
tsbuildinfo is usually part of `lib` which is why this was no issue
before.

I believe this happens because `"rootDir": "src"` was added to tsconfig,
there might be a different way to fix this but in general we don't want
to copy tsbuildinfo files into docker builds.
2025-10-02 06:59:41 -04:00
NC
287e63792e feat: wire in gloas containers (#8485)
Update gloas types in `packages/types/src/types.ts` to use the
containers defined in #8464 and fix all type error that come along with
it

---------

Co-authored-by: Nico Flaig <nflaig@protonmail.com>
2025-10-02 08:44:56 +00:00
Cayman
792fcea33a fix: update regen caller for data column (#8487)
## Motivation

Saw this metric after holesky fusaka fork and was really confused
<img width="957" height="309" alt="Screenshot from 2025-10-01 08-46-08"
src="https://github.com/user-attachments/assets/d8fc7d96-ec48-4709-9ee9-30b69dd94eee"
/>
2025-10-01 13:06:26 +00:00
Cayman
fd1dac853d feat: use lodestar-bun hashtree (#8481)
**Motivation**

- #7280 

**Description**

- bump lodestar-bun
- leveldb uses snappy
- leveldb macos build fix
- use hashtree-bun hasher in bun
2025-09-30 17:29:30 -04:00
Ragnar
51e1ede62c docs: add comprehensive usage documentation to docker-compose.local.yml (#8441)
- Replace TODO comment with detailed usage instructions 
- Add step-by-step guide for local monitoring setup
- Include port information and service URLs
- Explain host.docker.internal configuration"
2025-09-30 17:22:00 -04:00
Nico Flaig
901d719660 chore: add gloas fork constants to unscheduled networks (#8484)
This avoids an issue we had previously where configs that extend mainnet
preset would inherit wrong parameters. This just ensures this cannot
happen in case we those will be forked after mainnet.

similar to https://github.com/ChainSafe/lodestar/pull/7401
2025-09-30 23:31:07 +08:00
Nico Flaig
248b252a94 chore: update error response for validator publish endpoints (#8480)
**Motivation**

Same as https://github.com/ChainSafe/lodestar/pull/7113

**Description**

Update error response for validator publish endpoints
- throw `IndexedError` to return individual failures
- move individual items error logs to `verbose`
2025-09-29 09:33:22 -04:00
Nico Flaig
47470aab65 chore: remove remaining usage of SECONDS_PER_SLOT (#8476)
Follow up on https://github.com/ChainSafe/lodestar/pull/8091 to clean up
remaining usage of `SECONDS_PER_SLOT`.

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-09-26 19:45:55 +01:00
NC
fcf8d024ea feat: add gloas containers (#8464)
Add gloas containers and minimal change to gloas type. 

All remaining gloas type update will be in the next PR

Part of #8439
2025-09-26 17:02:42 +01:00
Nico Flaig
c1880f6940 chore: add gloas timings to slot time functions (#8474) 2025-09-26 09:06:57 -04:00
twoeths
549f58dd39 fix: not throw error in removeEagerlyPersistedBlockInputs (#8472)
**Motivation**

- when we remove an eagerly persisted block input, it's very normal that
we did not have any columns persisted
- but right now it threw this error as shown in #8457

```
Sep-23 19:16:55.002[chain]            �[33mwarn�[39m: Error pruning eagerly imported block inputs, DB may grow in size if this error happens frequently slot=30 - Invalid dataColumnSidecars=0 for custody expected custodyColumnsLen=128
Error: Invalid dataColumnSidecars=0 for custody expected custodyColumnsLen=128
```

**Description**

- do not throw error in this case

part of #8457

Co-authored-by: Tuyen Nguyen <twoeths@users.noreply.github.com>
2025-09-26 08:53:33 -04:00
twoeths
91dadf81de fix: hasAllData in createFromColumn() api (#8473)
**Motivation**

- when investigating #8457 I found that we did not set `hashAllColumn()`
correctly at the 1st time

**Description**

- correct `hasAllData` when creating IBlockInput from column
- nice to have: in `verifyBlocksDataAvailability`, only wait for all
data if not has all data. This is to make it consistent to
`writeBlockInputToDb()` where the error did not happen, see
https://github.com/ChainSafe/lodestar/issues/8457#issuecomment-3337347372

Co-authored-by: Tuyen Nguyen <twoeths@users.noreply.github.com>
2025-09-26 08:52:24 -04:00
NC
39be8f0882 feat: use bps instead of INTERVALS_PER_SLOT for deadlines (#8091)
Closes #8013

---------

Co-authored-by: Nico Flaig <nflaig@protonmail.com>
2025-09-25 19:01:20 -07:00
Nico Flaig
21ba2777a9 chore: add git to Dockerfile (#8470)
**Motivation**

The docker build no longer works since
https://github.com/ChainSafe/lodestar/pull/8462


see [most recent job
run](https://github.com/ChainSafe/lodestar/actions/runs/18008927165/job/51241364972)
```
#13 [linux/amd64 build_src 5/6] RUN yarn install --non-interactive --frozen-lockfile &&   yarn build &&   yarn install --non-interactive --frozen-lockfile --production
#13 ERROR: process "/bin/sh -c yarn install --non-interactive --frozen-lockfile &&   yarn build &&   yarn install --non-interactive --frozen-lockfile --production" did not complete successfully: exit code: 1

#15 [linux/arm64 build_deps 3/6] RUN apt-get update && apt-get install -y g++ make python3 python3-setuptools && apt-get clean && rm -rf /var/lib/apt/lists/*
#15 67.27 Preparing to unpack .../54-libfreetype6_2.12.1+dfsg-5+deb12u4_arm64.deb ...
#15 67.27 Unpacking libfreetype6:arm64 (2.12.1+dfsg-5+deb12u4) ...
#15 CANCELED
------
 > [linux/amd64 build_src 5/6] RUN yarn install --non-interactive --frozen-lockfile &&   yarn build &&   yarn install --non-interactive --frozen-lockfile --production:
0.219 yarn install v1.22.22
0.317 [1/5] Validating package.json...
0.336 [2/5] Resolving packages...
0.646 [3/5] Fetching packages...
28.83 error Couldn't find the binary git
28.83 info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
------
Dockerfile:11
--------------------
  10 |     
  11 | >>> RUN yarn install --non-interactive --frozen-lockfile && \
  12 | >>>   yarn build && \
  13 | >>>   yarn install --non-interactive --frozen-lockfile --production
  14 |     
--------------------
ERROR: failed to solve: process "/bin/sh -c yarn install --non-interactive --frozen-lockfile &&   yarn build &&   yarn install --non-interactive --frozen-lockfile --production" did not complete successfully: exit code: 1
Error: Process completed with exit code 1.
```

We need to add `git` to be able to install `@lodestar/bun`

**Description**

Add `git` to Dockerfile to be able to install dependencies that
reference a github repository

eg. `@lodestar/bun`
```jsonc
"@lodestar/bun": "git+https://github.com/ChainSafe/lodestar-bun.git
```
2025-09-25 14:49:03 +00:00
Cayman
ba92bd8a88 feat: add lodestar-bun and bun leveldb binding (#8462)
**Motivation**

- #7280 

**Description**

- update `@types/node` to the latest node v22 version
- add `@lodestar/bun` dependency using git+https (for now! so that we
don't have to republish a bazillion times)
- keep in mind that this requires a manual build/rebuild of the so (via
`cd node_modules/@lodestar/bun && zig build`)
- Add a bun-specific `LevelDbController` which uses
[`@lodestar/bun`](https://github.com/ChainSafe/lodestar-bun)
- Only expose the leveldb controller via a subpath export (and for
tests, as a custom import, like in #8320 )
- add bun bun global override types
2025-09-25 09:23:11 -04:00
twoeths
98d359db41 fix: untrusted slot in network processor (#8466)
**Motivation**

- we see different slots for the same root in `BlockInputSync` logs,
this causes confusion
- this was added last week in #8416

**Description**

- the [root, slot] is not trusted in network processor because messages
could be originated from an out-of-sync node
- we actually don't need the slot in BlockInputSync, it's just a nice to
have but caused confusion. So I reverted that part: do not emit slot to
`BlockInputSync` from network processor
- log the full root hex

Closes #8465

---------

Co-authored-by: Tuyen Nguyen <twoeths@users.noreply.github.com>
2025-09-25 07:29:19 -04:00
Nazar Hussain
8689cc3545 chore: add src to the package to have working source map (#8460)
**Motivation**

Add `src` directory to package sources along with the `lib` files to
have working source map.

**Description**

- Add `src` to the files.


**Steps to test or reproduce**

- Run all tests
2025-09-25 07:23:58 -04:00
NC
643a1132ec fix: sort cell indices before calling recoverCellsAndKzgProofs (#8450)
For context please view
https://discord.com/channels/593655374469660673/1229813597501395028/1419794786121945141
.

The latest spec requires cell indices to be sorted in
[`recover_cells_and_kzg_proofs
`](340d23358a/specs/fulu/polynomial-commitments-sampling.md (L805))
so we need to sort them before passing it to kzg.
2025-09-24 10:58:50 -07:00
Matthew Keil
83de5b8dea chore: move PR comments from #7947 that got closed (#8456)
**Motivation**

closes #8196 

Need to move over some comment fixes from #7947 that got closed and the
work was merged via separate PR.

Comments addressed are:
https://github.com/ChainSafe/lodestar/pull/7947#discussion_r2139589329
https://github.com/ChainSafe/lodestar/pull/7947#discussion_r2139595483
2025-09-23 20:40:09 +00:00
Cayman
09716b423a chore: use typescript gc-stats import (#8455)
**Motivation**

- #7280 

**Description**

- Bun _does_ support imports, I was mistaken to say it didn't. The issue
I ran into was that the referenced file did not exist!
- Use the typescript directly
2025-09-23 14:38:32 -04:00
Matthew Keil
47c570ab76 chore: remove eip7594 from skipped spec tests and rename mekle.test.ts -> merkleProof.test.ts (#8452)
**Motivation**

Ensure that all spec tests are running for peerDas and fulu scopes.

Rename merkle.test.ts -> merkleProof.test.ts so it matches the other
file namings

---------

Co-authored-by: Nico Flaig <nflaig@protonmail.com>
2025-09-23 16:34:21 +01:00
Nico Flaig
8b45b1e978 fix: emit blob/data column sidecar events when we receive them by root (#8445)
Part of https://github.com/ChainSafe/lodestar/issues/7995

---------

Co-authored-by: Matthew Keil <me@matthewkeil.com>
2025-09-23 12:15:51 +00:00
Nico Flaig
b8be78f7bb fix: use correct container and bump seq_number when updating syncnets (#8451) 2025-09-23 08:14:41 -04:00
twoeths
4efea5815e feat: track number of peers per data column subnet topic (#8442)
**Motivation**

- starting from fulu, we need to track number of peers per data column
subnet

**Description**

- track it in gossipsub
- also track peers and topics by fork boundary, not fork name
- will need to render this on the main Grafana dashboard after this PR

---------

Co-authored-by: Tuyen Nguyen <twoeths@users.noreply.github.com>
2025-09-23 19:08:33 +07:00
Nico Flaig
b42a298a7c fix: emit data column sidecar event when receive them from execution (#8446)
Part of https://github.com/ChainSafe/lodestar/issues/7995

---------

Co-authored-by: Matthew Keil <me@matthewkeil.com>
2025-09-23 12:05:56 +00:00
Cayman
cec9bef1db chore: various bun tweaks (#8449)
**Motivation**

- #7280 

**Description**

- combined with #8448, `surpressTranspileTS: true` is needed for workers
to use typescript source directly without transpiling it (and
incorrectly loading it via a commonjs loader)
- avoid worker `resourceLimits` - Bun doesn't implement it, it throws if
you use it
- use `datastore-fs` instead of `datastore-level` for backing our libp2p
database -- Note this is changed unilaterally (affecting current nodejs
usage)
- use assemblyscript chacha20-poly1305 - bun doesn't support the native
crypto implementation
2025-09-23 12:49:36 +01:00
Cayman
6494939cd0 chore: add bun exports to packages (#8448)
**Motivation**

- #7280 

**Description**

- Add `"bun"` export to all packages that points to the _typescript
source_ rather than the transpiled javascript
- Allows for bun to use typescript directly
2025-09-23 12:19:11 +01:00
NC
e18102ed8c feat: add presets and configs for ePBS (#8440)
Part of #8439
2025-09-23 11:48:46 +01:00
Nico Flaig
c0078a16b5 fix: pass current time in seconds to seenTimestampSec of block input (#8444)
`Date.now()` returns current unit timestamp in milliseconds but we want
seconds here, ie. need to divide by 1000.
2025-09-22 11:44:17 -04:00
twoeths
092cc3954a chore: sync PeerDAS dashboard (#8443)
**Motivation**

- reflect the in-progress PeerDAS dashboard to our source code

**Description**

- PeerDAS dashboard was updated but we did not track it in our source
code, need to sync it now and review/revise later

Co-authored-by: Tuyen Nguyen <twoeths@users.noreply.github.com>
2025-09-22 07:18:06 -04:00
Nazar Hussain
feed916580 chore: enable organize imports for linting (#8410)
**Motivation**

Enable the organize import back which was disabled in #7982 to isolate
the changes for import ordering

**Description**

- Update the organize import config 
- Fix all linting errors

**Steps to test or reproduce**

- Run all tests

---------

Co-authored-by: Cayman <caymannava@gmail.com>
2025-09-19 19:59:28 -04:00
Phil Ngo
3d8b04e1a0 feat: schedule fulu and BPOs on sepolia and hoodi (#8437)
**Motivation**

This PR schedules Fulu fork and BPO1 and BPO2 on remaining testnets
Sepolia and Hoodi.

**Description**

Updates network configs for Fulu fork
Includes BPO1 and BPO2 configs
For both Sepolia and Hoodi

As defined in Sepolia: https://github.com/eth-clients/sepolia/pull/111
As defined in Hoodi: https://github.com/eth-clients/hoodi/pull/21

Wait for confirmation of these remaining testnets configs before
merging.
2025-09-19 14:30:48 -07:00
Nazar Hussain
83964b4452 chore: update few type safety rules for linting (#8391)
**Motivation**

Use best of the linting capabilities to avoid any error slipped through.

**Description**

- Enable few promise based rules
- Restrict few imports from private paths

**Steps to test or reproduce**

- Run all tests

---------

Co-authored-by: Cayman <caymannava@gmail.com>
2025-09-19 10:35:42 -04:00
Nazar Hussain
7a3b3a996e feat: add pattern for runtime specific package dependencies (#8320)
**Motivation**

Make sure the Lodestar starts running in Bun runtime. 

**Description**

- Add subpath imports supported in Bun and NodeJS. 
- 

**Steps to test or reproduce**

Run all tests 

**Note**

The CLI finally starts to run, next go with command by command to see
what's breaking, starting the `beacon` cmd.

```
bun run --bun bin/lodestar.js --help 
🌟 Lodestar: TypeScript Implementation of the Ethereum Consensus Beacon Chain.

 * Version: v1.33.0/nh/bun-wrappers/07d2010
  * by ChainSafe Systems, 2018-2025

Commands:
  beacon       Run a beacon chain node
  validator    Run one or multiple validator clients
  lightclient  Run lightclient
  dev          Quickly bootstrap a beacon node and multiple validators. Use for
               development and testing
  bootnode     Run a discv5 bootnode. This will NOT perform any beacon node func
               tions, rather, it will run a discv5 service that allows nodes on
               the network to discover one another.

Options:
      --dataDir                             Lodestar root data directory[string]
      --network                             Name of the Ethereum Consensus chain
                                             network to join
  [string] [choices: "mainnet", "gnosis", "sepolia", "holesky", "hoodi", "chiado
                                        ", "ephemery", "dev"] [default: mainnet]
      --paramsFile                          Network configuration file  [string]
      --rcConfig                            RC file to supplement command line a
                                            rgs, accepted formats: .yml, .yaml,
                                            .json                       [string]
      --supernode                           Subscribe to and custody all data co
                                            lumn sidecar subnets       [boolean]
      --terminal-total-difficulty-override  Terminal PoW block TTD override
                                                                        [string]
      --terminal-block-hash-override        Terminal PoW block hash override
                                                                        [string]
      --terminal-block-hash-epoch-override  Terminal PoW block hash override act
                                            ivation epoch               [string]
  -h, --help                                Show help                  [boolean]
  -v, --version                             Show version number        [boolean]

📖 For more information, check the CLI reference:
  * https://chainsafe.github.io/lodestar/reference/cli

✍️ Give feedback and report issues on GitHub:
  * https://github.com/ChainSafe/lodestar

```
2025-09-19 14:10:20 +00:00
twoeths
36a31f3a2f fix: add log and metrics to ColumnReconstructionTracker (#8433)
**Motivation**

- we want to know more insight of ColumnReconstructionTracker

**Description**

- add logs to ColumnReconstructionTracker
- fix metrics of ColumnReconstructionTracker: centralize to 1 place and
make it better to render on Grafana
- remove unused error

Closes #8402

---------

Co-authored-by: Tuyen Nguyen <twoeths@users.noreply.github.com>
Co-authored-by: Cayman <caymannava@gmail.com>
2025-09-19 13:20:29 +00:00
Nico Flaig
af97dd977f fix: correctly count requested data column sidecars in rate limiter (#8436)
The rate limiter currently only counts the number of blocks requested
but our quota is based on `MAX_REQUEST_DATA_COLUMN_SIDECARS`. We need to
account for the number of columns requested as otherwise we are
undercharging by a factor of up to 128.
2025-09-19 09:11:24 -04:00
twoeths
5c65fa3b36 fix: wait for block and all data (#8430)
**Motivation**

- got a case where all columns came timely while block came very late
and we did not trigger `incompleteBlockInput` event

**Description**

- trigger `incompleteBlockInput` in that case

Closes #8405

Co-authored-by: Tuyen Nguyen <twoeths@users.noreply.github.com>
2025-09-19 08:59:40 -04:00
Nico Flaig
48a8beea92 feat: schedule fulu and BPOs on holesky (#8435)
See https://github.com/eth-clients/holesky/pull/132
2025-09-19 08:58:47 -04:00
twoeths
c20158159f chore: add logs and metrics to GetBlobsTracker (#8432)
**Motivation**

- we want to know the result of getBlobsV2 and how it helps our block
import

**Description**

- add logs and metrics to GetBlobsTracker

Closes #8401

---------

Co-authored-by: Tuyen Nguyen <twoeths@users.noreply.github.com>
2025-09-19 08:56:14 -04:00
twoeths
200e2443d4 fix: emit unknownParent event (#8429)
**Motivation**

- when validating a gossip block and got a `PARENT_UNKNOWN` error, we
should emit `unknownParent` event instead of `incompleteBlockInput`
event

**Description**

- do that in gosssip handler
- add `ChainEvent.incompleteBlockInput` test to unknownBlockSync e2e
test

Closes #8415
Closes #8417

Co-authored-by: Tuyen Nguyen <twoeths@users.noreply.github.com>
2025-09-19 08:54:43 -04:00
twoeths
365e071d8c chore: track BlockInputSync metrics (#8431)
**Motivation**

- track metrics added since #8416 to Sync dashboard

<img width="1675" height="601" alt="Screenshot 2025-09-19 at 14 05 14"
src="https://github.com/user-attachments/assets/1168076a-c100-4976-a3b5-5ef26d7c322c"
/>

Co-authored-by: Tuyen Nguyen <twoeths@users.noreply.github.com>
2025-09-19 08:53:13 -04:00
Nico Flaig
5e2a80008e chore: remove parent beacon block root from execution payload rpc type (#8428)
Noticed the type isn't correct as
[ExecutionPayloadV3](9a7b40cc08/src/engine/cancun.md (L41-L61))
doesn't contain `parentBeaconBlockRoot` as it's passed as part of
payload attributes.
2025-09-18 17:09:56 -04:00
Nico Flaig
6e3c7ca8d0 refactor: make commonBlockBodyPromise a required parameter (#8273)
## Summary

This PR implements the refactoring suggested in #7974 to make
`commonBlockBodyPromise` a required parameter when calling
`produceBlock` and `produceBlindedBlock` methods.

## Changes

- Made `commonBlockBodyPromise` required in the chain interface
(`IBeaconChain`)
- Updated chain implementation to reflect the required parameter
- Removed the TODO comment and optional parameter from
`produceBlockBody` function
- Removed fallback calls to `produceCommonBlockBody.call()` within
`produceBlockBody`
- Updated tests to provide the required `commonBlockBodyPromise`
parameter

## Rationale

As discussed in the original issue, making `commonBlockBodyPromise`
required ensures that the promise is always provided by callers,
eliminating the need for fallback logic inside `produceBlockBody`. This
simplifies the code and makes the dependency explicit.

## Testing

-  All TypeScript type checks pass (`yarn check-types`)
-  Linting passes (`yarn lint`)
-  Updated affected tests to work with the new required parameter

Resolves #7974

🤖 Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-09-18 15:52:14 -04:00