@aztec/accounts 4.2.0-rc.1 → 4.3.0-nightly.20260416

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.
@@ -3901,7 +3901,7 @@
3901
3901
  }
3902
3902
  },
3903
3903
  "bytecode": "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",
3904
- "debug_symbols": "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"
3904
+ "debug_symbols": "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"
3905
3905
  },
3906
3906
  {
3907
3907
  "name": "verify_private_authwit",
@@ -8094,25 +8094,29 @@
8094
8094
  },
8095
8095
  "185": {
8096
8096
  "function_locations": [
8097
+ {
8098
+ "name": "RawNullifierMembershipWitness::into_split",
8099
+ "start": 882
8100
+ },
8097
8101
  {
8098
8102
  "name": "get_low_nullifier_membership_witness_oracle",
8099
- "start": 586
8103
+ "start": 1191
8100
8104
  },
8101
8105
  {
8102
8106
  "name": "get_low_nullifier_membership_witness",
8103
- "start": 1119
8107
+ "start": 1781
8104
8108
  },
8105
8109
  {
8106
8110
  "name": "get_nullifier_membership_witness_oracle",
8107
- "start": 1425
8111
+ "start": 2103
8108
8112
  },
8109
8113
  {
8110
8114
  "name": "get_nullifier_membership_witness",
8111
- "start": 1766
8115
+ "start": 2505
8112
8116
  }
8113
8117
  ],
8114
8118
  "path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/oracle/get_nullifier_membership_witness.nr",
8115
- "source": "use crate::protocol::{\n abis::{block_header::BlockHeader, nullifier_leaf_preimage::NullifierLeafPreimage},\n constants::NULLIFIER_TREE_HEIGHT,\n traits::{Deserialize, Hash, Serialize},\n};\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct NullifierMembershipWitness {\n pub index: Field,\n pub leaf_preimage: NullifierLeafPreimage,\n pub path: [Field; NULLIFIER_TREE_HEIGHT],\n}\n\n#[oracle(aztec_utl_getLowNullifierMembershipWitness)]\nunconstrained fn get_low_nullifier_membership_witness_oracle(\n _block_hash: Field,\n _nullifier: Field,\n) -> NullifierMembershipWitness {}\n\n/// Returns a membership witness for the low nullifier of `nullifier` in the nullifier tree whose root is defined in\n/// `block_header`.\n///\n/// The low nullifier is the leaf with the largest value that is still smaller than `nullifier`. This is used to prove\n/// non-inclusion: if the low nullifier's `next_value` is greater than `nullifier`, then `nullifier` is not in the\n/// tree.\npub unconstrained fn get_low_nullifier_membership_witness(\n block_header: BlockHeader,\n nullifier: Field,\n) -> NullifierMembershipWitness {\n let block_hash = block_header.hash();\n get_low_nullifier_membership_witness_oracle(block_hash, nullifier)\n}\n\n#[oracle(aztec_utl_getNullifierMembershipWitness)]\nunconstrained fn get_nullifier_membership_witness_oracle(\n _block_hash: Field,\n _nullifier: Field,\n) -> NullifierMembershipWitness {}\n\n/// Returns a membership witness for `nullifier` in the nullifier tree whose root is defined in `block_header`.\n///\n/// This is used to prove that a nullifier exists in the tree (inclusion proof).\npub unconstrained fn get_nullifier_membership_witness(\n block_header: BlockHeader,\n nullifier: Field,\n) -> NullifierMembershipWitness {\n let block_hash = block_header.hash();\n get_nullifier_membership_witness_oracle(block_hash, nullifier)\n}\n"
8119
+ "source": "use crate::protocol::{\n abis::{block_header::BlockHeader, nullifier_leaf_preimage::NullifierLeafPreimage},\n constants::NULLIFIER_TREE_HEIGHT,\n merkle_tree::MembershipWitness,\n traits::{Deserialize, Hash, Serialize},\n};\n\n// This internal type matches the oracle response. This module's functions (e.g.\n// [`get_low_nullifier_membership_witness`]) wrap the oracle call and convert this into their respective\n// return types.\n// TODO(F-554): Remove once the TypeScript side serializes preimage and witness separately, as an\n// oracle interface breaking change.\n#[derive(Deserialize, Eq, Serialize)]\nstruct RawNullifierMembershipWitness {\n index: Field,\n leaf_preimage: NullifierLeafPreimage,\n path: [Field; NULLIFIER_TREE_HEIGHT],\n}\n\nimpl RawNullifierMembershipWitness {\n fn into_split(self) -> (NullifierLeafPreimage, MembershipWitness<NULLIFIER_TREE_HEIGHT>) {\n (self.leaf_preimage, MembershipWitness { leaf_index: self.index, sibling_path: self.path })\n }\n}\n\n#[oracle(aztec_utl_getLowNullifierMembershipWitness)]\nunconstrained fn get_low_nullifier_membership_witness_oracle(\n _block_hash: Field,\n _nullifier: Field,\n) -> RawNullifierMembershipWitness {}\n\n/// Returns a leaf preimage and membership witness for the low nullifier of `nullifier` in the nullifier tree whose\n/// root is defined in `block_header`.\n///\n/// The low nullifier is the leaf with the largest value that is still smaller than `nullifier`. This is used to prove\n/// non-inclusion: if the low nullifier's `next_value` is greater than `nullifier`, then `nullifier` is not in the\n/// tree.\npub unconstrained fn get_low_nullifier_membership_witness(\n block_header: BlockHeader,\n nullifier: Field,\n) -> (NullifierLeafPreimage, MembershipWitness<NULLIFIER_TREE_HEIGHT>) {\n let block_hash = block_header.hash();\n get_low_nullifier_membership_witness_oracle(block_hash, nullifier).into_split()\n}\n\n#[oracle(aztec_utl_getNullifierMembershipWitness)]\nunconstrained fn get_nullifier_membership_witness_oracle(\n _block_hash: Field,\n _nullifier: Field,\n) -> RawNullifierMembershipWitness {}\n\n/// Returns a leaf preimage and membership witness for `nullifier` in the nullifier tree whose root is defined in\n/// `block_header`.\n///\n/// This is used to prove that a nullifier exists in the tree (inclusion proof).\npub unconstrained fn get_nullifier_membership_witness(\n block_header: BlockHeader,\n nullifier: Field,\n) -> (NullifierLeafPreimage, MembershipWitness<NULLIFIER_TREE_HEIGHT>) {\n let block_hash = block_header.hash();\n get_nullifier_membership_witness_oracle(block_hash, nullifier).into_split()\n}\n"
8116
8120
  },
8117
8121
  "187": {
8118
8122
  "function_locations": [
@@ -10650,7 +10654,7 @@
10650
10654
  }
10651
10655
  ],
10652
10656
  "path": "/home/aztec-dev/aztec-packages/noir-projects/noir-contracts/contracts/account/schnorr_account_contract/src/main.nr",
10653
- "source": "mod public_key_note;\n\n// Account contract that uses Schnorr signatures for authentication.\n// The signing key is stored in an immutable private note and should be different from the encryption/nullifying key.\nuse aztec::macros::aztec;\n\n#[aztec]\npub contract SchnorrAccount {\n use aztec::{\n authwit::{\n account::AccountActions,\n auth::{compute_authwit_message_hash, compute_authwit_nullifier},\n entrypoint::app::AppPayload,\n },\n context::PrivateContext,\n hash::compute_siloed_nullifier,\n macros::{\n functions::{allow_phase_change, external, initializer, noinitcheck, view},\n storage::storage,\n },\n messages::message_delivery::MessageDelivery,\n oracle::{\n auth_witness::get_auth_witness,\n get_nullifier_membership_witness::get_low_nullifier_membership_witness,\n notes::{get_sender_for_tags, set_sender_for_tags},\n },\n protocol::address::AztecAddress,\n state_vars::SinglePrivateImmutable,\n };\n\n use crate::public_key_note::PublicKeyNote;\n\n #[storage]\n struct Storage<Context> {\n // docs:start:public_key\n signing_public_key: SinglePrivateImmutable<PublicKeyNote, Context>,\n // docs:end:public_key\n }\n\n // Constructs the contract\n #[external(\"private\")]\n #[initializer]\n fn constructor(signing_pub_key_x: Field, signing_pub_key_y: Field) {\n let pub_key_note = PublicKeyNote { x: signing_pub_key_x, y: signing_pub_key_y };\n\n // Safety: The sender for tags is only used to compute unconstrained shared secrets for emitting logs.\n // Since this value is only used for unconstrained tagging and not for any constrained logic,\n // it is safe to load from an unconstrained context.\n // TODO(#15752): Improve the sender_for_tags handling here when the original sender is undefined.\n let original_sender = unsafe { get_sender_for_tags().unwrap_or(self.address) };\n\n // We set the sender for tags to this contract because we don't want to force the user corresponding to this\n // account to add the account deployer as a sender to their PXE. By setting it to this contract, user's PXE\n // will manage to find the note even if the account deployer is not registered as a sender (i.e\n // `pxe.registerSender(accountDeployer)` was not called)\n\n // Safety: Comment from above applies here as well.\n unsafe { set_sender_for_tags(self.address) };\n // The note message gets delivered to the note owner which is set by the SinglePrivateImmutable to be this\n // contract.\n self.storage.signing_public_key.initialize(pub_key_note).deliver(\n MessageDelivery.ONCHAIN_CONSTRAINED,\n );\n // Safety: Comment from above applies here as well.\n unsafe { set_sender_for_tags(original_sender) };\n }\n\n // @dev: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts file (specifically `getEntrypointAbi()`).\n // using noinitcheck is an optimization, it reduces gates by omitting a check that the contract has been initialized\n #[external(\"private\")]\n #[noinitcheck]\n #[allow_phase_change]\n fn entrypoint(app_payload: AppPayload, fee_payment_method: u8, cancellable: bool) {\n // Safety: The sender for tags is only used to compute unconstrained shared secrets for emitting logs.\n // Since this value is only used for unconstrained tagging and not for any constrained logic,\n // it is safe to set from a constrained context.\n unsafe { set_sender_for_tags(self.address) };\n\n let actions = AccountActions::init(self.context, is_valid_impl);\n actions.entrypoint(app_payload, fee_payment_method, cancellable);\n }\n\n #[external(\"private\")]\n #[noinitcheck]\n #[view]\n fn verify_private_authwit(inner_hash: Field) -> Field {\n let actions = AccountActions::init(self.context, is_valid_impl);\n actions.verify_private_authwit(inner_hash)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, outer_hash: Field) -> bool {\n // docs:start:is_valid_impl\n // Load public key from storage\n let storage = Storage::init(context);\n let public_key = storage.signing_public_key.get_note();\n\n // Load auth witness\n // Safety: The witness is only used as a \"magical value\" that makes the signature verification below pass.\n // Hence it's safe.\n let witness: [Field; 64] = unsafe { get_auth_witness(outer_hash) };\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n let pub_key =\n std::embedded_curve_ops::EmbeddedCurvePoint { x: public_key.x, y: public_key.y };\n // Verify signature of the payload bytes\n schnorr::verify_signature(pub_key, signature, outer_hash.to_be_bytes::<32>())\n // docs:end:is_valid_impl\n }\n\n /**\n * @notice Helper function to check validity of private authwitnesses\n * @param consumer The address of the consumer of the message\n * @param message_hash The message hash of the message to check the validity\n * @return True if the message_hash can be consumed, false otherwise\n */\n #[external(\"utility\")]\n unconstrained fn lookup_validity(consumer: AztecAddress, inner_hash: Field) -> bool {\n let public_key = self.storage.signing_public_key.view_note();\n\n let message_hash = compute_authwit_message_hash(\n consumer,\n self.context.chain_id(),\n self.context.version(),\n inner_hash,\n );\n\n let witness: [Field; 64] = get_auth_witness(message_hash);\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n let pub_key =\n std::embedded_curve_ops::EmbeddedCurvePoint { x: public_key.x, y: public_key.y };\n let valid_in_private =\n schnorr::verify_signature(pub_key, signature, message_hash.to_be_bytes::<32>());\n\n // Compute the nullifier and check if it is spent\n // This will BLINDLY TRUST the oracle, but the oracle is us, and\n // it is not as part of execution of the contract, so we are good.\n let nullifier = compute_authwit_nullifier(self.address, inner_hash);\n let siloed_nullifier = compute_siloed_nullifier(consumer, nullifier);\n let lower_wit =\n get_low_nullifier_membership_witness(self.context.block_header(), siloed_nullifier);\n let is_spent = lower_wit.leaf_preimage.nullifier == siloed_nullifier;\n\n !is_spent & valid_in_private\n }\n}\n"
10657
+ "source": "mod public_key_note;\n\n// Account contract that uses Schnorr signatures for authentication.\n// The signing key is stored in an immutable private note and should be different from the encryption/nullifying key.\nuse aztec::macros::aztec;\n\n#[aztec]\npub contract SchnorrAccount {\n use aztec::{\n authwit::{\n account::AccountActions,\n auth::{compute_authwit_message_hash, compute_authwit_nullifier},\n entrypoint::app::AppPayload,\n },\n context::PrivateContext,\n hash::compute_siloed_nullifier,\n macros::{\n functions::{allow_phase_change, external, initializer, noinitcheck, view},\n storage::storage,\n },\n messages::message_delivery::MessageDelivery,\n oracle::{\n auth_witness::get_auth_witness,\n get_nullifier_membership_witness::get_low_nullifier_membership_witness,\n notes::{get_sender_for_tags, set_sender_for_tags},\n },\n protocol::address::AztecAddress,\n state_vars::SinglePrivateImmutable,\n };\n\n use crate::public_key_note::PublicKeyNote;\n\n #[storage]\n struct Storage<Context> {\n // docs:start:public_key\n signing_public_key: SinglePrivateImmutable<PublicKeyNote, Context>,\n // docs:end:public_key\n }\n\n // Constructs the contract\n #[external(\"private\")]\n #[initializer]\n fn constructor(signing_pub_key_x: Field, signing_pub_key_y: Field) {\n let pub_key_note = PublicKeyNote { x: signing_pub_key_x, y: signing_pub_key_y };\n\n // Safety: The sender for tags is only used to compute unconstrained shared secrets for emitting logs.\n // Since this value is only used for unconstrained tagging and not for any constrained logic,\n // it is safe to load from an unconstrained context.\n // TODO(#15752): Improve the sender_for_tags handling here when the original sender is undefined.\n let original_sender = unsafe { get_sender_for_tags().unwrap_or(self.address) };\n\n // We set the sender for tags to this contract because we don't want to force the user corresponding to this\n // account to add the account deployer as a sender to their PXE. By setting it to this contract, user's PXE\n // will manage to find the note even if the account deployer is not registered as a sender (i.e\n // `pxe.registerSender(accountDeployer)` was not called)\n\n // Safety: Comment from above applies here as well.\n unsafe { set_sender_for_tags(self.address) };\n // The note message gets delivered to the note owner which is set by the SinglePrivateImmutable to be this\n // contract.\n self.storage.signing_public_key.initialize(pub_key_note).deliver(\n MessageDelivery.ONCHAIN_CONSTRAINED,\n );\n // Safety: Comment from above applies here as well.\n unsafe { set_sender_for_tags(original_sender) };\n }\n\n // @dev: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts file (specifically `getEntrypointAbi()`).\n // using noinitcheck is an optimization, it reduces gates by omitting a check that the contract has been initialized\n #[external(\"private\")]\n #[noinitcheck]\n #[allow_phase_change]\n fn entrypoint(app_payload: AppPayload, fee_payment_method: u8, cancellable: bool) {\n // Safety: The sender for tags is only used to compute unconstrained shared secrets for emitting logs.\n // Since this value is only used for unconstrained tagging and not for any constrained logic,\n // it is safe to set from a constrained context.\n unsafe { set_sender_for_tags(self.address) };\n\n let actions = AccountActions::init(self.context, is_valid_impl);\n actions.entrypoint(app_payload, fee_payment_method, cancellable);\n }\n\n #[external(\"private\")]\n #[noinitcheck]\n #[view]\n fn verify_private_authwit(inner_hash: Field) -> Field {\n let actions = AccountActions::init(self.context, is_valid_impl);\n actions.verify_private_authwit(inner_hash)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, outer_hash: Field) -> bool {\n // docs:start:is_valid_impl\n // Load public key from storage\n let storage = Storage::init(context);\n let public_key = storage.signing_public_key.get_note();\n\n // Load auth witness\n // Safety: The witness is only used as a \"magical value\" that makes the signature verification below pass.\n // Hence it's safe.\n let witness: [Field; 64] = unsafe { get_auth_witness(outer_hash) };\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n let pub_key =\n std::embedded_curve_ops::EmbeddedCurvePoint { x: public_key.x, y: public_key.y };\n // Verify signature of the payload bytes\n schnorr::verify_signature(pub_key, signature, outer_hash.to_be_bytes::<32>())\n // docs:end:is_valid_impl\n }\n\n /**\n * @notice Helper function to check validity of private authwitnesses\n * @param consumer The address of the consumer of the message\n * @param message_hash The message hash of the message to check the validity\n * @return True if the message_hash can be consumed, false otherwise\n */\n #[external(\"utility\")]\n unconstrained fn lookup_validity(consumer: AztecAddress, inner_hash: Field) -> bool {\n let public_key = self.storage.signing_public_key.view_note();\n\n let message_hash = compute_authwit_message_hash(\n consumer,\n self.context.chain_id(),\n self.context.version(),\n inner_hash,\n );\n\n let witness: [Field; 64] = get_auth_witness(message_hash);\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n let pub_key =\n std::embedded_curve_ops::EmbeddedCurvePoint { x: public_key.x, y: public_key.y };\n let valid_in_private =\n schnorr::verify_signature(pub_key, signature, message_hash.to_be_bytes::<32>());\n\n // Compute the nullifier and check if it is spent\n // This will BLINDLY TRUST the oracle, but the oracle is us, and\n // it is not as part of execution of the contract, so we are good.\n let nullifier = compute_authwit_nullifier(self.address, inner_hash);\n let siloed_nullifier = compute_siloed_nullifier(consumer, nullifier);\n let (low_leaf_preimage, _witness) =\n get_low_nullifier_membership_witness(self.context.block_header(), siloed_nullifier);\n let is_spent = low_leaf_preimage.nullifier == siloed_nullifier;\n\n !is_spent & valid_in_private\n }\n}\n"
10654
10658
  },
10655
10659
  "52": {
10656
10660
  "function_locations": [
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@aztec/accounts",
3
3
  "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/yarn-project/accounts",
4
4
  "description": "Implementation of sample account contracts for Aztec Network",
5
- "version": "4.2.0-rc.1",
5
+ "version": "4.3.0-nightly.20260416",
6
6
  "type": "module",
7
7
  "exports": {
8
8
  "./defaults": "./dest/defaults/index.js",
@@ -81,11 +81,11 @@
81
81
  ]
82
82
  },
83
83
  "dependencies": {
84
- "@aztec/aztec.js": "4.2.0-rc.1",
85
- "@aztec/entrypoints": "4.2.0-rc.1",
86
- "@aztec/ethereum": "4.2.0-rc.1",
87
- "@aztec/foundation": "4.2.0-rc.1",
88
- "@aztec/stdlib": "4.2.0-rc.1",
84
+ "@aztec/aztec.js": "4.3.0-nightly.20260416",
85
+ "@aztec/entrypoints": "4.3.0-nightly.20260416",
86
+ "@aztec/ethereum": "4.3.0-nightly.20260416",
87
+ "@aztec/foundation": "4.3.0-nightly.20260416",
88
+ "@aztec/stdlib": "4.3.0-nightly.20260416",
89
89
  "tslib": "^2.4.0"
90
90
  },
91
91
  "devDependencies": {