@aztec/pxe 0.0.0-test.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 (182) hide show
  1. package/README.md +13 -0
  2. package/dest/bin/index.d.ts +3 -0
  3. package/dest/bin/index.d.ts.map +1 -0
  4. package/dest/bin/index.js +28 -0
  5. package/dest/config/index.d.ts +48 -0
  6. package/dest/config/index.d.ts.map +1 -0
  7. package/dest/config/index.js +74 -0
  8. package/dest/config/package_info.d.ts +5 -0
  9. package/dest/config/package_info.d.ts.map +1 -0
  10. package/dest/config/package_info.js +6 -0
  11. package/dest/entrypoints/client/bundle/index.d.ts +6 -0
  12. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -0
  13. package/dest/entrypoints/client/bundle/index.js +5 -0
  14. package/dest/entrypoints/client/bundle/utils.d.ts +16 -0
  15. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -0
  16. package/dest/entrypoints/client/bundle/utils.js +30 -0
  17. package/dest/entrypoints/client/lazy/index.d.ts +6 -0
  18. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -0
  19. package/dest/entrypoints/client/lazy/index.js +5 -0
  20. package/dest/entrypoints/client/lazy/utils.d.ts +15 -0
  21. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -0
  22. package/dest/entrypoints/client/lazy/utils.js +29 -0
  23. package/dest/entrypoints/client/pxe_creation_options.d.ts +11 -0
  24. package/dest/entrypoints/client/pxe_creation_options.d.ts.map +1 -0
  25. package/dest/entrypoints/client/pxe_creation_options.js +1 -0
  26. package/dest/entrypoints/server/index.d.ts +7 -0
  27. package/dest/entrypoints/server/index.d.ts.map +1 -0
  28. package/dest/entrypoints/server/index.js +6 -0
  29. package/dest/entrypoints/server/utils.d.ts +16 -0
  30. package/dest/entrypoints/server/utils.d.ts.map +1 -0
  31. package/dest/entrypoints/server/utils.js +45 -0
  32. package/dest/kernel_oracle/index.d.ts +45 -0
  33. package/dest/kernel_oracle/index.d.ts.map +1 -0
  34. package/dest/kernel_oracle/index.js +76 -0
  35. package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.d.ts +28 -0
  36. package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.d.ts.map +1 -0
  37. package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.js +270 -0
  38. package/dest/kernel_prover/hints/index.d.ts +2 -0
  39. package/dest/kernel_prover/hints/index.d.ts.map +1 -0
  40. package/dest/kernel_prover/hints/index.js +1 -0
  41. package/dest/kernel_prover/index.d.ts +3 -0
  42. package/dest/kernel_prover/index.d.ts.map +1 -0
  43. package/dest/kernel_prover/index.js +2 -0
  44. package/dest/kernel_prover/kernel_prover.d.ts +38 -0
  45. package/dest/kernel_prover/kernel_prover.d.ts.map +1 -0
  46. package/dest/kernel_prover/kernel_prover.js +217 -0
  47. package/dest/kernel_prover/proving_data_oracle.d.ts +73 -0
  48. package/dest/kernel_prover/proving_data_oracle.d.ts.map +1 -0
  49. package/dest/kernel_prover/proving_data_oracle.js +4 -0
  50. package/dest/note_decryption_utils/add_public_values_to_payload.d.ts +11 -0
  51. package/dest/note_decryption_utils/add_public_values_to_payload.d.ts.map +1 -0
  52. package/dest/note_decryption_utils/add_public_values_to_payload.js +47 -0
  53. package/dest/pxe_http/index.d.ts +2 -0
  54. package/dest/pxe_http/index.d.ts.map +1 -0
  55. package/dest/pxe_http/index.js +1 -0
  56. package/dest/pxe_http/pxe_http_server.d.ts +16 -0
  57. package/dest/pxe_http/pxe_http_server.d.ts.map +1 -0
  58. package/dest/pxe_http/pxe_http_server.js +27 -0
  59. package/dest/pxe_oracle_interface/index.d.ts +159 -0
  60. package/dest/pxe_oracle_interface/index.d.ts.map +1 -0
  61. package/dest/pxe_oracle_interface/index.js +692 -0
  62. package/dest/pxe_oracle_interface/tagging_utils.d.ts +17 -0
  63. package/dest/pxe_oracle_interface/tagging_utils.d.ts.map +1 -0
  64. package/dest/pxe_oracle_interface/tagging_utils.js +23 -0
  65. package/dest/pxe_service/error_enriching.d.ts +11 -0
  66. package/dest/pxe_service/error_enriching.d.ts.map +1 -0
  67. package/dest/pxe_service/error_enriching.js +69 -0
  68. package/dest/pxe_service/index.d.ts +3 -0
  69. package/dest/pxe_service/index.d.ts.map +1 -0
  70. package/dest/pxe_service/index.js +2 -0
  71. package/dest/pxe_service/pxe_service.d.ts +111 -0
  72. package/dest/pxe_service/pxe_service.d.ts.map +1 -0
  73. package/dest/pxe_service/pxe_service.js +664 -0
  74. package/dest/storage/address_data_provider/address_data_provider.d.ts +13 -0
  75. package/dest/storage/address_data_provider/address_data_provider.d.ts.map +1 -0
  76. package/dest/storage/address_data_provider/address_data_provider.js +50 -0
  77. package/dest/storage/address_data_provider/index.d.ts +2 -0
  78. package/dest/storage/address_data_provider/index.d.ts.map +1 -0
  79. package/dest/storage/address_data_provider/index.js +1 -0
  80. package/dest/storage/auth_witness_data_provider/auth_witness_data_provider.d.ts +11 -0
  81. package/dest/storage/auth_witness_data_provider/auth_witness_data_provider.d.ts.map +1 -0
  82. package/dest/storage/auth_witness_data_provider/auth_witness_data_provider.js +20 -0
  83. package/dest/storage/auth_witness_data_provider/index.d.ts +2 -0
  84. package/dest/storage/auth_witness_data_provider/index.d.ts.map +1 -0
  85. package/dest/storage/auth_witness_data_provider/index.js +1 -0
  86. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts +16 -0
  87. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts.map +1 -0
  88. package/dest/storage/capsule_data_provider/capsule_data_provider.js +57 -0
  89. package/dest/storage/capsule_data_provider/index.d.ts +2 -0
  90. package/dest/storage/capsule_data_provider/index.d.ts.map +1 -0
  91. package/dest/storage/capsule_data_provider/index.js +1 -0
  92. package/dest/storage/contract_data_provider/contract_data_provider.d.ts +109 -0
  93. package/dest/storage/contract_data_provider/contract_data_provider.d.ts.map +1 -0
  94. package/dest/storage/contract_data_provider/contract_data_provider.js +183 -0
  95. package/dest/storage/contract_data_provider/index.d.ts +3 -0
  96. package/dest/storage/contract_data_provider/index.d.ts.map +1 -0
  97. package/dest/storage/contract_data_provider/index.js +2 -0
  98. package/dest/storage/contract_data_provider/private_functions_tree.d.ts +66 -0
  99. package/dest/storage/contract_data_provider/private_functions_tree.d.ts.map +1 -0
  100. package/dest/storage/contract_data_provider/private_functions_tree.js +99 -0
  101. package/dest/storage/data_provider.d.ts +4 -0
  102. package/dest/storage/data_provider.d.ts.map +1 -0
  103. package/dest/storage/data_provider.js +1 -0
  104. package/dest/storage/index.d.ts +10 -0
  105. package/dest/storage/index.d.ts.map +1 -0
  106. package/dest/storage/index.js +9 -0
  107. package/dest/storage/note_data_provider/index.d.ts +3 -0
  108. package/dest/storage/note_data_provider/index.d.ts.map +1 -0
  109. package/dest/storage/note_data_provider/index.js +2 -0
  110. package/dest/storage/note_data_provider/note_dao.d.ts +106 -0
  111. package/dest/storage/note_data_provider/note_dao.d.ts.map +1 -0
  112. package/dest/storage/note_data_provider/note_dao.js +106 -0
  113. package/dest/storage/note_data_provider/note_data_provider.d.ts +20 -0
  114. package/dest/storage/note_data_provider/note_data_provider.d.ts.map +1 -0
  115. package/dest/storage/note_data_provider/note_data_provider.js +249 -0
  116. package/dest/storage/sync_data_provider/index.d.ts +2 -0
  117. package/dest/storage/sync_data_provider/index.d.ts.map +1 -0
  118. package/dest/storage/sync_data_provider/index.js +1 -0
  119. package/dest/storage/sync_data_provider/sync_data_provider.d.ts +12 -0
  120. package/dest/storage/sync_data_provider/sync_data_provider.d.ts.map +1 -0
  121. package/dest/storage/sync_data_provider/sync_data_provider.js +29 -0
  122. package/dest/storage/tagging_data_provider/index.d.ts +2 -0
  123. package/dest/storage/tagging_data_provider/index.d.ts.map +1 -0
  124. package/dest/storage/tagging_data_provider/index.js +1 -0
  125. package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts +18 -0
  126. package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts.map +1 -0
  127. package/dest/storage/tagging_data_provider/tagging_data_provider.js +65 -0
  128. package/dest/synchronizer/index.d.ts +2 -0
  129. package/dest/synchronizer/index.d.ts.map +1 -0
  130. package/dest/synchronizer/index.js +1 -0
  131. package/dest/synchronizer/synchronizer.d.ts +37 -0
  132. package/dest/synchronizer/synchronizer.d.ts.map +1 -0
  133. package/dest/synchronizer/synchronizer.js +103 -0
  134. package/dest/test/pxe_test_suite.d.ts +3 -0
  135. package/dest/test/pxe_test_suite.d.ts.map +1 -0
  136. package/dest/test/pxe_test_suite.js +97 -0
  137. package/package.json +105 -0
  138. package/src/bin/index.ts +38 -0
  139. package/src/config/index.ts +124 -0
  140. package/src/config/package_info.ts +3 -0
  141. package/src/entrypoints/client/bundle/index.ts +5 -0
  142. package/src/entrypoints/client/bundle/utils.ts +58 -0
  143. package/src/entrypoints/client/lazy/index.ts +5 -0
  144. package/src/entrypoints/client/lazy/utils.ts +53 -0
  145. package/src/entrypoints/client/pxe_creation_options.ts +7 -0
  146. package/src/entrypoints/server/index.ts +6 -0
  147. package/src/entrypoints/server/utils.ts +71 -0
  148. package/src/kernel_oracle/index.ts +117 -0
  149. package/src/kernel_prover/hints/build_private_kernel_reset_private_inputs.ts +472 -0
  150. package/src/kernel_prover/hints/index.ts +1 -0
  151. package/src/kernel_prover/index.ts +2 -0
  152. package/src/kernel_prover/kernel_prover.ts +351 -0
  153. package/src/kernel_prover/proving_data_oracle.ts +83 -0
  154. package/src/note_decryption_utils/add_public_values_to_payload.ts +64 -0
  155. package/src/pxe_http/index.ts +1 -0
  156. package/src/pxe_http/pxe_http_server.ts +29 -0
  157. package/src/pxe_oracle_interface/index.ts +925 -0
  158. package/src/pxe_oracle_interface/tagging_utils.ts +32 -0
  159. package/src/pxe_service/error_enriching.ts +106 -0
  160. package/src/pxe_service/index.ts +2 -0
  161. package/src/pxe_service/pxe_service.ts +949 -0
  162. package/src/storage/address_data_provider/address_data_provider.ts +71 -0
  163. package/src/storage/address_data_provider/index.ts +1 -0
  164. package/src/storage/auth_witness_data_provider/auth_witness_data_provider.ts +34 -0
  165. package/src/storage/auth_witness_data_provider/index.ts +1 -0
  166. package/src/storage/capsule_data_provider/capsule_data_provider.ts +80 -0
  167. package/src/storage/capsule_data_provider/index.ts +1 -0
  168. package/src/storage/contract_data_provider/contract_data_provider.ts +261 -0
  169. package/src/storage/contract_data_provider/index.ts +2 -0
  170. package/src/storage/contract_data_provider/private_functions_tree.ts +131 -0
  171. package/src/storage/data_provider.ts +3 -0
  172. package/src/storage/index.ts +10 -0
  173. package/src/storage/note_data_provider/index.ts +2 -0
  174. package/src/storage/note_data_provider/note_dao.ts +162 -0
  175. package/src/storage/note_data_provider/note_data_provider.ts +345 -0
  176. package/src/storage/sync_data_provider/index.ts +1 -0
  177. package/src/storage/sync_data_provider/sync_data_provider.ts +40 -0
  178. package/src/storage/tagging_data_provider/index.ts +1 -0
  179. package/src/storage/tagging_data_provider/tagging_data_provider.ts +92 -0
  180. package/src/synchronizer/index.ts +1 -0
  181. package/src/synchronizer/synchronizer.ts +121 -0
  182. package/src/test/pxe_test_suite.ts +111 -0
@@ -0,0 +1,124 @@
1
+ import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
2
+ import {
3
+ type ConfigMappingsType,
4
+ booleanConfigHelper,
5
+ getConfigFromMappings,
6
+ numberConfigHelper,
7
+ parseBooleanEnv,
8
+ } from '@aztec/foundation/config';
9
+ import { type DataStoreConfig, dataConfigMappings } from '@aztec/kv-store/config';
10
+ import { type ChainConfig, chainConfigMappings } from '@aztec/stdlib/config';
11
+ import type { Network } from '@aztec/stdlib/network';
12
+
13
+ export { getPackageInfo } from './package_info.js';
14
+
15
+ /**
16
+ * Temporary configuration until WASM can be used instead of native
17
+ */
18
+ export interface BBProverConfig {
19
+ bbWorkingDirectory?: string;
20
+ bbBinaryPath?: string;
21
+ bbSkipCleanup?: boolean;
22
+ }
23
+
24
+ /**
25
+ * Configuration settings for the prover factory
26
+ */
27
+ export interface KernelProverConfig {
28
+ /** Whether we are running with real proofs */
29
+ proverEnabled?: boolean;
30
+ }
31
+ /**
32
+ * Configuration settings for the PXE.
33
+ */
34
+ export interface PXEConfig {
35
+ /** L2 block to start scanning from for new accounts */
36
+ l2StartingBlock: number;
37
+ }
38
+
39
+ export type PXEServiceConfig = PXEConfig & KernelProverConfig & BBProverConfig & DataStoreConfig & ChainConfig;
40
+
41
+ export type CliPXEOptions = {
42
+ /** External Aztec network to connect to. e.g. devnet */
43
+ network?: Network;
44
+ /** API Key required by the external network's node */
45
+ apiKey?: string;
46
+ /** Custom Aztec Node URL to connect to */
47
+ nodeUrl?: string;
48
+ };
49
+
50
+ export const pxeConfigMappings: ConfigMappingsType<PXEServiceConfig> = {
51
+ ...dataConfigMappings,
52
+ ...chainConfigMappings,
53
+ l2StartingBlock: {
54
+ env: 'PXE_L2_STARTING_BLOCK',
55
+ ...numberConfigHelper(INITIAL_L2_BLOCK_NUM),
56
+ description: 'L2 block to start scanning from for new accounts',
57
+ },
58
+ bbBinaryPath: {
59
+ env: 'BB_BINARY_PATH',
60
+ description: 'Path to the BB binary',
61
+ },
62
+ bbWorkingDirectory: {
63
+ env: 'BB_WORKING_DIRECTORY',
64
+ description: 'Working directory for the BB binary',
65
+ },
66
+ bbSkipCleanup: {
67
+ env: 'BB_SKIP_CLEANUP',
68
+ description: 'True to skip cleanup of temporary files for debugging purposes',
69
+ ...booleanConfigHelper(),
70
+ },
71
+ proverEnabled: {
72
+ env: 'PXE_PROVER_ENABLED',
73
+ description: 'Enable real proofs',
74
+ ...booleanConfigHelper(),
75
+ },
76
+ };
77
+
78
+ /**
79
+ * Creates an instance of PXEServiceConfig out of environment variables using sensible defaults for integration testing if not set.
80
+ */
81
+ export function getPXEServiceConfig(): PXEServiceConfig {
82
+ return getConfigFromMappings<PXEServiceConfig>(pxeConfigMappings);
83
+ }
84
+
85
+ export const pxeCliConfigMappings: ConfigMappingsType<CliPXEOptions> = {
86
+ network: {
87
+ env: 'NETWORK',
88
+ parseEnv: (val: string) => val as Network,
89
+ description: 'External Aztec network to connect to. e.g. devnet',
90
+ },
91
+ apiKey: {
92
+ env: 'API_KEY',
93
+ description: "API Key required by the external network's node",
94
+ },
95
+ nodeUrl: {
96
+ env: 'AZTEC_NODE_URL',
97
+ description: 'Custom Aztec Node URL to connect to',
98
+ },
99
+ };
100
+
101
+ export const allPxeConfigMappings: ConfigMappingsType<CliPXEOptions & PXEServiceConfig> = {
102
+ ...pxeConfigMappings,
103
+ ...pxeCliConfigMappings,
104
+ ...dataConfigMappings,
105
+ proverEnabled: {
106
+ env: 'PXE_PROVER_ENABLED',
107
+ parseEnv: (val: string) => parseBooleanEnv(val) || !!process.env.NETWORK,
108
+ description: 'Enable real proofs',
109
+ isBoolean: true,
110
+ },
111
+ };
112
+
113
+ /**
114
+ * Creates an instance of CliPxeOptions out of environment variables
115
+ */
116
+ export function getCliPXEOptions(): CliPXEOptions & PXEServiceConfig {
117
+ const pxeConfig = getPXEServiceConfig();
118
+ const cliOptions = getConfigFromMappings<CliPXEOptions>(pxeCliConfigMappings);
119
+ return {
120
+ ...pxeConfig,
121
+ ...cliOptions,
122
+ proverEnabled: pxeConfig.proverEnabled || !!cliOptions.network,
123
+ };
124
+ }
@@ -0,0 +1,3 @@
1
+ export function getPackageInfo() {
2
+ return { version: '0.1.0', name: '@aztec/pxe' };
3
+ }
@@ -0,0 +1,5 @@
1
+ export * from '../../../pxe_service/index.js';
2
+ export * from '../../../config/index.js';
3
+ export * from '../../../storage/index.js';
4
+ export * from './utils.js';
5
+ export { PXEOracleInterface } from '../../../pxe_oracle_interface/index.js';
@@ -0,0 +1,58 @@
1
+ import { BBWASMBundlePrivateKernelProver } from '@aztec/bb-prover/wasm/bundle';
2
+ import { createLogger } from '@aztec/foundation/log';
3
+ import { createStore } from '@aztec/kv-store/indexeddb';
4
+ import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
5
+ import { WASMSimulator } from '@aztec/simulator/client';
6
+ import type { AztecNode } from '@aztec/stdlib/interfaces/client';
7
+
8
+ import type { PXEServiceConfig } from '../../../config/index.js';
9
+ import { PXEService } from '../../../pxe_service/pxe_service.js';
10
+ import type { PXECreationOptions } from '../pxe_creation_options.js';
11
+
12
+ /**
13
+ * Create and start an PXEService instance with the given AztecNode.
14
+ * If no keyStore or database is provided, it will use KeyStore and MemoryDB as default values.
15
+ * Returns a Promise that resolves to the started PXEService instance.
16
+ *
17
+ * @param aztecNode - The AztecNode instance to be used by the server.
18
+ * @param config - The PXE Service Config to use
19
+ * @param options - (Optional) Optional information for creating an PXEService.
20
+ * @returns A Promise that resolves to the started PXEService instance.
21
+ */
22
+ export async function createPXEService(
23
+ aztecNode: AztecNode,
24
+ config: PXEServiceConfig,
25
+ options: PXECreationOptions = { loggers: {} },
26
+ ) {
27
+ const l1Contracts = await aztecNode.getL1ContractAddresses();
28
+ const configWithContracts = {
29
+ ...config,
30
+ l1Contracts,
31
+ } as PXEServiceConfig;
32
+
33
+ const store = await createStore(
34
+ 'pxe_data',
35
+ configWithContracts,
36
+ options.loggers.store ?? createLogger('pxe:data:indexeddb'),
37
+ );
38
+
39
+ const simulationProvider = new WASMSimulator();
40
+ const prover =
41
+ options.prover ??
42
+ new BBWASMBundlePrivateKernelProver(
43
+ simulationProvider,
44
+ 16,
45
+ options.loggers.prover ?? createLogger('bb:wasm:bundle'),
46
+ );
47
+ const protocolContractsProvider = new BundledProtocolContractsProvider();
48
+ const pxe = await PXEService.create(
49
+ aztecNode,
50
+ store,
51
+ prover,
52
+ simulationProvider,
53
+ protocolContractsProvider,
54
+ config,
55
+ options.loggers.pxe ?? createLogger('pxe:service'),
56
+ );
57
+ return pxe;
58
+ }
@@ -0,0 +1,5 @@
1
+ export * from '../../../pxe_service/index.js';
2
+ export * from '../../../config/index.js';
3
+ export * from '../../../storage/index.js';
4
+ export * from './utils.js';
5
+ export { PXEOracleInterface } from '../../../pxe_oracle_interface/index.js';
@@ -0,0 +1,53 @@
1
+ import { BBWASMLazyPrivateKernelProver } from '@aztec/bb-prover/wasm/lazy';
2
+ import { createLogger } from '@aztec/foundation/log';
3
+ import { createStore } from '@aztec/kv-store/indexeddb';
4
+ import { LazyProtocolContractsProvider } from '@aztec/protocol-contracts/providers/lazy';
5
+ import { WASMSimulator } from '@aztec/simulator/client';
6
+ import type { AztecNode } from '@aztec/stdlib/interfaces/client';
7
+
8
+ import type { PXEServiceConfig } from '../../../config/index.js';
9
+ import { PXEService } from '../../../pxe_service/pxe_service.js';
10
+ import type { PXECreationOptions } from '../pxe_creation_options.js';
11
+
12
+ /**
13
+ * Create and start an PXEService instance with the given AztecNode.
14
+ * Returns a Promise that resolves to the started PXEService instance.
15
+ *
16
+ * @param aztecNode - The AztecNode instance to be used by the server.
17
+ * @param config - The PXE Service Config to use
18
+ * @param
19
+ * @returns A Promise that resolves to the started PXEService instance.
20
+ */
21
+ export async function createPXEService(
22
+ aztecNode: AztecNode,
23
+ config: PXEServiceConfig,
24
+ options: PXECreationOptions = { loggers: {} },
25
+ ) {
26
+ const l1Contracts = await aztecNode.getL1ContractAddresses();
27
+ const configWithContracts = {
28
+ ...config,
29
+ l1Contracts,
30
+ } as PXEServiceConfig;
31
+
32
+ const store = await createStore(
33
+ 'pxe_data',
34
+ configWithContracts,
35
+ options.loggers.store ?? createLogger('pxe:data:indexeddb'),
36
+ );
37
+
38
+ const simulationProvider = new WASMSimulator();
39
+ const prover =
40
+ options.prover ??
41
+ new BBWASMLazyPrivateKernelProver(simulationProvider, 16, options.loggers.prover ?? createLogger('bb:wasm:lazy'));
42
+ const protocolContractsProvider = new LazyProtocolContractsProvider();
43
+ const pxe = await PXEService.create(
44
+ aztecNode,
45
+ store,
46
+ prover,
47
+ simulationProvider,
48
+ protocolContractsProvider,
49
+ config,
50
+ options.loggers.pxe ?? createLogger('pxe:service'),
51
+ );
52
+ return pxe;
53
+ }
@@ -0,0 +1,7 @@
1
+ import type { Logger } from '@aztec/foundation/log';
2
+ import type { PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
3
+
4
+ export type PXECreationOptions = {
5
+ loggers: { store?: Logger; pxe?: Logger; prover?: Logger };
6
+ prover?: PrivateKernelProver;
7
+ };
@@ -0,0 +1,6 @@
1
+ export * from '../../pxe_service/index.js';
2
+ export * from '../../pxe_http/index.js';
3
+ export * from '../../config/index.js';
4
+ export * from '../../storage/index.js';
5
+ export * from './utils.js';
6
+ export { PXEOracleInterface } from '../../pxe_oracle_interface/index.js';
@@ -0,0 +1,71 @@
1
+ import { BBNativePrivateKernelProver } from '@aztec/bb-prover';
2
+ import { BBWASMBundlePrivateKernelProver } from '@aztec/bb-prover/wasm/bundle';
3
+ import { randomBytes } from '@aztec/foundation/crypto';
4
+ import { createLogger } from '@aztec/foundation/log';
5
+ import { createStore } from '@aztec/kv-store/lmdb-v2';
6
+ import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
7
+ import { type SimulationProvider, WASMSimulator } from '@aztec/simulator/client';
8
+ import type { AztecNode, PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
9
+
10
+ import type { PXEServiceConfig } from '../../config/index.js';
11
+ import { PXEService } from '../../pxe_service/pxe_service.js';
12
+ import { PXE_DATA_SCHEMA_VERSION } from './index.js';
13
+
14
+ /**
15
+ * Create and start an PXEService instance with the given AztecNode.
16
+ * If no keyStore or database is provided, it will use KeyStore and MemoryDB as default values.
17
+ * Returns a Promise that resolves to the started PXEService instance.
18
+ *
19
+ * @param aztecNode - The AztecNode instance to be used by the server.
20
+ * @param config - The PXE Service Config to use
21
+ * @param useLogSuffix - (Optional) Log suffix for PXE's logger.
22
+ * @param proofCreator - An optional proof creator to use in place of any other configuration
23
+ * @returns A Promise that resolves to the started PXEService instance.
24
+ */
25
+ export async function createPXEService(
26
+ aztecNode: AztecNode,
27
+ config: PXEServiceConfig,
28
+ useLogSuffix: string | boolean | undefined = undefined,
29
+ proofCreator?: PrivateKernelProver,
30
+ ) {
31
+ const logSuffix =
32
+ typeof useLogSuffix === 'boolean' ? (useLogSuffix ? randomBytes(3).toString('hex') : undefined) : useLogSuffix;
33
+
34
+ const l1Contracts = await aztecNode.getL1ContractAddresses();
35
+ const configWithContracts = {
36
+ ...config,
37
+ l1Contracts,
38
+ } as PXEServiceConfig;
39
+
40
+ const store = await createStore(
41
+ 'pxe_data',
42
+ PXE_DATA_SCHEMA_VERSION,
43
+ configWithContracts,
44
+ createLogger('pxe:data:lmdb'),
45
+ );
46
+
47
+ const simulationProvider = new WASMSimulator();
48
+ const prover = proofCreator ?? (await createProver(config, simulationProvider, logSuffix));
49
+ const protocolContractsProvider = new BundledProtocolContractsProvider();
50
+ const pxe = await PXEService.create(
51
+ aztecNode,
52
+ store,
53
+ prover,
54
+ simulationProvider,
55
+ protocolContractsProvider,
56
+ config,
57
+ logSuffix,
58
+ );
59
+ return pxe;
60
+ }
61
+
62
+ function createProver(config: PXEServiceConfig, simulationProvider: SimulationProvider, logSuffix?: string) {
63
+ if (!config.bbBinaryPath || !config.bbWorkingDirectory) {
64
+ return new BBWASMBundlePrivateKernelProver(simulationProvider, 16);
65
+ } else {
66
+ const bbConfig = config as Required<Pick<PXEServiceConfig, 'bbBinaryPath' | 'bbWorkingDirectory'>> &
67
+ PXEServiceConfig;
68
+ const log = createLogger('pxe:bb-native-prover' + (logSuffix ? `:${logSuffix}` : ''));
69
+ return BBNativePrivateKernelProver.new({ bbSkipCleanup: false, ...bbConfig }, simulationProvider, log);
70
+ }
71
+ }
@@ -0,0 +1,117 @@
1
+ import { type NOTE_HASH_TREE_HEIGHT, PUBLIC_DATA_TREE_HEIGHT, VK_TREE_HEIGHT } from '@aztec/constants';
2
+ import type { Fr, GrumpkinScalar, Point } from '@aztec/foundation/fields';
3
+ import { createLogger } from '@aztec/foundation/log';
4
+ import type { Tuple } from '@aztec/foundation/serialize';
5
+ import { MembershipWitness } from '@aztec/foundation/trees';
6
+ import type { KeyStore } from '@aztec/key-store';
7
+ import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types/vk-tree';
8
+ import { ProtocolContractAddress } from '@aztec/protocol-contracts';
9
+ import type { FunctionSelector } from '@aztec/stdlib/abi';
10
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
11
+ import type { L2BlockNumber } from '@aztec/stdlib/block';
12
+ import { computeContractClassIdPreimage, computeSaltedInitializationHash } from '@aztec/stdlib/contract';
13
+ import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
14
+ import type { AztecNode } from '@aztec/stdlib/interfaces/client';
15
+ import { UpdatedClassIdHints } from '@aztec/stdlib/kernel';
16
+ import { SharedMutableValues, SharedMutableValuesWithHash } from '@aztec/stdlib/shared-mutable';
17
+ import type { NullifierMembershipWitness } from '@aztec/stdlib/trees';
18
+ import type { VerificationKeyAsFields } from '@aztec/stdlib/vks';
19
+
20
+ import type { ContractDataProvider } from '../storage/contract_data_provider/contract_data_provider.js';
21
+ import type { ProvingDataOracle } from './../kernel_prover/proving_data_oracle.js';
22
+
23
+ // TODO: Block number should not be "latest".
24
+ // It should be fixed at the time the proof is being simulated. I.e., it should be the same as the value defined in the constant data.
25
+ /**
26
+ * A data oracle that provides information needed for simulating a transaction.
27
+ */
28
+ export class KernelOracle implements ProvingDataOracle {
29
+ constructor(
30
+ private contractDataProvider: ContractDataProvider,
31
+ private keyStore: KeyStore,
32
+ private node: AztecNode,
33
+ private blockNumber: L2BlockNumber = 'latest',
34
+ private log = createLogger('pxe:kernel_oracle'),
35
+ ) {}
36
+
37
+ public async getContractAddressPreimage(address: AztecAddress) {
38
+ const instance = await this.contractDataProvider.getContractInstance(address);
39
+ return {
40
+ saltedInitializationHash: await computeSaltedInitializationHash(instance),
41
+ ...instance,
42
+ };
43
+ }
44
+
45
+ public async getContractClassIdPreimage(contractClassId: Fr) {
46
+ const contractClass = await this.contractDataProvider.getContractClass(contractClassId);
47
+ return computeContractClassIdPreimage(contractClass);
48
+ }
49
+
50
+ public async getFunctionMembershipWitness(contractClassId: Fr, selector: FunctionSelector) {
51
+ return await this.contractDataProvider.getFunctionMembershipWitness(contractClassId, selector);
52
+ }
53
+
54
+ public getVkMembershipWitness(vk: VerificationKeyAsFields) {
55
+ const leafIndex = getVKIndex(vk);
56
+ return Promise.resolve(new MembershipWitness(VK_TREE_HEIGHT, BigInt(leafIndex), getVKSiblingPath(leafIndex)));
57
+ }
58
+
59
+ async getNoteHashMembershipWitness(leafIndex: bigint): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT>> {
60
+ const path = await this.node.getNoteHashSiblingPath(this.blockNumber, leafIndex);
61
+ return new MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT>(
62
+ path.pathSize,
63
+ leafIndex,
64
+ path.toFields() as Tuple<Fr, typeof NOTE_HASH_TREE_HEIGHT>,
65
+ );
66
+ }
67
+
68
+ getNullifierMembershipWitness(nullifier: Fr): Promise<NullifierMembershipWitness | undefined> {
69
+ return this.node.getNullifierMembershipWitness(this.blockNumber, nullifier);
70
+ }
71
+
72
+ async getNoteHashTreeRoot(): Promise<Fr> {
73
+ const header = await this.node.getBlockHeader(this.blockNumber);
74
+ if (!header) {
75
+ throw new Error(`No block header found for block number ${this.blockNumber}`);
76
+ }
77
+ return header.state.partial.noteHashTree.root;
78
+ }
79
+
80
+ public getMasterSecretKey(masterPublicKey: Point): Promise<GrumpkinScalar> {
81
+ return this.keyStore.getMasterSecretKey(masterPublicKey);
82
+ }
83
+
84
+ public getDebugFunctionName(contractAddress: AztecAddress, selector: FunctionSelector): Promise<string> {
85
+ return this.contractDataProvider.getDebugFunctionName(contractAddress, selector);
86
+ }
87
+
88
+ public async getUpdatedClassIdHints(contractAddress: AztecAddress): Promise<UpdatedClassIdHints> {
89
+ const { sharedMutableSlot, sharedMutableHashSlot } = await SharedMutableValuesWithHash.getContractUpdateSlots(
90
+ contractAddress,
91
+ );
92
+
93
+ const hashLeafSlot = await computePublicDataTreeLeafSlot(
94
+ ProtocolContractAddress.ContractInstanceDeployer,
95
+ sharedMutableHashSlot,
96
+ );
97
+ const updatedClassIdWitness = await this.node.getPublicDataTreeWitness(this.blockNumber, hashLeafSlot);
98
+
99
+ if (!updatedClassIdWitness) {
100
+ throw new Error(`No public data tree witness found for ${hashLeafSlot}`);
101
+ }
102
+
103
+ const readStorage = (storageSlot: Fr) =>
104
+ this.node.getPublicStorageAt(this.blockNumber, ProtocolContractAddress.ContractInstanceDeployer, storageSlot);
105
+ const sharedMutableValues = await SharedMutableValues.readFromTree(sharedMutableSlot, readStorage);
106
+
107
+ return new UpdatedClassIdHints(
108
+ new MembershipWitness(
109
+ PUBLIC_DATA_TREE_HEIGHT,
110
+ updatedClassIdWitness.index,
111
+ updatedClassIdWitness.siblingPath.toTuple(),
112
+ ),
113
+ updatedClassIdWitness.leafPreimage,
114
+ sharedMutableValues,
115
+ );
116
+ }
117
+ }