The T3 verification tier validates compute receipts against hardware attestations from a trusted execution environment. Sigil supports AMD SEV-SNP, Intel SGX DCAP, Intel TDX, and Arm CCA. T3 settlement is fail-closed by default for every vendor. This runbook covers what operators must complete before flipping tee_verifier_enabled = true on a production chain.

Critical rule

Never enable T3 settlement for a vendor until that vendor’s full material bundle is complete, validated by sigil-tee-material … validate, and pinned in genesis via the bundle’s policyPatch.compute_params.<vendor>_trust_anchors. The verifier accepts only operator-supplied production material; synthetic test fixtures live behind #[cfg(test)] and are unreachable from release builds.

Operator tooling

node/sigil-tee-material ships a CLI that automates collection, validation, and genesis emission per vendor:
cargo build -p sigil-tee-material --release
# binary: node/target/release/sigil-tee-material
Subcommands per vendor:
Vendorfetchvalidateemit-genesis
AMD SEV-SNPamd-sev-snp fetch --product Milan|Genoa --out chain.pemamd-sev-snp validate --ark-chain chain.pemamd-sev-snp emit-genesis --ark-chain chain.pem --measurement m.hex --out genesis.tee.patch.json
Intel SGX DCAPintel-sgx fetch --fmspc <12-hex> --out-dir ./sgx-materialintel-sgx validate --pck-chain ... --tcb-signing-cert ... --tcb-info ... --qe-identity ... --pck-crl ...intel-sgx emit-genesis ... --mrenclave m.hex --mrsigner s.hex --out genesis.tee.patch.json
Intel TDXintel-tdx fetch --fmspc <12-hex> --out-dir ./tdx-materialintel-tdx validate ...intel-tdx emit-genesis ... --mrtd m.hex --mrsigner-seam s.hex --out genesis.tee.patch.json
Arm CCAoperator-suppliedarm-cca validate --iak iak.sec1arm-cca emit-genesis --iak iak.sec1 --rim r.hex --out genesis.tee.patch.json

Bundle output format

Every emit-genesis writes a normalised JSON envelope:
{
  "vendor": "amd-sev-snp",
  "generatedAt": "2026-05-13T12:00:00Z",
  "expiresAt": "2027-05-13T12:00:00Z",
  "materials": { /* vendor-specific raw artefacts */ },
  "measurements": ["<hex>", "..."],
  "policyPatch": {
    "compute_params": {
      "amd_sev_snp_trust_anchors": { /* drop-in shape for genesis */ }
    }
  }
}
Operators merge policyPatch.compute_params into their genesis JSON. The materials block is preserved for audit (who fetched, when, what bytes).

Failure modes

All validate and emit-genesis paths fail closed and write nothing when:
  • fetch receives a non-200 status or unreachable host.
  • validate finds a cert chain without a self-signed root.
  • validate finds a TCB Info or QE Identity JSON missing required envelope fields.
  • validate finds a CRL DER that does not parse.
  • emit-genesis is given a measurement file with the wrong byte length (32 / 48 / 64 depending on vendor).
  • emit-genesis for Arm CCA is given a sample realm-token that does not verify against the supplied IAK public keys.
  • Intel TDX validate or emit-genesis finds a QE Identity with id != "TD_QE".
T3 settlement remains disabled in all failure cases. The operator never receives a partial bundle.

Mainnet readiness checklist

Before flipping tee_verifier_enabled = true:
  1. Genesis carries the full bundle for every vendor the chain accepts. Partial bundles are rejected as FixtureMaterialRequired.
  2. At least one real attestation fixture for each enabled vendor has been validated end-to-end against the operator’s pinned material.
  3. Compute-receipt verification has been exercised with cargo test -p sigil-compute --features tee-verify.
  4. Slashing has been exercised with a deliberately-invalid attestation and verified to record the slashing event.
  5. Vendor cert chains are monitored for expiry; an alert fires 14 days before any anchor expires.

Per-vendor material requirements

The detailed requirements per vendor are extensive. Refer to the source spec in the Sigil repository for the full byte-length, schema, and chain-of-trust requirements:
  • AMD SEV-SNP: node/sigil-tee-material/src/vendors/amd_sev_snp.rs
  • Intel SGX DCAP: node/sigil-tee-material/src/vendors/intel_sgx.rs
  • Intel TDX: node/sigil-tee-material/src/vendors/intel_tdx.rs
  • Arm CCA: node/sigil-tee-material/src/vendors/arm_cca.rs

Genesis policy patch

Once all vendors have been validated and bundles emitted, merge the policyPatch.compute_params blocks into the chain’s genesis:
jq -s '.[0] * .[1].policyPatch * .[2].policyPatch * ...' \
  genesis.base.json \
  genesis.amd-sev-snp.tee.patch.json \
  genesis.intel-sgx.tee.patch.json \
  ... \
  > genesis.with-tee.json
Verify the merged genesis with:
python3 scripts/validate-launch-readiness.py tee-verifier-readiness

See also