@aztec/aztec.js 0.0.1-commit.9372f48 → 0.0.1-commit.967fc6998

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 (80) hide show
  1. package/dest/api/contract.d.ts +2 -2
  2. package/dest/api/contract.js +2 -2
  3. package/dest/api/deployment.d.ts +1 -2
  4. package/dest/api/deployment.d.ts.map +1 -1
  5. package/dest/api/deployment.js +0 -1
  6. package/dest/api/events.d.ts +10 -6
  7. package/dest/api/events.d.ts.map +1 -1
  8. package/dest/api/events.js +30 -20
  9. package/dest/api/fields.d.ts +2 -1
  10. package/dest/api/fields.d.ts.map +1 -1
  11. package/dest/api/fields.js +1 -0
  12. package/dest/api/wallet.d.ts +2 -2
  13. package/dest/api/wallet.d.ts.map +1 -1
  14. package/dest/api/wallet.js +1 -1
  15. package/dest/contract/batch_call.d.ts +3 -3
  16. package/dest/contract/batch_call.d.ts.map +1 -1
  17. package/dest/contract/batch_call.js +8 -5
  18. package/dest/contract/contract_function_interaction.d.ts +3 -12
  19. package/dest/contract/contract_function_interaction.d.ts.map +1 -1
  20. package/dest/contract/contract_function_interaction.js +10 -7
  21. package/dest/contract/deploy_method.d.ts +19 -6
  22. package/dest/contract/deploy_method.d.ts.map +1 -1
  23. package/dest/contract/deploy_method.js +25 -10
  24. package/dest/contract/get_gas_limits.js +3 -3
  25. package/dest/contract/interaction_options.d.ts +8 -1
  26. package/dest/contract/interaction_options.d.ts.map +1 -1
  27. package/dest/contract/protocol_contracts/auth-registry.d.ts +10 -1
  28. package/dest/contract/protocol_contracts/auth-registry.d.ts.map +1 -1
  29. package/dest/contract/protocol_contracts/auth-registry.js +506 -59
  30. package/dest/contract/protocol_contracts/contract-class-registry.d.ts +2 -13
  31. package/dest/contract/protocol_contracts/contract-class-registry.d.ts.map +1 -1
  32. package/dest/contract/protocol_contracts/contract-class-registry.js +12 -258
  33. package/dest/contract/protocol_contracts/fee-juice.d.ts +1 -1
  34. package/dest/contract/protocol_contracts/fee-juice.d.ts.map +1 -1
  35. package/dest/contract/protocol_contracts/fee-juice.js +8 -0
  36. package/dest/contract/protocol_contracts/multi-call-entrypoint.d.ts +1 -1
  37. package/dest/contract/protocol_contracts/multi-call-entrypoint.d.ts.map +1 -1
  38. package/dest/contract/protocol_contracts/multi-call-entrypoint.js +27 -1
  39. package/dest/contract/protocol_contracts/public-checks.d.ts +1 -1
  40. package/dest/contract/protocol_contracts/public-checks.d.ts.map +1 -1
  41. package/dest/contract/protocol_contracts/public-checks.js +27 -1
  42. package/dest/fee/fee_juice_payment_method_with_claim.js +6 -6
  43. package/dest/fee/private_fee_payment_method.js +10 -10
  44. package/dest/fee/public_fee_payment_method.js +10 -10
  45. package/dest/fee/sponsored_fee_payment.js +3 -3
  46. package/dest/wallet/capabilities.d.ts +13 -5
  47. package/dest/wallet/capabilities.d.ts.map +1 -1
  48. package/dest/wallet/deploy_account_method.d.ts +15 -4
  49. package/dest/wallet/deploy_account_method.d.ts.map +1 -1
  50. package/dest/wallet/deploy_account_method.js +26 -0
  51. package/dest/wallet/wallet.d.ts +297 -89
  52. package/dest/wallet/wallet.d.ts.map +1 -1
  53. package/dest/wallet/wallet.js +35 -25
  54. package/package.json +20 -11
  55. package/src/api/contract.ts +2 -2
  56. package/src/api/deployment.ts +0 -1
  57. package/src/api/events.ts +35 -27
  58. package/src/api/fields.ts +1 -0
  59. package/src/api/wallet.ts +5 -1
  60. package/src/contract/batch_call.ts +7 -12
  61. package/src/contract/contract_function_interaction.ts +17 -7
  62. package/src/contract/deploy_method.ts +48 -14
  63. package/src/contract/get_gas_limits.ts +3 -3
  64. package/src/contract/interaction_options.ts +7 -0
  65. package/src/contract/protocol_contracts/auth-registry.ts +239 -37
  66. package/src/contract/protocol_contracts/contract-class-registry.ts +3 -145
  67. package/src/contract/protocol_contracts/fee-juice.ts +2 -0
  68. package/src/contract/protocol_contracts/multi-call-entrypoint.ts +5 -1
  69. package/src/contract/protocol_contracts/public-checks.ts +5 -1
  70. package/src/fee/fee_juice_payment_method_with_claim.ts +5 -5
  71. package/src/fee/private_fee_payment_method.ts +7 -7
  72. package/src/fee/public_fee_payment_method.ts +8 -8
  73. package/src/fee/sponsored_fee_payment.ts +3 -3
  74. package/src/wallet/capabilities.ts +13 -4
  75. package/src/wallet/deploy_account_method.ts +39 -2
  76. package/src/wallet/wallet.ts +88 -38
  77. package/dest/deployment/broadcast_function.d.ts +0 -24
  78. package/dest/deployment/broadcast_function.d.ts.map +0 -1
  79. package/dest/deployment/broadcast_function.js +0 -74
  80. package/src/deployment/broadcast_function.ts +0 -148
@@ -1,5 +1,5 @@
1
1
  import { Fr } from '@aztec/foundation/curves/bn254';
2
- import { type FunctionAbi, FunctionSelector, FunctionType, decodeFromAbi } from '@aztec/stdlib/abi';
2
+ import { type FunctionAbi, FunctionCall, FunctionSelector, FunctionType, decodeFromAbi } from '@aztec/stdlib/abi';
3
3
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
4
4
  import type { GasSettings } from '@aztec/stdlib/gas';
5
5
  import { ExecutionPayload } from '@aztec/stdlib/tx';
@@ -102,21 +102,21 @@ export class PrivateFeePaymentMethod implements FeePaymentMethod {
102
102
 
103
103
  const witness = await this.wallet.createAuthWit(this.sender, {
104
104
  caller: this.paymentContract,
105
- call: {
105
+ call: FunctionCall.from({
106
106
  name: 'transfer_to_public',
107
- args: [this.sender.toField(), this.paymentContract.toField(), maxFee, txNonce],
107
+ to: await this.getAsset(),
108
108
  selector: await FunctionSelector.fromSignature('transfer_to_public((Field),(Field),u128,Field)'),
109
109
  type: FunctionType.PRIVATE,
110
110
  hideMsgSender: false,
111
111
  isStatic: false,
112
- to: await this.getAsset(),
112
+ args: [this.sender.toField(), this.paymentContract.toField(), maxFee, txNonce],
113
113
  returnTypes: [],
114
- },
114
+ }),
115
115
  });
116
116
 
117
117
  return new ExecutionPayload(
118
118
  [
119
- {
119
+ FunctionCall.from({
120
120
  name: 'fee_entrypoint_private',
121
121
  to: this.paymentContract,
122
122
  selector: await FunctionSelector.fromSignature('fee_entrypoint_private(u128,Field)'),
@@ -125,7 +125,7 @@ export class PrivateFeePaymentMethod implements FeePaymentMethod {
125
125
  isStatic: false,
126
126
  args: [maxFee, txNonce],
127
127
  returnTypes: [],
128
- },
128
+ }),
129
129
  ],
130
130
  [witness],
131
131
  [],
@@ -1,5 +1,5 @@
1
1
  import { Fr } from '@aztec/foundation/curves/bn254';
2
- import { type FunctionAbi, FunctionSelector, FunctionType, decodeFromAbi } from '@aztec/stdlib/abi';
2
+ import { type FunctionAbi, FunctionCall, FunctionSelector, FunctionType, decodeFromAbi } from '@aztec/stdlib/abi';
3
3
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
4
4
  import { GasSettings } from '@aztec/stdlib/gas';
5
5
  import { ExecutionPayload } from '@aztec/stdlib/tx';
@@ -94,16 +94,16 @@ export class PublicFeePaymentMethod implements FeePaymentMethod {
94
94
 
95
95
  const intent = {
96
96
  caller: this.paymentContract,
97
- call: {
97
+ call: FunctionCall.from({
98
98
  name: 'transfer_in_public',
99
- args: [this.sender.toField(), this.paymentContract.toField(), maxFee, txNonce],
99
+ to: await this.getAsset(),
100
100
  selector: await FunctionSelector.fromSignature('transfer_in_public((Field),(Field),u128,Field)'),
101
101
  type: FunctionType.PUBLIC,
102
- isStatic: false,
103
102
  hideMsgSender: false /** The target function performs an authwit check, so msg_sender is needed */,
104
- to: await this.getAsset(),
103
+ isStatic: false,
104
+ args: [this.sender.toField(), this.paymentContract.toField(), maxFee, txNonce],
105
105
  returnTypes: [],
106
- },
106
+ }),
107
107
  };
108
108
 
109
109
  const setPublicAuthWitInteraction = await SetPublicAuthwitContractInteraction.create(
@@ -116,7 +116,7 @@ export class PublicFeePaymentMethod implements FeePaymentMethod {
116
116
  return new ExecutionPayload(
117
117
  [
118
118
  ...(await setPublicAuthWitInteraction.request()).calls,
119
- {
119
+ FunctionCall.from({
120
120
  name: 'fee_entrypoint_public',
121
121
  to: this.paymentContract,
122
122
  selector: await FunctionSelector.fromSignature('fee_entrypoint_public(u128,Field)'),
@@ -125,7 +125,7 @@ export class PublicFeePaymentMethod implements FeePaymentMethod {
125
125
  isStatic: false,
126
126
  args: [maxFee, txNonce],
127
127
  returnTypes: [],
128
- },
128
+ }),
129
129
  ],
130
130
  [],
131
131
  [],
@@ -1,5 +1,5 @@
1
1
  import type { FeePaymentMethod } from '@aztec/aztec.js/fee';
2
- import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
2
+ import { FunctionCall, FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
3
3
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
4
4
  import type { GasSettings } from '@aztec/stdlib/gas';
5
5
  import { ExecutionPayload } from '@aztec/stdlib/tx';
@@ -22,7 +22,7 @@ export class SponsoredFeePaymentMethod implements FeePaymentMethod {
22
22
  async getExecutionPayload(): Promise<ExecutionPayload> {
23
23
  return new ExecutionPayload(
24
24
  [
25
- {
25
+ FunctionCall.from({
26
26
  name: 'sponsor_unconditionally',
27
27
  to: this.paymentContract,
28
28
  selector: await FunctionSelector.fromSignature('sponsor_unconditionally()'),
@@ -31,7 +31,7 @@ export class SponsoredFeePaymentMethod implements FeePaymentMethod {
31
31
  isStatic: false,
32
32
  args: [],
33
33
  returnTypes: [],
34
- },
34
+ }),
35
35
  ],
36
36
  [],
37
37
  [],
@@ -32,6 +32,15 @@ export interface ContractFunctionPattern {
32
32
 
33
33
  /** Function name or '*' for any function */
34
34
  function: string;
35
+
36
+ /**
37
+ * Additional addresses whose private state and keys are accessible
38
+ * when calling this function, beyond the sender's.
39
+ * - undefined: No additional scopes allowed
40
+ * - AztecAddress[]: Only these specific addresses allowed as additional scopes
41
+ * - '*': All known address allowed as an additional scope
42
+ */
43
+ additionalScopes?: AztecAddress[] | '*';
35
44
  }
36
45
 
37
46
  /**
@@ -180,11 +189,11 @@ export interface ContractClassesCapability {
180
189
  export interface GrantedContractClassesCapability extends ContractClassesCapability {}
181
190
 
182
191
  /**
183
- * Transaction simulation capability - for simulating transactions and utilities.
192
+ * Transaction simulation capability - for simulating transactions and executing utilities.
184
193
  *
185
194
  * Maps to wallet methods:
186
195
  * - simulateTx (when transactions scope specified)
187
- * - simulateUtility (when utilities scope specified)
196
+ * - executeUtility (when utilities scope specified)
188
197
  * - profileTx (when transactions scope specified)
189
198
  *
190
199
  * @example
@@ -200,7 +209,7 @@ export interface GrantedContractClassesCapability extends ContractClassesCapabil
200
209
  * \}
201
210
  *
202
211
  * @example
203
- * // Simulate any transaction and utility call
212
+ * // Simulate any transaction and execute any utility call
204
213
  * \{
205
214
  * type: 'simulation',
206
215
  * transactions: \{ scope: '*' \},
@@ -221,7 +230,7 @@ export interface SimulationCapability {
221
230
  scope: '*' | ContractFunctionPattern[];
222
231
  };
223
232
 
224
- /** Utility simulation scope (unconstrained calls). Maps to: simulateUtility */
233
+ /** Utility execution scope (unconstrained calls). Maps to: executeUtility */
225
234
  utilities?: {
226
235
  /**
227
236
  * Which contracts/functions to allow:
@@ -9,15 +9,22 @@ import type { Account } from '../account/account.js';
9
9
  import type { Contract } from '../contract/contract.js';
10
10
  import type { ContractBase } from '../contract/contract_base.js';
11
11
  import {
12
+ type DeployInteractionWaitOptions,
12
13
  DeployMethod,
14
+ type DeployOptions,
13
15
  type DeployOptionsWithoutWait,
14
16
  type RequestDeployOptions,
15
17
  type SimulateDeployOptions,
16
18
  } from '../contract/deploy_method.js';
17
- import type { FeePaymentMethodOption, InteractionWaitOptions } from '../contract/interaction_options.js';
19
+ import type {
20
+ FeePaymentMethodOption,
21
+ InteractionWaitOptions,
22
+ ProfileInteractionOptions,
23
+ } from '../contract/interaction_options.js';
24
+ import type { WaitOpts } from '../contract/wait_opts.js';
18
25
  import type { FeePaymentMethod } from '../fee/fee_payment_method.js';
19
26
  import { AccountEntrypointMetaPaymentMethod } from './account_entrypoint_meta_payment_method.js';
20
- import type { Wallet } from './index.js';
27
+ import type { ProfileOptions, SendOptions, SimulateOptions, Wallet } from './index.js';
21
28
 
22
29
  /**
23
30
  * Extended fee payment method option for account deployments that includes entrypoint wrapping options
@@ -147,4 +154,34 @@ export class DeployAccountMethod<TContract extends ContractBase = Contract> exte
147
154
  deployer: options.from,
148
155
  };
149
156
  }
157
+
158
+ protected override convertDeployOptionsToSendOptions<W extends DeployInteractionWaitOptions>(
159
+ options: DeployOptions<W>,
160
+ // eslint-disable-next-line jsdoc/require-jsdoc
161
+ ): SendOptions<W extends { returnReceipt: true } ? WaitOpts : W> {
162
+ return super.convertDeployOptionsToSendOptions(this.injectContractAddressIntoScopes(options));
163
+ }
164
+
165
+ protected override convertDeployOptionsToSimulateOptions(options: SimulateDeployOptions): SimulateOptions {
166
+ return super.convertDeployOptionsToSimulateOptions(this.injectContractAddressIntoScopes(options));
167
+ }
168
+
169
+ protected override convertDeployOptionsToProfileOptions(
170
+ options: DeployOptionsWithoutWait & ProfileInteractionOptions,
171
+ ): ProfileOptions {
172
+ return super.convertDeployOptionsToProfileOptions(this.injectContractAddressIntoScopes(options));
173
+ }
174
+
175
+ /**
176
+ * Injects the contract's own address into scopes so the constructor can access its own keys.
177
+ * @param options - The deploy options to augment with the contract address.
178
+ */
179
+ // eslint-disable-next-line jsdoc/require-jsdoc
180
+ private injectContractAddressIntoScopes<T extends { additionalScopes?: AztecAddress[] }>(options: T): T {
181
+ if (!this.address) {
182
+ throw new Error('Instance not yet constructed. This is a bug!');
183
+ }
184
+ const existing = options.additionalScopes ?? [];
185
+ return { ...options, additionalScopes: [...existing, this.address] };
186
+ }
150
187
  }
@@ -7,8 +7,7 @@ import {
7
7
  type ContractArtifact,
8
8
  ContractArtifactSchema,
9
9
  type EventMetadataDefinition,
10
- type FunctionCall,
11
- FunctionType,
10
+ FunctionCall,
12
11
  } from '@aztec/stdlib/abi';
13
12
  import { AuthWitness } from '@aztec/stdlib/auth-witness';
14
13
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
@@ -23,7 +22,7 @@ import {
23
22
  TxProfileResult,
24
23
  TxReceipt,
25
24
  TxSimulationResult,
26
- UtilitySimulationResult,
25
+ UtilityExecutionResult,
27
26
  inTxSchema,
28
27
  } from '@aztec/stdlib/tx';
29
28
 
@@ -140,37 +139,66 @@ export type BatchResults<T extends readonly BatchedMethod[]> = {
140
139
  };
141
140
 
142
141
  /**
143
- * Filter options when querying private events.
142
+ * Base filter options for event queries.
144
143
  */
145
- export type PrivateEventFilter = {
146
- /** The address of the contract that emitted the events. */
147
- contractAddress: AztecAddress;
148
- /** Addresses of accounts that are in scope for this filter. */
149
- scopes: AztecAddress[];
144
+ export type EventFilterBase = {
150
145
  /** Transaction in which the events were emitted. */
151
146
  txHash?: TxHash;
152
147
  /** The block number from which to start fetching events (inclusive).
153
148
  * Optional. If provided, it must be greater or equal than 1.
154
149
  * Defaults to the initial L2 block number (INITIAL_L2_BLOCK_NUM).
155
- * */
150
+ */
156
151
  fromBlock?: BlockNumber;
157
152
  /** The block number until which to fetch logs (not inclusive).
158
153
  * Optional. If provided, it must be greater than fromBlock.
159
- * Defaults to the latest known block to PXE + 1.
160
154
  */
161
155
  toBlock?: BlockNumber;
162
156
  };
163
157
 
164
158
  /**
165
- * An ABI decoded private event with associated metadata.
159
+ * Filter options when querying private events.
166
160
  */
167
- export type PrivateEvent<T> = {
161
+ export type PrivateEventFilter = EventFilterBase & {
162
+ /** The address of the contract that emitted the events. */
163
+ contractAddress: AztecAddress;
164
+ /** Addresses of accounts that are in scope for this filter. */
165
+ scopes: AztecAddress[];
166
+ };
167
+
168
+ /**
169
+ * Filter options when querying public events.
170
+ */
171
+ export type PublicEventFilter = EventFilterBase & {
172
+ /** The address of the contract that emitted the events. */
173
+ contractAddress?: AztecAddress;
174
+ };
175
+
176
+ /**
177
+ * An ABI decoded event with associated metadata.
178
+ * @typeParam T - The decoded event type
179
+ * @typeParam M - Additional metadata fields (empty by default)
180
+ */
181
+ export type Event<T, M extends object = object> = {
168
182
  /** The ABI decoded event */
169
183
  event: T;
170
184
  /** Metadata describing event context information such as tx and block */
171
- metadata: InTx;
185
+ metadata: InTx & M;
172
186
  };
173
187
 
188
+ /** An ABI decoded private event with associated metadata. */
189
+ export type PrivateEvent<T> = Event<T>;
190
+
191
+ /** An ABI decoded public event with associated metadata (includes contract address). */
192
+ export type PublicEvent<T> = Event<
193
+ T,
194
+ {
195
+ /**
196
+ * Address of the contract that emitted this event
197
+ */
198
+ contractAddress: AztecAddress;
199
+ }
200
+ >;
201
+
174
202
  /**
175
203
  * Contract metadata including deployment and registration status.
176
204
  */
@@ -197,6 +225,16 @@ export type ContractClassMetadata = {
197
225
  isContractClassPubliclyRegistered: boolean;
198
226
  };
199
227
 
228
+ /**
229
+ * Options for executing a utility function call.
230
+ */
231
+ export type ExecuteUtilityOptions = {
232
+ /** The scope for the utility execution (determines which notes and keys are visible). */
233
+ scope: AztecAddress;
234
+ /** Optional auth witnesses to use during execution. */
235
+ authWitnesses?: AuthWitness[];
236
+ };
237
+
200
238
  /**
201
239
  * The wallet interface.
202
240
  */
@@ -217,7 +255,7 @@ export type Wallet = {
217
255
  secretKey?: Fr,
218
256
  ): Promise<ContractInstanceWithAddress>;
219
257
  simulateTx(exec: ExecutionPayload, opts: SimulateOptions): Promise<TxSimulationResult>;
220
- simulateUtility(call: FunctionCall, authwits?: AuthWitness[]): Promise<UtilitySimulationResult>;
258
+ executeUtility(call: FunctionCall, opts: ExecuteUtilityOptions): Promise<UtilityExecutionResult>;
221
259
  profileTx(exec: ExecutionPayload, opts: ProfileOptions): Promise<TxProfileResult>;
222
260
  sendTx<W extends InteractionWaitOptions = undefined>(
223
261
  exec: ExecutionPayload,
@@ -228,19 +266,8 @@ export type Wallet = {
228
266
  batch<const T extends readonly BatchedMethod[]>(methods: T): Promise<BatchResults<T>>;
229
267
  };
230
268
 
231
- export const FunctionCallSchema = z.object({
232
- name: z.string(),
233
- to: schemas.AztecAddress,
234
- selector: schemas.FunctionSelector,
235
- type: z.nativeEnum(FunctionType),
236
- isStatic: z.boolean(),
237
- hideMsgSender: z.boolean(),
238
- args: z.array(schemas.Fr),
239
- returnTypes: z.array(AbiTypeSchema),
240
- });
241
-
242
269
  export const ExecutionPayloadSchema = z.object({
243
- calls: z.array(FunctionCallSchema),
270
+ calls: z.array(FunctionCall.schema),
244
271
  authWitnesses: z.array(AuthWitness.schema),
245
272
  capsules: z.array(Capsule.schema),
246
273
  extraHashedArgs: z.array(HashedValues.schema),
@@ -276,6 +303,7 @@ export const SendOptionsSchema = z.object({
276
303
  capsules: optional(z.array(Capsule.schema)),
277
304
  fee: optional(GasSettingsOptionSchema),
278
305
  wait: optional(z.union([z.literal(NO_WAIT), WaitOptsSchema])),
306
+ additionalScopes: optional(z.array(schemas.AztecAddress)),
279
307
  });
280
308
 
281
309
  export const SimulateOptionsSchema = z.object({
@@ -286,6 +314,7 @@ export const SimulateOptionsSchema = z.object({
286
314
  skipTxValidation: optional(z.boolean()),
287
315
  skipFeeEnforcement: optional(z.boolean()),
288
316
  includeMetadata: optional(z.boolean()),
317
+ additionalScopes: optional(z.array(schemas.AztecAddress)),
289
318
  });
290
319
 
291
320
  export const ProfileOptionsSchema = SimulateOptionsSchema.extend({
@@ -297,7 +326,7 @@ export const MessageHashOrIntentSchema = z.union([
297
326
  z.object({ consumer: schemas.AztecAddress, innerHash: schemas.Fr }),
298
327
  z.object({
299
328
  caller: schemas.AztecAddress,
300
- call: FunctionCallSchema,
329
+ call: FunctionCall.schema,
301
330
  }),
302
331
  ]);
303
332
 
@@ -307,6 +336,21 @@ export const EventMetadataDefinitionSchema = z.object({
307
336
  fieldNames: z.array(z.string()),
308
337
  });
309
338
 
339
+ const EventFilterBaseSchema = z.object({
340
+ txHash: optional(TxHash.schema),
341
+ fromBlock: optional(BlockNumberPositiveSchema),
342
+ toBlock: optional(BlockNumberPositiveSchema),
343
+ });
344
+
345
+ export const PrivateEventFilterSchema = EventFilterBaseSchema.extend({
346
+ contractAddress: schemas.AztecAddress,
347
+ scopes: z.array(schemas.AztecAddress),
348
+ });
349
+
350
+ export const PublicEventFilterSchema = EventFilterBaseSchema.extend({
351
+ contractAddress: optional(schemas.AztecAddress),
352
+ });
353
+
310
354
  export const PrivateEventSchema: z.ZodType<any> = zodFor<PrivateEvent<AbiDecoded>>()(
311
355
  z.object({
312
356
  event: AbiDecodedSchema,
@@ -314,13 +358,12 @@ export const PrivateEventSchema: z.ZodType<any> = zodFor<PrivateEvent<AbiDecoded
314
358
  }),
315
359
  );
316
360
 
317
- export const PrivateEventFilterSchema = z.object({
318
- contractAddress: schemas.AztecAddress,
319
- scopes: z.array(schemas.AztecAddress),
320
- txHash: optional(TxHash.schema),
321
- fromBlock: optional(BlockNumberPositiveSchema),
322
- toBlock: optional(BlockNumberPositiveSchema),
323
- });
361
+ export const PublicEventSchema = zodFor<PublicEvent<AbiDecoded>>()(
362
+ z.object({
363
+ event: AbiDecodedSchema,
364
+ metadata: z.intersection(inTxSchema(), z.object({ contractAddress: schemas.AztecAddress })),
365
+ }),
366
+ );
324
367
 
325
368
  export const ContractMetadataSchema = z.object({
326
369
  instance: optional(ContractInstanceWithAddressSchema),
@@ -338,6 +381,7 @@ export const ContractClassMetadataSchema = z.object({
338
381
  export const ContractFunctionPatternSchema = z.object({
339
382
  contract: z.union([schemas.AztecAddress, z.literal('*')]),
340
383
  function: z.union([z.string(), z.literal('*')]),
384
+ additionalScopes: optional(z.union([z.array(schemas.AztecAddress), z.literal('*')])),
341
385
  });
342
386
 
343
387
  export const AccountsCapabilitySchema = z.object({
@@ -477,10 +521,16 @@ const WalletMethodSchemas = {
477
521
  .args(ContractInstanceWithAddressSchema, optional(ContractArtifactSchema), optional(schemas.Fr))
478
522
  .returns(ContractInstanceWithAddressSchema),
479
523
  simulateTx: z.function().args(ExecutionPayloadSchema, SimulateOptionsSchema).returns(TxSimulationResult.schema),
480
- simulateUtility: z
524
+ executeUtility: z
481
525
  .function()
482
- .args(FunctionCallSchema, optional(z.array(AuthWitness.schema)))
483
- .returns(UtilitySimulationResult.schema),
526
+ .args(
527
+ FunctionCall.schema,
528
+ z.object({
529
+ scope: schemas.AztecAddress,
530
+ authWitnesses: optional(z.array(AuthWitness.schema)),
531
+ }),
532
+ )
533
+ .returns(UtilityExecutionResult.schema),
484
534
  profileTx: z.function().args(ExecutionPayloadSchema, ProfileOptionsSchema).returns(TxProfileResult.schema),
485
535
  sendTx: z
486
536
  .function()
@@ -1,24 +0,0 @@
1
- import { type ContractArtifact, FunctionSelector } from '@aztec/stdlib/abi';
2
- import type { ContractFunctionInteraction } from '../contract/contract_function_interaction.js';
3
- import type { Wallet } from '../wallet/index.js';
4
- /**
5
- * Sets up a call to broadcast a private function's bytecode via the ClassRegistry contract.
6
- * Note that this is not required for users to call the function, but is rather a convenience to make
7
- * this code publicly available so dapps or wallets do not need to redistribute it.
8
- * @param wallet - Wallet to send the transaction.
9
- * @param artifact - Contract artifact that contains the function to be broadcast.
10
- * @param selector - Selector of the function to be broadcast.
11
- * @returns A ContractFunctionInteraction object that can be used to send the transaction.
12
- */
13
- export declare function broadcastPrivateFunction(wallet: Wallet, artifact: ContractArtifact, selector: FunctionSelector): Promise<ContractFunctionInteraction>;
14
- /**
15
- * Sets up a call to broadcast a utility function's bytecode via the ClassRegistry contract.
16
- * Note that this is not required for users to call the function, but is rather a convenience to make
17
- * this code publicly available so dapps or wallets do not need to redistribute it.
18
- * @param wallet - Wallet to send the transaction.
19
- * @param artifact - Contract artifact that contains the function to be broadcast.
20
- * @param selector - Selector of the function to be broadcast.
21
- * @returns A ContractFunctionInteraction object that can be used to send the transaction.
22
- */
23
- export declare function broadcastUtilityFunction(wallet: Wallet, artifact: ContractArtifact, selector: FunctionSelector): Promise<ContractFunctionInteraction>;
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvYWRjYXN0X2Z1bmN0aW9uLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVwbG95bWVudC9icm9hZGNhc3RfZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQWdDLE1BQU0sbUJBQW1CLENBQUM7QUFTMUcsT0FBTyxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUVoRyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRDs7Ozs7Ozs7R0FRRztBQUNILHdCQUFzQix3QkFBd0IsQ0FDNUMsTUFBTSxFQUFFLE1BQU0sRUFDZCxRQUFRLEVBQUUsZ0JBQWdCLEVBQzFCLFFBQVEsRUFBRSxnQkFBZ0IsR0FDekIsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBb0R0QztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsd0JBQXNCLHdCQUF3QixDQUM1QyxNQUFNLEVBQUUsTUFBTSxFQUNkLFFBQVEsRUFBRSxnQkFBZ0IsRUFDMUIsUUFBUSxFQUFFLGdCQUFnQixHQUN6QixPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0E4Q3RDIn0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"broadcast_function.d.ts","sourceRoot":"","sources":["../../src/deployment/broadcast_function.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAgC,MAAM,mBAAmB,CAAC;AAS1G,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAEhG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,2BAA2B,CAAC,CAoDtC;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,2BAA2B,CAAC,CA8CtC"}
@@ -1,74 +0,0 @@
1
- import { ARTIFACT_FUNCTION_TREE_MAX_HEIGHT, CONTRACT_CLASS_REGISTRY_BYTECODE_CAPSULE_SLOT, MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS } from '@aztec/constants';
2
- import { padArrayEnd } from '@aztec/foundation/collection';
3
- import { Fr } from '@aztec/foundation/curves/bn254';
4
- import { ProtocolContractAddress } from '@aztec/protocol-contracts';
5
- import { FunctionSelector, FunctionType, bufferAsFields } from '@aztec/stdlib/abi';
6
- import { computeVerificationKeyHash, createPrivateFunctionMembershipProof, createUtilityFunctionMembershipProof, getContractClassFromArtifact } from '@aztec/stdlib/contract';
7
- import { Capsule } from '@aztec/stdlib/tx';
8
- import { ContractClassRegistryContract } from '../contract/protocol_contracts/contract-class-registry.js';
9
- /**
10
- * Sets up a call to broadcast a private function's bytecode via the ClassRegistry contract.
11
- * Note that this is not required for users to call the function, but is rather a convenience to make
12
- * this code publicly available so dapps or wallets do not need to redistribute it.
13
- * @param wallet - Wallet to send the transaction.
14
- * @param artifact - Contract artifact that contains the function to be broadcast.
15
- * @param selector - Selector of the function to be broadcast.
16
- * @returns A ContractFunctionInteraction object that can be used to send the transaction.
17
- */ export async function broadcastPrivateFunction(wallet, artifact, selector) {
18
- const contractClass = await getContractClassFromArtifact(artifact);
19
- const privateFunctions = artifact.functions.filter((fn)=>fn.functionType === FunctionType.PRIVATE);
20
- const functionsAndSelectors = await Promise.all(privateFunctions.map(async (fn)=>({
21
- f: fn,
22
- selector: await FunctionSelector.fromNameAndParameters(fn.name, fn.parameters)
23
- })));
24
- const privateFunctionArtifact = functionsAndSelectors.find((fn)=>selector.equals(fn.selector))?.f;
25
- if (!privateFunctionArtifact) {
26
- throw new Error(`Private function with selector ${selector.toString()} not found`);
27
- }
28
- const { artifactTreeSiblingPath, artifactTreeLeafIndex, artifactMetadataHash, functionMetadataHash, utilityFunctionsTreeRoot, privateFunctionTreeSiblingPath, privateFunctionTreeLeafIndex } = await createPrivateFunctionMembershipProof(selector, artifact);
29
- const vkHash = await computeVerificationKeyHash(privateFunctionArtifact);
30
- const classRegistry = ContractClassRegistryContract.at(wallet);
31
- const bytecode = bufferAsFields(privateFunctionArtifact.bytecode, MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS);
32
- return classRegistry.methods.broadcast_private_function(contractClass.id, artifactMetadataHash, utilityFunctionsTreeRoot, privateFunctionTreeSiblingPath, privateFunctionTreeLeafIndex, padArrayEnd(artifactTreeSiblingPath, Fr.ZERO, ARTIFACT_FUNCTION_TREE_MAX_HEIGHT), artifactTreeLeafIndex, // eslint-disable-next-line camelcase
33
- {
34
- selector,
35
- metadata_hash: functionMetadataHash,
36
- vk_hash: vkHash
37
- }).with({
38
- capsules: [
39
- new Capsule(ProtocolContractAddress.ContractClassRegistry, new Fr(CONTRACT_CLASS_REGISTRY_BYTECODE_CAPSULE_SLOT), bytecode)
40
- ]
41
- });
42
- }
43
- /**
44
- * Sets up a call to broadcast a utility function's bytecode via the ClassRegistry contract.
45
- * Note that this is not required for users to call the function, but is rather a convenience to make
46
- * this code publicly available so dapps or wallets do not need to redistribute it.
47
- * @param wallet - Wallet to send the transaction.
48
- * @param artifact - Contract artifact that contains the function to be broadcast.
49
- * @param selector - Selector of the function to be broadcast.
50
- * @returns A ContractFunctionInteraction object that can be used to send the transaction.
51
- */ export async function broadcastUtilityFunction(wallet, artifact, selector) {
52
- const contractClass = await getContractClassFromArtifact(artifact);
53
- const utilityFunctions = artifact.functions.filter((fn)=>fn.functionType === FunctionType.UTILITY);
54
- const utilityFunctionsAndSelectors = await Promise.all(utilityFunctions.map(async (fn)=>({
55
- f: fn,
56
- selector: await FunctionSelector.fromNameAndParameters(fn.name, fn.parameters)
57
- })));
58
- const utilityFunctionArtifact = utilityFunctionsAndSelectors.find((fn)=>selector.equals(fn.selector))?.f;
59
- if (!utilityFunctionArtifact) {
60
- throw new Error(`Utility function with selector ${selector.toString()} not found`);
61
- }
62
- const { artifactMetadataHash, artifactTreeLeafIndex, artifactTreeSiblingPath, functionMetadataHash, privateFunctionsArtifactTreeRoot } = await createUtilityFunctionMembershipProof(selector, artifact);
63
- const classRegistry = ContractClassRegistryContract.at(wallet);
64
- const bytecode = bufferAsFields(utilityFunctionArtifact.bytecode, MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS);
65
- return classRegistry.methods.broadcast_utility_function(contractClass.id, artifactMetadataHash, privateFunctionsArtifactTreeRoot, padArrayEnd(artifactTreeSiblingPath, Fr.ZERO, ARTIFACT_FUNCTION_TREE_MAX_HEIGHT), artifactTreeLeafIndex, // eslint-disable-next-line camelcase
66
- {
67
- selector,
68
- metadata_hash: functionMetadataHash
69
- }).with({
70
- capsules: [
71
- new Capsule(ProtocolContractAddress.ContractClassRegistry, new Fr(CONTRACT_CLASS_REGISTRY_BYTECODE_CAPSULE_SLOT), bytecode)
72
- ]
73
- });
74
- }