Skip to content

docs: add AZIP-35 for Glamsterdam gas constants - #68

Open
spalladino wants to merge 6 commits into
AztecProtocol:mainfrom
spalladino:azip-28-glamsterdam-gas-constants
Open

spalladino wants to merge 6 commits into
AztecProtocol:mainfrom
spalladino:azip-28-glamsterdam-gas-constants

Conversation

@spalladino

@spalladino spalladino commented Sep 18, 2026 •

Copy link
Copy Markdown
Contributor

Proposes updating the L1 gas estimates used by the Aztec fee model ahead of Glamsterdam: 520,000 gas per checkpoint proposal (up from 300,000) and 2,500,000 gas per verified epoch (down from 3,600,000). The values come from v6 testnet transactions measured on Sepolia before and after Glamsterdam activated there on 2026-10-06; the AZIP links representative transactions for each case.

@spalladino
spalladino requested a review from a team September 18, 2026 13:00
@spalladino spalladino changed the title docs: add AZIP-28 for Glamsterdam gas constants docs: add AZIP-35 for Glamsterdam gas constants Oct 6, 2026
aminsammara added a commit to aminsammara/governance that referenced this pull request Oct 7, 2026
…tions

- Glamsterdam gas constants is AZIP-35 (governance AztecProtocol#68), not AZIP-28
- link merged AZIP-29 and AZIP-30 by relative path
- abstract counts the two payload-only AZIPs alongside the ten in the rollup
- add author, payload/contract table, pinned-verifier note, sequencer
  signaling config, Sepolia placeholder and open questions
spalladino added a commit to AztecProtocol/aztec-packages that referenced this pull request Oct 7, 2026
## What changed

`FeeLib.sol` prices the L1 work a sequencer and a prover must recover
with two constants. They were placeholders taken from a forge benchmark
run under `--evm-version amsterdam`. This PR replaces them with values
measured on Sepolia after Glamsterdam:

| Constant | Old | New |
|---|---|---|
| `L1_GAS_PER_CHECKPOINT_PROPOSED` | 500,000 | 520,000 |
| `L1_GAS_PER_EPOCH_VERIFIED` | 4,000,000 | 2,500,000 |

Sepolia measurements:

- **Propose** (through Multicall3 `aggregate3`): median 487k; ~514k per
checkpoint on average once the `setupEpoch` folded into each epoch's
first checkpoint is counted; the most expensive regular propose was
520k.
- **Epoch proof** (first proof submitted for an epoch): median 2.36M,
max 2.51M.

The governance proposal is at
AztecProtocol/governance#68.

## Mirrors updated

- `l1-contracts/test/fixtures/fee_data_points.json` is recomputed for
the new constants. Only the sequencer, prover and protocol fee
components change. The congestion multiplier and the L1 fee inputs stay
the same. The recompute script reproduces the current fixture exactly
with the old constants (0 of 672 points differ), so the only thing that
moves is the constants.
- `labs-patches/0011` makes the same change to the TypeScript port
(`yarn-project/stdlib/src/gas/fee_math.ts`), updates the constants table
in the stdlib gas README, and updates the epoch constant hardcoded in
the single-node `fees_test.ts` e2e. The patch stays in the series until
the aztec-node PR lands.

Nothing else in the tree mirrors these values: they are not in the
constants codegen, and no docs state them.

## Testing

- `forge test` in `l1-contracts` (excluding the verifier-dependent
scripts, `shouting.t.sol` and `UniswapPortalTest`): 1370 passed, 0
failed. The fee suites under `test/fees/` (43 tests) pass both before
and after the change.
- In aztec-node, `stdlib/src/gas` and `stdlib/src/tx`, the
sequencer-client `global_variable_builder` tests and the aztec-node
`next_block` tests all pass. `fee_predictor.test.ts` deploys the rollup
to anvil and checks the TypeScript predictions against
`getManaMinFeeAt`. It fails when only the TypeScript side is updated
(`625010100000 != 598135100000`). It passes once the L1 contracts carry
the new constants too.
AztecBot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Oct 7, 2026
## What changed

`FeeLib.sol` prices the L1 work a sequencer and a prover must recover
with two constants. They were placeholders taken from a forge benchmark
run under `--evm-version amsterdam`. This PR replaces them with values
measured on Sepolia after Glamsterdam:

| Constant | Old | New |
|---|---|---|
| `L1_GAS_PER_CHECKPOINT_PROPOSED` | 500,000 | 520,000 |
| `L1_GAS_PER_EPOCH_VERIFIED` | 4,000,000 | 2,500,000 |

Sepolia measurements:

- **Propose** (through Multicall3 `aggregate3`): median 487k; ~514k per
checkpoint on average once the `setupEpoch` folded into each epoch's
first checkpoint is counted; the most expensive regular propose was
520k.
- **Epoch proof** (first proof submitted for an epoch): median 2.36M,
max 2.51M.

The governance proposal is at
AztecProtocol/governance#68.

## Mirrors updated

- `l1-contracts/test/fixtures/fee_data_points.json` is recomputed for
the new constants. Only the sequencer, prover and protocol fee
components change. The congestion multiplier and the L1 fee inputs stay
the same. The recompute script reproduces the current fixture exactly
with the old constants (0 of 672 points differ), so the only thing that
moves is the constants.
- `labs-patches/0011` makes the same change to the TypeScript port
(`yarn-project/stdlib/src/gas/fee_math.ts`), updates the constants table
in the stdlib gas README, and updates the epoch constant hardcoded in
the single-node `fees_test.ts` e2e. The patch stays in the series until
the aztec-node PR lands.

Nothing else in the tree mirrors these values: they are not in the
constants codegen, and no docs state them.

## Testing

- `forge test` in `l1-contracts` (excluding the verifier-dependent
scripts, `shouting.t.sol` and `UniswapPortalTest`): 1370 passed, 0
failed. The fee suites under `test/fees/` (43 tests) pass both before
and after the change.
- In aztec-node, `stdlib/src/gas` and `stdlib/src/tx`, the
sequencer-client `global_variable_builder` tests and the aztec-node
`next_block` tests all pass. `fee_predictor.test.ts` deploys the rollup
to anvil and checks the TypeScript predictions against
`getManaMinFeeAt`. It fails when only the TypeScript side is updated
(`625010100000 != 598135100000`). It passes once the L1 contracts carry
the new constants too.

(cherry picked from commit 828486f)
AztecBot pushed a commit to AztecProtocol/aztec-packages that referenced this pull request Oct 8, 2026
## What changed

`FeeLib.sol` prices the L1 work a sequencer and a prover must recover
with two constants. They were placeholders taken from a forge benchmark
run under `--evm-version amsterdam`. This PR replaces them with values
measured on Sepolia after Glamsterdam:

| Constant | Old | New |
|---|---|---|
| `L1_GAS_PER_CHECKPOINT_PROPOSED` | 500,000 | 520,000 |
| `L1_GAS_PER_EPOCH_VERIFIED` | 4,000,000 | 2,500,000 |

Sepolia measurements:

- **Propose** (through Multicall3 `aggregate3`): median 487k; ~514k per
checkpoint on average once the `setupEpoch` folded into each epoch's
first checkpoint is counted; the most expensive regular propose was
520k.
- **Epoch proof** (first proof submitted for an epoch): median 2.36M,
max 2.51M.

The governance proposal is at
AztecProtocol/governance#68.

## Mirrors updated

- `l1-contracts/test/fixtures/fee_data_points.json` is recomputed for
the new constants. Only the sequencer, prover and protocol fee
components change. The congestion multiplier and the L1 fee inputs stay
the same. The recompute script reproduces the current fixture exactly
with the old constants (0 of 672 points differ), so the only thing that
moves is the constants.
- `labs-patches/0011` makes the same change to the TypeScript port
(`yarn-project/stdlib/src/gas/fee_math.ts`), updates the constants table
in the stdlib gas README, and updates the epoch constant hardcoded in
the single-node `fees_test.ts` e2e. The patch stays in the series until
the aztec-node PR lands.

Nothing else in the tree mirrors these values: they are not in the
constants codegen, and no docs state them.

## Testing

- `forge test` in `l1-contracts` (excluding the verifier-dependent
scripts, `shouting.t.sol` and `UniswapPortalTest`): 1370 passed, 0
failed. The fee suites under `test/fees/` (43 tests) pass both before
and after the change.
- In aztec-node, `stdlib/src/gas` and `stdlib/src/tx`, the
sequencer-client `global_variable_builder` tests and the aztec-node
`next_block` tests all pass. `fee_predictor.test.ts` deploys the rollup
to anvil and checks the TypeScript predictions against
`getManaMinFeeAt`. It fails when only the TypeScript side is updated
(`625010100000 != 598135100000`). It passes once the L1 contracts carry
the new constants too.

(cherry picked from commit 828486f)
koenmtb1 pushed a commit that referenced this pull request Oct 9, 2026
* docs: add AZUP-3 (Aztec Network v6) draft

Skeleton for the v6 upgrade proposal, scoped per issue #60. Records the
payload's current action list and flags that the contract address domain
separator on `next` is still v5's (DOM_SEP__CONTRACT_ADDRESS_V2 =
4099338721) and must be bumped before the v6 release candidate; the
protocol fee margin decision and the public-setup allowlist are marked
TBD.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(azup-3): record the v3 domain separator value and its aztec-packages PR

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* docs(azup-3): describe the v6 AZIPs and payload actions

Lists each included AZIP (22-30) with the change it makes in v6, and gives the payload's eight mainnet actions in AZUP-1's Contract / Function / Effect format, including the 1.8M AZTEC reservation for v5 and the v5 checkpoint reward cut from 500 to 50 AZTEC. Motivation covers the Fast Inbox, provider exits, protocol fee capture and the Glamsterdam timing. Testnet details, contract addresses, protocol constants, signaling config and open questions are removed.

* docs(azup-3): include AZIP-31, the pluggable sequencer reward calculator

v6 deploys with no calculator set, so every proposer still earns the
default reward; a policy that uses one needs its own AZIP and AZUP.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* docs(azup-3): include AZIP-33, raising the GSE proof-of-possession gas cap

Adds the cap increase to 300,000 as payload Action 9.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* docs(azup-3): include AZIP-34, sustaining v5 after v6 becomes canonical

AZIP-34 specifies the existing Actions 3 and 4 (the 1.8M AZTEC v5
earmark and the 50 AZTEC v5 checkpoint reward), so those actions now
cite it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* docs(azup-3): correct AZIP numbering and fill in missing template sections

- Glamsterdam gas constants is AZIP-35 (governance #68), not AZIP-28
- link merged AZIP-29 and AZIP-30 by relative path
- abstract counts the two payload-only AZIPs alongside the ten in the rollup
- add author, payload/contract table, pinned-verifier note, sequencer
  signaling config, Sepolia placeholder and open questions

* docs(azup-3): correct the AZIP-27 provider exit window

The limit is 5% of the remaining validator set over Governance's
withdrawal delay (votingDelay / 5 + votingDuration + executionDelay,
about 9.6 days with mainnet's current configuration), not 7 days.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* AZUP-3: remove Open Questions and Feedback section

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
Co-authored-by: Amin Sammara <Amin@aztec-labs.com>
Co-authored-by: aminsammara <aminsammara1@gmail.com>
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.

1 participant