@aztec/protocol-contracts 0.67.1 → 0.68.1

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 (55) hide show
  1. package/artifacts/AuthRegistry.json +449 -408
  2. package/artifacts/ContractClassRegisterer.json +342 -219
  3. package/artifacts/ContractInstanceDeployer.json +174 -133
  4. package/artifacts/FeeJuice.json +566 -484
  5. package/artifacts/MultiCallEntrypoint.json +106 -65
  6. package/artifacts/Router.json +464 -382
  7. package/dest/auth-registry/index.d.ts +1 -0
  8. package/dest/auth-registry/index.d.ts.map +1 -1
  9. package/dest/auth-registry/index.js +10 -3
  10. package/dest/bundle/index.d.ts +7 -0
  11. package/dest/bundle/index.d.ts.map +1 -0
  12. package/dest/bundle/index.js +32 -0
  13. package/dest/class-registerer/index.d.ts +2 -1
  14. package/dest/class-registerer/index.d.ts.map +1 -1
  15. package/dest/class-registerer/index.js +12 -4
  16. package/dest/fee-juice/index.d.ts +2 -1
  17. package/dest/fee-juice/index.d.ts.map +1 -1
  18. package/dest/fee-juice/index.js +11 -4
  19. package/dest/index.d.ts +0 -5
  20. package/dest/index.d.ts.map +1 -1
  21. package/dest/index.js +1 -6
  22. package/dest/instance-deployer/index.d.ts +2 -1
  23. package/dest/instance-deployer/index.d.ts.map +1 -1
  24. package/dest/instance-deployer/index.js +11 -4
  25. package/dest/make_protocol_contract.d.ts +9 -0
  26. package/dest/make_protocol_contract.d.ts.map +1 -0
  27. package/dest/make_protocol_contract.js +20 -0
  28. package/dest/multi-call-entrypoint/index.d.ts +3 -1
  29. package/dest/multi-call-entrypoint/index.d.ts.map +1 -1
  30. package/dest/multi-call-entrypoint/index.js +12 -4
  31. package/dest/protocol_contract.d.ts +0 -3
  32. package/dest/protocol_contract.d.ts.map +1 -1
  33. package/dest/protocol_contract.js +2 -18
  34. package/dest/protocol_contract_data.d.ts +0 -2
  35. package/dest/protocol_contract_data.d.ts.map +1 -1
  36. package/dest/protocol_contract_data.js +8 -23
  37. package/dest/router/index.d.ts +2 -1
  38. package/dest/router/index.d.ts.map +1 -1
  39. package/dest/router/index.js +11 -4
  40. package/package.json +13 -9
  41. package/src/auth-registry/index.ts +14 -2
  42. package/src/bundle/index.ts +36 -0
  43. package/src/class-registerer/index.ts +18 -3
  44. package/src/fee-juice/index.ts +15 -3
  45. package/src/index.ts +0 -5
  46. package/src/instance-deployer/index.ts +17 -3
  47. package/src/make_protocol_contract.ts +23 -0
  48. package/src/multi-call-entrypoint/index.ts +16 -3
  49. package/src/protocol_contract.ts +1 -24
  50. package/src/protocol_contract_data.ts +7 -26
  51. package/src/router/index.ts +15 -3
  52. package/dest/scripts/generate_data.d.ts +0 -2
  53. package/dest/scripts/generate_data.d.ts.map +0 -1
  54. package/dest/scripts/generate_data.js +0 -175
  55. package/src/scripts/generate_data.ts +0 -214
@@ -1,10 +1,25 @@
1
- import { type ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js';
1
+ import { loadContractArtifact } from '@aztec/types/abi';
2
+ import { type NoirCompiledContract } from '@aztec/types/noir';
3
+
4
+ import ContractClassRegistererJson from '../../artifacts/ContractClassRegisterer.json' assert { type: 'json' };
5
+ import { makeProtocolContract } from '../make_protocol_contract.js';
6
+ import { type ProtocolContract } from '../protocol_contract.js';
2
7
 
3
8
  export * from './contract_class_registered_event.js';
4
9
  export * from './private_function_broadcasted_event.js';
5
10
  export * from './unconstrained_function_broadcasted_event.js';
6
11
 
7
- /** Returns the canonical deployment of the class registerer contract. */
12
+ export const ContractClassRegistererArtifact = loadContractArtifact(
13
+ ContractClassRegistererJson as NoirCompiledContract,
14
+ );
15
+
16
+ let protocolContract: ProtocolContract;
17
+
18
+ /** Returns the canonical deployment of the contract. */
8
19
  export function getCanonicalClassRegisterer(): ProtocolContract {
9
- return getCanonicalProtocolContract('ContractClassRegisterer');
20
+ if (!protocolContract) {
21
+ const artifact = ContractClassRegistererArtifact;
22
+ protocolContract = makeProtocolContract('ContractClassRegisterer', artifact);
23
+ }
24
+ return protocolContract;
10
25
  }
@@ -1,6 +1,18 @@
1
- import { type ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js';
1
+ import { loadContractArtifact } from '@aztec/types/abi';
2
+ import { type NoirCompiledContract } from '@aztec/types/noir';
2
3
 
3
- /** Returns the canonical deployment of the Fee Juice. */
4
+ import FeeJuiceJson from '../../artifacts/FeeJuice.json' assert { type: 'json' };
5
+ import { makeProtocolContract } from '../make_protocol_contract.js';
6
+ import { type ProtocolContract } from '../protocol_contract.js';
7
+
8
+ export const FeeJuiceArtifact = loadContractArtifact(FeeJuiceJson as NoirCompiledContract);
9
+
10
+ let protocolContract: ProtocolContract;
11
+
12
+ /** Returns the canonical deployment of the contract. */
4
13
  export function getCanonicalFeeJuice(): ProtocolContract {
5
- return getCanonicalProtocolContract('FeeJuice');
14
+ if (!protocolContract) {
15
+ protocolContract = makeProtocolContract('FeeJuice', FeeJuiceArtifact);
16
+ }
17
+ return protocolContract;
6
18
  }
package/src/index.ts CHANGED
@@ -1,8 +1,3 @@
1
- export * from './auth-registry/index.js';
2
- export * from './class-registerer/index.js';
3
- export * from './fee-juice/index.js';
4
- export * from './instance-deployer/index.js';
5
- export * from './multi-call-entrypoint/index.js';
6
1
  export * from './protocol_contract.js';
7
2
  export * from './protocol_contract_data.js';
8
3
  export * from './protocol_contract_tree.js';
@@ -1,8 +1,22 @@
1
- import { type ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js';
1
+ import { loadContractArtifact } from '@aztec/types/abi';
2
+ import { type NoirCompiledContract } from '@aztec/types/noir';
3
+
4
+ import ContractInstanceDeployerJson from '../../artifacts/ContractInstanceDeployer.json' assert { type: 'json' };
5
+ import { makeProtocolContract } from '../make_protocol_contract.js';
6
+ import { type ProtocolContract } from '../protocol_contract.js';
2
7
 
3
8
  export * from './contract_instance_deployed_event.js';
4
9
 
5
- /** Returns the canonical deployment of the instance deployer contract. */
10
+ export const ContractInstanceDeployerArtifact = loadContractArtifact(
11
+ ContractInstanceDeployerJson as NoirCompiledContract,
12
+ );
13
+
14
+ let protocolContract: ProtocolContract;
15
+
16
+ /** Returns the canonical deployment of the contract. */
6
17
  export function getCanonicalInstanceDeployer(): ProtocolContract {
7
- return getCanonicalProtocolContract('ContractInstanceDeployer');
18
+ if (!protocolContract) {
19
+ protocolContract = makeProtocolContract('ContractInstanceDeployer', ContractInstanceDeployerArtifact);
20
+ }
21
+ return protocolContract;
8
22
  }
@@ -0,0 +1,23 @@
1
+ import { getContractClassFromArtifact, getContractInstanceFromDeployParams } from '@aztec/circuits.js';
2
+ import { type ContractArtifact } from '@aztec/foundation/abi';
3
+
4
+ import { type ProtocolContract } from './protocol_contract.js';
5
+ import { ProtocolContractAddress, type ProtocolContractName, ProtocolContractSalt } from './protocol_contract_data.js';
6
+
7
+ /**
8
+ * Returns the canonical deployment given its name and artifact.
9
+ * To be used internally within the protocol-contracts package.
10
+ */
11
+ export function makeProtocolContract(name: ProtocolContractName, artifact: ContractArtifact): ProtocolContract {
12
+ const address = ProtocolContractAddress[name];
13
+ const salt = ProtocolContractSalt[name];
14
+ // TODO(@spalladino): This computes the contract class from the artifact twice.
15
+ const contractClass = getContractClassFromArtifact(artifact);
16
+ const instance = getContractInstanceFromDeployParams(artifact, { salt });
17
+ return {
18
+ instance: { ...instance, address },
19
+ contractClass,
20
+ artifact,
21
+ address,
22
+ };
23
+ }
@@ -1,5 +1,18 @@
1
- import { type ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js';
1
+ import { loadContractArtifact } from '@aztec/types/abi';
2
+ import { type NoirCompiledContract } from '@aztec/types/noir';
2
3
 
3
- export function getCanonicalMultiCallEntrypointContract(): ProtocolContract {
4
- return getCanonicalProtocolContract('MultiCallEntrypoint');
4
+ import MultiCallEntrypointJson from '../../artifacts/MultiCallEntrypoint.json' assert { type: 'json' };
5
+ import { makeProtocolContract } from '../make_protocol_contract.js';
6
+ import { type ProtocolContract } from '../protocol_contract.js';
7
+
8
+ export const MultiCallEntrypointArtifact = loadContractArtifact(MultiCallEntrypointJson as NoirCompiledContract);
9
+
10
+ let protocolContract: ProtocolContract;
11
+
12
+ /** Returns the canonical deployment of the contract. */
13
+ export function getCanonicalMultiCallEntrypoint(): ProtocolContract {
14
+ if (!protocolContract) {
15
+ protocolContract = makeProtocolContract('MultiCallEntrypoint', MultiCallEntrypointArtifact);
16
+ }
17
+ return protocolContract;
5
18
  }
@@ -3,17 +3,10 @@ import {
3
3
  type ContractClassIdPreimage,
4
4
  type ContractClassWithId,
5
5
  type ContractInstanceWithAddress,
6
- getContractClassFromArtifact,
7
- getContractInstanceFromDeployParams,
8
6
  } from '@aztec/circuits.js';
9
7
  import { type ContractArtifact } from '@aztec/foundation/abi';
10
8
 
11
- import {
12
- ProtocolContractAddress,
13
- ProtocolContractArtifact,
14
- type ProtocolContractName,
15
- ProtocolContractSalt,
16
- } from './protocol_contract_data.js';
9
+ import { ProtocolContractAddress } from './protocol_contract_data.js';
17
10
 
18
11
  /** Represents a canonical contract in the protocol. */
19
12
  export interface ProtocolContract {
@@ -27,22 +20,6 @@ export interface ProtocolContract {
27
20
  address: AztecAddress;
28
21
  }
29
22
 
30
- /** Returns the canonical deployment a given artifact. */
31
- export function getCanonicalProtocolContract(name: ProtocolContractName): ProtocolContract {
32
- const artifact = ProtocolContractArtifact[name];
33
- const address = ProtocolContractAddress[name];
34
- const salt = ProtocolContractSalt[name];
35
- // TODO(@spalladino): This computes the contract class from the artifact twice.
36
- const contractClass = getContractClassFromArtifact(artifact);
37
- const instance = getContractInstanceFromDeployParams(artifact, { salt });
38
- return {
39
- instance: { ...instance, address },
40
- contractClass,
41
- artifact,
42
- address,
43
- };
44
- }
45
-
46
23
  export function isProtocolContract(address: AztecAddress) {
47
24
  return Object.values(ProtocolContractAddress).some(a => a.equals(address));
48
25
  }
@@ -1,15 +1,5 @@
1
1
  // GENERATED FILE - DO NOT EDIT. RUN `yarn generate` or `yarn generate:data`
2
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
3
 
14
4
  export const protocolContractNames = [
15
5
  'AuthRegistry',
@@ -22,15 +12,6 @@ export const protocolContractNames = [
22
12
 
23
13
  export type ProtocolContractName = (typeof protocolContractNames)[number];
24
14
 
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
15
  export const ProtocolContractSalt: Record<ProtocolContractName, Fr> = {
35
16
  AuthRegistry: new Fr(1),
36
17
  ContractInstanceDeployer: new Fr(1),
@@ -50,16 +31,16 @@ export const ProtocolContractAddress: Record<ProtocolContractName, AztecAddress>
50
31
  };
51
32
 
52
33
  export const ProtocolContractLeaf = {
53
- AuthRegistry: Fr.fromHexString('0x20cbeffab0531a2ee8fa157414c739bfc0e0342ea09f6d01585788d9f240604c'),
54
- ContractInstanceDeployer: Fr.fromHexString('0x2a4082a69fc451db387d9f144b787ac902ad578240e7d36b14d177636d337bb0'),
55
- ContractClassRegisterer: Fr.fromHexString('0x2b0db891d2642079a447e67e7d680dc246686a195412972676c8f3144a34fce5'),
56
- MultiCallEntrypoint: Fr.fromHexString('0x0a4a88882c1846ddfcfda6ed67c443bdfc75603a2ab08d893ab7b62c671461ce'),
57
- FeeJuice: Fr.fromHexString('0x1848a1f8bdcfe420358552e038f34fd9dd60c92ae2f5e3d6e6b252d3e2f5f109'),
58
- Router: Fr.fromHexString('0x071af2035c8806f50406f313bc3d482fac6adba36cc4b3b83d16371e69bc7f66'),
34
+ AuthRegistry: Fr.fromHexString('0x23413f98beb033d7bfa8a9b5addc441f26759faf00dff5c848da5f3518bf7eb0'),
35
+ ContractInstanceDeployer: Fr.fromHexString('0x032447de7cc74649ca4fc97e444029c6410065fa7878f0198389dbc0cc51eb47'),
36
+ ContractClassRegisterer: Fr.fromHexString('0x0a39c154e69a1d9ad1ae1f179b77988a64c46825eb88a8fd48818c6d149a5f0d'),
37
+ MultiCallEntrypoint: Fr.fromHexString('0x1c1001e61223368d2d563234664e585ef5f77dab4a35fa00b3ea804cb7651e2b'),
38
+ FeeJuice: Fr.fromHexString('0x17f297c7e65113aabcf5e683c54295a4c2518dc99138af24b2999f87f6a75f74'),
39
+ Router: Fr.fromHexString('0x004836601b82afe289d5447afb230ba866499992a7c61f26d8a628dc38db054a'),
59
40
  };
60
41
 
61
42
  export const protocolContractTreeRoot = Fr.fromHexString(
62
- '0x296690a67333fb896eff0ef812d31f9be26161726e47057bb688ddcf08164453',
43
+ '0x2431e1d42149c19a560e80cfde544d97aa75833c7d3a54f9c7545372aff2d295',
63
44
  );
64
45
 
65
46
  export const REGISTERER_CONTRACT_CLASS_REGISTERED_TAG = new Fr(
@@ -1,6 +1,18 @@
1
- import { type ProtocolContract, getCanonicalProtocolContract } from '../protocol_contract.js';
1
+ import { loadContractArtifact } from '@aztec/types/abi';
2
+ import { type NoirCompiledContract } from '@aztec/types/noir';
2
3
 
3
- /** Returns the canonical deployment of the router. */
4
+ import RouterJson from '../../artifacts/Router.json' assert { type: 'json' };
5
+ import { makeProtocolContract } from '../make_protocol_contract.js';
6
+ import { type ProtocolContract } from '../protocol_contract.js';
7
+
8
+ export const RouterArtifact = loadContractArtifact(RouterJson as NoirCompiledContract);
9
+
10
+ let protocolContract: ProtocolContract;
11
+
12
+ /** Returns the canonical deployment of the contract. */
4
13
  export function getCanonicalRouter(): ProtocolContract {
5
- return getCanonicalProtocolContract('Router');
14
+ if (!protocolContract) {
15
+ protocolContract = makeProtocolContract('Router', RouterArtifact);
16
+ }
17
+ return protocolContract;
6
18
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=generate_data.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate_data.d.ts","sourceRoot":"","sources":["../../src/scripts/generate_data.ts"],"names":[],"mappings":""}
@@ -1,175 +0,0 @@
1
- import { AztecAddress, CANONICAL_AUTH_REGISTRY_ADDRESS, DEPLOYER_CONTRACT_ADDRESS, DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE, FEE_JUICE_ADDRESS, Fr, MULTI_CALL_ENTRYPOINT_ADDRESS, REGISTERER_CONTRACT_ADDRESS, REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE, REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE, REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE, ROUTER_ADDRESS, getContractInstanceFromDeployParams, } from '@aztec/circuits.js';
2
- import { poseidon2Hash } from '@aztec/foundation/crypto';
3
- import { createConsoleLogger } from '@aztec/foundation/log';
4
- import { loadContractArtifact } from '@aztec/types/abi';
5
- import { promises as fs } from 'fs';
6
- import path from 'path';
7
- import { buildProtocolContractTree } from '../build_protocol_contract_tree.js';
8
- const log = createConsoleLogger('autogenerate');
9
- const noirContractsRoot = '../../noir-projects/noir-contracts';
10
- const srcPath = path.join(noirContractsRoot, './target');
11
- const destArtifactsDir = './artifacts';
12
- const outputFilePath = './src/protocol_contract_data.ts';
13
- const salt = new Fr(1);
14
- const contractAddressMapping = {
15
- AuthRegistry: CANONICAL_AUTH_REGISTRY_ADDRESS,
16
- ContractInstanceDeployer: DEPLOYER_CONTRACT_ADDRESS,
17
- ContractClassRegisterer: REGISTERER_CONTRACT_ADDRESS,
18
- MultiCallEntrypoint: MULTI_CALL_ENTRYPOINT_ADDRESS,
19
- FeeJuice: FEE_JUICE_ADDRESS,
20
- Router: ROUTER_ADDRESS,
21
- };
22
- async function clearDestDir() {
23
- try {
24
- await fs.access(destArtifactsDir);
25
- // If the directory exists, remove it recursively.
26
- await fs.rm(destArtifactsDir, { recursive: true, force: true });
27
- }
28
- catch (err) {
29
- if (err.code === 'ENOENT') {
30
- // If the directory does not exist, do nothing.
31
- }
32
- else {
33
- log(`Error removing dest directory: ${err}`);
34
- }
35
- }
36
- await fs.mkdir(destArtifactsDir, { recursive: true });
37
- }
38
- async function copyArtifact(srcName, destName) {
39
- const src = path.join(srcPath, `${srcName}.json`);
40
- const artifact = JSON.parse(await fs.readFile(src, 'utf8'));
41
- const dest = path.join(destArtifactsDir, `${destName}.json`);
42
- await fs.copyFile(src, dest);
43
- return artifact;
44
- }
45
- function computeContractLeaf(artifact) {
46
- const instance = getContractInstanceFromDeployParams(loadContractArtifact(artifact), { salt });
47
- return instance.address;
48
- }
49
- function computeRoot(names, leaves) {
50
- const data = names.map((name, i) => ({
51
- address: new AztecAddress(new Fr(contractAddressMapping[name])),
52
- leaf: leaves[i],
53
- }));
54
- const tree = buildProtocolContractTree(data);
55
- return Fr.fromBuffer(tree.root);
56
- }
57
- async function generateDeclarationFile(destName) {
58
- const content = `
59
- import { type NoirCompiledContract } from '@aztec/types/noir';
60
- const circuit: NoirCompiledContract;
61
- export = circuit;
62
- `;
63
- await fs.writeFile(path.join(destArtifactsDir, `${destName}.d.json.ts`), content);
64
- }
65
- function generateNames(names) {
66
- return `
67
- export const protocolContractNames = [
68
- ${names.map(name => `'${name}'`).join(',\n')}
69
- ] as const;
70
-
71
- export type ProtocolContractName = typeof protocolContractNames[number];
72
- `;
73
- }
74
- function generateArtifacts(names) {
75
- const imports = names
76
- .map(name => {
77
- return `
78
- import ${name}Json from '../artifacts/${name}.json' assert { type: 'json' };
79
- `;
80
- })
81
- .join('\n');
82
- const exports = names.map(name => `${name}: loadContractArtifact(${name}Json as NoirCompiledContract)`).join(',\n');
83
- return `
84
- ${imports}
85
-
86
- export const ProtocolContractArtifact: Record<ProtocolContractName, ContractArtifact> = {
87
- ${exports}
88
- };
89
- `;
90
- }
91
- function generateSalts(names) {
92
- return `
93
- export const ProtocolContractSalt: Record<ProtocolContractName, Fr> = {
94
- ${names.map(name => `${name}: new Fr(${salt.toNumber()})`).join(',\n')}
95
- };
96
- `;
97
- }
98
- function generateContractAddresses(names) {
99
- const addresses = names.map(name => `${name}: AztecAddress.fromBigInt(${contractAddressMapping[name]}n)`).join(',\n');
100
- return `
101
- export const ProtocolContractAddress: Record<ProtocolContractName, AztecAddress> = {
102
- ${addresses}
103
- };
104
- `;
105
- }
106
- function generateContractLeaves(names, leaves) {
107
- return `
108
- export const ProtocolContractLeaf = {
109
- ${leaves.map((leaf, i) => `${names[i]}: Fr.fromHexString('${leaf.toString()}')`).join(',\n')}
110
- };
111
- `;
112
- }
113
- function generateRoot(names, leaves) {
114
- const root = computeRoot(names, leaves);
115
- return `
116
- export const protocolContractTreeRoot = Fr.fromHexString('${root.toString()}');
117
- `;
118
- }
119
- function generateLogTags() {
120
- return `
121
- export const REGISTERER_CONTRACT_CLASS_REGISTERED_TAG = new Fr(${REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE}n);
122
- export const REGISTERER_PRIVATE_FUNCTION_BROADCASTED_TAG = new Fr(${REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE}n);
123
- export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_TAG = new Fr(${REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE}n);
124
- export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_TAG = Fr.fromHexString('${poseidon2Hash([
125
- DEPLOYER_CONTRACT_ADDRESS,
126
- DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE,
127
- ])}');
128
- `;
129
- }
130
- async function generateOutputFile(names, leaves) {
131
- const content = `
132
- // GENERATED FILE - DO NOT EDIT. RUN \`yarn generate\` or \`yarn generate:data\`
133
- import { AztecAddress, Fr } from '@aztec/circuits.js';
134
- import { type ContractArtifact } from '@aztec/foundation/abi';
135
- import { loadContractArtifact } from '@aztec/types/abi';
136
- import { type NoirCompiledContract } from '@aztec/types/noir';
137
-
138
- ${generateNames(names)}
139
-
140
- ${generateArtifacts(names)}
141
-
142
- ${generateSalts(names)}
143
-
144
- ${generateContractAddresses(names)}
145
-
146
- ${generateContractLeaves(names, leaves)}
147
-
148
- ${generateRoot(names, leaves)}
149
-
150
- ${generateLogTags()}
151
- `;
152
- await fs.writeFile(outputFilePath, content);
153
- }
154
- async function main() {
155
- await clearDestDir();
156
- const srcNames = JSON.parse(await fs.readFile(path.join(noirContractsRoot, 'protocol_contracts.json'), 'utf8'));
157
- const leaves = [];
158
- const destNames = srcNames.map(n => n.split('-')[1]);
159
- for (let i = 0; i < srcNames.length; i++) {
160
- const srcName = srcNames[i];
161
- const destName = destNames[i];
162
- const artifact = await copyArtifact(srcName, destName);
163
- await generateDeclarationFile(destName);
164
- leaves.push(computeContractLeaf(artifact).toField());
165
- }
166
- await generateOutputFile(destNames, leaves);
167
- }
168
- try {
169
- await main();
170
- }
171
- catch (err) {
172
- log(`Error copying protocol contract artifacts: ${err}`);
173
- process.exit(1);
174
- }
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVfZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL2dlbmVyYXRlX2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWiwrQkFBK0IsRUFDL0IseUJBQXlCLEVBQ3pCLCtDQUErQyxFQUMvQyxpQkFBaUIsRUFDakIsRUFBRSxFQUNGLDZCQUE2QixFQUM3QiwyQkFBMkIsRUFDM0IsZ0RBQWdELEVBQ2hELG1EQUFtRCxFQUNuRCx5REFBeUQsRUFDekQsY0FBYyxFQUNkLG1DQUFtQyxHQUNwQyxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUd4RCxPQUFPLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFFeEIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFL0UsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFaEQsTUFBTSxpQkFBaUIsR0FBRyxvQ0FBb0MsQ0FBQztBQUMvRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO0FBQ3ZDLE1BQU0sY0FBYyxHQUFHLGlDQUFpQyxDQUFDO0FBRXpELE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXZCLE1BQU0sc0JBQXNCLEdBQStCO0lBQ3pELFlBQVksRUFBRSwrQkFBK0I7SUFDN0Ms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
@@ -1,214 +0,0 @@
1
- import {
2
- AztecAddress,
3
- CANONICAL_AUTH_REGISTRY_ADDRESS,
4
- DEPLOYER_CONTRACT_ADDRESS,
5
- DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE,
6
- FEE_JUICE_ADDRESS,
7
- Fr,
8
- MULTI_CALL_ENTRYPOINT_ADDRESS,
9
- REGISTERER_CONTRACT_ADDRESS,
10
- REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE,
11
- REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE,
12
- REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE,
13
- ROUTER_ADDRESS,
14
- getContractInstanceFromDeployParams,
15
- } from '@aztec/circuits.js';
16
- import { poseidon2Hash } from '@aztec/foundation/crypto';
17
- import { createConsoleLogger } from '@aztec/foundation/log';
18
- import { loadContractArtifact } from '@aztec/types/abi';
19
- import { type NoirCompiledContract } from '@aztec/types/noir';
20
-
21
- import { promises as fs } from 'fs';
22
- import path from 'path';
23
-
24
- import { buildProtocolContractTree } from '../build_protocol_contract_tree.js';
25
-
26
- const log = createConsoleLogger('autogenerate');
27
-
28
- const noirContractsRoot = '../../noir-projects/noir-contracts';
29
- const srcPath = path.join(noirContractsRoot, './target');
30
- const destArtifactsDir = './artifacts';
31
- const outputFilePath = './src/protocol_contract_data.ts';
32
-
33
- const salt = new Fr(1);
34
-
35
- const contractAddressMapping: { [name: string]: number } = {
36
- AuthRegistry: CANONICAL_AUTH_REGISTRY_ADDRESS,
37
- ContractInstanceDeployer: DEPLOYER_CONTRACT_ADDRESS,
38
- ContractClassRegisterer: REGISTERER_CONTRACT_ADDRESS,
39
- MultiCallEntrypoint: MULTI_CALL_ENTRYPOINT_ADDRESS,
40
- FeeJuice: FEE_JUICE_ADDRESS,
41
- Router: ROUTER_ADDRESS,
42
- };
43
-
44
- async function clearDestDir() {
45
- try {
46
- await fs.access(destArtifactsDir);
47
- // If the directory exists, remove it recursively.
48
- await fs.rm(destArtifactsDir, { recursive: true, force: true });
49
- } catch (err: any) {
50
- if (err.code === 'ENOENT') {
51
- // If the directory does not exist, do nothing.
52
- } else {
53
- log(`Error removing dest directory: ${err}`);
54
- }
55
- }
56
- await fs.mkdir(destArtifactsDir, { recursive: true });
57
- }
58
-
59
- async function copyArtifact(srcName: string, destName: string) {
60
- const src = path.join(srcPath, `${srcName}.json`);
61
- const artifact = JSON.parse(await fs.readFile(src, 'utf8')) as NoirCompiledContract;
62
- const dest = path.join(destArtifactsDir, `${destName}.json`);
63
- await fs.copyFile(src, dest);
64
- return artifact;
65
- }
66
-
67
- function computeContractLeaf(artifact: NoirCompiledContract) {
68
- const instance = getContractInstanceFromDeployParams(loadContractArtifact(artifact), { salt });
69
- return instance.address;
70
- }
71
-
72
- function computeRoot(names: string[], leaves: Fr[]) {
73
- const data = names.map((name, i) => ({
74
- address: new AztecAddress(new Fr(contractAddressMapping[name])),
75
- leaf: leaves[i],
76
- }));
77
- const tree = buildProtocolContractTree(data);
78
- return Fr.fromBuffer(tree.root);
79
- }
80
-
81
- async function generateDeclarationFile(destName: string) {
82
- const content = `
83
- import { type NoirCompiledContract } from '@aztec/types/noir';
84
- const circuit: NoirCompiledContract;
85
- export = circuit;
86
- `;
87
- await fs.writeFile(path.join(destArtifactsDir, `${destName}.d.json.ts`), content);
88
- }
89
-
90
- function generateNames(names: string[]) {
91
- return `
92
- export const protocolContractNames = [
93
- ${names.map(name => `'${name}'`).join(',\n')}
94
- ] as const;
95
-
96
- export type ProtocolContractName = typeof protocolContractNames[number];
97
- `;
98
- }
99
-
100
- function generateArtifacts(names: string[]) {
101
- const imports = names
102
- .map(name => {
103
- return `
104
- import ${name}Json from '../artifacts/${name}.json' assert { type: 'json' };
105
- `;
106
- })
107
- .join('\n');
108
-
109
- const exports = names.map(name => `${name}: loadContractArtifact(${name}Json as NoirCompiledContract)`).join(',\n');
110
-
111
- return `
112
- ${imports}
113
-
114
- export const ProtocolContractArtifact: Record<ProtocolContractName, ContractArtifact> = {
115
- ${exports}
116
- };
117
- `;
118
- }
119
-
120
- function generateSalts(names: string[]) {
121
- return `
122
- export const ProtocolContractSalt: Record<ProtocolContractName, Fr> = {
123
- ${names.map(name => `${name}: new Fr(${salt.toNumber()})`).join(',\n')}
124
- };
125
- `;
126
- }
127
-
128
- function generateContractAddresses(names: string[]) {
129
- const addresses = names.map(name => `${name}: AztecAddress.fromBigInt(${contractAddressMapping[name]}n)`).join(',\n');
130
- return `
131
- export const ProtocolContractAddress: Record<ProtocolContractName, AztecAddress> = {
132
- ${addresses}
133
- };
134
- `;
135
- }
136
-
137
- function generateContractLeaves(names: string[], leaves: Fr[]) {
138
- return `
139
- export const ProtocolContractLeaf = {
140
- ${leaves.map((leaf, i) => `${names[i]}: Fr.fromHexString('${leaf.toString()}')`).join(',\n')}
141
- };
142
- `;
143
- }
144
-
145
- function generateRoot(names: string[], leaves: Fr[]) {
146
- const root = computeRoot(names, leaves);
147
- return `
148
- export const protocolContractTreeRoot = Fr.fromHexString('${root.toString()}');
149
- `;
150
- }
151
-
152
- function generateLogTags() {
153
- return `
154
- export const REGISTERER_CONTRACT_CLASS_REGISTERED_TAG = new Fr(${REGISTERER_CONTRACT_CLASS_REGISTERED_MAGIC_VALUE}n);
155
- export const REGISTERER_PRIVATE_FUNCTION_BROADCASTED_TAG = new Fr(${REGISTERER_PRIVATE_FUNCTION_BROADCASTED_MAGIC_VALUE}n);
156
- export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_TAG = new Fr(${REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE}n);
157
- export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_TAG = Fr.fromHexString('${poseidon2Hash([
158
- DEPLOYER_CONTRACT_ADDRESS,
159
- DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE,
160
- ])}');
161
- `;
162
- }
163
-
164
- async function generateOutputFile(names: string[], leaves: Fr[]) {
165
- const content = `
166
- // GENERATED FILE - DO NOT EDIT. RUN \`yarn generate\` or \`yarn generate:data\`
167
- import { AztecAddress, Fr } from '@aztec/circuits.js';
168
- import { type ContractArtifact } from '@aztec/foundation/abi';
169
- import { loadContractArtifact } from '@aztec/types/abi';
170
- import { type NoirCompiledContract } from '@aztec/types/noir';
171
-
172
- ${generateNames(names)}
173
-
174
- ${generateArtifacts(names)}
175
-
176
- ${generateSalts(names)}
177
-
178
- ${generateContractAddresses(names)}
179
-
180
- ${generateContractLeaves(names, leaves)}
181
-
182
- ${generateRoot(names, leaves)}
183
-
184
- ${generateLogTags()}
185
- `;
186
- await fs.writeFile(outputFilePath, content);
187
- }
188
-
189
- async function main() {
190
- await clearDestDir();
191
-
192
- const srcNames = JSON.parse(
193
- await fs.readFile(path.join(noirContractsRoot, 'protocol_contracts.json'), 'utf8'),
194
- ) as string[];
195
-
196
- const leaves = [];
197
- const destNames = srcNames.map(n => n.split('-')[1]);
198
- for (let i = 0; i < srcNames.length; i++) {
199
- const srcName = srcNames[i];
200
- const destName = destNames[i];
201
- const artifact = await copyArtifact(srcName, destName);
202
- await generateDeclarationFile(destName);
203
- leaves.push(computeContractLeaf(artifact).toField());
204
- }
205
-
206
- await generateOutputFile(destNames, leaves);
207
- }
208
-
209
- try {
210
- await main();
211
- } catch (err: unknown) {
212
- log(`Error copying protocol contract artifacts: ${err}`);
213
- process.exit(1);
214
- }