@aztec/protocol-contracts 5.0.0-nightly.20260413 → 5.0.0-nightly.20260414
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.
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
34
|
"bytecode": "JwACBAEoAAABBIBEJwAABEQnAgIEACcCAwQAHwoAAgADAEMlAAAAPC0CAkMnAgMEQycCBAQBOw4ABAADHgIAAwknAgQBASQCAAMAAABTJQAAAngeAgADASkCAAQA71JTTScCBQABKwIABgAAAAAAAAAAAwAAAAAAAAAALQgBBycCCAQFAAgBCAEnAwcEAQAiBwIILQoICS0OBAkAIgkCCS0OBQkAIgkCCS0OAwkAIgkCCS0OBgktCAEDJwIEBAUACAEEAScDAwQBACIHAgQAIgMCBT8PAAQABScCBAQBACoDBAUtCwUFJwIDAAAKKgUDBCcCAwEACioEAwYkAgAGAAABCCUAAAKKHgIAAwYeAgAEAC8qAAUABAAGHAoGBQQcCgUEAAIqBgQFLAIABAAtXgmLgro3tDuZoTFhGP0g1C9RZsnp8T+16mWpbR4KbQQqBQQGHAoGBwQcCgcFAAIqBgUHBCoHBAYcCgYIAhwKCAcAHAoHCAIcCggJARwKCQcCJwIIAgAKKgcICRYKCQccCgcKAAIqBgoLLAIABgAwM+okblBuiY6X9XDK/9cEywu0YDE/tyCynhOeXBAAAQQqCwYKHAoKDAQcCgwLAAIqCgsMBCoMBAocCgoMAhwKDAQAHAoEDAIcCgwNARwKDQQCCioECAwWCgwEHAoECAACKgoIDQQqDQYIHAoICgQcCgoGABwKBggFHAoMBgUcCgQKBQQqCggEHAoLCAUcCgkKBRwKBwkFBCoJCAccCgUIBQwqAwgFKQIAAwUAAVGAJAIABQAAAmgjAAACWQQqCgMEACoHBAIjAAACdwQqBgMFACoEBQIjAAACdyYqAQABBU/fSorXz/DTPAQCASYqAQABBbq7IdeCMxhkPAQCASY=",
|
|
35
|
-
"debug_symbols": "
|
|
35
|
+
"debug_symbols": "rVhbbuM4ELyLvv3BfvGRqwwGgZMoAwOGE3jsBRaB777dtpqyByB3lrM/VrlklYrNYlPW1/Q2v5x/PO8O7x8/p6dvX9PLcbff73487z9et6fdx0HZrynYR9RP2kxRpifeTCncDvl6yDQ9RT3oN9DflHQ7QsAFIDnwU+SnyBl2hp0RcCALMBM3wA7KApLfIi0uIJugGIgLKOBgYTCAA2fAGTAbOipEdOAM2W+ygbgAdoadEWekLMA8IxpQBo1JylBQYFbJTuW0gGIMGTBGa0zEDvRyUofE7MAYNUZiTDJgjN6C7KY34Mz1psVAWUBWhoOBsoDiTLEJhs3EQcvLaMAYNcYsCxDLAhuQBdg0sRgwRo3xNS/JgCwgO5ONUWNcggNj1JiE4ED9SDCgDkX9CBiDBoxRG4LswBi1IVaxG3CGnbGKiToUq9gNOBOdsYqJmhermOTLZTP5sng+HefZVsXdOtHV87k9zofT9HQ47/eb6a/t/nz90c/P7eF6PG2PelbHMR/e9KiC77v9bOiyWa8O7UsB2YZ4vVxxkiohjxrQ1igRYJEokXBVyA8K2HERcnQTEEpVSDA6jtQaR1cjhlUjQmxpSFuDLF1XBV0oQ+PQcKweArY8pH4tqkRZZzTLg0JuK2D2SOl6rdcj4INA6USCglsoxOsgIJXHVHVKUQL7bJRQQlsDetPhEpTvBkK/KHSiqV3bo4mQeUwDyW0gxo4PbmsIgOdCdB9bq5F/2waVBHVaU2na6EULiucbKMRWtKAjkRBdIunmtkrw4Bqhds/qJFQ3fPZqKI7UMoIdJ1k3pkUjc4rNztdJaKwFTZBaDeNfBpJkHUhJzYFQRyRjyC6SNa5NEe51caTaxoNOUrMenQZaSklVIwA3NWKnpvrstmhEyG0bnZRi8nJgafbx/jjsYcLHgblpojO1JFIX7P1W8KuN/sTG6iNrV25NLHUyqs+OUqtB+a4Tw3/QqEuFdF4HNaTurgFkSENLUGsaIgxq1BVHADSqwVUD05gGSKoaMY5qxKqR4H/QGPVRqgbiqI8S/lwj14wh8ZiGPjxWjdGaYq4ZIxj1kWvGCMfWLdGaMRrNGK35oNF6PGiM+lgzxhhGNcKfa6wZYxrsH7z2Qo5lTCOx7w1aUhzTyHf/FQb7uv7J8IxxgHYv/P3HIH1abm100tv1Q/0DiIHvjajGd/26fd0dH15lXUzsuNu+7Ofl6/v58Hp39vT3p5/xV2Gfx4/X+e18nE1pfR9m74m+gf6b0S3l+8Xu9w8="
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
38
|
"name": "public_dispatch",
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"bytecode": "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",
|
|
99
|
-
"debug_symbols": "
|
|
99
|
+
"debug_symbols": "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"
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
102
|
"name": "publish_for_public_execution",
|
|
@@ -2064,23 +2064,39 @@
|
|
|
2064
2064
|
"error_kind": "string",
|
|
2065
2065
|
"string": "Point not on curve"
|
|
2066
2066
|
},
|
|
2067
|
+
"1560923443647584783": {
|
|
2068
|
+
"error_kind": "string",
|
|
2069
|
+
"string": "TpkM is the point at infinity"
|
|
2070
|
+
},
|
|
2071
|
+
"1911279422186654533": {
|
|
2072
|
+
"error_kind": "string",
|
|
2073
|
+
"string": "OvpkM is the point at infinity"
|
|
2074
|
+
},
|
|
2067
2075
|
"4135474769840782447": {
|
|
2068
2076
|
"error_kind": "string",
|
|
2069
2077
|
"string": "Point at infinity should have canonical representation (0 0)"
|
|
2070
2078
|
},
|
|
2079
|
+
"7264753475633835214": {
|
|
2080
|
+
"error_kind": "string",
|
|
2081
|
+
"string": "NpkM is the point at infinity"
|
|
2082
|
+
},
|
|
2071
2083
|
"12469291177396340830": {
|
|
2072
2084
|
"error_kind": "string",
|
|
2073
2085
|
"string": "call to assert_max_bit_size"
|
|
2074
2086
|
},
|
|
2087
|
+
"14483585040754951598": {
|
|
2088
|
+
"error_kind": "string",
|
|
2089
|
+
"string": "IvpkM is the point at infinity"
|
|
2090
|
+
},
|
|
2075
2091
|
"14990209321349310352": {
|
|
2076
2092
|
"error_kind": "string",
|
|
2077
2093
|
"string": "attempt to add with overflow"
|
|
2078
2094
|
}
|
|
2079
2095
|
}
|
|
2080
2096
|
},
|
|
2081
|
-
"bytecode": "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",
|
|
2082
|
-
"debug_symbols": "
|
|
2083
|
-
"verification_key": "
|
|
2097
|
+
"bytecode": "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",
|
|
2098
|
+
"debug_symbols": "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",
|
|
2099
|
+
"verification_key": "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"
|
|
2084
2100
|
},
|
|
2085
2101
|
{
|
|
2086
2102
|
"name": "set_update_delay",
|
|
@@ -2129,7 +2145,7 @@
|
|
|
2129
2145
|
}
|
|
2130
2146
|
},
|
|
2131
2147
|
"bytecode": "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",
|
|
2132
|
-
"debug_symbols": "rZrRbh0pD8ffJde9ABtsyKusqipt01WkKK2yySd9qvLuazNjMycS9ITZm8wvPmf+Y4wBw5zfN9/vv77+/eXh6cfPf25u//p98/X54fHx4e8vjz+/3b08/HwS6++boH8iygU/yTXf3Ga5prBf02ZPdbtm+Z/1Wrcr7f8z7FferiXe3MagQAJqqXkDiLsFIBjYR2gWNEsyizqyQdkhowHvQGBgj+BooIJVoe5QkoFZqlnqbsGwWzCKGxAUsoF8B0BAnQcJDSIaiIeQBBIamCXTDiSOYRTgYJAM6g7FLMUs1Sy1bJACGPAOMRrQDhAMsoEKiqtJfd6g7JDMksySzZLNop2OSaHuwPodUig7FLMUs1TaIAfxMKGCWJJkWY4imFih7gBqKQpqkS7I2qcNtE9zUKAdNNlyVFCLdEquatFH6EMVKEQDtYjPpIHaQC3iBkE0MIsmZCYFHRfiGLWBIY6RZnqDIl2QqwLvUMVCQUEsJI6xdhOBAu8QzRLVIo4xgIFaxDFGMBB/SPzhJB4SKahF/OGslqJAO2hqUVWgHdgsbBaNGAcF2qGape6WohHjqKAWcaNoxFgeWkj6lOVZpd0ugqXd3mC3VB07DUC+XESwarJtYBZtRQNtRSEFtYhy1RwrervmWPtIB0j7SAPePtKAN9CAt+9owPU7MQTpsBqVdOzupDad1YIOiUqNshG6DZNTMUrgxEbZber2RqQq3EiVmy86xmttlI2K23SY71SMtEE78U4xgBMZadukrQ11hgvaztgm1gANsyN2qzbQsDhqEw3ZMXertnJHamLYsD0iKXKz5obZsXRrm3R3LI4VOrIhBOhIjluLqWF7hMZ6W0pCaZgdsVu3Fm9YHLcWb8iOuVu3FjfcWlwb6iPa6gatxTE1TB2rY+nW0q21W3Uq3xBbi3dkRx11huQIoWPu2B6h0WnLkWFxTN2aujV3a+5Wak5yw+qoU73EvmF1LNlRp4KoS6MgGaYQ7QuptVhXwZgDduxWnRsN2RG6FboVuxW7NYeOqWN/RCtLQDOKQmuFtphi+26ra2J1hG7dnrZhe1ppNRA4bg/eMDtSt9LB2h6hGUUtdzA0VKuu0pFa7iA0bFYdb9RyR1ddwWZNb2+fbqym+/LyfH+vJd2hyJPS79fd8/3Ty83t0+vj46eb/909vrYv/fPr7qldX+6e5VNx4P7pu1xF8MfD473S26d+
|
|
2148
|
+
"debug_symbols": "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"
|
|
2133
2149
|
},
|
|
2134
2150
|
{
|
|
2135
2151
|
"name": "update",
|
|
@@ -2185,7 +2201,7 @@
|
|
|
2185
2201
|
}
|
|
2186
2202
|
},
|
|
2187
2203
|
"bytecode": "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",
|
|
2188
|
-
"debug_symbols": "
|
|
2204
|
+
"debug_symbols": "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"
|
|
2189
2205
|
}
|
|
2190
2206
|
],
|
|
2191
2207
|
"outputs": {
|
|
@@ -3903,25 +3919,45 @@
|
|
|
3903
3919
|
"name": "PublicKeys::validate_on_curve",
|
|
3904
3920
|
"start": 2492
|
|
3905
3921
|
},
|
|
3922
|
+
{
|
|
3923
|
+
"name": "PublicKeys::validate_non_infinity",
|
|
3924
|
+
"start": 2722
|
|
3925
|
+
},
|
|
3906
3926
|
{
|
|
3907
3927
|
"name": "<impl ToPoint for AddressPoint>::to_point",
|
|
3908
|
-
"start":
|
|
3928
|
+
"start": 3207
|
|
3909
3929
|
},
|
|
3910
3930
|
{
|
|
3911
3931
|
"name": "test::compute_public_keys_hash",
|
|
3912
|
-
"start":
|
|
3932
|
+
"start": 3517
|
|
3933
|
+
},
|
|
3934
|
+
{
|
|
3935
|
+
"name": "test::test_validate_on_curve",
|
|
3936
|
+
"start": 4231
|
|
3937
|
+
},
|
|
3938
|
+
{
|
|
3939
|
+
"name": "test::test_validate_not_on_curve",
|
|
3940
|
+
"start": 4690
|
|
3941
|
+
},
|
|
3942
|
+
{
|
|
3943
|
+
"name": "test::test_validate_non_infinity",
|
|
3944
|
+
"start": 5151
|
|
3945
|
+
},
|
|
3946
|
+
{
|
|
3947
|
+
"name": "test::test_validate_infinity",
|
|
3948
|
+
"start": 5621
|
|
3913
3949
|
},
|
|
3914
3950
|
{
|
|
3915
3951
|
"name": "test::compute_default_hash",
|
|
3916
|
-
"start":
|
|
3952
|
+
"start": 6015
|
|
3917
3953
|
},
|
|
3918
3954
|
{
|
|
3919
3955
|
"name": "test::serde",
|
|
3920
|
-
"start":
|
|
3956
|
+
"start": 6393
|
|
3921
3957
|
}
|
|
3922
3958
|
],
|
|
3923
3959
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-protocol-circuits/crates/types/src/public_keys.nr",
|
|
3924
|
-
"source": "use crate::{\n address::public_keys_hash::PublicKeysHash,\n constants::{\n DEFAULT_IVPK_M_X, DEFAULT_IVPK_M_Y, DEFAULT_NPK_M_X, DEFAULT_NPK_M_Y, DEFAULT_OVPK_M_X,\n DEFAULT_OVPK_M_Y, DEFAULT_TPK_M_X, DEFAULT_TPK_M_Y, DOM_SEP__PUBLIC_KEYS_HASH,\n },\n hash::poseidon2_hash_with_separator,\n point::validate_on_curve,\n traits::{Deserialize, Hash, Serialize},\n};\n\nuse crate::point::Point;\nuse std::{default::Default, meta::derive};\n\npub trait ToPoint {\n fn to_point(self) -> Point;\n}\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct NpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct IvpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct OvpkM {\n pub inner: Point,\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct TpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct PublicKeys {\n pub npk_m: NpkM,\n pub ivpk_m: IvpkM,\n pub ovpk_m: OvpkM,\n pub tpk_m: TpkM,\n}\n\nimpl Default for PublicKeys {\n fn default() -> Self {\n PublicKeys {\n npk_m: NpkM {\n inner: Point { x: DEFAULT_NPK_M_X, y: DEFAULT_NPK_M_Y, is_infinite: false },\n },\n ivpk_m: IvpkM {\n inner: Point { x: DEFAULT_IVPK_M_X, y: DEFAULT_IVPK_M_Y, is_infinite: false },\n },\n ovpk_m: OvpkM {\n inner: Point { x: DEFAULT_OVPK_M_X, y: DEFAULT_OVPK_M_Y, is_infinite: false },\n },\n tpk_m: TpkM {\n inner: Point { x: DEFAULT_TPK_M_X, y: DEFAULT_TPK_M_Y, is_infinite: false },\n },\n }\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(poseidon2_hash_with_separator(\n self.serialize(),\n DOM_SEP__PUBLIC_KEYS_HASH as Field,\n ))\n }\n\n pub fn validate_on_curve(self) {\n validate_on_curve(self.npk_m.inner);\n validate_on_curve(self.ivpk_m.inner);\n validate_on_curve(self.ovpk_m.inner);\n validate_on_curve(self.tpk_m.inner);\n }\n}\n\npub struct AddressPoint {\n pub inner: Point,\n}\n\nimpl ToPoint for AddressPoint {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nmod test {\n use crate::point::Point;\n use crate::{\n point::POINT_LENGTH,\n public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, TpkM},\n traits::{Deserialize, Serialize},\n };\n\n #[test]\n unconstrained fn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n };\n\n let actual = keys.hash();\n\n // The following value was generated by `public_keys.test.ts`.\n let expected_public_keys_hash =\n 0x056998309f6c119e4d753e404f94fef859dddfa530a9379634ceb0854b29bf7a;\n\n assert(actual.to_field() == expected_public_keys_hash);\n }\n\n #[test]\n unconstrained fn compute_default_hash() {\n let keys = PublicKeys::default();\n\n let actual = keys.hash();\n\n // The following value was generated by `public_keys.test.ts`.\n let test_data_default_hash =\n 0x023547e676dba19784188825b901a0e70d8ad978300d21d6185a54281b734da0;\n\n assert(actual.to_field() == test_data_default_hash);\n }\n\n #[test]\n unconstrained fn serde() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n };\n\n // We use the PUBLIC_KEYS_LENGTH constant to ensure that there is a match between the derived trait\n let serialized: [Field; POINT_LENGTH * 4] = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys, deserialized);\n }\n}\n"
|
|
3960
|
+
"source": "use crate::{\n address::public_keys_hash::PublicKeysHash,\n constants::{\n DEFAULT_IVPK_M_X, DEFAULT_IVPK_M_Y, DEFAULT_NPK_M_X, DEFAULT_NPK_M_Y, DEFAULT_OVPK_M_X,\n DEFAULT_OVPK_M_Y, DEFAULT_TPK_M_X, DEFAULT_TPK_M_Y, DOM_SEP__PUBLIC_KEYS_HASH,\n },\n hash::poseidon2_hash_with_separator,\n point::validate_on_curve,\n traits::{Deserialize, Hash, Serialize},\n};\n\nuse crate::point::Point;\nuse std::{default::Default, meta::derive};\n\npub trait ToPoint {\n fn to_point(self) -> Point;\n}\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct NpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct IvpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct OvpkM {\n pub inner: Point,\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct TpkM {\n pub inner: Point,\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\n#[derive(Deserialize, Eq, Serialize)]\npub struct PublicKeys {\n pub npk_m: NpkM,\n pub ivpk_m: IvpkM,\n pub ovpk_m: OvpkM,\n pub tpk_m: TpkM,\n}\n\nimpl Default for PublicKeys {\n fn default() -> Self {\n PublicKeys {\n npk_m: NpkM {\n inner: Point { x: DEFAULT_NPK_M_X, y: DEFAULT_NPK_M_Y, is_infinite: false },\n },\n ivpk_m: IvpkM {\n inner: Point { x: DEFAULT_IVPK_M_X, y: DEFAULT_IVPK_M_Y, is_infinite: false },\n },\n ovpk_m: OvpkM {\n inner: Point { x: DEFAULT_OVPK_M_X, y: DEFAULT_OVPK_M_Y, is_infinite: false },\n },\n tpk_m: TpkM {\n inner: Point { x: DEFAULT_TPK_M_X, y: DEFAULT_TPK_M_Y, is_infinite: false },\n },\n }\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(poseidon2_hash_with_separator(\n self.serialize(),\n DOM_SEP__PUBLIC_KEYS_HASH as Field,\n ))\n }\n\n pub fn validate_on_curve(self) {\n validate_on_curve(self.npk_m.inner);\n validate_on_curve(self.ivpk_m.inner);\n validate_on_curve(self.ovpk_m.inner);\n validate_on_curve(self.tpk_m.inner);\n }\n\n pub fn validate_non_infinity(self) {\n assert_eq(self.npk_m.inner.is_infinite, false, \"NpkM is the point at infinity\");\n assert_eq(self.ivpk_m.inner.is_infinite, false, \"IvpkM is the point at infinity\");\n assert_eq(self.ovpk_m.inner.is_infinite, false, \"OvpkM is the point at infinity\");\n assert_eq(self.tpk_m.inner.is_infinite, false, \"TpkM is the point at infinity\");\n }\n}\n\npub struct AddressPoint {\n pub inner: Point,\n}\n\nimpl ToPoint for AddressPoint {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nmod test {\n use crate::point::Point;\n use crate::{\n point::POINT_LENGTH,\n public_keys::{IvpkM, NpkM, OvpkM, PublicKeys, TpkM},\n traits::{Deserialize, Serialize},\n };\n use std::ops::Neg;\n\n #[test]\n unconstrained fn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n };\n\n let actual = keys.hash();\n\n // The following value was generated by `public_keys.test.ts`.\n let expected_public_keys_hash =\n 0x056998309f6c119e4d753e404f94fef859dddfa530a9379634ceb0854b29bf7a;\n\n assert(actual.to_field() == expected_public_keys_hash);\n }\n\n #[test]\n unconstrained fn test_validate_on_curve() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point::generator() },\n ivpk_m: IvpkM { inner: Point::generator().double() },\n ovpk_m: OvpkM { inner: Point::generator().neg() },\n tpk_m: TpkM { inner: Point::generator() + Point::generator().double() },\n };\n\n keys.validate_on_curve();\n }\n\n #[test(should_fail_with = \"Point not on curve\")]\n unconstrained fn test_validate_not_on_curve() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n };\n\n keys.validate_on_curve();\n }\n\n #[test]\n unconstrained fn test_validate_non_infinity() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point::generator() },\n ivpk_m: IvpkM { inner: Point::generator().double() },\n ovpk_m: OvpkM { inner: Point::generator().neg() },\n tpk_m: TpkM { inner: Point::generator() + Point::generator().double() },\n };\n\n keys.validate_non_infinity();\n }\n\n #[test(should_fail_with = \"TpkM is the point at infinity\")]\n unconstrained fn test_validate_infinity() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point::generator() },\n ivpk_m: IvpkM { inner: Point::generator().double() },\n ovpk_m: OvpkM { inner: Point::generator().neg() },\n tpk_m: TpkM { inner: Point::point_at_infinity() },\n };\n\n keys.validate_non_infinity();\n }\n\n #[test]\n unconstrained fn compute_default_hash() {\n let keys = PublicKeys::default();\n\n let actual = keys.hash();\n\n // The following value was generated by `public_keys.test.ts`.\n let test_data_default_hash =\n 0x023547e676dba19784188825b901a0e70d8ad978300d21d6185a54281b734da0;\n\n assert(actual.to_field() == test_data_default_hash);\n }\n\n #[test]\n unconstrained fn serde() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } },\n };\n\n // We use the PUBLIC_KEYS_LENGTH constant to ensure that there is a match between the derived trait\n let serialized: [Field; POINT_LENGTH * 4] = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys, deserialized);\n }\n}\n"
|
|
3925
3961
|
},
|
|
3926
3962
|
"212": {
|
|
3927
3963
|
"function_locations": [
|
|
@@ -4873,27 +4909,27 @@
|
|
|
4873
4909
|
},
|
|
4874
4910
|
{
|
|
4875
4911
|
"name": "ContractInstanceRegistry::update",
|
|
4876
|
-
"start":
|
|
4912
|
+
"start": 8513
|
|
4877
4913
|
},
|
|
4878
4914
|
{
|
|
4879
4915
|
"name": "ContractInstanceRegistry::set_update_delay",
|
|
4880
|
-
"start":
|
|
4916
|
+
"start": 10807
|
|
4881
4917
|
},
|
|
4882
4918
|
{
|
|
4883
4919
|
"name": "ContractInstanceRegistry::get_update_delay",
|
|
4884
|
-
"start":
|
|
4920
|
+
"start": 12110
|
|
4885
4921
|
},
|
|
4886
4922
|
{
|
|
4887
4923
|
"name": "ContractInstanceRegistry::public_dispatch",
|
|
4888
|
-
"start":
|
|
4924
|
+
"start": 13270
|
|
4889
4925
|
},
|
|
4890
4926
|
{
|
|
4891
4927
|
"name": "ContractInstanceRegistry::Storage<Context>::init",
|
|
4892
|
-
"start":
|
|
4928
|
+
"start": 14435
|
|
4893
4929
|
}
|
|
4894
4930
|
],
|
|
4895
4931
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/noir-contracts/contracts/protocol/contract_instance_registry_contract/src/main.nr",
|
|
4896
|
-
"source": "/// Protocol contract responsible for deploying contract instances and managing contract upgrades.\n///\n/// In Aztec, contracts are split into *classes* (code, registered via ContractClassRegistry) and *instances*\n/// (deployments of a class at a unique address). This contract handles contract instance publishing and contract\n/// updates (updating instance to a new class).\npub contract ContractInstanceRegistry {\n use aztec::{\n context::{PrivateContext, PublicContext},\n hash::hash_args,\n nullifier::utils::compute_nullifier_existence_request,\n oracle::{avm, logging::debug_log_format, version::assert_compatible_oracle_version},\n protocol::{\n abis::function_selector::FunctionSelector,\n address::{AztecAddress, PartialAddress},\n constants::{\n CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS, CONTRACT_INSTANCE_PUBLISHED_MAGIC_VALUE,\n CONTRACT_INSTANCE_UPDATED_MAGIC_VALUE, DEFAULT_UPDATE_DELAY, MINIMUM_UPDATE_DELAY,\n },\n contract_class_id::ContractClassId,\n public_keys::PublicKeys,\n traits::{Deserialize, Serialize, ToField},\n utils::reader::Reader,\n },\n state_vars::{DelayedPublicMutable, Map, StateVariable},\n };\n\n #[abi(events)]\n struct ContractInstancePublished {\n CONTRACT_INSTANCE_PUBLISHED_MAGIC_VALUE: Field,\n address: AztecAddress,\n version: u8,\n salt: Field,\n contract_class_id: ContractClassId,\n initialization_hash: Field,\n public_keys: PublicKeys,\n deployer: AztecAddress,\n }\n\n // Custom serialization is required because we don't want to waste one field for the `is_infinite` flag of public\n // key points (public key points will never be the infinity point).\n impl ContractInstancePublished {\n fn serialize_non_standard(self) -> [Field; 15] {\n [\n self.CONTRACT_INSTANCE_PUBLISHED_MAGIC_VALUE,\n self.address.to_field(),\n self.version.to_field(),\n self.salt,\n self.contract_class_id.to_field(),\n self.initialization_hash,\n self.public_keys.npk_m.serialize()[0],\n self.public_keys.npk_m.serialize()[1],\n self.public_keys.ivpk_m.serialize()[0],\n self.public_keys.ivpk_m.serialize()[1],\n self.public_keys.ovpk_m.serialize()[0],\n self.public_keys.ovpk_m.serialize()[1],\n self.public_keys.tpk_m.serialize()[0],\n self.public_keys.tpk_m.serialize()[1],\n self.deployer.to_field(),\n ]\n }\n }\n\n #[abi(events)]\n #[derive(Serialize)]\n struct ContractInstanceUpdated {\n CONTRACT_INSTANCE_UPDATED_MAGIC_VALUE: Field,\n address: AztecAddress,\n prev_contract_class_id: ContractClassId,\n new_contract_class_id: ContractClassId,\n timestamp_of_change: u64,\n }\n\n struct Storage<Context> {\n /// Map from contract instance address to a `DelayedPublicMutable` holding the updated contract class ID.\n updated_class_ids: Map<AztecAddress, DelayedPublicMutable<ContractClassId, DEFAULT_UPDATE_DELAY, Context>, Context>,\n }\n\n /// Publishes a new contract instance.\n ///\n /// The caller provides deployment parameters (salt, class_id, init_hash, public_keys, universal_deploy).\n /// The `universal_deploy` flag controls whether the deployer address is bound into the contract address:\n /// when true, deployer is zero (anyone can deploy the same instance); when false, deployer is the caller.\n ///\n /// This function:\n /// 1. Verifies the contract class is registered in ContractClassRegistry (nullifier existence check).\n /// 2. Validates public key points are on the Grumpkin curve (preventing AVM DoS via invalid points).\n /// 3. Computes the deterministic contract address from the deployment parameters.\n /// 4. Emits the address as a nullifier (proving publication preventing duplicate deployment)\n /// --> this address nullifier is then checked to exist by the AVM upon public function execution (if it doesn't\n /// exist AVM reverts)\n /// 5. Broadcasts a `ContractInstancePublished` event so nodes can reconstruct the instance.\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_private]\n fn publish_for_public_execution(\n inputs: aztec::context::inputs::PrivateContextInputs,\n salt: Field,\n contract_class_id: ContractClassId,\n initialization_hash: Field,\n public_keys: PublicKeys,\n universal_deploy: bool,\n ) -> return_data aztec::protocol::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs {\n // MACRO CODE START\n // Note: The macros initially inserted a phase check here, but since there is no phase change in this function\n // body, I have removed that check.\n assert_compatible_oracle_version();\n\n let serialized_params: [Field; 16] = [\n salt,\n contract_class_id.to_field(),\n initialization_hash,\n ]\n .concat(public_keys.serialize())\n .concat([universal_deploy.to_field()]);\n\n let args_hash: Field = hash_args(serialized_params);\n let mut context: PrivateContext = PrivateContext::new(inputs, args_hash);\n // MACRO CODE END\n\n // Verify the contract class is registered by checking for its nullifier at the ContractClassRegistry address.\n let nullifier_existence_request = compute_nullifier_existence_request(\n contract_class_id.to_field(),\n CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS,\n );\n context.assert_nullifier_exists(nullifier_existence_request);\n\n // For universal deployments, deployer is zero so the resulting address is the same regardless of who initiates\n // deployment.\n let deployer = if universal_deploy {\n AztecAddress::zero()\n } else {\n context.maybe_msg_sender().unwrap()\n };\n\n let partial_address =\n PartialAddress::compute(contract_class_id, salt, initialization_hash, deployer);\n\n // Validate public key points lie on the Grumpkin curve to prevent AVM DoS attacks.\n public_keys.validate_on_curve();\n\n let address = AztecAddress::compute(public_keys, partial_address);\n\n // Emit address as nullifier: prevents duplicate deployment and proves publication.\n // We use no domain separators because these are the only nullifiers this contract uses.\n context.push_nullifier(address.to_field());\n\n // Broadcast deployment event. Uses non-standard serialization (2 fields per point,\n // omitting is_infinite) for TypeScript SDK compatibility.\n let event = ContractInstancePublished {\n CONTRACT_INSTANCE_PUBLISHED_MAGIC_VALUE,\n contract_class_id,\n address,\n public_keys,\n initialization_hash,\n salt,\n deployer,\n version: 1,\n };\n let payload = event.serialize_non_standard();\n debug_log_format(\"ContractInstancePublished: {}\", payload);\n // We pad the payload with [0] to match the length required by emit_private_log. Since the log is not\n // encrypted, padding with zero rather than a random value is acceptable (we don't care about privacy here).\n let padded_log = payload.concat([0]);\n let length = payload.len();\n context.emit_private_log(padded_log, length);\n\n // MACRO CODE START\n context.finish()\n // MACRO CODE END\n }\n\n /// Schedules an upgrade of the calling contract instance to a new contract class.\n ///\n /// The change is time-delayed via `DelayedPublicMutable` and only takes effect after the configured\n /// delay has elapsed. Only the contract instance itself can call this function (msg.sender == address).\n ///\n /// This function:\n /// 1. Verifies msg.sender is a deployed contract (its address nullifier exists).\n /// 2. Verifies the new class is registered in ContractClassRegistry.\n /// 3. Schedules the class ID change and emits a `ContractInstanceUpdated` event.\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n unconstrained fn update(new_contract_class_id: ContractClassId) {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 1] =\n avm::calldata_copy(1, <ContractClassId as Serialize>::N);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n // MACRO CODE END\n\n let address = context.maybe_msg_sender().unwrap();\n\n // Safety: we're using the nullifier's existence as a guarantee of the availability of the contract's\n // information through publishing, which is safe - we just need this information to be _eventually_ available.\n assert(\n context.nullifier_exists_unsafe(address.to_field(), context.this_address()),\n \"msg.sender is not deployed\",\n );\n\n // Safety: we're using the nullifier's existence as a guarantee of the availability of the new contract class'\n // information through registration, which is safe - we just need this information to be _eventually_ available.\n assert(\n context.nullifier_exists_unsafe(\n new_contract_class_id.to_field(),\n CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS,\n ),\n \"New contract class is not registered\",\n );\n\n let scheduled_value_update = storage\n .updated_class_ids\n .at(address)\n .schedule_and_get_value_change(new_contract_class_id);\n let (prev_contract_class_id, timestamp_of_change) = scheduled_value_update.get_previous();\n\n let event = ContractInstanceUpdated {\n CONTRACT_INSTANCE_UPDATED_MAGIC_VALUE,\n address,\n prev_contract_class_id,\n new_contract_class_id,\n timestamp_of_change,\n };\n context.emit_public_log(event);\n }\n\n /// Schedules a change to the upgrade delay for the calling contract instance. The delay change is\n /// itself delayed (preventing atomically reducing delay + scheduling an instant upgrade). The new\n /// delay must be at least `MINIMUM_UPDATE_DELAY`.\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n unconstrained fn set_update_delay(new_update_delay: u64) {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 1] = avm::calldata_copy(1, <u64 as Serialize>::N);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n // MACRO CODE END\n\n let msg_sender = context.maybe_msg_sender().unwrap();\n\n // Safety: we're using the nullifier's existence as a guarantee of the availability of the contract's\n // information through publishing, which is safe - we just need this information to be _eventually_ available.\n assert(\n context.nullifier_exists_unsafe(msg_sender.to_field(), context.this_address()),\n \"msg.sender is not deployed\",\n );\n\n assert(new_update_delay >= MINIMUM_UPDATE_DELAY, \"New update delay is too low\");\n\n storage.updated_class_ids.at(msg_sender).schedule_delay_change(new_update_delay);\n }\n\n /// Returns the current update delay for the calling contract instance.\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_view]\n unconstrained fn get_update_delay() -> pub u64 {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 0] = avm::calldata_copy(1, 0);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n assert(context.is_static_call(), \"Function get_update_delay can only be called statically\");\n // MACRO CODE END\n\n storage.updated_class_ids.at(avm::sender()).get_current_delay()\n }\n\n // THE REST OF THE CODE IN THIS CONTRACT WAS ORIGINALLY INJECTED BY THE #[aztec] MACRO.\n\n global UPDATE_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"update((Field))\").to_field() };\n global SET_UPDATE_DELAY_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"set_update_delay(u64)\").to_field() };\n global GET_UPDATE_DELAY_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"get_update_delay()\").to_field() };\n\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n pub unconstrained fn public_dispatch(selector: Field) {\n if selector == UPDATE_SELECTOR {\n let input_calldata: [Field; 1] =\n avm::calldata_copy(1, <ContractClassId as Serialize>::N);\n let mut reader: Reader<1> = Reader::new(input_calldata);\n let arg0: ContractClassId =\n <ContractClassId as Deserialize>::stream_deserialize(&mut reader);\n update(arg0);\n avm::avm_return([].as_vector());\n };\n if selector == SET_UPDATE_DELAY_SELECTOR {\n let input_calldata: [Field; 1] = avm::calldata_copy(1, <u64 as Serialize>::N);\n let mut reader: Reader<1> = Reader::new(input_calldata);\n let arg0: u64 = <u64 as Deserialize>::stream_deserialize(&mut reader);\n set_update_delay(arg0);\n avm::avm_return([].as_vector());\n };\n if selector == GET_UPDATE_DELAY_SELECTOR {\n let return_value: [Field; 1] = <u64 as Serialize>::serialize(get_update_delay());\n avm::avm_return(return_value.as_vector());\n };\n panic(f\"Unknown selector {selector}\")\n }\n\n impl<Context> Storage<Context> {\n fn init(context: Context) -> Self {\n Self {\n updated_class_ids: <Map<AztecAddress, DelayedPublicMutable<ContractClassId, DEFAULT_UPDATE_DELAY, Context>, Context> as StateVariable<1, Context>>::new(\n context,\n 1,\n ),\n }\n }\n }\n\n pub struct publish_for_public_execution_parameters {\n pub _salt: Field,\n pub _contract_class_id: ContractClassId,\n pub _initialization_hash: Field,\n pub _public_keys: PublicKeys,\n pub _universal_deploy: bool,\n }\n\n pub struct update_parameters {\n pub _new_contract_class_id: ContractClassId,\n }\n\n pub struct set_update_delay_parameters {\n pub _new_update_delay: u64,\n }\n\n pub struct get_update_delay_parameters {}\n\n #[abi(functions)]\n pub struct publish_for_public_execution_abi {\n parameters: publish_for_public_execution_parameters,\n }\n\n #[abi(functions)]\n pub struct update_abi {\n parameters: update_parameters,\n }\n\n #[abi(functions)]\n pub struct set_update_delay_abi {\n parameters: set_update_delay_parameters,\n }\n\n #[abi(functions)]\n pub struct get_update_delay_abi {\n parameters: get_update_delay_parameters,\n return_type: u64,\n }\n}\n"
|
|
4932
|
+
"source": "/// Protocol contract responsible for deploying contract instances and managing contract upgrades.\n///\n/// In Aztec, contracts are split into *classes* (code, registered via ContractClassRegistry) and *instances*\n/// (deployments of a class at a unique address). This contract handles contract instance publishing and contract\n/// updates (updating instance to a new class).\npub contract ContractInstanceRegistry {\n use aztec::{\n context::{PrivateContext, PublicContext},\n hash::hash_args,\n nullifier::utils::compute_nullifier_existence_request,\n oracle::{avm, logging::debug_log_format, version::assert_compatible_oracle_version},\n protocol::{\n abis::function_selector::FunctionSelector,\n address::{AztecAddress, PartialAddress},\n constants::{\n CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS, CONTRACT_INSTANCE_PUBLISHED_MAGIC_VALUE,\n CONTRACT_INSTANCE_UPDATED_MAGIC_VALUE, DEFAULT_UPDATE_DELAY, MINIMUM_UPDATE_DELAY,\n },\n contract_class_id::ContractClassId,\n public_keys::PublicKeys,\n traits::{Deserialize, Serialize, ToField},\n utils::reader::Reader,\n },\n state_vars::{DelayedPublicMutable, Map, StateVariable},\n };\n\n #[abi(events)]\n struct ContractInstancePublished {\n CONTRACT_INSTANCE_PUBLISHED_MAGIC_VALUE: Field,\n address: AztecAddress,\n version: u8,\n salt: Field,\n contract_class_id: ContractClassId,\n initialization_hash: Field,\n public_keys: PublicKeys,\n deployer: AztecAddress,\n }\n\n // Custom serialization is required because we don't want to waste one field for the `is_infinite` flag of public\n // key points (public key points will never be the infinity point).\n impl ContractInstancePublished {\n fn serialize_non_standard(self) -> [Field; 15] {\n [\n self.CONTRACT_INSTANCE_PUBLISHED_MAGIC_VALUE,\n self.address.to_field(),\n self.version.to_field(),\n self.salt,\n self.contract_class_id.to_field(),\n self.initialization_hash,\n self.public_keys.npk_m.serialize()[0],\n self.public_keys.npk_m.serialize()[1],\n self.public_keys.ivpk_m.serialize()[0],\n self.public_keys.ivpk_m.serialize()[1],\n self.public_keys.ovpk_m.serialize()[0],\n self.public_keys.ovpk_m.serialize()[1],\n self.public_keys.tpk_m.serialize()[0],\n self.public_keys.tpk_m.serialize()[1],\n self.deployer.to_field(),\n ]\n }\n }\n\n #[abi(events)]\n #[derive(Serialize)]\n struct ContractInstanceUpdated {\n CONTRACT_INSTANCE_UPDATED_MAGIC_VALUE: Field,\n address: AztecAddress,\n prev_contract_class_id: ContractClassId,\n new_contract_class_id: ContractClassId,\n timestamp_of_change: u64,\n }\n\n struct Storage<Context> {\n /// Map from contract instance address to a `DelayedPublicMutable` holding the updated contract class ID.\n updated_class_ids: Map<AztecAddress, DelayedPublicMutable<ContractClassId, DEFAULT_UPDATE_DELAY, Context>, Context>,\n }\n\n /// Publishes a new contract instance.\n ///\n /// The caller provides deployment parameters (salt, class_id, init_hash, public_keys, universal_deploy).\n /// The `universal_deploy` flag controls whether the deployer address is bound into the contract address:\n /// when true, deployer is zero (anyone can deploy the same instance); when false, deployer is the caller.\n ///\n /// This function:\n /// 1. Verifies the contract class is registered in ContractClassRegistry (nullifier existence check).\n /// 2. Validates public key points are on the Grumpkin curve (preventing AVM DoS via invalid points).\n /// 3. Computes the deterministic contract address from the deployment parameters.\n /// 4. Emits the address as a nullifier (proving publication preventing duplicate deployment)\n /// --> this address nullifier is then checked to exist by the AVM upon public function execution (if it doesn't\n /// exist AVM reverts)\n /// 5. Broadcasts a `ContractInstancePublished` event so nodes can reconstruct the instance.\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_private]\n fn publish_for_public_execution(\n inputs: aztec::context::inputs::PrivateContextInputs,\n salt: Field,\n contract_class_id: ContractClassId,\n initialization_hash: Field,\n public_keys: PublicKeys,\n universal_deploy: bool,\n ) -> return_data aztec::protocol::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs {\n // MACRO CODE START\n // Note: The macros initially inserted a phase check here, but since there is no phase change in this function\n // body, I have removed that check.\n assert_compatible_oracle_version();\n\n let serialized_params: [Field; 16] = [\n salt,\n contract_class_id.to_field(),\n initialization_hash,\n ]\n .concat(public_keys.serialize())\n .concat([universal_deploy.to_field()]);\n\n let args_hash: Field = hash_args(serialized_params);\n let mut context: PrivateContext = PrivateContext::new(inputs, args_hash);\n // MACRO CODE END\n\n // Verify the contract class is registered by checking for its nullifier at the ContractClassRegistry address.\n let nullifier_existence_request = compute_nullifier_existence_request(\n contract_class_id.to_field(),\n CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS,\n );\n context.assert_nullifier_exists(nullifier_existence_request);\n\n // For universal deployments, deployer is zero so the resulting address is the same regardless of who initiates\n // deployment.\n let deployer = if universal_deploy {\n AztecAddress::zero()\n } else {\n context.maybe_msg_sender().unwrap()\n };\n\n let partial_address =\n PartialAddress::compute(contract_class_id, salt, initialization_hash, deployer);\n\n // Validate public key points lie on the Grumpkin curve and are non-0 to prevent AVM DoS attacks.\n public_keys.validate_on_curve();\n public_keys.validate_non_infinity();\n\n let address = AztecAddress::compute(public_keys, partial_address);\n\n // Emit address as nullifier: prevents duplicate deployment and proves publication.\n // We use no domain separators because these are the only nullifiers this contract uses.\n context.push_nullifier(address.to_field());\n\n // Broadcast deployment event. Uses non-standard serialization (2 fields per point,\n // omitting is_infinite) for TypeScript SDK compatibility.\n let event = ContractInstancePublished {\n CONTRACT_INSTANCE_PUBLISHED_MAGIC_VALUE,\n contract_class_id,\n address,\n public_keys,\n initialization_hash,\n salt,\n deployer,\n version: 1,\n };\n let payload = event.serialize_non_standard();\n debug_log_format(\"ContractInstancePublished: {}\", payload);\n // We pad the payload with [0] to match the length required by emit_private_log. Since the log is not\n // encrypted, padding with zero rather than a random value is acceptable (we don't care about privacy here).\n let padded_log = payload.concat([0]);\n let length = payload.len();\n context.emit_private_log(padded_log, length);\n\n // MACRO CODE START\n context.finish()\n // MACRO CODE END\n }\n\n /// Schedules an upgrade of the calling contract instance to a new contract class.\n ///\n /// The change is time-delayed via `DelayedPublicMutable` and only takes effect after the configured\n /// delay has elapsed. Only the contract instance itself can call this function (msg.sender == address).\n ///\n /// This function:\n /// 1. Verifies msg.sender is a deployed contract (its address nullifier exists).\n /// 2. Verifies the new class is registered in ContractClassRegistry.\n /// 3. Schedules the class ID change and emits a `ContractInstanceUpdated` event.\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n unconstrained fn update(new_contract_class_id: ContractClassId) {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 1] =\n avm::calldata_copy(1, <ContractClassId as Serialize>::N);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n // MACRO CODE END\n\n let address = context.maybe_msg_sender().unwrap();\n\n // Safety: we're using the nullifier's existence as a guarantee of the availability of the contract's\n // information through publishing, which is safe - we just need this information to be _eventually_ available.\n assert(\n context.nullifier_exists_unsafe(address.to_field(), context.this_address()),\n \"msg.sender is not deployed\",\n );\n\n // Safety: we're using the nullifier's existence as a guarantee of the availability of the new contract class'\n // information through registration, which is safe - we just need this information to be _eventually_ available.\n assert(\n context.nullifier_exists_unsafe(\n new_contract_class_id.to_field(),\n CONTRACT_CLASS_REGISTRY_CONTRACT_ADDRESS,\n ),\n \"New contract class is not registered\",\n );\n\n let scheduled_value_update = storage\n .updated_class_ids\n .at(address)\n .schedule_and_get_value_change(new_contract_class_id);\n let (prev_contract_class_id, timestamp_of_change) = scheduled_value_update.get_previous();\n\n let event = ContractInstanceUpdated {\n CONTRACT_INSTANCE_UPDATED_MAGIC_VALUE,\n address,\n prev_contract_class_id,\n new_contract_class_id,\n timestamp_of_change,\n };\n context.emit_public_log(event);\n }\n\n /// Schedules a change to the upgrade delay for the calling contract instance. The delay change is\n /// itself delayed (preventing atomically reducing delay + scheduling an instant upgrade). The new\n /// delay must be at least `MINIMUM_UPDATE_DELAY`.\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n unconstrained fn set_update_delay(new_update_delay: u64) {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 1] = avm::calldata_copy(1, <u64 as Serialize>::N);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n // MACRO CODE END\n\n let msg_sender = context.maybe_msg_sender().unwrap();\n\n // Safety: we're using the nullifier's existence as a guarantee of the availability of the contract's\n // information through publishing, which is safe - we just need this information to be _eventually_ available.\n assert(\n context.nullifier_exists_unsafe(msg_sender.to_field(), context.this_address()),\n \"msg.sender is not deployed\",\n );\n\n assert(new_update_delay >= MINIMUM_UPDATE_DELAY, \"New update delay is too low\");\n\n storage.updated_class_ids.at(msg_sender).schedule_delay_change(new_update_delay);\n }\n\n /// Returns the current update delay for the calling contract instance.\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_view]\n unconstrained fn get_update_delay() -> pub u64 {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 0] = avm::calldata_copy(1, 0);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n assert(context.is_static_call(), \"Function get_update_delay can only be called statically\");\n // MACRO CODE END\n\n storage.updated_class_ids.at(avm::sender()).get_current_delay()\n }\n\n // THE REST OF THE CODE IN THIS CONTRACT WAS ORIGINALLY INJECTED BY THE #[aztec] MACRO.\n\n global UPDATE_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"update((Field))\").to_field() };\n global SET_UPDATE_DELAY_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"set_update_delay(u64)\").to_field() };\n global GET_UPDATE_DELAY_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"get_update_delay()\").to_field() };\n\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n pub unconstrained fn public_dispatch(selector: Field) {\n if selector == UPDATE_SELECTOR {\n let input_calldata: [Field; 1] =\n avm::calldata_copy(1, <ContractClassId as Serialize>::N);\n let mut reader: Reader<1> = Reader::new(input_calldata);\n let arg0: ContractClassId =\n <ContractClassId as Deserialize>::stream_deserialize(&mut reader);\n update(arg0);\n avm::avm_return([].as_vector());\n };\n if selector == SET_UPDATE_DELAY_SELECTOR {\n let input_calldata: [Field; 1] = avm::calldata_copy(1, <u64 as Serialize>::N);\n let mut reader: Reader<1> = Reader::new(input_calldata);\n let arg0: u64 = <u64 as Deserialize>::stream_deserialize(&mut reader);\n set_update_delay(arg0);\n avm::avm_return([].as_vector());\n };\n if selector == GET_UPDATE_DELAY_SELECTOR {\n let return_value: [Field; 1] = <u64 as Serialize>::serialize(get_update_delay());\n avm::avm_return(return_value.as_vector());\n };\n panic(f\"Unknown selector {selector}\")\n }\n\n impl<Context> Storage<Context> {\n fn init(context: Context) -> Self {\n Self {\n updated_class_ids: <Map<AztecAddress, DelayedPublicMutable<ContractClassId, DEFAULT_UPDATE_DELAY, Context>, Context> as StateVariable<1, Context>>::new(\n context,\n 1,\n ),\n }\n }\n }\n\n pub struct publish_for_public_execution_parameters {\n pub _salt: Field,\n pub _contract_class_id: ContractClassId,\n pub _initialization_hash: Field,\n pub _public_keys: PublicKeys,\n pub _universal_deploy: bool,\n }\n\n pub struct update_parameters {\n pub _new_contract_class_id: ContractClassId,\n }\n\n pub struct set_update_delay_parameters {\n pub _new_update_delay: u64,\n }\n\n pub struct get_update_delay_parameters {}\n\n #[abi(functions)]\n pub struct publish_for_public_execution_abi {\n parameters: publish_for_public_execution_parameters,\n }\n\n #[abi(functions)]\n pub struct update_abi {\n parameters: update_parameters,\n }\n\n #[abi(functions)]\n pub struct set_update_delay_abi {\n parameters: set_update_delay_parameters,\n }\n\n #[abi(functions)]\n pub struct get_update_delay_abi {\n parameters: get_update_delay_parameters,\n return_type: u64,\n }\n}\n"
|
|
4897
4933
|
},
|
|
4898
4934
|
"57": {
|
|
4899
4935
|
"function_locations": [
|
|
@@ -29,7 +29,7 @@ export const ProtocolContractAddress = {
|
|
|
29
29
|
};
|
|
30
30
|
export const ProtocolContractDerivedAddress = {
|
|
31
31
|
AuthRegistry: AztecAddress.fromString('0x12a6459c1f2b533065c084d826186d9dfad492924922c68e003bc5c43ba2a08e'),
|
|
32
|
-
ContractInstanceRegistry: AztecAddress.fromString('
|
|
32
|
+
ContractInstanceRegistry: AztecAddress.fromString('0x0fd3bd193160436d0f3b5fb8dc571b6dd26609676208dbbaa651a3091c3be622'),
|
|
33
33
|
ContractClassRegistry: AztecAddress.fromString('0x1bd5e1848cea1978e5e7e1ab43e1ee0841eec353180d2a6b9424b621129c841f'),
|
|
34
34
|
MultiCallEntrypoint: AztecAddress.fromString('0x1805bdf9ea6b8d24b7e77adacdc97cad5e05b4c6bca82aa9643bb61185d84645'),
|
|
35
35
|
FeeJuice: AztecAddress.fromString('0x0422e93a4e0ec61d7aa9e15a18be31b4df0579272fee35d8035f6f5a22aecab4'),
|
|
@@ -37,7 +37,7 @@ export const ProtocolContractDerivedAddress = {
|
|
|
37
37
|
};
|
|
38
38
|
export const ProtocolContractClassId = {
|
|
39
39
|
AuthRegistry: Fr.fromString('0x0c924424eb45fb647574ea3cab77e5eddad77783d7c8cea3e37ee1fabeabd8b9'),
|
|
40
|
-
ContractInstanceRegistry: Fr.fromString('
|
|
40
|
+
ContractInstanceRegistry: Fr.fromString('0x2b558d170505b9145742125a6145c4c0c60955caf4c57475348b442ed832160c'),
|
|
41
41
|
ContractClassRegistry: Fr.fromString('0x01947a92fff95dc197da2aaec7619020db90d3a7db5d626256959a823af38e7d'),
|
|
42
42
|
MultiCallEntrypoint: Fr.fromString('0x007d59b1b2d473558d7fa470595bfa370f8bb7859916b277cd84744241b23ca7'),
|
|
43
43
|
FeeJuice: Fr.fromString('0x133473e9cd85598f72a98353225f1bd1804fdedcc7c655fccbc5572c4ea5a5af'),
|
|
@@ -50,8 +50,8 @@ export const ProtocolContractClassIdPreimage = {
|
|
|
50
50
|
publicBytecodeCommitment: Fr.fromString('0x2545f39893766508ce37bb5cea5e4dcab04c6f7f79f3089b1c076876e9d268b2')
|
|
51
51
|
},
|
|
52
52
|
ContractInstanceRegistry: {
|
|
53
|
-
artifactHash: Fr.fromString('
|
|
54
|
-
privateFunctionsRoot: Fr.fromString('
|
|
53
|
+
artifactHash: Fr.fromString('0x283e94b2b29f2d1635d6f24284d03d2cea147a84477bbd66dc577f665e6fde48'),
|
|
54
|
+
privateFunctionsRoot: Fr.fromString('0x05e22bcc8b2a467fe12c7db8dc68888236c6c5922cc616e8b29bc4ac4bdfb6f5'),
|
|
55
55
|
publicBytecodeCommitment: Fr.fromString('0x260735cf6645c6f07d2f0ebe2bfbd3062e95ddc820661329a5422bc239261bba')
|
|
56
56
|
},
|
|
57
57
|
ContractClassRegistry: {
|
|
@@ -93,7 +93,7 @@ export const ProtocolContractPrivateFunctions = {
|
|
|
93
93
|
ContractInstanceRegistry: [
|
|
94
94
|
{
|
|
95
95
|
selector: FunctionSelector.fromField(Fr.fromString('0x0000000000000000000000000000000000000000000000000000000016ec12aa')),
|
|
96
|
-
vkHash: Fr.fromString('
|
|
96
|
+
vkHash: Fr.fromString('0x2f916d74991f77eb9e6bf0493cea7b19c2a5ecf6b393bb1a8bb3bad4d7dd70a8')
|
|
97
97
|
}
|
|
98
98
|
],
|
|
99
99
|
ContractClassRegistry: [
|
|
@@ -122,7 +122,7 @@ export const ProtocolContractPrivateFunctions = {
|
|
|
122
122
|
};
|
|
123
123
|
export const ProtocolContractsList = new ProtocolContracts([
|
|
124
124
|
AztecAddress.fromString('0x12a6459c1f2b533065c084d826186d9dfad492924922c68e003bc5c43ba2a08e'),
|
|
125
|
-
AztecAddress.fromString('
|
|
125
|
+
AztecAddress.fromString('0x0fd3bd193160436d0f3b5fb8dc571b6dd26609676208dbbaa651a3091c3be622'),
|
|
126
126
|
AztecAddress.fromString('0x1bd5e1848cea1978e5e7e1ab43e1ee0841eec353180d2a6b9424b621129c841f'),
|
|
127
127
|
AztecAddress.fromString('0x1805bdf9ea6b8d24b7e77adacdc97cad5e05b4c6bca82aa9643bb61185d84645'),
|
|
128
128
|
AztecAddress.fromString('0x0422e93a4e0ec61d7aa9e15a18be31b4df0579272fee35d8035f6f5a22aecab4'),
|
|
@@ -133,5 +133,5 @@ export const ProtocolContractsList = new ProtocolContracts([
|
|
|
133
133
|
AztecAddress.fromString('0x0000000000000000000000000000000000000000000000000000000000000000'),
|
|
134
134
|
AztecAddress.fromString('0x0000000000000000000000000000000000000000000000000000000000000000')
|
|
135
135
|
]);
|
|
136
|
-
export const protocolContractsHash = Fr.fromString('
|
|
136
|
+
export const protocolContractsHash = Fr.fromString('0x1a97530a258e8d3f92cf2d366264d2a1130bf38edf1b8d685bb7a674e9596486');
|
|
137
137
|
export const CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG = Fr.fromHexString('0x1a7e1badb79abdd38c684b3c8306ffe7ecb33c69e3380d9855730aaaa83a21a8');
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@aztec/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": "5.0.0-nightly.
|
|
5
|
+
"version": "5.0.0-nightly.20260414",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"exports": {
|
|
8
8
|
".": "./dest/index.js",
|
|
@@ -73,9 +73,9 @@
|
|
|
73
73
|
]
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
76
|
-
"@aztec/constants": "5.0.0-nightly.
|
|
77
|
-
"@aztec/foundation": "5.0.0-nightly.
|
|
78
|
-
"@aztec/stdlib": "5.0.0-nightly.
|
|
76
|
+
"@aztec/constants": "5.0.0-nightly.20260414",
|
|
77
|
+
"@aztec/foundation": "5.0.0-nightly.20260414",
|
|
78
|
+
"@aztec/stdlib": "5.0.0-nightly.20260414",
|
|
79
79
|
"lodash.chunk": "^4.2.0",
|
|
80
80
|
"lodash.omit": "^4.5.0",
|
|
81
81
|
"tslib": "^2.4.0"
|
|
@@ -43,7 +43,7 @@ PublicChecks: AztecAddress.fromBigInt(6n)
|
|
|
43
43
|
|
|
44
44
|
export const ProtocolContractDerivedAddress = {
|
|
45
45
|
AuthRegistry: AztecAddress.fromString('0x12a6459c1f2b533065c084d826186d9dfad492924922c68e003bc5c43ba2a08e'),
|
|
46
|
-
ContractInstanceRegistry: AztecAddress.fromString('
|
|
46
|
+
ContractInstanceRegistry: AztecAddress.fromString('0x0fd3bd193160436d0f3b5fb8dc571b6dd26609676208dbbaa651a3091c3be622'),
|
|
47
47
|
ContractClassRegistry: AztecAddress.fromString('0x1bd5e1848cea1978e5e7e1ab43e1ee0841eec353180d2a6b9424b621129c841f'),
|
|
48
48
|
MultiCallEntrypoint: AztecAddress.fromString('0x1805bdf9ea6b8d24b7e77adacdc97cad5e05b4c6bca82aa9643bb61185d84645'),
|
|
49
49
|
FeeJuice: AztecAddress.fromString('0x0422e93a4e0ec61d7aa9e15a18be31b4df0579272fee35d8035f6f5a22aecab4'),
|
|
@@ -54,7 +54,7 @@ PublicChecks: AztecAddress.fromString('0x14dcba1710109b8f3c942b8f4a81c7693c7d20b
|
|
|
54
54
|
|
|
55
55
|
export const ProtocolContractClassId: Record<ProtocolContractName, Fr> = {
|
|
56
56
|
AuthRegistry: Fr.fromString('0x0c924424eb45fb647574ea3cab77e5eddad77783d7c8cea3e37ee1fabeabd8b9'),
|
|
57
|
-
ContractInstanceRegistry: Fr.fromString('
|
|
57
|
+
ContractInstanceRegistry: Fr.fromString('0x2b558d170505b9145742125a6145c4c0c60955caf4c57475348b442ed832160c'),
|
|
58
58
|
ContractClassRegistry: Fr.fromString('0x01947a92fff95dc197da2aaec7619020db90d3a7db5d626256959a823af38e7d'),
|
|
59
59
|
MultiCallEntrypoint: Fr.fromString('0x007d59b1b2d473558d7fa470595bfa370f8bb7859916b277cd84744241b23ca7'),
|
|
60
60
|
FeeJuice: Fr.fromString('0x133473e9cd85598f72a98353225f1bd1804fdedcc7c655fccbc5572c4ea5a5af'),
|
|
@@ -68,8 +68,8 @@ PublicChecks: Fr.fromString('0x2be0cdc153987032d0fc98096cbb42768f2ba747b07e10ae7
|
|
|
68
68
|
publicBytecodeCommitment: Fr.fromString('0x2545f39893766508ce37bb5cea5e4dcab04c6f7f79f3089b1c076876e9d268b2'),
|
|
69
69
|
},
|
|
70
70
|
ContractInstanceRegistry: {
|
|
71
|
-
artifactHash: Fr.fromString('
|
|
72
|
-
privateFunctionsRoot: Fr.fromString('
|
|
71
|
+
artifactHash: Fr.fromString('0x283e94b2b29f2d1635d6f24284d03d2cea147a84477bbd66dc577f665e6fde48'),
|
|
72
|
+
privateFunctionsRoot: Fr.fromString('0x05e22bcc8b2a467fe12c7db8dc68888236c6c5922cc616e8b29bc4ac4bdfb6f5'),
|
|
73
73
|
publicBytecodeCommitment: Fr.fromString('0x260735cf6645c6f07d2f0ebe2bfbd3062e95ddc820661329a5422bc239261bba'),
|
|
74
74
|
},
|
|
75
75
|
ContractClassRegistry: {
|
|
@@ -105,7 +105,7 @@ PublicChecks: Fr.fromString('0x0000000000000000000000000000000000000000000000000
|
|
|
105
105
|
|
|
106
106
|
export const ProtocolContractPrivateFunctions: Record<ProtocolContractName, { selector: FunctionSelector; vkHash: Fr }[]> = {
|
|
107
107
|
AuthRegistry: [{ selector: FunctionSelector.fromField(Fr.fromString('0x0000000000000000000000000000000000000000000000000000000079a3d418')), vkHash: Fr.fromString('0x25272e75e40823447b7914834e26e930f9fdd5a59f54deb854523a0c7ef291d3') }],
|
|
108
|
-
ContractInstanceRegistry: [{ selector: FunctionSelector.fromField(Fr.fromString('0x0000000000000000000000000000000000000000000000000000000016ec12aa')), vkHash: Fr.fromString('
|
|
108
|
+
ContractInstanceRegistry: [{ selector: FunctionSelector.fromField(Fr.fromString('0x0000000000000000000000000000000000000000000000000000000016ec12aa')), vkHash: Fr.fromString('0x2f916d74991f77eb9e6bf0493cea7b19c2a5ecf6b393bb1a8bb3bad4d7dd70a8') }],
|
|
109
109
|
ContractClassRegistry: [{ selector: FunctionSelector.fromField(Fr.fromString('0x000000000000000000000000000000000000000000000000000000006934ed0d')), vkHash: Fr.fromString('0x090f3a5b58db16a7ec1be17608fd4d96b875f825db6ba1b5015c410c11093da1') }],
|
|
110
110
|
MultiCallEntrypoint: [{ selector: FunctionSelector.fromField(Fr.fromString('0x00000000000000000000000000000000000000000000000000000000f04908a9')), vkHash: Fr.fromString('0x2fd0a2c5fefca8b516af41dcc7e388f8710b638954b43924b5040b8b9c3e32ff') }],
|
|
111
111
|
FeeJuice: [{ selector: FunctionSelector.fromField(Fr.fromString('0x00000000000000000000000000000000000000000000000000000000cbe67243')), vkHash: Fr.fromString('0x0fe89af8fdc790508d77050545e2b36bae91c2553c22ba9d0e3b7c492df6df52') }, { selector: FunctionSelector.fromField(Fr.fromString('0x00000000000000000000000000000000000000000000000000000000e8d374b6')), vkHash: Fr.fromString('0x0341fb609d50598157a44deef41e36b9a6c47bfe47ab8c5659753cc545fae2c5') }],
|
|
@@ -116,7 +116,7 @@ PublicChecks: []
|
|
|
116
116
|
|
|
117
117
|
export const ProtocolContractsList = new ProtocolContracts([
|
|
118
118
|
AztecAddress.fromString('0x12a6459c1f2b533065c084d826186d9dfad492924922c68e003bc5c43ba2a08e'),
|
|
119
|
-
AztecAddress.fromString('
|
|
119
|
+
AztecAddress.fromString('0x0fd3bd193160436d0f3b5fb8dc571b6dd26609676208dbbaa651a3091c3be622'),
|
|
120
120
|
AztecAddress.fromString('0x1bd5e1848cea1978e5e7e1ab43e1ee0841eec353180d2a6b9424b621129c841f'),
|
|
121
121
|
AztecAddress.fromString('0x1805bdf9ea6b8d24b7e77adacdc97cad5e05b4c6bca82aa9643bb61185d84645'),
|
|
122
122
|
AztecAddress.fromString('0x0422e93a4e0ec61d7aa9e15a18be31b4df0579272fee35d8035f6f5a22aecab4'),
|
|
@@ -128,7 +128,7 @@ AztecAddress.fromString('0x00000000000000000000000000000000000000000000000000000
|
|
|
128
128
|
AztecAddress.fromString('0x0000000000000000000000000000000000000000000000000000000000000000')
|
|
129
129
|
]);
|
|
130
130
|
|
|
131
|
-
export const protocolContractsHash = Fr.fromString('
|
|
131
|
+
export const protocolContractsHash = Fr.fromString('0x1a97530a258e8d3f92cf2d366264d2a1130bf38edf1b8d685bb7a674e9596486');
|
|
132
132
|
|
|
133
133
|
|
|
134
134
|
|