Skip to content

Add pre-fork EIP-8282 contract deployment playbook (gloas-dev)#217

Merged
qu0b merged 1 commit into
masterfrom
qu0b/deploy-eip8282-playbook
Jul 13, 2026
Merged

Add pre-fork EIP-8282 contract deployment playbook (gloas-dev)#217
qu0b merged 1 commit into
masterfrom
qu0b/deploy-eip8282-playbook

Conversation

@qu0b

@qu0b qu0b commented Jul 13, 2026

Copy link
Copy Markdown
Member

What

New playbook playbooks/gloas-dev/deploy-eip8282-contracts.yaml that deploys the EIP-8282 builder deposit (0x03) and builder exit (0x04) system contracts onto a running devnet before the GLOAS fork activates.

glamsterdam-devnet-7 deliberately omits these predeploys from genesis (DEPLOY_EIP8282_CONTRACTS=false) to exercise the mainnet-like deployment workflow — from GLOAS activation onward every block is invalid unless both contracts exist. This playbook is meant to be registered as a startup test on the devnet so the contracts land right after launch.

How

  • Deploys through the deterministic CREATE2 factory (0x4e59...956C, predeployed in devnet genesis as a well-known contract) using the vanity-mined salt + initcode pairs from ethereum/execution-specs#3091 (builder_{deposit,exit}_factory_deploy.json). The factory reverts when CREATE2 fails (including the already-deployed collision case), so a successful receipt is proof of deployment (failOnReject: true).
  • Idempotent: an eth_call precheck against the deposit contract's fee getter detects existing code (0x = missing, 32-byte fee = deployed; never reverts) and skips deployment on re-runs, so a startup-scheduled test stays green across assertoor restarts. The exit contract cannot be prechecked the same way — its constructor arms the slot-0 excess inhibitor, making its fee getter revert by design until the first post-GLOAS system call — so its deployment is asserted via the deploy receipt (the pair only ever deploys together).
  • Fork guard: if the contracts are missing and GLOAS is already active, the test fails fast with a clear diagnostic (the deploy txs can never be included at that point) instead of timing out waiting for a receipt.

Verification

  • CREATE2(factory, salt, initcode) recomputed with cast from the embedded calldata → matches the canonical addresses 0x0000bFF4...8282 / 0x000064D6...8282; the initcode runtime is byte-identical to the egg v6.1.3 genesis predeploy (source: ethereum/sys-asm).
  • assertoor validate passes with the playbook registered as an external test.
  • Dry-ran against live glamsterdam-devnet-6 (post-GLOAS, contracts absent at the new addresses): precheck correctly reported no code, the fork guard fired and failed the test with the intended message.

qu0b added a commit to ethpandaops/ansible-collection-general that referenced this pull request Jul 13, 2026
…le (#559)

## What

The assertoor values template hardcodes `assertoorTests: []`, so there
is no way to register assertoor tests from a devnet's inventory — test
registration currently happens ad-hoc via the assertoor API and is lost
on redeploys.

This adds a `gen_kubernetes_config_assertoor_tests` role var (default
`[]`, keeping current output byte-identical) that is rendered into
`assertoorTests` when set. Entries use assertoor's external-test
registration schema, e.g.:

```yaml
gen_kubernetes_config_assertoor_tests:
  - id: deploy-eip8282-contracts
    file: https://raw.githubusercontent.com/ethpandaops/assertoor/master/playbooks/gloas-dev/deploy-eip8282-contracts.yaml
    schedule:
      startup: true
```

## Why

glamsterdam-devnet-7 omits the EIP-8282 builder request contracts from
genesis and deploys them pre-gloas via an assertoor startup test
(ethpandaops/assertoor#217). That test must be registered declaratively
so it survives redeploys and runs as soon as assertoor comes up.

## Verification

Rendered the new block with ansible (`to_nice_yaml | indent`) against a
populated list — output parses back to the exact registration entries;
with the var unset the template still renders `assertoorTests: []`.
@qu0b qu0b merged commit 5d1fb09 into master Jul 13, 2026
6 checks passed
@qu0b qu0b deleted the qu0b/deploy-eip8282-playbook branch July 13, 2026 13:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build-docker-image Automatically build docker image for PR branch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants