@aztec/protocol-contracts 0.0.1-commit.f146247c → 0.0.1-commit.f1df4d2

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "transpiled": true,
3
- "noir_version": "1.0.0-beta.18+13ce5c89c1edbfbf5e92c4cbf2258ea6e63f46b5",
3
+ "noir_version": "1.0.0-beta.18+242b61d72ff7c42d7b1c1b9b5337b2d4dddc14dc",
4
4
  "name": "AuthRegistry",
5
5
  "functions": [
6
6
  {
@@ -151,8 +151,8 @@
151
151
  }
152
152
  }
153
153
  },
154
- "bytecode": "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",
155
- "debug_symbols": "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"
154
+ "bytecode": "JwACBAEoAAABBIBNJwAABE0lAAAASScCAwQCJwIEBAAfCgADAAQASi0ISgEtCEsCJQAAAJEtAgFMJwICBEwnAgMEATsOAAMAAikAAEMAR9rNcywAAEQAMGROcuExoCm4UEW2gYFYXSgz6Eh5uXCRQ+H1k/AAAAAnAEUEAycARgAAJwBHAQEnAEgEAScASQQCJiUAAAO6JwIDAAEpAgAEAEHs+kstCAEFJwIGBAQACAEGAScDBQQBACIFAgYtCgYHLQ4EBwAiBwIHLQ4DBwAiBwIHLQ4BBycCBgQHLQgABy0KBQgtCEUJAAgABgAlAAAD4C0CAAAtCggDCiIDRgUnAgYBAAoqBQYHJAIABwAAARUlAAAHSh4CAAUALyoAAwAFAAccCgcFARwKBQMAHAoDBQEKKgUGAyQCAAMAAAFDJQAAB1weAgADAQoiA0QFFgoFBxwKBwgABCoIAwcKKgUGAyQCAAMAAAFxJwIIBAA8BggBHgIAAwMeAgAFBCkCAAgAWYunOysCAAkAAAAAAAAAAAUAAAAAAAAAAC0IAQonAgsEBQAIAQsBJwMKBAEAIgoCCy0KCwwtDggMACIMAgwtDgcMACIMAgwtDgMMACIMAgwtDgkMLQsKAwAiAwIDLQ4DCi0IAQMnAgcEBQAIAQcBJwMDBAEAIgoCBwAiAwIIPw8ABwAIACIDSAgtCwgHACoHBQgtAgMDJwAEBAUlAAAHbi0IBQUAIgVIBy0OCAcAIgVJBy0LBwMAKgMCBy0CBQMnAAQEBSUAAAduLQgFAgAiAkkDLQ4HAy0LAgMAIgMCAy0OAwItCAEDJwIFBAUACAEFAScDAwQBACICAgUAIgMCBz8PAAUABwAiA0gFLQsFAicCAwACLQgBBScCBwQEAAgBBwEnAwUEAQAiBQIHLQoHCC0OBAgAIggCCC0OAwgAIggCCC0OAQgnAgMEBy0IAActCgUILQhFCQAIAAMAJQAAA+AtAgAALQoIAQoiAUYDCioDBgckAgAHAAADACUAAAdKLQgBAycCBwQEAAgBBwEnAwMEAQAiAwIHLQoHCC0OBAgAIggCCC0OAQgAIggCCC0OAggnAgIEBy0IAActCgMILQhFCQAIAAIAJQAAA+AtAgAALQoIAQoiAUYCCioCBgQkAgAEAAADbCUAAAdKHgIAAgAvKgABAAIABBwKBAYBHAoGAgAcCgIEASQCAAQAAAOVJQAAB80tCwUCACICAgItDgIFLQsDAgAiAgICLQ4CAzAIAEYAAS0IQwEmKAAABAR4TQwAAAQDJAAAAwAAA98qAQABBdrF9da0SjJtPAQCASYlAAADuhwKAgQAKwIABQAAAAAAAAAAAQAAAAAAAAAABCoEBQYtCAEEAAABAgEtCAEFJwIHBAUACAEHAScDBQQBACIFAgctCgcILQxGCAAiCAIILQxGCAAiCAIILQxGCAAiCAIILQ4GCC0OBQQGIgJFBScCBgQALQoGAyMAAARfDCoDBQckAgAHAAAF3yMAAARxBiICRQUEIgVFBwIqAgcDCioDBgUWCgUHJAIABQAABXkjAAAElgIqAgMFDioDAggkAgAIAAAErSUAAAffLQsECAAiCEgKLQsKCQwiBUUKJAIACgAABMwlAAAH8QAiAQILACoLBQwtCwwKACoJCgstAggDJwAEBAUlAAAHbi0IBQkAIglICi0OCwotDgkEDChIAwgkAgAIAAAFECMAAAV5ACIJSQgtCwgDACIFSAgOKgUICiQCAAoAAAUwJQAACAMMIghFBSQCAAUAAAVCJQAAB/EAIgECCgAqCggLLQsLBQAqAwUBLQIJAycABAQFJQAAB24tCAUDACIDSQUtDgEFLQ4DBCMAAAV5CioCBgESKgEHAiQCAAIAAAWQIwAABc0tCwQBLQsBAgAiAgICLQ4CAS0IAQInAgMEBQAIAQMBJwMCBAEAIgECAwAiAgIFPw8AAwAFLQ4CBCMAAAXNLQsEAQAiAUgDLQsDAi0KAgEmLQsEBwAiB0gJLQsJCAQiA0UJBiIJRQsKKgsDCiQCAAoAAAYIJQAACBUMIglFCiQCAAoAAAYaJQAAB/EAIgECCwAqCwkMLQsMCgAqCAoLLQIHAycABAQFJQAAB24tCAUIACIISAotDgsKACIISQotCwoHACIJSAoOKgkKCyQCAAsAAAZoJQAACAMMIgpFCyQCAAsAAAZ6JQAAB/EAIgECDAAqDAoNLQsNCwAqBwsKLQIIAycABAQFJQAAB24tCAUHACIHSQstDgoLACIHRQotCwoIACIJSQoOKgkKCyQCAAsAAAbIJQAACAMMIgpFCSQCAAkAAAbaJQAAB/EAIgECCwAqCwoMLQsMCQAqCAkKLQIHAycABAQFJQAAB24tCAUIACIIRQktDgoJLQsIBwAiBwIHLQ4HCC0IAQcnAgkEBQAIAQkBJwMHBAEAIggCCQAiBwIKPw8ACQAKLQ4HBAAiA0gHLQoHAyMAAARfKgEAAQW6uyHXgjMYZDwEAgEmKgEAAQVMr1JlAlqXtDwEAgEmLQEDBgoABgIHJAAABwAAB4QjAAAHjS0AAwUjAAAHzC0AAQUAAAEEAQAAAwQJLQADCi0ABQsKAAoJDCQAAAwAAAfHLQEKCC0ECAsAAAoCCgAACwILIwAAB6MnAQUEASYqAQABBe0rrw2aITfnPAQCASYqAQABBRu8ZdA/3OrcPAQCASYqAQABBeQIUEUCtYwfPAQCASYqAQABBdAH6/TLxmeQPAQCASYqAQABBQUEG5kgr2BMPAQCASY=",
155
+ "debug_symbols": "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"
156
156
  },
157
157
  {
158
158
  "name": "is_consumable",
@@ -350,8 +350,8 @@
350
350
  }
351
351
  }
352
352
  },
353
- "bytecode": "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",
354
- "debug_symbols": "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"
353
+ "bytecode": "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",
354
+ "debug_symbols": "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"
355
355
  },
356
356
  {
357
357
  "name": "set_authorized",
@@ -2226,9 +2226,9 @@
2226
2226
  }
2227
2227
  }
2228
2228
  },
2229
- "bytecode": "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cQArxwGsHAewchzAynEAK8cBrBwHsHIcwMpxACvHAawcB7ByHMDKcQArxwGsHAewchzAynEAK8cBrBwHsHIcwMpxACvHAawcB7ByHMDKcQArxwGsHAew9uBgOQ5g5TiAleMAVo4DWDkOYOU4gJXjAFaOA1g5DmDlOICV4wBWjgNYe1FOYZXjAFaOA1g5DmDlOICV4wBWjgNYOQ5g5TiAdSAHG83BDuJgB3OwQzjYoRwsx6WrHJeucly6ynHp6kgOluPSVY5LVzkuXeW4dJXj0lWOS1c5Ll3luHSV49JVjktXOS5d5bh0lePSVY5LVzkuXeW4dJXj0lWOS1c5Ll3luHSV49JVjktXOS5d5bh0lePSVY5LVzkuXeW4dJXj0lWOS1c5Ll0NcrAcl65yXLrKcekqx6WrHJeucly6ynHpKselqxyXrnJcuspx6SrHpascl65yXLrKcekqx6WrHJeucly6ynHpKselqxyXrnJcuspx6SrHpascl65yXLrKcekqx6WrHJeucly6ynHpahYHy3HpKselqxyXrnJcuspx6SrHpascl65yXLrKcekqx6WrHJeucly6ynHpKselqxyXrnJcuspx6SrHpascl65yXLrKcekqx6WrHJeucly6ynHpKselqxyXrnJcuspx6SrHpascl64u5mA5Ll3luHSV49JVjktXOS5d5bh0lePSVY5LVzkuXeW4dJXj0lWOS1c5Ll3luHSV49JVjktXOS5d5bh0lePSVY5LVzkuXeW4dJXj0lWOS1c5Ll3luHSV49JVjktXOS5d5bh0leRP2MjBcly6ynHpKselqxyXrnJcuspx6SrJZcJx6SrHpascl65yXLrKcekqx6WrHJeucly6ynHpKselqxyXrnJcuspx6SrHpascl67u4mA5Ll3luHSV49JVjktXOS5d5bh0lePSVY5LV7/jYDkuXeW4dJXj0lWOS1c5Ll3luHSV49JVjktXOS5d5bh0lePSVY5LVzkuXeO4dI3j0jWOS9c4Ll3juHSN49I1jkvXOC5d47h0jePSNY5L1zguXeO4dI3j0rV6HOx+HGx9DrYBB9uQg+X4b43jvzWO/9Y4/lvj+G+N4781jv/WOP5b4/hvjeO/NY7/1jj+W+P4b43jvzWO/9Y4/lvj+G+N4781jv/WOP5b4/hvjeO/NY7/1jj+W+P4b43jvzWO/9Y4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",
2229
+ "bytecode": "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cQArxwGsHAewchzAynEAK8cBrBwHsHIcwMpxACvHAawcB7ByHMDKcQArxwGsHAewchzAynEAK8cBrBwHsHIcwMpxACvHAawcB7ByHMDKcQArxwGsHAew9uBgOQ5g5TiAleMAVo4DWDkOYOU4gJXjAFaOA1g5DmDlOICV4wBWjgNYe1FOYZXjAFaOA1g5DmDlOICV4wBWjgNYOQ5g5TiAdSAHG83BDuJgB3OwQzjYoRwsx6WrHJeucly6ynHp6kgOluPSVY5LVzkuXeW4dJXj0lWOS1c5Ll3luHSV49JVjktXOS5d5bh0lePSVY5LVzkuXeW4dJXj0lWOS1c5Ll3luHSV49JVjktXOS5d5bh0lePSVY5LVzkuXeW4dJXj0lWOS1c5Ll0NcrAcl65yXLrKcekqx6WrHJeucly6ynHpKselqxyXrnJcuspx6SrHpascl65yXLrKcekqx6WrHJeucly6ynHpKselqxyXrnJcuspx6SrHpascl65yXLrKcekqx6WrHJeucly6ynHpahYHy3HpKselqxyXrnJcuspx6SrHpascl65yXLrKcekqx6WrHJeucly6ynHpKselqxyXrnJcuspx6SrHpascl65yXLrKcekqx6WrHJeucly6ynHpKselqxyXrnJcuspx6SrHpascl64u5mA5Ll3luHSV49JVjktXOS5d5bh0lePSVY5LVzkuXeW4dJXj0lWOS1c5Ll3luHSV49JVjktXOS5d5bh0lePSVY5LVzkuXeW4dJXj0lWOS1c5Ll3luHSV49JVjktXOS5d5bh0leRP2MjBcly6ynHpKselqxyXrnJcuspx6SrJZcJx6SrHpascl65yXLrKcekqx6WrHJeucly6ynHpKselqxyXrnJcuspx6SrHpascl67u4mA5Ll3luHSV49JVjktXOS5d5bh0lePSVY5LV7/jYDkuXeW4dJXj0lWOS1c5Ll3luHSV49JVjktXOS5d5bh0lePSVY5LVzkuXeO4dI3j0jWOS9c4Ll3juHSN49I1jkvXOC5d47h0jePSNY5L1zguXeO4dI3j0rV6HOx+HGx9DrYBB9uQg+X4b43jvzWO/9Y4/lvj+G+N4781jv/WOP5b4/hvjeO/NY7/1jj+W+P4b43jvzWO/9Y4/lvj+G+N4781jv/WOP5b4/hvjeO/NY7/1jj+W+P4b43jvzWO/9Y4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",
2230
2230
  "debug_symbols": "tVrRbts6DP2XPOdBFClK7K8Mw5C12RAgSIusHXBR9N8vZVuy006cFqd9KGU7PKaoQ1KS9bp52H9/+fntcPrx+Gtz9+V18/18OB4PP78dH+93z4fHk9593bj8D2hzB/5tu4F8hXFz57cbTCr0ns/3PG7uSNs0ijAKHkUcRRqFbO6iartRwCgUJKnAUdAoFAWcSp5kzFLfiMMbVRNA8fwkcZI0yTDJrA2qRaUnqBfhDx3h4QdqHrzpVfHCt+fzfp+fLNyiznranfen583d6eV43G5+744vw49+Pe1Og3zenfWpWr0/PahUwB+H4z633raztmurUgyTMvtY1WPo1Q/RF31Y6Mde/RWmM5VXJ5fmV2Ovfkpx0hfnW/qhrY9cXIeRqj7Rpe+4DeCpAHiOTYA+CxI2AQwXiJfiAnItF8jaHlhjKDgBRIQr6AMOCgnALUzw2E2jIHMIOCcVIsAFAqDBpNoLwXCNDQyOahh537TB4AKRgwmCCBZ8ROi3IqRqReKmFdEgBHCB8H6RUNhfQiRjSPWvDEhuzt7AdMkLEIsYKWBlhjjXRPGGRzAUdqEsyCXvEMBAcFiGRZtyHQZAYQcu/fEBw6AopepUSgsMkH4zmItHkSNc15UlRgrXYcjsUmHDpfFz3SHiqhmSmmZYAacpolZfTq2AQ4uh+lesIJzDPqR+iDDTKwTXgrD6oQWw9IOwmTjQ4KdgyRvCi/x3mTaQjBFlX2KVOLYdYZXTWs0Iln64phOL+HjfCYOWsUZHjLMbyfdbIFSTnm+bIJYfCyUpzrGFEPttqIUI3NKNlzaQmSXcnCXadMjzv/VVhPAWVYRobRWhsL6KmBidVYTWp03TjM4q0o1hVBETo7OKBPhcd3RWETRZGmKlusdWuASDohBdWQlATPEqCPY19/DCoe8hjAURoE8VA71IK4uH9VPQcJMpaLjJFJRXT0H5BvM2vsGci9dPQfkGcy6bZDhzHZFSi2TMpj/qYotb69a/WFEXW9puU50tnhL4CqKzP7oOJFV+aFuaE8De4E8Lj7wL/ghm8FczdB46x637B4g0u8PFJgSuzh7R8gW4uimm2cNBM+6jURjYkdRtiTCTFP/Bjt4sFuMtslhMa7NYlPVZzMTozGJpfc23zejLYjbVY+yguhmzietEPaV0Tc33rk7UvQvUgkhmJk113wpcc7mQ4i2IntItiJ5kLdHFrZ/rmxidc33xq4lumtEZszZGLXHIi03qDyXfpGld1HqXmutJMWiqLOWytk8BWjVSDJqGWpx4sUeSoN8GqXs9Iu2NGrHmpLrFXfOGrrL5mt0eqUGv2/fQ3CZ2YFW32hUtdNyobqYR1ZvRLb48fTDCqvU413pCbG5Wu5sUWV2l3SL56GeOtdkHXFyffmyQzvwDTlYnINuQzgzUD2JsN9ggnXMPAPxkl6zft44zR6KLzX1rgLUrKNMGKVyPgO3PduanpuDrxrW2pZnWAW6RU/9iCwpXWwI1F4RgfZQQnpMRpiu+50f0rn6RXX5PULd+1avd/eF8eXQD8skH9SLkYw5ZpknKKL1TqR3PJykG6XNSGE9S4HSSAv14kmKQnMNsPM8xyDRJyclwPNIxSMhBMB7qoOlUB03HOnIazOc6Bsn5q8R4rmOQaZKKxzpu5HI1UQmT9JlcKnGSipfXc6R4KUvFy7tUpHhJvU0pb/yrlFEGN0nIUwWV+eSIU6CApUHDIlEboTS4NGJppNzQ1wSZGuxKYziSopZzRs7DxVgaGXn4fvx7dz7svh/3eYjyIL6c7suI6eXzf0/lSTmO83R+vN8/vJz3eXQXZ3L0/xeNYw959MeDOXrHhy2Gr9vxMbkthfzYVw3d3SfOt7BqyBblgwZ9fEew38FVQ+PA6zsyL/8H",
2231
- "verification_key": "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"
2231
+ "verification_key": "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"
2232
2232
  },
2233
2233
  {
2234
2234
  "name": "set_reject_all",
@@ -2326,7 +2326,7 @@
2326
2326
  }
2327
2327
  }
2328
2328
  },
2329
- "bytecode": "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",
2329
+ "bytecode": "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",
2330
2330
  "debug_symbols": "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"
2331
2331
  }
2332
2332
  ],
@@ -2642,7 +2642,7 @@
2642
2642
  },
2643
2643
  "230": {
2644
2644
  "path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/oracle/version.nr",
2645
- "source": "/// The ORACLE_VERSION constant is used to check that the oracle interface is in sync between PXE and Aztec.nr. We need\n/// to version the oracle interface to ensure that developers get a reasonable error message if they use incompatible\n/// versions of Aztec.nr and PXE. The TypeScript counterpart is in `oracle_version.ts`.\n///\n/// @dev Whenever a contract function or Noir test is run, the `utilityAssertCompatibleOracleVersion` oracle is called\n/// and if the oracle version is incompatible an error is thrown.\npub global ORACLE_VERSION: Field = 10;\n\n/// Asserts that the version of the oracle is compatible with the version expected by the contract.\npub fn assert_compatible_oracle_version() {\n // Safety: This oracle call returns nothing: we only call it to check Aztec.nr and Oracle interface versions are\n // compatible. It is therefore always safe to call.\n unsafe {\n assert_compatible_oracle_version_wrapper();\n }\n}\n\nunconstrained fn assert_compatible_oracle_version_wrapper() {\n assert_compatible_oracle_version_oracle(ORACLE_VERSION);\n}\n\n#[oracle(utilityAssertCompatibleOracleVersion)]\nunconstrained fn assert_compatible_oracle_version_oracle(version: Field) {}\n\nmod test {\n use super::{assert_compatible_oracle_version_oracle, ORACLE_VERSION};\n\n #[test]\n unconstrained fn compatible_oracle_version() {\n assert_compatible_oracle_version_oracle(ORACLE_VERSION);\n }\n\n #[test(should_fail_with = \"Incompatible oracle version. TXE is using version\")]\n unconstrained fn incompatible_oracle_version() {\n let arbitrary_incorrect_version = 318183437;\n assert_compatible_oracle_version_oracle(arbitrary_incorrect_version);\n }\n}\n"
2645
+ "source": "/// The ORACLE_VERSION constant is used to check that the oracle interface is in sync between PXE and Aztec.nr. We need\n/// to version the oracle interface to ensure that developers get a reasonable error message if they use incompatible\n/// versions of Aztec.nr and PXE. The TypeScript counterpart is in `oracle_version.ts`.\n///\n/// @dev Whenever a contract function or Noir test is run, the `utilityAssertCompatibleOracleVersion` oracle is called\n/// and if the oracle version is incompatible an error is thrown.\npub global ORACLE_VERSION: Field = 11;\n\n/// Asserts that the version of the oracle is compatible with the version expected by the contract.\npub fn assert_compatible_oracle_version() {\n // Safety: This oracle call returns nothing: we only call it to check Aztec.nr and Oracle interface versions are\n // compatible. It is therefore always safe to call.\n unsafe {\n assert_compatible_oracle_version_wrapper();\n }\n}\n\nunconstrained fn assert_compatible_oracle_version_wrapper() {\n assert_compatible_oracle_version_oracle(ORACLE_VERSION);\n}\n\n#[oracle(utilityAssertCompatibleOracleVersion)]\nunconstrained fn assert_compatible_oracle_version_oracle(version: Field) {}\n\nmod test {\n use super::{assert_compatible_oracle_version_oracle, ORACLE_VERSION};\n\n #[test]\n unconstrained fn compatible_oracle_version() {\n assert_compatible_oracle_version_oracle(ORACLE_VERSION);\n }\n\n #[test(should_fail_with = \"Incompatible oracle version. TXE is using version\")]\n unconstrained fn incompatible_oracle_version() {\n let arbitrary_incorrect_version = 318183437;\n assert_compatible_oracle_version_oracle(arbitrary_incorrect_version);\n }\n}\n"
2646
2646
  },
2647
2647
  "297": {
2648
2648
  "path": "/home/aztec-dev/nargo/github.com/noir-lang/poseidon/v0.2.3/src/poseidon2.nr",
@@ -2698,7 +2698,7 @@
2698
2698
  },
2699
2699
  "51": {
2700
2700
  "path": "/home/aztec-dev/aztec-packages/noir-projects/noir-contracts/contracts/protocol/auth_registry_contract/src/main.nr",
2701
- "source": "/**\n * @title AuthRegistry Contract\n * @notice Manages authorization of public actions through authentication witnesses (authwits)\n * @dev This contract allows users to approve/reject public actions that can be performed on their behalf by other\n * addresses\n */\npub contract AuthRegistry {\n use aztec::{\n authwit::auth::{\n assert_current_call_valid_authwit, compute_authwit_message_hash, IS_VALID_SELECTOR,\n },\n context::{PrivateContext, PublicContext, UtilityContext},\n hash::{hash_args, hash_calldata_array},\n oracle::{avm, execution_cache, version::assert_compatible_oracle_version},\n protocol::{\n abis::function_selector::FunctionSelector,\n address::AztecAddress,\n traits::{Deserialize, FromField, Serialize, ToField},\n utils::reader::Reader,\n },\n state_vars::{Map, PublicMutable, StateVariable},\n };\n\n struct Storage<Context> {\n /// Map of addresses that have rejected all actions\n reject_all: Map<AztecAddress, PublicMutable<bool, Context>, Context>,\n /// Nested map of approvers to their authorized message hashes\n /// First key is the approver address, second key is the message hash, value is authorization status\n approved_actions: Map<AztecAddress, Map<Field, PublicMutable<bool, Context>, Context>, Context>,\n }\n\n /**\n * Updates the `authorized` value for `msg_sender` for `message_hash`.\n *\n * @param message_hash The message hash being authorized\n * @param authorize True if the caller is authorized to perform the message hash, false otherwise\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n unconstrained fn set_authorized(message_hash: Field, authorize: bool) {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 2] =\n avm::calldata_copy(1, <Field as Serialize>::N + <bool as Serialize>::N);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n // MACRO CODE END\n\n storage.approved_actions.at(avm::sender()).at(message_hash).write(authorize);\n }\n\n /**\n * Updates the `reject_all` value for `msg_sender`.\n *\n * When `reject_all` is `true` any `consume` on `msg_sender` will revert.\n *\n * @param reject True if all actions should be rejected, false otherwise\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n unconstrained fn set_reject_all(reject: bool) {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 1] = avm::calldata_copy(1, <bool as Serialize>::N);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n // MACRO CODE END\n\n storage.reject_all.at(avm::sender()).write(reject);\n }\n\n /**\n * Consumes an `inner_hash` on behalf of `on_behalf_of` if the caller is authorized to do so.\n *\n * Will revert even if the caller is authorized if `reject_all` is set to true for `on_behalf_of`.\n * This is to support \"mass-revoke\".\n *\n * @param on_behalf_of The address on whose behalf the action is being consumed\n * @param inner_hash The inner_hash of the authwit\n * @return `IS_VALID_SELECTOR` if the action was consumed, revert otherwise\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n unconstrained fn consume(on_behalf_of: AztecAddress, inner_hash: Field) -> pub Field {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 2] =\n avm::calldata_copy(1, <AztecAddress as Serialize>::N + <Field as Serialize>::N);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n // MACRO CODE END\n\n assert_eq(false, storage.reject_all.at(on_behalf_of).read(), \"rejecting all\");\n\n let message_hash = compute_authwit_message_hash(\n context.maybe_msg_sender().unwrap(),\n context.chain_id(),\n context.version(),\n inner_hash,\n );\n\n let authorized = storage.approved_actions.at(on_behalf_of).at(message_hash).read();\n\n assert_eq(true, authorized, \"unauthorized\");\n storage.approved_actions.at(on_behalf_of).at(message_hash).write(false);\n\n IS_VALID_SELECTOR\n }\n\n /**\n * Updates a public authwit using a private authwit\n *\n * Useful for the case where you want someone else to insert a public authwit for you.\n * For example, if Alice wants Bob to insert an authwit in public, such that they can execute\n * a trade, Alice can create a private authwit, and Bob can call this function with it.\n *\n * @param approver The address of the approver (Alice in the example)\n * @param message_hash The message hash to authorize\n * @param authorize True if the message hash should be authorized, false otherwise\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_private]\n fn set_authorized_private(\n inputs: aztec::context::inputs::PrivateContextInputs,\n approver: AztecAddress,\n message_hash: Field,\n authorize: 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 or in the subsequent enqueued public function call, I have removed that check.\n assert_compatible_oracle_version();\n\n let serialized_params: [Field; 3] =\n [approver.to_field(), message_hash, authorize.to_field()];\n let args_hash: Field = hash_args(serialized_params);\n let mut context: PrivateContext = PrivateContext::new(inputs, args_hash);\n\n // MACRO CODE END\n\n // 3 corresponds to the number of arguments of the function\n assert_current_call_valid_authwit::<3>(&mut context, approver);\n\n // Enqueue call to _set_authorized\n // Note: This was originally just `self.enqueue_self._set_authorized(approver, message_hash, authorize);`\n // before de-macroification.\n {\n let enqueue_params: [Field; 3] =\n [approver.to_field(), message_hash, authorize.to_field()];\n let selector: FunctionSelector = FunctionSelector::from_field(_SET_AUTHORIZED_SELECTOR);\n let calldata: [Field; 4] = [selector.to_field()].concat(enqueue_params);\n let calldata_hash: Field = hash_calldata_array(calldata);\n execution_cache::store(calldata, calldata_hash);\n context.call_public_function_with_calldata_hash(\n context.this_address(),\n calldata_hash,\n false,\n false,\n );\n }\n\n // MACRO CODE START\n context.finish()\n // MACRO CODE END\n }\n\n /**\n * Internal function to update the `authorized` value for `approver` for `messageHash`.\n * Used along with `set_authorized_private` to update the public authwit.\n *\n * @param approver The address of the approver\n * @param message_hash The message hash being authorized\n * @param authorize True if the caller is authorized to perform the message hash, false otherwise\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_only_self]\n unconstrained fn _set_authorized(approver: AztecAddress, message_hash: Field, authorize: bool) {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 3] = avm::calldata_copy(\n 1,\n (<AztecAddress as Serialize>::N + <Field as Serialize>::N)\n + <bool as Serialize>::N,\n );\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n\n // Originally injected by the #[only_self] macro\n assert(\n avm::sender() == context.this_address(),\n \"Function _set_authorized can only be called by the same contract\",\n );\n // MACRO CODE END\n\n storage.approved_actions.at(approver).at(message_hash).write(authorize);\n }\n\n /**\n * Fetches the `reject_all` value for `on_behalf_of`.\n *\n * @param on_behalf_of The address to check\n * @return True if all actions are rejected, false otherwise\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_view]\n unconstrained fn is_reject_all(on_behalf_of: AztecAddress) -> pub bool {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 1] =\n avm::calldata_copy(1, <AztecAddress as Serialize>::N);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n\n // Originally injected by the #[view] macro\n assert(context.is_static_call(), \"Function is_reject_all can only be called statically\");\n // MACRO CODE END\n\n storage.reject_all.at(on_behalf_of).read()\n }\n\n /**\n * Fetches the `authorized` value for `on_behalf_of` for `message_hash`.\n *\n * @param on_behalf_of The address on whose behalf the action is being consumed\n * @param message_hash The message hash to check\n * @return True if the caller is authorized to perform the action, false otherwise\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_view]\n unconstrained fn is_consumable(on_behalf_of: AztecAddress, message_hash: Field) -> pub bool {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 2] =\n avm::calldata_copy(1, <AztecAddress as Serialize>::N + <Field as Serialize>::N);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n\n // Originally injected by the #[view] macro\n assert(context.is_static_call(), \"Function is_consumable can only be called statically\");\n // MACRO CODE END\n\n storage.approved_actions.at(on_behalf_of).at(message_hash).read()\n }\n\n /**\n * Just like `is_consumable`, but a utility function and not public.\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_utility]\n unconstrained fn utility_is_consumable(\n on_behalf_of: AztecAddress,\n message_hash: Field,\n ) -> pub bool {\n // MACRO CODE START\n assert_compatible_oracle_version();\n\n let context: UtilityContext = UtilityContext::new();\n let storage: Storage<UtilityContext> = Storage::init(context);\n // MACRO CODE END\n\n storage.approved_actions.at(on_behalf_of).at(message_hash).read()\n }\n\n // // THE REST OF THE CODE IN THIS CONTRACT WAS ORIGINALLY INJECTED BY THE #[aztec] MACRO.\n\n // Function selectors computed at comptime from function signatures\n global SET_AUTHORIZED_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"set_authorized(Field,bool)\").to_field() };\n global SET_REJECT_ALL_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"set_reject_all(bool)\").to_field() };\n global CONSUME_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"consume((Field),Field)\").to_field() };\n global _SET_AUTHORIZED_SELECTOR: Field = comptime {\n FunctionSelector::from_signature(\"_set_authorized((Field),Field,bool)\").to_field()\n };\n global IS_REJECT_ALL_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"is_reject_all((Field))\").to_field() };\n global IS_CONSUMABLE_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"is_consumable((Field),Field)\").to_field() };\n\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n pub unconstrained fn public_dispatch(selector: Field) {\n if selector == SET_AUTHORIZED_SELECTOR {\n let input_calldata: [Field; 2] =\n avm::calldata_copy(1, <Field as Serialize>::N + <bool as Serialize>::N);\n let mut reader: Reader<2> = Reader::new(input_calldata);\n let arg0: Field = reader.read_struct(<Field as Deserialize>::deserialize);\n let arg1: bool = reader.read_struct(<bool as Deserialize>::deserialize);\n set_authorized(arg0, arg1);\n avm::avm_return([].as_vector());\n };\n if selector == SET_REJECT_ALL_SELECTOR {\n let input_calldata: [Field; 1] = avm::calldata_copy(1, <bool as Serialize>::N);\n let mut reader: Reader<1> = Reader::new(input_calldata);\n let arg0: bool = reader.read_struct(<bool as Deserialize>::deserialize);\n set_reject_all(arg0);\n avm::avm_return([].as_vector());\n };\n if selector == CONSUME_SELECTOR {\n let input_calldata: [Field; 2] =\n avm::calldata_copy(1, <AztecAddress as Serialize>::N + <Field as Serialize>::N);\n let mut reader: Reader<2> = Reader::new(input_calldata);\n let arg0: AztecAddress = reader.read_struct(<AztecAddress as Deserialize>::deserialize);\n let arg1: Field = reader.read_struct(<Field as Deserialize>::deserialize);\n let return_value: [Field; 1] = <Field as Serialize>::serialize(consume(arg0, arg1));\n avm::avm_return(return_value.as_vector());\n };\n if selector == _SET_AUTHORIZED_SELECTOR {\n let input_calldata: [Field; 3] = avm::calldata_copy(\n 1,\n (<AztecAddress as Serialize>::N + <Field as Serialize>::N) + <bool as Serialize>::N,\n );\n let mut reader: Reader<3> = Reader::new(input_calldata);\n let arg0: AztecAddress = reader.read_struct(<AztecAddress as Deserialize>::deserialize);\n let arg1: Field = reader.read_struct(<Field as Deserialize>::deserialize);\n let arg2: bool = reader.read_struct(<bool as Deserialize>::deserialize);\n _set_authorized(arg0, arg1, arg2);\n avm::avm_return([].as_vector());\n };\n if selector == IS_REJECT_ALL_SELECTOR {\n let input_calldata: [Field; 1] = avm::calldata_copy(1, <AztecAddress as Serialize>::N);\n let mut reader: Reader<1> = Reader::new(input_calldata);\n let arg0: AztecAddress = reader.read_struct(<AztecAddress as Deserialize>::deserialize);\n let return_value: [Field; 1] = <bool as Serialize>::serialize(is_reject_all(arg0));\n avm::avm_return(return_value.as_vector());\n };\n if selector == IS_CONSUMABLE_SELECTOR {\n let input_calldata: [Field; 2] =\n avm::calldata_copy(1, <AztecAddress as Serialize>::N + <Field as Serialize>::N);\n let mut reader: Reader<2> = Reader::new(input_calldata);\n let arg0: AztecAddress = reader.read_struct(<AztecAddress as Deserialize>::deserialize);\n let arg1: Field = reader.read_struct(<Field as Deserialize>::deserialize);\n let return_value: [Field; 1] =\n <bool as Serialize>::serialize(is_consumable(arg0, arg1));\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 reject_all: <Map<AztecAddress, PublicMutable<bool, Context>, Context> as StateVariable<1, Context>>::new(\n context,\n 1,\n ),\n approved_actions: <Map<AztecAddress, Map<Field, PublicMutable<bool, Context>, Context>, Context> as StateVariable<1, Context>>::new(\n context,\n 2,\n ),\n }\n }\n }\n\n // Parameter structs for ABI\n pub struct _set_authorized_parameters {\n pub _approver: AztecAddress,\n pub _message_hash: Field,\n pub _authorize: bool,\n }\n\n pub struct consume_parameters {\n pub _on_behalf_of: AztecAddress,\n pub _inner_hash: Field,\n }\n\n pub struct is_consumable_parameters {\n pub _on_behalf_of: AztecAddress,\n pub _message_hash: Field,\n }\n\n pub struct is_reject_all_parameters {\n pub _on_behalf_of: AztecAddress,\n }\n\n pub struct set_authorized_parameters {\n pub _message_hash: Field,\n pub _authorize: bool,\n }\n\n pub struct set_authorized_private_parameters {\n pub _approver: AztecAddress,\n pub _message_hash: Field,\n pub _authorize: bool,\n }\n\n pub struct set_reject_all_parameters {\n pub _reject: bool,\n }\n\n pub struct utility_is_consumable_parameters {\n pub _on_behalf_of: AztecAddress,\n pub _message_hash: Field,\n }\n\n // ABI structs\n #[abi(functions)]\n pub struct _set_authorized_abi {\n parameters: _set_authorized_parameters,\n }\n\n #[abi(functions)]\n pub struct consume_abi {\n parameters: consume_parameters,\n return_type: Field,\n }\n\n #[abi(functions)]\n pub struct is_consumable_abi {\n parameters: is_consumable_parameters,\n return_type: bool,\n }\n\n #[abi(functions)]\n pub struct is_reject_all_abi {\n parameters: is_reject_all_parameters,\n return_type: bool,\n }\n\n #[abi(functions)]\n pub struct set_authorized_abi {\n parameters: set_authorized_parameters,\n }\n\n #[abi(functions)]\n pub struct set_authorized_private_abi {\n parameters: set_authorized_private_parameters,\n }\n\n #[abi(functions)]\n pub struct set_reject_all_abi {\n parameters: set_reject_all_parameters,\n }\n\n #[abi(functions)]\n pub struct utility_is_consumable_abi {\n parameters: utility_is_consumable_parameters,\n return_type: bool,\n }\n}\n"
2701
+ "source": "/**\n * @title AuthRegistry Contract\n * @notice Manages authorization of public actions through authentication witnesses (authwits)\n * @dev This contract allows users to approve/reject public actions that can be performed on their behalf by other\n * addresses\n */\npub contract AuthRegistry {\n use aztec::{\n authwit::auth::{\n assert_current_call_valid_authwit, compute_authwit_message_hash, IS_VALID_SELECTOR,\n },\n context::{PrivateContext, PublicContext, UtilityContext},\n hash::{hash_args, hash_calldata_array},\n oracle::{avm, execution_cache, version::assert_compatible_oracle_version},\n protocol::{\n abis::function_selector::FunctionSelector,\n address::AztecAddress,\n traits::{Deserialize, FromField, Serialize, ToField},\n utils::reader::Reader,\n },\n state_vars::{Map, PublicMutable, StateVariable},\n };\n\n struct Storage<Context> {\n /// Map of addresses that have rejected all actions\n reject_all: Map<AztecAddress, PublicMutable<bool, Context>, Context>,\n /// Nested map of approvers to their authorized message hashes\n /// First key is the approver address, second key is the message hash, value is authorization status\n approved_actions: Map<AztecAddress, Map<Field, PublicMutable<bool, Context>, Context>, Context>,\n }\n\n /**\n * Updates the `authorized` value for `msg_sender` for `message_hash`.\n *\n * @param message_hash The message hash being authorized\n * @param authorize True if the caller is authorized to perform the message hash, false otherwise\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n unconstrained fn set_authorized(message_hash: Field, authorize: bool) {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 2] =\n avm::calldata_copy(1, <Field as Serialize>::N + <bool as Serialize>::N);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n // MACRO CODE END\n\n storage.approved_actions.at(avm::sender()).at(message_hash).write(authorize);\n }\n\n /**\n * Updates the `reject_all` value for `msg_sender`.\n *\n * When `reject_all` is `true` any `consume` on `msg_sender` will revert.\n *\n * @param reject True if all actions should be rejected, false otherwise\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n unconstrained fn set_reject_all(reject: bool) {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 1] = avm::calldata_copy(1, <bool as Serialize>::N);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n // MACRO CODE END\n\n storage.reject_all.at(avm::sender()).write(reject);\n }\n\n /**\n * Consumes an `inner_hash` on behalf of `on_behalf_of` if the caller is authorized to do so.\n *\n * Will revert even if the caller is authorized if `reject_all` is set to true for `on_behalf_of`.\n * This is to support \"mass-revoke\".\n *\n * @param on_behalf_of The address on whose behalf the action is being consumed\n * @param inner_hash The inner_hash of the authwit\n * @return `IS_VALID_SELECTOR` if the action was consumed, revert otherwise\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n unconstrained fn consume(on_behalf_of: AztecAddress, inner_hash: Field) -> pub Field {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 2] =\n avm::calldata_copy(1, <AztecAddress as Serialize>::N + <Field as Serialize>::N);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n // MACRO CODE END\n\n assert_eq(false, storage.reject_all.at(on_behalf_of).read(), \"rejecting all\");\n\n let message_hash = compute_authwit_message_hash(\n context.maybe_msg_sender().unwrap(),\n context.chain_id(),\n context.version(),\n inner_hash,\n );\n\n let authorized = storage.approved_actions.at(on_behalf_of).at(message_hash).read();\n\n assert_eq(true, authorized, \"unauthorized\");\n storage.approved_actions.at(on_behalf_of).at(message_hash).write(false);\n\n IS_VALID_SELECTOR\n }\n\n /**\n * Updates a public authwit using a private authwit\n *\n * Useful for the case where you want someone else to insert a public authwit for you.\n * For example, if Alice wants Bob to insert an authwit in public, such that they can execute\n * a trade, Alice can create a private authwit, and Bob can call this function with it.\n *\n * @param approver The address of the approver (Alice in the example)\n * @param message_hash The message hash to authorize\n * @param authorize True if the message hash should be authorized, false otherwise\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_private]\n fn set_authorized_private(\n inputs: aztec::context::inputs::PrivateContextInputs,\n approver: AztecAddress,\n message_hash: Field,\n authorize: 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 or in the subsequent enqueued public function call, I have removed that check.\n assert_compatible_oracle_version();\n\n let serialized_params: [Field; 3] =\n [approver.to_field(), message_hash, authorize.to_field()];\n let args_hash: Field = hash_args(serialized_params);\n let mut context: PrivateContext = PrivateContext::new(inputs, args_hash);\n\n // MACRO CODE END\n\n // 3 corresponds to the number of arguments of the function\n assert_current_call_valid_authwit::<3>(&mut context, approver);\n\n // Enqueue call to _set_authorized\n // Note: This was originally just `self.enqueue_self._set_authorized(approver, message_hash, authorize);`\n // before de-macroification.\n {\n let enqueue_params: [Field; 3] =\n [approver.to_field(), message_hash, authorize.to_field()];\n let selector: FunctionSelector = FunctionSelector::from_field(_SET_AUTHORIZED_SELECTOR);\n let calldata: [Field; 4] = [selector.to_field()].concat(enqueue_params);\n let calldata_hash: Field = hash_calldata_array(calldata);\n execution_cache::store(calldata, calldata_hash);\n context.call_public_function_with_calldata_hash(\n context.this_address(),\n calldata_hash,\n false,\n false,\n );\n }\n\n // MACRO CODE START\n context.finish()\n // MACRO CODE END\n }\n\n /**\n * Internal function to update the `authorized` value for `approver` for `messageHash`.\n * Used along with `set_authorized_private` to update the public authwit.\n *\n * @param approver The address of the approver\n * @param message_hash The message hash being authorized\n * @param authorize True if the caller is authorized to perform the message hash, false otherwise\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_only_self]\n unconstrained fn _set_authorized(approver: AztecAddress, message_hash: Field, authorize: bool) {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 3] = avm::calldata_copy(\n 1,\n (<AztecAddress as Serialize>::N + <Field as Serialize>::N)\n + <bool as Serialize>::N,\n );\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n\n // Originally injected by the #[only_self] macro\n assert(\n avm::sender() == context.this_address(),\n \"Function _set_authorized can only be called by the same contract\",\n );\n // MACRO CODE END\n\n storage.approved_actions.at(approver).at(message_hash).write(authorize);\n }\n\n /**\n * Fetches the `reject_all` value for `on_behalf_of`.\n *\n * @param on_behalf_of The address to check\n * @return True if all actions are rejected, false otherwise\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_view]\n unconstrained fn is_reject_all(on_behalf_of: AztecAddress) -> pub bool {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 1] =\n avm::calldata_copy(1, <AztecAddress as Serialize>::N);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n\n // Originally injected by the #[view] macro\n assert(context.is_static_call(), \"Function is_reject_all can only be called statically\");\n // MACRO CODE END\n\n storage.reject_all.at(on_behalf_of).read()\n }\n\n /**\n * Fetches the `authorized` value for `on_behalf_of` for `message_hash`.\n *\n * @param on_behalf_of The address on whose behalf the action is being consumed\n * @param message_hash The message hash to check\n * @return True if the caller is authorized to perform the action, false otherwise\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_view]\n unconstrained fn is_consumable(on_behalf_of: AztecAddress, message_hash: Field) -> pub bool {\n // MACRO CODE START\n let context: PublicContext = PublicContext::new(\n || -> Field {\n let serialized_args: [Field; 2] =\n avm::calldata_copy(1, <AztecAddress as Serialize>::N + <Field as Serialize>::N);\n hash_args(serialized_args)\n },\n );\n let storage: Storage<PublicContext> = Storage::init(context);\n\n // Originally injected by the #[view] macro\n assert(context.is_static_call(), \"Function is_consumable can only be called statically\");\n // MACRO CODE END\n\n storage.approved_actions.at(on_behalf_of).at(message_hash).read()\n }\n\n /**\n * Just like `is_consumable`, but a utility function and not public.\n */\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_utility]\n unconstrained fn utility_is_consumable(\n on_behalf_of: AztecAddress,\n message_hash: Field,\n ) -> pub bool {\n // MACRO CODE START\n assert_compatible_oracle_version();\n\n let context: UtilityContext = UtilityContext::new();\n let storage: Storage<UtilityContext> = Storage::init(context);\n // MACRO CODE END\n\n storage.approved_actions.at(on_behalf_of).at(message_hash).read()\n }\n\n // // THE REST OF THE CODE IN THIS CONTRACT WAS ORIGINALLY INJECTED BY THE #[aztec] MACRO.\n\n // Function selectors computed at comptime from function signatures\n global SET_AUTHORIZED_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"set_authorized(Field,bool)\").to_field() };\n global SET_REJECT_ALL_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"set_reject_all(bool)\").to_field() };\n global CONSUME_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"consume((Field),Field)\").to_field() };\n global _SET_AUTHORIZED_SELECTOR: Field = comptime {\n FunctionSelector::from_signature(\"_set_authorized((Field),Field,bool)\").to_field()\n };\n global IS_REJECT_ALL_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"is_reject_all((Field))\").to_field() };\n global IS_CONSUMABLE_SELECTOR: Field =\n comptime { FunctionSelector::from_signature(\"is_consumable((Field),Field)\").to_field() };\n\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_public]\n pub unconstrained fn public_dispatch(selector: Field) {\n if selector == SET_AUTHORIZED_SELECTOR {\n let input_calldata: [Field; 2] =\n avm::calldata_copy(1, <Field as Serialize>::N + <bool as Serialize>::N);\n let mut reader: Reader<2> = Reader::new(input_calldata);\n let arg0: Field = <Field as Deserialize>::stream_deserialize(&mut reader);\n let arg1: bool = <bool as Deserialize>::stream_deserialize(&mut reader);\n set_authorized(arg0, arg1);\n avm::avm_return([].as_vector());\n };\n if selector == SET_REJECT_ALL_SELECTOR {\n let input_calldata: [Field; 1] = avm::calldata_copy(1, <bool as Serialize>::N);\n let mut reader: Reader<1> = Reader::new(input_calldata);\n let arg0: bool = <bool as Deserialize>::stream_deserialize(&mut reader);\n set_reject_all(arg0);\n avm::avm_return([].as_vector());\n };\n if selector == CONSUME_SELECTOR {\n let input_calldata: [Field; 2] =\n avm::calldata_copy(1, <AztecAddress as Serialize>::N + <Field as Serialize>::N);\n let mut reader: Reader<2> = Reader::new(input_calldata);\n let arg0: AztecAddress = <AztecAddress as Deserialize>::stream_deserialize(&mut reader);\n let arg1: Field = <Field as Deserialize>::stream_deserialize(&mut reader);\n let return_value: [Field; 1] = <Field as Serialize>::serialize(consume(arg0, arg1));\n avm::avm_return(return_value.as_vector());\n };\n if selector == _SET_AUTHORIZED_SELECTOR {\n let input_calldata: [Field; 3] = avm::calldata_copy(\n 1,\n (<AztecAddress as Serialize>::N + <Field as Serialize>::N) + <bool as Serialize>::N,\n );\n let mut reader: Reader<3> = Reader::new(input_calldata);\n let arg0: AztecAddress = <AztecAddress as Deserialize>::stream_deserialize(&mut reader);\n let arg1: Field = <Field as Deserialize>::stream_deserialize(&mut reader);\n let arg2: bool = <bool as Deserialize>::stream_deserialize(&mut reader);\n _set_authorized(arg0, arg1, arg2);\n avm::avm_return([].as_vector());\n };\n if selector == IS_REJECT_ALL_SELECTOR {\n let input_calldata: [Field; 1] = avm::calldata_copy(1, <AztecAddress as Serialize>::N);\n let mut reader: Reader<1> = Reader::new(input_calldata);\n let arg0: AztecAddress = <AztecAddress as Deserialize>::stream_deserialize(&mut reader);\n let return_value: [Field; 1] = <bool as Serialize>::serialize(is_reject_all(arg0));\n avm::avm_return(return_value.as_vector());\n };\n if selector == IS_CONSUMABLE_SELECTOR {\n let input_calldata: [Field; 2] =\n avm::calldata_copy(1, <AztecAddress as Serialize>::N + <Field as Serialize>::N);\n let mut reader: Reader<2> = Reader::new(input_calldata);\n let arg0: AztecAddress = <AztecAddress as Deserialize>::stream_deserialize(&mut reader);\n let arg1: Field = <Field as Deserialize>::stream_deserialize(&mut reader);\n let return_value: [Field; 1] =\n <bool as Serialize>::serialize(is_consumable(arg0, arg1));\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 reject_all: <Map<AztecAddress, PublicMutable<bool, Context>, Context> as StateVariable<1, Context>>::new(\n context,\n 1,\n ),\n approved_actions: <Map<AztecAddress, Map<Field, PublicMutable<bool, Context>, Context>, Context> as StateVariable<1, Context>>::new(\n context,\n 2,\n ),\n }\n }\n }\n\n // Parameter structs for ABI\n pub struct _set_authorized_parameters {\n pub _approver: AztecAddress,\n pub _message_hash: Field,\n pub _authorize: bool,\n }\n\n pub struct consume_parameters {\n pub _on_behalf_of: AztecAddress,\n pub _inner_hash: Field,\n }\n\n pub struct is_consumable_parameters {\n pub _on_behalf_of: AztecAddress,\n pub _message_hash: Field,\n }\n\n pub struct is_reject_all_parameters {\n pub _on_behalf_of: AztecAddress,\n }\n\n pub struct set_authorized_parameters {\n pub _message_hash: Field,\n pub _authorize: bool,\n }\n\n pub struct set_authorized_private_parameters {\n pub _approver: AztecAddress,\n pub _message_hash: Field,\n pub _authorize: bool,\n }\n\n pub struct set_reject_all_parameters {\n pub _reject: bool,\n }\n\n pub struct utility_is_consumable_parameters {\n pub _on_behalf_of: AztecAddress,\n pub _message_hash: Field,\n }\n\n // ABI structs\n #[abi(functions)]\n pub struct _set_authorized_abi {\n parameters: _set_authorized_parameters,\n }\n\n #[abi(functions)]\n pub struct consume_abi {\n parameters: consume_parameters,\n return_type: Field,\n }\n\n #[abi(functions)]\n pub struct is_consumable_abi {\n parameters: is_consumable_parameters,\n return_type: bool,\n }\n\n #[abi(functions)]\n pub struct is_reject_all_abi {\n parameters: is_reject_all_parameters,\n return_type: bool,\n }\n\n #[abi(functions)]\n pub struct set_authorized_abi {\n parameters: set_authorized_parameters,\n }\n\n #[abi(functions)]\n pub struct set_authorized_private_abi {\n parameters: set_authorized_private_parameters,\n }\n\n #[abi(functions)]\n pub struct set_reject_all_abi {\n parameters: set_reject_all_parameters,\n }\n\n #[abi(functions)]\n pub struct utility_is_consumable_abi {\n parameters: utility_is_consumable_parameters,\n return_type: bool,\n }\n}\n"
2702
2702
  },
2703
2703
  "52": {
2704
2704
  "path": "/home/aztec-dev/aztec-packages/noir-projects/noir-contracts/contracts/protocol/aztec_sublib/src/authwit/auth.nr",