Skip to content

Commit cecf3e9

Browse files
committed
chore(fast-inbox): single canonical path for rollup sample-input regeneration (A-1435)
Deduplicates how the committed rollup protocol-circuit sample inputs (`noir-projects/noir-protocol-circuits/crates/rollup-*/Prover.toml`) get regenerated. Two paths previously both wrote `rollup-block-root-first`, `rollup-block-root-first-single-tx`, `rollup-checkpoint-root-single-block`, `rollup-checkpoint-merge`, and `rollup-root`, so the committed fixtures drifted depending on which ran last. - Makes the prover-client `regenerate_rollup_sample_inputs.test.ts` suite the sole owner of every rollup circuit at or above the transaction merge: the block-root variants, block-merge, both checkpoint roots, checkpoint-merge, tx-merge, and root. - Stops the e2e `full.test.ts` dump from writing the block-root and checkpoint samples it overlapped on. The e2e dump now regenerates only what needs real client-proved transactions the simulated orchestrator cannot produce: the private-kernel circuits and the transaction-base rollups (`rollup-tx-base-private`, `rollup-tx-base-public`). - Adds a dedicated three-tx scenario to the suite to restore `rollup-tx-merge` coverage, which was dropped when `orchestrator_single_checkpoint.test.ts` was deleted and replaced by this suite. A block with three txs forces one tx-merge before the two-input block root, whereas one- or two-tx blocks feed the block root directly. - Updates the regen docs (`barretenberg/cpp/CLAUDE.md`, the `update-prover-toml` and `gate-counts` skills, and the `updateProtocolCircuitSampleInputs` JSDoc) to the two-command split and removes the dead `orchestrator_single_checkpoint.test.ts` references. Ownership after this change (each committed rollup `Prover.toml` has exactly one writer, no overlap): - prover-client suite (`AZTEC_GENERATE_TEST_DATA=1 yarn workspace @aztec/prover-client test regenerate_rollup_sample_inputs`): the 11 block-root / block-merge / checkpoint / tx-merge / root tomls. - e2e (`AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1` full.test): private-kernel circuits plus `rollup-tx-base-private` / `rollup-tx-base-public`. Part of the Fast Inbox (AZIP-22) cleanup stack, on top of #24784..#24794. Validation: neither regeneration path runs in this environment (the prover-client build here has stale artifacts and e2e needs a full L1/anvil stack), so the actual fixture regeneration and the downstream `nargo execute` checks are validated on CI. Locally verified statically that the suite's scenario `dump` arrays plus the e2e list exactly cover all 13 committed rollup tomls with no overlap, and that a three-tx block routes through `getTxMergeRollupProof` and captures `rollup-tx-merge` test data. Post-flip a zero-tx non-first block carrying a bundle is a live shape routed through the msgs-only block root (wired in #24789), so the regen suite gains a per-block-distribution scenario dumping `rollup-block-root-msgs-only`, and the circuit joins the CI `nargo execute` list — the first regen run must create and commit its `Prover.toml`. The documented e2e regen command also moves to the file's real location (`single-node/prover/server/full.test`; the old `e2e_prover/full.test` jest pattern matches nothing). Replaces #24795.
1 parent 1411922 commit cecf3e9

38 files changed

Lines changed: 3170 additions & 2648 deletions

File tree

barretenberg/.claude/skills/gate-counts/SKILL.md

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -209,41 +209,42 @@ Then retry `bb gates`.
209209
The committed `Prover.toml` files carry fake recursive proofs whose length is
210210
frozen at the value present when they were last generated. After a proof-length
211211
change they must be regenerated (or hacked — see below). Two commands cover all
212-
protocol circuits:
212+
protocol circuits, split by whether the sample needs a real client-proved
213+
transaction.
213214

214-
**Kernel circuits + most rollup circuits** (spins up an L1/anvil sandbox):
215+
**Block-root and above rollup circuits — prover-client suite** (simulated
216+
orchestrator, no L1 sandbox):
215217

216218
```bash
217-
AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 \
218-
yarn workspace @aztec/end-to-end test:e2e e2e_prover/full.test
219+
AZTEC_GENERATE_TEST_DATA=1 \
220+
yarn workspace @aztec/prover-client test regenerate_rollup_sample_inputs
219221
```
220222

221-
Regenerates `Prover.toml` for: `private-kernel-init` and its `private-kernel-init-N`
222-
variants, `private-kernel-inner` and its `private-kernel-inner-N` variants,
223-
`private-kernel-reset`, `private-kernel-reset-tail`,
224-
`private-kernel-reset-tail-to-public`, `rollup-tx-base-private`,
225-
`rollup-tx-base-public`, `rollup-block-root-first`,
226-
`rollup-block-root-first-single-tx`, `rollup-checkpoint-root-single-block`,
227-
`rollup-checkpoint-merge`, `rollup-root`.
223+
Regenerates `Prover.toml` for `rollup-block-root-first-empty-tx`,
224+
`rollup-block-root-first`, `rollup-block-root-first-single-tx`,
225+
`rollup-block-root`, `rollup-block-root-single-tx`, `rollup-block-root-msgs-only`,
226+
`rollup-block-merge`, `rollup-checkpoint-root`, `rollup-checkpoint-root-single-block`,
227+
`rollup-checkpoint-merge`, `rollup-tx-merge`, `rollup-root`.
228228

229-
**Rollup circuits NOT covered by `full.test`** (incl. `rollup-tx-merge`):
229+
**Private-kernel + transaction-base circuits — e2e prover full test** (spins up
230+
an L1/anvil sandbox):
230231

231232
```bash
232233
AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 \
233-
yarn workspace @aztec/prover-client test src/orchestrator/orchestrator_single_checkpoint.test.ts
234+
yarn workspace @aztec/end-to-end test:e2e single-node/prover/server/full.test
234235
```
235236

236-
Regenerates `Prover.toml` for `rollup-tx-merge`, `rollup-block-root-first-empty-tx`,
237-
`rollup-block-root` (single-tx checkpoint test) and `rollup-block-root-single-tx`,
238-
`rollup-block-merge`, `rollup-checkpoint-root` (multi-block checkpoint test).
239-
240-
> **`rollup-tx-merge`'s `Prover.toml` is regenerated by the prover-client
241-
> command, NOT `full.test`** — it is commented out in `full.test`'s circuit
242-
> list. Use the prover-client command for the tx-merge circuit.
237+
Regenerates `Prover.toml` for: `private-kernel-init` and its `private-kernel-init-N`
238+
variants, `private-kernel-inner` and its `private-kernel-inner-N` variants,
239+
`private-kernel-reset-tail`, `private-kernel-reset-tail-to-public`,
240+
`rollup-tx-base-private`, `rollup-tx-base-public`. These need real client-proved
241+
transactions the simulated orchestrator cannot produce. (`private-kernel-reset`,
242+
the inner reset, is commented out and hand-maintained — not regenerated.)
243243

244244
The circuit lists live in the `updateProtocolCircuitSampleInputs(...)` loops in
245-
`yarn-project/end-to-end/src/e2e_prover/full.test.ts` and
246-
`yarn-project/prover-client/src/orchestrator/orchestrator_single_checkpoint.test.ts`;
245+
`yarn-project/end-to-end/src/single-node/prover/server/full.test.ts` and the
246+
`scenarios` array in
247+
`yarn-project/prover-client/src/test/regenerate_rollup_sample_inputs.test.ts`;
247248
re-read them if a circuit seems missing (entries get commented in/out).
248249

249250
### Build prerequisites for regeneration

barretenberg/.claude/skills/update-prover-toml/SKILL.md

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
name: update-prover-toml
3-
description: Regenerate the protocol-circuit sample Prover.toml files (the witnesses CI feeds to `nargo execute`). Covers which e2e test/commands regenerate which tomls, and the one exception — private-kernel-reset/Prover.toml (the inner reset) which is NOT generated by the test at all and is maintained entirely by hand. Use when a `nargo execute` CI check fails on a crates/*/Prover.toml, after changing protocol-circuit inputs/constants, or when asked to refresh/regenerate Prover.toml sample inputs.
3+
description: Regenerate the protocol-circuit sample Prover.toml files (the witnesses CI feeds to `nargo execute`). Covers which of the two commands regenerates which tomls — the prover-client `regenerate_rollup_sample_inputs` suite for the block-root and above rollup circuits, and the e2e prover full test for the private-kernel and transaction-base circuits — and the one exception, private-kernel-reset/Prover.toml (the inner reset), which is NOT generated by the test at all and is maintained entirely by hand. Use when a `nargo execute` CI check fails on a crates/*/Prover.toml, after changing protocol-circuit inputs/constants, or when asked to refresh/regenerate Prover.toml sample inputs.
44
---
55

66
# Updating protocol-circuit Prover.toml files
@@ -21,39 +21,40 @@ The tomls are captured from a real end-to-end run, not written by hand (except t
2121

2222
## How regeneration works
2323

24-
`yarn-project/end-to-end/src/e2e_prover/full.test.ts` has a test "generates sample Prover.toml files if generate test data is on". During proving, circuit inputs are captured via `pushTestData`/`getTestData`; the test then calls `updateProtocolCircuitSampleInputs(circuitName, TOML.stringify(...))` (`yarn-project/foundation/src/testing/files/index.ts`), which writes `noir-projects/fnd/noir-protocol-circuits/crates/<circuitName>/Prover.toml`.
24+
Two commands cover the protocol-circuit tomls, split by whether the sample needs a real client-proved transaction. Both capture circuit inputs during proving via `pushTestData`/`getTestData` and write them with `updateProtocolCircuitSampleInputs(circuitName, TOML.stringify(...))` (`yarn-project/foundation/src/testing/files/index.ts`), which writes `noir-projects/fnd/noir-protocol-circuits/crates/<circuitName>/Prover.toml`.
2525

26-
The test early-returns unless **both** are true: `AZTEC_GENERATE_TEST_DATA=1` (enables `isGenerateTestDataEnabled()`) and fake proofs (`FAKE_PROOFS=1`, i.e. `REAL_PROOFS` is false).
26+
### Block-root and above rollup circuits — prover-client suite
2727

28-
### Command
29-
30-
From the repo root:
28+
`yarn-project/prover-client/src/test/regenerate_rollup_sample_inputs.test.ts` drives representative epochs through the simulated orchestrator and dumps each rollup circuit's captured input. The whole suite is `describe.skip`ped unless `AZTEC_GENERATE_TEST_DATA=1`, and it needs no L1 sandbox.
3129

3230
```bash
33-
AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn-project/end-to-end/scripts/run_test.sh simple e2e_prover/full
31+
AZTEC_GENERATE_TEST_DATA=1 yarn workspace @aztec/prover-client test regenerate_rollup_sample_inputs
3432
```
3533

36-
(Equivalently, from `yarn-project/end-to-end`: `AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn test:e2e e2e_prover/full.test`.) This is a full-stack run (L1 anvil + node + prover), ~15 min with fake proofs.
34+
Regenerates: `rollup-block-root-first-empty-tx`, `rollup-block-root-first`, `rollup-block-root-first-single-tx`, `rollup-block-root`, `rollup-block-root-single-tx`, `rollup-block-root-msgs-only`, `rollup-block-merge`, `rollup-checkpoint-root`, `rollup-checkpoint-root-single-block`, `rollup-checkpoint-merge`, `rollup-tx-merge`, `rollup-root`. The scenario list lives in the `scenarios` array in that test; each scenario's `dump` field names the tomls it owns.
3735

38-
After it finishes, review and stage the changed tomls with `git diff noir-projects/fnd/noir-protocol-circuits/crates/*/Prover.toml`.
36+
### Private-kernel and transaction-base circuits — e2e prover full test
3937

40-
### Which tomls this regenerates
38+
`full.test.ts` has a test "generates sample Prover.toml files if generate test data is on". It early-returns unless **both** `AZTEC_GENERATE_TEST_DATA=1` (enables `isGenerateTestDataEnabled()`) and fake proofs (`FAKE_PROOFS=1`, i.e. `REAL_PROOFS` is false) are set. These circuits need real client-proved transactions, which the simulated orchestrator suite above cannot produce.
4139

42-
The circuit list lives in the `forEach(circuitName => ...)` loop in `full.test.ts`. Currently active (regenerated by the run above):
40+
From the repo root:
41+
42+
```bash
43+
AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn-project/end-to-end/scripts/run_test.sh simple single-node/prover/server/full
44+
```
45+
46+
(Equivalently, from `yarn-project/end-to-end`: `AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn test:e2e single-node/prover/server/full.test`.) This is a full-stack run (L1 anvil + node + prover), ~15 min with fake proofs.
47+
48+
Regenerates:
4349

4450
- `private-kernel-init`, `private-kernel-init-2``private-kernel-init-5`
4551
- `private-kernel-inner`, `private-kernel-inner-2``private-kernel-inner-5`
4652
- `private-kernel-reset-tail`, `private-kernel-reset-tail-to-public` (the terminal resets — these run as part of every tx's tail)
4753
- `rollup-tx-base-private`, `rollup-tx-base-public`
48-
- `rollup-block-root-first`, `rollup-block-root-first-single-tx`
49-
- `rollup-checkpoint-root-single-block`, `rollup-checkpoint-merge`
50-
- `rollup-root`
51-
52-
`private-kernel-reset` (the **inner** reset) is deliberately **commented out** of this list and is **not** generated by the test — see the exception below.
5354

54-
Other entries commented out (e.g. `rollup-tx-merge`, `rollup-block-root`, `rollup-block-merge`, `rollup-checkpoint-root`) are also not produced by this flow; the inline comment points to the orchestrator single-checkpoint test for those.
55+
The circuit list lives in the `forEach(circuitName => ...)` loop in `full.test.ts`. `private-kernel-reset` (the **inner** reset) is deliberately **commented out** of this list and is **not** generated by the test — see the exception below.
5556

56-
If you add a new circuit crate, add its name to that list so its toml gets generated.
57+
After either run, review and stage the changed tomls with `git diff noir-projects/fnd/noir-protocol-circuits/crates/*/Prover.toml`. If you add a new circuit crate, add its name to the appropriate list so its toml gets generated.
5758

5859
## ⚠️ Exception: `private-kernel-reset/Prover.toml` (inner reset) is NOT generated — hand-maintain it
5960

barretenberg/cpp/CLAUDE.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,21 +139,21 @@ run the generation commands above.
139139

140140
Proof-length-affecting changes (e.g. `CHONK_PROOF_LENGTH` bumps from MegaFlavor entity additions) make the committed `Prover.toml` fixtures stale. `nargo execute --program-dir <crate>` then fails with `Type Array { length: N, typ: Field } is expected to have length N but value Vec(...)`.
141141

142-
Regenerate via the e2e prover full test with fake proofs:
142+
Regeneration is split across two commands. The block-root, block-merge, checkpoint, tx-merge, and root rollup samples come from the prover-client suite, which drives the simulated orchestrator and needs no L1 sandbox:
143143

144144
```bash
145-
cd yarn-project
146-
AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn workspace @aztec/end-to-end test e2e_prover/full.test
145+
AZTEC_GENERATE_TEST_DATA=1 yarn workspace @aztec/prover-client test regenerate_rollup_sample_inputs
147146
```
148147

149-
`FAKE_PROOFS=1` skips real proving — runs in ~2 min (orchestrator + witness generation only). Writes 12 `Prover.toml` files under `noir-projects/fnd/noir-protocol-circuits/crates/<circuit>/Prover.toml`.
150-
151-
For circuits not exercised by `full.test.ts` (`rollup-tx-merge`, `rollup-block-root`, `rollup-block-root-single-tx`, `rollup-block-merge`, `rollup-checkpoint-root`, `rollup-block-root-first-empty-tx`), additionally run:
148+
The private-kernel samples and the transaction-base rollup samples (`rollup-tx-base-private`, `rollup-tx-base-public`) need real client-proved transactions, so they come from the e2e prover full test with fake proofs:
152149

153150
```bash
154-
AZTEC_GENERATE_TEST_DATA=1 yarn workspace @aztec/prover-client test orchestrator_single_checkpoint
151+
cd yarn-project
152+
AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn workspace @aztec/end-to-end test single-node/prover/server/full.test
155153
```
156154

155+
`FAKE_PROOFS=1` skips real proving. Both write into `noir-projects/fnd/noir-protocol-circuits/crates/<circuit>/Prover.toml`.
156+
157157
Verify with `nargo execute --program-dir noir-projects/fnd/noir-protocol-circuits/crates/<crate>` for any previously-failing crate; should print `Circuit witness successfully solved`.
158158

159159
## Verification Keys

docs/docs-developers/docs/tutorials/js_tutorials/aave_bridge.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ sequenceDiagram
9696
Portal->>Aave: withdraw(aTokenAmount)
9797
Aave-->>Portal: underlying + yield
9898
Portal->>Inbox: sendL2Message(content)
99-
Note over Inbox: Wait for 2 L2 blocks (required for L1→L2 message availability)
99+
Note over Inbox: Wait for an L2 block to include the message (12-30s)
100100
User->>Bridge: claim_public(amount_with_yield)
101101
Bridge->>Inbox: consume_l1_to_l2_message
102102
Bridge->>Token: mint_to_public(user, amount_with_yield)
@@ -441,7 +441,7 @@ Extract the message leaf index:
441441

442442
#include_code get_claim_leaf_index /docs/examples/ts/aave_bridge/index.ts typescript
443443

444-
On the local network, L2 blocks are only produced when transactions are submitted. L1-to-L2 messages require 2 L2 blocks before they can be consumed on L2. This utility deploys two dummy contracts (with random salts for unique addresses) to force block production. On devnet or testnet, blocks are produced continuously and this step is unnecessary:
444+
On the local network, L2 blocks are only produced when transactions are submitted. An L1-to-L2 message can only be consumed once an L2 block includes it, and the network waits until the message is at least 12 seconds old before including it. This utility deploys two dummy contracts (with random salts for unique addresses) to force block production. On devnet or testnet, blocks are produced continuously and this step is unnecessary:
445445

446446
#include_code mine_blocks /docs/examples/ts/aave_bridge/index.ts typescript
447447

@@ -501,7 +501,7 @@ If `claim_public` reverts, ensure you called `set_minter(l2Bridge.address, true)
501501

502502
### L1→L2 message not found — claim reverts after mining blocks
503503

504-
L1-to-L2 messages need 2 L2 blocks after the L1 transaction before they become consumable. Make sure `mine2Blocks` runs before the claim. If the issue persists, verify the `messageLeafIndex` extracted from the `MessageSent` event is correct.
504+
An L1-to-L2 message becomes consumable once an L2 block includes it, which takes 12 to 30 seconds after the L1 transaction. Make sure `mine2Blocks` runs before the claim. If the issue persists, verify the `messageLeafIndex` extracted from the `MessageSent` event is correct.
505505

506506
## Next Steps
507507

docs/docs-developers/docs/tutorials/js_tutorials/token_bridge.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -437,15 +437,15 @@ To bridge, first approve the portal address to transfer the NFT, then transfer i
437437

438438
#include_code deposit_to_aztec /docs/examples/ts/token_bridge/index.ts typescript
439439

440-
The `Inbox` contract will emit an important log: `MessageSent(inProgress, index, leaf, updatedRollingHash);`. This log provides the **leaf index** of the message in the [L1-L2 Message Tree](../../foundational-topics/ethereum-aztec-messaging/index.md)—the location of the message in the tree that will appear on L2. You need this index, plus the secret, to correctly claim and decrypt the message.
440+
The `Inbox` contract will emit an important log: `MessageSent(index, hash, inboxRollingHash, bucketSeq);`. Its first field is the **leaf index** of the message in the [L1-L2 Message Tree](../../foundational-topics/ethereum-aztec-messaging/index.md)—the location of the message in the tree that will appear on L2. You need this index, plus the secret, to correctly claim and decrypt the message.
441441

442442
Use viem to extract this information:
443443

444444
#include_code get_message_leaf_index /docs/examples/ts/token_bridge/index.ts typescript
445445

446-
This extracts the logs from the deposit and retrieves the leaf index. You can now claim it on L2. However, for security reasons, at least 2 blocks must pass before a message can be claimed on L2. If you called `claim` on the L2 contract immediately, it would return "no message available".
446+
This extracts the logs from the deposit and retrieves the leaf index. You can now claim it on L2. However, a message can only be claimed once an L2 block includes it, and the network waits until the message is at least 12 seconds old before including it, so expect 12 to 30 seconds of latency. If you called `claim` on the L2 contract immediately, it would return "no message available".
447447

448-
Add a utility function to mine two blocks (it deploys a contract with a random salt):
448+
On a local network blocks are only produced when transactions are submitted, so add a utility function that forces a couple of blocks (it deploys a contract with a random salt):
449449

450450
#include_code mine_blocks /docs/examples/ts/token_bridge/index.ts typescript
451451

docs/docs-developers/docs/tutorials/js_tutorials/uniswap_swap.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ Bridge WETH from L1 to L2:
309309
When depositing from L1 to L2, we use a secret/secret-hash pattern: generate a random secret on the client, send only the hash to L1 (in the deposit transaction), then later reveal the secret on L2 to claim the tokens. This prevents **front-running attacks**: a malicious sequencer (the node that orders and processes L2 transactions) cannot observe the L1 deposit and claim the tokens themselves because they don't know the secret. Only someone who knows the preimage can claim.
310310
:::
311311

312-
Before claiming, we need to mine 2 L2 blocks. L1-to-L2 messages are not available in the same block they are sent -- the rollup must first include them in an L2 block, and then one more block must pass before the message can be consumed. We use a helper that deploys throwaway contracts to force these blocks:
312+
Before claiming, we need to mine a couple of L2 blocks. An L1-to-L2 message is not available the moment it is sent -- the rollup only includes it in an L2 block once it is at least 12 seconds old, and it becomes consumable as soon as that block lands. We use a helper that deploys throwaway contracts to force these blocks:
313313

314314
#include_code mine_blocks /docs/examples/ts/example_swap/index.ts typescript
315315

l1-contracts/gas_benchmark.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,24 @@
1212

1313
## No Validators
1414

15-
| Function | Avg Gas | Max Gas | Calldata Size | Calldata Gas |
16-
|----------------------|---------|---------|---------------|--------------|
17-
| propose | 195,988 | 222,201 | 932 | 14,912 |
18-
| submitEpochRootProof | 697,655 | 743,529 | 2,820 | 45,120 |
19-
| setupEpoch | 31,998 | 113,793 | - | - |
15+
| Function | Avg Gas | Max Gas | Calldata Size | Calldata Gas |
16+
|----------------------|---------|-----------|---------------|--------------|
17+
| propose | 199,557 | 225,741 | 996 | 15,936 |
18+
| submitEpochRootProof | 994,378 | 1,032,871 | 14,148 | 226,368 |
19+
| setupEpoch | 32,042 | 113,837 | - | - |
2020

21-
**Avg Gas Cost per Second**: 3,341.5 gas/second
21+
**Avg Gas Cost per Second**: 3,648.7 gas/second
2222
*Epoch duration*: 0h 38m 24s
2323

2424
## Validators
2525

26-
| Function | Avg Gas | Max Gas | Calldata Size | Calldata Gas |
27-
|----------------------|---------|---------|---------------|--------------|
28-
| propose | 324,449 | 351,604 | 4,452 | 71,232 |
29-
| submitEpochRootProof | 896,101 | 941,944 | 5,316 | 85,056 |
30-
| aggregate3 | 373,118 | 386,457 | - | - |
31-
| setupEpoch | 46,459 | 547,626 | - | - |
26+
| Function | Avg Gas | Max Gas | Calldata Size | Calldata Gas |
27+
|----------------------|-----------|-----------|---------------|--------------|
28+
| propose | 327,969 | 355,787 | 4,516 | 72,256 |
29+
| submitEpochRootProof | 1,575,427 | 1,673,267 | 16,644 | 266,304 |
30+
| aggregate3 | 376,569 | 389,943 | - | - |
31+
| setupEpoch | 46,504 | 547,670 | - | - |
3232

33-
**Avg Gas Cost per Second**: 5,304.3 gas/second
33+
**Avg Gas Cost per Second**: 5,942.9 gas/second
3434
*Epoch duration*: 0h 38m 24s
3535

0 commit comments

Comments
 (0)