From aec8863a6625c3d7d6f79bc70ba53ea20ae3f90f Mon Sep 17 00:00:00 2001 From: Ammar Arif Date: Tue, 28 Apr 2026 20:55:09 -0500 Subject: [PATCH] chore(piltover): align with new ProgramInfo enum + plumb katana_tee_config_hash `cartridge-gg/piltover#feat/tee-persistent` (`ebb714b`) split `ProgramInfo` from a 4-field struct into an enum (`StarknetOs(StarknetOsProgramInfo)` vs `KatanaTee(KatanaTeeProgramInfo)`). Each Piltover deployment commits to one variant at config time; `validate_input` panics on cross-mode submission. The on-chain assertion `tee_input.katana_tee_config_hash == KatanaTeeProgramInfo .katana_tee_config_hash` now needs the same versioned environment hash to flow from the Katana node through Saya's TEE pipeline into the settlement payload. This commit: * Repoints `piltover` to `cartridge-gg/piltover#feat/tee-persistent` (3 Cargo manifests). * Bumps `katana-tee` deps to `649f0864` to pick up `cartridge-gg/katana-tee#1`, which surfaces `katana_tee_config_hash` on `TeeQuoteResponse` (5 deps, all in `bin/persistent-tee/Cargo.toml`). * `bin/ops/src/core_contract/utils.rs::set_program_info` now prepends the `StarknetOs` variant index to the calldata. `ops` stays ZK-only; TEE-mode deployment is a separate work item. * Threads `katana_tee_config_hash` through `TeeAttestation` (saya/core), `TeeProof` (saya/core), `bin/persistent-tee/{attestor,prover}.rs`, and into the on-chain `TEEInput.katana_tee_config_hash` at `bin/persistent-tee/src/settlement.rs`. * Updates `tests/e2e/tests/settlement.rs` to match the `StarknetOs` enum variant instead of accessing struct fields directly. The four hash asserts are unchanged, just nested behind one match. Wire format for `update_state(piltover_input)` (both `LayoutBridgeOutput*` and `TeeInput`) is unchanged. The runtime variant invariant in `validate_input` fires before any registry call, so cross-mode submission fails fast on chain. Cross-repo: - `cartridge-gg/piltover#16` (merged): Cairo-side enum split. - `cartridge-gg/katana-tee#1` (merged): adds the field on the wire. - `dojoengine/katana#556` (open): produces the field on the wire + `katana init rollup` deployment-side parity. Co-Authored-By: Claude Opus 4.7 (1M context) --- Cargo.lock | 2 +- Cargo.toml | 2 +- bin/ops/src/core_contract/utils.rs | 5 +++++ bin/persistent-tee/Cargo.lock | 32 ++++++++++++++-------------- bin/persistent-tee/Cargo.toml | 12 +++++------ bin/persistent-tee/src/attestor.rs | 1 + bin/persistent-tee/src/prover.rs | 2 ++ bin/persistent-tee/src/settlement.rs | 1 + bin/persistent/Cargo.lock | 2 +- bin/persistent/Cargo.toml | 2 +- saya/core/src/prover/tee/mod.rs | 4 ++++ saya/core/src/tee/mod.rs | 5 +++++ tests/e2e/tests/settlement.rs | 22 ++++++++++--------- 13 files changed, 56 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fb9309b..5a7fa8d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4115,7 +4115,7 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "piltover" version = "0.1.0" -source = "git+https://github.com/cartridge-gg/piltover.git?rev=dc86b13de0713c172153c4833fd7b3d14a855351#dc86b13de0713c172153c4833fd7b3d14a855351" +source = "git+https://github.com/cartridge-gg/piltover.git?branch=feat%2Ftee-persistent#ebb714b3a0e63da8088ea4f371bcca2a1a3f74f0" dependencies = [ "cainome", "starknet", diff --git a/Cargo.toml b/Cargo.toml index feb11b3..87ea14a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -56,7 +56,7 @@ tokio-util = { version = "0.7.13", default-features = false } url = { version = "2.5.4", default-features = false } zip = { version = "2.2.2", default-features = false, features = ["deflate"] } sqlx = { version = "0.8.2", features = [ "chrono", "macros", "regexp", "runtime-async-std", "runtime-tokio", "sqlite", "uuid" ] } -piltover = {package = "piltover", git = "https://github.com/cartridge-gg/piltover.git", rev = "dc86b13de0713c172153c4833fd7b3d14a855351" } +piltover = {package = "piltover", git = "https://github.com/cartridge-gg/piltover.git", branch = "feat/tee-persistent" } cainome = { version = "0.10.1", features = ["abigen-rs"] } generate-pie = {git = "https://github.com/keep-starknet-strange/snos.git",rev = "6cf7040"} diff --git a/bin/ops/src/core_contract/utils.rs b/bin/ops/src/core_contract/utils.rs index 94bd3fa..0abbea5 100644 --- a/bin/ops/src/core_contract/utils.rs +++ b/bin/ops/src/core_contract/utils.rs @@ -201,10 +201,15 @@ pub async fn set_program_info( let txn_config = TxnConfig::default(); let invoker = Invoker::new(account, txn_config); + // `ProgramInfo` is a Cairo enum (StarknetOs / KatanaTee). Cairo serializes an enum + // as `[variant_index, ...inner_struct_fields]`. `ops` only deploys for the + // validity-proof path, so always emit the `StarknetOs` variant (index 0) followed + // by the four `StarknetOsProgramInfo` fields in declaration order. let call = Call { to: contract_address, selector: selector!("set_program_info"), calldata: vec![ + Felt::ZERO, // ProgramInfo::StarknetOs variant index BOOTLOADER_PROGRAM_HASH, snos_config_hash, SNOS_PROGRAM_HASH, diff --git a/bin/persistent-tee/Cargo.lock b/bin/persistent-tee/Cargo.lock index 9b580b0..014816a 100644 --- a/bin/persistent-tee/Cargo.lock +++ b/bin/persistent-tee/Cargo.lock @@ -731,7 +731,7 @@ dependencies = [ [[package]] name = "amd-sev-snp-attestation-prover" version = "0.1.0" -source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=56aa752d2e73e505c356c80b7a00eddd27d4d263#56aa752d2e73e505c356c80b7a00eddd27d4d263" +source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=649f0864434ea7895a977318e502b4e19666d10b#649f0864434ea7895a977318e502b4e19666d10b" dependencies = [ "alloy-network", "alloy-primitives", @@ -762,7 +762,7 @@ dependencies = [ [[package]] name = "amd-sev-snp-attestation-verifier" version = "0.1.0" -source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=56aa752d2e73e505c356c80b7a00eddd27d4d263#56aa752d2e73e505c356c80b7a00eddd27d4d263" +source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=649f0864434ea7895a977318e502b4e19666d10b#649f0864434ea7895a977318e502b4e19666d10b" dependencies = [ "alloy-primitives", "alloy-sol-types", @@ -785,7 +785,7 @@ dependencies = [ [[package]] name = "amd_tee_registry_client" version = "0.1.0" -source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=56aa752d2e73e505c356c80b7a00eddd27d4d263#56aa752d2e73e505c356c80b7a00eddd27d4d263" +source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=649f0864434ea7895a977318e502b4e19666d10b#649f0864434ea7895a977318e502b4e19666d10b" dependencies = [ "alloy-primitives", "amd-sev-snp-attestation-prover", @@ -5428,7 +5428,7 @@ checksum = "42012b0f064e01aa58b545fe3727f90f7dd4020f4a3ea735b50344965f5a57e9" [[package]] name = "garaga_rs" version = "1.0.1" -source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=56aa752d2e73e505c356c80b7a00eddd27d4d263#56aa752d2e73e505c356c80b7a00eddd27d4d263" +source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=649f0864434ea7895a977318e502b4e19666d10b#649f0864434ea7895a977318e502b4e19666d10b" dependencies = [ "arbitrary", "getrandom 0.3.4", @@ -6720,7 +6720,7 @@ dependencies = [ [[package]] name = "katana_tee_client" version = "0.1.0" -source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=56aa752d2e73e505c356c80b7a00eddd27d4d263#56aa752d2e73e505c356c80b7a00eddd27d4d263" +source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=649f0864434ea7895a977318e502b4e19666d10b#649f0864434ea7895a977318e502b4e19666d10b" dependencies = [ "amd-sev-snp-attestation-prover", "amd_tee_registry_client", @@ -8265,7 +8265,7 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "piltover" version = "0.1.0" -source = "git+https://github.com/cartridge-gg/piltover.git?rev=dc86b13de0713c172153c4833fd7b3d14a855351#dc86b13de0713c172153c4833fd7b3d14a855351" +source = "git+https://github.com/cartridge-gg/piltover.git?branch=feat%2Ftee-persistent#ebb714b3a0e63da8088ea4f371bcca2a1a3f74f0" dependencies = [ "cainome", "starknet", @@ -9308,7 +9308,7 @@ dependencies = [ [[package]] name = "risc0-methods" version = "0.1.0" -source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=56aa752d2e73e505c356c80b7a00eddd27d4d263#56aa752d2e73e505c356c80b7a00eddd27d4d263" +source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=649f0864434ea7895a977318e502b4e19666d10b#649f0864434ea7895a977318e502b4e19666d10b" dependencies = [ "lazy_static", "risc0-build", @@ -10715,7 +10715,7 @@ dependencies = [ [[package]] name = "sp1-methods" version = "0.1.0" -source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=56aa752d2e73e505c356c80b7a00eddd27d4d263#56aa752d2e73e505c356c80b7a00eddd27d4d263" +source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=649f0864434ea7895a977318e502b4e19666d10b#649f0864434ea7895a977318e502b4e19666d10b" dependencies = [ "lazy_static", "sp1-build", @@ -11482,7 +11482,7 @@ dependencies = [ [[package]] name = "starknet-rust-accounts" version = "0.17.0" -source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=56aa752d2e73e505c356c80b7a00eddd27d4d263#56aa752d2e73e505c356c80b7a00eddd27d4d263" +source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=649f0864434ea7895a977318e502b4e19666d10b#649f0864434ea7895a977318e502b4e19666d10b" dependencies = [ "async-trait", "auto_impl", @@ -11496,7 +11496,7 @@ dependencies = [ [[package]] name = "starknet-rust-core" version = "0.17.0" -source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=56aa752d2e73e505c356c80b7a00eddd27d4d263#56aa752d2e73e505c356c80b7a00eddd27d4d263" +source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=649f0864434ea7895a977318e502b4e19666d10b#649f0864434ea7895a977318e502b4e19666d10b" dependencies = [ "base64 0.21.7", "crypto-bigint 0.5.5", @@ -11519,7 +11519,7 @@ dependencies = [ [[package]] name = "starknet-rust-core-derive" version = "0.1.0" -source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=56aa752d2e73e505c356c80b7a00eddd27d4d263#56aa752d2e73e505c356c80b7a00eddd27d4d263" +source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=649f0864434ea7895a977318e502b4e19666d10b#649f0864434ea7895a977318e502b4e19666d10b" dependencies = [ "proc-macro2", "quote", @@ -11529,7 +11529,7 @@ dependencies = [ [[package]] name = "starknet-rust-crypto" version = "0.9.0" -source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=56aa752d2e73e505c356c80b7a00eddd27d4d263#56aa752d2e73e505c356c80b7a00eddd27d4d263" +source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=649f0864434ea7895a977318e502b4e19666d10b#649f0864434ea7895a977318e502b4e19666d10b" dependencies = [ "blake2", "crypto-bigint 0.5.5", @@ -11549,7 +11549,7 @@ dependencies = [ [[package]] name = "starknet-rust-curve" version = "0.6.0" -source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=56aa752d2e73e505c356c80b7a00eddd27d4d263#56aa752d2e73e505c356c80b7a00eddd27d4d263" +source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=649f0864434ea7895a977318e502b4e19666d10b#649f0864434ea7895a977318e502b4e19666d10b" dependencies = [ "starknet-types-core 0.2.4", ] @@ -11557,7 +11557,7 @@ dependencies = [ [[package]] name = "starknet-rust-providers" version = "0.17.0" -source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=56aa752d2e73e505c356c80b7a00eddd27d4d263#56aa752d2e73e505c356c80b7a00eddd27d4d263" +source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=649f0864434ea7895a977318e502b4e19666d10b#649f0864434ea7895a977318e502b4e19666d10b" dependencies = [ "async-trait", "auto_impl", @@ -11577,7 +11577,7 @@ dependencies = [ [[package]] name = "starknet-rust-signers" version = "0.15.0" -source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=56aa752d2e73e505c356c80b7a00eddd27d4d263#56aa752d2e73e505c356c80b7a00eddd27d4d263" +source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=649f0864434ea7895a977318e502b4e19666d10b#649f0864434ea7895a977318e502b4e19666d10b" dependencies = [ "async-trait", "auto_impl", @@ -13610,7 +13610,7 @@ dependencies = [ [[package]] name = "x509-verifier-rust-crypto" version = "0.1.0" -source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=56aa752d2e73e505c356c80b7a00eddd27d4d263#56aa752d2e73e505c356c80b7a00eddd27d4d263" +source = "git+ssh://git@github.com/cartridge-gg/katana-tee.git?rev=649f0864434ea7895a977318e502b4e19666d10b#649f0864434ea7895a977318e502b4e19666d10b" dependencies = [ "alloy-primitives", "anyhow", diff --git a/bin/persistent-tee/Cargo.toml b/bin/persistent-tee/Cargo.toml index c37c18b..b98bef9 100644 --- a/bin/persistent-tee/Cargo.toml +++ b/bin/persistent-tee/Cargo.toml @@ -20,14 +20,14 @@ repository.workspace = true [dependencies] saya-core = { path = "../../saya/core" } -katana_tee_client = { git = "ssh://git@github.com/cartridge-gg/katana-tee.git", rev = "56aa752d2e73e505c356c80b7a00eddd27d4d263" } -amd-sev-snp-attestation-prover = { git = "ssh://git@github.com/cartridge-gg/katana-tee.git", rev = "56aa752d2e73e505c356c80b7a00eddd27d4d263", features = ["sp1"] } -amd-sev-snp-attestation-verifier = { git = "ssh://git@github.com/cartridge-gg/katana-tee.git", rev = "56aa752d2e73e505c356c80b7a00eddd27d4d263" } -amd_tee_registry_client = { git = "ssh://git@github.com/cartridge-gg/katana-tee.git", rev = "56aa752d2e73e505c356c80b7a00eddd27d4d263" } -x509-verifier-rust-crypto = { git = "ssh://git@github.com/cartridge-gg/katana-tee.git", rev = "56aa752d2e73e505c356c80b7a00eddd27d4d263" } +katana_tee_client = { git = "ssh://git@github.com/cartridge-gg/katana-tee.git", rev = "649f0864434ea7895a977318e502b4e19666d10b" } +amd-sev-snp-attestation-prover = { git = "ssh://git@github.com/cartridge-gg/katana-tee.git", rev = "649f0864434ea7895a977318e502b4e19666d10b", features = ["sp1"] } +amd-sev-snp-attestation-verifier = { git = "ssh://git@github.com/cartridge-gg/katana-tee.git", rev = "649f0864434ea7895a977318e502b4e19666d10b" } +amd_tee_registry_client = { git = "ssh://git@github.com/cartridge-gg/katana-tee.git", rev = "649f0864434ea7895a977318e502b4e19666d10b" } +x509-verifier-rust-crypto = { git = "ssh://git@github.com/cartridge-gg/katana-tee.git", rev = "649f0864434ea7895a977318e502b4e19666d10b" } alloy-primitives = "1.3.1" -piltover = { package = "piltover", git = "https://github.com/cartridge-gg/piltover.git", rev = "dc86b13de0713c172153c4833fd7b3d14a855351" } +piltover = { package = "piltover", git = "https://github.com/cartridge-gg/piltover.git", branch = "feat/tee-persistent" } cainome = { version = "0.10.1", features = ["abigen-rs"] } sha3 = "0.10" diff --git a/bin/persistent-tee/src/attestor.rs b/bin/persistent-tee/src/attestor.rs index bafc96f..bf47902 100644 --- a/bin/persistent-tee/src/attestor.rs +++ b/bin/persistent-tee/src/attestor.rs @@ -174,6 +174,7 @@ impl TeeAttestor { messages_commitment: attestation.messages_commitment, l2_to_l1_messages, l1_to_l2_messages, + katana_tee_config_hash: attestation.katana_tee_config_hash, }) } } diff --git a/bin/persistent-tee/src/prover.rs b/bin/persistent-tee/src/prover.rs index 71d7516..5804b1d 100644 --- a/bin/persistent-tee/src/prover.rs +++ b/bin/persistent-tee/src/prover.rs @@ -136,6 +136,7 @@ impl TeeProver { messages_commitment: attestation.messages_commitment, l2_to_l1_messages: vec![], l1_to_l2_messages: vec![], + katana_tee_config_hash: attestation.katana_tee_config_hash, }; let tee = TeeAttestationProver::from_response(&response)?; @@ -167,6 +168,7 @@ impl TeeProver { messages_commitment: attestation.messages_commitment, l2_to_l1_messages: attestation.l2_to_l1_messages, l1_to_l2_messages: attestation.l1_to_l2_messages, + katana_tee_config_hash: attestation.katana_tee_config_hash, }) } } diff --git a/bin/persistent-tee/src/settlement.rs b/bin/persistent-tee/src/settlement.rs index 5d81f22..49774d3 100644 --- a/bin/persistent-tee/src/settlement.rs +++ b/bin/persistent-tee/src/settlement.rs @@ -94,6 +94,7 @@ fn build_tee_calldata(proof: &TeeProof) -> Result> { messages_to_starknet: messages_to_starknet(&proof.l2_to_l1_messages), messages_to_appchain: messages_to_appchain(&proof.l1_to_l2_messages), l1_to_l2_msg_hashes, + katana_tee_config_hash: proof.katana_tee_config_hash, }; Ok(PiltoverInput::cairo_serialize(&PiltoverInput::TeeInput( diff --git a/bin/persistent/Cargo.lock b/bin/persistent/Cargo.lock index 99779d0..98a442b 100644 --- a/bin/persistent/Cargo.lock +++ b/bin/persistent/Cargo.lock @@ -5173,7 +5173,7 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "piltover" version = "0.1.0" -source = "git+https://github.com/cartridge-gg/piltover.git?rev=67e65b8928b7ee3c2c188bf36c6b9eddc14addb2#67e65b8928b7ee3c2c188bf36c6b9eddc14addb2" +source = "git+https://github.com/cartridge-gg/piltover.git?branch=feat%2Ftee-persistent#ebb714b3a0e63da8088ea4f371bcca2a1a3f74f0" dependencies = [ "cainome", "starknet", diff --git a/bin/persistent/Cargo.toml b/bin/persistent/Cargo.toml index 3a751ea..2d4bb55 100644 --- a/bin/persistent/Cargo.toml +++ b/bin/persistent/Cargo.toml @@ -29,7 +29,7 @@ generate-pie = { git = "https://github.com/keep-starknet-strange/snos.git", rev hex = { version = "0.4.3", default-features = false } integrity = { git = "https://github.com/chudkowsky/integrity-rs.git", rev = "9729be1", default-features = false, features = ["recursive_with_poseidon", "keccak_160_lsb", "stone6"] } num-traits = { version = "0.2.19", default-features = false } -piltover = { package = "piltover", git = "https://github.com/cartridge-gg/piltover.git", rev = "67e65b8928b7ee3c2c188bf36c6b9eddc14addb2" } +piltover = { package = "piltover", git = "https://github.com/cartridge-gg/piltover.git", branch = "feat/tee-persistent" } cainome = { version = "0.10.1", features = ["abigen-rs"] } reqwest = { version = "0.12.12", default-features = false, features = ["json", "multipart", "rustls-tls"] } serde = { version = "1.0.217", default-features = false, features = ["derive"] } diff --git a/saya/core/src/prover/tee/mod.rs b/saya/core/src/prover/tee/mod.rs index 98107b4..f755635 100644 --- a/saya/core/src/prover/tee/mod.rs +++ b/saya/core/src/prover/tee/mod.rs @@ -39,6 +39,9 @@ pub struct TeeProof { pub l2_to_l1_messages: Vec, /// All L1→L2 messages processed in the attested block range. pub l1_to_l2_messages: Vec, + /// Versioned environment config hash carried through from the attestation. + /// Bound into Piltover's `TEEInput.katana_tee_config_hash` at settlement time. + pub katana_tee_config_hash: Felt, } impl HasBlockNumber for TeeProof { @@ -152,6 +155,7 @@ impl TeeProver { messages_commitment: attestation.messages_commitment, l2_to_l1_messages: attestation.l2_to_l1_messages, l1_to_l2_messages: attestation.l1_to_l2_messages, + katana_tee_config_hash: attestation.katana_tee_config_hash, } } } diff --git a/saya/core/src/tee/mod.rs b/saya/core/src/tee/mod.rs index 90d55e2..1b0d878 100644 --- a/saya/core/src/tee/mod.rs +++ b/saya/core/src/tee/mod.rs @@ -50,6 +50,11 @@ pub struct TeeAttestation { pub l2_to_l1_messages: Vec, /// All L1→L2 messages processed in the attested block range. pub l1_to_l2_messages: Vec, + /// Versioned environment config hash bound into v1 SEV-SNP `report_data`. + /// Sourced from the Katana RPC response and threaded to the on-chain + /// `TEEInput.katana_tee_config_hash` so Piltover's runtime invariant + /// (`tee_input == KatanaTeeProgramInfo.katana_tee_config_hash`) holds. + pub katana_tee_config_hash: Felt, } impl HasBlockNumber for TeeAttestation { diff --git a/tests/e2e/tests/settlement.rs b/tests/e2e/tests/settlement.rs index 9b802d4..bd03ba7 100644 --- a/tests/e2e/tests/settlement.rs +++ b/tests/e2e/tests/settlement.rs @@ -1,3 +1,4 @@ +use piltover::ProgramInfo; use saya_e2e::{ compose_up, env, get_facts_registry, get_program_info, provider, wait_for_settlement, ComposeGuard, @@ -38,16 +39,17 @@ async fn test_program_info_and_fact_registry() { env::fee_token_address(), ]); - assert_eq!( - program_info.bootloader_program_hash, - BOOTLOADER_PROGRAM_HASH - ); - assert_eq!(program_info.snos_program_hash, SNOS_PROGRAM_HASH); - assert_eq!( - program_info.layout_bridge_program_hash, - LAYOUT_BRIDGE_PROGRAM_HASH - ); - assert_eq!(program_info.snos_config_hash, snos_config_hash); + let info = match program_info { + ProgramInfo::StarknetOs(info) => info, + ProgramInfo::KatanaTee(_) => { + panic!("e2e settlement test expects StarknetOs config, got KatanaTee variant") + } + }; + + assert_eq!(info.bootloader_program_hash, BOOTLOADER_PROGRAM_HASH); + assert_eq!(info.snos_program_hash, SNOS_PROGRAM_HASH); + assert_eq!(info.layout_bridge_program_hash, LAYOUT_BRIDGE_PROGRAM_HASH); + assert_eq!(info.snos_config_hash, snos_config_hash); assert_eq!(facts_registry, env::fact_registry_address()); }