Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ npx skills add base/base-skills
|Specifications/Specifications/Base Protocol/Consensus:specifications/base-protocol/consensus/specification,specifications/base-protocol/consensus/derivation,specifications/base-protocol/consensus/p2p,specifications/base-protocol/consensus/rpc
|Specifications/Specifications/Base Protocol/Execution:specifications/base-protocol/execution/l2-execution-engine,specifications/base-protocol/execution/precompiles,specifications/base-protocol/execution/predeploys,specifications/base-protocol/execution/preinstalls
|Specifications/Specifications/Base Protocol/Bridging:specifications/base-protocol/bridging/standard-bridges,specifications/base-protocol/bridging/deposits,specifications/base-protocol/bridging/withdrawals,specifications/base-protocol/bridging/cross-domain-messengers,specifications/base-protocol/bridging/base-solana-bridge
|Specifications/Specifications/Base Protocol/Proofs:specifications/base-protocol/proofs/overview,specifications/base-protocol/proofs/challenger,specifications/base-protocol/proofs/proposer,specifications/base-protocol/proofs/registrar,specifications/base-protocol/proofs/tee-prover,specifications/base-protocol/proofs/zk-prover,specifications/base-protocol/proofs/proof-contracts
|Specifications/Specifications/Base Protocol/Proofs:specifications/base-protocol/proofs/overview,specifications/base-protocol/proofs/challenger,specifications/base-protocol/proofs/proposer,specifications/base-protocol/proofs/hinted-tee-registration,specifications/base-protocol/proofs/registrar,specifications/base-protocol/proofs/tee-prover,specifications/base-protocol/proofs/zk-prover,specifications/base-protocol/proofs/proof-contracts
|Specifications/Specifications/B20:specifications/b20/specification-overview,specifications/b20/reference/constants-addresses,specifications/b20/reference/errors-events,specifications/b20/reference/invariants-tests,specifications/b20/changelog
|Specifications/Specifications/B20/Interfaces:specifications/b20/reference/interfaces/i-activation-registry/index,specifications/b20/reference/interfaces/ib20/index,specifications/b20/reference/interfaces/ib20-asset/index,specifications/b20/reference/interfaces/ib20-factory/index,specifications/b20/reference/interfaces/ib20-stablecoin/index,specifications/b20/reference/interfaces/i-policy-registry/index
|Specifications/Specifications/Transactions:specifications/transactions/transaction-ordering,specifications/transactions/transaction-finality,specifications/transactions/network-fees,specifications/transactions/throughput-and-limits,specifications/transactions/troubleshooting-transactions
Expand Down
1 change: 1 addition & 0 deletions docs/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@
"specifications/base-protocol/proofs/overview",
"specifications/base-protocol/proofs/challenger",
"specifications/base-protocol/proofs/proposer",
"specifications/base-protocol/proofs/hinted-tee-registration",
"specifications/base-protocol/proofs/registrar",
"specifications/base-protocol/proofs/tee-prover",
"specifications/base-protocol/proofs/zk-prover",
Expand Down
4 changes: 3 additions & 1 deletion docs/llms-full.txt
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,9 @@ const client = createPublicClient({ chain: base, transport: http() })

- [Proposer](https://docs.base.org/specifications/base-protocol/proofs/proposer): Specification of the proposer, an offchain service that turns canonical L2 checkpoint ranges into AggregateVerifier games on L1.

- [Registrar](https://docs.base.org/specifications/base-protocol/proofs/registrar): Specification of the registrar, an offchain service that maintains the onchain registry of accepted TEE signer identities via attestation ZK proofs.
- [Hinted TEE Registration](https://docs.base.org/specifications/base-protocol/proofs/hinted-tee-registration): Migration from external ZK proving to checked P-384 hints for registering new AWS Nitro Enclave signers.

- [Registrar](https://docs.base.org/specifications/base-protocol/proofs/registrar): Specification of the registrar and the hinted P-384 flow used to register AWS Nitro Enclave signer identities on L1.

- [TEE Prover](https://docs.base.org/specifications/base-protocol/proofs/tee-prover): Specification of the TEE prover, an offchain service that re-executes L2 block ranges inside AWS Nitro Enclaves to produce signed proof material for AggregateVerifier games.

Expand Down
4 changes: 3 additions & 1 deletion docs/llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,9 @@

- [Proposer](https://docs.base.org/specifications/base-protocol/proofs/proposer): Specification of the proposer, an offchain service that turns canonical L2 checkpoint ranges into AggregateVerifier games on L1.

- [Registrar](https://docs.base.org/specifications/base-protocol/proofs/registrar): Specification of the registrar, an offchain service that maintains the onchain registry of accepted TEE signer identities via attestation ZK proofs.
- [Hinted TEE Registration](https://docs.base.org/specifications/base-protocol/proofs/hinted-tee-registration): Migration from external ZK proving to checked P-384 hints for registering new AWS Nitro Enclave signers.

- [Registrar](https://docs.base.org/specifications/base-protocol/proofs/registrar): Specification of the registrar and the hinted P-384 flow used to register AWS Nitro Enclave signer identities on L1.

- [TEE Prover](https://docs.base.org/specifications/base-protocol/proofs/tee-prover): Specification of the TEE prover, an offchain service that re-executes L2 block ranges inside AWS Nitro Enclaves to produce signed proof material for AggregateVerifier games.

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
---
title: "Hinted TEE Registration"
description: "Migration from external ZK proving to checked P-384 hints for registering new AWS Nitro Enclave signers."
---

Base is replacing the RISC Zero and Boundless flow used to register new TEE signers with direct
AWS Nitro attestation verification using checked P-384 hints.

The change makes registration faster and removes the dependency on an external ZK proving service.
It does not change how enclaves produce TEE state proofs or how those proofs are verified.

## Previous Flow

The registrar previously sent each Nitro attestation to an external proving service. That service
produced a RISC Zero proof showing that the attestation and its AWS certificate chain were valid.
The registrar then submitted the proof to `TEEProverRegistry` on L1.

This added an external availability dependency and could delay new signer registration while the ZK
proof was generated.

## New Flow

The registrar now:

1. Fetches a fresh AWS Nitro attestation for the new enclave signer.
2. Generates P-384 modular inverse hints locally.
3. Verifies and caches any missing AWS certificates through `CertManager`.
4. Submits the attestation, its signature, and the final hint stream to `TEEProverRegistry`.
5. Records the signer and its attested PCR0 after all onchain checks pass.

`TEEProverRegistry` permits only its owner or manager to perform the final registration. Certificate
cache writes are permissionless because `CertManager` verifies the certificate, its parent chain,
and every supplied hint before storing it.

## Checked Hints

P-384 verification requires many modular inversions. Computing those inversions in the EVM is
expensive, but checking a proposed inverse is comparatively cheap. The registrar computes the
values offchain and supplies them as hints.

Every hint is checked onchain before use. Incorrect, missing, or surplus hints revert, so the hint
generator is required for liveness but is not trusted for correctness. A faulty or malicious hint
cannot make an invalid certificate or attestation pass.

## Certificate Caching

The AWS Nitro root is pinned in `CertManager`. Non-root CA certificates and the leaf certificate are
verified and cached in parent-first order. Later registrations can reuse cached certificates while
they remain valid and unrevoked.

For a typical Nitro certificate chain:

| Cache state | Registration transactions |
| --- | ---: |
| Empty | 5 |
| CA chain cached, new leaf | 2 |
| CA chain and leaf cached | 1 |

The registrar reads onchain cache state before each write, allowing it to resume after a partial
registration or process restart without repeating completed certificate transactions.

## Unchanged Behavior

This migration does not change:

- signer key generation inside the Nitro Enclave;
- the attestation fields produced by AWS Nitro;
- PCR0-based enclave image selection;
- TEE proposal or dispute proof formats;
- `TEEVerifier` or `AggregateVerifier` behavior; or
- SP1 state-proof verification.

The existing `TEEProverRegistry` proxy is upgraded without changing its storage layout. Existing
owners, managers, proposers, registered signers, and signer image hashes are preserved.

For the full registration lifecycle, validation rules, revocation handling, and operator
requirements, see the [Registrar specification](/specifications/base-protocol/proofs/registrar).
Loading
Loading