@aztec/pxe 5.0.0-rc.1 → 5.0.0-rc.2

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 (218) hide show
  1. package/dest/block_synchronizer/block_stream_source.d.ts +5 -5
  2. package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -1
  3. package/dest/block_synchronizer/block_stream_source.js +4 -29
  4. package/dest/block_synchronizer/block_synchronizer.d.ts +13 -11
  5. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  6. package/dest/block_synchronizer/block_synchronizer.js +43 -15
  7. package/dest/config/index.d.ts +2 -1
  8. package/dest/config/index.d.ts.map +1 -1
  9. package/dest/config/index.js +1 -0
  10. package/dest/contract_function_simulator/contract_function_simulator.d.ts +11 -16
  11. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  12. package/dest/contract_function_simulator/contract_function_simulator.js +22 -18
  13. package/dest/contract_function_simulator/index.d.ts +15 -9
  14. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  15. package/dest/contract_function_simulator/index.js +3 -7
  16. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +8 -27
  17. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -1
  18. package/dest/contract_function_simulator/noir-structs/bounded_vec.js +8 -23
  19. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts +9 -0
  20. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts.map +1 -0
  21. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.js +1 -0
  22. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts +7 -0
  23. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts.map +1 -0
  24. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.js +1 -0
  25. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
  26. package/dest/contract_function_simulator/noir-structs/fact.d.ts +16 -0
  27. package/dest/contract_function_simulator/noir-structs/fact.d.ts.map +1 -0
  28. package/dest/contract_function_simulator/noir-structs/fact.js +6 -0
  29. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts +27 -0
  30. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts.map +1 -0
  31. package/dest/contract_function_simulator/noir-structs/fact_collection.js +29 -0
  32. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +11 -12
  33. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
  34. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +6 -49
  35. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +4 -8
  36. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  37. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -60
  38. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +2 -2
  39. package/dest/contract_function_simulator/noir-structs/option.d.ts +9 -11
  40. package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -1
  41. package/dest/contract_function_simulator/noir-structs/option.js +18 -13
  42. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts +11 -0
  43. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts.map +1 -0
  44. package/dest/contract_function_simulator/noir-structs/origin_block.js +5 -0
  45. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +5 -8
  46. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -1
  47. package/dest/contract_function_simulator/noir-structs/provided_secret.js +1 -14
  48. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts +21 -0
  49. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts.map +1 -0
  50. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.js +33 -0
  51. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts +21 -0
  52. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts.map +1 -0
  53. package/dest/contract_function_simulator/noir-structs/resolved_tx.js +50 -0
  54. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts +14 -0
  55. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts.map +1 -0
  56. package/dest/contract_function_simulator/noir-structs/tx_effect_data.js +5 -0
  57. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +6 -11
  58. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  59. package/dest/contract_function_simulator/noir-structs/utility_context.js +1 -20
  60. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -14
  61. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  62. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +1 -24
  63. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +81 -6
  64. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -1
  65. package/dest/contract_function_simulator/oracle/oracle_registry.js +128 -9
  66. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +80 -36
  67. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -1
  68. package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +926 -264
  69. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +13 -8
  70. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  71. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +80 -11
  72. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +46 -20
  73. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  74. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +119 -55
  75. package/dest/contract_sync/helpers.d.ts +7 -6
  76. package/dest/contract_sync/helpers.d.ts.map +1 -1
  77. package/dest/contract_sync/helpers.js +11 -16
  78. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  79. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  80. package/dest/entrypoints/client/bundle/utils.js +1 -0
  81. package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
  82. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  83. package/dest/entrypoints/client/lazy/utils.js +1 -0
  84. package/dest/entrypoints/pxe_creation_options.d.ts +8 -2
  85. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  86. package/dest/entrypoints/server/index.d.ts +1 -2
  87. package/dest/entrypoints/server/index.d.ts.map +1 -1
  88. package/dest/entrypoints/server/index.js +0 -1
  89. package/dest/entrypoints/server/utils.d.ts +1 -1
  90. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  91. package/dest/entrypoints/server/utils.js +3 -1
  92. package/dest/error_enriching.js +1 -1
  93. package/dest/hooks/execution_hooks.d.ts +16 -7
  94. package/dest/hooks/execution_hooks.d.ts.map +1 -1
  95. package/dest/hooks/execution_hooks.js +3 -3
  96. package/dest/hooks/index.d.ts +3 -3
  97. package/dest/hooks/index.d.ts.map +1 -1
  98. package/dest/hooks/resolve_tagging_secret_strategy.d.ts +41 -0
  99. package/dest/hooks/resolve_tagging_secret_strategy.d.ts.map +1 -0
  100. package/dest/hooks/resolve_tagging_secret_strategy.js +3 -0
  101. package/dest/logs/log_service.d.ts +6 -6
  102. package/dest/logs/log_service.d.ts.map +1 -1
  103. package/dest/logs/log_service.js +62 -28
  104. package/dest/messages/tx_resolver_service.d.ts +17 -0
  105. package/dest/messages/tx_resolver_service.d.ts.map +1 -0
  106. package/dest/messages/{message_context_service.js → tx_resolver_service.js} +8 -8
  107. package/dest/oracle_version.d.ts +2 -2
  108. package/dest/oracle_version.js +2 -2
  109. package/dest/private_kernel/hints/test_utils.js +1 -1
  110. package/dest/pxe.d.ts +46 -19
  111. package/dest/pxe.d.ts.map +1 -1
  112. package/dest/pxe.js +104 -52
  113. package/dest/storage/allowed_scopes.d.ts +6 -0
  114. package/dest/storage/allowed_scopes.d.ts.map +1 -0
  115. package/dest/storage/allowed_scopes.js +7 -0
  116. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +1 -1
  117. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -1
  118. package/dest/storage/backwards_compatibility_tests/schema_tests.js +86 -33
  119. package/dest/storage/capsule_store/capsule_service.d.ts +1 -1
  120. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -1
  121. package/dest/storage/capsule_store/capsule_service.js +6 -9
  122. package/dest/storage/contract_store/contract_store.js +2 -2
  123. package/dest/storage/fact_store/fact_service.d.ts +20 -0
  124. package/dest/storage/fact_store/fact_service.d.ts.map +1 -0
  125. package/dest/storage/fact_store/fact_service.js +30 -0
  126. package/dest/storage/fact_store/fact_store.d.ts +95 -0
  127. package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
  128. package/dest/storage/fact_store/fact_store.js +408 -0
  129. package/dest/storage/fact_store/fact_store_keys.d.ts +34 -0
  130. package/dest/storage/fact_store/fact_store_keys.d.ts.map +1 -0
  131. package/dest/storage/fact_store/fact_store_keys.js +50 -0
  132. package/dest/storage/fact_store/index.d.ts +5 -0
  133. package/dest/storage/fact_store/index.d.ts.map +1 -0
  134. package/dest/storage/fact_store/index.js +3 -0
  135. package/dest/storage/fact_store/stored_fact.d.ts +32 -0
  136. package/dest/storage/fact_store/stored_fact.d.ts.map +1 -0
  137. package/dest/storage/fact_store/stored_fact.js +64 -0
  138. package/dest/storage/index.d.ts +2 -1
  139. package/dest/storage/index.d.ts.map +1 -1
  140. package/dest/storage/index.js +1 -0
  141. package/dest/storage/metadata.d.ts +1 -1
  142. package/dest/storage/metadata.js +1 -1
  143. package/dest/storage/open_pxe_stores.d.ts +5 -3
  144. package/dest/storage/open_pxe_stores.d.ts.map +1 -1
  145. package/dest/storage/open_pxe_stores.js +5 -3
  146. package/dest/storage/tagging_store/index.d.ts +2 -2
  147. package/dest/storage/tagging_store/index.d.ts.map +1 -1
  148. package/dest/storage/tagging_store/index.js +1 -1
  149. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts +40 -0
  150. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts.map +1 -0
  151. package/dest/storage/tagging_store/tagging_secret_sources_store.js +92 -0
  152. package/package.json +17 -17
  153. package/src/block_synchronizer/block_stream_source.ts +6 -45
  154. package/src/block_synchronizer/block_synchronizer.ts +56 -23
  155. package/src/config/index.ts +1 -0
  156. package/src/contract_function_simulator/contract_function_simulator.ts +32 -31
  157. package/src/contract_function_simulator/index.ts +17 -8
  158. package/src/contract_function_simulator/noir-structs/bounded_vec.ts +12 -24
  159. package/src/contract_function_simulator/noir-structs/contract_class_log_data.ts +9 -0
  160. package/src/contract_function_simulator/noir-structs/embedded_curve_point.ts +4 -0
  161. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
  162. package/src/contract_function_simulator/noir-structs/fact.ts +13 -0
  163. package/src/contract_function_simulator/noir-structs/fact_collection.ts +59 -0
  164. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +20 -46
  165. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +7 -60
  166. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +2 -2
  167. package/src/contract_function_simulator/noir-structs/option.ts +17 -11
  168. package/src/contract_function_simulator/noir-structs/origin_block.ts +8 -0
  169. package/src/contract_function_simulator/noir-structs/provided_secret.ts +3 -14
  170. package/src/contract_function_simulator/noir-structs/resolved_tagging_strategy.ts +45 -0
  171. package/src/contract_function_simulator/noir-structs/resolved_tx.ts +53 -0
  172. package/src/contract_function_simulator/noir-structs/tx_effect_data.ts +15 -0
  173. package/src/contract_function_simulator/noir-structs/utility_context.ts +5 -17
  174. package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +6 -21
  175. package/src/contract_function_simulator/oracle/oracle_registry.ts +87 -79
  176. package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +641 -247
  177. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +94 -14
  178. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +206 -66
  179. package/src/contract_sync/helpers.ts +11 -18
  180. package/src/entrypoints/client/bundle/utils.ts +1 -0
  181. package/src/entrypoints/client/lazy/utils.ts +1 -0
  182. package/src/entrypoints/pxe_creation_options.ts +7 -1
  183. package/src/entrypoints/server/index.ts +0 -1
  184. package/src/entrypoints/server/utils.ts +3 -1
  185. package/src/error_enriching.ts +1 -1
  186. package/src/hooks/execution_hooks.ts +17 -8
  187. package/src/hooks/index.ts +6 -2
  188. package/src/hooks/resolve_tagging_secret_strategy.ts +46 -0
  189. package/src/logs/log_service.ts +71 -37
  190. package/src/messages/{message_context_service.ts → tx_resolver_service.ts} +16 -9
  191. package/src/oracle_version.ts +2 -2
  192. package/src/private_kernel/hints/test_utils.ts +1 -1
  193. package/src/pxe.ts +150 -54
  194. package/src/storage/allowed_scopes.ts +14 -0
  195. package/src/storage/backwards_compatibility_tests/__snapshots__/FactStore.json +40 -0
  196. package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +1 -1
  197. package/src/storage/backwards_compatibility_tests/__snapshots__/TaggingSecretSourcesStore.json +30 -0
  198. package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +21 -5
  199. package/src/storage/backwards_compatibility_tests/schema_tests.ts +88 -33
  200. package/src/storage/capsule_store/capsule_service.ts +8 -13
  201. package/src/storage/contract_store/contract_store.ts +2 -2
  202. package/src/storage/fact_store/fact_service.ts +45 -0
  203. package/src/storage/fact_store/fact_store.ts +487 -0
  204. package/src/storage/fact_store/fact_store_keys.ts +75 -0
  205. package/src/storage/fact_store/index.ts +4 -0
  206. package/src/storage/fact_store/stored_fact.ts +80 -0
  207. package/src/storage/index.ts +1 -0
  208. package/src/storage/metadata.ts +1 -1
  209. package/src/storage/open_pxe_stores.ts +6 -3
  210. package/src/storage/tagging_store/index.ts +1 -1
  211. package/src/storage/tagging_store/tagging_secret_sources_store.ts +117 -0
  212. package/dest/messages/message_context_service.d.ts +0 -17
  213. package/dest/messages/message_context_service.d.ts.map +0 -1
  214. package/dest/storage/tagging_store/sender_address_book_store.d.ts +0 -14
  215. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +0 -1
  216. package/dest/storage/tagging_store/sender_address_book_store.js +0 -36
  217. package/src/storage/backwards_compatibility_tests/__snapshots__/SenderAddressBookStore.json +0 -16
  218. package/src/storage/tagging_store/sender_address_book_store.ts +0 -48
@@ -1,15 +1,16 @@
1
1
  import type { AuthorizeUtilityCall } from './authorize_utility_call.js';
2
+ import type { ResolveTaggingSecretStrategy } from './resolve_tagging_secret_strategy.js';
2
3
  /**
3
- * Hooks that PXE invokes during client-side simulation to gate operations that the protocol
4
+ * Hooks that PXE invokes during client-side simulation to gate or steer operations that the protocol
4
5
  * does not restrict on its own. They give the wallet a chance to apply custom policies (e.g.
5
6
  * prompting the user, consulting a dynamic allowlist, or inspecting call arguments) before the
6
- * execution proceeds.
7
+ * execution proceeds. All hooks are optional, and when a hook is absent PXE applies a safe default.
7
8
  *
8
9
  * For example, {@link authorizeUtilityCall} is called whenever a utility function makes a cross-contract call. A call
9
10
  * made by a malicious contract could leak private information, so the hook lets the wallet decide, per-call, whether
10
11
  * to allow it. A static allowlist would not work here because neither the app nor the wallet can predict ahead of
11
12
  * time which contracts will be invoked during execution. Calls to standard contracts (such as the HandshakeRegistry)
12
- * bypass this hook and are always authorized.
13
+ * bypass this hook and are always authorized. When the hook is absent, cross-contract utility calls are denied.
13
14
  *
14
15
  * Note: hooks are unrelated to authentication witnesses (authwits). Authwits are an on-chain
15
16
  * mechanism where a contract verifies that a caller was authorized by a specific account; hooks
@@ -26,17 +27,25 @@ import type { AuthorizeUtilityCall } from './authorize_utility_call.js';
26
27
  * ? { authorized: true }
27
28
  * : { authorized: false, reason: 'Unknown target' };
28
29
  * },
30
+ * // When there's no established way to reach the recipient, fall back to a non-interactive handshake.
31
+ * resolveTaggingSecretStrategy: async () => ({ type: 'non-interactive-handshake' }),
29
32
  * },
30
33
  * });
31
34
  * ```
32
35
  */
33
36
  export interface ExecutionHooks {
34
- /** Called when a contract attempts a cross-contract utility call. */
35
- authorizeUtilityCall: AuthorizeUtilityCall;
37
+ /** Called when a contract attempts a cross-contract utility call. Calls are denied when absent. */
38
+ authorizeUtilityCall?: AuthorizeUtilityCall;
39
+ /**
40
+ * Resolves a message's tagging secret when none is already established for the sender/recipient pair, letting the
41
+ * wallet apply per-recipient policy. PXE applies a privacy-safe default when absent.
42
+ * See {@link ResolveTaggingSecretStrategy} for the request shape and defaults.
43
+ */
44
+ resolveTaggingSecretStrategy?: ResolveTaggingSecretStrategy;
36
45
  }
37
46
  /**
38
47
  * Builds an {@link ExecutionHooks} from individually-constructed hook callbacks. Returns `undefined`
39
48
  * when every field is absent, so callers can unconditionally pass the result as `hooks`.
40
49
  */
41
- export declare function composeHooks(partial: Partial<ExecutionHooks>): ExecutionHooks | undefined;
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uX2hvb2tzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvZXhlY3V0aW9uX2hvb2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFeEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILE1BQU0sV0FBVyxjQUFjO0lBQzdCLHFFQUFxRTtJQUNyRSxvQkFBb0IsRUFBRSxvQkFBb0IsQ0FBQztDQUM1QztBQUVEOzs7R0FHRztBQUNILHdCQUFnQixZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxjQUFjLEdBQUcsU0FBUyxDQUt6RiJ9
50
+ export declare function composeHooks(hooks: ExecutionHooks): ExecutionHooks | undefined;
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uX2hvb2tzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvZXhlY3V0aW9uX2hvb2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEUsT0FBTyxLQUFLLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV6Rjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFDSCxNQUFNLFdBQVcsY0FBYztJQUM3QixtR0FBbUc7SUFDbkcsb0JBQW9CLENBQUMsRUFBRSxvQkFBb0IsQ0FBQztJQUM1Qzs7OztPQUlHO0lBQ0gsNEJBQTRCLENBQUMsRUFBRSw0QkFBNEIsQ0FBQztDQUM3RDtBQUVEOzs7R0FHRztBQUNILHdCQUFnQixZQUFZLENBQUMsS0FBSyxFQUFFLGNBQWMsR0FBRyxjQUFjLEdBQUcsU0FBUyxDQUs5RSJ9
@@ -1 +1 @@
1
- {"version":3,"file":"execution_hooks.d.ts","sourceRoot":"","sources":["../../src/hooks/execution_hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,oBAAoB,EAAE,oBAAoB,CAAC;CAC5C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,GAAG,SAAS,CAKzF"}
1
+ {"version":3,"file":"execution_hooks.d.ts","sourceRoot":"","sources":["../../src/hooks/execution_hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAEzF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,WAAW,cAAc;IAC7B,mGAAmG;IACnG,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C;;;;OAIG;IACH,4BAA4B,CAAC,EAAE,4BAA4B,CAAC;CAC7D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,GAAG,SAAS,CAK9E"}
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * Builds an {@link ExecutionHooks} from individually-constructed hook callbacks. Returns `undefined`
3
3
  * when every field is absent, so callers can unconditionally pass the result as `hooks`.
4
- */ export function composeHooks(partial) {
5
- if (Object.values(partial).every((v)=>v === undefined)) {
4
+ */ export function composeHooks(hooks) {
5
+ if (Object.values(hooks).every((v)=>v === undefined)) {
6
6
  return undefined;
7
7
  }
8
- return partial;
8
+ return hooks;
9
9
  }
@@ -1,4 +1,4 @@
1
1
  export type { AuthorizeUtilityCall, UtilityCallAuthorizationRequest, UtilityCallAuthorizationResponse, } from './authorize_utility_call.js';
2
- export type { ExecutionHooks } from './execution_hooks.js';
3
- export { composeHooks } from './execution_hooks.js';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLEVBQ1Ysb0JBQW9CLEVBQ3BCLCtCQUErQixFQUMvQixnQ0FBZ0MsR0FDakMsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDIn0=
2
+ export { type ExecutionHooks, composeHooks } from './execution_hooks.js';
3
+ export { type ResolveTaggingSecretStrategy, type TaggingSecretStrategy, type TaggingSecretStrategyRequest, } from './resolve_tagging_secret_strategy.js';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLEVBQ1Ysb0JBQW9CLEVBQ3BCLCtCQUErQixFQUMvQixnQ0FBZ0MsR0FDakMsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsS0FBSyxjQUFjLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUNMLEtBQUssNEJBQTRCLEVBQ2pDLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssNEJBQTRCLEdBQ2xDLE1BQU0sc0NBQXNDLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,oBAAoB,EACpB,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,oBAAoB,EACpB,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,KAAK,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,GAClC,MAAM,sCAAsC,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import type { Point } from '@aztec/foundation/curves/grumpkin';
3
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
+ import type { AppTaggingSecretKind } from '@aztec/stdlib/logs';
5
+ /**
6
+ * How a message's tagging secret is chosen: the wallet's strategy, returned by the `resolveTaggingSecretStrategy` hook
7
+ * when no onchain handshake has been registered for the sender/recipient pair. This is intent (plus, for an arbitrary
8
+ * secret, the raw material); PXE resolves it into the secret it hands the contract.
9
+ */
10
+ export type TaggingSecretStrategy = {
11
+ /** Establish a fresh non-interactive handshake via the onchain registry; reveals the recipient onchain. */
12
+ type: 'non-interactive-handshake';
13
+ } | {
14
+ /** Derive the secret from the sender's and recipient's address keys via ECDH. PXE computes and silos it. */
15
+ type: 'address-derived';
16
+ } | {
17
+ /**
18
+ * A raw shared secret point the two parties already share offchain (e.g. coordinated out-of-band), supplied by
19
+ * the wallet. PXE app-silos it before use. Only sound for unconstrained delivery, since nothing onchain proves
20
+ * the recipient knows it.
21
+ */
22
+ type: 'arbitrary-secret';
23
+ /** The raw (un-siloed) shared secret point to derive the tag from. */
24
+ secret: Point;
25
+ };
26
+ /** Information about the message delivery requesting a tagging secret strategy. */
27
+ export type TaggingSecretStrategyRequest = {
28
+ contractAddress: AztecAddress;
29
+ /**
30
+ * The contract class ID of the executing contract, so wallets can apply class-level (not just per-address) policy.
31
+ */
32
+ contractClassId: Fr;
33
+ sender: AztecAddress;
34
+ recipient: AztecAddress;
35
+ deliveryMode: AppTaggingSecretKind;
36
+ };
37
+ /**
38
+ * Hook returning the {@link TaggingSecretStrategy} for an outgoing message.
39
+ */
40
+ export type ResolveTaggingSecretStrategy = (request: TaggingSecretStrategyRequest) => Promise<TaggingSecretStrategy>;
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZV90YWdnaW5nX3NlY3JldF9zdHJhdGVneS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3Jlc29sdmVfdGFnZ2luZ19zZWNyZXRfc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekQsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUvRDs7OztHQUlHO0FBQ0gsTUFBTSxNQUFNLHFCQUFxQixHQUM3QjtJQUNFLDJHQUEyRztJQUMzRyxJQUFJLEVBQUUsMkJBQTJCLENBQUM7Q0FDbkMsR0FDRDtJQUNFLDRHQUE0RztJQUM1RyxJQUFJLEVBQUUsaUJBQWlCLENBQUM7Q0FDekIsR0FDRDtJQUNFOzs7O09BSUc7SUFDSCxJQUFJLEVBQUUsa0JBQWtCLENBQUM7SUFDekIsc0VBQXNFO0lBQ3RFLE1BQU0sRUFBRSxLQUFLLENBQUM7Q0FDZixDQUFDO0FBRU4sbUZBQW1GO0FBQ25GLE1BQU0sTUFBTSw0QkFBNEIsR0FBRztJQUN6QyxlQUFlLEVBQUUsWUFBWSxDQUFDO0lBQzlCOztPQUVHO0lBQ0gsZUFBZSxFQUFFLEVBQUUsQ0FBQztJQUNwQixNQUFNLEVBQUUsWUFBWSxDQUFDO0lBQ3JCLFNBQVMsRUFBRSxZQUFZLENBQUM7SUFDeEIsWUFBWSxFQUFFLG9CQUFvQixDQUFDO0NBQ3BDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sTUFBTSw0QkFBNEIsR0FBRyxDQUFDLE9BQU8sRUFBRSw0QkFBNEIsS0FBSyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQyJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve_tagging_secret_strategy.d.ts","sourceRoot":"","sources":["../../src/hooks/resolve_tagging_secret_strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAC7B;IACE,2GAA2G;IAC3G,IAAI,EAAE,2BAA2B,CAAC;CACnC,GACD;IACE,4GAA4G;IAC5G,IAAI,EAAE,iBAAiB,CAAC;CACzB,GACD;IACE;;;;OAIG;IACH,IAAI,EAAE,kBAAkB,CAAC;IACzB,sEAAsE;IACtE,MAAM,EAAE,KAAK,CAAC;CACf,CAAC;AAEN,mFAAmF;AACnF,MAAM,MAAM,4BAA4B,GAAG;IACzC,eAAe,EAAE,YAAY,CAAC;IAC9B;;OAEG;IACH,eAAe,EAAE,EAAE,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,YAAY,CAAC;IACxB,YAAY,EAAE,oBAAoB,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,OAAO,EAAE,4BAA4B,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ /**
2
+ * Hook returning the {@link TaggingSecretStrategy} for an outgoing message.
3
+ */ export { };
@@ -3,13 +3,13 @@ import type { KeyStore } from '@aztec/key-store';
3
3
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
4
4
  import type { L2TipsProvider } from '@aztec/stdlib/block';
5
5
  import type { AztecNode } from '@aztec/stdlib/interfaces/server';
6
- import { AppTaggingSecret, PendingTaggedLog } from '@aztec/stdlib/logs';
6
+ import { AppTaggingSecret, type PendingTaggedLog } from '@aztec/stdlib/logs';
7
7
  import type { BlockHeader } from '@aztec/stdlib/tx';
8
8
  import { type LogRetrievalRequest } from '../contract_function_simulator/noir-structs/log_retrieval_request.js';
9
- import { LogRetrievalResponse } from '../contract_function_simulator/noir-structs/log_retrieval_response.js';
9
+ import type { LogRetrievalResponse } from '../contract_function_simulator/noir-structs/log_retrieval_response.js';
10
10
  import { AddressStore } from '../storage/address_store/address_store.js';
11
11
  import type { RecipientTaggingStore } from '../storage/tagging_store/recipient_tagging_store.js';
12
- import type { SenderAddressBookStore } from '../storage/tagging_store/sender_address_book_store.js';
12
+ import type { TaggingSecretSourcesStore } from '../storage/tagging_store/tagging_secret_sources_store.js';
13
13
  export declare class LogService {
14
14
  #private;
15
15
  private readonly aztecNode;
@@ -17,13 +17,13 @@ export declare class LogService {
17
17
  private readonly l2TipsStore;
18
18
  private readonly keyStore;
19
19
  private readonly recipientTaggingStore;
20
- private readonly senderAddressBookStore;
20
+ private readonly taggingSecretSourcesStore;
21
21
  private readonly addressStore;
22
22
  private readonly jobId;
23
23
  private log;
24
- constructor(aztecNode: AztecNode, anchorBlockHeader: BlockHeader, l2TipsStore: L2TipsProvider, keyStore: KeyStore, recipientTaggingStore: RecipientTaggingStore, senderAddressBookStore: SenderAddressBookStore, addressStore: AddressStore, jobId: string, bindings?: LoggerBindings);
24
+ constructor(aztecNode: AztecNode, anchorBlockHeader: BlockHeader, l2TipsStore: L2TipsProvider, keyStore: KeyStore, recipientTaggingStore: RecipientTaggingStore, taggingSecretSourcesStore: TaggingSecretSourcesStore, addressStore: AddressStore, jobId: string, bindings?: LoggerBindings);
25
25
  /** Fetches all logs matching each request's tag, returning an array of log arrays (one per request). */
26
26
  fetchLogsByTag(contractAddress: AztecAddress, logRetrievalRequests: LogRetrievalRequest[]): Promise<LogRetrievalResponse[][]>;
27
27
  fetchTaggedLogs(contractAddress: AztecAddress, recipient: AztecAddress, providedSecrets: AppTaggingSecret[]): Promise<PendingTaggedLog[]>;
28
28
  }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX3NlcnZpY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb2dzL2xvZ19zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RixPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQWEsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFrQixnQkFBZ0IsRUFBYSxNQUFNLG9CQUFvQixDQUFDO0FBQ25HLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE9BQU8sRUFDTCxLQUFLLG1CQUFtQixFQUV6QixNQUFNLHNFQUFzRSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVFQUF1RSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ2pHLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFXcEcscUJBQWEsVUFBVTs7SUFJbkIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO0lBQzFCLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCO0lBQ2xDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVztJQUM1QixPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVE7SUFDekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUI7SUFDdEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0I7SUFDdkMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZO0lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSztJQVZ4QixPQUFPLENBQUMsR0FBRyxDQUFTO0lBRXBCLFlBQ21CLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLGlCQUFpQixFQUFFLFdBQVcsRUFDOUIsV0FBVyxFQUFFLGNBQWMsRUFDM0IsUUFBUSxFQUFFLFFBQVEsRUFDbEIscUJBQXFCLEVBQUUscUJBQXFCLEVBQzVDLHNCQUFzQixFQUFFLHNCQUFzQixFQUM5QyxZQUFZLEVBQUUsWUFBWSxFQUMxQixLQUFLLEVBQUUsTUFBTSxFQUM5QixRQUFRLENBQUMsRUFBRSxjQUFjLEVBRzFCO0lBRUQsd0dBQXdHO0lBQzNGLGNBQWMsQ0FDekIsZUFBZSxFQUFFLFlBQVksRUFDN0Isb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsR0FDMUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxDQXNCbkM7SUFrR1ksZUFBZSxDQUMxQixlQUFlLEVBQUUsWUFBWSxFQUM3QixTQUFTLEVBQUUsWUFBWSxFQUN2QixlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsR0FDbEMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0F5QjdCO0NBdUNGIn0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nX3NlcnZpY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb2dzL2xvZ19zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RixPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQWEsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUNMLGdCQUFnQixFQUVoQixLQUFLLGdCQUFnQixFQUd0QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE9BQU8sRUFDTCxLQUFLLG1CQUFtQixFQUV6QixNQUFNLHNFQUFzRSxDQUFDO0FBQzlFLE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDbEgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3pFLE9BQU8sS0FBSyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQVcxRyxxQkFBYSxVQUFVOztJQUluQixPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVM7SUFDMUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUI7SUFDbEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXO0lBQzVCLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUTtJQUN6QixPQUFPLENBQUMsUUFBUSxDQUFDLHFCQUFxQjtJQUN0QyxPQUFPLENBQUMsUUFBUSxDQUFDLHlCQUF5QjtJQUMxQyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVk7SUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO0lBVnhCLE9BQU8sQ0FBQyxHQUFHLENBQVM7SUFFcEIsWUFDbUIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsaUJBQWlCLEVBQUUsV0FBVyxFQUM5QixXQUFXLEVBQUUsY0FBYyxFQUMzQixRQUFRLEVBQUUsUUFBUSxFQUNsQixxQkFBcUIsRUFBRSxxQkFBcUIsRUFDNUMseUJBQXlCLEVBQUUseUJBQXlCLEVBQ3BELFlBQVksRUFBRSxZQUFZLEVBQzFCLEtBQUssRUFBRSxNQUFNLEVBQzlCLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFHMUI7SUFFRCx3R0FBd0c7SUFDM0YsY0FBYyxDQUN6QixlQUFlLEVBQUUsWUFBWSxFQUM3QixvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxHQUMxQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLENBc0JuQztJQXNHWSxlQUFlLENBQzFCLGVBQWUsRUFBRSxZQUFZLEVBQzdCLFNBQVMsRUFBRSxZQUFZLEVBQ3ZCLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxHQUNsQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQW9DN0I7Q0FpREYifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"log_service.d.ts","sourceRoot":"","sources":["../../src/logs/log_service.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAkB,gBAAgB,EAAa,MAAM,oBAAoB,CAAC;AACnG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,sEAAsE,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uEAAuE,CAAC;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uDAAuD,CAAC;AAWpG,qBAAa,UAAU;;IAInB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAVxB,OAAO,CAAC,GAAG,CAAS;IAEpB,YACmB,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,WAAW,EAC9B,WAAW,EAAE,cAAc,EAC3B,QAAQ,EAAE,QAAQ,EAClB,qBAAqB,EAAE,qBAAqB,EAC5C,sBAAsB,EAAE,sBAAsB,EAC9C,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,EAC9B,QAAQ,CAAC,EAAE,cAAc,EAG1B;IAED,wGAAwG;IAC3F,cAAc,CACzB,eAAe,EAAE,YAAY,EAC7B,oBAAoB,EAAE,mBAAmB,EAAE,GAC1C,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAsBnC;IAkGY,eAAe,CAC1B,eAAe,EAAE,YAAY,EAC7B,SAAS,EAAE,YAAY,EACvB,eAAe,EAAE,gBAAgB,EAAE,GAClC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAyB7B;CAuCF"}
1
+ {"version":3,"file":"log_service.d.ts","sourceRoot":"","sources":["../../src/logs/log_service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EACL,gBAAgB,EAEhB,KAAK,gBAAgB,EAGtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EACL,KAAK,mBAAmB,EAEzB,MAAM,sEAAsE,CAAC;AAC9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uEAAuE,CAAC;AAClH,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AACjG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0DAA0D,CAAC;AAW1G,qBAAa,UAAU;;IAInB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAVxB,OAAO,CAAC,GAAG,CAAS;IAEpB,YACmB,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,WAAW,EAC9B,WAAW,EAAE,cAAc,EAC3B,QAAQ,EAAE,QAAQ,EAClB,qBAAqB,EAAE,qBAAqB,EAC5C,yBAAyB,EAAE,yBAAyB,EACpD,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,EAC9B,QAAQ,CAAC,EAAE,cAAc,EAG1B;IAED,wGAAwG;IAC3F,cAAc,CACzB,eAAe,EAAE,YAAY,EAC7B,oBAAoB,EAAE,mBAAmB,EAAE,GAC1C,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAsBnC;IAsGY,eAAe,CAC1B,eAAe,EAAE,YAAY,EAC7B,SAAS,EAAE,YAAY,EACvB,eAAe,EAAE,gBAAgB,EAAE,GAClC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAoC7B;CAiDF"}
@@ -1,8 +1,7 @@
1
+ import { PRIVATE_LOG_CIPHERTEXT_LEN } from '@aztec/constants';
1
2
  import { createLogger } from '@aztec/foundation/log';
2
- import { AztecAddress } from '@aztec/stdlib/aztec-address';
3
- import { AppTaggingSecret, PendingTaggedLog, SiloedTag } from '@aztec/stdlib/logs';
3
+ import { AppTaggingSecret, SiloedTag, computeSharedTaggingSecret } from '@aztec/stdlib/logs';
4
4
  import { LogSource } from '../contract_function_simulator/noir-structs/log_retrieval_request.js';
5
- import { LogRetrievalResponse } from '../contract_function_simulator/noir-structs/log_retrieval_response.js';
6
5
  import { getAllPrivateLogsByTags, getAllPublicLogsByTagsFromContract, syncTaggedPrivateLogs } from '../tagging/index.js';
7
6
  const rangeKey = (fromBlock, toBlock)=>`${fromBlock ?? ''}-${toBlock ?? ''}`;
8
7
  export class LogService {
@@ -11,17 +10,17 @@ export class LogService {
11
10
  l2TipsStore;
12
11
  keyStore;
13
12
  recipientTaggingStore;
14
- senderAddressBookStore;
13
+ taggingSecretSourcesStore;
15
14
  addressStore;
16
15
  jobId;
17
16
  log;
18
- constructor(aztecNode, anchorBlockHeader, l2TipsStore, keyStore, recipientTaggingStore, senderAddressBookStore, addressStore, jobId, bindings){
17
+ constructor(aztecNode, anchorBlockHeader, l2TipsStore, keyStore, recipientTaggingStore, taggingSecretSourcesStore, addressStore, jobId, bindings){
19
18
  this.aztecNode = aztecNode;
20
19
  this.anchorBlockHeader = anchorBlockHeader;
21
20
  this.l2TipsStore = l2TipsStore;
22
21
  this.keyStore = keyStore;
23
22
  this.recipientTaggingStore = recipientTaggingStore;
24
- this.senderAddressBookStore = senderAddressBookStore;
23
+ this.taggingSecretSourcesStore = taggingSecretSourcesStore;
25
24
  this.addressStore = addressStore;
26
25
  this.jobId = jobId;
27
26
  this.log = createLogger('pxe:log_service', bindings);
@@ -101,14 +100,16 @@ export class LogService {
101
100
  */ static #groupByRange(entries) {
102
101
  const groups = new Map();
103
102
  for (const entry of entries){
104
- const key = rangeKey(entry.request.fromBlock, entry.request.toBlock);
103
+ const fromBlock = entry.request.fromBlock.value;
104
+ const toBlock = entry.request.toBlock.value;
105
+ const key = rangeKey(fromBlock, toBlock);
105
106
  const existing = groups.get(key);
106
107
  if (existing) {
107
108
  existing.entries.push(entry);
108
109
  } else {
109
110
  groups.set(key, {
110
- fromBlock: entry.request.fromBlock,
111
- toBlock: entry.request.toBlock,
111
+ fromBlock,
112
+ toBlock,
112
113
  entries: [
113
114
  entry
114
115
  ]
@@ -125,17 +126,31 @@ export class LogService {
125
126
  if (nullifiers.length === 0) {
126
127
  throw new Error(`Log for tx ${log.txHash} returned no nullifiers from the node`);
127
128
  }
128
- return new LogRetrievalResponse(log.logData.slice(1), log.txHash, noteHashes, nullifiers[0]);
129
+ return {
130
+ // Skip the tag, and clip to the wire cap: public logs can exceed PRIVATE_LOG_CIPHERTEXT_LEN, which is the fixed
131
+ // size of the oracle's BoundedVec slot. A no-op for private logs, which are already within the cap.
132
+ logPayload: log.logData.slice(1, 1 + PRIVATE_LOG_CIPHERTEXT_LEN),
133
+ txHash: log.txHash,
134
+ uniqueNoteHashesInTx: noteHashes,
135
+ firstNullifierInTx: nullifiers[0]
136
+ };
129
137
  }
130
138
  async fetchTaggedLogs(contractAddress, recipient, providedSecrets) {
131
- this.log.verbose(`Fetching tagged logs for ${contractAddress.toString()}`);
139
+ this.log.verbose(`Fetching tagged logs for contract ${contractAddress.toString()} and recipient ${recipient.toString()}`);
132
140
  const l2Tips = await this.l2TipsStore.getL2Tips();
133
- // The secrets PXE derives or stores internally, plus any the app supplies explicitly for secrets PXE cannot
134
- // enumerate itself (e.g. handshake-derived ones).
135
- const secrets = [
136
- ...await this.#getSecretsForSenders(contractAddress, recipient),
141
+ // Secrets PXE can enumerate for this recipient (senders via ECDH + pre-shared store secrets), plus any the app
142
+ // supplies explicitly for secrets PXE cannot enumerate itself (e.g. handshake-derived ones). The latter arrive
143
+ // already computed and are searched even when the recipient's account is unknown locally, since they need no ECDH.
144
+ const combinedSecrets = [
145
+ ...await this.#getPointDerivedSecrets(contractAddress, recipient),
137
146
  ...providedSecrets
138
147
  ];
148
+ // These sources can overlap (a sender that is also a PXE account, or a pre-shared secret that coincides with a
149
+ // sender-derived one), so we deduplicate the combined set.
150
+ const secrets = Array.from(new Map(combinedSecrets.map((secret)=>[
151
+ secret.toString(),
152
+ secret
153
+ ])).values());
139
154
  const logs = await syncTaggedPrivateLogs(secrets, this.aztecNode, this.recipientTaggingStore, this.anchorBlockHeader, l2Tips.finalized.block.number, this.jobId);
140
155
  return logs.map((log)=>{
141
156
  const noteHashes = log.noteHashes;
@@ -143,30 +158,49 @@ export class LogService {
143
158
  if (nullifiers.length === 0) {
144
159
  throw new Error(`Log for tx ${log.txHash} returned no nullifiers from the node`);
145
160
  }
146
- return new PendingTaggedLog(log.logData, log.txHash, noteHashes, nullifiers[0]);
161
+ return {
162
+ log: log.logData,
163
+ context: {
164
+ txHash: log.txHash,
165
+ uniqueNoteHashesInTx: noteHashes,
166
+ firstNullifierInTx: nullifiers[0]
167
+ }
168
+ };
147
169
  });
148
170
  }
149
- async #getSecretsForSenders(contractAddress, recipient) {
171
+ /**
172
+ * Computes the tagging secrets PXE can enumerate for a recipient: one per known sender (via ECDH) plus any
173
+ * pre-shared secret points registered directly for the recipient, each siloed to `contractAddress` and directed to
174
+ * `recipient`. These require knowing the recipient's address preimage and keys, so returns an empty array when those
175
+ * are unavailable. App-supplied secrets (e.g. handshake-derived) are handled separately by the caller and do not go
176
+ * through here.
177
+ */ async #getPointDerivedSecrets(contractAddress, recipient) {
150
178
  const recipientCompleteAddress = await this.addressStore.getCompleteAddress(recipient);
151
- if (!recipientCompleteAddress) {
179
+ if (!recipientCompleteAddress || !await this.keyStore.hasAccount(recipient)) {
180
+ this.log.warn(`Skipping sender-derived tag retrieval for ${recipient.toString()} due to unknown address preimage`);
152
181
  return [];
153
182
  }
154
183
  const recipientIvsk = await this.keyStore.getMasterIncomingViewingSecretKey(recipient);
155
- // We implicitly add all PXE accounts as senders, this helps us find tagged logs with messages that are sent to a
156
- // local account (recipient = us, sender = us)
184
+ const points = [
185
+ ...await this.#getSecretsForSenders(recipientCompleteAddress, recipientIvsk),
186
+ ...await this.taggingSecretSourcesStore.getSharedSecretsForRecipient(recipient)
187
+ ];
188
+ return Promise.all(points.map((secret)=>AppTaggingSecret.compute(secret, contractAddress, recipient)));
189
+ }
190
+ async #getSecretsForSenders(recipientCompleteAddress, recipientIvsk) {
191
+ // We implicitly add all PXE accounts as senders, this helps us decrypt tags on notes that we send to ourselves
192
+ // (recipient = us, sender = us).
157
193
  const allSenders = [
158
- ...await this.senderAddressBookStore.getSenders(),
194
+ ...await this.taggingSecretSourcesStore.getSenders(),
159
195
  ...await this.keyStore.getAccounts()
160
196
  ];
161
- // We deduplicate the senders by adding them to a set and then converting the set back to an array
162
- const deduplicatedSenders = Array.from(new Set(allSenders.map((sender)=>sender.toString()))).map((sender)=>AztecAddress.fromString(sender));
163
- return Promise.all(deduplicatedSenders.map(async (sender)=>{
164
- const secret = await AppTaggingSecret.computeUnconstrained(recipientCompleteAddress, recipientIvsk, sender, contractAddress, recipient);
165
- if (!secret) {
166
- // Note that all senders originate from either the SenderAddressBookStore or the KeyStore.
197
+ return Promise.all(allSenders.map(async (sender)=>{
198
+ const taggingSecretPoint = await computeSharedTaggingSecret(recipientCompleteAddress, recipientIvsk, sender);
199
+ if (!taggingSecretPoint) {
200
+ // Note that all senders originate from either the TaggingSecretSourcesStore or the KeyStore.
167
201
  throw new Error(`Failed to compute a tagging secret for sender ${sender} - this implies this is an invalid address, which should not happen as they have been previously registered in PXE.`);
168
202
  }
169
- return secret;
203
+ return taggingSecretPoint;
170
204
  }));
171
205
  }
172
206
  }
@@ -0,0 +1,17 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import type { AztecNode } from '@aztec/stdlib/interfaces/server';
3
+ import { ResolvedTx } from '../contract_function_simulator/noir-structs/resolved_tx.js';
4
+ /** Resolves transaction hashes into their on-chain context (note hashes, first nullifier, and mined block). */
5
+ export declare class TxResolverService {
6
+ private readonly aztecNode;
7
+ constructor(aztecNode: AztecNode);
8
+ /**
9
+ * Resolves a list of tx hashes into their on-chain context.
10
+ *
11
+ * For each tx hash, looks up the corresponding tx effect and extracts the note hashes, first nullifier, and the
12
+ * number and hash of the block it was mined in. Returns `null` for tx hashes that are zero, not yet available, or in
13
+ * blocks beyond the anchor block.
14
+ */
15
+ resolveTxs(txHashes: Fr[], anchorBlockNumber: number): Promise<(ResolvedTx | null)[]>;
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcmVzb2x2ZXJfc2VydmljZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lc3NhZ2VzL3R4X3Jlc29sdmVyX3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBR2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUV4RiwrR0FBK0c7QUFDL0cscUJBQWEsaUJBQWlCO0lBQ2hCLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUztJQUF0QyxZQUE2QixTQUFTLEVBQUUsU0FBUyxFQUFJO0lBRXJEOzs7Ozs7T0FNRztJQUNHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBaUQxRjtDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx_resolver_service.d.ts","sourceRoot":"","sources":["../../src/messages/tx_resolver_service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAGjE,OAAO,EAAE,UAAU,EAAE,MAAM,4DAA4D,CAAC;AAExF,+GAA+G;AAC/G,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAAtC,YAA6B,SAAS,EAAE,SAAS,EAAI;IAErD;;;;;;OAMG;IACG,UAAU,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAiD1F;CACF"}
@@ -1,18 +1,18 @@
1
1
  import { uniqueBy } from '@aztec/foundation/collection';
2
- import { MessageContext } from '@aztec/stdlib/logs';
3
2
  import { TxHash } from '@aztec/stdlib/tx';
4
- /** Resolves transaction hashes into the context needed to process messages. */ export class MessageContextService {
3
+ import { ResolvedTx } from '../contract_function_simulator/noir-structs/resolved_tx.js';
4
+ /** Resolves transaction hashes into their on-chain context (note hashes, first nullifier, and mined block). */ export class TxResolverService {
5
5
  aztecNode;
6
6
  constructor(aztecNode){
7
7
  this.aztecNode = aztecNode;
8
8
  }
9
9
  /**
10
- * Resolves a list of tx hashes into their message contexts.
10
+ * Resolves a list of tx hashes into their on-chain context.
11
11
  *
12
- * For each tx hash, looks up the corresponding tx effect and extracts the note hashes and first nullifier needed to
13
- * process messages that originated from that transaction. Returns `null` for tx hashes that are zero, not yet
14
- * available, or in blocks beyond the anchor block.
15
- */ async getMessageContextsByTxHash(txHashes, anchorBlockNumber) {
12
+ * For each tx hash, looks up the corresponding tx effect and extracts the note hashes, first nullifier, and the
13
+ * number and hash of the block it was mined in. Returns `null` for tx hashes that are zero, not yet available, or in
14
+ * blocks beyond the anchor block.
15
+ */ async resolveTxs(txHashes, anchorBlockNumber) {
16
16
  const nonZeroTxHashes = txHashes.filter((h)=>!h.isZero()).map((h)=>TxHash.fromField(h));
17
17
  const uniqueTxHashes = uniqueBy(nonZeroTxHashes, (h)=>h.toString());
18
18
  const fetched = await Promise.all(uniqueTxHashes.map((h)=>this.aztecNode.getTxReceipt(h, {
@@ -49,7 +49,7 @@ import { TxHash } from '@aztec/stdlib/tx';
49
49
  if (data.nullifiers.length === 0) {
50
50
  throw new Error(`Tx effect for ${txHash} has no nullifiers`);
51
51
  }
52
- return new MessageContext(data.txHash, data.noteHashes, data.nullifiers[0]);
52
+ return new ResolvedTx(data.txHash, data.noteHashes, data.nullifiers[0], txEffect.l2BlockNumber, txEffect.l2BlockHash.toFr());
53
53
  });
54
54
  }
55
55
  }
@@ -1,4 +1,4 @@
1
- export declare const ORACLE_VERSION_MAJOR = 29;
1
+ export declare const ORACLE_VERSION_MAJOR = 30;
2
2
  export declare const ORACLE_VERSION_MINOR = 1;
3
- export declare const ORACLE_INTERFACE_HASH = "f5cd3321b32371186f30dfd11b246946fb425cadffb8e6564b897d5184e43fe9";
3
+ export declare const ORACLE_INTERFACE_HASH = "2a441f29ab01b252bc74b91b07fc2514891c28bffdfa0042d80494271b75edee";
4
4
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JhY2xlX3ZlcnNpb24uZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vcmFjbGVfdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZQSxlQUFPLE1BQU0sb0JBQW9CLEtBQUssQ0FBQztBQUN2QyxlQUFPLE1BQU0sb0JBQW9CLElBQUksQ0FBQztBQVF0QyxlQUFPLE1BQU0scUJBQXFCLHFFQUFxRSxDQUFDIn0=
@@ -10,7 +10,7 @@
10
10
  /// used to provide helpful error messages if a contract calls an oracle that doesn't exist. We don't throw immediately
11
11
  /// if AZTEC_NR_MINOR > PXE_MINOR because if a contract is updated to use a newer Aztec.nr dependency without actually
12
12
  /// using any of the new oracles then there is no reason to throw.
13
- export const ORACLE_VERSION_MAJOR = 29;
13
+ export const ORACLE_VERSION_MAJOR = 30;
14
14
  export const ORACLE_VERSION_MINOR = 1;
15
15
  /// This hash is computed from the `ORACLE_REGISTRY` declaration (each oracle's name, ordered parameter names and
16
16
  /// types, and return type) and is used to detect when the oracle interface changes. When it does, you need to either:
@@ -18,4 +18,4 @@ export const ORACLE_VERSION_MINOR = 1;
18
18
  /// - increment only `ORACLE_VERSION_MINOR` if the change is additive (a new oracle was added).
19
19
  ///
20
20
  /// These constants must be kept in sync between this file and `noir-projects/aztec-nr/aztec/src/oracle/version.nr`.
21
- export const ORACLE_INTERFACE_HASH = 'f5cd3321b32371186f30dfd11b246946fb425cadffb8e6564b897d5184e43fe9';
21
+ export const ORACLE_INTERFACE_HASH = '2a441f29ab01b252bc74b91b07fc2514891c28bffdfa0042d80494271b75edee';
@@ -7,7 +7,7 @@ import { PrivateLogData, ScopedPrivateLogData } from '@aztec/stdlib/kernel';
7
7
  import { PrivateLog } from '@aztec/stdlib/logs';
8
8
  import { PrivateCallExecutionResult } from '@aztec/stdlib/tx';
9
9
  import { VerificationKeyData } from '@aztec/stdlib/vks';
10
- const DEFAULT_CONTRACT_ADDRESS = AztecAddress.fromBigInt(987654n);
10
+ const DEFAULT_CONTRACT_ADDRESS = AztecAddress.fromBigIntUnsafe(987654n);
11
11
  /**
12
12
  * Builds a ClaimedLengthArray from a list of items, padding to the required size.
13
13
  */ function makeClaimed(items, emptyFactory, maxSize) {
package/dest/pxe.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { PrivateEventFilter } from '@aztec/aztec.js/wallet';
2
2
  import { Fr } from '@aztec/foundation/curves/bn254';
3
+ import { Point } from '@aztec/foundation/curves/grumpkin';
3
4
  import { type Logger } from '@aztec/foundation/log';
4
5
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
5
6
  import { type ProtocolContractsProvider } from '@aztec/protocol-contracts';
@@ -8,7 +9,7 @@ import { type ContractArtifact, EventSelector, FunctionCall } from '@aztec/stdli
8
9
  import type { AuthWitness } from '@aztec/stdlib/auth-witness';
9
10
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
10
11
  import { CompleteAddress, type ContractInstanceWithAddress, type PartialAddress } from '@aztec/stdlib/contract';
11
- import type { AztecNode, PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
12
+ import type { AztecNode, AztecNodeDebug, PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
12
13
  import { BlockHeader, type InTx, SimulationOverrides, TxExecutionRequest, TxProfileResult, TxProvingResult, TxSimulationResult, UtilityExecutionResult } from '@aztec/stdlib/tx';
13
14
  import type { PXEConfig } from './config/index.js';
14
15
  import { PXEDebugUtils } from './debug/pxe_debug_utils.js';
@@ -84,6 +85,11 @@ export type PreloadedContractsProvider = {
84
85
  export type PXECreateArgs = {
85
86
  /** The Aztec node to connect to. */
86
87
  node: AztecNode;
88
+ /**
89
+ * Optional debug API client. When provided, public function signatures are registered with the node so that
90
+ * node-side public-execution stack traces can be named. Skipped when the node does not expose the debug API.
91
+ */
92
+ nodeDebug?: AztecNodeDebug;
87
93
  /** The key-value store for persisting PXE state. */
88
94
  store: AztecAsyncKVStore;
89
95
  /** The prover for generating private kernel proofs. */
@@ -105,6 +111,23 @@ export type PXECreateArgs = {
105
111
  /** Optional hooks to observe and influence contract execution. */
106
112
  hooks?: ExecutionHooks;
107
113
  };
114
+ /**
115
+ * A source from which PXE derives the tagging secrets it scans for to discover incoming private logs.
116
+ *
117
+ * - `address-derived`: derives a shared secret via ECDH from an external `sender` address against every account
118
+ * registered in this PXE (present and future), so registering one sender applies it to all of them. The address is
119
+ * not secret, so unlike `arbitrary-secret` it can be reused freely across recipients.
120
+ * - `arbitrary-secret`: a shared secret point provided directly, scoped to a single recipient. It bypasses ECDH, so it
121
+ * must not be reused across recipients (each would then be able to find the others' tags).
122
+ */
123
+ export type TaggingSecretSource = {
124
+ kind: 'address-derived';
125
+ sender: AztecAddress;
126
+ } | {
127
+ kind: 'arbitrary-secret';
128
+ recipient: AztecAddress;
129
+ secret: Point;
130
+ };
108
131
  /**
109
132
  * Private eXecution Environment (PXE) is a library used by wallets to simulate private phase of transactions and to
110
133
  * manage private state of users.
@@ -112,20 +135,22 @@ export type PXECreateArgs = {
112
135
  export declare class PXE {
113
136
  #private;
114
137
  private node;
138
+ private nodeDebug;
115
139
  private db;
116
140
  private blockStateSynchronizer;
117
141
  private keyStore;
118
142
  private contractStore;
119
143
  private noteStore;
120
144
  private capsuleStore;
145
+ private factStore;
121
146
  private anchorBlockStore;
122
147
  private senderTaggingStore;
123
- private senderAddressBookStore;
148
+ private taggingSecretSourcesStore;
124
149
  private recipientTaggingStore;
125
150
  private addressStore;
126
151
  private privateEventStore;
127
152
  private contractSyncService;
128
- private messageContextService;
153
+ private txResolver;
129
154
  private l2TipsStore;
130
155
  private simulator;
131
156
  private proverEnabled;
@@ -146,7 +171,7 @@ export declare class PXE {
146
171
  *
147
172
  * @returns A promise that resolves PXE is ready to be used.
148
173
  */
149
- static create({ node, store, proofCreator, simulator, protocolContractsProvider, preloadedContractsProvider, config, loggerOrSuffix, hooks }: PXECreateArgs): Promise<PXE>;
174
+ static create({ node, nodeDebug, store, proofCreator, simulator, protocolContractsProvider, preloadedContractsProvider, config, loggerOrSuffix, hooks }: PXECreateArgs): Promise<PXE>;
150
175
  /**
151
176
  * Triggers a sync of PXE state with the node, regardless of the `autoSync` config flag. Use this to
152
177
  * batch syncs across composite flows when `autoSync` is disabled (e.g. one sync per simulate+send
@@ -182,26 +207,28 @@ export declare class PXE {
182
207
  */
183
208
  registerAccount(secretKey: Fr, partialAddress: PartialAddress): Promise<CompleteAddress>;
184
209
  /**
185
- * Registers a sender in this PXE.
186
- *
187
- * After registering a new sender, the PXE will sync private logs that are tagged with this sender's address.
188
- * Will do nothing if the address is already registered.
210
+ * Registers a source from which this PXE derives the tagging secrets it scans for to discover incoming private logs.
211
+ * See {@link TaggingSecretSource} for the meaning of each variant. Does nothing if the source is already registered.
189
212
  *
190
- * @param sender - Address of the sender to register.
191
- * @returns The address of the sender.
192
- * TODO: It's strange that we return the address here and I (benesjan) think we should drop the return value.
213
+ * After a new source is added we clear the cache tracking which contracts have finished syncing, so every contract
214
+ * re-syncs against the new source's logs (whose notes/events could belong to any contract). Already-discovered
215
+ * notes/events are not discarded.
193
216
  */
194
- registerSender(sender: AztecAddress): Promise<AztecAddress>;
217
+ registerTaggingSecretSource(source: TaggingSecretSource): Promise<void>;
195
218
  /**
196
- * Retrieves senders registered in this PXE.
197
- * @returns Senders registered in this PXE.
219
+ * Removes a previously registered tagging secret source. Does nothing if it was not registered.
198
220
  */
199
- getSenders(): Promise<AztecAddress[]>;
221
+ removeTaggingSecretSource(source: TaggingSecretSource): Promise<void>;
200
222
  /**
201
- * Removes a sender registered in this PXE.
202
- * @param sender - The address of the sender to remove.
223
+ * Retrieves the tagging secret sources registered in this PXE. Without a filter it returns every source; pass
224
+ * `{ kind }` to narrow to a single variant. See {@link TaggingSecretSource}.
203
225
  */
204
- removeSender(sender: AztecAddress): Promise<void>;
226
+ getTaggingSecretSources<K extends TaggingSecretSource['kind']>(filter: {
227
+ kind: K;
228
+ }): Promise<Extract<TaggingSecretSource, {
229
+ kind: K;
230
+ }>[]>;
231
+ getTaggingSecretSources(): Promise<TaggingSecretSource[]>;
205
232
  /**
206
233
  * Retrieves the user accounts registered on this PXE.
207
234
  * @returns An array of the accounts registered on this PXE.
@@ -301,4 +328,4 @@ export declare class PXE {
301
328
  */
302
329
  stop(): Promise<void>;
303
330
  }
304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHhlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHhlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFakUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBcUMsTUFBTSx1QkFBdUIsQ0FBQztBQUl2RixPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxLQUFLLHlCQUF5QixFQUF5QixNQUFNLDJCQUEyQixDQUFDO0FBQ2xHLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUNMLEtBQUssZ0JBQWdCLEVBQ3JCLGFBQWEsRUFDYixZQUFZLEVBR2IsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVoRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLEtBQUssMkJBQTJCLEVBQ2hDLEtBQUssY0FBYyxFQUdwQixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBTXRGLE9BQU8sRUFDTCxXQUFXLEVBRVgsS0FBSyxJQUFJLEVBS1QsbUJBQW1CLEVBR25CLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdkIsTUFBTSxrQkFBa0IsQ0FBQztBQUsxQixPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVVuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1B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
331
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHhlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHhlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFakUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQXFDLE1BQU0sdUJBQXVCLENBQUM7QUFJdkYsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyx5QkFBeUIsRUFBeUIsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRyxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxLQUFLLGdCQUFnQixFQUNyQixhQUFhLEVBQ2IsWUFBWSxFQUdiLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFaEUsT0FBTyxFQUNMLGVBQWUsRUFDZixLQUFLLDJCQUEyQixFQUNoQyxLQUFLLGNBQWMsRUFHcEIsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFNdEcsT0FBTyxFQUNMLFdBQVcsRUFFWCxLQUFLLElBQUksRUFLVCxtQkFBbUIsRUFHbkIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN2QixNQUFNLGtCQUFrQixDQUFDO0FBSzFCLE9BQU8sS0FBSyxFQUFFLFNB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