@aztec/protocol-contracts 0.57.0 → 0.58.0

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.
Files changed (95) hide show
  1. package/artifacts/AuthRegistry.d.json.ts +5 -3
  2. package/artifacts/AuthRegistry.json +1 -1
  3. package/artifacts/ContractClassRegisterer.d.json.ts +5 -3
  4. package/artifacts/ContractClassRegisterer.json +1 -1
  5. package/artifacts/ContractInstanceDeployer.d.json.ts +5 -3
  6. package/artifacts/ContractInstanceDeployer.json +1 -1
  7. package/artifacts/FeeJuice.d.json.ts +5 -3
  8. package/artifacts/FeeJuice.json +1 -1
  9. package/artifacts/MultiCallEntrypoint.d.json.ts +5 -3
  10. package/artifacts/MultiCallEntrypoint.json +1 -1
  11. package/artifacts/Router.d.json.ts +5 -3
  12. package/artifacts/Router.json +1 -1
  13. package/artifacts/keys/AuthRegistry/set_authorized_private.vk.data.json +134 -0
  14. package/artifacts/keys/ContractClassRegisterer/broadcast_private_function.vk.data.json +134 -0
  15. package/artifacts/keys/ContractClassRegisterer/broadcast_unconstrained_function.vk.data.json +134 -0
  16. package/artifacts/keys/ContractClassRegisterer/register.vk.data.json +134 -0
  17. package/artifacts/keys/ContractInstanceDeployer/deploy.vk.data.json +134 -0
  18. package/artifacts/keys/FeeJuice/claim.vk.data.json +134 -0
  19. package/artifacts/keys/FeeJuice/initialize.vk.data.json +134 -0
  20. package/artifacts/keys/MultiCallEntrypoint/entrypoint.vk.data.json +134 -0
  21. package/artifacts/keys/Router/check_block_number.vk.data.json +134 -0
  22. package/artifacts/keys/Router/check_timestamp.vk.data.json +134 -0
  23. package/dest/auth-registry/index.d.ts +0 -3
  24. package/dest/auth-registry/index.d.ts.map +1 -1
  25. package/dest/auth-registry/index.js +2 -12
  26. package/dest/build_protocol_contract_tree.d.ts +6 -0
  27. package/dest/build_protocol_contract_tree.d.ts.map +1 -0
  28. package/dest/build_protocol_contract_tree.js +12 -0
  29. package/dest/class-registerer/index.d.ts +0 -2
  30. package/dest/class-registerer/index.d.ts.map +1 -1
  31. package/dest/class-registerer/index.js +2 -9
  32. package/dest/fee-juice/index.d.ts +0 -4
  33. package/dest/fee-juice/index.d.ts.map +1 -1
  34. package/dest/fee-juice/index.js +2 -10
  35. package/dest/index.d.ts +3 -1
  36. package/dest/index.d.ts.map +1 -1
  37. package/dest/index.js +4 -2
  38. package/dest/instance-deployer/index.d.ts +0 -2
  39. package/dest/instance-deployer/index.d.ts.map +1 -1
  40. package/dest/instance-deployer/index.js +2 -9
  41. package/dest/multi-call-entrypoint/index.d.ts +0 -2
  42. package/dest/multi-call-entrypoint/index.d.ts.map +1 -1
  43. package/dest/multi-call-entrypoint/index.js +2 -6
  44. package/dest/protocol_contract.d.ts +4 -4
  45. package/dest/protocol_contract.d.ts.map +1 -1
  46. package/dest/protocol_contract.js +12 -9
  47. package/dest/protocol_contract_data.d.ts +17 -0
  48. package/dest/protocol_contract_data.d.ts.map +1 -0
  49. package/dest/protocol_contract_data.js +51 -0
  50. package/dest/protocol_contract_tree.d.ts +3 -0
  51. package/dest/protocol_contract_tree.d.ts.map +1 -0
  52. package/dest/protocol_contract_tree.js +21 -0
  53. package/dest/router/index.d.ts +0 -3
  54. package/dest/router/index.d.ts.map +1 -1
  55. package/dest/router/index.js +2 -12
  56. package/dest/scripts/generate_data.d.ts +2 -0
  57. package/dest/scripts/generate_data.d.ts.map +1 -0
  58. package/dest/scripts/generate_data.js +172 -0
  59. package/package.json +6 -6
  60. package/src/auth-registry/index.ts +1 -17
  61. package/src/build_protocol_contract_tree.ts +23 -0
  62. package/src/class-registerer/index.ts +1 -12
  63. package/src/fee-juice/index.ts +1 -14
  64. package/src/index.ts +3 -1
  65. package/src/instance-deployer/index.ts +1 -12
  66. package/src/multi-call-entrypoint/index.ts +1 -8
  67. package/src/protocol_contract.ts +20 -13
  68. package/src/protocol_contract_data.ts +63 -0
  69. package/src/protocol_contract_tree.ts +27 -0
  70. package/src/router/index.ts +1 -17
  71. package/src/scripts/generate_data.ts +208 -0
  72. package/dest/auth-registry/artifact.d.ts +0 -2
  73. package/dest/auth-registry/artifact.d.ts.map +0 -1
  74. package/dest/auth-registry/artifact.js +0 -4
  75. package/dest/class-registerer/artifact.d.ts +0 -2
  76. package/dest/class-registerer/artifact.d.ts.map +0 -1
  77. package/dest/class-registerer/artifact.js +0 -4
  78. package/dest/fee-juice/artifact.d.ts +0 -2
  79. package/dest/fee-juice/artifact.d.ts.map +0 -1
  80. package/dest/fee-juice/artifact.js +0 -4
  81. package/dest/instance-deployer/artifact.d.ts +0 -2
  82. package/dest/instance-deployer/artifact.d.ts.map +0 -1
  83. package/dest/instance-deployer/artifact.js +0 -4
  84. package/dest/multi-call-entrypoint/artifact.d.ts +0 -2
  85. package/dest/multi-call-entrypoint/artifact.d.ts.map +0 -1
  86. package/dest/multi-call-entrypoint/artifact.js +0 -4
  87. package/dest/router/artifact.d.ts +0 -2
  88. package/dest/router/artifact.d.ts.map +0 -1
  89. package/dest/router/artifact.js +0 -4
  90. package/src/auth-registry/artifact.ts +0 -6
  91. package/src/class-registerer/artifact.ts +0 -8
  92. package/src/fee-juice/artifact.ts +0 -6
  93. package/src/instance-deployer/artifact.ts +0 -8
  94. package/src/multi-call-entrypoint/artifact.ts +0 -6
  95. package/src/router/artifact.ts +0 -6
@@ -0,0 +1,51 @@
1
+ // GENERATED FILE - DO NOT EDIT. RUN `yarn generate` or `yarn generate:data`
2
+ import { AztecAddress, Fr } from '@aztec/circuits.js';
3
+ import { loadContractArtifact } from '@aztec/types/abi';
4
+ import AuthRegistryJson from '../artifacts/AuthRegistry.json' assert { type: 'json' };
5
+ import ContractClassRegistererJson from '../artifacts/ContractClassRegisterer.json' assert { type: 'json' };
6
+ import ContractInstanceDeployerJson from '../artifacts/ContractInstanceDeployer.json' assert { type: 'json' };
7
+ import FeeJuiceJson from '../artifacts/FeeJuice.json' assert { type: 'json' };
8
+ import MultiCallEntrypointJson from '../artifacts/MultiCallEntrypoint.json' assert { type: 'json' };
9
+ import RouterJson from '../artifacts/Router.json' assert { type: 'json' };
10
+ export const protocolContractNames = [
11
+ 'AuthRegistry',
12
+ 'ContractInstanceDeployer',
13
+ 'ContractClassRegisterer',
14
+ 'MultiCallEntrypoint',
15
+ 'FeeJuice',
16
+ 'Router',
17
+ ];
18
+ export const ProtocolContractArtifact = {
19
+ AuthRegistry: loadContractArtifact(AuthRegistryJson),
20
+ ContractInstanceDeployer: loadContractArtifact(ContractInstanceDeployerJson),
21
+ ContractClassRegisterer: loadContractArtifact(ContractClassRegistererJson),
22
+ MultiCallEntrypoint: loadContractArtifact(MultiCallEntrypointJson),
23
+ FeeJuice: loadContractArtifact(FeeJuiceJson),
24
+ Router: loadContractArtifact(RouterJson),
25
+ };
26
+ export const ProtocolContractSalt = {
27
+ AuthRegistry: new Fr(1),
28
+ ContractInstanceDeployer: new Fr(1),
29
+ ContractClassRegisterer: new Fr(1),
30
+ MultiCallEntrypoint: new Fr(1),
31
+ FeeJuice: new Fr(1),
32
+ Router: new Fr(1),
33
+ };
34
+ export const ProtocolContractAddress = {
35
+ AuthRegistry: AztecAddress.fromBigInt(1n),
36
+ ContractInstanceDeployer: AztecAddress.fromBigInt(2n),
37
+ ContractClassRegisterer: AztecAddress.fromBigInt(3n),
38
+ MultiCallEntrypoint: AztecAddress.fromBigInt(4n),
39
+ FeeJuice: AztecAddress.fromBigInt(5n),
40
+ Router: AztecAddress.fromBigInt(6n),
41
+ };
42
+ export const ProtocolContractLeaf = {
43
+ AuthRegistry: Fr.fromString('0x2ace300b02ca5ab0a25052b1e852913a47292096997ca09f758c0e3624e84560'),
44
+ ContractInstanceDeployer: Fr.fromString('0x21e432f60f69ac5eb7582c26c03c6c7e4a3eb577720774bc8e1521561ca752a1'),
45
+ ContractClassRegisterer: Fr.fromString('0x1b6d5873cef5a35f681ab9468527f356c96e09b3c64603aef404ec2ad80aa3a9'),
46
+ MultiCallEntrypoint: Fr.fromString('0x0966ead8d11933bb3c72547bb997898971715f2275acd4c7d5d86fdf614ba1a2'),
47
+ FeeJuice: Fr.fromString('0x24388f7ef1b9c9e661721f3331a989a2f10cba300539471e4401c38629b27816'),
48
+ Router: Fr.fromString('0x1d8f25db3e8faa6a96cb1ecf57876a2ee04581deb3c4f181488ccd817abcbdb0'),
49
+ };
50
+ export const protocolContractTreeRoot = Fr.fromString('0x0ce9f44ae6605f375e5f5267ceb769861703ce8e4235f16f7afc137ec34dcf06');
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2xfY29udHJhY3RfZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm90b2NvbF9jb250cmFjdF9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRFQUE0RTtBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXRELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR3hELE9BQU8sZ0JBQWdCLE1BQU0sZ0NBQWdDLENBQUMsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDdEYsT0FBTywyQkFBMkIsTUFBTSwyQ0FBMkMsQ0FBQyxTQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUM1RyxPQUFPLDRCQUE0QixNQUFNLDRDQUE0QyxDQUFDLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzlHLE9BQU8sWUFBWSxNQUFNLDRCQUE0QixDQUFDLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzlFLE9BQU8sdUJBQXVCLE1BQU0sdUNBQXVDLENBQUMsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDcEcsT0FBTyxVQUFVLE1BQU0sMEJBQTBCLENBQUMsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFFMUUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7SUFDbkMsY0FBYztJQUNkLDBCQUEwQjtJQUMxQix5QkFBeUI7SUFDekIscUJBQXFCO0lBQ3JCLFVBQVU7SUFDVixRQUFRO0NBQ0EsQ0FBQztBQUlYLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFtRDtJQUN0RixZQUFZLEVBQUUsb0JBQW9CLENBQUMsZ0JBQXdDLENBQUM7SUFDNUUsd0JBQXdCLEVBQUUsb0JBQW9CLENBQUMsNEJBQW9ELENBQUM7SUFDcEcsdUJBQXVCLEVBQUUsb0JBQW9CLENBQUMsMkJBQW1ELENBQUM7SUFDbEcsbUJBQW1CLEVBQUUsb0JBQW9CLENBQUMsdUJBQStDLENBQUM7SUFDMUYsUUFBUSxFQUFFLG9CQUFvQixDQUFDLFlBQW9DLENBQUM7SUFDcEUsTUFBTSxFQUFFLG9CQUFvQixDQUFDLFVBQWtDLENBQUM7Q0FDakUsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFxQztJQUNwRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLHdCQUF3QixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuQyx1QkFBdUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEMsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlCLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkIsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNsQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQStDO0lBQ2pGLFlBQVksRUFBRSxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztJQUN6Qyx3QkFBd0IsRUFBRSxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztJQUNyRCx1QkFBdUIsRUFBRSxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztJQUNwRCxtQkFBbUIsRUFBRSxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztJQUNoRCxRQUFRLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7SUFDckMsTUFBTSxFQUFFLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO0NBQ3BDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRztJQUNsQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxvRUFBb0UsQ0FBQztJQUNqRyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLG9FQUFvRSxDQUFDO0lBQzdHLHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsb0VBQW9FLENBQUM7SUFDNUcsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxvRUFBb0UsQ0FBQztJQUN4RyxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxvRUFBb0UsQ0FBQztJQUM3RixNQUFNLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxvRUFBb0UsQ0FBQztDQUM1RixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FDbkQsb0VBQW9FLENBQ3JFLENBQUMifQ==
@@ -0,0 +1,3 @@
1
+ import { type AztecAddress, Fr } from '@aztec/circuits.js';
2
+ export declare function getProtocolContractSiblingPath(address: AztecAddress): [Fr, Fr, Fr];
3
+ //# sourceMappingURL=protocol_contract_tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol_contract_tree.d.ts","sourceRoot":"","sources":["../src/protocol_contract_tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,EAAE,EAAkD,MAAM,oBAAoB,CAAC;AAmB3G,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,YAAY,gBAOnE"}
@@ -0,0 +1,21 @@
1
+ import { Fr, PROTOCOL_CONTRACT_TREE_HEIGHT } from '@aztec/circuits.js';
2
+ import { assertLength } from '@aztec/foundation/serialize';
3
+ import { buildProtocolContractTree } from './build_protocol_contract_tree.js';
4
+ import { ProtocolContractAddress, ProtocolContractLeaf, protocolContractNames } from './protocol_contract_data.js';
5
+ let protocolContractTree;
6
+ function getTree() {
7
+ if (!protocolContractTree) {
8
+ const leaves = protocolContractNames.map(name => ({
9
+ address: ProtocolContractAddress[name],
10
+ leaf: ProtocolContractLeaf[name],
11
+ }));
12
+ protocolContractTree = buildProtocolContractTree(leaves);
13
+ }
14
+ return protocolContractTree;
15
+ }
16
+ export function getProtocolContractSiblingPath(address) {
17
+ const tree = getTree();
18
+ const index = address.toNumber();
19
+ return assertLength(tree.getSiblingPath(index).map(buf => new Fr(buf)), PROTOCOL_CONTRACT_TREE_HEIGHT);
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2xfY29udHJhY3RfdHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm90b2NvbF9jb250cmFjdF90cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsRUFBRSxFQUFtQiw2QkFBNkIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUzRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVuSCxJQUFJLG9CQUE0QyxDQUFDO0FBRWpELFNBQVMsT0FBTztJQUNkLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEQsT0FBTyxFQUFFLHVCQUF1QixDQUFDLElBQUksQ0FBQztZQUN0QyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDO1NBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0osb0JBQW9CLEdBQUcseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNELE9BQU8sb0JBQW9CLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxPQUFxQjtJQUNsRSxNQUFNLElBQUksR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUN2QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsT0FBTyxZQUFZLENBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbEQsNkJBQTZCLENBQzlCLENBQUM7QUFDSixDQUFDIn0=
@@ -1,7 +1,4 @@
1
- import { AztecAddress } from '@aztec/circuits.js';
2
1
  import { type ProtocolContract } from '../protocol_contract.js';
3
2
  /** Returns the canonical deployment of the router. */
4
3
  export declare function getCanonicalRouter(): ProtocolContract;
5
- export declare function getCanonicalRouterAddress(): AztecAddress;
6
- export declare const RouterAddress: AztecAddress;
7
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkB,MAAM,oBAAoB,CAAC;AAElE,OAAO,EAAE,KAAK,gBAAgB,EAAgC,MAAM,yBAAyB,CAAC;AAG9F,sDAAsD;AACtD,wBAAgB,kBAAkB,IAAI,gBAAgB,CASrD;AAED,wBAAgB,yBAAyB,IAAI,YAAY,CAExD;AAED,eAAO,MAAM,aAAa,cAA0C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAgC,MAAM,yBAAyB,CAAC;AAE9F,sDAAsD;AACtD,wBAAgB,kBAAkB,IAAI,gBAAgB,CAErD"}
@@ -1,16 +1,6 @@
1
- import { AztecAddress, ROUTER_ADDRESS } from '@aztec/circuits.js';
2
1
  import { getCanonicalProtocolContract } from '../protocol_contract.js';
3
- import { RouterArtifact } from './artifact.js';
4
2
  /** Returns the canonical deployment of the router. */
5
3
  export function getCanonicalRouter() {
6
- const contract = getCanonicalProtocolContract(RouterArtifact, 1);
7
- if (!contract.address.equals(RouterAddress)) {
8
- throw new Error(`Incorrect address for router (got ${contract.address.toString()} but expected ${RouterAddress.toString()}). Check ROUTER_ADDRESS is set to the correct value in the constants files and run the protocol-contracts package tests.`);
9
- }
10
- return contract;
4
+ return getCanonicalProtocolContract('Router');
11
5
  }
12
- export function getCanonicalRouterAddress() {
13
- return getCanonicalRouter().address;
14
- }
15
- export const RouterAddress = AztecAddress.fromBigInt(ROUTER_ADDRESS);
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEUsT0FBTyxFQUF5Qiw0QkFBNEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0Msc0RBQXNEO0FBQ3RELE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsTUFBTSxRQUFRLEdBQUcsNEJBQTRCLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRWpFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxLQUFLLENBQ2IscUNBQXFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLGlCQUFpQixhQUFhLENBQUMsUUFBUSxFQUFFLDBIQUEwSCxDQUNwTyxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCO0lBQ3ZDLE9BQU8sa0JBQWtCLEVBQUUsQ0FBQyxPQUFPLENBQUM7QUFDdEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDIn0=
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBeUIsNEJBQTRCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RixzREFBc0Q7QUFDdEQsTUFBTSxVQUFVLGtCQUFrQjtJQUNoQyxPQUFPLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2hELENBQUMifQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generate_data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate_data.d.ts","sourceRoot":"","sources":["../../src/scripts/generate_data.ts"],"names":[],"mappings":""}
@@ -0,0 +1,172 @@
1
+ import { CANONICAL_AUTH_REGISTRY_ADDRESS, DEPLOYER_CONTRACT_ADDRESS, FEE_JUICE_ADDRESS, Fr, MULTI_CALL_ENTRYPOINT_ADDRESS, REGISTERER_CONTRACT_ADDRESS, ROUTER_ADDRESS, getContractInstanceFromDeployParams, } from '@aztec/circuits.js';
2
+ import { createConsoleLogger } from '@aztec/foundation/log';
3
+ import { loadContractArtifact } from '@aztec/types/abi';
4
+ import fs from 'fs/promises';
5
+ import path from 'path';
6
+ import { buildProtocolContractTree } from '../build_protocol_contract_tree.js';
7
+ const log = createConsoleLogger('aztec:autogenerate');
8
+ const noirContractsRoot = '../../noir-projects/noir-contracts';
9
+ const srcPath = path.join(noirContractsRoot, './target');
10
+ const destArtifactsDir = './artifacts';
11
+ const outputFilePath = './src/protocol_contract_data.ts';
12
+ const salt = new Fr(1);
13
+ const contractAddressMapping = {
14
+ AuthRegistry: CANONICAL_AUTH_REGISTRY_ADDRESS,
15
+ ContractInstanceDeployer: DEPLOYER_CONTRACT_ADDRESS,
16
+ ContractClassRegisterer: REGISTERER_CONTRACT_ADDRESS,
17
+ MultiCallEntrypoint: MULTI_CALL_ENTRYPOINT_ADDRESS,
18
+ FeeJuice: FEE_JUICE_ADDRESS,
19
+ Router: ROUTER_ADDRESS,
20
+ };
21
+ async function clearDestDir() {
22
+ try {
23
+ await fs.access(destArtifactsDir);
24
+ // If the directory exists, remove it recursively.
25
+ await fs.rm(destArtifactsDir, { recursive: true, force: true });
26
+ }
27
+ catch (err) {
28
+ if (err.code === 'ENOENT') {
29
+ // If the directory does not exist, do nothing.
30
+ }
31
+ else {
32
+ log(`Error removing dest directory: ${err}`);
33
+ }
34
+ }
35
+ await fs.mkdir(destArtifactsDir, { recursive: true });
36
+ }
37
+ function getPrivateFunctionNames(artifact) {
38
+ return artifact.functions.filter(fn => fn.custom_attributes.includes('private')).map(fn => fn.name);
39
+ }
40
+ async function copyArtifact(srcName, destName) {
41
+ const src = path.join(srcPath, `${srcName}.json`);
42
+ const artifact = JSON.parse(await fs.readFile(src, 'utf8'));
43
+ const dest = path.join(destArtifactsDir, `${destName}.json`);
44
+ await fs.copyFile(src, dest);
45
+ return artifact;
46
+ }
47
+ async function copyVks(srcName, destName, fnNames) {
48
+ const deskVksDir = path.join(destArtifactsDir, 'keys', destName);
49
+ await fs.mkdir(deskVksDir, { recursive: true });
50
+ for (const fnName of fnNames) {
51
+ const src = path.join(srcPath, 'keys', `${srcName}-${fnName}.vk.data.json`);
52
+ const dest = path.join(deskVksDir, `${fnName}.vk.data.json`);
53
+ await fs.copyFile(src, dest);
54
+ }
55
+ }
56
+ function computeContractLeaf(artifact) {
57
+ const instance = getContractInstanceFromDeployParams(loadContractArtifact(artifact), { salt });
58
+ return instance.address;
59
+ }
60
+ function computeRoot(names, leaves) {
61
+ const data = names.map((name, i) => ({ address: new Fr(contractAddressMapping[name]), leaf: leaves[i] }));
62
+ const tree = buildProtocolContractTree(data);
63
+ return Fr.fromBuffer(tree.root);
64
+ }
65
+ async function generateDeclarationFile(destName) {
66
+ const content = `
67
+ import { type NoirCompiledContract } from '@aztec/types/noir';
68
+ const circuit: NoirCompiledContract;
69
+ export = circuit;
70
+ `;
71
+ await fs.writeFile(path.join(destArtifactsDir, `${destName}.d.json.ts`), content);
72
+ }
73
+ function generateNames(names) {
74
+ return `
75
+ export const protocolContractNames = [
76
+ ${names.map(name => `'${name}'`).join(',\n')}
77
+ ] as const;
78
+
79
+ export type ProtocolContractName = typeof protocolContractNames[number];
80
+ `;
81
+ }
82
+ function generateArtifacts(names) {
83
+ const imports = names
84
+ .map(name => {
85
+ return `
86
+ import ${name}Json from '../artifacts/${name}.json' assert { type: 'json' };
87
+ `;
88
+ })
89
+ .join('\n');
90
+ const exports = names.map(name => `${name}: loadContractArtifact(${name}Json as NoirCompiledContract)`).join(',\n');
91
+ return `
92
+ ${imports}
93
+
94
+ export const ProtocolContractArtifact: Record<ProtocolContractName, ContractArtifact> = {
95
+ ${exports}
96
+ };
97
+ `;
98
+ }
99
+ function generateSalts(names) {
100
+ return `
101
+ export const ProtocolContractSalt: Record<ProtocolContractName, Fr> = {
102
+ ${names.map(name => `${name}: new Fr(${salt.toNumber()})`).join(',\n')}
103
+ };
104
+ `;
105
+ }
106
+ function generateContractAddresses(names) {
107
+ const addresses = names.map(name => `${name}: AztecAddress.fromBigInt(${contractAddressMapping[name]}n)`).join(',\n');
108
+ return `
109
+ export const ProtocolContractAddress: Record<ProtocolContractName, AztecAddress> = {
110
+ ${addresses}
111
+ };
112
+ `;
113
+ }
114
+ function generateContractLeaves(names, leaves) {
115
+ return `
116
+ export const ProtocolContractLeaf = {
117
+ ${leaves.map((leaf, i) => `${names[i]}: Fr.fromString('${leaf.toString()}')`).join(',\n')}
118
+ };
119
+ `;
120
+ }
121
+ function generateRoot(names, leaves) {
122
+ const root = computeRoot(names, leaves);
123
+ return `
124
+ export const protocolContractTreeRoot = Fr.fromString('${root.toString()}');
125
+ `;
126
+ }
127
+ async function generateOutputFile(names, leaves) {
128
+ const content = `
129
+ // GENERATED FILE - DO NOT EDIT. RUN \`yarn generate\` or \`yarn generate:data\`
130
+ import { AztecAddress, Fr } from '@aztec/circuits.js';
131
+ import { type ContractArtifact } from '@aztec/foundation/abi';
132
+ import { loadContractArtifact } from '@aztec/types/abi';
133
+ import { type NoirCompiledContract } from '@aztec/types/noir';
134
+
135
+ ${generateNames(names)}
136
+
137
+ ${generateArtifacts(names)}
138
+
139
+ ${generateSalts(names)}
140
+
141
+ ${generateContractAddresses(names)}
142
+
143
+ ${generateContractLeaves(names, leaves)}
144
+
145
+ ${generateRoot(names, leaves)}
146
+ `;
147
+ await fs.writeFile(outputFilePath, content);
148
+ }
149
+ async function main() {
150
+ await clearDestDir();
151
+ const srcNames = JSON.parse(await fs.readFile(path.join(noirContractsRoot, 'protocol_contracts.json'), 'utf8'));
152
+ const leaves = [];
153
+ const destNames = srcNames.map(n => n.split('-')[1]);
154
+ for (let i = 0; i < srcNames.length; i++) {
155
+ const srcName = srcNames[i];
156
+ const destName = destNames[i];
157
+ const artifact = await copyArtifact(srcName, destName);
158
+ const fnNames = getPrivateFunctionNames(artifact);
159
+ await copyVks(srcName, destName, fnNames);
160
+ await generateDeclarationFile(destName);
161
+ leaves.push(computeContractLeaf(artifact));
162
+ }
163
+ await generateOutputFile(destNames, leaves);
164
+ }
165
+ try {
166
+ await main();
167
+ }
168
+ catch (err) {
169
+ log(`Error copying protocol contract artifacts: ${err}`);
170
+ process.exit(1);
171
+ }
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVfZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL2dlbmVyYXRlX2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLCtCQUErQixFQUMvQix5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLEVBQUUsRUFDRiw2QkFBNkIsRUFDN0IsMkJBQTJCLEVBQzNCLGNBQWMsRUFDZCxtQ0FBbUMsR0FDcEMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUd4RCxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0IsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRS9FLE1BQU0sR0FBRyxHQUFHLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFFdEQsTUFBTSxpQkFBaUIsR0FBRyxvQ0FBb0MsQ0FBQztBQUMvRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO0FBQ3ZDLE1BQU0sY0FBYyxHQUFHLGlDQUFpQyxDQUFDO0FBRXpELE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXZCLE1BQU0sc0JBQXNCLEdBQStCO0lBQ3pELFlBQVksRUFBRSwrQkFBK0I7SUFDN0Msd0JBQXdCLEVBQUUseUJBQXlCO0lBQ25ELHVCQUF1QixFQUFFLDJCQUEyQjtJQUNwRCxtQkFBbUIsRUFBRSw2QkFBNkI7SUFDbEQsUUFBUSxFQUFFLGlCQUFpQjtJQUMzQixNQUFNLEVBQUUsY0FBYztDQUN2QixDQUFD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
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": "0.57.0",
5
+ "version": "0.58.0",
6
6
  "type": "module",
7
7
  "exports": {
8
8
  ".": "./dest/index.js",
@@ -19,8 +19,8 @@
19
19
  },
20
20
  "scripts": {
21
21
  "build": "yarn clean && yarn generate && tsc -b",
22
- "generate": "yarn generate:noir-contracts",
23
- "generate:noir-contracts": "./scripts/copy-contracts.sh",
22
+ "generate": "yarn generate:data",
23
+ "generate:data": "node --no-warnings --loader ts-node/esm src/scripts/generate_data.ts && run -T prettier -w src/protocol_contract_data.ts",
24
24
  "build:dev": "tsc -b --watch",
25
25
  "build:ts": "tsc -b",
26
26
  "clean": "rm -rf ./dest .tsbuildinfo ./artifacts",
@@ -67,9 +67,9 @@
67
67
  ]
68
68
  },
69
69
  "dependencies": {
70
- "@aztec/circuits.js": "0.57.0",
71
- "@aztec/foundation": "0.57.0",
72
- "@aztec/types": "0.57.0",
70
+ "@aztec/circuits.js": "0.58.0",
71
+ "@aztec/foundation": "0.58.0",
72
+ "@aztec/types": "0.58.0",
73
73
  "lodash.omit": "^4.5.0",
74
74
  "tslib": "^2.4.0"
75
75
  },
@@ -1,22 +1,6 @@
1
- import { AztecAddress, CANONICAL_AUTH_REGISTRY_ADDRESS } from '@aztec/circuits.js';
2
-
3
1
  import { type ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js';
4
- import { AuthRegistryArtifact } from './artifact.js';
5
2
 
6
3
  /** Returns the canonical deployment of the auth registry. */
7
4
  export function getCanonicalAuthRegistry(): ProtocolContract {
8
- const contract = getCanonicalProtocolContract(AuthRegistryArtifact, 1);
9
-
10
- if (!contract.address.equals(AuthRegistryAddress)) {
11
- throw new Error(
12
- `Incorrect address for auth registry (got ${contract.address.toString()} but expected ${AuthRegistryAddress.toString()}). Check CANONICAL_AUTH_REGISTRY_ADDRESS is set to the correct value in the constants files and run the protocol-contracts package tests.`,
13
- );
14
- }
15
- return contract;
5
+ return getCanonicalProtocolContract('AuthRegistry');
16
6
  }
17
-
18
- export function getCanonicalAuthRegistryAddress(): AztecAddress {
19
- return getCanonicalAuthRegistry().address;
20
- }
21
-
22
- export const AuthRegistryAddress = AztecAddress.fromBigInt(CANONICAL_AUTH_REGISTRY_ADDRESS);
@@ -0,0 +1,23 @@
1
+ import {
2
+ type AztecAddress,
3
+ type Fr,
4
+ type MerkleTree,
5
+ MerkleTreeCalculator,
6
+ PROTOCOL_CONTRACT_TREE_HEIGHT,
7
+ } from '@aztec/circuits.js';
8
+ import { poseidon2Hash } from '@aztec/foundation/crypto';
9
+
10
+ export function buildProtocolContractTree(contracts: { address: AztecAddress; leaf: Fr }[]): MerkleTree {
11
+ const calculator = new MerkleTreeCalculator(PROTOCOL_CONTRACT_TREE_HEIGHT, Buffer.alloc(32), (a, b) =>
12
+ poseidon2Hash([a, b]).toBuffer(),
13
+ );
14
+
15
+ const leaves = new Array(2 ** PROTOCOL_CONTRACT_TREE_HEIGHT).fill(Buffer.alloc(32));
16
+
17
+ for (const contract of contracts) {
18
+ const index = contract.address.toNumber();
19
+ leaves[index] = contract.leaf;
20
+ }
21
+
22
+ return calculator.computeTree(leaves);
23
+ }
@@ -1,17 +1,6 @@
1
- import { AztecAddress, REGISTERER_CONTRACT_ADDRESS } from '@aztec/circuits.js';
2
-
3
1
  import { type ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js';
4
- import { ContractClassRegistererArtifact } from './artifact.js';
5
2
 
6
3
  /** Returns the canonical deployment of the class registerer contract. */
7
4
  export function getCanonicalClassRegisterer(): ProtocolContract {
8
- const contract = getCanonicalProtocolContract(ContractClassRegistererArtifact, 1);
9
- if (!contract.address.equals(ClassRegistererAddress)) {
10
- throw new Error(
11
- `Incorrect address for class registerer (got ${contract.address.toString()} but expected ${ClassRegistererAddress.toString()}).`,
12
- );
13
- }
14
- return contract;
5
+ return getCanonicalProtocolContract('ContractClassRegisterer');
15
6
  }
16
-
17
- export const ClassRegistererAddress = AztecAddress.fromBigInt(REGISTERER_CONTRACT_ADDRESS);
@@ -1,19 +1,6 @@
1
- import { AztecAddress, FEE_JUICE_ADDRESS } from '@aztec/circuits.js';
2
-
3
1
  import { type ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js';
4
- import { FeeJuiceArtifact } from './artifact.js';
5
2
 
6
3
  /** Returns the canonical deployment of the Fee Juice. */
7
4
  export function getCanonicalFeeJuice(): ProtocolContract {
8
- const contract = getCanonicalProtocolContract(FeeJuiceArtifact, 1);
9
- if (!contract.address.equals(FeeJuiceAddress)) {
10
- throw new Error(
11
- `Incorrect address for Fee Juice (got ${contract.address.toString()} but expected ${FeeJuiceAddress.toString()}).`,
12
- );
13
- }
14
- return contract;
5
+ return getCanonicalProtocolContract('FeeJuice');
15
6
  }
16
-
17
- export const FeeJuiceAddress = AztecAddress.fromBigInt(FEE_JUICE_ADDRESS);
18
-
19
- export { FeeJuiceArtifact as FeeJuiceArtifact };
package/src/index.ts CHANGED
@@ -1 +1,3 @@
1
- export { ProtocolContract } from './protocol_contract.js';
1
+ export * from './protocol_contract.js';
2
+ export * from './protocol_contract_data.js';
3
+ export * from './protocol_contract_tree.js';
@@ -1,17 +1,6 @@
1
- import { AztecAddress, DEPLOYER_CONTRACT_ADDRESS } from '@aztec/circuits.js';
2
-
3
1
  import { type ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js';
4
- import { ContractInstanceDeployerArtifact } from './artifact.js';
5
2
 
6
3
  /** Returns the canonical deployment of the instance deployer contract. */
7
4
  export function getCanonicalInstanceDeployer(): ProtocolContract {
8
- const contract = getCanonicalProtocolContract(ContractInstanceDeployerArtifact, 1);
9
- if (!contract.address.equals(InstanceDeployerAddress)) {
10
- throw new Error(
11
- `Incorrect address for contract deployer (got ${contract.address.toString()} but expected ${InstanceDeployerAddress.toString()}).`,
12
- );
13
- }
14
- return contract;
5
+ return getCanonicalProtocolContract('ContractInstanceDeployer');
15
6
  }
16
-
17
- export const InstanceDeployerAddress = AztecAddress.fromBigInt(DEPLOYER_CONTRACT_ADDRESS);
@@ -1,12 +1,5 @@
1
- import { type AztecAddress } from '@aztec/circuits.js';
2
-
3
1
  import { type ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js';
4
- import { MultiCallEntrypointArtifact } from './artifact.js';
5
2
 
6
3
  export function getCanonicalMultiCallEntrypointContract(): ProtocolContract {
7
- return getCanonicalProtocolContract(MultiCallEntrypointArtifact, 1, []);
8
- }
9
-
10
- export function getCanonicalMultiCallEntrypointAddress(): AztecAddress {
11
- return getCanonicalMultiCallEntrypointContract().address;
4
+ return getCanonicalProtocolContract('MultiCallEntrypoint');
12
5
  }
@@ -1,12 +1,19 @@
1
1
  import {
2
2
  type AztecAddress,
3
3
  type ContractClassIdPreimage,
4
+ type ContractClassWithId,
5
+ type ContractInstanceWithAddress,
4
6
  getContractClassFromArtifact,
5
7
  getContractInstanceFromDeployParams,
6
8
  } from '@aztec/circuits.js';
7
9
  import { type ContractArtifact } from '@aztec/foundation/abi';
8
- import { Fr } from '@aztec/foundation/fields';
9
- import { type ContractClassWithId, type ContractInstanceWithAddress } from '@aztec/types/contracts';
10
+
11
+ import {
12
+ ProtocolContractAddress,
13
+ ProtocolContractArtifact,
14
+ type ProtocolContractName,
15
+ ProtocolContractSalt,
16
+ } from './protocol_contract_data.js';
10
17
 
11
18
  /** Represents a canonical contract in the protocol. */
12
19
  export interface ProtocolContract {
@@ -21,21 +28,21 @@ export interface ProtocolContract {
21
28
  }
22
29
 
23
30
  /** Returns the canonical deployment a given artifact. */
24
- export function getCanonicalProtocolContract(
25
- artifact: ContractArtifact,
26
- salt: Fr | number | bigint,
27
- constructorArgs: any[] = [],
28
- ): ProtocolContract {
31
+ export function getCanonicalProtocolContract(name: ProtocolContractName): ProtocolContract {
32
+ const artifact = ProtocolContractArtifact[name];
33
+ const address = ProtocolContractAddress[name];
34
+ const salt = ProtocolContractSalt[name];
29
35
  // TODO(@spalladino): This computes the contract class from the artifact twice.
30
36
  const contractClass = getContractClassFromArtifact(artifact);
31
- const instance = getContractInstanceFromDeployParams(artifact, {
32
- constructorArgs,
33
- salt: new Fr(salt),
34
- });
37
+ const instance = getContractInstanceFromDeployParams(artifact, { salt });
35
38
  return {
36
- instance,
39
+ instance: { ...instance, address },
37
40
  contractClass,
38
41
  artifact,
39
- address: instance.address,
42
+ address,
40
43
  };
41
44
  }
45
+
46
+ export function isProtocolContract(address: AztecAddress) {
47
+ return Object.values(ProtocolContractAddress).some(a => a.equals(address));
48
+ }
@@ -0,0 +1,63 @@
1
+ // GENERATED FILE - DO NOT EDIT. RUN `yarn generate` or `yarn generate:data`
2
+ import { AztecAddress, Fr } from '@aztec/circuits.js';
3
+ import { type ContractArtifact } from '@aztec/foundation/abi';
4
+ import { loadContractArtifact } from '@aztec/types/abi';
5
+ import { type NoirCompiledContract } from '@aztec/types/noir';
6
+
7
+ import AuthRegistryJson from '../artifacts/AuthRegistry.json' assert { type: 'json' };
8
+ import ContractClassRegistererJson from '../artifacts/ContractClassRegisterer.json' assert { type: 'json' };
9
+ import ContractInstanceDeployerJson from '../artifacts/ContractInstanceDeployer.json' assert { type: 'json' };
10
+ import FeeJuiceJson from '../artifacts/FeeJuice.json' assert { type: 'json' };
11
+ import MultiCallEntrypointJson from '../artifacts/MultiCallEntrypoint.json' assert { type: 'json' };
12
+ import RouterJson from '../artifacts/Router.json' assert { type: 'json' };
13
+
14
+ export const protocolContractNames = [
15
+ 'AuthRegistry',
16
+ 'ContractInstanceDeployer',
17
+ 'ContractClassRegisterer',
18
+ 'MultiCallEntrypoint',
19
+ 'FeeJuice',
20
+ 'Router',
21
+ ] as const;
22
+
23
+ export type ProtocolContractName = (typeof protocolContractNames)[number];
24
+
25
+ export const ProtocolContractArtifact: Record<ProtocolContractName, ContractArtifact> = {
26
+ AuthRegistry: loadContractArtifact(AuthRegistryJson as NoirCompiledContract),
27
+ ContractInstanceDeployer: loadContractArtifact(ContractInstanceDeployerJson as NoirCompiledContract),
28
+ ContractClassRegisterer: loadContractArtifact(ContractClassRegistererJson as NoirCompiledContract),
29
+ MultiCallEntrypoint: loadContractArtifact(MultiCallEntrypointJson as NoirCompiledContract),
30
+ FeeJuice: loadContractArtifact(FeeJuiceJson as NoirCompiledContract),
31
+ Router: loadContractArtifact(RouterJson as NoirCompiledContract),
32
+ };
33
+
34
+ export const ProtocolContractSalt: Record<ProtocolContractName, Fr> = {
35
+ AuthRegistry: new Fr(1),
36
+ ContractInstanceDeployer: new Fr(1),
37
+ ContractClassRegisterer: new Fr(1),
38
+ MultiCallEntrypoint: new Fr(1),
39
+ FeeJuice: new Fr(1),
40
+ Router: new Fr(1),
41
+ };
42
+
43
+ export const ProtocolContractAddress: Record<ProtocolContractName, AztecAddress> = {
44
+ AuthRegistry: AztecAddress.fromBigInt(1n),
45
+ ContractInstanceDeployer: AztecAddress.fromBigInt(2n),
46
+ ContractClassRegisterer: AztecAddress.fromBigInt(3n),
47
+ MultiCallEntrypoint: AztecAddress.fromBigInt(4n),
48
+ FeeJuice: AztecAddress.fromBigInt(5n),
49
+ Router: AztecAddress.fromBigInt(6n),
50
+ };
51
+
52
+ export const ProtocolContractLeaf = {
53
+ AuthRegistry: Fr.fromString('0x2ace300b02ca5ab0a25052b1e852913a47292096997ca09f758c0e3624e84560'),
54
+ ContractInstanceDeployer: Fr.fromString('0x21e432f60f69ac5eb7582c26c03c6c7e4a3eb577720774bc8e1521561ca752a1'),
55
+ ContractClassRegisterer: Fr.fromString('0x1b6d5873cef5a35f681ab9468527f356c96e09b3c64603aef404ec2ad80aa3a9'),
56
+ MultiCallEntrypoint: Fr.fromString('0x0966ead8d11933bb3c72547bb997898971715f2275acd4c7d5d86fdf614ba1a2'),
57
+ FeeJuice: Fr.fromString('0x24388f7ef1b9c9e661721f3331a989a2f10cba300539471e4401c38629b27816'),
58
+ Router: Fr.fromString('0x1d8f25db3e8faa6a96cb1ecf57876a2ee04581deb3c4f181488ccd817abcbdb0'),
59
+ };
60
+
61
+ export const protocolContractTreeRoot = Fr.fromString(
62
+ '0x0ce9f44ae6605f375e5f5267ceb769861703ce8e4235f16f7afc137ec34dcf06',
63
+ );
@@ -0,0 +1,27 @@
1
+ import { type AztecAddress, Fr, type MerkleTree, PROTOCOL_CONTRACT_TREE_HEIGHT } from '@aztec/circuits.js';
2
+ import { assertLength } from '@aztec/foundation/serialize';
3
+
4
+ import { buildProtocolContractTree } from './build_protocol_contract_tree.js';
5
+ import { ProtocolContractAddress, ProtocolContractLeaf, protocolContractNames } from './protocol_contract_data.js';
6
+
7
+ let protocolContractTree: MerkleTree | undefined;
8
+
9
+ function getTree() {
10
+ if (!protocolContractTree) {
11
+ const leaves = protocolContractNames.map(name => ({
12
+ address: ProtocolContractAddress[name],
13
+ leaf: ProtocolContractLeaf[name],
14
+ }));
15
+ protocolContractTree = buildProtocolContractTree(leaves);
16
+ }
17
+ return protocolContractTree;
18
+ }
19
+
20
+ export function getProtocolContractSiblingPath(address: AztecAddress) {
21
+ const tree = getTree();
22
+ const index = address.toNumber();
23
+ return assertLength<Fr, typeof PROTOCOL_CONTRACT_TREE_HEIGHT>(
24
+ tree.getSiblingPath(index).map(buf => new Fr(buf)),
25
+ PROTOCOL_CONTRACT_TREE_HEIGHT,
26
+ );
27
+ }