From c6d26d29b2cad5c7b482feb7b41c7893bff7a357 Mon Sep 17 00:00:00 2001 From: sirasistant Date: Tue, 10 Oct 2023 14:38:14 +0000 Subject: [PATCH 1/2] feat: add parsing for the return value --- .../src/type_conversion.ts | 275 ++++++++++++++++++ 1 file changed, 275 insertions(+) diff --git a/yarn-project/noir-private-kernel/src/type_conversion.ts b/yarn-project/noir-private-kernel/src/type_conversion.ts index a8b4d3e9eec1..4a26c903aa29 100644 --- a/yarn-project/noir-private-kernel/src/type_conversion.ts +++ b/yarn-project/noir-private-kernel/src/type_conversion.ts @@ -1,38 +1,64 @@ import { + AggregationObject, AztecAddress, CallContext, + CombinedAccumulatedData, + CombinedConstantData, ContractDeploymentData, EthAddress, Fr, FunctionData, FunctionSelector, HistoricBlockData, + KernelCircuitPublicInputs, + MAX_NEW_COMMITMENTS_PER_TX, + MAX_NEW_CONTRACTS_PER_TX, + MAX_NEW_L2_TO_L1_MSGS_PER_TX, + MAX_NEW_NULLIFIERS_PER_TX, + MAX_OPTIONALLY_REVEALED_DATA_LENGTH_PER_TX, + MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX, + MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, + MAX_PUBLIC_DATA_READS_PER_TX, + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, + MAX_READ_REQUESTS_PER_TX, MembershipWitness, + NewContractData, + OptionallyRevealedData, Point, PrivateCallData, PrivateCallStackItem, PrivateCircuitPublicInputs, PrivateKernelInputsInit, + PublicDataRead, + PublicDataUpdateRequest, ReadRequestMembershipWitness, TxContext, TxRequest, } from '@aztec/circuits.js'; +import { Tuple } from '@aztec/foundation/serialize'; import { CallContext as CallContextNoir, + CombinedAccumulatedData as CombinedAccumulatedDataNoir, + CombinedConstantData as CombinedConstantDataNoir, ContractDeploymentData as ContractDeploymentDataNoir, FunctionData as FunctionDataNoir, FunctionSelector as FunctionSelectorNoir, HistoricalBlockData as HistoricalBlockDataNoir, + KernelCircuitPublicInputs as KernelCircuitPublicInputsNoir, MembershipWitness as MembershipWitnessNoir, + NewContractData as NewContractDataNoir, Address as NoirAztecAddress, EthAddress as NoirEthAddress, Field as NoirField, Point as NoirPoint, + OptionallyRevealedData as OptionallyRevealedDataNoir, PrivateCallData as PrivateCallDataNoir, PrivateCallStackItem as PrivateCallStackItemNoir, PrivateCircuitPublicInputs as PrivateCircuitPublicInputsNoir, PrivateKernelInputsInit as PrivateKernelInputsInitNoir, + PublicDataRead as PublicDataReadNoir, + PublicDataUpdateRequest as PublicDataUpdateRequestNoir, ReadRequestMembershipWitness as ReadRequestMembershipWitnessNoir, TxContext as TxContextNoir, TxRequest as TxRequestNoir, @@ -49,6 +75,15 @@ function mapFieldToNoir(field: Fr): NoirField { return field.toString(); } +/** + * Maps a noir field to a fr. + * @param field - The noir field. + * @returns The fr. + */ +function mapFieldFromNoir(field: NoirField): Fr { + return Fr.fromString(field); +} + /** * Maps a point to a noir point. * @param point - The point. @@ -61,6 +96,15 @@ function mapPointToNoir(point: Point): NoirPoint { }; } +/** + * Maps a noir point to a point. + * @param point - The noir point. + * @returns The point. + */ +function mapPointFromNoir(point: NoirPoint): Point { + return new Point(mapFieldFromNoir(point.x), mapFieldFromNoir(point.y)); +} + /** * Maps an aztec address to a noir aztec address. * @param address - The address. @@ -72,6 +116,15 @@ function mapAztecAddressToNoir(address: AztecAddress): NoirAztecAddress { }; } +/** + * Maps a noir aztec address to an aztec address. + * @param address - The noir aztec address. + * @returns The aztec address. + */ +function mapAztecAddressFromNoir(address: NoirAztecAddress): AztecAddress { + return AztecAddress.fromField(mapFieldFromNoir(address.inner)); +} + /** * Maps an eth address to a noir eth address. * @param address - The address. @@ -83,6 +136,15 @@ function mapEthAddressToNoir(address: EthAddress): NoirEthAddress { }; } +/** + * Maps a noir eth address to an eth address. + * @param address - The noir eth address. + * @returns The eth address. + */ +function mapEthAddressFromNoir(address: NoirEthAddress): EthAddress { + return EthAddress.fromField(mapFieldFromNoir(address.inner)); +} + /** * Maps a contract deployment data to a noir contract deployment data. * @param data - The data. @@ -98,6 +160,21 @@ function mapContractDeploymentDataToNoir(data: ContractDeploymentData): Contract }; } +/** + * Maps a noir contract deployment data to a contract deployment data. + * @param data - The noir data. + * @returns The contract deployment data. + */ +function mapContractDeploymentDataFromNoir(data: ContractDeploymentDataNoir): ContractDeploymentData { + return new ContractDeploymentData( + mapPointFromNoir(data.deployer_public_key), + mapFieldFromNoir(data.constructor_vk_hash), + mapFieldFromNoir(data.function_tree_root), + mapFieldFromNoir(data.contract_address_salt), + mapEthAddressFromNoir(data.portal_contract_address), + ); +} + /** * Maps a tx context to a noir tx context. * @param txContext - The tx context. @@ -114,6 +191,22 @@ function mapTxContextToNoir(txContext: TxContext): TxContextNoir { }; } +/** + * Maps a noir tx context to a tx context. + * @param txContext - The noir tx context. + * @returns The tx context. + */ +function mapTxContextFromNoir(txContext: TxContextNoir): TxContext { + return new TxContext( + txContext.is_fee_payment_tx, + txContext.is_rebate_payment_tx, + txContext.is_contract_deployment_tx, + mapContractDeploymentDataFromNoir(txContext.contract_deployment_data), + mapFieldFromNoir(txContext.chain_id), + mapFieldFromNoir(txContext.version), + ); +} + /** * Maps a function selector to a noir function selector. * @param functionSelector - The function selector. @@ -125,6 +218,15 @@ function mapFunctionSelectorToNoir(functionSelector: FunctionSelector): Function }; } +/** + * Maps a noir function selector to a function selector. + * @param functionSelector - The noir function selector. + * @returns The function selector. + */ +function mapFunctionSelectorFromNoir(functionSelector: FunctionSelectorNoir): FunctionSelector { + return FunctionSelector.fromField(mapFieldFromNoir(functionSelector.inner)); +} + /** * Maps a function data to a noir function data. * @param functionData - The function data. @@ -139,6 +241,20 @@ function mapFunctionDataToNoir(functionData: FunctionData): FunctionDataNoir { }; } +/** + * Maps a noir function data to a function data. + * @param functionData - The noir function data. + * @returns The function data. + */ +function mapFunctionDataFromNoir(functionData: FunctionDataNoir): FunctionData { + return new FunctionData( + mapFunctionSelectorFromNoir(functionData.selector), + functionData.is_internal, + functionData.is_private, + functionData.is_constructor, + ); +} + /** * Maps a tx request to a noir tx request. * @param txRequest - The tx request. @@ -190,6 +306,24 @@ function mapHistoricalBlockDataToNoir(historicalBlockData: HistoricBlockData): H }; } +/** + * Maps a noir historical block data to a historical block data. + * @param historicalBlockData - The noir historical block data. + * @returns The historical block data. + */ +function mapHistoricalBlockDataFromNoir(historicalBlockData: HistoricalBlockDataNoir): HistoricBlockData { + return new HistoricBlockData( + mapFieldFromNoir(historicalBlockData.block.private_data_tree_root), + mapFieldFromNoir(historicalBlockData.block.nullifier_tree_root), + mapFieldFromNoir(historicalBlockData.block.contract_tree_root), + mapFieldFromNoir(historicalBlockData.block.l1_to_l2_data_tree_root), + mapFieldFromNoir(historicalBlockData.blocks_tree_root), + mapFieldFromNoir(historicalBlockData.private_kernel_vk_tree_root), + mapFieldFromNoir(historicalBlockData.block.public_data_tree_root), + mapFieldFromNoir(historicalBlockData.block.global_variables_hash), + ); +} + /** * Maps private circuit public inputs to noir private circuit public inputs. * @param privateCircuitPublicInputs - The private circuit public inputs. @@ -286,6 +420,132 @@ function mapPrivateCallDataToNoir(privateCallData: PrivateCallData): PrivateCall }; } +/** + * Maps an array from noir types to a tuple of parsed types. + * @param noirArray - The noir array. + * @param length - The length of the tuple. + * @param mapper - The mapper function applied to each element. + * @returns The tuple. + */ +function mapTupleFromNoir(noirArray: T[], length: N, mapper: (item: T) => M): Tuple { + if (noirArray.length != length) { + throw new Error(`Expected ${length} items, got ${noirArray.length}`); + } + return Array.from({ length }, (_, idx) => mapper(noirArray[idx])) as Tuple; +} + +/** + * Maps optionally revealed data from noir to the parsed type. + * @param optionallyRevealedData - The noir optionally revealed data. + * @returns The parsed optionally revealed data. + */ +function mapOptionallyRevealedDataFromNoir(optionallyRevealedData: OptionallyRevealedDataNoir): OptionallyRevealedData { + return new OptionallyRevealedData( + mapFieldFromNoir(optionallyRevealedData.call_stack_item_hash), + mapFunctionDataFromNoir(optionallyRevealedData.function_data), + mapFieldFromNoir(optionallyRevealedData.vk_hash), + mapEthAddressFromNoir(optionallyRevealedData.portal_contract_address), + optionallyRevealedData.pay_fee_from_l1, + optionallyRevealedData.pay_fee_from_public_l2, + optionallyRevealedData.called_from_l1, + optionallyRevealedData.called_from_public_l2, + ); +} + +/** + * Maps new contract data from noir to the parsed type. + * @param newContractData - The noir new contract data. + * @returns The parsed new contract data. + */ +function mapNewContractDataFromNoir(newContractData: NewContractDataNoir): NewContractData { + return new NewContractData( + mapAztecAddressFromNoir(newContractData.contract_address), + mapEthAddressFromNoir(newContractData.portal_contract_address), + mapFieldFromNoir(newContractData.function_tree_root), + ); +} + +/** + * Maps public data update request from noir to the parsed type. + * @param publicDataUpdateRequest - The noir public data update request. + * @returns The parsed public data update request. + */ +function mapPublicDataUpdateRequestFromNoir( + publicDataUpdateRequest: PublicDataUpdateRequestNoir, +): PublicDataUpdateRequest { + return new PublicDataUpdateRequest( + mapFieldFromNoir(publicDataUpdateRequest.leaf_index), + mapFieldFromNoir(publicDataUpdateRequest.old_value), + mapFieldFromNoir(publicDataUpdateRequest.new_value), + ); +} + +/** + * Maps public data read from noir to the parsed type. + * @param publicDataRead - The noir public data read. + * @returns The parsed public data read. + */ +function mapPublicDataReadFromNoir(publicDataRead: PublicDataReadNoir): PublicDataRead { + return new PublicDataRead(mapFieldFromNoir(publicDataRead.leaf_index), mapFieldFromNoir(publicDataRead.value)); +} + +/** + * Maps combined accumulated data from noir to the parsed type. + * @param combinedAccumulatedData - The noir combined accumulated data. + * @returns The parsed combined accumulated data. + */ +function mapCombinedAccumulatedDataFromNoir( + combinedAccumulatedData: CombinedAccumulatedDataNoir, +): CombinedAccumulatedData { + return new CombinedAccumulatedData( + // TODO aggregation object + AggregationObject.makeFake(), + mapTupleFromNoir(combinedAccumulatedData.read_requests, MAX_READ_REQUESTS_PER_TX, mapFieldFromNoir), + mapTupleFromNoir(combinedAccumulatedData.new_commitments, MAX_NEW_COMMITMENTS_PER_TX, mapFieldFromNoir), + mapTupleFromNoir(combinedAccumulatedData.new_nullifiers, MAX_NEW_NULLIFIERS_PER_TX, mapFieldFromNoir), + mapTupleFromNoir(combinedAccumulatedData.nullified_commitments, MAX_NEW_NULLIFIERS_PER_TX, mapFieldFromNoir), + mapTupleFromNoir( + combinedAccumulatedData.private_call_stack, + MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX, + mapFieldFromNoir, + ), + mapTupleFromNoir(combinedAccumulatedData.public_call_stack, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, mapFieldFromNoir), + mapTupleFromNoir(combinedAccumulatedData.new_l2_to_l1_msgs, MAX_NEW_L2_TO_L1_MSGS_PER_TX, mapFieldFromNoir), + mapTupleFromNoir(combinedAccumulatedData.encrypted_logs_hash, 2, mapFieldFromNoir), + mapTupleFromNoir(combinedAccumulatedData.unencrypted_logs_hash, 2, mapFieldFromNoir), + mapFieldFromNoir(combinedAccumulatedData.encrypted_log_preimages_length), + mapFieldFromNoir(combinedAccumulatedData.unencrypted_log_preimages_length), + mapTupleFromNoir(combinedAccumulatedData.new_contracts, MAX_NEW_CONTRACTS_PER_TX, mapNewContractDataFromNoir), + mapTupleFromNoir( + combinedAccumulatedData.optionally_revealed_data, + MAX_OPTIONALLY_REVEALED_DATA_LENGTH_PER_TX, + mapOptionallyRevealedDataFromNoir, + ), + mapTupleFromNoir( + combinedAccumulatedData.public_data_update_requests, + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, + mapPublicDataUpdateRequestFromNoir, + ), + mapTupleFromNoir( + combinedAccumulatedData.public_data_reads, + MAX_PUBLIC_DATA_READS_PER_TX, + mapPublicDataReadFromNoir, + ), + ); +} + +/** + * Maps combined constant data from noir to the parsed type. + * @param combinedConstantData - The noir combined constant data. + * @returns The parsed combined constant data. + */ +function mapCombinedConstantDataFromNoir(combinedConstantData: CombinedConstantDataNoir): CombinedConstantData { + return new CombinedConstantData( + mapHistoricalBlockDataFromNoir(combinedConstantData.block_data), + mapTxContextFromNoir(combinedConstantData.tx_context), + ); +} + /** * Maps the inputs to the private kernel init to the noir representation. * @param privateKernelInputsInit - The inputs to the private kernel init. @@ -299,3 +559,18 @@ export function mapPrivateKernelInputsInitToNoir( private_call: mapPrivateCallDataToNoir(privateKernelInputsInit.privateCall), }; } + +/** + * Maps a private circuit public inputs from noir to the circuits.js type. + * @param kernelCircuitPublicInputs - The noir private circuit public inputs. + * @returns The circuits.js private circuit public inputs. + */ +export function mapKernelCircuitPublicInputsFromNoir( + kernelCircuitPublicInputs: KernelCircuitPublicInputsNoir, +): KernelCircuitPublicInputs { + return new KernelCircuitPublicInputs( + mapCombinedAccumulatedDataFromNoir(kernelCircuitPublicInputs.end), + mapCombinedConstantDataFromNoir(kernelCircuitPublicInputs.constants), + kernelCircuitPublicInputs.is_private, + ); +} From 467479255d4f12a457de244110fc9cf97bc4231a Mon Sep 17 00:00:00 2001 From: sirasistant Date: Tue, 10 Oct 2023 15:12:35 +0000 Subject: [PATCH 2/2] test: added round trip tests --- .../src/type_conversion.test.ts | 104 ++++++++++++++++++ .../src/type_conversion.ts | 72 ++++++------ 2 files changed, 144 insertions(+), 32 deletions(-) create mode 100644 yarn-project/noir-private-kernel/src/type_conversion.test.ts diff --git a/yarn-project/noir-private-kernel/src/type_conversion.test.ts b/yarn-project/noir-private-kernel/src/type_conversion.test.ts new file mode 100644 index 000000000000..93bf57ae9405 --- /dev/null +++ b/yarn-project/noir-private-kernel/src/type_conversion.test.ts @@ -0,0 +1,104 @@ +import { + AztecAddress, + ContractDeploymentData, + EthAddress, + Fr, + FunctionData, + FunctionSelector, + HistoricBlockData, + Point, + TxContext, +} from '@aztec/circuits.js'; + +import { + mapAztecAddressFromNoir, + mapAztecAddressToNoir, + mapContractDeploymentDataFromNoir, + mapContractDeploymentDataToNoir, + mapEthAddressFromNoir, + mapEthAddressToNoir, + mapFieldFromNoir, + mapFieldToNoir, + mapFunctionDataFromNoir, + mapFunctionDataToNoir, + mapFunctionSelectorFromNoir, + mapFunctionSelectorToNoir, + mapHistoricalBlockDataFromNoir, + mapHistoricalBlockDataToNoir, + mapPointFromNoir, + mapPointToNoir, + mapTxContextFromNoir, + mapTxContextToNoir, +} from './type_conversion.js'; + +describe('Noir<>Circuits.js type conversion test suite', () => { + describe('Round trip', () => { + it('should map fields', () => { + const field = new Fr(27n); + expect(mapFieldFromNoir(mapFieldToNoir(field))).toEqual(field); + }); + + const point = new Point(new Fr(27n), new Fr(28n)); + + it('should map points', () => { + expect(mapPointFromNoir(mapPointToNoir(point))).toEqual(point); + }); + + it('should map aztec addresses', () => { + const aztecAddress = AztecAddress.random(); + expect(mapAztecAddressFromNoir(mapAztecAddressToNoir(aztecAddress))).toEqual(aztecAddress); + }); + + it('should map eth addresses', () => { + const ethAddress = EthAddress.random(); + expect(mapEthAddressFromNoir(mapEthAddressToNoir(ethAddress))).toEqual(ethAddress); + }); + + const contractDeploymentData = new ContractDeploymentData( + point, + new Fr(29n), + new Fr(30n), + new Fr(31n), + AztecAddress.random(), + ); + + it('should map contract deployment data', () => { + expect(mapContractDeploymentDataFromNoir(mapContractDeploymentDataToNoir(contractDeploymentData))).toEqual( + contractDeploymentData, + ); + }); + + it('should map tx context', () => { + const txContext = new TxContext(false, true, false, contractDeploymentData, new Fr(32n), new Fr(33n)); + expect(mapTxContextFromNoir(mapTxContextToNoir(txContext))).toEqual(txContext); + }); + + const functionSelector = new FunctionSelector(34); + + it('should map function selectors', () => { + expect(mapFunctionSelectorFromNoir(mapFunctionSelectorToNoir(functionSelector))).toEqual(functionSelector); + }); + + const functionData = new FunctionData(functionSelector, false, true, false); + + it('should map function data', () => { + expect(mapFunctionDataFromNoir(mapFunctionDataToNoir(functionData))).toEqual(functionData); + }); + + it('should map historical block data', () => { + const historicalBlockData = new HistoricBlockData( + new Fr(35n), + new Fr(36n), + new Fr(37n), + new Fr(38n), + new Fr(39n), + new Fr(40n), + new Fr(41n), + new Fr(42n), + ); + expect(mapHistoricalBlockDataFromNoir(mapHistoricalBlockDataToNoir(historicalBlockData))).toEqual( + historicalBlockData, + ); + }); + }); +}); diff --git a/yarn-project/noir-private-kernel/src/type_conversion.ts b/yarn-project/noir-private-kernel/src/type_conversion.ts index 4a26c903aa29..a39edc315d94 100644 --- a/yarn-project/noir-private-kernel/src/type_conversion.ts +++ b/yarn-project/noir-private-kernel/src/type_conversion.ts @@ -71,7 +71,7 @@ import { * @param field - The field. * @returns The noir field. */ -function mapFieldToNoir(field: Fr): NoirField { +export function mapFieldToNoir(field: Fr): NoirField { return field.toString(); } @@ -80,7 +80,7 @@ function mapFieldToNoir(field: Fr): NoirField { * @param field - The noir field. * @returns The fr. */ -function mapFieldFromNoir(field: NoirField): Fr { +export function mapFieldFromNoir(field: NoirField): Fr { return Fr.fromString(field); } @@ -89,7 +89,7 @@ function mapFieldFromNoir(field: NoirField): Fr { * @param point - The point. * @returns The noir point. */ -function mapPointToNoir(point: Point): NoirPoint { +export function mapPointToNoir(point: Point): NoirPoint { return { x: mapFieldToNoir(point.x), y: mapFieldToNoir(point.y), @@ -101,7 +101,7 @@ function mapPointToNoir(point: Point): NoirPoint { * @param point - The noir point. * @returns The point. */ -function mapPointFromNoir(point: NoirPoint): Point { +export function mapPointFromNoir(point: NoirPoint): Point { return new Point(mapFieldFromNoir(point.x), mapFieldFromNoir(point.y)); } @@ -110,7 +110,7 @@ function mapPointFromNoir(point: NoirPoint): Point { * @param address - The address. * @returns The noir aztec address. */ -function mapAztecAddressToNoir(address: AztecAddress): NoirAztecAddress { +export function mapAztecAddressToNoir(address: AztecAddress): NoirAztecAddress { return { inner: mapFieldToNoir(address.toField()), }; @@ -121,7 +121,7 @@ function mapAztecAddressToNoir(address: AztecAddress): NoirAztecAddress { * @param address - The noir aztec address. * @returns The aztec address. */ -function mapAztecAddressFromNoir(address: NoirAztecAddress): AztecAddress { +export function mapAztecAddressFromNoir(address: NoirAztecAddress): AztecAddress { return AztecAddress.fromField(mapFieldFromNoir(address.inner)); } @@ -130,7 +130,7 @@ function mapAztecAddressFromNoir(address: NoirAztecAddress): AztecAddress { * @param address - The address. * @returns The noir eth address. */ -function mapEthAddressToNoir(address: EthAddress): NoirEthAddress { +export function mapEthAddressToNoir(address: EthAddress): NoirEthAddress { return { inner: mapFieldToNoir(address.toField()), }; @@ -141,7 +141,7 @@ function mapEthAddressToNoir(address: EthAddress): NoirEthAddress { * @param address - The noir eth address. * @returns The eth address. */ -function mapEthAddressFromNoir(address: NoirEthAddress): EthAddress { +export function mapEthAddressFromNoir(address: NoirEthAddress): EthAddress { return EthAddress.fromField(mapFieldFromNoir(address.inner)); } @@ -150,7 +150,7 @@ function mapEthAddressFromNoir(address: NoirEthAddress): EthAddress { * @param data - The data. * @returns The noir contract deployment data. */ -function mapContractDeploymentDataToNoir(data: ContractDeploymentData): ContractDeploymentDataNoir { +export function mapContractDeploymentDataToNoir(data: ContractDeploymentData): ContractDeploymentDataNoir { return { deployer_public_key: mapPointToNoir(data.deployerPublicKey), constructor_vk_hash: mapFieldToNoir(data.constructorVkHash), @@ -165,7 +165,7 @@ function mapContractDeploymentDataToNoir(data: ContractDeploymentData): Contract * @param data - The noir data. * @returns The contract deployment data. */ -function mapContractDeploymentDataFromNoir(data: ContractDeploymentDataNoir): ContractDeploymentData { +export function mapContractDeploymentDataFromNoir(data: ContractDeploymentDataNoir): ContractDeploymentData { return new ContractDeploymentData( mapPointFromNoir(data.deployer_public_key), mapFieldFromNoir(data.constructor_vk_hash), @@ -180,7 +180,7 @@ function mapContractDeploymentDataFromNoir(data: ContractDeploymentDataNoir): Co * @param txContext - The tx context. * @returns The noir tx context. */ -function mapTxContextToNoir(txContext: TxContext): TxContextNoir { +export function mapTxContextToNoir(txContext: TxContext): TxContextNoir { return { is_fee_payment_tx: txContext.isFeePaymentTx, is_rebate_payment_tx: txContext.isRebatePaymentTx, @@ -196,7 +196,7 @@ function mapTxContextToNoir(txContext: TxContext): TxContextNoir { * @param txContext - The noir tx context. * @returns The tx context. */ -function mapTxContextFromNoir(txContext: TxContextNoir): TxContext { +export function mapTxContextFromNoir(txContext: TxContextNoir): TxContext { return new TxContext( txContext.is_fee_payment_tx, txContext.is_rebate_payment_tx, @@ -212,7 +212,7 @@ function mapTxContextFromNoir(txContext: TxContextNoir): TxContext { * @param functionSelector - The function selector. * @returns The noir function selector. */ -function mapFunctionSelectorToNoir(functionSelector: FunctionSelector): FunctionSelectorNoir { +export function mapFunctionSelectorToNoir(functionSelector: FunctionSelector): FunctionSelectorNoir { return { inner: mapFieldToNoir(functionSelector.toField()), }; @@ -223,7 +223,7 @@ function mapFunctionSelectorToNoir(functionSelector: FunctionSelector): Function * @param functionSelector - The noir function selector. * @returns The function selector. */ -function mapFunctionSelectorFromNoir(functionSelector: FunctionSelectorNoir): FunctionSelector { +export function mapFunctionSelectorFromNoir(functionSelector: FunctionSelectorNoir): FunctionSelector { return FunctionSelector.fromField(mapFieldFromNoir(functionSelector.inner)); } @@ -232,7 +232,7 @@ function mapFunctionSelectorFromNoir(functionSelector: FunctionSelectorNoir): Fu * @param functionData - The function data. * @returns The noir function data. */ -function mapFunctionDataToNoir(functionData: FunctionData): FunctionDataNoir { +export function mapFunctionDataToNoir(functionData: FunctionData): FunctionDataNoir { return { selector: mapFunctionSelectorToNoir(functionData.selector), is_internal: functionData.isInternal, @@ -246,7 +246,7 @@ function mapFunctionDataToNoir(functionData: FunctionData): FunctionDataNoir { * @param functionData - The noir function data. * @returns The function data. */ -function mapFunctionDataFromNoir(functionData: FunctionDataNoir): FunctionData { +export function mapFunctionDataFromNoir(functionData: FunctionDataNoir): FunctionData { return new FunctionData( mapFunctionSelectorFromNoir(functionData.selector), functionData.is_internal, @@ -260,7 +260,7 @@ function mapFunctionDataFromNoir(functionData: FunctionDataNoir): FunctionData { * @param txRequest - The tx request. * @returns The noir tx request. */ -function mapTxRequestToNoir(txRequest: TxRequest): TxRequestNoir { +export function mapTxRequestToNoir(txRequest: TxRequest): TxRequestNoir { return { origin: mapAztecAddressToNoir(txRequest.origin), args_hash: mapFieldToNoir(txRequest.argsHash), @@ -274,7 +274,7 @@ function mapTxRequestToNoir(txRequest: TxRequest): TxRequestNoir { * @param callContext - The call context. * @returns The noir call context. */ -function mapCallContextToNoir(callContext: CallContext): CallContextNoir { +export function mapCallContextToNoir(callContext: CallContext): CallContextNoir { return { msg_sender: mapAztecAddressToNoir(callContext.msgSender), storage_contract_address: mapAztecAddressToNoir(callContext.storageContractAddress), @@ -291,7 +291,7 @@ function mapCallContextToNoir(callContext: CallContext): CallContextNoir { * @param historicalBlockData - The historical block data. * @returns The noir historical block data. */ -function mapHistoricalBlockDataToNoir(historicalBlockData: HistoricBlockData): HistoricalBlockDataNoir { +export function mapHistoricalBlockDataToNoir(historicalBlockData: HistoricBlockData): HistoricalBlockDataNoir { return { blocks_tree_root: mapFieldToNoir(historicalBlockData.blocksTreeRoot), block: { @@ -311,7 +311,7 @@ function mapHistoricalBlockDataToNoir(historicalBlockData: HistoricBlockData): H * @param historicalBlockData - The noir historical block data. * @returns The historical block data. */ -function mapHistoricalBlockDataFromNoir(historicalBlockData: HistoricalBlockDataNoir): HistoricBlockData { +export function mapHistoricalBlockDataFromNoir(historicalBlockData: HistoricalBlockDataNoir): HistoricBlockData { return new HistoricBlockData( mapFieldFromNoir(historicalBlockData.block.private_data_tree_root), mapFieldFromNoir(historicalBlockData.block.nullifier_tree_root), @@ -329,7 +329,7 @@ function mapHistoricalBlockDataFromNoir(historicalBlockData: HistoricalBlockData * @param privateCircuitPublicInputs - The private circuit public inputs. * @returns The noir private circuit public inputs. */ -function mapPrivateCircuitPublicInputsToNoir( +export function mapPrivateCircuitPublicInputsToNoir( privateCircuitPublicInputs: PrivateCircuitPublicInputs, ): PrivateCircuitPublicInputsNoir { return { @@ -359,7 +359,7 @@ function mapPrivateCircuitPublicInputsToNoir( * @param privateCallStackItem - The private call stack item. * @returns The noir private call stack item. */ -function mapPrivateCallStackItemToNoir(privateCallStackItem: PrivateCallStackItem): PrivateCallStackItemNoir { +export function mapPrivateCallStackItemToNoir(privateCallStackItem: PrivateCallStackItem): PrivateCallStackItemNoir { return { inner: { contract_address: mapAztecAddressToNoir(privateCallStackItem.contractAddress), @@ -375,7 +375,9 @@ function mapPrivateCallStackItemToNoir(privateCallStackItem: PrivateCallStackIte * @param membershipWitness - The membership witness. * @returns The noir membership witness. */ -function mapMembershipWitnessToNoir(membershipWitness: MembershipWitness): MembershipWitnessNoir { +export function mapMembershipWitnessToNoir( + membershipWitness: MembershipWitness, +): MembershipWitnessNoir { return { leaf_index: membershipWitness.leafIndex.toString(), sibling_path: membershipWitness.siblingPath.map(mapFieldToNoir), @@ -387,7 +389,7 @@ function mapMembershipWitnessToNoir(membershipWitness: Members * @param readRequestMembershipWitness - The read request membership witness. * @returns The noir read request membership witness. */ -function mapReadRequestMembershipWitnessToNoir( +export function mapReadRequestMembershipWitnessToNoir( readRequestMembershipWitness: ReadRequestMembershipWitness, ): ReadRequestMembershipWitnessNoir { return { @@ -403,7 +405,7 @@ function mapReadRequestMembershipWitnessToNoir( * @param privateCallData - The private call data. * @returns The noir private call data. */ -function mapPrivateCallDataToNoir(privateCallData: PrivateCallData): PrivateCallDataNoir { +export function mapPrivateCallDataToNoir(privateCallData: PrivateCallData): PrivateCallDataNoir { return { call_stack_item: mapPrivateCallStackItemToNoir(privateCallData.callStackItem), private_call_stack_preimages: privateCallData.privateCallStackPreimages.map(mapPrivateCallStackItemToNoir), @@ -427,7 +429,11 @@ function mapPrivateCallDataToNoir(privateCallData: PrivateCallData): PrivateCall * @param mapper - The mapper function applied to each element. * @returns The tuple. */ -function mapTupleFromNoir(noirArray: T[], length: N, mapper: (item: T) => M): Tuple { +export function mapTupleFromNoir( + noirArray: T[], + length: N, + mapper: (item: T) => M, +): Tuple { if (noirArray.length != length) { throw new Error(`Expected ${length} items, got ${noirArray.length}`); } @@ -439,7 +445,9 @@ function mapTupleFromNoir(noirArray: T[], length: N, map * @param optionallyRevealedData - The noir optionally revealed data. * @returns The parsed optionally revealed data. */ -function mapOptionallyRevealedDataFromNoir(optionallyRevealedData: OptionallyRevealedDataNoir): OptionallyRevealedData { +export function mapOptionallyRevealedDataFromNoir( + optionallyRevealedData: OptionallyRevealedDataNoir, +): OptionallyRevealedData { return new OptionallyRevealedData( mapFieldFromNoir(optionallyRevealedData.call_stack_item_hash), mapFunctionDataFromNoir(optionallyRevealedData.function_data), @@ -457,7 +465,7 @@ function mapOptionallyRevealedDataFromNoir(optionallyRevealedData: OptionallyRev * @param newContractData - The noir new contract data. * @returns The parsed new contract data. */ -function mapNewContractDataFromNoir(newContractData: NewContractDataNoir): NewContractData { +export function mapNewContractDataFromNoir(newContractData: NewContractDataNoir): NewContractData { return new NewContractData( mapAztecAddressFromNoir(newContractData.contract_address), mapEthAddressFromNoir(newContractData.portal_contract_address), @@ -470,7 +478,7 @@ function mapNewContractDataFromNoir(newContractData: NewContractDataNoir): NewCo * @param publicDataUpdateRequest - The noir public data update request. * @returns The parsed public data update request. */ -function mapPublicDataUpdateRequestFromNoir( +export function mapPublicDataUpdateRequestFromNoir( publicDataUpdateRequest: PublicDataUpdateRequestNoir, ): PublicDataUpdateRequest { return new PublicDataUpdateRequest( @@ -485,7 +493,7 @@ function mapPublicDataUpdateRequestFromNoir( * @param publicDataRead - The noir public data read. * @returns The parsed public data read. */ -function mapPublicDataReadFromNoir(publicDataRead: PublicDataReadNoir): PublicDataRead { +export function mapPublicDataReadFromNoir(publicDataRead: PublicDataReadNoir): PublicDataRead { return new PublicDataRead(mapFieldFromNoir(publicDataRead.leaf_index), mapFieldFromNoir(publicDataRead.value)); } @@ -494,7 +502,7 @@ function mapPublicDataReadFromNoir(publicDataRead: PublicDataReadNoir): PublicDa * @param combinedAccumulatedData - The noir combined accumulated data. * @returns The parsed combined accumulated data. */ -function mapCombinedAccumulatedDataFromNoir( +export function mapCombinedAccumulatedDataFromNoir( combinedAccumulatedData: CombinedAccumulatedDataNoir, ): CombinedAccumulatedData { return new CombinedAccumulatedData( @@ -539,7 +547,7 @@ function mapCombinedAccumulatedDataFromNoir( * @param combinedConstantData - The noir combined constant data. * @returns The parsed combined constant data. */ -function mapCombinedConstantDataFromNoir(combinedConstantData: CombinedConstantDataNoir): CombinedConstantData { +export function mapCombinedConstantDataFromNoir(combinedConstantData: CombinedConstantDataNoir): CombinedConstantData { return new CombinedConstantData( mapHistoricalBlockDataFromNoir(combinedConstantData.block_data), mapTxContextFromNoir(combinedConstantData.tx_context),