@aztec-labs/protocol-contracts 6.0.0-rc.2 → 6.0.0-rc.3

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.
@@ -4100,5 +4100,5 @@
4100
4100
  }
4101
4101
  },
4102
4102
  "transpiled": true,
4103
- "aztec_version": "6.0.0-rc.2"
4103
+ "aztec_version": "6.0.0-rc.3"
4104
4104
  }
@@ -352,7 +352,7 @@
352
352
  }
353
353
  ],
354
354
  "path": "/home/aztec-dev/aztec-packages/noir-projects/fnd/noir-protocol-circuits/crates/types/src/address/aztec_address.nr",
355
- "source": "use crate::{\n address::{\n partial_address::PartialAddress, salted_initialization_hash::SaltedInitializationHash,\n },\n constants::{AZTEC_ADDRESS_LENGTH, DOM_SEP__CONTRACT_ADDRESS_V2, MAX_FIELD_VALUE},\n contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator,\n public_keys::{hash_public_key, IvpkM, PublicKeys, ToPoint},\n traits::{Deserialize, Empty, FromField, Packable, Serialize, ToField},\n utils::field::sqrt,\n};\n\nuse crate::point::EmbeddedCurvePoint;\n\nuse crate::public_keys::AddressPoint;\nuse std::{\n embedded_curve_ops::{EmbeddedCurveScalar, fixed_base_scalar_mul as derive_public_key},\n ops::Add,\n};\nuse std::meta::derive;\n\n// Aztec address\n#[derive(Deserialize, Eq, Packable, Serialize)]\npub struct AztecAddress {\n pub inner: Field,\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n /// Returns `true` if the address is valid.\n ///\n /// An invalid address is one that can be proven to not be correctly derived, meaning it contains no contract code,\n /// public keys, etc., and can therefore not receive messages nor execute calls.\n pub fn is_valid(self) -> bool {\n self.get_y().is_some()\n }\n\n /// Returns an address's [`AddressPoint`].\n ///\n /// This can be used to create shared secrets with the owner of the address. If the address is invalid (see\n /// [`AztecAddress::is_valid`]) then this returns `Option::none()`, and no shared secrets can be created.\n pub fn to_address_point(self) -> Option<AddressPoint> {\n self.get_y().map(|y| {\n // If we get a negative y coordinate (y > (r - 1) / 2), we swap it to the\n // positive one (where y <= (r - 1) / 2) by negating it.\n let final_y = if Self::is_positive(y) { y } else { -y };\n\n AddressPoint { inner: EmbeddedCurvePoint { x: self.inner, y: final_y } }\n })\n }\n\n /// Determines whether a y-coordinate is in the lower (positive) or upper (negative) \"half\" of the field.\n /// I.e.\n /// y <= (r - 1)/2 => positive.\n /// y > (r - 1)/2 => negative.\n /// An AddressPoint always uses the \"positive\" y.\n fn is_positive(y: Field) -> bool {\n // Note: The field modulus r is MAX_FIELD_VALUE + 1.\n let MID = MAX_FIELD_VALUE / 2; // (r - 1) / 2\n let MID_PLUS_1 = MID + 1; // (r - 1)/2 + 1\n // Note: y <= m implies y < m + 1.\n y.lt(MID_PLUS_1)\n }\n\n /// Returns one of the two possible y-coordinates.\n ///\n /// Not all `AztecAddresses` are valid, in which case there is no corresponding y-coordinate. This returns\n /// `Option::none()` for invalid addresses.\n ///\n /// An `AztecAddress` is defined by an x-coordinate, for which two y-coordinates exist as solutions to the curve\n /// equation. This function returns either of them. Note that an [`AddressPoint`] must **always** have a positive\n /// y-coordinate - if trying to obtain the underlying point use [`AztecAddress::to_address_point`] instead.\n fn get_y(self) -> Option<Field> {\n // We compute the address point by taking our address as x, and then solving for y in the\n // equation which defines the grumpkin curve:\n // y^2 = x^3 - 17; x = address\n let x = self.inner;\n let y_squared = x * x * x - 17;\n\n sqrt(y_squared)\n }\n\n pub fn compute(public_keys: PublicKeys, partial_address: PartialAddress) -> AztecAddress {\n //\n // address = address_point.x\n // |\n // address_point = pre_address * G + Ivpk_m (always choose \"positive\" y-coord)\n // | ^\n // | |.....................\n // pre_address .\n // / \\ .\n // / \\ .\n // partial_address public_keys_hash .\n // / \\ / / | | | \\ .\n // / \\ / / | | | \\ .\n // npk_m_hash Ivpk_m ovpk_m_hash tpk_m_hash mspk_m_hash fbpk_m_hash\n // contract_class_id \\ |.........................\n // / | \\ \\\n // artifact_hash | public_bytecode_commitment salted_initialization_hash\n // | / / \\ \\\n // private_function_tree_root salt initialization_hash deployer_address immutables_hash\n // / \\ / \\\n // ... ... constructor_fn_selector constructor_args_hash\n // / \\\n // / \\ / \\\n // leaf leaf leaf leaf\n // ^\n // |\n // |---h(function_selector, vk_hash)\n // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n // Each of these represents a private function of the contract.\n\n let public_keys_hash = public_keys.hash();\n\n let pre_address = poseidon2_hash_with_separator(\n [public_keys_hash.to_field(), partial_address.to_field()],\n DOM_SEP__CONTRACT_ADDRESS_V2,\n );\n\n // Note: `.add()` will fail within the blackbox fn if either of the points are not on the curve. (See tests below).\n let address_point = derive_public_key(EmbeddedCurveScalar::from_field(pre_address)).add(\n public_keys.ivpk_m.to_point(),\n );\n\n // Note that our address is only the x-coordinate of the full address_point. This is okay because when people want to encrypt something and send it to us\n // they can recover our full point using the x-coordinate (our address itself). To do this, they recompute the y-coordinate according to the equation y^2 = x^3 - 17.\n // When they do this, they may get a positive y-coordinate (a value that is less than or equal to MAX_FIELD_VALUE / 2) or\n // a negative y-coordinate (a value that is more than MAX_FIELD_VALUE), and we cannot dictate which one they get and hence the recovered point may sometimes be different than the one\n // our secret can decrypt. Regardless though, they should and will always encrypt using point with the positive y-coordinate by convention.\n // This ensures that everyone encrypts to the same point given an arbitrary x-coordinate (address). This is allowed because even though our original point may not have a positive y-coordinate,\n // with our original secret, we will be able to derive the secret to the point with the flipped (and now positive) y-coordinate that everyone encrypts to.\n AztecAddress::from_field(address_point.x)\n }\n\n pub fn compute_from_class_id(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash,\n public_keys: PublicKeys,\n ) -> Self {\n let partial_address = PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n salted_initialization_hash,\n );\n\n AztecAddress::compute(public_keys, partial_address)\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n\n#[test]\nfn check_max_field_value() {\n // Check that it is indeed r-1.\n assert_eq(MAX_FIELD_VALUE + 1, 0);\n}\n\n#[test]\nfn check_is_positive() {\n assert(AztecAddress::is_positive(0));\n assert(AztecAddress::is_positive(1));\n assert(!AztecAddress::is_positive(-1));\n assert(AztecAddress::is_positive(MAX_FIELD_VALUE / 2));\n assert(!AztecAddress::is_positive((MAX_FIELD_VALUE / 2) + 1));\n}\n\n// Gives us confidence that we don't need to manually check that the input public keys need to be on the curve for `add`,\n// because the blackbox function does this check for us.\n#[test(should_fail_with = \"is not on curve\")]\nfn check_embedded_curve_point_add() {\n // Choose a point not on the curve in the 2nd position.\n let p1 = EmbeddedCurvePoint::generator();\n let key = IvpkM { inner: EmbeddedCurvePoint { x: 1, y: 1 } };\n let _ = p1 + key.to_point();\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys() {\n let npk_m_point = EmbeddedCurvePoint {\n x: 0x22f7fcddfa3ce3e8f0cc8e82d7b94cdd740afa3e77f8e4a63ea78a239432dcab,\n y: 0x0471657de2b6216ade6c506d28fbc22ba8b8ed95c871ad9f3e3984e90d9723a7,\n };\n let ovpk_m_point = EmbeddedCurvePoint {\n x: 0x09115c96e962322ffed6522f57194627136b8d03ac7469109707f5e44190c484,\n y: 0x0c49773308a13d740a7f0d4f0e6163b02c5a408b6f965856b6a491002d073d5b,\n };\n let tpk_m_point = EmbeddedCurvePoint {\n x: 0x00d3d81beb009873eb7116327cf47c612d5758ef083d4fda78e9b63980b2a762,\n y: 0x2f567d22d2b02fe1f4ad42db9d58a36afd1983e7e2909d1cab61cafedad6193a,\n };\n let mspk_m_point = EmbeddedCurvePoint {\n x: 0x1bd6cb13e0bc8c6e0c1a8b2c5d7f9e0a4b6c8d0e2f4a6c8e0a2c4e6f8a0b2c4d,\n y: 0x0a032ec7b21c2bdb35f8a13e594764e39ee786c4b275eef3f0435bf6ab2b9822,\n };\n let fbpk_m_point = EmbeddedCurvePoint {\n x: 0x2c8e0a2c4e6f8b0d2f4a6c8e0a2c4e6f8b0d2f4a6c8e0a2c4e6f8b0d2f4a6c90,\n y: 0x2ef338da3a77e65f90b6d48ac686fc9ff3a95de0c39e0426fc443377425e6634,\n };\n\n let public_keys = PublicKeys {\n npk_m_hash: hash_public_key(npk_m_point),\n ivpk_m: IvpkM {\n inner: EmbeddedCurvePoint {\n x: 0x111223493147f6785514b1c195bb37a2589f22a6596d30bb2bb145fdc9ca8f1e,\n y: 0x273bbffd678edce8fe30e0deafc4f66d58357c06fd4a820285294b9746c3be95,\n },\n },\n ovpk_m_hash: hash_public_key(ovpk_m_point),\n tpk_m_hash: hash_public_key(tpk_m_point),\n mspk_m_hash: hash_public_key(mspk_m_point),\n fbpk_m_hash: hash_public_key(fbpk_m_point),\n };\n\n let partial_address = PartialAddress::from_field(\n 0x0a7c585381b10f4666044266a02405bf6e01fa564c8517d4ad5823493abd31de,\n );\n\n let address = AztecAddress::compute(public_keys, partial_address).to_field();\n\n let expected_computed_address_from_partial_and_pubkeys =\n 0x303ffc8bd456d132463b1fc3a633aeb718a7883c268f3956c05e6fe09b5a5424;\n assert_eq(address, expected_computed_address_from_partial_and_pubkeys);\n}\n\n#[test]\nfn compute_preaddress_from_partial_and_pub_keys() {\n let pre_address = poseidon2_hash_with_separator([1, 2], DOM_SEP__CONTRACT_ADDRESS_V2);\n let expected_computed_preaddress_from_partial_and_pubkey =\n 0x0fa1c698858df1a99170cd39d5f4bfad6d0d60f1f8afa3dc92281ee60b36f3bb;\n assert(pre_address == expected_computed_preaddress_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n // We use the AZTEC_ADDRESS_LENGTH constant to ensure that there is a match between the derived trait\n // implementation and the constant.\n let serialized: [Field; AZTEC_ADDRESS_LENGTH] = address.serialize();\n let deserialized = AztecAddress::deserialize(serialized);\n assert_eq(address, deserialized);\n}\n\n#[test]\nfn to_address_point_valid() {\n // x = 8 where x^3 - 17 = 512 - 17 = 495, which is a residue in this field\n let address = AztecAddress { inner: 8 };\n\n assert(address.get_y().is_some()); // We don't bother checking the result of get_y as it is only used internally\n assert(address.is_valid());\n\n let maybe_point = address.to_address_point();\n assert(maybe_point.is_some());\n\n let point = maybe_point.unwrap().inner;\n // check that x is preserved\n assert_eq(point.x, Field::from(8));\n\n // check that the curve equation holds: y^2 == x^3 - 17\n assert_eq(point.y * point.y, point.x * point.x * point.x - 17);\n}\n\n#[test]\nfn to_address_point_invalid() {\n // x = 3 where x^3 - 17 = 27 - 17 = 10, which is a non-residue in this field\n let address = AztecAddress { inner: 3 };\n\n assert(address.get_y().is_none());\n assert(!address.is_valid());\n\n assert(address.to_address_point().is_none());\n}\n"
355
+ "source": "use crate::{\n address::{\n partial_address::PartialAddress, salted_initialization_hash::SaltedInitializationHash,\n },\n constants::{AZTEC_ADDRESS_LENGTH, DOM_SEP__CONTRACT_ADDRESS_V3, MAX_FIELD_VALUE},\n contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator,\n public_keys::{hash_public_key, IvpkM, PublicKeys, ToPoint},\n traits::{Deserialize, Empty, FromField, Packable, Serialize, ToField},\n utils::field::sqrt,\n};\n\nuse crate::point::EmbeddedCurvePoint;\n\nuse crate::public_keys::AddressPoint;\nuse std::{\n embedded_curve_ops::{EmbeddedCurveScalar, fixed_base_scalar_mul as derive_public_key},\n ops::Add,\n};\nuse std::meta::derive;\n\n// Aztec address\n#[derive(Deserialize, Eq, Packable, Serialize)]\npub struct AztecAddress {\n pub inner: Field,\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n /// Returns `true` if the address is valid.\n ///\n /// An invalid address is one that can be proven to not be correctly derived, meaning it contains no contract code,\n /// public keys, etc., and can therefore not receive messages nor execute calls.\n pub fn is_valid(self) -> bool {\n self.get_y().is_some()\n }\n\n /// Returns an address's [`AddressPoint`].\n ///\n /// This can be used to create shared secrets with the owner of the address. If the address is invalid (see\n /// [`AztecAddress::is_valid`]) then this returns `Option::none()`, and no shared secrets can be created.\n pub fn to_address_point(self) -> Option<AddressPoint> {\n self.get_y().map(|y| {\n // If we get a negative y coordinate (y > (r - 1) / 2), we swap it to the\n // positive one (where y <= (r - 1) / 2) by negating it.\n let final_y = if Self::is_positive(y) { y } else { -y };\n\n AddressPoint { inner: EmbeddedCurvePoint { x: self.inner, y: final_y } }\n })\n }\n\n /// Determines whether a y-coordinate is in the lower (positive) or upper (negative) \"half\" of the field.\n /// I.e.\n /// y <= (r - 1)/2 => positive.\n /// y > (r - 1)/2 => negative.\n /// An AddressPoint always uses the \"positive\" y.\n fn is_positive(y: Field) -> bool {\n // Note: The field modulus r is MAX_FIELD_VALUE + 1.\n let MID = MAX_FIELD_VALUE / 2; // (r - 1) / 2\n let MID_PLUS_1 = MID + 1; // (r - 1)/2 + 1\n // Note: y <= m implies y < m + 1.\n y.lt(MID_PLUS_1)\n }\n\n /// Returns one of the two possible y-coordinates.\n ///\n /// Not all `AztecAddresses` are valid, in which case there is no corresponding y-coordinate. This returns\n /// `Option::none()` for invalid addresses.\n ///\n /// An `AztecAddress` is defined by an x-coordinate, for which two y-coordinates exist as solutions to the curve\n /// equation. This function returns either of them. Note that an [`AddressPoint`] must **always** have a positive\n /// y-coordinate - if trying to obtain the underlying point use [`AztecAddress::to_address_point`] instead.\n fn get_y(self) -> Option<Field> {\n // We compute the address point by taking our address as x, and then solving for y in the\n // equation which defines the grumpkin curve:\n // y^2 = x^3 - 17; x = address\n let x = self.inner;\n let y_squared = x * x * x - 17;\n\n sqrt(y_squared)\n }\n\n pub fn compute(public_keys: PublicKeys, partial_address: PartialAddress) -> AztecAddress {\n //\n // address = address_point.x\n // |\n // address_point = pre_address * G + Ivpk_m (always choose \"positive\" y-coord)\n // | ^\n // | |.....................\n // pre_address .\n // / \\ .\n // / \\ .\n // partial_address public_keys_hash .\n // / \\ / / | | | \\ .\n // / \\ / / | | | \\ .\n // npk_m_hash Ivpk_m ovpk_m_hash tpk_m_hash mspk_m_hash fbpk_m_hash\n // contract_class_id \\ |.........................\n // / | \\ \\\n // artifact_hash | public_bytecode_commitment salted_initialization_hash\n // | / / \\ \\\n // private_function_tree_root salt initialization_hash deployer_address immutables_hash\n // / \\ / \\\n // ... ... constructor_fn_selector constructor_args_hash\n // / \\\n // / \\ / \\\n // leaf leaf leaf leaf\n // ^\n // |\n // |---h(function_selector, vk_hash)\n // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n // Each of these represents a private function of the contract.\n\n let public_keys_hash = public_keys.hash();\n\n let pre_address = poseidon2_hash_with_separator(\n [public_keys_hash.to_field(), partial_address.to_field()],\n DOM_SEP__CONTRACT_ADDRESS_V3,\n );\n\n // Note: `.add()` will fail within the blackbox fn if either of the points are not on the curve. (See tests below).\n let address_point = derive_public_key(EmbeddedCurveScalar::from_field(pre_address)).add(\n public_keys.ivpk_m.to_point(),\n );\n\n // Note that our address is only the x-coordinate of the full address_point. This is okay because when people want to encrypt something and send it to us\n // they can recover our full point using the x-coordinate (our address itself). To do this, they recompute the y-coordinate according to the equation y^2 = x^3 - 17.\n // When they do this, they may get a positive y-coordinate (a value that is less than or equal to MAX_FIELD_VALUE / 2) or\n // a negative y-coordinate (a value that is more than MAX_FIELD_VALUE), and we cannot dictate which one they get and hence the recovered point may sometimes be different than the one\n // our secret can decrypt. Regardless though, they should and will always encrypt using point with the positive y-coordinate by convention.\n // This ensures that everyone encrypts to the same point given an arbitrary x-coordinate (address). This is allowed because even though our original point may not have a positive y-coordinate,\n // with our original secret, we will be able to derive the secret to the point with the flipped (and now positive) y-coordinate that everyone encrypts to.\n AztecAddress::from_field(address_point.x)\n }\n\n pub fn compute_from_class_id(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash,\n public_keys: PublicKeys,\n ) -> Self {\n let partial_address = PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n salted_initialization_hash,\n );\n\n AztecAddress::compute(public_keys, partial_address)\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n\n#[test]\nfn check_max_field_value() {\n // Check that it is indeed r-1.\n assert_eq(MAX_FIELD_VALUE + 1, 0);\n}\n\n#[test]\nfn check_is_positive() {\n assert(AztecAddress::is_positive(0));\n assert(AztecAddress::is_positive(1));\n assert(!AztecAddress::is_positive(-1));\n assert(AztecAddress::is_positive(MAX_FIELD_VALUE / 2));\n assert(!AztecAddress::is_positive((MAX_FIELD_VALUE / 2) + 1));\n}\n\n// Gives us confidence that we don't need to manually check that the input public keys need to be on the curve for `add`,\n// because the blackbox function does this check for us.\n#[test(should_fail_with = \"is not on curve\")]\nfn check_embedded_curve_point_add() {\n // Choose a point not on the curve in the 2nd position.\n let p1 = EmbeddedCurvePoint::generator();\n let key = IvpkM { inner: EmbeddedCurvePoint { x: 1, y: 1 } };\n let _ = p1 + key.to_point();\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys() {\n let npk_m_point = EmbeddedCurvePoint {\n x: 0x22f7fcddfa3ce3e8f0cc8e82d7b94cdd740afa3e77f8e4a63ea78a239432dcab,\n y: 0x0471657de2b6216ade6c506d28fbc22ba8b8ed95c871ad9f3e3984e90d9723a7,\n };\n let ovpk_m_point = EmbeddedCurvePoint {\n x: 0x09115c96e962322ffed6522f57194627136b8d03ac7469109707f5e44190c484,\n y: 0x0c49773308a13d740a7f0d4f0e6163b02c5a408b6f965856b6a491002d073d5b,\n };\n let tpk_m_point = EmbeddedCurvePoint {\n x: 0x00d3d81beb009873eb7116327cf47c612d5758ef083d4fda78e9b63980b2a762,\n y: 0x2f567d22d2b02fe1f4ad42db9d58a36afd1983e7e2909d1cab61cafedad6193a,\n };\n let mspk_m_point = EmbeddedCurvePoint {\n x: 0x1bd6cb13e0bc8c6e0c1a8b2c5d7f9e0a4b6c8d0e2f4a6c8e0a2c4e6f8a0b2c4d,\n y: 0x0a032ec7b21c2bdb35f8a13e594764e39ee786c4b275eef3f0435bf6ab2b9822,\n };\n let fbpk_m_point = EmbeddedCurvePoint {\n x: 0x2c8e0a2c4e6f8b0d2f4a6c8e0a2c4e6f8b0d2f4a6c8e0a2c4e6f8b0d2f4a6c90,\n y: 0x2ef338da3a77e65f90b6d48ac686fc9ff3a95de0c39e0426fc443377425e6634,\n };\n\n let public_keys = PublicKeys {\n npk_m_hash: hash_public_key(npk_m_point),\n ivpk_m: IvpkM {\n inner: EmbeddedCurvePoint {\n x: 0x111223493147f6785514b1c195bb37a2589f22a6596d30bb2bb145fdc9ca8f1e,\n y: 0x273bbffd678edce8fe30e0deafc4f66d58357c06fd4a820285294b9746c3be95,\n },\n },\n ovpk_m_hash: hash_public_key(ovpk_m_point),\n tpk_m_hash: hash_public_key(tpk_m_point),\n mspk_m_hash: hash_public_key(mspk_m_point),\n fbpk_m_hash: hash_public_key(fbpk_m_point),\n };\n\n let partial_address = PartialAddress::from_field(\n 0x0a7c585381b10f4666044266a02405bf6e01fa564c8517d4ad5823493abd31de,\n );\n\n let address = AztecAddress::compute(public_keys, partial_address).to_field();\n\n let expected_computed_address_from_partial_and_pubkeys =\n 0x23877639c7424d1d2a9f514e59ee662b3154a730b783caf822d196b625ba4355;\n assert_eq(address, expected_computed_address_from_partial_and_pubkeys);\n}\n\n#[test]\nfn compute_preaddress_from_partial_and_pub_keys() {\n let pre_address = poseidon2_hash_with_separator([1, 2], DOM_SEP__CONTRACT_ADDRESS_V3);\n let expected_computed_preaddress_from_partial_and_pubkey =\n 0x2e0787752b82b3ab9c28d67b48f24f8a3dac253023bf5136bbcb8ddbf4b1381c;\n assert(pre_address == expected_computed_preaddress_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n // We use the AZTEC_ADDRESS_LENGTH constant to ensure that there is a match between the derived trait\n // implementation and the constant.\n let serialized: [Field; AZTEC_ADDRESS_LENGTH] = address.serialize();\n let deserialized = AztecAddress::deserialize(serialized);\n assert_eq(address, deserialized);\n}\n\n#[test]\nfn to_address_point_valid() {\n // x = 8 where x^3 - 17 = 512 - 17 = 495, which is a residue in this field\n let address = AztecAddress { inner: 8 };\n\n assert(address.get_y().is_some()); // We don't bother checking the result of get_y as it is only used internally\n assert(address.is_valid());\n\n let maybe_point = address.to_address_point();\n assert(maybe_point.is_some());\n\n let point = maybe_point.unwrap().inner;\n // check that x is preserved\n assert_eq(point.x, Field::from(8));\n\n // check that the curve equation holds: y^2 == x^3 - 17\n assert_eq(point.y * point.y, point.x * point.x * point.x - 17);\n}\n\n#[test]\nfn to_address_point_invalid() {\n // x = 3 where x^3 - 17 = 27 - 17 = 10, which is a non-residue in this field\n let address = AztecAddress { inner: 3 };\n\n assert(address.get_y().is_none());\n assert(!address.is_valid());\n\n assert(address.to_address_point().is_none());\n}\n"
356
356
  },
357
357
  "145": {
358
358
  "function_locations": [
@@ -4645,14 +4645,14 @@
4645
4645
  "visibility": "databus"
4646
4646
  }
4647
4647
  },
4648
- "bytecode": "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",
4648
+ "bytecode": "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",
4649
4649
  "custom_attributes": [
4650
4650
  "abi_private"
4651
4651
  ],
4652
4652
  "debug_symbols": "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",
4653
4653
  "is_unconstrained": false,
4654
4654
  "name": "publish_for_public_execution",
4655
- "verification_key": "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"
4655
+ "verification_key": "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"
4656
4656
  },
4657
4657
  {
4658
4658
  "abi": {
@@ -5197,5 +5197,5 @@
5197
5197
  }
5198
5198
  },
5199
5199
  "transpiled": true,
5200
- "aztec_version": "6.0.0-rc.2"
5200
+ "aztec_version": "6.0.0-rc.3"
5201
5201
  }
@@ -7106,5 +7106,5 @@
7106
7106
  }
7107
7107
  },
7108
7108
  "transpiled": true,
7109
- "aztec_version": "6.0.0-rc.2"
7109
+ "aztec_version": "6.0.0-rc.3"
7110
7110
  }
@@ -19,19 +19,19 @@ export const ProtocolContractAddress = {
19
19
  FeeJuice: AztecAddress.fromBigIntUnsafe(3n)
20
20
  };
21
21
  export const ProtocolContractDerivedAddress = {
22
- ContractInstanceRegistry: AztecAddress.fromStringUnsafe('0x0a80f1a867261f73366b038402bef355a9f7d0d48b65dc5859f936bdc85b01dd'),
23
- ContractClassRegistry: AztecAddress.fromStringUnsafe('0x1d9b7b92e6f207ba7acf9ea59f402f563794b4668d112df80e7a289f872ee33f'),
24
- FeeJuice: AztecAddress.fromStringUnsafe('0x2edff490433ce3c44345ba9116fc973f95bae381b3387e2ddb78245e518702ab')
22
+ ContractInstanceRegistry: AztecAddress.fromStringUnsafe('0x2b937086a6b367070f03fd007b932f64fcce36501ffcad6ff7c73f1d116e1c77'),
23
+ ContractClassRegistry: AztecAddress.fromStringUnsafe('0x2b95cb98fbd2723c66350f27310e670ff9faeaa8ca100ce83a3195e4d8235e17'),
24
+ FeeJuice: AztecAddress.fromStringUnsafe('0x064e81954bc70f4c8e060d4fa2ba0427eff0fe10f1f5aa57bf8f93c8745fac79')
25
25
  };
26
26
  export const ProtocolContractClassId = {
27
- ContractInstanceRegistry: Fr.fromString('0x2ddcfb2affa46c76b4b24e24a5d7ca5fa4fe0db09a93eefb8719377d4ab4ac75'),
27
+ ContractInstanceRegistry: Fr.fromString('0x250bc22bd53e83820ec12b83b41addb81073884ef63e7dc5261787bf92850f7f'),
28
28
  ContractClassRegistry: Fr.fromString('0x010f027b753bf0e29dedc8e47a8bdda62211a7253b002b625cffb475495dc002'),
29
29
  FeeJuice: Fr.fromString('0x1fa4d16bbcc242b144b07ee9a424083ee404ed9ce11037b24c465057b6a92c59')
30
30
  };
31
31
  export const ProtocolContractClassIdPreimage = {
32
32
  ContractInstanceRegistry: {
33
- artifactHash: Fr.fromString('0x272d6a46be29b8aae0d46c96f52cf09a4f5ecccdee332727d23b60cc12d7bea6'),
34
- privateFunctionsRoot: Fr.fromString('0x225cf0ac7fe1c7649d253b0fc79b966ad847f7c762e361acad161fd40d9e70e2'),
33
+ artifactHash: Fr.fromString('0x28f9ec60f51cd93bc2cd3d021d3a0d1847cd3b4b57ed6fb22435d422b3a0fb31'),
34
+ privateFunctionsRoot: Fr.fromString('0x2cab3dca97df25e1b2f62b64540799a1130f8d2cf41aff507909ec075cb3905b'),
35
35
  publicBytecodeCommitment: Fr.fromString('0x1fd8380bb220e7d13db681da7e62c93b03add6754895a84c51d13fcde03e8d25')
36
36
  },
37
37
  ContractClassRegistry: {
@@ -54,7 +54,7 @@ export const ProtocolContractPrivateFunctions = {
54
54
  ContractInstanceRegistry: [
55
55
  {
56
56
  selector: FunctionSelector.fromField(Fr.fromString('0x0000000000000000000000000000000000000000000000000000000077cff62f')),
57
- vkHash: Fr.fromString('0x1cdc691d3fb13bcc6915dd93aa4d425cf2567a2000c9e5f8110edd1a44ca5578')
57
+ vkHash: Fr.fromString('0x0ba93c1df26342e4871884648597eba8204fe51b1295e00ecb69a011db1359b6')
58
58
  }
59
59
  ],
60
60
  ContractClassRegistry: [
@@ -75,9 +75,9 @@ export const ProtocolContractPrivateFunctions = {
75
75
  ]
76
76
  };
77
77
  export const ProtocolContractsList = new ProtocolContracts([
78
- AztecAddress.fromStringUnsafe('0x1d9b7b92e6f207ba7acf9ea59f402f563794b4668d112df80e7a289f872ee33f'),
79
- AztecAddress.fromStringUnsafe('0x0a80f1a867261f73366b038402bef355a9f7d0d48b65dc5859f936bdc85b01dd'),
80
- AztecAddress.fromStringUnsafe('0x2edff490433ce3c44345ba9116fc973f95bae381b3387e2ddb78245e518702ab'),
78
+ AztecAddress.fromStringUnsafe('0x2b95cb98fbd2723c66350f27310e670ff9faeaa8ca100ce83a3195e4d8235e17'),
79
+ AztecAddress.fromStringUnsafe('0x2b937086a6b367070f03fd007b932f64fcce36501ffcad6ff7c73f1d116e1c77'),
80
+ AztecAddress.fromStringUnsafe('0x064e81954bc70f4c8e060d4fa2ba0427eff0fe10f1f5aa57bf8f93c8745fac79'),
81
81
  AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000'),
82
82
  AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000'),
83
83
  AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000'),
@@ -87,13 +87,13 @@ export const ProtocolContractsList = new ProtocolContracts([
87
87
  AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000'),
88
88
  AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000')
89
89
  ]);
90
- export const protocolContractsHash = Fr.fromString('0x0030cdae9792549b9edb5b865f4e10e91bb87565f22ab80d405213f7e991b378');
90
+ export const protocolContractsHash = Fr.fromString('0x0f54271c52865841a77aaa66036eed901aff22fdce9f08e123ec8b205c9854d7');
91
91
  export const ProtocolContractGenesisNullifiers = [
92
92
  Fr.fromString('0x04287df03953b0d68b0e83e08a89067afc602626defd6002277cd6df34696818'),
93
93
  Fr.fromString('0x0d99507b7ecac720c73bf197a0e7366a5ed80c1c1b0afe8ff8c6ecc7b5a7aefe'),
94
94
  Fr.fromString('0x0eb50b367fb754d3a7d1238bfc105cc9b391a02e187be69038876ae9a502e877'),
95
+ Fr.fromString('0x16f917edd8e333013e5bb0633f7f484725bd19403854d6112992dccef4961e32'),
95
96
  Fr.fromString('0x1cea539e01abaa5db980e7ff52ef0d2a7772310306ac625783ae435756ee326d'),
96
- Fr.fromString('0x2c1eb017f1534e95d91808e7ccc5f24a1cc6bf5686c6b6598e79b6f571d386fe'),
97
97
  Fr.fromString('0x2c3a57c8d7c387652babd36c4d79ab03c0fe593e160315a4dc098f92caf592c3')
98
98
  ];
99
99
  export const CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG = Fr.fromHexString('0x1a7e1badb79abdd38c684b3c8306ffe7ecb33c69e3380d9855730aaaa83a21a8');
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@aztec-labs/protocol-contracts",
3
3
  "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/yarn-project/protocol-contracts",
4
4
  "description": "Canonical Noir contracts for the Aztec Network",
5
- "version": "6.0.0-rc.2",
5
+ "version": "6.0.0-rc.3",
6
6
  "type": "module",
7
7
  "exports": {
8
8
  ".": "./dest/index.js",
@@ -73,15 +73,15 @@
73
73
  ]
74
74
  },
75
75
  "dependencies": {
76
- "@aztec-labs/constants": "6.0.0-rc.2",
77
- "@aztec-labs/foundation": "6.0.0-rc.2",
78
- "@aztec-labs/stdlib": "6.0.0-rc.2",
76
+ "@aztec-labs/constants": "6.0.0-rc.3",
77
+ "@aztec-labs/foundation": "6.0.0-rc.3",
78
+ "@aztec-labs/stdlib": "6.0.0-rc.3",
79
79
  "lodash.chunk": "^4.2.0",
80
80
  "lodash.omit": "^4.5.0",
81
81
  "tslib": "^2.4.0"
82
82
  },
83
83
  "devDependencies": {
84
- "@aztec-foundation/protocol-contracts-artifacts": "6.0.0-rc.5",
84
+ "@aztec-foundation/protocol-contracts-artifacts": "6.0.0-rc.6",
85
85
  "@jest/globals": "^30.0.0",
86
86
  "@types/jest": "^30.0.0",
87
87
  "@types/lodash.chunk": "^4.2.9",
@@ -33,23 +33,23 @@ FeeJuice: AztecAddress.fromBigIntUnsafe(3n)
33
33
 
34
34
 
35
35
  export const ProtocolContractDerivedAddress = {
36
- ContractInstanceRegistry: AztecAddress.fromStringUnsafe('0x0a80f1a867261f73366b038402bef355a9f7d0d48b65dc5859f936bdc85b01dd'),
37
- ContractClassRegistry: AztecAddress.fromStringUnsafe('0x1d9b7b92e6f207ba7acf9ea59f402f563794b4668d112df80e7a289f872ee33f'),
38
- FeeJuice: AztecAddress.fromStringUnsafe('0x2edff490433ce3c44345ba9116fc973f95bae381b3387e2ddb78245e518702ab')
36
+ ContractInstanceRegistry: AztecAddress.fromStringUnsafe('0x2b937086a6b367070f03fd007b932f64fcce36501ffcad6ff7c73f1d116e1c77'),
37
+ ContractClassRegistry: AztecAddress.fromStringUnsafe('0x2b95cb98fbd2723c66350f27310e670ff9faeaa8ca100ce83a3195e4d8235e17'),
38
+ FeeJuice: AztecAddress.fromStringUnsafe('0x064e81954bc70f4c8e060d4fa2ba0427eff0fe10f1f5aa57bf8f93c8745fac79')
39
39
  };
40
40
 
41
41
 
42
42
 
43
43
  export const ProtocolContractClassId: Record<ProtocolContractName, Fr> = {
44
- ContractInstanceRegistry: Fr.fromString('0x2ddcfb2affa46c76b4b24e24a5d7ca5fa4fe0db09a93eefb8719377d4ab4ac75'),
44
+ ContractInstanceRegistry: Fr.fromString('0x250bc22bd53e83820ec12b83b41addb81073884ef63e7dc5261787bf92850f7f'),
45
45
  ContractClassRegistry: Fr.fromString('0x010f027b753bf0e29dedc8e47a8bdda62211a7253b002b625cffb475495dc002'),
46
46
  FeeJuice: Fr.fromString('0x1fa4d16bbcc242b144b07ee9a424083ee404ed9ce11037b24c465057b6a92c59')
47
47
  };
48
48
 
49
49
  export const ProtocolContractClassIdPreimage: Record<ProtocolContractName, { artifactHash: Fr; privateFunctionsRoot: Fr; publicBytecodeCommitment: Fr }> = {
50
50
  ContractInstanceRegistry: {
51
- artifactHash: Fr.fromString('0x272d6a46be29b8aae0d46c96f52cf09a4f5ecccdee332727d23b60cc12d7bea6'),
52
- privateFunctionsRoot: Fr.fromString('0x225cf0ac7fe1c7649d253b0fc79b966ad847f7c762e361acad161fd40d9e70e2'),
51
+ artifactHash: Fr.fromString('0x28f9ec60f51cd93bc2cd3d021d3a0d1847cd3b4b57ed6fb22435d422b3a0fb31'),
52
+ privateFunctionsRoot: Fr.fromString('0x2cab3dca97df25e1b2f62b64540799a1130f8d2cf41aff507909ec075cb3905b'),
53
53
  publicBytecodeCommitment: Fr.fromString('0x1fd8380bb220e7d13db681da7e62c93b03add6754895a84c51d13fcde03e8d25'),
54
54
  },
55
55
  ContractClassRegistry: {
@@ -71,7 +71,7 @@ FeeJuice: Fr.fromString('0x00000000000000000000000000000000000000000000000000000
71
71
  };
72
72
 
73
73
  export const ProtocolContractPrivateFunctions: Record<ProtocolContractName, { selector: FunctionSelector; vkHash: Fr }[]> = {
74
- ContractInstanceRegistry: [{ selector: FunctionSelector.fromField(Fr.fromString('0x0000000000000000000000000000000000000000000000000000000077cff62f')), vkHash: Fr.fromString('0x1cdc691d3fb13bcc6915dd93aa4d425cf2567a2000c9e5f8110edd1a44ca5578') }],
74
+ ContractInstanceRegistry: [{ selector: FunctionSelector.fromField(Fr.fromString('0x0000000000000000000000000000000000000000000000000000000077cff62f')), vkHash: Fr.fromString('0x0ba93c1df26342e4871884648597eba8204fe51b1295e00ecb69a011db1359b6') }],
75
75
  ContractClassRegistry: [{ selector: FunctionSelector.fromField(Fr.fromString('0x000000000000000000000000000000000000000000000000000000006934ed0d')), vkHash: Fr.fromString('0x1af8e7c965fa21b828e2307fb320fbf38038a42121495906aba2b80c3f072bd8') }],
76
76
  FeeJuice: [{ selector: FunctionSelector.fromField(Fr.fromString('0x00000000000000000000000000000000000000000000000000000000cbe67243')), vkHash: Fr.fromString('0x2e78182eafa9eedb8a75d0eabee8cc7031a41b2d630949979a9495f6be9d9e2e') }, { selector: FunctionSelector.fromField(Fr.fromString('0x00000000000000000000000000000000000000000000000000000000e8d374b6')), vkHash: Fr.fromString('0x253da18011550ba749e4311e9dc5f59309a35c27b1d16e1f9ccb90bae9db1235') }]
77
77
  };
@@ -79,9 +79,9 @@ FeeJuice: [{ selector: FunctionSelector.fromField(Fr.fromString('0x0000000000000
79
79
 
80
80
 
81
81
  export const ProtocolContractsList = new ProtocolContracts([
82
- AztecAddress.fromStringUnsafe('0x1d9b7b92e6f207ba7acf9ea59f402f563794b4668d112df80e7a289f872ee33f'),
83
- AztecAddress.fromStringUnsafe('0x0a80f1a867261f73366b038402bef355a9f7d0d48b65dc5859f936bdc85b01dd'),
84
- AztecAddress.fromStringUnsafe('0x2edff490433ce3c44345ba9116fc973f95bae381b3387e2ddb78245e518702ab'),
82
+ AztecAddress.fromStringUnsafe('0x2b95cb98fbd2723c66350f27310e670ff9faeaa8ca100ce83a3195e4d8235e17'),
83
+ AztecAddress.fromStringUnsafe('0x2b937086a6b367070f03fd007b932f64fcce36501ffcad6ff7c73f1d116e1c77'),
84
+ AztecAddress.fromStringUnsafe('0x064e81954bc70f4c8e060d4fa2ba0427eff0fe10f1f5aa57bf8f93c8745fac79'),
85
85
  AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000'),
86
86
  AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000'),
87
87
  AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000'),
@@ -92,7 +92,7 @@ AztecAddress.fromStringUnsafe('0x00000000000000000000000000000000000000000000000
92
92
  AztecAddress.fromStringUnsafe('0x0000000000000000000000000000000000000000000000000000000000000000')
93
93
  ]);
94
94
 
95
- export const protocolContractsHash = Fr.fromString('0x0030cdae9792549b9edb5b865f4e10e91bb87565f22ab80d405213f7e991b378');
95
+ export const protocolContractsHash = Fr.fromString('0x0f54271c52865841a77aaa66036eed901aff22fdce9f08e123ec8b205c9854d7');
96
96
 
97
97
 
98
98
 
@@ -100,8 +100,8 @@ AztecAddress.fromStringUnsafe('0x00000000000000000000000000000000000000000000000
100
100
  Fr.fromString('0x04287df03953b0d68b0e83e08a89067afc602626defd6002277cd6df34696818'),
101
101
  Fr.fromString('0x0d99507b7ecac720c73bf197a0e7366a5ed80c1c1b0afe8ff8c6ecc7b5a7aefe'),
102
102
  Fr.fromString('0x0eb50b367fb754d3a7d1238bfc105cc9b391a02e187be69038876ae9a502e877'),
103
+ Fr.fromString('0x16f917edd8e333013e5bb0633f7f484725bd19403854d6112992dccef4961e32'),
103
104
  Fr.fromString('0x1cea539e01abaa5db980e7ff52ef0d2a7772310306ac625783ae435756ee326d'),
104
- Fr.fromString('0x2c1eb017f1534e95d91808e7ccc5f24a1cc6bf5686c6b6598e79b6f571d386fe'),
105
105
  Fr.fromString('0x2c3a57c8d7c387652babd36c4d79ab03c0fe593e160315a4dc098f92caf592c3')
106
106
  ];
107
107