diff --git a/yarn-project/archiver/src/archiver/archiver.ts b/yarn-project/archiver/src/archiver/archiver.ts index 72eb746663b..fde55fc3e82 100644 --- a/yarn-project/archiver/src/archiver/archiver.ts +++ b/yarn-project/archiver/src/archiver/archiver.ts @@ -20,7 +20,7 @@ import { EthAddress } from '@aztec/foundation/eth-address'; import { Fr } from '@aztec/foundation/fields'; import { DebugLogger, createDebugLogger } from '@aztec/foundation/log'; import { RunningPromise } from '@aztec/foundation/running-promise'; -import { ClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer'; +import { getCanonicalClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer'; import { ContractClassPublic, ContractDataSource, @@ -287,8 +287,8 @@ export class Archiver implements ArchiveSource { * @param allLogs - All logs emitted in a bunch of blocks. */ private async storeRegisteredContractClasses(allLogs: UnencryptedL2Log[], blockNum: number) { - const contractClasses = ContractClassRegisteredEvent.fromLogs(allLogs, ClassRegistererAddress).map(e => - e.toContractClassPublic(), + const contractClasses = ContractClassRegisteredEvent.fromLogs(allLogs, getCanonicalClassRegistererAddress()).map( + e => e.toContractClassPublic(), ); if (contractClasses.length > 0) { contractClasses.forEach(c => this.log(`Registering contract class ${c.id.toString()}`)); diff --git a/yarn-project/protocol-contracts/src/class-registerer/index.test.ts b/yarn-project/protocol-contracts/src/class-registerer/index.test.ts index aa6764915a5..b1b056c11fa 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/index.test.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/index.test.ts @@ -1,12 +1,12 @@ import { computeContractAddressFromInstance, getContractClassFromArtifact } from '@aztec/circuits.js'; -import { ClassRegistererAddress, getCanonicalClassRegisterer } from './index.js'; +import { getCanonicalClassRegisterer, getCanonicalClassRegistererAddress } from './index.js'; describe('ClassRegisterer', () => { it('returns canonical protocol contract', () => { const contract = getCanonicalClassRegisterer(); expect(computeContractAddressFromInstance(contract.instance)).toEqual(contract.address); expect(getContractClassFromArtifact(contract.artifact).id).toEqual(contract.contractClass.id); - expect(contract.address.toString()).toEqual(ClassRegistererAddress.toString()); + expect(contract.address.toString()).toEqual(getCanonicalClassRegistererAddress().toString()); }); }); diff --git a/yarn-project/protocol-contracts/src/class-registerer/index.ts b/yarn-project/protocol-contracts/src/class-registerer/index.ts index bf0884f77d4..ea85f6f6acf 100644 --- a/yarn-project/protocol-contracts/src/class-registerer/index.ts +++ b/yarn-project/protocol-contracts/src/class-registerer/index.ts @@ -8,10 +8,12 @@ export function getCanonicalClassRegisterer(): ProtocolContract { return getCanonicalProtocolContract(ContractClassRegistererArtifact, 1); } -/** - * Address of the canonical class registerer. - * @remarks This should not change often, hence we hardcode it to save from having to recompute it every time. - */ -export const ClassRegistererAddress = AztecAddress.fromString( - '0x2140db629d95644ef26140fa5ae87749ae28d373176af9a2e458052ced96c7b3', -); +let address: AztecAddress | undefined = undefined; + +/** Returns the address for the canonical deployment of the class registerer */ +export function getCanonicalClassRegistererAddress() { + if (!address) { + address = getCanonicalClassRegisterer().address; + } + return address; +} diff --git a/yarn-project/sequencer-client/src/simulator/public_executor.ts b/yarn-project/sequencer-client/src/simulator/public_executor.ts index 6008f8b2aa5..fc3d4123588 100644 --- a/yarn-project/sequencer-client/src/simulator/public_executor.ts +++ b/yarn-project/sequencer-client/src/simulator/public_executor.ts @@ -19,7 +19,7 @@ import { } from '@aztec/circuits.js'; import { computePublicDataTreeLeafSlot } from '@aztec/circuits.js/hash'; import { createDebugLogger } from '@aztec/foundation/log'; -import { ClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer'; +import { getCanonicalClassRegistererAddress } from '@aztec/protocol-contracts/class-registerer'; import { CommitmentsDB, MessageLoadOracleInputs, PublicContractsDB, PublicStateDB } from '@aztec/simulator'; import { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress } from '@aztec/types/contracts'; import { MerkleTreeOperations } from '@aztec/world-state'; @@ -43,7 +43,7 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB { public addNewContracts(tx: Tx): Promise { // Extract contract class and instance data from logs and add to cache for this block const logs = tx.unencryptedLogs.unrollLogs().map(UnencryptedL2Log.fromBuffer); - ContractClassRegisteredEvent.fromLogs(logs, ClassRegistererAddress).forEach(e => { + ContractClassRegisteredEvent.fromLogs(logs, getCanonicalClassRegistererAddress()).forEach(e => { this.log(`Adding class ${e.contractClassId.toString()} to public execution contract cache`); this.classCache.set(e.contractClassId.toString(), e.toContractClassPublic()); }); @@ -66,7 +66,7 @@ export class ContractsDataSourcePublicDB implements PublicContractsDB { // Let's say we have two txs adding the same contract on the same block. If the 2nd one reverts, // wouldn't that accidentally remove the contract added on the first one? const logs = tx.unencryptedLogs.unrollLogs().map(UnencryptedL2Log.fromBuffer); - ContractClassRegisteredEvent.fromLogs(logs, ClassRegistererAddress).forEach(e => + ContractClassRegisteredEvent.fromLogs(logs, getCanonicalClassRegistererAddress()).forEach(e => this.classCache.delete(e.contractClassId.toString()), ); ContractInstanceDeployedEvent.fromLogs(logs).forEach(e => this.instanceCache.delete(e.address.toString()));