From 40102cb756397c470ac001754109b995be560fc4 Mon Sep 17 00:00:00 2001 From: Leopold Joy Date: Mon, 23 Mar 2026 23:00:55 +0000 Subject: [PATCH 1/2] feat: add initial proposer parameter to TEEProverRegistry.initialize --- scripts/multiproof/DeployDevNoNitro.s.sol | 5 +++-- scripts/multiproof/DeployDevWithNitro.s.sol | 5 +++-- src/multiproof/tee/TEEProverRegistry.sol | 11 ++++++++--- test/multiproof/TEEProverRegistry.t.sol | 22 ++++++++++++++++++++- test/multiproof/TEEVerifier.t.sol | 2 +- test/vendor/Initializable.t.sol | 2 +- 6 files changed, 37 insertions(+), 10 deletions(-) diff --git a/scripts/multiproof/DeployDevNoNitro.s.sol b/scripts/multiproof/DeployDevNoNitro.s.sol index 0fc2bdc5..729124bc 100644 --- a/scripts/multiproof/DeployDevNoNitro.s.sol +++ b/scripts/multiproof/DeployDevNoNitro.s.sol @@ -120,7 +120,6 @@ contract DeployDevNoNitro is Script { _deployInfrastructure(gameType); _deployTEEContracts(cfg.finalSystemOwner()); - _registerProposer(cfg.teeProposer()); _deployAggregateVerifier(gameType); vm.stopBroadcast(); @@ -133,7 +132,9 @@ contract DeployDevNoNitro is Script { address scgImpl = address(new DevTEEProverRegistry(INitroEnclaveVerifier(address(0)))); teeProverRegistryProxy = address( new TransparentUpgradeableProxy( - scgImpl, address(0xdead), abi.encodeCall(TEEProverRegistry.initialize, (owner, owner)) + scgImpl, + address(0xdead), + abi.encodeCall(TEEProverRegistry.initialize, (owner, owner, cfg.teeProposer())) ) ); console.log("DevTEEProverRegistry:", teeProverRegistryProxy); diff --git a/scripts/multiproof/DeployDevWithNitro.s.sol b/scripts/multiproof/DeployDevWithNitro.s.sol index 051334e6..9143512d 100644 --- a/scripts/multiproof/DeployDevWithNitro.s.sol +++ b/scripts/multiproof/DeployDevWithNitro.s.sol @@ -154,7 +154,6 @@ contract DeployDevWithNitro is Script { _deployInfrastructure(gameType); _deployTEEContracts(cfg.finalSystemOwner(), cfg.nitroEnclaveVerifier()); - _registerProposer(cfg.teeProposer()); _deployAggregateVerifier(gameType); vm.stopBroadcast(); @@ -168,7 +167,9 @@ contract DeployDevWithNitro is Script { console.log("NitroEnclaveVerifier (external):", _nitroEnclaveVerifier); teeProverRegistryProxy = address( new TransparentUpgradeableProxy( - scgImpl, address(0xdead), abi.encodeCall(TEEProverRegistry.initialize, (owner, owner)) + scgImpl, + address(0xdead), + abi.encodeCall(TEEProverRegistry.initialize, (owner, owner, cfg.teeProposer())) ) ); console.log("TEEProverRegistry:", teeProverRegistryProxy); diff --git a/src/multiproof/tee/TEEProverRegistry.sol b/src/multiproof/tee/TEEProverRegistry.sol index 616bb514..ff68b5e5 100644 --- a/src/multiproof/tee/TEEProverRegistry.sol +++ b/src/multiproof/tee/TEEProverRegistry.sol @@ -80,7 +80,7 @@ contract TEEProverRegistry is OwnableManagedUpgradeable, ISemver { constructor(INitroEnclaveVerifier nitroVerifier) { NITRO_VERIFIER = nitroVerifier; - initialize({ initialOwner: address(0xdEaD), initialManager: address(0xdEaD) }); + initialize({ initialOwner: address(0xdEaD), initialManager: address(0xdEaD), initialProposer: address(0) }); } /// @notice Sets the proposer address. @@ -162,13 +162,18 @@ contract TEEProverRegistry is OwnableManagedUpgradeable, ISemver { return _registeredSigners.values(); } - /// @notice Initializes the contract with owner and manager. + /// @notice Initializes the contract with owner, manager, and an optional initial proposer. /// @param initialOwner The initial owner address. /// @param initialManager The initial manager address. - function initialize(address initialOwner, address initialManager) public initializer { + /// @param initialProposer The initial proposer address (set to address(0) to skip). + function initialize(address initialOwner, address initialManager, address initialProposer) public initializer { __OwnableManaged_init(); transferOwnership(initialOwner); transferManagement(initialManager); + if (initialProposer != address(0)) { + isValidProposer[initialProposer] = true; + emit ProposerSet(initialProposer, true); + } } /// @notice Semantic version. diff --git a/test/multiproof/TEEProverRegistry.t.sol b/test/multiproof/TEEProverRegistry.t.sol index b2adc64f..f5482c2f 100644 --- a/test/multiproof/TEEProverRegistry.t.sol +++ b/test/multiproof/TEEProverRegistry.t.sol @@ -54,7 +54,9 @@ contract TEEProverRegistryTest is Test { // Deploy proxy TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy( - address(impl), address(proxyAdmin), abi.encodeCall(TEEProverRegistry.initialize, (owner, manager)) + address(impl), + address(proxyAdmin), + abi.encodeCall(TEEProverRegistry.initialize, (owner, manager, address(0))) ); teeProverRegistry = DevTEEProverRegistry(address(proxy)); @@ -68,6 +70,24 @@ contract TEEProverRegistryTest is Test { assertEq(teeProverRegistry.version(), "0.2.0"); } + function testInitializationWithProposer() public { + address proposer = makeAddr("proposer"); + DevTEEProverRegistry impl2 = new DevTEEProverRegistry(INitroEnclaveVerifier(address(0))); + ProxyAdmin proxyAdmin2 = new ProxyAdmin(address(this)); + TransparentUpgradeableProxy proxy2 = new TransparentUpgradeableProxy( + address(impl2), + address(proxyAdmin2), + abi.encodeCall(TEEProverRegistry.initialize, (owner, manager, proposer)) + ); + DevTEEProverRegistry registry2 = DevTEEProverRegistry(address(proxy2)); + assertTrue(registry2.isValidProposer(proposer)); + } + + function testInitializationWithZeroProposer() public view { + // Default setUp uses address(0) as proposer — no proposer should be set + assertFalse(teeProverRegistry.isValidProposer(address(0))); + } + // ============ PCR0 Registration Tests ============ function testRegisterPCR0() public { diff --git a/test/multiproof/TEEVerifier.t.sol b/test/multiproof/TEEVerifier.t.sol index d92e2304..f00cd195 100644 --- a/test/multiproof/TEEVerifier.t.sol +++ b/test/multiproof/TEEVerifier.t.sol @@ -44,7 +44,7 @@ contract TEEVerifierTest is Test { // Deploy proxy TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy( - address(impl), address(proxyAdmin), abi.encodeCall(TEEProverRegistry.initialize, (owner, owner)) + address(impl), address(proxyAdmin), abi.encodeCall(TEEProverRegistry.initialize, (owner, owner, address(0))) ); teeProverRegistry = DevTEEProverRegistry(address(proxy)); diff --git a/test/vendor/Initializable.t.sol b/test/vendor/Initializable.t.sol index 9a02d48d..2034a52c 100644 --- a/test/vendor/Initializable.t.sol +++ b/test/vendor/Initializable.t.sol @@ -372,7 +372,7 @@ contract Initializer_Test is CommonTest { InitializeableContract({ name: "TEEProverRegistryImpl", target: address(teeProverRegistry), - initCalldata: abi.encodeCall(TEEProverRegistry.initialize, (address(0), address(0))) + initCalldata: abi.encodeCall(TEEProverRegistry.initialize, (address(0), address(0), address(0))) }) ); } From a103cdf5598cf726202f4c32fdc720fe9a221564 Mon Sep 17 00:00:00 2001 From: Leopold Joy Date: Tue, 24 Mar 2026 00:31:45 +0000 Subject: [PATCH 2/2] chore: regenerate semver-lock after TEEProverRegistry initialize change --- snapshots/abi/AggregateVerifier.json | 2 +- snapshots/abi/DevTEEProverRegistry.json | 5 + snapshots/abi/NitroEnclaveVerifier.json | 1263 +++++++++++++++++ snapshots/abi/TEEProverRegistry.json | 5 + snapshots/semver-lock.json | 12 +- .../storageLayout/NitroEnclaveVerifier.json | 65 + 6 files changed, 1345 insertions(+), 7 deletions(-) create mode 100644 snapshots/abi/NitroEnclaveVerifier.json create mode 100644 snapshots/storageLayout/NitroEnclaveVerifier.json diff --git a/snapshots/abi/AggregateVerifier.json b/snapshots/abi/AggregateVerifier.json index 38f06763..a16f2842 100644 --- a/snapshots/abi/AggregateVerifier.json +++ b/snapshots/abi/AggregateVerifier.json @@ -852,7 +852,7 @@ { "indexed": true, "internalType": "address", - "name": "prover", + "name": "proposer", "type": "address" }, { diff --git a/snapshots/abi/DevTEEProverRegistry.json b/snapshots/abi/DevTEEProverRegistry.json index 6a61389f..a2877c05 100644 --- a/snapshots/abi/DevTEEProverRegistry.json +++ b/snapshots/abi/DevTEEProverRegistry.json @@ -104,6 +104,11 @@ "internalType": "address", "name": "initialManager", "type": "address" + }, + { + "internalType": "address", + "name": "initialProposer", + "type": "address" } ], "name": "initialize", diff --git a/snapshots/abi/NitroEnclaveVerifier.json b/snapshots/abi/NitroEnclaveVerifier.json new file mode 100644 index 00000000..9f2b9856 --- /dev/null +++ b/snapshots/abi/NitroEnclaveVerifier.json @@ -0,0 +1,1263 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "uint64", + "name": "_maxTimeDiff", + "type": "uint64" + }, + { + "internalType": "bytes32[]", + "name": "_initializeTrustedCerts", + "type": "bytes32[]" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "_zkCoProcessor", + "type": "uint8" + }, + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "_verifier", + "type": "address" + } + ], + "name": "addVerifyRoute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "output", + "type": "bytes" + }, + { + "internalType": "enum ZkCoProcessorType", + "name": "zkCoprocessor", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "proofBytes", + "type": "bytes" + } + ], + "name": "batchVerify", + "outputs": [ + { + "components": [ + { + "internalType": "enum VerificationResult", + "name": "result", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "trustedCertsPrefixLen", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "bytes32[]", + "name": "certs", + "type": "bytes32[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "nonce", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "first", + "type": "bytes32" + }, + { + "internalType": "bytes16", + "name": "second", + "type": "bytes16" + } + ], + "internalType": "struct Bytes48", + "name": "value", + "type": "tuple" + } + ], + "internalType": "struct Pcr[]", + "name": "pcrs", + "type": "tuple[]" + }, + { + "internalType": "string", + "name": "moduleId", + "type": "string" + } + ], + "internalType": "struct VerifierJournal[]", + "name": "results", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "cancelOwnershipHandover", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[][]", + "name": "_report_certs", + "type": "bytes32[][]" + } + ], + "name": "checkTrustedIntermediateCerts", + "outputs": [ + { + "internalType": "uint8[]", + "name": "", + "type": "uint8[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pendingOwner", + "type": "address" + } + ], + "name": "completeOwnershipHandover", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "_zkCoProcessor", + "type": "uint8" + }, + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "freezeVerifyRoute", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "_zkCoProcessor", + "type": "uint8" + } + ], + "name": "getAggregatorIds", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "_zkCoProcessor", + "type": "uint8" + } + ], + "name": "getVerifierIds", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "_zkCoProcessor", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_verifierId", + "type": "bytes32" + } + ], + "name": "getVerifierProofId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "_zkCoProcessor", + "type": "uint8" + } + ], + "name": "getZkConfig", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "verifierId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "aggregatorId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "zkVerifier", + "type": "address" + } + ], + "internalType": "struct ZkCoProcessorConfig", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "_zkCoProcessor", + "type": "uint8" + }, + { + "internalType": "bytes4", + "name": "_selector", + "type": "bytes4" + } + ], + "name": "getZkVerifier", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "_zkCoProcessor", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_aggregatorId", + "type": "bytes32" + } + ], + "name": "isAggregatorIdSupported", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "_zkCoProcessor", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_verifierId", + "type": "bytes32" + } + ], + "name": "isVerifierIdSupported", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxTimeDiff", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "result", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pendingOwner", + "type": "address" + } + ], + "name": "ownershipHandoverExpiresAt", + "outputs": [ + { + "internalType": "uint256", + "name": "result", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proofSubmitter", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "_zkCoProcessor", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_aggregatorId", + "type": "bytes32" + } + ], + "name": "removeAggregatorId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "_zkCoProcessor", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_verifierId", + "type": "bytes32" + } + ], + "name": "removeVerifierId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "requestOwnershipHandover", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_certHash", + "type": "bytes32" + } + ], + "name": "revokeCert", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rootCert", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "_maxTimeDiff", + "type": "uint64" + } + ], + "name": "setMaxTimeDiff", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_proofSubmitter", + "type": "address" + } + ], + "name": "setProofSubmitter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_rootCert", + "type": "bytes32" + } + ], + "name": "setRootCert", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "_zkCoProcessor", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "verifierId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "aggregatorId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "zkVerifier", + "type": "address" + } + ], + "internalType": "struct ZkCoProcessorConfig", + "name": "_config", + "type": "tuple" + }, + { + "internalType": "bytes32", + "name": "_verifierProofId", + "type": "bytes32" + } + ], + "name": "setZkConfiguration", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "trustedCertHash", + "type": "bytes32" + } + ], + "name": "trustedIntermediateCerts", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "_zkCoProcessor", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_newAggregatorId", + "type": "bytes32" + } + ], + "name": "updateAggregatorId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "_zkCoProcessor", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_newVerifierId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_newVerifierProofId", + "type": "bytes32" + } + ], + "name": "updateVerifierId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "output", + "type": "bytes" + }, + { + "internalType": "enum ZkCoProcessorType", + "name": "zkCoprocessor", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "proofBytes", + "type": "bytes" + } + ], + "name": "verify", + "outputs": [ + { + "components": [ + { + "internalType": "enum VerificationResult", + "name": "result", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "trustedCertsPrefixLen", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + }, + { + "internalType": "bytes32[]", + "name": "certs", + "type": "bytes32[]" + }, + { + "internalType": "bytes", + "name": "userData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "nonce", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "first", + "type": "bytes32" + }, + { + "internalType": "bytes16", + "name": "second", + "type": "bytes16" + } + ], + "internalType": "struct Bytes48", + "name": "value", + "type": "tuple" + } + ], + "internalType": "struct Pcr[]", + "name": "pcrs", + "type": "tuple[]" + }, + { + "internalType": "string", + "name": "moduleId", + "type": "string" + } + ], + "internalType": "struct VerifierJournal", + "name": "journal", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "", + "type": "uint8" + } + ], + "name": "zkConfig", + "outputs": [ + { + "internalType": "bytes32", + "name": "verifierId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "aggregatorId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "zkVerifier", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum ZkCoProcessorType", + "name": "zkCoProcessor", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newId", + "type": "bytes32" + } + ], + "name": "AggregatorIdUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum VerificationResult", + "name": "result", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "enum ZkCoProcessorType", + "name": "zkCoProcessor", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "output", + "type": "bytes" + } + ], + "name": "AttestationSubmitted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "verifierId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "enum ZkCoProcessorType", + "name": "zkCoProcessor", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "encodedBatch", + "type": "bytes" + } + ], + "name": "BatchAttestationSubmitted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "certHash", + "type": "bytes32" + } + ], + "name": "CertRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "newMaxTimeDiff", + "type": "uint64" + } + ], + "name": "MaxTimeDiffUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pendingOwner", + "type": "address" + } + ], + "name": "OwnershipHandoverCanceled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pendingOwner", + "type": "address" + } + ], + "name": "OwnershipHandoverRequested", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum ZkCoProcessorType", + "name": "zkCoProcessor", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "programId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "isAggregator", + "type": "bool" + } + ], + "name": "ProgramIdRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newProofSubmitter", + "type": "address" + } + ], + "name": "ProofSubmitterChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "newRootCert", + "type": "bytes32" + } + ], + "name": "RootCertChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum ZkCoProcessorType", + "name": "zkCoProcessor", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "newProofId", + "type": "bytes32" + } + ], + "name": "VerifierIdUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "enum ZkCoProcessorType", + "name": "zkCoProcessor", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "verifierId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "aggregatorId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "zkVerifier", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct ZkCoProcessorConfig", + "name": "config", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "verifierProofId", + "type": "bytes32" + } + ], + "name": "ZKConfigurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum ZkCoProcessorType", + "name": "zkCoProcessor", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "verifier", + "type": "address" + } + ], + "name": "ZkRouteAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum ZkCoProcessorType", + "name": "zkCoProcessor", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "ZkRouteWasFrozen", + "type": "event" + }, + { + "inputs": [], + "name": "AlreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotProofSubmitter", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "zkCoProcessor", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "identifier", + "type": "bytes32" + } + ], + "name": "CannotRemoveLatestProgramId", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "certHash", + "type": "bytes32" + } + ], + "name": "CertificateNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "NewOwnerIsZeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "NoHandoverRequest", + "type": "error" + }, + { + "inputs": [], + "name": "NotImplemented", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "zkCoProcessor", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "identifier", + "type": "bytes32" + } + ], + "name": "ProgramIdAlreadyLatest", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "zkCoProcessor", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "identifier", + "type": "bytes32" + } + ], + "name": "ProgramIdNotFound", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "expected", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "actual", + "type": "bytes32" + } + ], + "name": "RootCertMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "Unauthorized", + "type": "error" + }, + { + "inputs": [], + "name": "Unknown_Zk_Coprocessor", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "expected", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "actual", + "type": "bytes32" + } + ], + "name": "VerifierVkMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroMaxTimeDiff", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroProgramId", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroProofSubmitter", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroVerifierAddress", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "zkCoProcessor", + "type": "uint8" + }, + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "ZkRouteFrozen", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum ZkCoProcessorType", + "name": "zkCoProcessor", + "type": "uint8" + } + ], + "name": "ZkVerifierNotConfigured", + "type": "error" + } +] \ No newline at end of file diff --git a/snapshots/abi/TEEProverRegistry.json b/snapshots/abi/TEEProverRegistry.json index 7250c1f7..4b6f71ad 100644 --- a/snapshots/abi/TEEProverRegistry.json +++ b/snapshots/abi/TEEProverRegistry.json @@ -86,6 +86,11 @@ "internalType": "address", "name": "initialManager", "type": "address" + }, + { + "internalType": "address", + "name": "initialProposer", + "type": "address" } ], "name": "initialize", diff --git a/snapshots/semver-lock.json b/snapshots/semver-lock.json index 70c5bc81..df9c0d88 100644 --- a/snapshots/semver-lock.json +++ b/snapshots/semver-lock.json @@ -241,19 +241,19 @@ }, "src/multiproof/AggregateVerifier.sol:AggregateVerifier": { "initCodeHash": "0xc3866b1d4515c9d7b0ac6679b182d836f79371402d9e649e301b24cf8ae8fade", - "sourceCodeHash": "0x98267b52a71222506c4893d6632dc5a36dd197a8d60de9a1f6578a80f7ebdf2d" + "sourceCodeHash": "0x2bd04b43f2434dec3b66bfcbfbaf3df2d70f18abb915c35ffda86ea3f543078d" }, "src/multiproof/AggregateVerifier.sol:AggregateVerifier:dispute": { "initCodeHash": "0xe28eaeecda21594f6db23bb70127daa2b7b71debe38ce65b598f28d78d2561eb", - "sourceCodeHash": "0x98267b52a71222506c4893d6632dc5a36dd197a8d60de9a1f6578a80f7ebdf2d" + "sourceCodeHash": "0x2bd04b43f2434dec3b66bfcbfbaf3df2d70f18abb915c35ffda86ea3f543078d" }, "src/multiproof/tee/TEEProverRegistry.sol:TEEProverRegistry": { - "initCodeHash": "0x09760f3a16c82db6a0e292a394d8a97cc34cc4aa799aeee9c1e064c9e8181050", - "sourceCodeHash": "0xae23e7c3e21c373d491a0e496ece54c63b5ad09171db1a011011eae3e2831c72" + "initCodeHash": "0x2bf09852825e1b3f333d7d55a2ff7edfade0b58e2b95edd5b1d5f487bab41b87", + "sourceCodeHash": "0xe1e29c983a5d2577f016174e8957f58b2566989847d164b4569fa4fead0b65ca" }, "src/multiproof/tee/TEEProverRegistry.sol:TEEProverRegistry:dispute": { - "initCodeHash": "0x7345fbc8139f09132ad1ee8432a0e30361e6e92b2cca18855cec81093f5f4ea7", - "sourceCodeHash": "0xae23e7c3e21c373d491a0e496ece54c63b5ad09171db1a011011eae3e2831c72" + "initCodeHash": "0x82c6830fc1ccea9fd261ac71f13369eefdca6dd51c3b81a591c4772b3e43e3e5", + "sourceCodeHash": "0xe1e29c983a5d2577f016174e8957f58b2566989847d164b4569fa4fead0b65ca" }, "src/multiproof/tee/TEEVerifier.sol:TEEVerifier": { "initCodeHash": "0xd65f1d604f979045a86d662e168cb7a867478da8a0ca294181872a90d209a66f", diff --git a/snapshots/storageLayout/NitroEnclaveVerifier.json b/snapshots/storageLayout/NitroEnclaveVerifier.json new file mode 100644 index 00000000..0feab09c --- /dev/null +++ b/snapshots/storageLayout/NitroEnclaveVerifier.json @@ -0,0 +1,65 @@ +[ + { + "bytes": "20", + "label": "proofSubmitter", + "offset": 0, + "slot": "0", + "type": "address" + }, + { + "bytes": "32", + "label": "zkConfig", + "offset": 0, + "slot": "1", + "type": "mapping(enum ZkCoProcessorType => struct ZkCoProcessorConfig)" + }, + { + "bytes": "32", + "label": "trustedIntermediateCerts", + "offset": 0, + "slot": "2", + "type": "mapping(bytes32 => bool)" + }, + { + "bytes": "8", + "label": "maxTimeDiff", + "offset": 0, + "slot": "3", + "type": "uint64" + }, + { + "bytes": "32", + "label": "rootCert", + "offset": 0, + "slot": "4", + "type": "bytes32" + }, + { + "bytes": "32", + "label": "_verifierIdSet", + "offset": 0, + "slot": "5", + "type": "mapping(enum ZkCoProcessorType => struct EnumerableSet.Bytes32Set)" + }, + { + "bytes": "32", + "label": "_aggregatorIdSet", + "offset": 0, + "slot": "6", + "type": "mapping(enum ZkCoProcessorType => struct EnumerableSet.Bytes32Set)" + }, + { + "bytes": "32", + "label": "_zkVerifierRoutes", + "offset": 0, + "slot": "7", + "type": "mapping(enum ZkCoProcessorType => mapping(bytes4 => address))" + }, + { + "bytes": "32", + "label": "_verifierProofIds", + "offset": 0, + "slot": "8", + "type": "mapping(enum ZkCoProcessorType => mapping(bytes32 => bytes32))" + } +] \ No newline at end of file