BYO-BLS End-to-End Validation Report (Chain 286)¶
Environment¶
| Property | Value |
|---|---|
| Date (UTC) | 2026-03-21 |
| Network | Centurion disposable mainnet |
| Chain ID | 286 (0x11e) |
| Fork | Fulu at genesis |
| Genesis validators | 3 (indices 0, 1, 2) |
| DepositContractCTN | 0x1cf70D9361DA31eE571625C2fA732614CcE5f011 |
| EIP-7002 System Contract | 0x00000961Ef480Eb55e80D19ad83579A64c007002 |
| Contract Owner | 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 |
| Seat Manager commit | ffd9cde |
Test Subject¶
| Property | Value |
|---|---|
| Seat ID | 517 |
| Operator | byo-bls-e2e |
| Validator Index | 3 |
| Pubkey | 0xaa74a83f10ea5fba2e0a2c1fc7c080180e01e857573b84200c3b238cb4028fa2a98e48b53c2d0218aadcfd69f6c5d1aa |
| Vault Address | 0x412a91402f3d3baee3612d5b5d0ba43542b7adf9 |
| Beneficiary | 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 |
| Principal | 32 CTN |
What This Test Proves¶
This is a full BYO-BLS (Bring Your Own BLS) lifecycle test — the external operator model where the foundation never touches the operator's BLS signing key. The test exercises every step from seat creation through EIP-7002 force-exit, proving:
- Key separation: Foundation creates vault and seat without BLS key material
- Deposit data validation: Operator-submitted deposit data is validated (pubkey, withdrawal credentials, amount)
- On-chain allowlist: Intent hash consumed correctly on deposit
- Validator activation: CL picks up the new validator and it goes
active_ongoing - Force-exit without BLS key: EIP-7002 exit triggered via vault contract — no BLS signing key needed
Lifecycle Steps¶
Step 1: Create Seat with Vault¶
seat create-with-vault --operator byo-bls-e2e \
--pubkey 0xaa74a83f10ea5fba2e0a2c1fc7c080180e01e857573b84200c3b238cb4028fa2a98e48b53c2d0218aadcfd69f6c5d1aa \
--beneficiary 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
- Vault deployed at
0x412a91402f3d3baee3612d5b5d0ba43542b7adf9 - Withdrawal credentials derived from vault address:
0x010000000000000000000000412a91402f3d3baee3612d5b5d0ba43542b7adf9 - 7-property post-deploy verification passed (beneficiary, treasury, principal, phase, exitRequestContract, withdrawalCredentials, code)
- Seat 517 created with status CREATED
Step 2: Operator Submits Deposit Data¶
- Operator generated deposit data externally (using their own BLS key, never shared)
- Deposit data signed over the vault's withdrawal credentials
- Server validated: pubkey match, withdrawal credentials match, amount = 32 CTN
- Foundation never touched the BLS signing key
Step 3: Approve (Allowlist)¶
addAllowedDeposit(intentHash)sent to DepositContractCTN- Intent hash:
keccak256(pubkey || wc)registered on-chain - Seat status: CREATED -> ALLOWLISTED
Step 4: Deposit 32 CTN¶
deposit(pubkey, wc, signature, depositDataRoot)called with 32 CTN value- Intent consumed on-chain (one-use allowlist entry)
- Seat status: ALLOWLISTED -> DEPOSITED
Step 5: Watcher Detects Deposit¶
- EL watcher detected
DepositEventlog from deposit contract - CL watcher observed validator appearing on beacon chain
- Seat status: DEPOSITED -> SEEN_BY_CL
Step 6: Validator Activation¶
- Validator 3 entered activation queue
- Activated at epoch 11, status:
active_ongoing - CL watcher confirmed from 2 distinct endpoint labels (
local-dev+gcp-a1) - Seat status: SEEN_BY_CL -> ACTIVE
Step 7: EIP-7002 Force-Exit (Kill Switch)¶
- Vault's
triggerValidatorExit()called by treasury (owner) - Sends pubkey to EIP-7002 system contract at
0x00000961Ef480Eb55e80D19ad83579A64c007002 - No BLS signing key required — exit triggered purely from execution layer
Force-exit transaction
Tx hash: 0x0674ec01ea195834be7f39923e3afebbf3856f9b834d7411c1ae550dbfcd19bc
Exit request confirmed on beacon chain
Beacon block at slot 385 contains the withdrawal request in execution_requests.withdrawals.
Exit Deferral: SHARD_COMMITTEE_PERIOD¶
The validator's exit is deferred due to SHARD_COMMITTEE_PERIOD = 256 epochs. A validator must be active for at least 256 epochs before the beacon chain processes its exit.
| Property | Value |
|---|---|
| Activation epoch | 11 |
| Earliest exit epoch | 267 (= 11 + 256) |
| Estimated processing | ~27 hours after activation |
Once the exit processes at epoch 267, the validator will transition through active_exiting -> exited_unslashed -> withdrawal_done, and the settlement phase can begin.
Pending: Settlement E2E¶
After the validator exits and its balance is swept to the vault:
| Step | Command | Status |
|---|---|---|
| Start exit settlement | seat settle 517 --send |
Pending (epoch 267+) |
| Treasury claims principal | claimPrincipal(32 CTN) |
Pending |
| Beneficiary claims rewards | claimRewards(excess) |
Pending |
| Conservation law check | balance + principalClaimed + rewardsClaimed == totalLifetime |
Pending |
This section will be updated once the exit processes and settlement completes.
State Machine Evidence¶
CREATED ──approve──> ALLOWLISTED ──deposit──> DEPOSITED ──watcher──> SEEN_BY_CL ──2-label CL──> ACTIVE ──force-exit──> (exit pending)
stateDiagram-v2
[*] --> CREATED : create-with-vault
CREATED --> ALLOWLISTED : approve (tx on-chain)
ALLOWLISTED --> DEPOSITED : deposit 32 CTN
DEPOSITED --> SEEN_BY_CL : EL+CL watcher
SEEN_BY_CL --> ACTIVE : 2-label CL confirmation
ACTIVE --> EXIT_PENDING : force-exit (EIP-7002)
EXIT_PENDING --> EXITED : epoch 267+ (pending)
EXITED --> SETTLED : settlement (pending)
Key Takeaways¶
- BYO-BLS works end-to-end: External operator keeps full custody of BLS key. Foundation never generates, stores, or touches it.
- EIP-7002 kill switch works: Treasury can force-exit any validator without the operator's BLS key — critical safety property for the allowlist model.
- Deposit data validation is sound: Server correctly validates operator-submitted deposit data against seat metadata (pubkey, vault WC, amount).
- Two-label CL observation prevents false ACTIVE: Seat only transitions to ACTIVE when confirmed by 2+ independent CL endpoints, preventing single-source false positives.
- SHARD_COMMITTEE_PERIOD is load-bearing: Validators cannot be exited in the same epoch they activate. The 256-epoch minimum active period is a consensus-layer safety property that the seat manager must account for in operational planning.
Conclusion¶
PASS — The BYO-BLS onboarding pipeline and EIP-7002 force-exit are validated on a live chain. Settlement e2e will complete once the exit processes at epoch 267.