import { Fr } from '@aztec/foundation/curves/bn254'; import type { ContractClassPublic, ContractInstanceWithAddress } from '@aztec/stdlib/contract'; import type { jest } from '@jest/globals'; import { mock } from 'jest-mock-extended'; import type { PublicContractsDB, PublicTreesDB } from '../public_db_sources.js'; import type { PublicSideEffectTraceInterface } from '../side_effect_trace_interface.js'; export function mockTraceFork(trace: PublicSideEffectTraceInterface, nestedTrace?: PublicSideEffectTraceInterface) { (trace as jest.Mocked).fork.mockReturnValue( nestedTrace ?? mock(), ); } export function mockStorageRead(worldStateDB: PublicTreesDB, value: Fr) { (worldStateDB as jest.Mocked).storageRead.mockResolvedValue(value); } export function mockNoteHashCount(mockedTrace: PublicSideEffectTraceInterface, count: number) { (mockedTrace as jest.Mocked).getNoteHashCount.mockReturnValue(count); } export function mockStorageReadWithMap(worldStateDB: PublicTreesDB, mockedStorage: Map) { (worldStateDB as jest.Mocked).storageRead.mockImplementation((_address, slot) => Promise.resolve(mockedStorage.get(slot.toBigInt()) ?? Fr.ZERO), ); } export function mockGetNoteHash(worldStateDB: PublicTreesDB, _leafIndex: bigint, value?: Fr) { (worldStateDB as jest.Mocked).getNoteHash.mockImplementation((index: bigint) => { if (index == _leafIndex && value) { return Promise.resolve(value); } else { return Promise.resolve(Fr.ZERO); } }); } export function mockCheckNullifierExists(worldStateDB: PublicTreesDB, exists: boolean, _ignoredValue?: Fr) { (worldStateDB as jest.Mocked).checkNullifierExists.mockResolvedValue(exists); } export function mockGetL1ToL2LeafValue(worldStateDB: PublicTreesDB, leafIndex: bigint, value?: Fr) { (worldStateDB as jest.Mocked).getL1ToL2LeafValue.mockImplementation((index: bigint) => { if (index == leafIndex && value) { return Promise.resolve(value); } else { return Promise.resolve(Fr.ZERO!); } }); } export function mockGetContractInstance(contractsDB: PublicContractsDB, contractInstance: ContractInstanceWithAddress) { (contractsDB as jest.Mocked).getContractInstance.mockResolvedValue(contractInstance); } export function mockGetContractClass(contractsDB: PublicContractsDB, contractClass: ContractClassPublic) { (contractsDB as jest.Mocked).getContractClass.mockResolvedValue(contractClass); } export function mockGetBytecodeCommitment(contractsDB: PublicContractsDB, commitment: Fr) { (contractsDB as jest.Mocked).getBytecodeCommitment.mockResolvedValue(commitment); }