@aztec/protocol-contracts 0.0.1-commit.d6f2b3f94 → 0.0.1-commit.e2b2873ed

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -351,8 +351,8 @@
351
351
  }
352
352
  }
353
353
  },
354
- "bytecode": "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",
355
- "debug_symbols": "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"
354
+ "bytecode": "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",
355
+ "debug_symbols": "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"
356
356
  },
357
357
  {
358
358
  "name": "public_dispatch",
@@ -579,8 +579,8 @@
579
579
  }
580
580
  }
581
581
  },
582
- "bytecode": "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",
583
- "debug_symbols": "vb3djuU6coX5Lue6L0Qyfki/imEY7XbbaOCg22i3BxgYfvfZXGLEUmVhM5V7Z83Nya/qVMYnUYqQRFLU//7273/+t//5z3/9y1//42///ds//fP//vZvf//L77//5T//9fe//emP//jL3/76+Nv//e2Y//H22z+1P/zm8ts/6eOHnj/s/OHnj37+GPjRj/NHOX/U80c7f5xR+hmln1H6GaWfUfoZZZxRxhllnFHGGWWcUcYZZZxRxhllnFHGGaUcx/pZ1s+6frb1U9ZPXT9t/fT1s6+fK15Z8cqKV1a8suKVFa+seGXFKyteWfHKildXvLri1RWvrnh1xasrXl3x6opXV7y64rUVr614bcVrK15b8dqK11a8tuK1Fa+teLLiyYonK56seLLiySOez5+2fvr62dfPR7xyPECPgBLwCFnahEfMMv+xSoAGWIAH9IAZuT/AjoASUANagARogAV4QA+IyB6RfUYeE2pAC5iRZ0vMDDnBAh6RK369B4wFM1dOKAE1oAVIgAZYQETuEblH5Jk/bTbvzKATakALkAANsAAP6AHjhHocASWgBrQACdCAGblO8IAeMBbM5DqhBNSAFiABGhCRS0QuEblE5BqRa0SuEblG5BqRa0SuEblG5BqRa0RuEblF5BaRW0RuEblF5BaRW0RuEblFZInIEpElIktElogsEVkiskRkicgSkTUia0TWiKwRWSOyRmSNyBqRNSJrRLaIbBHZIrJFZIvIFpFnDjad4AE9YCyYOXhCCagBLUACNCAie0T2iDxzsD0ypc4cPKEEPCJLm9ACJEADLMADesBYMHPwhBIQkUdEHhF55qDYBAvwgB4wTmgzB08oATWgBUiABliAB/SAWe8fedpwgQOUgBrQAiRAAyzAA3pARK4RuUbkGpFrRK4RuUbkGpFrRK4RuUbkFpFbRG4RuUXkFpFbRG4RuUXkFpFbRJaILBFZIrJEZInIEpElIktElogsEVkjskZkjcgakTUia0TWiKwRWSOyRmSLyBaRLSJbRLaIbBHZIrJFZIvIFpE9IntE9ojsEdkjskdkj8gekT0ie0TuEblH5B6Re0TuEblH5B6Re0TuEblH5BGRR0QeEXlE5BGRR0QeEXlE5BGRx4osxxFQAmpAC5AADbAAD+gBETlyUCIHJXJQkIN1ggRogAV4QA8YC5CDgBJQAyJyjcg1IteI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"
582
+ "bytecode": "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",
583
+ "debug_symbols": "vb3djuU6cm77Luu6L8Rg/DD8KhuG0W63jQYWuo12+wAHht/9TIYY8amyzmQq58zaNytH1aqMIVGKkERS1P/89m9//tf//o9/+ctf//1v//XbP/2f//ntX//+l99//8t//Mvvf/vTH//xl7/99fG3//PbMf9j/bd/6n/4zfi3f5LHDzl/6PnDzh/j/OHxYxznj3b+oPNHP3+cUcYZZZxRxhllnFHGGcXPKH5G8TOKn1H8jOJnFD+j+BnFzyh+RmnHsX629ZPWz75+8vop66eun7Z+jvVzxWsrXlvx2orXVry24rUVr614bcVrK15b8WjFoxWPVjxa8WjFoxWPVjxa8WjFoxWvr3h9xesrXl/x+orXV7y+4vUVr694fcXjFY9XPF7xeMXjFY8f8Wz+1PXT1s+xfj7itfYAORJawiNk4wmPmG1M4ARJ0ARLGAkzsj9Aj4SWQAk9gRMkQRMsYSRkZMvI9ohMxwRK6Akzsk6QBE14RKb49ZHgC2aunNASKKEncIIkaEJGHhl5ZOSZP30278ygEyihJ3CCJGiCJYwEP4GOI6ElUEJP4ARJmJH7BEsYCb5gJtcJLYESegInSEJGbhm5ZeSWkSkjU0amjEwZmTIyZWTKyJSRKSNTRu4ZuWfknpF7Ru4ZuWfknpF7Ru4ZuWdkzsickTkjc0bmjMwZmTMyZ2TOyJyRJSNLRpaMLBlZMrJkZMnIkpElI0tG1oysGVkzsmZkzciakWcOdp1gCSPBF8wcPKElUEJP4ARJyMiWkS0jzxzsj0yhmYMntIRHZOYJPYETJEETLGEk+IKZgye0hIzsGdkz8sxBtgmaYAkjwU/oMwdPaAmU0BM4QRI0wRJGwqz3jzztcYELaAmU0BM4QRI0wRJGQkamjEwZmTIyZWTKyJSRKSNTRqaMTBm5Z+SekXtG7hm5Z+SekXtG7hm5Z+SekTkjc0bmjMwZmTMyZ2TOyJyROSNzRpaMLBlZMrJkZMnIkpElI0tGlowsGVkzsmZkzciakTUja0bWjKwZWTOyZmTLyJaRLSNbRraMbBnZMrJlZMvIlpFHRh4ZeWTkkZFHRh4ZeWTkkZFHRh4Z2TOyZ2TPyJ6RPSN7RvaM7BnZM7KvyHwcCS2BEnoCJ0iCJljCSMjImYOcOciZgxw52CdwgiRogiWMBF8QORjQEighI1NGpoxMGZkyMmVkysg9I/eM3DNyz8g9I/eM3DNyz8g9I/eMzBmZMzJnZM7InJE5I3NG5ozMGZkzsmRkyciSkSUjS0aWjCwZWTKyZGTJyJqRNSNrRtaMrBlZM7JmZM3ImpE1I1tGtoxsGdkysmVky8iWkS0jW0a2jDwy8sjIIyOPjDwy8sjIIyOPjDwy8sjInpE9I3tG9ozsGdkzsmdkz8iekX1FluNIaAmU0BM4QRI0wRJGQkZuGbll5JaRMwclc1AyByVzUDIHJXNQMgclc1AyByVzUDIHJXNQMgclc1AyByVzUDIHJXNQMgclc1AyByVzUDIHJXNQMgclc1AyByVycExoCZTQEzhBEjTBEkaCL5CMLBlZMrJkZMnIkpElI0tGlowsGVkzsmZkzciakTUjRw76BE2whEdkbRN8wczBE1oCJfQETpAETbCEjGwZeWTkmYM6W37m4Ak9gRMkQRMsYST4gpmDJ2Rkz8iekT0je0b2jOwZ2TOyr8h6HAktgRJ6AidIgiZYwkjIyC0jt4zcMnLLyC0jt4w8c1B5giWMhBn50V2hMwdPaAkz8pjQEzhBEjTBEkaCL5g5eEJLyMg9I/eM3DNyz8g9I/eM3DMyZ2TOyJyROSNzRuaMzBmZMzJnZM7IkpElI0tGlowsGVkysmRkyciSkSUja0bWjKwZWTOyZmTNyJqRNSNrRtaMbBnZMrJlZMvIlpEtI1tGtoxsGdky8sjIIyOPjDwy8sjIIyOPjDwy8sjIIyN7RvaM7BnZM7JnZM/InpE9I3tG9hXZjiOhJVBCT+AESdAESxgJGbll5JaRW0ZuGbll5JaRW0ZuGbll5JaRKSNTRs4ctMxByxy0zEHLHLTMQcsctMxByxy0zEHLHLTMQcsctMxByxy0zEHLHLTMQcsctMxByxy0zEHLHLTMQcsctMxByxy0zEHLHLTMQcsctMxByxy0zEHLHLTMQcsctMxByxy0zEHLHLTMQcsctMxByxy0zEHLHLTMQcsctMxByxy0zEHLHLTMQcsctMxByxy0zEHLHLTMQcsctMxByxy0zEHLHLTMQcsctMxByxy0mYPWJlBCT+AESdAESxgJfsKYOXhCS6CEnjC3WSdIgiZYwkjwBZGDAS2BEnpCRm4ZuWXklpFbRm4ZmTIyZWTKyJSRKSNTRqaMTBmZMjJl5J6Re0buGbln5J6Re0buGbln5J6Re0bmjMwZmTMyZ2TOyJyROSNzRuaMzBlZMrJkZMnIkpElI0tGlowsGVkysmRkzciakTUja0bWjKwZWTOyZmTNyJqRLSNbRraMbBnZMrJlZMvIlpEtI1tGHhl5ZOSRkUdGHhl5ZOSRkUdGHhl5ZGTPyJ6RPSN7RvaM7Bk5crBPsISRMHOQ56DhkdASKKEncIIkaIIljISM3DJyy8gtI7eM3DJyy8gtI7eM3DJyy8iUkSkjU0amjEwZmTIyZWTKyJSRKSP3jNwzcs/IPSP3jNwzcs/IPSP3jNwzMmdkzsickTkjc0bmjMwZmTMyZ2TOyJKRJSNLRpaMLBlZMrJkZMnIMwdNJ/iCmYMnzMg+gRJ6AidIgiZYwkjwBTMHT8jIlpEtI1tGtoxsGdkysmVky8gjI4+MPDLyyMgjI4+MPDLyyMgjI4+M7BnZM7JnZM/InpE9I3tG9ozsGdlX5MeQ+1HUiqioF3GRFGmRFY2icrRytHK0crRytHK0crRytHK0crRyUDmoHFQOKgeVg8pB5aByUDmoHL0cvRy9HL0cvRy9HL0cvRy9HL0cXA4uB5eDy8Hl4HJwObgcXA4uh5RDyiHlkHJIOaQcUg4ph5RDyqHl0HJoObQcWg4th5ZDy6Hl0HJYOawcVg4rh5XDymHlsHJYOawcoxyjHKMcoxyjHKMcoxyjHKMcoxxeDi+Hl8PL4eXwcng5vBxejsrzVnneKs9b5XmrPG+V563yvFWet8rzVnneKs9b5XmrPG+V563yvFWet8rzVnneKs9b5XmrPG+V563yvFWet8rzVnneKs9b5XmrPG+V563yvFWet8rzVnneKs9b5XmrPG+V563yvFWet8rzVnneKs9b5XmrPG+V563yvFWet8rzVnneKs9b5XmrPG+V563yvFWet8rzVnneKs9b5XmrPG+V563yvFWet8rzVnneKs9b5XmrPG+V563yvFWet8rzVnneKs9b5XmrPG+V563yvFWet8rzVnneKs9b5XmrPG+V563yvFWet8rzVnneKs9b5XmrPG+V563yvFWet8rzVnneKs9b5XmrPKfKc6o8p8pzqjynynOqPKfKc6o8p8pzqjynynOqPKfKc6o8p8pzqjynynOqPKfKc6o8p8pzqjynynOqPKfKc6o8p8pzqjynyvOYDTRo0szzRa2IinoRF0mRFlnRKCoHl4PLweXgcnA5uBxcDi4Hl4PLIeWQckg5pBwzz8c5QVGKtGg6NGgUedLM80WtiIp6ERdJkRaVQ8uh5bByWDmsHFYOK4eVw8ph5bByWDlGOUY5RjlGOUY5RjlGOUY5RjlGObwcXg4vh5fDy+Hl8HJ4Obwcno6YVLSoFVFRL+IiKdIiKxpF5WjlaOVo5WjlaOVo5WjlaOVo5WjloHJQOagcVA4qB5WDykHloHJQOXo5ejkiz0dQL+Kih8NbkBZZ0SjypJnni1oRFfUiLioHl4PLweXgckg5pBxSDimHlEPKIeWQckg5pBxaDi2HlkPLoeXQcmg5tBxaDi2HlcPKYeWwclg5rBxWDiuHlcPKMcoxyjHKMcoxyjHKMcoxyjHKMcrh5fByeDm8HF4OL4eXw8vh5fB0xMSlRa2IinoRF0mRFlnRKCpHK0crRytHK0crRytHK0crRytHKweVg8pB5aByUDmoHFQOKgeVg8rRy9HL0cvRy9HLUXnOledcec6V51x5zpXnXHnOledcec6V51x5zpXnXHnOledcec6V51x5zpXnXHnOledcec6V51x5zpXnXHnOledcec6V51x5zpXnXHnOledcec6V51x5zpXnXHnOledcec6V51x5zpXnXHnOledcec6V51x5zpXnXHnOledcec6V51x5zpXnXHnOledcec6V51x5zpXnXHnOledcec6V51x5LpXnUnkuledSeS6V51J5LpXnUnkuledSeS6V51J5LpXnUnkuledSeS6V51J5LpXnUnkuledSeS6V51J5LpXnUnkuledSeS6V51J5LpXnUnkuledSeS6V51J5LpXnUnkuledSeS6V51J5LpXnUnkuledSeS6V51J5LpXnUnkuledSeS6V51J5LpXnUnkuledSeS6V51J5LpXnUnkuledSeS6V51J5LpXnUnkuledSeS6V51J5LpXnUnkuledSeS6V51J5LpXnUnkuledSeS6V51J5LpXnUnkuledSeS6V51J5LpXnUnkuledSeS6V51J5LpXnUnkuledSea6V51p5rpXnWnmuledaea6V51p5rpXnWnmuledaea6V51p5rpXnWnmuledaea6V51p5rpXnWnmuledaea6V51p5rpXnWnmuledaea6V51p5HhO0nIN6ERdJkRZZ0SjypMjzk1pRObgcXA4uB5eDy8Hl4HJIOaQcUg4ph5Qj8lyDtMiK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"
584
584
  }
585
585
  ],
586
586
  "outputs": {
@@ -782,15 +782,15 @@
782
782
  },
783
783
  "124": {
784
784
  "path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/messages/discovery/mod.nr",
785
- "source": "use crate::protocol::{address::AztecAddress, debug_log::{debug_log, debug_log_format}};\n\npub mod nonce_discovery;\npub mod partial_notes;\npub mod private_events;\npub mod private_notes;\npub mod process_message;\n\nuse crate::{\n messages::{\n discovery::process_message::process_message_ciphertext,\n logs::note::MAX_NOTE_PACKED_LEN,\n processing::{\n get_private_logs, pending_tagged_log::PendingTaggedLog, validate_and_store_enqueued_notes_and_events,\n },\n },\n utils::array,\n};\n\npub struct NoteHashAndNullifier {\n /// The result of NoteHash::compute_note_hash\n pub note_hash: Field,\n /// The result of NoteHash::compute_nullifier_unconstrained (since all of message discovery is unconstrained).\n /// This is `None` if the nullifier cannot be computed (e.g., because the nullifier hiding key is not available).\n pub inner_nullifier: Option<Field>,\n}\n\n/// A function which takes a note's packed content, address of the emitting contract, note nonce, storage slot and note\n/// type ID and attempts to compute its note hash (not hashed by note nonce nor siloed by address) and inner nullifier\n/// (not siloed by address).\n///\n/// This function must be user-provided as its implementation requires knowledge of how note type IDs are allocated in\n/// a contract. The `#[aztec]` macro automatically creates such a contract library method called\n/// `_compute_note_hash_and_nullifier`, which looks something like this:\n///\n/// ```\n/// |packed_note, owner, storage_slot, note_type_id, contract_address, randomness, note_nonce| {\n/// if note_type_id == MyNoteType::get_id() {\n/// assert(packed_note.len() == MY_NOTE_TYPE_SERIALIZATION_LENGTH);\n///\n/// let note = MyNoteType::unpack(aztec::utils::array::subarray(packed_note.storage(), 0));\n///\n/// let note_hash = note.compute_note_hash(owner, storage_slot, randomness);\n/// let note_hash_for_nullification = aztec::note::utils::compute_note_hash_for_nullification(\n/// HintedNote{ note, contract_address, metadata: SettledNoteMetadata::new(note_nonce).into() },\n/// storage_slot\n/// );\n///\n/// let inner_nullifier = note.compute_nullifier_unconstrained(owner, note_hash_for_nullification);\n///\n/// Option::some(\n/// aztec::messages::discovery::NoteHashAndNullifier {\n/// note_hash, inner_nullifier\n/// }\n/// )\n/// } else if note_type_id == MyOtherNoteType::get_id() {\n/// ... // Similar to above but calling MyOtherNoteType::unpack_content\n/// } else {\n/// Option::none() // Unknown note type ID\n/// };\n/// }\n/// ```\npub type ComputeNoteHashAndNullifier<Env> = unconstrained fn[Env](/* packed_note */BoundedVec<Field, MAX_NOTE_PACKED_LEN>, /*\n owner */ AztecAddress, /* storage_slot */ Field, /* note_type_id */ Field, /* contract_address */ AztecAddress, /*\nrandomness */ Field, /* note nonce */ Field) -> Option<NoteHashAndNullifier>;\n\n/// Performs the state synchronization process, in which private logs are downloaded and inspected to find new private\n/// notes, partial notes and events, etc., and pending partial notes are processed to search for their completion logs.\n/// This is the mechanism via which a contract updates its knowledge of its private state.\n///\n/// Note that the state is synchronized up to the latest block synchronized by PXE (referred to as \"anchor block\").\n/// That should be close to the chain tip as block synchronization is performed before contract function simulation is\n/// done.\n///\n/// Receives the address of the contract on which discovery is performed along with its\n/// `compute_note_hash_and_nullifier` function.\npub unconstrained fn do_sync_state<Env>(\n contract_address: AztecAddress,\n compute_note_hash_and_nullifier: ComputeNoteHashAndNullifier<Env>,\n) {\n debug_log(\"Performing state synchronization\");\n\n // First we process all private logs, which can contain different kinds of messages e.g. private notes, partial\n // notes, private events, etc.\n let mut logs = get_private_logs(contract_address);\n logs.for_each(|i, pending_tagged_log: PendingTaggedLog| {\n debug_log_format(\n \"Processing log with tag {0}\",\n [pending_tagged_log.log.get(0)],\n );\n\n // We remove the tag from the pending tagged log and process the message ciphertext contained in it.\n let message_ciphertext = array::subbvec(pending_tagged_log.log, 1);\n\n process_message_ciphertext(\n contract_address,\n compute_note_hash_and_nullifier,\n message_ciphertext,\n pending_tagged_log.context,\n );\n logs.remove(i);\n });\n\n // Then we process all pending partial notes, regardless of whether they were found in the current or previous\n // executions.\n partial_notes::fetch_and_process_partial_note_completion_logs(contract_address, compute_note_hash_and_nullifier);\n\n // Finally we validate all notes and events that were found as part of the previous processes, resulting in them\n // being added to PXE's database and retrievable via oracles (get_notes) and our TS API (PXE::getPrivateEvents).\n validate_and_store_enqueued_notes_and_events(contract_address);\n}\n"
785
+ "source": "use crate::protocol::{address::AztecAddress, logging::{debug_log, debug_log_format}};\n\npub mod nonce_discovery;\npub mod partial_notes;\npub mod private_events;\npub mod private_notes;\npub mod process_message;\n\nuse crate::{\n messages::{\n discovery::process_message::process_message_ciphertext,\n logs::note::MAX_NOTE_PACKED_LEN,\n processing::{\n get_private_logs, pending_tagged_log::PendingTaggedLog, validate_and_store_enqueued_notes_and_events,\n },\n },\n utils::array,\n};\n\npub struct NoteHashAndNullifier {\n /// The result of NoteHash::compute_note_hash\n pub note_hash: Field,\n /// The result of NoteHash::compute_nullifier_unconstrained (since all of message discovery is unconstrained).\n /// This is `None` if the nullifier cannot be computed (e.g., because the nullifier hiding key is not available).\n pub inner_nullifier: Option<Field>,\n}\n\n/// A function which takes a note's packed content, address of the emitting contract, note nonce, storage slot and note\n/// type ID and attempts to compute its note hash (not hashed by note nonce nor siloed by address) and inner nullifier\n/// (not siloed by address).\n///\n/// This function must be user-provided as its implementation requires knowledge of how note type IDs are allocated in\n/// a contract. The `#[aztec]` macro automatically creates such a contract library method called\n/// `_compute_note_hash_and_nullifier`, which looks something like this:\n///\n/// ```\n/// |packed_note, owner, storage_slot, note_type_id, contract_address, randomness, note_nonce| {\n/// if note_type_id == MyNoteType::get_id() {\n/// assert(packed_note.len() == MY_NOTE_TYPE_SERIALIZATION_LENGTH);\n///\n/// let note = MyNoteType::unpack(aztec::utils::array::subarray(packed_note.storage(), 0));\n///\n/// let note_hash = note.compute_note_hash(owner, storage_slot, randomness);\n/// let note_hash_for_nullification = aztec::note::utils::compute_note_hash_for_nullification(\n/// HintedNote{ note, contract_address, metadata: SettledNoteMetadata::new(note_nonce).into() },\n/// storage_slot\n/// );\n///\n/// let inner_nullifier = note.compute_nullifier_unconstrained(owner, note_hash_for_nullification);\n///\n/// Option::some(\n/// aztec::messages::discovery::NoteHashAndNullifier {\n/// note_hash, inner_nullifier\n/// }\n/// )\n/// } else if note_type_id == MyOtherNoteType::get_id() {\n/// ... // Similar to above but calling MyOtherNoteType::unpack_content\n/// } else {\n/// Option::none() // Unknown note type ID\n/// };\n/// }\n/// ```\npub type ComputeNoteHashAndNullifier<Env> = unconstrained fn[Env](/* packed_note */BoundedVec<Field, MAX_NOTE_PACKED_LEN>, /*\n owner */ AztecAddress, /* storage_slot */ Field, /* note_type_id */ Field, /* contract_address */ AztecAddress, /*\nrandomness */ Field, /* note nonce */ Field) -> Option<NoteHashAndNullifier>;\n\n/// Performs the state synchronization process, in which private logs are downloaded and inspected to find new private\n/// notes, partial notes and events, etc., and pending partial notes are processed to search for their completion logs.\n/// This is the mechanism via which a contract updates its knowledge of its private state.\n///\n/// Note that the state is synchronized up to the latest block synchronized by PXE (referred to as \"anchor block\").\n/// That should be close to the chain tip as block synchronization is performed before contract function simulation is\n/// done.\n///\n/// Receives the address of the contract on which discovery is performed along with its\n/// `compute_note_hash_and_nullifier` function.\npub unconstrained fn do_sync_state<Env>(\n contract_address: AztecAddress,\n compute_note_hash_and_nullifier: ComputeNoteHashAndNullifier<Env>,\n) {\n debug_log(\"Performing state synchronization\");\n\n // First we process all private logs, which can contain different kinds of messages e.g. private notes, partial\n // notes, private events, etc.\n let mut logs = get_private_logs(contract_address);\n logs.for_each(|i, pending_tagged_log: PendingTaggedLog| {\n debug_log_format(\n \"Processing log with tag {0}\",\n [pending_tagged_log.log.get(0)],\n );\n\n // We remove the tag from the pending tagged log and process the message ciphertext contained in it.\n let message_ciphertext = array::subbvec(pending_tagged_log.log, 1);\n\n process_message_ciphertext(\n contract_address,\n compute_note_hash_and_nullifier,\n message_ciphertext,\n pending_tagged_log.context,\n );\n logs.remove(i);\n });\n\n // Then we process all pending partial notes, regardless of whether they were found in the current or previous\n // executions.\n partial_notes::fetch_and_process_partial_note_completion_logs(contract_address, compute_note_hash_and_nullifier);\n\n // Finally we validate all notes and events that were found as part of the previous processes, resulting in them\n // being added to PXE's database and retrievable via oracles (get_notes) and our TS API (PXE::getPrivateEvents).\n validate_and_store_enqueued_notes_and_events(contract_address);\n}\n"
786
786
  },
787
787
  "125": {
788
788
  "path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/messages/discovery/nonce_discovery.nr",
789
- "source": "use crate::messages::{discovery::ComputeNoteHashAndNullifier, logs::note::MAX_NOTE_PACKED_LEN};\n\nuse crate::protocol::{\n address::AztecAddress,\n constants::MAX_NOTE_HASHES_PER_TX,\n debug_log::debug_log_format,\n hash::{compute_note_hash_nonce, compute_siloed_note_hash, compute_unique_note_hash},\n traits::ToField,\n};\n\n/// A struct with the discovered information of a complete note, required for delivery to PXE. Note that this is *not*\n/// the complete note information, since it does not include content, storage slot, etc.\npub struct DiscoveredNoteInfo {\n pub note_nonce: Field,\n pub note_hash: Field,\n pub inner_nullifier: Field,\n}\n\n/// Searches for note nonces that will result in a note that was emitted in a transaction. While rare, it is possible\n/// for multiple notes to have the exact same packed content and storage slot but different nonces, resulting in\n/// different unique note hashes. Because of this this function returns a *vector* of discovered notes, though in most\n/// cases it will contain a single element.\n///\n/// Due to how nonces are computed, this function requires knowledge of the transaction in which the note was created,\n/// more specifically the list of all unique note hashes in it plus the value of its first nullifier.\npub unconstrained fn attempt_note_nonce_discovery<Env>(\n unique_note_hashes_in_tx: BoundedVec<Field, MAX_NOTE_HASHES_PER_TX>,\n first_nullifier_in_tx: Field,\n compute_note_hash_and_nullifier: ComputeNoteHashAndNullifier<Env>,\n contract_address: AztecAddress,\n owner: AztecAddress,\n storage_slot: Field,\n randomness: Field,\n note_type_id: Field,\n packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n) -> BoundedVec<DiscoveredNoteInfo, MAX_NOTE_HASHES_PER_TX> {\n let discovered_notes = &mut BoundedVec::new();\n\n debug_log_format(\n \"Attempting nonce discovery on {0} potential notes on contract {1} for storage slot {2}\",\n [unique_note_hashes_in_tx.len() as Field, contract_address.to_field(), storage_slot],\n );\n\n // We need to find nonces (typically just one) that result in a note hash that, once siloed into a unique note\n // hash, is one of the note hashes created by the transaction.\n unique_note_hashes_in_tx.for_eachi(|i, expected_unique_note_hash| {\n // Nonces are computed by hashing the first nullifier in the transaction with the index of the note in the new\n // note hashes array. We therefore know for each note in every transaction what its nonce is.\n let candidate_nonce = compute_note_hash_nonce(first_nullifier_in_tx, i);\n\n // Given note nonce, note content and metadata, we can compute the note hash and silo it to check if it matches\n // the note hash at the array index we're currently processing. TODO(#11157): handle failed\n // note_hash_and_nullifier computation\n let hashes = compute_note_hash_and_nullifier(\n packed_note,\n owner,\n storage_slot,\n note_type_id,\n contract_address,\n randomness,\n candidate_nonce,\n )\n .expect(f\"Failed to compute a note hash for note type {note_type_id}\");\n\n let siloed_note_hash = compute_siloed_note_hash(contract_address, hashes.note_hash);\n let unique_note_hash = compute_unique_note_hash(candidate_nonce, siloed_note_hash);\n\n if unique_note_hash == expected_unique_note_hash {\n // Note that while we did check that the note hash is the preimage of the expected unique note hash, we\n // perform no validations on the nullifier - we fundamentally cannot, since only the application knows how\n // to compute nullifiers. We simply trust it to have provided the correct one: if it hasn't, then PXE may\n // fail to realize that a given note has been nullified already, and calls to the application could result\n // in invalid transactions (with duplicate nullifiers). This is not a concern because an application\n // already has more direct means of making a call to it fail the transaction.\n discovered_notes.push(\n DiscoveredNoteInfo {\n note_nonce: candidate_nonce,\n note_hash: hashes.note_hash,\n // TODO: The None case will be handled in a followup PR.\n // https://linear.app/aztec-labs/issue/F-265/store-external-notes\n inner_nullifier: hashes.inner_nullifier.expect(\n f\"Failed to compute nullifier for note type {note_type_id}\",\n ),\n },\n );\n\n // We don't exit the loop - it is possible (though rare) for the exact same note content to be present\n // multiple times in the same transaction with different nonces. This typically doesn't happen due to notes\n // containing random values in order to hide their contents.\n }\n });\n\n debug_log_format(\n \"Found valid nonces for a total of {0} notes\",\n [discovered_notes.len() as Field],\n );\n\n *discovered_notes\n}\n\nmod test {\n use crate::{\n messages::{discovery::NoteHashAndNullifier, logs::note::MAX_NOTE_PACKED_LEN},\n note::{\n HintedNote,\n note_interface::{NoteHash, NoteType},\n note_metadata::SettledNoteMetadata,\n utils::compute_note_hash_for_nullification,\n },\n oracle::random::random,\n test::mocks::mock_note::MockNote,\n utils::array,\n };\n\n use crate::protocol::{\n address::AztecAddress,\n hash::{compute_note_hash_nonce, compute_siloed_note_hash, compute_unique_note_hash},\n traits::{FromField, Packable},\n };\n\n use super::attempt_note_nonce_discovery;\n\n // This implementation could be simpler, but this serves as a nice example of the expected flow in a real\n // implementation, and as a sanity check that the interface is sufficient.\n unconstrained fn compute_note_hash_and_nullifier(\n packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n owner: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n contract_address: AztecAddress,\n randomness: Field,\n note_nonce: Field,\n ) -> Option<NoteHashAndNullifier> {\n if note_type_id == MockNote::get_id() {\n let note = MockNote::unpack(array::subarray(packed_note.storage(), 0));\n let note_hash = note.compute_note_hash(owner, storage_slot, randomness);\n\n let note_hash_for_nullification = compute_note_hash_for_nullification(\n HintedNote {\n note,\n contract_address,\n owner,\n randomness,\n storage_slot,\n metadata: SettledNoteMetadata::new(note_nonce).into(),\n },\n );\n\n let inner_nullifier = note.compute_nullifier_unconstrained(owner, note_hash_for_nullification);\n\n Option::some(NoteHashAndNullifier { note_hash, inner_nullifier })\n } else {\n Option::none()\n }\n }\n\n global VALUE: Field = 7;\n global FIRST_NULLIFIER_IN_TX: Field = 47;\n global CONTRACT_ADDRESS: AztecAddress = AztecAddress::from_field(13);\n global OWNER: AztecAddress = AztecAddress::from_field(14);\n global STORAGE_SLOT: Field = 99;\n global RANDOMNESS: Field = 99;\n\n #[test]\n unconstrained fn no_note_hashes() {\n let unique_note_hashes_in_tx = BoundedVec::new();\n let packed_note = BoundedVec::new();\n\n let discovered_notes = attempt_note_nonce_discovery(\n unique_note_hashes_in_tx,\n FIRST_NULLIFIER_IN_TX,\n compute_note_hash_and_nullifier,\n CONTRACT_ADDRESS,\n OWNER,\n STORAGE_SLOT,\n RANDOMNESS,\n MockNote::get_id(),\n packed_note,\n );\n\n assert_eq(discovered_notes.len(), 0);\n }\n\n #[test(should_fail_with = \"Failed to compute a note hash\")]\n unconstrained fn failed_hash_computation() {\n let unique_note_hashes_in_tx = BoundedVec::from_array([random()]);\n let packed_note = BoundedVec::new();\n let note_type_id = 0; // This note type id is unknown to compute_note_hash_and_nullifier\n\n let discovered_notes = attempt_note_nonce_discovery(\n unique_note_hashes_in_tx,\n FIRST_NULLIFIER_IN_TX,\n compute_note_hash_and_nullifier,\n CONTRACT_ADDRESS,\n OWNER,\n STORAGE_SLOT,\n RANDOMNESS,\n note_type_id,\n packed_note,\n );\n\n assert_eq(discovered_notes.len(), 0);\n }\n\n struct NoteAndData {\n note: MockNote,\n note_nonce: Field,\n note_hash: Field,\n unique_note_hash: Field,\n inner_nullifier: Field,\n }\n\n unconstrained fn construct_note(value: Field, note_index_in_tx: u32) -> NoteAndData {\n let note_nonce = compute_note_hash_nonce(FIRST_NULLIFIER_IN_TX, note_index_in_tx);\n\n let hinted_note = MockNote::new(value)\n .contract_address(CONTRACT_ADDRESS)\n .owner(OWNER)\n .randomness(RANDOMNESS)\n .storage_slot(STORAGE_SLOT)\n .note_metadata(SettledNoteMetadata::new(note_nonce).into())\n .build_hinted_note();\n let note = hinted_note.note;\n\n let note_hash = note.compute_note_hash(OWNER, STORAGE_SLOT, RANDOMNESS);\n let unique_note_hash = compute_unique_note_hash(\n note_nonce,\n compute_siloed_note_hash(CONTRACT_ADDRESS, note_hash),\n );\n let inner_nullifier = note\n .compute_nullifier_unconstrained(OWNER, compute_note_hash_for_nullification(hinted_note))\n .expect(f\"Could not compute nullifier for note owned by {OWNER}\");\n\n NoteAndData { note, note_nonce, note_hash, unique_note_hash, inner_nullifier }\n }\n\n #[test]\n unconstrained fn single_note() {\n let note_index_in_tx = 2;\n let note_and_data = construct_note(VALUE, note_index_in_tx);\n\n let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n random(), random(), random(), random(), random(), random(), random(),\n ]);\n unique_note_hashes_in_tx.set(note_index_in_tx, note_and_data.unique_note_hash);\n\n let discovered_notes = attempt_note_nonce_discovery(\n unique_note_hashes_in_tx,\n FIRST_NULLIFIER_IN_TX,\n compute_note_hash_and_nullifier,\n CONTRACT_ADDRESS,\n OWNER,\n STORAGE_SLOT,\n RANDOMNESS,\n MockNote::get_id(),\n BoundedVec::from_array(note_and_data.note.pack()),\n );\n\n assert_eq(discovered_notes.len(), 1);\n let discovered_note = discovered_notes.get(0);\n\n assert_eq(discovered_note.note_nonce, note_and_data.note_nonce);\n assert_eq(discovered_note.note_hash, note_and_data.note_hash);\n assert_eq(discovered_note.inner_nullifier, note_and_data.inner_nullifier);\n }\n\n #[test]\n unconstrained fn multiple_notes_same_preimage() {\n let first_note_index_in_tx = 3;\n let first_note_and_data = construct_note(VALUE, first_note_index_in_tx);\n\n let second_note_index_in_tx = 5;\n let second_note_and_data = construct_note(VALUE, second_note_index_in_tx);\n\n // Both notes have the same preimage (and therefore packed representation), so both should be found in the same\n // call.\n assert_eq(first_note_and_data.note, second_note_and_data.note);\n let packed_note = first_note_and_data.note.pack();\n\n let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n random(), random(), random(), random(), random(), random(), random(),\n ]);\n unique_note_hashes_in_tx.set(first_note_index_in_tx, first_note_and_data.unique_note_hash);\n unique_note_hashes_in_tx.set(second_note_index_in_tx, second_note_and_data.unique_note_hash);\n\n let discovered_notes = attempt_note_nonce_discovery(\n unique_note_hashes_in_tx,\n FIRST_NULLIFIER_IN_TX,\n compute_note_hash_and_nullifier,\n CONTRACT_ADDRESS,\n OWNER,\n STORAGE_SLOT,\n RANDOMNESS,\n MockNote::get_id(),\n BoundedVec::from_array(packed_note),\n );\n\n assert_eq(discovered_notes.len(), 2);\n\n assert(discovered_notes.any(|discovered_note| {\n (discovered_note.note_nonce == first_note_and_data.note_nonce)\n & (discovered_note.note_hash == first_note_and_data.note_hash)\n & (discovered_note.inner_nullifier == first_note_and_data.inner_nullifier)\n }));\n\n assert(discovered_notes.any(|discovered_note| {\n (discovered_note.note_nonce == second_note_and_data.note_nonce)\n & (discovered_note.note_hash == second_note_and_data.note_hash)\n & (discovered_note.inner_nullifier == second_note_and_data.inner_nullifier)\n }));\n }\n}\n"
789
+ "source": "use crate::messages::{discovery::ComputeNoteHashAndNullifier, logs::note::MAX_NOTE_PACKED_LEN};\n\nuse crate::protocol::{\n address::AztecAddress,\n constants::MAX_NOTE_HASHES_PER_TX,\n hash::{compute_note_hash_nonce, compute_siloed_note_hash, compute_unique_note_hash},\n logging::debug_log_format,\n traits::ToField,\n};\n\n/// A struct with the discovered information of a complete note, required for delivery to PXE. Note that this is *not*\n/// the complete note information, since it does not include content, storage slot, etc.\npub struct DiscoveredNoteInfo {\n pub note_nonce: Field,\n pub note_hash: Field,\n pub inner_nullifier: Field,\n}\n\n/// Searches for note nonces that will result in a note that was emitted in a transaction. While rare, it is possible\n/// for multiple notes to have the exact same packed content and storage slot but different nonces, resulting in\n/// different unique note hashes. Because of this this function returns a *vector* of discovered notes, though in most\n/// cases it will contain a single element.\n///\n/// Due to how nonces are computed, this function requires knowledge of the transaction in which the note was created,\n/// more specifically the list of all unique note hashes in it plus the value of its first nullifier.\npub unconstrained fn attempt_note_nonce_discovery<Env>(\n unique_note_hashes_in_tx: BoundedVec<Field, MAX_NOTE_HASHES_PER_TX>,\n first_nullifier_in_tx: Field,\n compute_note_hash_and_nullifier: ComputeNoteHashAndNullifier<Env>,\n contract_address: AztecAddress,\n owner: AztecAddress,\n storage_slot: Field,\n randomness: Field,\n note_type_id: Field,\n packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n) -> BoundedVec<DiscoveredNoteInfo, MAX_NOTE_HASHES_PER_TX> {\n let discovered_notes = &mut BoundedVec::new();\n\n debug_log_format(\n \"Attempting nonce discovery on {0} potential notes on contract {1} for storage slot {2}\",\n [unique_note_hashes_in_tx.len() as Field, contract_address.to_field(), storage_slot],\n );\n\n // We need to find nonces (typically just one) that result in a note hash that, once siloed into a unique note\n // hash, is one of the note hashes created by the transaction.\n unique_note_hashes_in_tx.for_eachi(|i, expected_unique_note_hash| {\n // Nonces are computed by hashing the first nullifier in the transaction with the index of the note in the new\n // note hashes array. We therefore know for each note in every transaction what its nonce is.\n let candidate_nonce = compute_note_hash_nonce(first_nullifier_in_tx, i);\n\n // Given note nonce, note content and metadata, we can compute the note hash and silo it to check if it matches\n // the note hash at the array index we're currently processing. TODO(#11157): handle failed\n // note_hash_and_nullifier computation\n let hashes = compute_note_hash_and_nullifier(\n packed_note,\n owner,\n storage_slot,\n note_type_id,\n contract_address,\n randomness,\n candidate_nonce,\n )\n .expect(f\"Failed to compute a note hash for note type {note_type_id}\");\n\n let siloed_note_hash = compute_siloed_note_hash(contract_address, hashes.note_hash);\n let unique_note_hash = compute_unique_note_hash(candidate_nonce, siloed_note_hash);\n\n if unique_note_hash == expected_unique_note_hash {\n // Note that while we did check that the note hash is the preimage of the expected unique note hash, we\n // perform no validations on the nullifier - we fundamentally cannot, since only the application knows how\n // to compute nullifiers. We simply trust it to have provided the correct one: if it hasn't, then PXE may\n // fail to realize that a given note has been nullified already, and calls to the application could result\n // in invalid transactions (with duplicate nullifiers). This is not a concern because an application\n // already has more direct means of making a call to it fail the transaction.\n discovered_notes.push(\n DiscoveredNoteInfo {\n note_nonce: candidate_nonce,\n note_hash: hashes.note_hash,\n // TODO: The None case will be handled in a followup PR.\n // https://linear.app/aztec-labs/issue/F-265/store-external-notes\n inner_nullifier: hashes.inner_nullifier.expect(\n f\"Failed to compute nullifier for note type {note_type_id}\",\n ),\n },\n );\n\n // We don't exit the loop - it is possible (though rare) for the exact same note content to be present\n // multiple times in the same transaction with different nonces. This typically doesn't happen due to notes\n // containing random values in order to hide their contents.\n }\n });\n\n debug_log_format(\n \"Found valid nonces for a total of {0} notes\",\n [discovered_notes.len() as Field],\n );\n\n *discovered_notes\n}\n\nmod test {\n use crate::{\n messages::{discovery::NoteHashAndNullifier, logs::note::MAX_NOTE_PACKED_LEN},\n note::{\n HintedNote,\n note_interface::{NoteHash, NoteType},\n note_metadata::SettledNoteMetadata,\n utils::compute_note_hash_for_nullification,\n },\n oracle::random::random,\n test::mocks::mock_note::MockNote,\n utils::array,\n };\n\n use crate::protocol::{\n address::AztecAddress,\n hash::{compute_note_hash_nonce, compute_siloed_note_hash, compute_unique_note_hash},\n traits::{FromField, Packable},\n };\n\n use super::attempt_note_nonce_discovery;\n\n // This implementation could be simpler, but this serves as a nice example of the expected flow in a real\n // implementation, and as a sanity check that the interface is sufficient.\n unconstrained fn compute_note_hash_and_nullifier(\n packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n owner: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n contract_address: AztecAddress,\n randomness: Field,\n note_nonce: Field,\n ) -> Option<NoteHashAndNullifier> {\n if note_type_id == MockNote::get_id() {\n let note = MockNote::unpack(array::subarray(packed_note.storage(), 0));\n let note_hash = note.compute_note_hash(owner, storage_slot, randomness);\n\n let note_hash_for_nullification = compute_note_hash_for_nullification(\n HintedNote {\n note,\n contract_address,\n owner,\n randomness,\n storage_slot,\n metadata: SettledNoteMetadata::new(note_nonce).into(),\n },\n );\n\n let inner_nullifier = note.compute_nullifier_unconstrained(owner, note_hash_for_nullification);\n\n Option::some(NoteHashAndNullifier { note_hash, inner_nullifier })\n } else {\n Option::none()\n }\n }\n\n global VALUE: Field = 7;\n global FIRST_NULLIFIER_IN_TX: Field = 47;\n global CONTRACT_ADDRESS: AztecAddress = AztecAddress::from_field(13);\n global OWNER: AztecAddress = AztecAddress::from_field(14);\n global STORAGE_SLOT: Field = 99;\n global RANDOMNESS: Field = 99;\n\n #[test]\n unconstrained fn no_note_hashes() {\n let unique_note_hashes_in_tx = BoundedVec::new();\n let packed_note = BoundedVec::new();\n\n let discovered_notes = attempt_note_nonce_discovery(\n unique_note_hashes_in_tx,\n FIRST_NULLIFIER_IN_TX,\n compute_note_hash_and_nullifier,\n CONTRACT_ADDRESS,\n OWNER,\n STORAGE_SLOT,\n RANDOMNESS,\n MockNote::get_id(),\n packed_note,\n );\n\n assert_eq(discovered_notes.len(), 0);\n }\n\n #[test(should_fail_with = \"Failed to compute a note hash\")]\n unconstrained fn failed_hash_computation() {\n let unique_note_hashes_in_tx = BoundedVec::from_array([random()]);\n let packed_note = BoundedVec::new();\n let note_type_id = 0; // This note type id is unknown to compute_note_hash_and_nullifier\n\n let discovered_notes = attempt_note_nonce_discovery(\n unique_note_hashes_in_tx,\n FIRST_NULLIFIER_IN_TX,\n compute_note_hash_and_nullifier,\n CONTRACT_ADDRESS,\n OWNER,\n STORAGE_SLOT,\n RANDOMNESS,\n note_type_id,\n packed_note,\n );\n\n assert_eq(discovered_notes.len(), 0);\n }\n\n struct NoteAndData {\n note: MockNote,\n note_nonce: Field,\n note_hash: Field,\n unique_note_hash: Field,\n inner_nullifier: Field,\n }\n\n unconstrained fn construct_note(value: Field, note_index_in_tx: u32) -> NoteAndData {\n let note_nonce = compute_note_hash_nonce(FIRST_NULLIFIER_IN_TX, note_index_in_tx);\n\n let hinted_note = MockNote::new(value)\n .contract_address(CONTRACT_ADDRESS)\n .owner(OWNER)\n .randomness(RANDOMNESS)\n .storage_slot(STORAGE_SLOT)\n .note_metadata(SettledNoteMetadata::new(note_nonce).into())\n .build_hinted_note();\n let note = hinted_note.note;\n\n let note_hash = note.compute_note_hash(OWNER, STORAGE_SLOT, RANDOMNESS);\n let unique_note_hash = compute_unique_note_hash(\n note_nonce,\n compute_siloed_note_hash(CONTRACT_ADDRESS, note_hash),\n );\n let inner_nullifier = note\n .compute_nullifier_unconstrained(OWNER, compute_note_hash_for_nullification(hinted_note))\n .expect(f\"Could not compute nullifier for note owned by {OWNER}\");\n\n NoteAndData { note, note_nonce, note_hash, unique_note_hash, inner_nullifier }\n }\n\n #[test]\n unconstrained fn single_note() {\n let note_index_in_tx = 2;\n let note_and_data = construct_note(VALUE, note_index_in_tx);\n\n let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n random(), random(), random(), random(), random(), random(), random(),\n ]);\n unique_note_hashes_in_tx.set(note_index_in_tx, note_and_data.unique_note_hash);\n\n let discovered_notes = attempt_note_nonce_discovery(\n unique_note_hashes_in_tx,\n FIRST_NULLIFIER_IN_TX,\n compute_note_hash_and_nullifier,\n CONTRACT_ADDRESS,\n OWNER,\n STORAGE_SLOT,\n RANDOMNESS,\n MockNote::get_id(),\n BoundedVec::from_array(note_and_data.note.pack()),\n );\n\n assert_eq(discovered_notes.len(), 1);\n let discovered_note = discovered_notes.get(0);\n\n assert_eq(discovered_note.note_nonce, note_and_data.note_nonce);\n assert_eq(discovered_note.note_hash, note_and_data.note_hash);\n assert_eq(discovered_note.inner_nullifier, note_and_data.inner_nullifier);\n }\n\n #[test]\n unconstrained fn multiple_notes_same_preimage() {\n let first_note_index_in_tx = 3;\n let first_note_and_data = construct_note(VALUE, first_note_index_in_tx);\n\n let second_note_index_in_tx = 5;\n let second_note_and_data = construct_note(VALUE, second_note_index_in_tx);\n\n // Both notes have the same preimage (and therefore packed representation), so both should be found in the same\n // call.\n assert_eq(first_note_and_data.note, second_note_and_data.note);\n let packed_note = first_note_and_data.note.pack();\n\n let mut unique_note_hashes_in_tx = BoundedVec::from_array([\n random(), random(), random(), random(), random(), random(), random(),\n ]);\n unique_note_hashes_in_tx.set(first_note_index_in_tx, first_note_and_data.unique_note_hash);\n unique_note_hashes_in_tx.set(second_note_index_in_tx, second_note_and_data.unique_note_hash);\n\n let discovered_notes = attempt_note_nonce_discovery(\n unique_note_hashes_in_tx,\n FIRST_NULLIFIER_IN_TX,\n compute_note_hash_and_nullifier,\n CONTRACT_ADDRESS,\n OWNER,\n STORAGE_SLOT,\n RANDOMNESS,\n MockNote::get_id(),\n BoundedVec::from_array(packed_note),\n );\n\n assert_eq(discovered_notes.len(), 2);\n\n assert(discovered_notes.any(|discovered_note| {\n (discovered_note.note_nonce == first_note_and_data.note_nonce)\n & (discovered_note.note_hash == first_note_and_data.note_hash)\n & (discovered_note.inner_nullifier == first_note_and_data.inner_nullifier)\n }));\n\n assert(discovered_notes.any(|discovered_note| {\n (discovered_note.note_nonce == second_note_and_data.note_nonce)\n & (discovered_note.note_hash == second_note_and_data.note_hash)\n & (discovered_note.inner_nullifier == second_note_and_data.inner_nullifier)\n }));\n }\n}\n"
790
790
  },
791
791
  "126": {
792
792
  "path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/messages/discovery/partial_notes.nr",
793
- "source": "use crate::{\n capsules::CapsuleArray,\n messages::{\n discovery::{ComputeNoteHashAndNullifier, nonce_discovery::attempt_note_nonce_discovery},\n encoding::MAX_MESSAGE_CONTENT_LEN,\n logs::partial_note::{decode_partial_note_private_message, MAX_PARTIAL_NOTE_PRIVATE_PACKED_LEN},\n processing::{\n enqueue_note_for_validation, get_pending_partial_notes_completion_logs,\n log_retrieval_response::LogRetrievalResponse,\n },\n },\n utils::array,\n};\n\nuse crate::protocol::{\n address::AztecAddress,\n debug_log::debug_log_format,\n hash::sha256_to_field,\n traits::{Deserialize, Serialize},\n};\n\n/// The slot in the PXE capsules where we store a `CapsuleArray` of `DeliveredPendingPartialNote`.\npub global DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT: Field = sha256_to_field(\n \"AZTEC_NR::DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT\".as_bytes(),\n);\n\n/// A partial note that was delivered but is still pending completion. Contains the information necessary to find the\n/// log that will complete it and lead to a note being discovered and delivered.\n#[derive(Serialize, Deserialize)]\npub(crate) struct DeliveredPendingPartialNote {\n pub(crate) owner: AztecAddress,\n pub(crate) storage_slot: Field,\n pub(crate) randomness: Field,\n pub(crate) note_completion_log_tag: Field,\n pub(crate) note_type_id: Field,\n pub(crate) packed_private_note_content: BoundedVec<Field, MAX_PARTIAL_NOTE_PRIVATE_PACKED_LEN>,\n pub(crate) recipient: AztecAddress,\n}\n\npub unconstrained fn process_partial_note_private_msg(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n msg_metadata: u64,\n msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n) {\n // We store the information of the partial note we found in a persistent capsule in PXE, so that we can later\n // search for the public log that will complete it.\n let (owner, storage_slot, randomness, note_completion_log_tag, note_type_id, packed_private_note_content) =\n decode_partial_note_private_message(msg_metadata, msg_content);\n\n let pending = DeliveredPendingPartialNote {\n owner,\n storage_slot,\n randomness,\n note_completion_log_tag,\n note_type_id,\n packed_private_note_content,\n recipient,\n };\n\n CapsuleArray::at(\n contract_address,\n DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT,\n )\n .push(pending);\n}\n\n/// Searches for logs that would result in the completion of pending partial notes, ultimately resulting in the notes\n/// being delivered to PXE if completed.\npub unconstrained fn fetch_and_process_partial_note_completion_logs<Env>(\n contract_address: AztecAddress,\n compute_note_hash_and_nullifier: ComputeNoteHashAndNullifier<Env>,\n) {\n let pending_partial_notes = CapsuleArray::at(\n contract_address,\n DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT,\n );\n\n debug_log_format(\n \"{} pending partial notes\",\n [pending_partial_notes.len() as Field],\n );\n\n // Each of the pending partial notes might get completed by a log containing its public values. For performance\n // reasons, we fetch all of these logs concurrently and then process them one by one, minimizing the amount of time\n // waiting for the node roundtrip.\n let maybe_completion_logs = get_pending_partial_notes_completion_logs(contract_address, pending_partial_notes);\n\n // Each entry in the maybe completion logs array corresponds to the entry in the pending partial notes array at the\n // same index. This means we can use the same index as we iterate through the responses to get both the partial\n // note and the log that might complete it.\n assert_eq(maybe_completion_logs.len(), pending_partial_notes.len());\n\n maybe_completion_logs.for_each(|i, maybe_log: Option<LogRetrievalResponse>| {\n // We clear the completion logs as we read them so that the array is empty by the time we next query it.\n // TODO(#14943): use volatile arrays to avoid having to manually clear this.\n maybe_completion_logs.remove(i);\n\n let pending_partial_note = pending_partial_notes.get(i);\n\n if maybe_log.is_none() {\n debug_log_format(\n \"Found no completion logs for partial note with tag {}\",\n [pending_partial_note.note_completion_log_tag],\n );\n\n // Note that we're not removing the pending partial note from the capsule array, so we will continue\n // searching for this tagged log when performing message discovery in the future until we either find it or\n // the entry is somehow removed from the array.\n } else {\n debug_log_format(\n \"Completion log found for partial note with tag {}\",\n [pending_partial_note.note_completion_log_tag],\n );\n let log = maybe_log.unwrap();\n\n // Public fields are assumed to all be placed at the end of the packed representation, so we combine the\n // private and public packed fields (i.e. the contents of the private message and public log plaintext to\n // get the complete packed content.\n let complete_packed_note = array::append(\n pending_partial_note.packed_private_note_content,\n log.log_payload,\n );\n\n let discovered_notes = attempt_note_nonce_discovery(\n log.unique_note_hashes_in_tx,\n log.first_nullifier_in_tx,\n compute_note_hash_and_nullifier,\n contract_address,\n pending_partial_note.owner,\n pending_partial_note.storage_slot,\n pending_partial_note.randomness,\n pending_partial_note.note_type_id,\n complete_packed_note,\n );\n\n // TODO(#11627): is there anything reasonable we can do if we get a log but it doesn't result in a note\n // being found?\n if discovered_notes.len() == 0 {\n panic(\n f\"A partial note's completion log did not result in any notes being found - this should never happen\",\n );\n }\n\n debug_log_format(\n \"Discovered {0} notes for partial note with tag {1}\",\n [discovered_notes.len() as Field, pending_partial_note.note_completion_log_tag],\n );\n\n discovered_notes.for_each(|discovered_note| {\n enqueue_note_for_validation(\n contract_address,\n pending_partial_note.owner,\n pending_partial_note.storage_slot,\n pending_partial_note.randomness,\n discovered_note.note_nonce,\n complete_packed_note,\n discovered_note.note_hash,\n discovered_note.inner_nullifier,\n log.tx_hash,\n pending_partial_note.recipient,\n );\n });\n\n // Because there is only a single log for a given tag, once we've processed the tagged log then we simply\n // delete the pending work entry, regardless of whether it was actually completed or not.\n pending_partial_notes.remove(i);\n }\n });\n}\n"
793
+ "source": "use crate::{\n capsules::CapsuleArray,\n messages::{\n discovery::{ComputeNoteHashAndNullifier, nonce_discovery::attempt_note_nonce_discovery},\n encoding::MAX_MESSAGE_CONTENT_LEN,\n logs::partial_note::{decode_partial_note_private_message, MAX_PARTIAL_NOTE_PRIVATE_PACKED_LEN},\n processing::{\n enqueue_note_for_validation, get_pending_partial_notes_completion_logs,\n log_retrieval_response::LogRetrievalResponse,\n },\n },\n utils::array,\n};\n\nuse crate::protocol::{\n address::AztecAddress,\n hash::sha256_to_field,\n logging::debug_log_format,\n traits::{Deserialize, Serialize},\n};\n\n/// The slot in the PXE capsules where we store a `CapsuleArray` of `DeliveredPendingPartialNote`.\npub global DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT: Field = sha256_to_field(\n \"AZTEC_NR::DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT\".as_bytes(),\n);\n\n/// A partial note that was delivered but is still pending completion. Contains the information necessary to find the\n/// log that will complete it and lead to a note being discovered and delivered.\n#[derive(Serialize, Deserialize)]\npub(crate) struct DeliveredPendingPartialNote {\n pub(crate) owner: AztecAddress,\n pub(crate) storage_slot: Field,\n pub(crate) randomness: Field,\n pub(crate) note_completion_log_tag: Field,\n pub(crate) note_type_id: Field,\n pub(crate) packed_private_note_content: BoundedVec<Field, MAX_PARTIAL_NOTE_PRIVATE_PACKED_LEN>,\n pub(crate) recipient: AztecAddress,\n}\n\npub unconstrained fn process_partial_note_private_msg(\n contract_address: AztecAddress,\n recipient: AztecAddress,\n msg_metadata: u64,\n msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n) {\n // We store the information of the partial note we found in a persistent capsule in PXE, so that we can later\n // search for the public log that will complete it.\n let (owner, storage_slot, randomness, note_completion_log_tag, note_type_id, packed_private_note_content) =\n decode_partial_note_private_message(msg_metadata, msg_content);\n\n let pending = DeliveredPendingPartialNote {\n owner,\n storage_slot,\n randomness,\n note_completion_log_tag,\n note_type_id,\n packed_private_note_content,\n recipient,\n };\n\n CapsuleArray::at(\n contract_address,\n DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT,\n )\n .push(pending);\n}\n\n/// Searches for logs that would result in the completion of pending partial notes, ultimately resulting in the notes\n/// being delivered to PXE if completed.\npub unconstrained fn fetch_and_process_partial_note_completion_logs<Env>(\n contract_address: AztecAddress,\n compute_note_hash_and_nullifier: ComputeNoteHashAndNullifier<Env>,\n) {\n let pending_partial_notes = CapsuleArray::at(\n contract_address,\n DELIVERED_PENDING_PARTIAL_NOTE_ARRAY_LENGTH_CAPSULES_SLOT,\n );\n\n debug_log_format(\n \"{} pending partial notes\",\n [pending_partial_notes.len() as Field],\n );\n\n // Each of the pending partial notes might get completed by a log containing its public values. For performance\n // reasons, we fetch all of these logs concurrently and then process them one by one, minimizing the amount of time\n // waiting for the node roundtrip.\n let maybe_completion_logs = get_pending_partial_notes_completion_logs(contract_address, pending_partial_notes);\n\n // Each entry in the maybe completion logs array corresponds to the entry in the pending partial notes array at the\n // same index. This means we can use the same index as we iterate through the responses to get both the partial\n // note and the log that might complete it.\n assert_eq(maybe_completion_logs.len(), pending_partial_notes.len());\n\n maybe_completion_logs.for_each(|i, maybe_log: Option<LogRetrievalResponse>| {\n // We clear the completion logs as we read them so that the array is empty by the time we next query it.\n // TODO(#14943): use volatile arrays to avoid having to manually clear this.\n maybe_completion_logs.remove(i);\n\n let pending_partial_note = pending_partial_notes.get(i);\n\n if maybe_log.is_none() {\n debug_log_format(\n \"Found no completion logs for partial note with tag {}\",\n [pending_partial_note.note_completion_log_tag],\n );\n\n // Note that we're not removing the pending partial note from the capsule array, so we will continue\n // searching for this tagged log when performing message discovery in the future until we either find it or\n // the entry is somehow removed from the array.\n } else {\n debug_log_format(\n \"Completion log found for partial note with tag {}\",\n [pending_partial_note.note_completion_log_tag],\n );\n let log = maybe_log.unwrap();\n\n // Public fields are assumed to all be placed at the end of the packed representation, so we combine the\n // private and public packed fields (i.e. the contents of the private message and public log plaintext to\n // get the complete packed content.\n let complete_packed_note = array::append(\n pending_partial_note.packed_private_note_content,\n log.log_payload,\n );\n\n let discovered_notes = attempt_note_nonce_discovery(\n log.unique_note_hashes_in_tx,\n log.first_nullifier_in_tx,\n compute_note_hash_and_nullifier,\n contract_address,\n pending_partial_note.owner,\n pending_partial_note.storage_slot,\n pending_partial_note.randomness,\n pending_partial_note.note_type_id,\n complete_packed_note,\n );\n\n // TODO(#11627): is there anything reasonable we can do if we get a log but it doesn't result in a note\n // being found?\n if discovered_notes.len() == 0 {\n panic(\n f\"A partial note's completion log did not result in any notes being found - this should never happen\",\n );\n }\n\n debug_log_format(\n \"Discovered {0} notes for partial note with tag {1}\",\n [discovered_notes.len() as Field, pending_partial_note.note_completion_log_tag],\n );\n\n discovered_notes.for_each(|discovered_note| {\n enqueue_note_for_validation(\n contract_address,\n pending_partial_note.owner,\n pending_partial_note.storage_slot,\n pending_partial_note.randomness,\n discovered_note.note_nonce,\n complete_packed_note,\n discovered_note.note_hash,\n discovered_note.inner_nullifier,\n log.tx_hash,\n pending_partial_note.recipient,\n );\n });\n\n // Because there is only a single log for a given tag, once we've processed the tagged log then we simply\n // delete the pending work entry, regardless of whether it was actually completed or not.\n pending_partial_notes.remove(i);\n }\n });\n}\n"
794
794
  },
795
795
  "127": {
796
796
  "path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/messages/discovery/private_events.nr",
@@ -798,11 +798,11 @@
798
798
  },
799
799
  "128": {
800
800
  "path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/messages/discovery/private_notes.nr",
801
- "source": "use crate::messages::{\n discovery::{ComputeNoteHashAndNullifier, nonce_discovery::attempt_note_nonce_discovery},\n encoding::MAX_MESSAGE_CONTENT_LEN,\n logs::note::{decode_private_note_message, MAX_NOTE_PACKED_LEN},\n processing::enqueue_note_for_validation,\n};\nuse crate::protocol::{address::AztecAddress, constants::MAX_NOTE_HASHES_PER_TX, debug_log::debug_log_format};\n\npub unconstrained fn process_private_note_msg<Env>(\n contract_address: AztecAddress,\n tx_hash: Field,\n unique_note_hashes_in_tx: BoundedVec<Field, MAX_NOTE_HASHES_PER_TX>,\n first_nullifier_in_tx: Field,\n recipient: AztecAddress,\n compute_note_hash_and_nullifier: ComputeNoteHashAndNullifier<Env>,\n msg_metadata: u64,\n msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n) {\n let (note_type_id, owner, storage_slot, randomness, packed_note) =\n decode_private_note_message(msg_metadata, msg_content);\n\n attempt_note_discovery(\n contract_address,\n tx_hash,\n unique_note_hashes_in_tx,\n first_nullifier_in_tx,\n recipient,\n compute_note_hash_and_nullifier,\n owner,\n storage_slot,\n randomness,\n note_type_id,\n packed_note,\n );\n}\n\n/// Attempts discovery of a note given information about its contents and the transaction in which it is suspected the\n/// note was created.\npub unconstrained fn attempt_note_discovery<Env>(\n contract_address: AztecAddress,\n tx_hash: Field,\n unique_note_hashes_in_tx: BoundedVec<Field, MAX_NOTE_HASHES_PER_TX>,\n first_nullifier_in_tx: Field,\n recipient: AztecAddress,\n compute_note_hash_and_nullifier: ComputeNoteHashAndNullifier<Env>,\n owner: AztecAddress,\n storage_slot: Field,\n randomness: Field,\n note_type_id: Field,\n packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n) {\n let discovered_notes = attempt_note_nonce_discovery(\n unique_note_hashes_in_tx,\n first_nullifier_in_tx,\n compute_note_hash_and_nullifier,\n contract_address,\n owner,\n storage_slot,\n randomness,\n note_type_id,\n packed_note,\n );\n\n debug_log_format(\n \"Discovered {0} notes from a private message\",\n [discovered_notes.len() as Field],\n );\n\n discovered_notes.for_each(|discovered_note| {\n enqueue_note_for_validation(\n contract_address,\n owner,\n storage_slot,\n randomness,\n discovered_note.note_nonce,\n packed_note,\n discovered_note.note_hash,\n discovered_note.inner_nullifier,\n tx_hash,\n recipient,\n );\n });\n}\n"
801
+ "source": "use crate::messages::{\n discovery::{ComputeNoteHashAndNullifier, nonce_discovery::attempt_note_nonce_discovery},\n encoding::MAX_MESSAGE_CONTENT_LEN,\n logs::note::{decode_private_note_message, MAX_NOTE_PACKED_LEN},\n processing::enqueue_note_for_validation,\n};\nuse crate::protocol::{address::AztecAddress, constants::MAX_NOTE_HASHES_PER_TX, logging::debug_log_format};\n\npub unconstrained fn process_private_note_msg<Env>(\n contract_address: AztecAddress,\n tx_hash: Field,\n unique_note_hashes_in_tx: BoundedVec<Field, MAX_NOTE_HASHES_PER_TX>,\n first_nullifier_in_tx: Field,\n recipient: AztecAddress,\n compute_note_hash_and_nullifier: ComputeNoteHashAndNullifier<Env>,\n msg_metadata: u64,\n msg_content: BoundedVec<Field, MAX_MESSAGE_CONTENT_LEN>,\n) {\n let (note_type_id, owner, storage_slot, randomness, packed_note) =\n decode_private_note_message(msg_metadata, msg_content);\n\n attempt_note_discovery(\n contract_address,\n tx_hash,\n unique_note_hashes_in_tx,\n first_nullifier_in_tx,\n recipient,\n compute_note_hash_and_nullifier,\n owner,\n storage_slot,\n randomness,\n note_type_id,\n packed_note,\n );\n}\n\n/// Attempts discovery of a note given information about its contents and the transaction in which it is suspected the\n/// note was created.\npub unconstrained fn attempt_note_discovery<Env>(\n contract_address: AztecAddress,\n tx_hash: Field,\n unique_note_hashes_in_tx: BoundedVec<Field, MAX_NOTE_HASHES_PER_TX>,\n first_nullifier_in_tx: Field,\n recipient: AztecAddress,\n compute_note_hash_and_nullifier: ComputeNoteHashAndNullifier<Env>,\n owner: AztecAddress,\n storage_slot: Field,\n randomness: Field,\n note_type_id: Field,\n packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n) {\n let discovered_notes = attempt_note_nonce_discovery(\n unique_note_hashes_in_tx,\n first_nullifier_in_tx,\n compute_note_hash_and_nullifier,\n contract_address,\n owner,\n storage_slot,\n randomness,\n note_type_id,\n packed_note,\n );\n\n debug_log_format(\n \"Discovered {0} notes from a private message\",\n [discovered_notes.len() as Field],\n );\n\n discovered_notes.for_each(|discovered_note| {\n enqueue_note_for_validation(\n contract_address,\n owner,\n storage_slot,\n randomness,\n discovered_note.note_nonce,\n packed_note,\n discovered_note.note_hash,\n discovered_note.inner_nullifier,\n tx_hash,\n recipient,\n );\n });\n}\n"
802
802
  },
803
803
  "129": {
804
804
  "path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/messages/discovery/process_message.nr",
805
- "source": "use crate::messages::{\n discovery::{\n ComputeNoteHashAndNullifier, partial_notes::process_partial_note_private_msg,\n private_events::process_private_event_msg, private_notes::process_private_note_msg,\n },\n encoding::{decode_message, MESSAGE_CIPHERTEXT_LEN, MESSAGE_PLAINTEXT_LEN},\n encryption::{aes128::AES128, message_encryption::MessageEncryption},\n msg_type::{PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID, PRIVATE_EVENT_MSG_TYPE_ID, PRIVATE_NOTE_MSG_TYPE_ID},\n processing::MessageContext,\n};\n\nuse crate::protocol::{address::AztecAddress, debug_log::{debug_log, debug_log_format}};\n\n/// Processes a message that can contain notes, partial notes, or events.\n///\n/// Notes result in nonce discovery being performed prior to delivery, which requires knowledge of the transaction hash\n/// in which the notes would've been created (typically the same transaction in which the log was emitted), along with\n/// the list of unique note hashes in said transaction and the `compute_note_hash_and_nullifier` function. Once\n/// discovered, the notes are enqueued for validation.\n///\n/// Partial notes result in a pending partial note entry being stored in a PXE capsule, which will later be retrieved\n/// to search for the note's completion public log.\n///\n/// Events are processed by computing an event commitment from the serialized event data and its randomness field, then\n/// enqueueing the event data and commitment for validation.\npub unconstrained fn process_message_ciphertext<Env>(\n contract_address: AztecAddress,\n compute_note_hash_and_nullifier: ComputeNoteHashAndNullifier<Env>,\n message_ciphertext: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN>,\n message_context: MessageContext,\n) {\n let message_plaintext_option = AES128::decrypt(message_ciphertext, message_context.recipient);\n\n if message_plaintext_option.is_some() {\n process_message_plaintext(\n contract_address,\n compute_note_hash_and_nullifier,\n message_plaintext_option.unwrap(),\n message_context,\n );\n } else {\n debug_log_format(\n \"Found invalid message from tx {0}, ignoring\",\n [message_context.tx_hash],\n );\n }\n}\n\npub unconstrained fn process_message_plaintext<Env>(\n contract_address: AztecAddress,\n compute_note_hash_and_nullifier: ComputeNoteHashAndNullifier<Env>,\n message_plaintext: BoundedVec<Field, MESSAGE_PLAINTEXT_LEN>,\n message_context: MessageContext,\n) {\n // The first thing to do after decrypting the message is to determine what type of message we're processing. We\n // have 3 message types: private notes, partial notes and events.\n\n // We decode the message to obtain the message type id, metadata and content.\n let (msg_type_id, msg_metadata, msg_content) = decode_message(message_plaintext);\n\n if msg_type_id == PRIVATE_NOTE_MSG_TYPE_ID {\n debug_log(\"Processing private note msg\");\n\n process_private_note_msg(\n contract_address,\n message_context.tx_hash,\n message_context.unique_note_hashes_in_tx,\n message_context.first_nullifier_in_tx,\n message_context.recipient,\n compute_note_hash_and_nullifier,\n msg_metadata,\n msg_content,\n );\n } else if msg_type_id == PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID {\n debug_log(\"Processing partial note private msg\");\n\n process_partial_note_private_msg(\n contract_address,\n message_context.recipient,\n msg_metadata,\n msg_content,\n );\n } else if msg_type_id == PRIVATE_EVENT_MSG_TYPE_ID {\n debug_log(\"Processing private event msg\");\n\n process_private_event_msg(\n contract_address,\n message_context.recipient,\n msg_metadata,\n msg_content,\n message_context.tx_hash,\n );\n } else {\n debug_log_format(\"Unknown msg type id {0}\", [msg_type_id as Field]);\n }\n}\n"
805
+ "source": "use crate::messages::{\n discovery::{\n ComputeNoteHashAndNullifier, partial_notes::process_partial_note_private_msg,\n private_events::process_private_event_msg, private_notes::process_private_note_msg,\n },\n encoding::{decode_message, MESSAGE_CIPHERTEXT_LEN, MESSAGE_PLAINTEXT_LEN},\n encryption::{aes128::AES128, message_encryption::MessageEncryption},\n msg_type::{PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID, PRIVATE_EVENT_MSG_TYPE_ID, PRIVATE_NOTE_MSG_TYPE_ID},\n processing::MessageContext,\n};\n\nuse crate::protocol::{address::AztecAddress, logging::{debug_log, debug_log_format}};\n\n/// Processes a message that can contain notes, partial notes, or events.\n///\n/// Notes result in nonce discovery being performed prior to delivery, which requires knowledge of the transaction hash\n/// in which the notes would've been created (typically the same transaction in which the log was emitted), along with\n/// the list of unique note hashes in said transaction and the `compute_note_hash_and_nullifier` function. Once\n/// discovered, the notes are enqueued for validation.\n///\n/// Partial notes result in a pending partial note entry being stored in a PXE capsule, which will later be retrieved\n/// to search for the note's completion public log.\n///\n/// Events are processed by computing an event commitment from the serialized event data and its randomness field, then\n/// enqueueing the event data and commitment for validation.\npub unconstrained fn process_message_ciphertext<Env>(\n contract_address: AztecAddress,\n compute_note_hash_and_nullifier: ComputeNoteHashAndNullifier<Env>,\n message_ciphertext: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN>,\n message_context: MessageContext,\n) {\n let message_plaintext_option = AES128::decrypt(message_ciphertext, message_context.recipient);\n\n if message_plaintext_option.is_some() {\n process_message_plaintext(\n contract_address,\n compute_note_hash_and_nullifier,\n message_plaintext_option.unwrap(),\n message_context,\n );\n } else {\n debug_log_format(\n \"Found invalid message from tx {0}, ignoring\",\n [message_context.tx_hash],\n );\n }\n}\n\npub unconstrained fn process_message_plaintext<Env>(\n contract_address: AztecAddress,\n compute_note_hash_and_nullifier: ComputeNoteHashAndNullifier<Env>,\n message_plaintext: BoundedVec<Field, MESSAGE_PLAINTEXT_LEN>,\n message_context: MessageContext,\n) {\n // The first thing to do after decrypting the message is to determine what type of message we're processing. We\n // have 3 message types: private notes, partial notes and events.\n\n // We decode the message to obtain the message type id, metadata and content.\n let (msg_type_id, msg_metadata, msg_content) = decode_message(message_plaintext);\n\n if msg_type_id == PRIVATE_NOTE_MSG_TYPE_ID {\n debug_log(\"Processing private note msg\");\n\n process_private_note_msg(\n contract_address,\n message_context.tx_hash,\n message_context.unique_note_hashes_in_tx,\n message_context.first_nullifier_in_tx,\n message_context.recipient,\n compute_note_hash_and_nullifier,\n msg_metadata,\n msg_content,\n );\n } else if msg_type_id == PARTIAL_NOTE_PRIVATE_MSG_TYPE_ID {\n debug_log(\"Processing partial note private msg\");\n\n process_partial_note_private_msg(\n contract_address,\n message_context.recipient,\n msg_metadata,\n msg_content,\n );\n } else if msg_type_id == PRIVATE_EVENT_MSG_TYPE_ID {\n debug_log(\"Processing private event msg\");\n\n process_private_event_msg(\n contract_address,\n message_context.recipient,\n msg_metadata,\n msg_content,\n message_context.tx_hash,\n );\n } else {\n debug_log_format(\"Unknown msg type id {0}\", [msg_type_id as Field]);\n }\n}\n"
806
806
  },
807
807
  "130": {
808
808
  "path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/messages/encoding.nr",
@@ -896,14 +896,14 @@
896
896
  "path": "std/array/mod.nr",
897
897
  "source": "use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl<T, let N: u32> [T; N] {\n /// Returns the length of this array.\n ///\n /// ```noir\n /// fn len(self) -> Field\n /// ```\n ///\n /// example\n ///\n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a vector.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let vector = array.as_vector();\n /// assert_eq(vector, [1, 2].as_vector());\n /// ```\n #[builtin(as_vector)]\n pub fn as_vector(self) -> [T] {}\n\n /// Returns this array as a vector.\n /// This method is deprecated in favor of `as_vector`.\n ///\n /// ```noir\n /// let array = [1, 2];\n /// let vector = array.as_slice();\n /// assert_eq(vector, [1, 2].as_vector());\n /// ```\n #[builtin(as_vector)]\n #[deprecated(\"This method has been renamed to `as_vector`\")]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array along with its index,\n /// returning a new array containing the mapped elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.mapi(|i, a| i + a * 2);\n /// assert_eq(b, [2, 5, 8]);\n /// ```\n pub fn mapi<U, Env>(self, f: fn[Env](u32, T) -> U) -> [U; N] {\n let uninitialized = crate::mem::zeroed();\n let mut ret = [uninitialized; N];\n\n for i in 0..self.len() {\n ret[i] = f(i, self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of this array.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// let mut i = 0;\n /// a.for_each(|x| {\n /// b[i] = x;\n /// i += 1;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_each<Env>(self, f: fn[Env](T) -> ()) {\n for i in 0..self.len() {\n f(self[i]);\n }\n }\n\n /// Applies a function to each element of this array along with its index.\n ///\n /// Example:\n ///\n /// ```rust\n /// let a = [1, 2, 3];\n /// let mut b = [0; 3];\n /// a.for_eachi(|i, x| {\n /// b[i] = x;\n /// });\n /// assert_eq(a, b);\n /// ```\n pub fn for_eachi<Env>(self, f: fn[Env](u32, T) -> ()) {\n for i in 0..self.len() {\n f(i, self[i]);\n }\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n ///\n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n ///\n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n ///\n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n ///\n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n ///\n /// Requires the input array to be non-empty.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n\n /// Concatenates this array with another array.\n ///\n /// Example:\n ///\n /// ```noir\n /// fn main() {\n /// let arr1 = [1, 2, 3, 4];\n /// let arr2 = [6, 7, 8, 9, 10, 11];\n /// let concatenated_arr = arr1.concat(arr2);\n /// assert(concatenated_arr == [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n /// }\n /// ```\n pub fn concat<let M: u32>(self, array2: [T; M]) -> [T; N + M] {\n let mut result = [crate::mem::zeroed(); N + M];\n for i in 0..N {\n result[i] = self[i];\n }\n for i in 0..M {\n result[i + N] = array2[i];\n }\n result\n }\n}\n\nimpl<T, let N: u32> [T; N]\nwhere\n T: Ord + Eq,\n{\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the [`Self::sort_via`] function.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a, b| a <= b)\n }\n}\n\nimpl<T, let N: u32> [T; N]\nwhere\n T: Eq,\n{\n /// Returns a new sorted array by sorting it with a custom comparison function.\n /// The original array remains untouched.\n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n ///\n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n ///\n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = unsafe { quicksort::quicksort(self, ordering) };\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]),\n \"Array has not been sorted correctly according to `ordering`.\",\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n}\n\nimpl<let N: u32> [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n ///\n /// Example:\n ///\n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str<N> {}\n}\n\nimpl<let N: u32> From<str<N>> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str<N>) -> Self {\n s.as_bytes()\n }\n}\n\nmod test {\n #[test]\n fn map_empty() {\n assert_eq([].map(|x| x + 1), []);\n }\n\n global arr_with_100_values: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2, 54,\n 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41, 19, 98,\n 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21, 43, 86, 35,\n 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15, 127, 81, 30, 8,\n 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n global expected_with_100_values: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30, 32,\n 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58, 61, 62,\n 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82, 84, 84, 86,\n 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114, 114, 116, 118,\n 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n fn sort_u32(a: u32, b: u32) -> bool {\n a <= b\n }\n\n #[test]\n fn test_sort() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort();\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort();\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_100_values_comptime() {\n let sorted = arr_with_100_values.sort();\n assert(sorted == expected_with_100_values);\n }\n\n #[test]\n fn test_sort_via() {\n let mut arr: [u32; 7] = [3, 6, 8, 10, 1, 2, 1];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 7] = [1, 1, 2, 3, 6, 8, 10];\n assert(sorted == expected);\n }\n\n #[test]\n fn test_sort_via_100_values() {\n let mut arr: [u32; 100] = [\n 42, 123, 87, 93, 48, 80, 50, 5, 104, 84, 70, 47, 119, 66, 71, 121, 3, 29, 42, 118, 2,\n 54, 89, 44, 81, 0, 26, 106, 68, 96, 84, 48, 95, 54, 45, 32, 89, 100, 109, 19, 37, 41,\n 19, 98, 53, 114, 107, 66, 6, 74, 13, 19, 105, 64, 123, 28, 44, 50, 89, 58, 123, 126, 21,\n 43, 86, 35, 21, 62, 82, 0, 108, 120, 72, 72, 62, 80, 12, 71, 70, 86, 116, 73, 38, 15,\n 127, 81, 30, 8, 125, 28, 26, 69, 114, 63, 27, 28, 61, 42, 13, 32,\n ];\n\n let sorted = arr.sort_via(sort_u32);\n\n let expected: [u32; 100] = [\n 0, 0, 2, 3, 5, 6, 8, 12, 13, 13, 15, 19, 19, 19, 21, 21, 26, 26, 27, 28, 28, 28, 29, 30,\n 32, 32, 35, 37, 38, 41, 42, 42, 42, 43, 44, 44, 45, 47, 48, 48, 50, 50, 53, 54, 54, 58,\n 61, 62, 62, 63, 64, 66, 66, 68, 69, 70, 70, 71, 71, 72, 72, 73, 74, 80, 80, 81, 81, 82,\n 84, 84, 86, 86, 87, 89, 89, 89, 93, 95, 96, 98, 100, 104, 105, 106, 107, 108, 109, 114,\n 114, 116, 118, 119, 120, 121, 123, 123, 123, 125, 126, 127,\n ];\n assert(sorted == expected);\n }\n\n #[test]\n fn mapi_empty() {\n assert_eq([].mapi(|i, x| i * x + 1), []);\n }\n\n #[test]\n fn for_each_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_each(|_x| assert(false));\n }\n\n #[test]\n fn for_eachi_empty() {\n let empty_array: [Field; 0] = [];\n empty_array.for_eachi(|_i, _x| assert(false));\n }\n\n #[test]\n fn map_example() {\n let a = [1, 2, 3];\n let b = a.map(|a| a * 2);\n assert_eq(b, [2, 4, 6]);\n }\n\n #[test]\n fn mapi_example() {\n let a = [1, 2, 3];\n let b = a.mapi(|i, a| i + a * 2);\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn for_each_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n let mut i = 0;\n let i_ref = &mut i;\n a.for_each(|x| {\n b_ref[*i_ref] = x * 2;\n *i_ref += 1;\n });\n assert_eq(b, [2, 4, 6]);\n assert_eq(i, 3);\n }\n\n #[test]\n fn for_eachi_example() {\n let a = [1, 2, 3];\n let mut b = [0, 0, 0];\n let b_ref = &mut b;\n a.for_eachi(|i, a| { b_ref[i] = i + a * 2; });\n assert_eq(b, [2, 5, 8]);\n }\n\n #[test]\n fn concat() {\n let arr1 = [1, 2, 3, 4];\n let arr2 = [6, 7, 8, 9, 10, 11];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]);\n }\n\n #[test]\n fn concat_zero_length_with_something() {\n let arr1 = [];\n let arr2 = [1];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_something_with_zero_length() {\n let arr1 = [1];\n let arr2 = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, [1]);\n }\n\n #[test]\n fn concat_zero_lengths() {\n let arr1: [Field; 0] = [];\n let arr2: [Field; 0] = [];\n let concatenated_arr = arr1.concat(arr2);\n assert_eq(concatenated_arr, []);\n }\n}\n"
898
898
  },
899
- "341": {
900
- "path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr",
901
- "source": "// TODO: Expose other wrapped functions than debug (info, warn)\n// ['silent', 'fatal', 'error', 'warn', 'info', 'verbose', 'debug', 'trace']\n\npub global SILENT_LOG_LEVEL: u8 = 0;\npub global FATAL_LOG_LEVEL: u8 = 1;\npub global ERROR_LOG_LEVEL: u8 = 2;\npub global WARN_LOG_LEVEL: u8 = 3;\npub global INFO_LOG_LEVEL: u8 = 4;\npub global VERBOSE_LOG_LEVEL: u8 = 5;\npub global DEBUG_LOG_LEVEL: u8 = 6;\npub global TRACE_LOG_LEVEL: u8 = 7;\n\n/// Utility function to console.log data in the acir simulator.\n/// Example:\n/// debug_log(\"blah blah this is a debug string\");\npub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n\n/// Same as debug_log, but allows to customize the log level.\n/// Consider changing just to 'log'\npub fn debug_log_with_level<let N: u32>(log_level: u8, msg: str<N>) {\n debug_log_format_with_level(log_level, msg, []);\n}\n\n/// Utility function to console.log data in the acir simulator. This variant receives a format string in which the\n/// `${k}` tokens will be replaced with the k-eth value in the `args` array.\n/// Examples:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\npub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n // Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n // to call.\n unsafe { debug_log_array_oracle_wrapper(DEBUG_LOG_LEVEL, msg, args) };\n}\n\n/// Same as debug_log_format, but allows to customize the log level.\n/// Consider changing just to 'log_format'\npub fn debug_log_format_with_level<let M: u32, let N: u32>(\n log_level: u8,\n msg: str<M>,\n args: [Field; N],\n) {\n // Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n // to call.\n unsafe { debug_log_array_oracle_wrapper(log_level, msg, args) };\n}\n\n/// Utility function to console.log data in the acir simulator. This variant receives a format string in which the\n/// `${k}` tokens will be replaced with the k-eth value in the `args` slice.\n/// Examples:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole slice: {}\", [e1, e2, e3, e4]);\npub fn debug_log_format_slice<let M: u32>(log_level: u8, msg: str<M>, args: [Field]) {\n // Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n // to call.\n unsafe { debug_log_slice_oracle_wrapper(log_level, msg, args) };\n}\n\n// We provide two versions of the debug log oracle: one that takes args as a slice and another one that takes args as an array.\n// We do this since conversion from array to slice generates overhead in public functions, since opcodes need to be emitted for the conversion.\n// By exposing the two flavors, we avoid conversions since the AVM is able to handle both arrays an slices in this oracle.\n\nunconstrained fn debug_log_slice_oracle_wrapper<let M: u32>(\n log_level: u8,\n msg: str<M>,\n args: [Field],\n) {\n debug_log_slice_oracle(log_level, msg, args);\n}\n\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n#[oracle(utilityDebugLog)]\nunconstrained fn debug_log_slice_oracle<let M: u32>(log_level: u8, msg: str<M>, args: [Field]) {}\n\nunconstrained fn debug_log_array_oracle_wrapper<let M: u32, let N: u32>(\n log_level: u8,\n msg: str<M>,\n args: [Field; N],\n) {\n debug_log_array_oracle(log_level, msg, N, args);\n}\n\n#[oracle(utilityDebugLog)]\nunconstrained fn debug_log_array_oracle<let M: u32, let N: u32>(\n log_level: u8,\n msg: str<M>,\n length: u32,\n args: [Field; N],\n) {}\n"
902
- },
903
- "351": {
899
+ "350": {
904
900
  "path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr",
905
901
  "source": "mod poseidon2_chunks;\n\nuse crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector,\n note_hash::NoteHash,\n nullifier::Nullifier,\n private_log::{PrivateLog, PrivateLogData},\n transaction::tx_request::TxRequest,\n },\n address::{AztecAddress, EthAddress},\n constants::{\n CONTRACT_CLASS_LOG_SIZE_IN_FIELDS, DOM_SEP__NOTE_HASH_NONCE,\n DOM_SEP__PRIVATE_LOG_FIRST_FIELD, DOM_SEP__SILOED_NOTE_HASH, DOM_SEP__SILOED_NULLIFIER,\n DOM_SEP__UNIQUE_NOTE_HASH, FUNCTION_TREE_HEIGHT, NULL_MSG_SENDER_CONTRACT_ADDRESS,\n TWO_POW_64,\n },\n merkle_tree::root_from_sibling_path,\n messaging::l2_to_l1_message::L2ToL1Message,\n poseidon2::Poseidon2Sponge,\n side_effect::{Counted, Scoped},\n traits::{FromField, Hash, ToField},\n utils::field::{field_from_bytes, field_from_bytes_32_trunc},\n};\n\npub use poseidon2_chunks::poseidon2_absorb_in_chunks_existing_sponge;\nuse poseidon2_chunks::poseidon2_absorb_in_chunks;\nuse std::embedded_curve_ops::EmbeddedCurveScalar;\n\n// TODO: refactor these into their own files: sha256, poseidon2, some protocol-specific hash computations, some merkle computations.\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = sha256::digest(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT],\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(\n function_leaf,\n function_leaf_index,\n function_leaf_sibling_path,\n )\n}\n\npub fn compute_note_hash_nonce(first_nullifier_in_tx: Field, note_index_in_tx: u32) -> Field {\n // Hashing the first nullifier with note index in tx is guaranteed to be unique (because all nullifiers are also\n // unique).\n poseidon2_hash_with_separator(\n [first_nullifier_in_tx, note_index_in_tx as Field],\n DOM_SEP__NOTE_HASH_NONCE,\n )\n}\n\npub fn compute_unique_note_hash(note_nonce: Field, siloed_note_hash: Field) -> Field {\n let inputs = [note_nonce, siloed_note_hash];\n poseidon2_hash_with_separator(inputs, DOM_SEP__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_note_nonce_and_unique_note_hash(\n siloed_note_hash: Field,\n first_nullifier: Field,\n note_index_in_tx: u32,\n) -> Field {\n let note_nonce = compute_note_hash_nonce(first_nullifier, note_index_in_tx);\n compute_unique_note_hash(note_nonce, siloed_note_hash)\n}\n\npub fn compute_siloed_note_hash(contract_address: AztecAddress, note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [contract_address.to_field(), note_hash],\n DOM_SEP__SILOED_NOTE_HASH,\n )\n}\n\n/// Computes unique, siloed note hashes from siloed note hashes.\n///\n/// The protocol injects uniqueness into every note_hash, so that every single note_hash in the\n/// tree is unique. This prevents faerie gold attacks, where a malicious sender could create\n/// two identical note_hashes for a recipient (meaning only one would be nullifiable in future).\n///\n/// Most privacy protocols will inject the note's leaf_index (its position in the Note Hashes Tree)\n/// into the note, but this requires the creator of a note to wait until their tx is included in\n/// a block to know the note's final note hash (the unique, siloed note hash), because inserting\n/// leaves into trees is the job of a block producer.\n///\n/// We took a different approach so that the creator of a note will know each note's unique, siloed\n/// note hash before broadcasting their tx to the network.\n/// (There was also a historical requirement relating to \"chained transactions\" -- a feature that\n/// Aztec Connect had to enable notes to be spent from distinct txs earlier in the same block,\n/// and hence before an archive block root had been established for that block -- but that feature\n/// was abandoned for the Aztec Network for having too many bad tradeoffs).\n///\n/// (\n/// Edit: it is no longer true that all final note_hashes will be known by the creator of a tx\n/// before they send it to the network. If a tx makes public function calls, then _revertible_\n/// note_hashes that are created in private will not be made unique in private by the Reset circuit,\n/// but will instead be made unique by the AVM, because the `note_index_in_tx` will not be known\n/// until the AVM has executed the public functions of the tx. (See an explanation in\n/// reset_output_composer.nr for why).\n/// For some such txs, the `note_index_in_tx` might still be predictable through simulation, but\n/// for txs whose public functions create a varying number of non-revertible notes (determined at\n/// runtime), the `note_index_in_tx` will not be deterministically derivable before submitting the\n/// tx to the network.\n/// )\n///\n/// We use the `first_nullifier` of a tx as a seed of uniqueness. We have a guarantee that there will\n/// always be at least one nullifier per tx, because the init circuit will create one if one isn't\n/// created naturally by any functions of the tx. (Search \"protocol_nullifier\").\n/// We combine the `first_nullifier` with the note's index (its position within this tx's new\n/// note_hashes array) (`note_index_in_tx`) to get a truly unique value to inject into a note, which\n/// we call a `note_nonce`.\npub fn compute_unique_siloed_note_hash(\n siloed_note_hash: Field,\n first_nullifier: Field,\n note_index_in_tx: u32,\n) -> Field {\n if siloed_note_hash == 0 {\n 0\n } else {\n compute_note_nonce_and_unique_note_hash(siloed_note_hash, first_nullifier, note_index_in_tx)\n }\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: Scoped<Counted<NoteHash>>) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_note_hash(note_hash.contract_address, note_hash.innermost())\n }\n}\n\npub fn compute_siloed_nullifier(contract_address: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [contract_address.to_field(), nullifier],\n DOM_SEP__SILOED_NULLIFIER,\n )\n}\n\npub fn silo_nullifier(nullifier: Scoped<Counted<Nullifier>>) -> Field {\n let value = nullifier.innermost().value;\n // Q: shouldn't we be checking whether the _whole_ scoped, counted, nullifier struct is empty?\n // A: We don't have to. The init and inner circuits add a contract address only to non-empty nullifiers.\n // So we know we should silo it if the contract address is not empty.\n if nullifier.contract_address.is_zero() {\n // Return `.value` instead of 0, because already-siloed nullifiers also have a zero\n // contract_address field, and we of course want to return that already-siloed nullifier\n // (we just don't want to silo it a second time).\n value\n } else {\n compute_siloed_nullifier(nullifier.contract_address, value)\n }\n}\n\npub fn create_protocol_nullifier(tx_request: TxRequest) -> Scoped<Counted<Nullifier>> {\n // The protocol nullifier is ascribed a special side-effect counter of 1. No other side-effect\n // can have counter 1 (see `validate_as_first_call` for that assertion).\n Nullifier { value: tx_request.hash(), note_hash: 0 }.count(1).scope(\n NULL_MSG_SENDER_CONTRACT_ADDRESS,\n )\n}\n\npub fn compute_siloed_private_log_first_field(\n contract_address: AztecAddress,\n field: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [contract_address.to_field(), field],\n DOM_SEP__PRIVATE_LOG_FIRST_FIELD,\n )\n}\n\npub fn silo_private_log(private_log: Scoped<Counted<PrivateLogData>>) -> PrivateLog {\n let log = private_log.innermost().log;\n if private_log.contract_address.is_zero() {\n log\n } else {\n let mut fields = log.fields;\n fields[0] = compute_siloed_private_log_first_field(private_log.contract_address, fields[0]);\n PrivateLog::new(fields, log.length)\n }\n}\n\npub fn compute_contract_class_log_hash(log: [Field; CONTRACT_CLASS_LOG_SIZE_IN_FIELDS]) -> Field {\n poseidon2_hash(log)\n}\n\npub fn compute_app_siloed_secret_key(\n master_secret_key: EmbeddedCurveScalar,\n app_address: AztecAddress,\n app_secret_key_domain_separator: Field,\n) -> Field {\n poseidon2_hash_with_separator(\n [master_secret_key.hi, master_secret_key.lo, app_address.to_field()],\n app_secret_key_domain_separator,\n )\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n let contract_address_bytes: [u8; 32] = contract_address.to_field().to_be_bytes();\n let recipient_bytes: [u8; 20] = recipient.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let rollup_version_id_bytes: [u8; 32] = rollup_version_id.to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n\n let mut bytes: [u8; 148] = std::mem::zeroed();\n for i in 0..32 {\n bytes[i] = contract_address_bytes[i];\n bytes[i + 32] = rollup_version_id_bytes[i];\n // 64 - 84 are for recipient.\n bytes[i + 84] = chain_id_bytes[i];\n bytes[i + 116] = content_bytes[i];\n }\n\n for i in 0..20 {\n bytes[64 + i] = recipient_bytes[i];\n }\n\n sha256_to_field(bytes)\n}\n\npub fn silo_l2_to_l1_message(\n msg: Scoped<L2ToL1Message>,\n rollup_version_id: Field,\n chain_id: Field,\n) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.inner.recipient,\n msg.inner.content,\n rollup_version_id,\n chain_id,\n )\n }\n}\n\n// TODO: consider a variant that enables domain separation with a u32 (we seem to have standardised u32s for domain separators)\n/// Computes sha256 hash of 2 input fields.\n///\n/// @returns A truncated field (i.e., the first byte is always 0).\npub fn accumulate_sha256(v0: Field, v1: Field) -> Field {\n // Concatenate two fields into 32 x 2 = 64 bytes\n let v0_as_bytes: [u8; 32] = v0.to_be_bytes();\n let v1_as_bytes: [u8; 32] = v1.to_be_bytes();\n let hash_input_flattened = v0_as_bytes.concat(v1_as_bytes);\n\n sha256_to_field(hash_input_flattened)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n poseidon::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(inputs: [Field; N], separator: T) -> Field\nwhere\n T: ToField,\n{\n let inputs_with_separator = [separator.to_field()].concat(inputs);\n poseidon2_hash(inputs_with_separator)\n}\n\n/// Computes a Poseidon2 hash over a dynamic-length subarray of the given input.\n/// Only the first `in_len` fields of `input` are absorbed; any remaining fields are ignored.\n/// The caller is responsible for ensuring that the input is padded with zeros if required.\n#[no_predicates]\npub fn poseidon2_hash_subarray<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_in_chunks(input, in_len);\n sponge.squeeze()\n}\n\n// NB the below is the same as poseidon::poseidon2::Poseidon2::hash(), but replacing a range check with a bit check,\n// and absorbing in chunks of 3 below.\n#[no_predicates]\npub fn poseidon2_cheaper_variable_hash<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let mut sponge = poseidon2_absorb_in_chunks(input, in_len);\n sponge.squeeze()\n}\n\n// This function is unconstrained because it is intended to be used in unconstrained context only as\n// in constrained contexts it would be too inefficient.\npub unconstrained fn poseidon2_hash_with_separator_bounded_vec<let N: u32, T>(\n inputs: BoundedVec<Field, N>,\n separator: T,\n) -> Field\nwhere\n T: ToField,\n{\n let in_len = inputs.len() + 1;\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs.get(i));\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n let mut fields = [0; (N + 30) / 31];\n let mut field_index = 0;\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n fields[field_index] = field_from_bytes(current_field, false);\n current_field = [0; 31];\n field_index += 1;\n }\n }\n if field_index != fields.len() {\n fields[field_index] = field_from_bytes(current_field, false);\n }\n poseidon2_hash(fields)\n}\n\n#[test]\nfn poseidon_chunks_matches_fixed() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n let mut fixed_input = [3; 501];\n assert(in_len == fixed_input.len()); // sanity check\n for i in 0..in_len {\n input[i] = 3;\n }\n let sub_chunk_hash = poseidon2_hash_subarray(input, in_len);\n let fixed_len_hash = poseidon::poseidon2::Poseidon2::hash(fixed_input, fixed_input.len());\n assert(sub_chunk_hash == fixed_len_hash);\n}\n\n#[test]\nfn poseidon_chunks_matches_variable() {\n let in_len = 501;\n let mut input: [Field; 4096] = [0; 4096];\n for i in 0..in_len {\n input[i] = 3;\n }\n let variable_chunk_hash = poseidon2_cheaper_variable_hash(input, in_len);\n let variable_len_hash = poseidon::poseidon2::Poseidon2::hash(input, in_len);\n assert(variable_chunk_hash == variable_len_hash);\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,\n 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,\n 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,\n 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,\n 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,\n 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = sha256::digest(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result =\n compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0x3b18c58c739716e76429634a61375c45b3b5cd470c22ab6d3e14cee23dd992);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(\n AztecAddress::from_field(1),\n EthAddress::from_field(3),\n 5,\n 2,\n 4,\n );\n assert(hash_result == 0xaab2a5828156782b12a1dc6f336e2bc627eb1b9514b02d511f66296990c050);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n L2ToL1Message { recipient: EthAddress::from_field(1), content: 2 }.scope(\n AztecAddress::from_field(3),\n ),\n version,\n chainId,\n );\n\n // The following value was generated by `yarn-project/stdlib/src/hash/hash.test.ts`\n let l2_to_l1_message_hash_from_ts =\n 0x0081edf209e087ad31b3fd24263698723d57190bd1d6e9fe056fc0c0a68ee661;\n\n assert_eq(hash, l2_to_l1_message_hash_from_ts);\n}\n\n#[test]\nunconstrained fn poseidon2_hash_with_separator_bounded_vec_matches_non_bounded_vec_version() {\n let inputs = BoundedVec::<Field, 4>::from_array([1, 2, 3]);\n let separator = 42;\n\n // Hash using bounded vec version\n let bounded_result = poseidon2_hash_with_separator_bounded_vec(inputs, separator);\n\n // Hash using regular version\n let regular_result = poseidon2_hash_with_separator([1, 2, 3], separator);\n\n // Results should match\n assert_eq(bounded_result, regular_result);\n}\n"
906
902
  },
903
+ "352": {
904
+ "path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/logging.nr",
905
+ "source": "// Log levels matching the JS logger:\n\n// global SILENT_LOG_LEVEL: u8 = 0;\nglobal FATAL_LOG_LEVEL: u8 = 1;\nglobal ERROR_LOG_LEVEL: u8 = 2;\nglobal WARN_LOG_LEVEL: u8 = 3;\nglobal INFO_LOG_LEVEL: u8 = 4;\nglobal VERBOSE_LOG_LEVEL: u8 = 5;\nglobal DEBUG_LOG_LEVEL: u8 = 6;\nglobal TRACE_LOG_LEVEL: u8 = 7;\n\n// --- Per-level log functions (no format args) ---\n\npub fn fatal_log<let N: u32>(msg: str<N>) {\n fatal_log_format(msg, []);\n}\n\npub fn error_log<let N: u32>(msg: str<N>) {\n error_log_format(msg, []);\n}\n\npub fn warn_log<let N: u32>(msg: str<N>) {\n warn_log_format(msg, []);\n}\n\npub fn info_log<let N: u32>(msg: str<N>) {\n info_log_format(msg, []);\n}\n\npub fn verbose_log<let N: u32>(msg: str<N>) {\n verbose_log_format(msg, []);\n}\n\npub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n\npub fn trace_log<let N: u32>(msg: str<N>) {\n trace_log_format(msg, []);\n}\n\n// --- Per-level log functions (with format args) ---\n\npub fn fatal_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n log_format(FATAL_LOG_LEVEL, msg, args);\n}\n\npub fn error_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n log_format(ERROR_LOG_LEVEL, msg, args);\n}\n\npub fn warn_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n log_format(WARN_LOG_LEVEL, msg, args);\n}\n\npub fn info_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n log_format(INFO_LOG_LEVEL, msg, args);\n}\n\npub fn verbose_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n log_format(VERBOSE_LOG_LEVEL, msg, args);\n}\n\npub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n log_format(DEBUG_LOG_LEVEL, msg, args);\n}\n\npub fn trace_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n log_format(TRACE_LOG_LEVEL, msg, args);\n}\n\nfn log_format<let M: u32, let N: u32>(log_level: u8, msg: str<M>, args: [Field; N]) {\n // Safety: This oracle call returns nothing: we only call it for its side effects. It is therefore always safe\n // to call.\n unsafe { log_oracle_wrapper(log_level, msg, args) };\n}\n\nunconstrained fn log_oracle_wrapper<let M: u32, let N: u32>(\n log_level: u8,\n msg: str<M>,\n args: [Field; N],\n) {\n log_oracle(log_level, msg, N, args);\n}\n\n#[oracle(utilityLog)]\nunconstrained fn log_oracle<let M: u32, let N: u32>(\n log_level: u8,\n msg: str<M>,\n length: u32,\n args: [Field; N],\n) {}\n"
906
+ },
907
907
  "367": {
908
908
  "path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/poseidon2.nr",
909
909
  "source": "use crate::constants::TWO_POW_64;\nuse crate::traits::{Deserialize, Serialize};\nuse std::meta::derive;\n// NB: This is a clone of noir/noir-repo/noir_stdlib/src/hash/poseidon2.nr\n// It exists as we sometimes need to perform custom absorption, but the stdlib version\n// has a private absorb() method (it's also designed to just be a hasher)\n// Can be removed when standalone noir poseidon lib exists: See noir#6679\n\ncomptime global RATE: u32 = 3;\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct Poseidon2Sponge {\n pub cache: [Field; 3],\n pub state: [Field; 4],\n pub cache_size: u32,\n pub squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2Sponge {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n Poseidon2Sponge::hash_internal(input, message_size, message_size != N)\n }\n\n pub(crate) fn new(iv: Field) -> Poseidon2Sponge {\n let mut result =\n Poseidon2Sponge { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = std::hash::poseidon2_permutation(self.state, 4);\n }\n\n pub fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n pub fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(\n input: [Field; N],\n in_len: u32,\n is_variable_length: bool,\n ) -> Field {\n let iv: Field = (in_len as Field) * TWO_POW_64;\n let mut sponge = Poseidon2Sponge::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n sponge.squeeze()\n }\n}\n"