@aztec/noir-protocol-circuits-types 0.24.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 (77) hide show
  1. package/README.md +1 -0
  2. package/dest/index.d.ts +69 -0
  3. package/dest/index.d.ts.map +1 -0
  4. package/dest/index.js +268 -0
  5. package/dest/scripts/generate_ts_from_abi.d.ts +2 -0
  6. package/dest/scripts/generate_ts_from_abi.d.ts.map +1 -0
  7. package/dest/scripts/generate_ts_from_abi.js +180 -0
  8. package/dest/target/private_kernel_init.json +1 -0
  9. package/dest/target/private_kernel_init_simulated.json +1 -0
  10. package/dest/target/private_kernel_inner.json +1 -0
  11. package/dest/target/private_kernel_inner_simulated.json +1 -0
  12. package/dest/target/private_kernel_tail.json +1 -0
  13. package/dest/target/private_kernel_tail_simulated.json +1 -0
  14. package/dest/target/public_kernel_app_logic.json +1 -0
  15. package/dest/target/public_kernel_app_logic_simulated.json +1 -0
  16. package/dest/target/public_kernel_setup.json +1 -0
  17. package/dest/target/public_kernel_setup_simulated.json +1 -0
  18. package/dest/target/rollup_base.json +1 -0
  19. package/dest/target/rollup_base_simulated.json +1 -0
  20. package/dest/target/rollup_merge.json +1 -0
  21. package/dest/target/rollup_root.json +1 -0
  22. package/dest/type_conversion.d.ts +574 -0
  23. package/dest/type_conversion.d.ts.map +1 -0
  24. package/dest/type_conversion.js +1115 -0
  25. package/dest/types/private_kernel_init_types.d.ts +232 -0
  26. package/dest/types/private_kernel_init_types.d.ts.map +1 -0
  27. package/dest/types/private_kernel_init_types.js +3 -0
  28. package/dest/types/private_kernel_inner_types.d.ts +233 -0
  29. package/dest/types/private_kernel_inner_types.d.ts.map +1 -0
  30. package/dest/types/private_kernel_inner_types.js +3 -0
  31. package/dest/types/private_kernel_tail_types.d.ts +182 -0
  32. package/dest/types/private_kernel_tail_types.d.ts.map +1 -0
  33. package/dest/types/private_kernel_tail_types.js +3 -0
  34. package/dest/types/public_kernel_app_logic_types.d.ts +212 -0
  35. package/dest/types/public_kernel_app_logic_types.d.ts.map +1 -0
  36. package/dest/types/public_kernel_app_logic_types.js +3 -0
  37. package/dest/types/public_kernel_setup_types.d.ts +212 -0
  38. package/dest/types/public_kernel_setup_types.d.ts.map +1 -0
  39. package/dest/types/public_kernel_setup_types.js +3 -0
  40. package/dest/types/rollup_base_types.d.ts +220 -0
  41. package/dest/types/rollup_base_types.d.ts.map +1 -0
  42. package/dest/types/rollup_base_types.js +3 -0
  43. package/dest/types/rollup_merge_types.d.ts +71 -0
  44. package/dest/types/rollup_merge_types.d.ts.map +1 -0
  45. package/dest/types/rollup_merge_types.js +3 -0
  46. package/dest/types/rollup_root_types.d.ts +92 -0
  47. package/dest/types/rollup_root_types.d.ts.map +1 -0
  48. package/dest/types/rollup_root_types.js +3 -0
  49. package/package.json +60 -0
  50. package/src/fixtures/nested-call-private-kernel-init.hex +1 -0
  51. package/src/fixtures/nested-call-private-kernel-inner.hex +1 -0
  52. package/src/fixtures/nested-call-private-kernel-ordering.hex +1 -0
  53. package/src/index.ts +438 -0
  54. package/src/scripts/generate_ts_from_abi.ts +233 -0
  55. package/src/target/private_kernel_init.json +1 -0
  56. package/src/target/private_kernel_init_simulated.json +1 -0
  57. package/src/target/private_kernel_inner.json +1 -0
  58. package/src/target/private_kernel_inner_simulated.json +1 -0
  59. package/src/target/private_kernel_tail.json +1 -0
  60. package/src/target/private_kernel_tail_simulated.json +1 -0
  61. package/src/target/public_kernel_app_logic.json +1 -0
  62. package/src/target/public_kernel_app_logic_simulated.json +1 -0
  63. package/src/target/public_kernel_setup.json +1 -0
  64. package/src/target/public_kernel_setup_simulated.json +1 -0
  65. package/src/target/rollup_base.json +1 -0
  66. package/src/target/rollup_base_simulated.json +1 -0
  67. package/src/target/rollup_merge.json +1 -0
  68. package/src/target/rollup_root.json +1 -0
  69. package/src/type_conversion.ts +1673 -0
  70. package/src/types/private_kernel_init_types.ts +272 -0
  71. package/src/types/private_kernel_inner_types.ts +273 -0
  72. package/src/types/private_kernel_tail_types.ts +214 -0
  73. package/src/types/public_kernel_app_logic_types.ts +250 -0
  74. package/src/types/public_kernel_setup_types.ts +250 -0
  75. package/src/types/rollup_base_types.ts +259 -0
  76. package/src/types/rollup_merge_types.ts +85 -0
  77. package/src/types/rollup_root_types.ts +109 -0
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # Noir Private Kernel
@@ -0,0 +1,69 @@
1
+ import { BaseOrMergeRollupPublicInputs, BaseRollupInputs, MergeRollupInputs, PrivateKernelInitCircuitPrivateInputs, PrivateKernelInnerCircuitPrivateInputs, PrivateKernelInnerCircuitPublicInputs, PrivateKernelTailCircuitPrivateInputs, PrivateKernelTailCircuitPublicInputs, PublicKernelCircuitPrivateInputs, PublicKernelCircuitPublicInputs, RootRollupInputs, RootRollupPublicInputs } from '@aztec/circuits.js';
2
+ import { NoirCompiledCircuit } from '@aztec/types/noir';
3
+ /**
4
+ * The decoded inputs from the circuit.
5
+ */
6
+ export type DecodedInputs = {
7
+ /**
8
+ * The inputs to the circuit
9
+ */
10
+ inputs: Record<string, any>;
11
+ /**
12
+ * The return value of the circuit
13
+ */
14
+ return_value: any;
15
+ };
16
+ export declare const PrivateKernelInitArtifact: NoirCompiledCircuit;
17
+ export declare const PrivateKernelInnerArtifact: NoirCompiledCircuit;
18
+ export declare const PrivateKernelOrderingArtifact: NoirCompiledCircuit;
19
+ export declare const PublicKernelPrivatePreviousArtifact: NoirCompiledCircuit;
20
+ export declare const PublicKernelPublicPreviousArtifact: NoirCompiledCircuit;
21
+ /**
22
+ * Executes the init private kernel.
23
+ * @param privateKernelInitCircuitPrivateInputs - The private inputs to the initial private kernel.
24
+ * @returns The public inputs.
25
+ */
26
+ export declare function executeInit(privateKernelInitCircuitPrivateInputs: PrivateKernelInitCircuitPrivateInputs): Promise<PrivateKernelInnerCircuitPublicInputs>;
27
+ /**
28
+ * Executes the inner private kernel.
29
+ * @param privateKernelInnerCircuitPrivateInputs - The private inputs to the inner private kernel.
30
+ * @returns The public inputs.
31
+ */
32
+ export declare function executeInner(privateKernelInnerCircuitPrivateInputs: PrivateKernelInnerCircuitPrivateInputs): Promise<PrivateKernelInnerCircuitPublicInputs>;
33
+ /**
34
+ * Executes the tail private kernel.
35
+ * @param privateKernelInnerCircuitPrivateInputs - The private inputs to the tail private kernel.
36
+ * @returns The public inputs.
37
+ */
38
+ export declare function executeTail(privateKernelInnerCircuitPrivateInputs: PrivateKernelTailCircuitPrivateInputs): Promise<PrivateKernelTailCircuitPublicInputs>;
39
+ /**
40
+ * Executes the public kernel in the setup phase.
41
+ * @param publicKernelPrivateInputs - The public kernel setup circuit private inputs.
42
+ * @returns The public inputs.
43
+ */
44
+ export declare function executePublicKernelSetup(publicKernelPrivateInputs: PublicKernelCircuitPrivateInputs): Promise<PublicKernelCircuitPublicInputs>;
45
+ /**
46
+ * Executes the public kernel in the app logic phase.
47
+ * @param publicKernelPrivateInputs - The public kernel app logic circuit private inputs.
48
+ * @returns The public inputs.
49
+ */
50
+ export declare function executePublicKernelAppLogic(publicKernelPrivateInputs: PublicKernelCircuitPrivateInputs): Promise<PublicKernelCircuitPublicInputs>;
51
+ /**
52
+ * Executes the root rollup.
53
+ * @param rootRollupInputs - The root rollup inputs.
54
+ * @returns The public inputs.
55
+ */
56
+ export declare function executeRootRollup(rootRollupInputs: RootRollupInputs): Promise<RootRollupPublicInputs>;
57
+ /**
58
+ * Executes the merge rollup.
59
+ * @param mergeRollupInputs - The merge rollup inputs.
60
+ * @returns The public inputs.
61
+ */
62
+ export declare function executeMergeRollup(mergeRollupInputs: MergeRollupInputs): Promise<BaseOrMergeRollupPublicInputs>;
63
+ /**
64
+ * Executes the base rollup.
65
+ * @param mergeRollupInputs - The merge rollup inputs.
66
+ * @returns The public inputs.
67
+ */
68
+ export declare function executeBaseRollup(baseRollupInputs: BaseRollupInputs): Promise<BaseOrMergeRollupPublicInputs>;
69
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,iBAAiB,EACjB,qCAAqC,EACrC,sCAAsC,EACtC,qCAAqC,EACrC,qCAAqC,EACrC,oCAAoC,EACpC,gCAAgC,EAChC,+BAA+B,EAC/B,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAgDxD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B;;OAEG;IACH,YAAY,EAAE,GAAG,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,yBAAyB,qBAA+C,CAAC;AAEtF,eAAO,MAAM,0BAA0B,qBAAgD,CAAC;AAExF,eAAO,MAAM,6BAA6B,qBAA+C,CAAC;AAE1F,eAAO,MAAM,mCAAmC,qBAAyD,CAAC;AAE1G,eAAO,MAAM,kCAAkC,qBAAwD,CAAC;AAExG;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,qCAAqC,EAAE,qCAAqC,GAC3E,OAAO,CAAC,qCAAqC,CAAC,CAQhD;AAWD;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,sCAAsC,EAAE,sCAAsC,GAC7E,OAAO,CAAC,qCAAqC,CAAC,CAQhD;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,sCAAsC,EAAE,qCAAqC,GAC5E,OAAO,CAAC,oCAAoC,CAAC,CAQ/C;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,yBAAyB,EAAE,gCAAgC,GAC1D,OAAO,CAAC,+BAA+B,CAAC,CAQ1C;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,yBAAyB,EAAE,gCAAgC,GAC1D,OAAO,CAAC,+BAA+B,CAAC,CAQ1C;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAQ3G;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAQrH;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAQlH"}
package/dest/index.js ADDED
@@ -0,0 +1,268 @@
1
+ import { createBlackBoxSolver, executeCircuitWithBlackBoxSolver } from '@noir-lang/acvm_js';
2
+ import { abiDecode, abiEncode } from '@noir-lang/noirc_abi';
3
+ import PrivateKernelInitJson from './target/private_kernel_init.json' assert { type: 'json' };
4
+ import PrivateKernelInitSimulatedJson from './target/private_kernel_init_simulated.json' assert { type: 'json' };
5
+ import PrivateKernelInnerJson from './target/private_kernel_inner.json' assert { type: 'json' };
6
+ import PrivateKernelInnerSimulatedJson from './target/private_kernel_inner_simulated.json' assert { type: 'json' };
7
+ import PrivateKernelTailJson from './target/private_kernel_tail.json' assert { type: 'json' };
8
+ import PrivateKernelTailSimulatedJson from './target/private_kernel_tail_simulated.json' assert { type: 'json' };
9
+ import PublicKernelPublicPreviousJson from './target/public_kernel_app_logic.json' assert { type: 'json' };
10
+ import PublicKernelPublicPreviousSimulatedJson from './target/public_kernel_app_logic_simulated.json' assert { type: 'json' };
11
+ import PublicKernelPrivatePreviousJson from './target/public_kernel_setup.json' assert { type: 'json' };
12
+ import PublicKernelPrivatePreviousSimulatedJson from './target/public_kernel_setup_simulated.json' assert { type: 'json' };
13
+ import BaseRollupSimulatedJson from './target/rollup_base_simulated.json' assert { type: 'json' };
14
+ import MergeRollupJson from './target/rollup_merge.json' assert { type: 'json' };
15
+ import RootRollupJson from './target/rollup_root.json' assert { type: 'json' };
16
+ import { mapBaseOrMergeRollupPublicInputsFromNoir, mapBaseRollupInputsToNoir, mapMergeRollupInputsToNoir, mapPrivateKernelInitCircuitPrivateInputsToNoir, mapPrivateKernelInnerCircuitPrivateInputsToNoir, mapPrivateKernelInnerCircuitPublicInputsFromNoir, mapPrivateKernelTailCircuitPrivateInputsToNoir, mapPrivateKernelTailCircuitPublicInputsFromNoir, mapPublicKernelCircuitPrivateInputsToNoir, mapPublicKernelCircuitPublicInputsFromNoir, mapRootRollupInputsToNoir, mapRootRollupPublicInputsFromNoir, } from './type_conversion.js';
17
+ export const PrivateKernelInitArtifact = PrivateKernelInitJson;
18
+ export const PrivateKernelInnerArtifact = PrivateKernelInnerJson;
19
+ export const PrivateKernelOrderingArtifact = PrivateKernelTailJson;
20
+ export const PublicKernelPrivatePreviousArtifact = PublicKernelPrivatePreviousJson;
21
+ export const PublicKernelPublicPreviousArtifact = PublicKernelPublicPreviousJson;
22
+ /**
23
+ * Executes the init private kernel.
24
+ * @param privateKernelInitCircuitPrivateInputs - The private inputs to the initial private kernel.
25
+ * @returns The public inputs.
26
+ */
27
+ export async function executeInit(privateKernelInitCircuitPrivateInputs) {
28
+ const params = {
29
+ input: mapPrivateKernelInitCircuitPrivateInputsToNoir(privateKernelInitCircuitPrivateInputs),
30
+ };
31
+ const returnType = await executePrivateKernelInitWithACVM(params);
32
+ return mapPrivateKernelInnerCircuitPublicInputsFromNoir(returnType);
33
+ }
34
+ let solver;
35
+ const getSolver = () => {
36
+ if (!solver) {
37
+ solver = createBlackBoxSolver();
38
+ }
39
+ return solver;
40
+ };
41
+ /**
42
+ * Executes the inner private kernel.
43
+ * @param privateKernelInnerCircuitPrivateInputs - The private inputs to the inner private kernel.
44
+ * @returns The public inputs.
45
+ */
46
+ export async function executeInner(privateKernelInnerCircuitPrivateInputs) {
47
+ const params = {
48
+ input: mapPrivateKernelInnerCircuitPrivateInputsToNoir(privateKernelInnerCircuitPrivateInputs),
49
+ };
50
+ const returnType = await executePrivateKernelInnerWithACVM(params);
51
+ return mapPrivateKernelInnerCircuitPublicInputsFromNoir(returnType);
52
+ }
53
+ /**
54
+ * Executes the tail private kernel.
55
+ * @param privateKernelInnerCircuitPrivateInputs - The private inputs to the tail private kernel.
56
+ * @returns The public inputs.
57
+ */
58
+ export async function executeTail(privateKernelInnerCircuitPrivateInputs) {
59
+ const params = {
60
+ input: mapPrivateKernelTailCircuitPrivateInputsToNoir(privateKernelInnerCircuitPrivateInputs),
61
+ };
62
+ const returnType = await executePrivateKernelTailWithACVM(params);
63
+ return mapPrivateKernelTailCircuitPublicInputsFromNoir(returnType);
64
+ }
65
+ /**
66
+ * Executes the public kernel in the setup phase.
67
+ * @param publicKernelPrivateInputs - The public kernel setup circuit private inputs.
68
+ * @returns The public inputs.
69
+ */
70
+ export async function executePublicKernelSetup(publicKernelPrivateInputs) {
71
+ const params = {
72
+ input: mapPublicKernelCircuitPrivateInputsToNoir(publicKernelPrivateInputs),
73
+ };
74
+ const returnType = await executePublicKernelSetupWithACVM(params);
75
+ return mapPublicKernelCircuitPublicInputsFromNoir(returnType);
76
+ }
77
+ /**
78
+ * Executes the public kernel in the app logic phase.
79
+ * @param publicKernelPrivateInputs - The public kernel app logic circuit private inputs.
80
+ * @returns The public inputs.
81
+ */
82
+ export async function executePublicKernelAppLogic(publicKernelPrivateInputs) {
83
+ const params = {
84
+ input: mapPublicKernelCircuitPrivateInputsToNoir(publicKernelPrivateInputs),
85
+ };
86
+ const returnType = await executePublicKernelAppLogicWithACVM(params);
87
+ return mapPublicKernelCircuitPublicInputsFromNoir(returnType);
88
+ }
89
+ /**
90
+ * Executes the root rollup.
91
+ * @param rootRollupInputs - The root rollup inputs.
92
+ * @returns The public inputs.
93
+ */
94
+ export async function executeRootRollup(rootRollupInputs) {
95
+ const params = {
96
+ inputs: mapRootRollupInputsToNoir(rootRollupInputs),
97
+ };
98
+ const returnType = await executeRootRollupWithACVM(params);
99
+ return mapRootRollupPublicInputsFromNoir(returnType);
100
+ }
101
+ /**
102
+ * Executes the merge rollup.
103
+ * @param mergeRollupInputs - The merge rollup inputs.
104
+ * @returns The public inputs.
105
+ */
106
+ export async function executeMergeRollup(mergeRollupInputs) {
107
+ const params = {
108
+ inputs: mapMergeRollupInputsToNoir(mergeRollupInputs),
109
+ };
110
+ const returnType = await executeMergeRollupWithACVM(params);
111
+ return mapBaseOrMergeRollupPublicInputsFromNoir(returnType);
112
+ }
113
+ /**
114
+ * Executes the base rollup.
115
+ * @param mergeRollupInputs - The merge rollup inputs.
116
+ * @returns The public inputs.
117
+ */
118
+ export async function executeBaseRollup(baseRollupInputs) {
119
+ const params = {
120
+ inputs: mapBaseRollupInputsToNoir(baseRollupInputs),
121
+ };
122
+ const returnType = await executeBaseRollupWithACVM(params);
123
+ return mapBaseOrMergeRollupPublicInputsFromNoir(returnType);
124
+ }
125
+ /**
126
+ * Executes the init private kernel with the given inputs using the acvm.
127
+ *
128
+ */
129
+ async function executePrivateKernelInitWithACVM(input) {
130
+ const initialWitnessMap = abiEncode(PrivateKernelInitSimulatedJson.abi, input);
131
+ // Execute the circuit on those initial witness values
132
+ //
133
+ // Decode the bytecode from base64 since the acvm does not know about base64 encoding
134
+ const decodedBytecode = Buffer.from(PrivateKernelInitSimulatedJson.bytecode, 'base64');
135
+ //
136
+ // Execute the circuit
137
+ const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
138
+ throw Error('unexpected oracle during execution');
139
+ });
140
+ // Decode the witness map into two fields, the return values and the inputs
141
+ const decodedInputs = abiDecode(PrivateKernelInitSimulatedJson.abi, _witnessMap);
142
+ // Cast the inputs as the return type
143
+ return decodedInputs.return_value;
144
+ }
145
+ /**
146
+ * Executes the inner private kernel with the given inputs using the acvm.
147
+ */
148
+ async function executePrivateKernelInnerWithACVM(input) {
149
+ const initialWitnessMap = abiEncode(PrivateKernelInnerSimulatedJson.abi, input);
150
+ // Execute the circuit on those initial witness values
151
+ //
152
+ // Decode the bytecode from base64 since the acvm does not know about base64 encoding
153
+ const decodedBytecode = Buffer.from(PrivateKernelInnerSimulatedJson.bytecode, 'base64');
154
+ //
155
+ // Execute the circuit
156
+ const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
157
+ throw Error('unexpected oracle during execution');
158
+ });
159
+ // Decode the witness map into two fields, the return values and the inputs
160
+ const decodedInputs = abiDecode(PrivateKernelInnerSimulatedJson.abi, _witnessMap);
161
+ // Cast the inputs as the return type
162
+ return decodedInputs.return_value;
163
+ }
164
+ /**
165
+ * Executes the ordering private kernel with the given inputs using the acvm.
166
+ */
167
+ async function executePrivateKernelTailWithACVM(input) {
168
+ const initialWitnessMap = abiEncode(PrivateKernelTailSimulatedJson.abi, input);
169
+ // Execute the circuit on those initial witness values
170
+ //
171
+ // Decode the bytecode from base64 since the acvm does not know about base64 encoding
172
+ const decodedBytecode = Buffer.from(PrivateKernelTailSimulatedJson.bytecode, 'base64');
173
+ //
174
+ // Execute the circuit
175
+ const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
176
+ throw Error('unexpected oracle during execution');
177
+ });
178
+ // Decode the witness map into two fields, the return values and the inputs
179
+ const decodedInputs = abiDecode(PrivateKernelTailSimulatedJson.abi, _witnessMap);
180
+ // Cast the inputs as the return type
181
+ return decodedInputs.return_value;
182
+ }
183
+ /**
184
+ * Executes the public kernel with private previous kernel with the given inputs
185
+ */
186
+ async function executePublicKernelSetupWithACVM(input) {
187
+ const initialWitnessMap = abiEncode(PublicKernelPrivatePreviousSimulatedJson.abi, input);
188
+ const decodedBytecode = Buffer.from(PublicKernelPrivatePreviousSimulatedJson.bytecode, 'base64');
189
+ // Execute the circuit
190
+ const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
191
+ throw Error('unexpected oracle during execution');
192
+ });
193
+ // Decode the witness map into two fields, the return values and the inputs
194
+ const decodedInputs = abiDecode(PublicKernelPrivatePreviousSimulatedJson.abi, _witnessMap);
195
+ // Cast the inputs as the return type
196
+ return decodedInputs.return_value;
197
+ }
198
+ /**
199
+ * Executes the ordering private kernel with the given inputs using the acvm.
200
+ */
201
+ async function executePublicKernelAppLogicWithACVM(input) {
202
+ const initialWitnessMap = abiEncode(PublicKernelPublicPreviousSimulatedJson.abi, input);
203
+ const decodedBytecode = Buffer.from(PublicKernelPublicPreviousSimulatedJson.bytecode, 'base64');
204
+ // Execute the circuit
205
+ const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
206
+ throw Error('unexpected oracle during execution');
207
+ });
208
+ // Decode the witness map into two fields, the return values and the inputs
209
+ const decodedInputs = abiDecode(PublicKernelPublicPreviousSimulatedJson.abi, _witnessMap);
210
+ // Cast the inputs as the return type
211
+ return decodedInputs.return_value;
212
+ }
213
+ /**
214
+ * Executes the root rollup with the given inputs using the acvm.
215
+ */
216
+ async function executeRootRollupWithACVM(input) {
217
+ const initialWitnessMap = abiEncode(RootRollupJson.abi, input);
218
+ // Execute the circuit on those initial witness values
219
+ //
220
+ // Decode the bytecode from base64 since the acvm does not know about base64 encoding
221
+ const decodedBytecode = Buffer.from(RootRollupJson.bytecode, 'base64');
222
+ //
223
+ // Execute the circuit
224
+ const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
225
+ throw Error('unexpected oracle during execution');
226
+ });
227
+ const decodedInputs = abiDecode(RootRollupJson.abi, _witnessMap);
228
+ // Cast the inputs as the return type
229
+ return decodedInputs.return_value;
230
+ }
231
+ /**
232
+ * Executes the merge rollup with the given inputs using the acvm.
233
+ */
234
+ async function executeMergeRollupWithACVM(input) {
235
+ const initialWitnessMap = abiEncode(MergeRollupJson.abi, input);
236
+ // Execute the circuit on those initial witness values
237
+ //
238
+ // Decode the bytecode from base64 since the acvm does not know about base64 encoding
239
+ const decodedBytecode = Buffer.from(MergeRollupJson.bytecode, 'base64');
240
+ //
241
+ // Execute the circuit
242
+ const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
243
+ throw Error('unexpected oracle during execution');
244
+ });
245
+ const decodedInputs = abiDecode(MergeRollupJson.abi, _witnessMap);
246
+ // Cast the inputs as the return type
247
+ return decodedInputs.return_value;
248
+ }
249
+ /**
250
+ * Executes the base rollup with the given inputs using the acvm.
251
+ */
252
+ async function executeBaseRollupWithACVM(input) {
253
+ const initialWitnessMap = abiEncode(BaseRollupSimulatedJson.abi, input);
254
+ // Execute the circuit on those initial witness values
255
+ //
256
+ // Decode the bytecode from base64 since the acvm does not know about base64 encoding
257
+ const decodedBytecode = Buffer.from(BaseRollupSimulatedJson.bytecode, 'base64');
258
+ //
259
+ // Execute the circuit
260
+ const _witnessMap = await executeCircuitWithBlackBoxSolver(await getSolver(), decodedBytecode, initialWitnessMap, () => {
261
+ throw Error('unexpected oracle during execution');
262
+ });
263
+ // Decode the witness map into two fields, the return values and the inputs
264
+ const decodedInputs = abiDecode(BaseRollupSimulatedJson.abi, _witnessMap);
265
+ // Cast the inputs as the return type
266
+ return decodedInputs.return_value;
267
+ }
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBLE9BQU8sRUFBOEIsb0JBQW9CLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4SCxPQUFPLEVBQU8sU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWpFLE9BQU8scUJBQXFCLE1BQU0sbUNBQW1DLENBQUMsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDOUYsT0FBTyw4QkFBOEIsTUFBTSw2Q0FBNkMsQ0FBQyxTQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNqSCxPQUFPLHNCQUFzQixNQUFNLG9DQUFvQyxDQUFDLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2hHLE9BQU8sK0JBQStCLE1BQU0sOENBQThDLENBQUMsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDbkgsT0FBTyxxQkFBcUIsTUFBTSxtQ0FBbUMsQ0FBQyxTQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUM5RixPQUFPLDhCQUE4QixNQUFNLDZDQUE2QyxDQUFDLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2pILE9BQU8sOEJBQThCLE1BQU0sdUNBQXVDLENBQUMsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDM0csT0FBTyx1Q0FBdUMsTUFBTSxpREFBaUQsQ0FBQyxTQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUM5SCxPQUFPLCtCQUErQixNQUFNLG1DQUFtQyxDQUFDLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ3hHLE9BQU8sd0NBQXdDLE1BQU0sNkNBQTZDLENBQUMsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDM0gsT0FBTyx1QkFBdUIsTUFBTSxxQ0FBcUMsQ0FBQyxTQUFT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
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generate_ts_from_abi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate_ts_from_abi.d.ts","sourceRoot":"","sources":["../../src/scripts/generate_ts_from_abi.ts"],"names":[],"mappings":""}
@@ -0,0 +1,180 @@
1
+ import { createConsoleLogger } from '@aztec/foundation/log';
2
+ import fs from 'fs/promises';
3
+ const log = createConsoleLogger('aztec:noir-contracts');
4
+ const noirPrimitiveTypesToTsTypes = new Map();
5
+ /**
6
+ * Typescript does not allow us to check for equality of non-primitive types
7
+ * easily, so we create a addIfUnique function that will only add an item
8
+ * to the map if it is not already there by using JSON.stringify.
9
+ * @param item - The item to add to the map.
10
+ */
11
+ function addIfUnique(item) {
12
+ const key = JSON.stringify(item);
13
+ if (!noirPrimitiveTypesToTsTypes.has(key)) {
14
+ noirPrimitiveTypesToTsTypes.set(key, item);
15
+ }
16
+ }
17
+ /**
18
+ * Converts an ABI type to a TypeScript type.
19
+ * @param type - The ABI type to convert.
20
+ * @returns The typescript code to define the type.
21
+ */
22
+ function abiTypeToTs(type) {
23
+ switch (type.kind) {
24
+ case 'integer': {
25
+ let tsIntType = '';
26
+ if (type.sign === 'signed') {
27
+ tsIntType = `i${type.width}`;
28
+ }
29
+ else {
30
+ tsIntType = `u${type.width}`;
31
+ }
32
+ addIfUnique({ aliasName: tsIntType, tsType: 'string' });
33
+ return tsIntType;
34
+ }
35
+ case 'boolean':
36
+ return `boolean`;
37
+ case 'array':
38
+ return `FixedLengthArray<${abiTypeToTs(type.type)}, ${type.length}>`;
39
+ case 'struct':
40
+ return getLastComponentOfPath(type.path);
41
+ case 'field':
42
+ addIfUnique({ aliasName: 'Field', tsType: 'string' });
43
+ return 'Field';
44
+ default:
45
+ throw new Error(`Unknown ABI type ${type}`);
46
+ }
47
+ }
48
+ /**
49
+ * Returns the last component of a path, e.g. "foo::bar::baz" -\> "baz"
50
+ * Note: that if we have a path such as "Baz", we will return "Baz".
51
+ *
52
+ * Since these paths corresponds to structs, we can assume that we
53
+ * cannot have "foo::bar::".
54
+ *
55
+ * We also make the assumption that since these paths are coming from
56
+ * Noir, then we will not have two paths that look like this:
57
+ * - foo::bar::Baz
58
+ * - cat::dog::Baz
59
+ * ie the last component of the path (struct name) is enough to uniquely identify
60
+ * the whole path.
61
+ *
62
+ * TODO: We should double check this assumption when we use type aliases,
63
+ * I expect that `foo::bar::Baz as Dog` would effectively give `foo::bar::Dog`
64
+ * @param str - The path to get the last component of.
65
+ * @returns The last component of the path.
66
+ */
67
+ function getLastComponentOfPath(str) {
68
+ const parts = str.split('::');
69
+ const lastPart = parts[parts.length - 1];
70
+ return lastPart;
71
+ }
72
+ /**
73
+ * Generates TypeScript interfaces for the structs used in the ABI.
74
+ * @param type - The ABI type to generate the interface for.
75
+ * @param output - The set of structs that we have already generated bindings for.
76
+ * @returns The TypeScript code to define the struct.
77
+ */
78
+ function generateStructInterfaces(type, output) {
79
+ let result = '';
80
+ // Edge case to handle the array of structs case.
81
+ if (type.kind === 'array' &&
82
+ ((type.type.kind === 'struct' && !output.has(getLastComponentOfPath(type.type.path))) || type.type.kind === 'array')) {
83
+ result += generateStructInterfaces(type.type, output);
84
+ }
85
+ if (type.kind !== 'struct') {
86
+ return result;
87
+ }
88
+ // List of structs encountered while viewing this type that we need to generate
89
+ // bindings for.
90
+ const typesEncountered = new Set();
91
+ // Codegen the struct and then its fields, so that the structs fields
92
+ // are defined before the struct itself.
93
+ let codeGeneratedStruct = '';
94
+ let codeGeneratedStructFields = '';
95
+ const structName = getLastComponentOfPath(type.path);
96
+ if (!output.has(structName)) {
97
+ codeGeneratedStruct += `export interface ${structName} {\n`;
98
+ for (const field of type.fields) {
99
+ codeGeneratedStruct += ` ${field.name}: ${abiTypeToTs(field.type)};\n`;
100
+ typesEncountered.add(field.type);
101
+ }
102
+ codeGeneratedStruct += `}\n\n`;
103
+ output.add(structName);
104
+ // Generate code for the encountered structs in the field above
105
+ for (const type of typesEncountered) {
106
+ codeGeneratedStructFields += generateStructInterfaces(type, output);
107
+ }
108
+ }
109
+ return codeGeneratedStructFields + '\n' + codeGeneratedStruct;
110
+ }
111
+ /**
112
+ * Generates a TypeScript interface for the ABI.
113
+ * @param abiObj - The ABI to generate the interface for.
114
+ * @returns The TypeScript code to define the interface.
115
+ */
116
+ function generateTsInterface(abiObj) {
117
+ let result = ``;
118
+ const outputStructs = new Set();
119
+ // Define structs for composite types
120
+ for (const param of abiObj.parameters) {
121
+ result += generateStructInterfaces(param.type, outputStructs);
122
+ }
123
+ // Generating Return type, if it exists
124
+ //
125
+ if (abiObj.return_type != null) {
126
+ result += generateStructInterfaces(abiObj.return_type.abi_type, outputStructs);
127
+ result += `export type ReturnType = ${abiTypeToTs(abiObj.return_type.abi_type)};\n`;
128
+ }
129
+ // Generating Input type
130
+ result += '\nexport interface InputType {\n';
131
+ for (const param of abiObj.parameters) {
132
+ result += ` ${param.name}: ${abiTypeToTs(param.type)};\n`;
133
+ }
134
+ result += '}';
135
+ // Add the primitive Noir types that do not have a 1-1 mapping to TypeScript.
136
+ let primitiveTypeAliases = '';
137
+ for (const [, value] of noirPrimitiveTypesToTsTypes) {
138
+ primitiveTypeAliases += `\nexport type ${value.aliasName} = ${value.tsType};`;
139
+ }
140
+ const fixedLengthArray = '\nexport type FixedLengthArray<T, L extends number> = L extends 0 ? never[]: T[] & { length: L }';
141
+ return (`/* Autogenerated file, do not edit! */\n\n/* eslint-disable */\n` +
142
+ fixedLengthArray +
143
+ '\n' +
144
+ primitiveTypeAliases +
145
+ '\n' +
146
+ result);
147
+ }
148
+ const circuits = [
149
+ 'private_kernel_init',
150
+ 'private_kernel_inner',
151
+ 'private_kernel_tail',
152
+ 'public_kernel_setup',
153
+ 'public_kernel_app_logic',
154
+ 'rollup_base',
155
+ 'rollup_merge',
156
+ 'rollup_root',
157
+ ];
158
+ const main = async () => {
159
+ try {
160
+ await fs.access('./src/types/');
161
+ }
162
+ catch (error) {
163
+ await fs.mkdir('./src/types', { recursive: true });
164
+ }
165
+ for (const circuit of circuits) {
166
+ const rawData = await fs.readFile(`./src/target/${circuit}.json`, 'utf-8');
167
+ const abiObj = JSON.parse(rawData);
168
+ const generatedInterface = generateTsInterface(abiObj.abi);
169
+ const outputFile = `./src/types/${circuit}_types.ts`;
170
+ await fs.writeFile(outputFile, generatedInterface);
171
+ }
172
+ };
173
+ try {
174
+ await main();
175
+ }
176
+ catch (err) {
177
+ log(`Error generating types ${err}`);
178
+ process.exit(1);
179
+ }
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVfdHNfZnJvbV9hYmkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9nZW5lcmF0ZV90c19mcm9tX2FiaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUc1RCxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFN0IsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQTBCeEQsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztBQUUxRTs7Ozs7R0FLRztBQUNILFNBQVMsV0FBVyxDQUFDLElBQXdCO0lBQzNDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxXQUFXLENBQUMsSUFBYTtJQUNoQyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDZixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMzQixTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDL0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQixDQUFDO1lBQ0QsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFB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