@aztec/aztec.js 0.0.1-commit.e61ad554 → 0.0.1-commit.ec5f612
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.
- package/dest/api/contract.d.ts +2 -2
- package/dest/api/contract.js +2 -2
- package/dest/api/deployment.d.ts +1 -2
- package/dest/api/deployment.d.ts.map +1 -1
- package/dest/api/deployment.js +0 -1
- package/dest/api/events.d.ts +10 -6
- package/dest/api/events.d.ts.map +1 -1
- package/dest/api/events.js +30 -20
- package/dest/api/fields.d.ts +2 -1
- package/dest/api/fields.d.ts.map +1 -1
- package/dest/api/fields.js +1 -0
- package/dest/api/keys.d.ts +1 -1
- package/dest/api/keys.js +1 -1
- package/dest/api/wallet.d.ts +3 -2
- package/dest/api/wallet.d.ts.map +1 -1
- package/dest/api/wallet.js +2 -1
- package/dest/contract/batch_call.d.ts +3 -3
- package/dest/contract/batch_call.d.ts.map +1 -1
- package/dest/contract/batch_call.js +8 -5
- package/dest/contract/contract_function_interaction.d.ts +3 -12
- package/dest/contract/contract_function_interaction.d.ts.map +1 -1
- package/dest/contract/contract_function_interaction.js +10 -7
- package/dest/contract/deploy_method.d.ts +19 -6
- package/dest/contract/deploy_method.d.ts.map +1 -1
- package/dest/contract/deploy_method.js +25 -10
- package/dest/contract/get_gas_limits.js +3 -3
- package/dest/contract/interaction_options.d.ts +8 -1
- package/dest/contract/interaction_options.d.ts.map +1 -1
- package/dest/contract/protocol_contracts/auth-registry.d.ts +1 -1
- package/dest/contract/protocol_contracts/auth-registry.d.ts.map +1 -1
- package/dest/contract/protocol_contracts/auth-registry.js +40 -6
- package/dest/contract/protocol_contracts/contract-class-registry.d.ts +2 -22
- package/dest/contract/protocol_contracts/contract-class-registry.d.ts.map +1 -1
- package/dest/contract/protocol_contracts/contract-class-registry.js +13 -658
- package/dest/contract/protocol_contracts/contract-instance-registry.d.ts +2 -11
- package/dest/contract/protocol_contracts/contract-instance-registry.d.ts.map +1 -1
- package/dest/contract/protocol_contracts/contract-instance-registry.js +80 -473
- package/dest/contract/protocol_contracts/fee-juice.d.ts +1 -10
- package/dest/contract/protocol_contracts/fee-juice.d.ts.map +1 -1
- package/dest/contract/protocol_contracts/fee-juice.js +0 -401
- package/dest/contract/protocol_contracts/multi-call-entrypoint.d.ts +1 -1
- package/dest/contract/protocol_contracts/multi-call-entrypoint.d.ts.map +1 -1
- package/dest/contract/protocol_contracts/multi-call-entrypoint.js +31 -1
- package/dest/contract/protocol_contracts/public-checks.d.ts +1 -1
- package/dest/contract/protocol_contracts/public-checks.d.ts.map +1 -1
- package/dest/contract/protocol_contracts/public-checks.js +31 -9
- package/dest/fee/fee_juice_payment_method_with_claim.js +6 -6
- package/dest/fee/private_fee_payment_method.js +10 -10
- package/dest/fee/public_fee_payment_method.js +10 -10
- package/dest/fee/sponsored_fee_payment.js +3 -3
- package/dest/wallet/capabilities.d.ts +452 -0
- package/dest/wallet/capabilities.d.ts.map +1 -0
- package/dest/wallet/capabilities.js +3 -0
- package/dest/wallet/deploy_account_method.d.ts +15 -4
- package/dest/wallet/deploy_account_method.d.ts.map +1 -1
- package/dest/wallet/deploy_account_method.js +26 -0
- package/dest/wallet/index.d.ts +2 -1
- package/dest/wallet/index.d.ts.map +1 -1
- package/dest/wallet/index.js +1 -0
- package/dest/wallet/wallet.d.ts +1590 -89
- package/dest/wallet/wallet.d.ts.map +1 -1
- package/dest/wallet/wallet.js +154 -25
- package/package.json +20 -11
- package/src/api/contract.ts +2 -2
- package/src/api/deployment.ts +0 -1
- package/src/api/events.ts +35 -27
- package/src/api/fields.ts +1 -0
- package/src/api/keys.ts +2 -2
- package/src/api/wallet.ts +43 -1
- package/src/contract/batch_call.ts +7 -12
- package/src/contract/contract_function_interaction.ts +17 -7
- package/src/contract/deploy_method.ts +48 -14
- package/src/contract/get_gas_limits.ts +3 -3
- package/src/contract/interaction_options.ts +7 -0
- package/src/contract/protocol_contracts/auth-registry.ts +8 -2
- package/src/contract/protocol_contracts/contract-class-registry.ts +4 -338
- package/src/contract/protocol_contracts/contract-instance-registry.ts +34 -225
- package/src/contract/protocol_contracts/fee-juice.ts +0 -193
- package/src/contract/protocol_contracts/multi-call-entrypoint.ts +6 -1
- package/src/contract/protocol_contracts/public-checks.ts +6 -3
- package/src/fee/fee_juice_payment_method_with_claim.ts +5 -5
- package/src/fee/private_fee_payment_method.ts +7 -7
- package/src/fee/public_fee_payment_method.ts +8 -8
- package/src/fee/sponsored_fee_payment.ts +3 -3
- package/src/wallet/capabilities.ts +500 -0
- package/src/wallet/deploy_account_method.ts +39 -2
- package/src/wallet/index.ts +1 -0
- package/src/wallet/wallet.ts +205 -39
- package/dest/deployment/broadcast_function.d.ts +0 -24
- package/dest/deployment/broadcast_function.d.ts.map +0 -1
- package/dest/deployment/broadcast_function.js +0 -74
- package/src/deployment/broadcast_function.ts +0 -148
package/src/wallet/wallet.ts
CHANGED
|
@@ -7,14 +7,14 @@ import {
|
|
|
7
7
|
type ContractArtifact,
|
|
8
8
|
ContractArtifactSchema,
|
|
9
9
|
type EventMetadataDefinition,
|
|
10
|
-
|
|
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';
|
|
15
14
|
import { type ContractInstanceWithAddress, ContractInstanceWithAddressSchema } from '@aztec/stdlib/contract';
|
|
16
15
|
import { Gas } from '@aztec/stdlib/gas';
|
|
17
16
|
import { AbiDecodedSchema, type ApiSchemaFor, optional, schemas, zodFor } from '@aztec/stdlib/schemas';
|
|
17
|
+
import type { ExecutionPayload, InTx } from '@aztec/stdlib/tx';
|
|
18
18
|
import {
|
|
19
19
|
Capsule,
|
|
20
20
|
HashedValues,
|
|
@@ -22,10 +22,9 @@ import {
|
|
|
22
22
|
TxProfileResult,
|
|
23
23
|
TxReceipt,
|
|
24
24
|
TxSimulationResult,
|
|
25
|
-
|
|
25
|
+
UtilityExecutionResult,
|
|
26
26
|
inTxSchema,
|
|
27
27
|
} from '@aztec/stdlib/tx';
|
|
28
|
-
import type { ExecutionPayload, InTx } from '@aztec/stdlib/tx';
|
|
29
28
|
|
|
30
29
|
import { z } from 'zod';
|
|
31
30
|
|
|
@@ -40,6 +39,7 @@ import {
|
|
|
40
39
|
type SimulateInteractionOptions,
|
|
41
40
|
} from '../contract/interaction_options.js';
|
|
42
41
|
import type { CallIntent, IntentInnerHash } from '../utils/authwit.js';
|
|
42
|
+
import type { AppCapabilities, WalletCapabilities } from './capabilities.js';
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
45
|
* A wrapper type that allows any item to be associated with an alias.
|
|
@@ -139,37 +139,66 @@ export type BatchResults<T extends readonly BatchedMethod[]> = {
|
|
|
139
139
|
};
|
|
140
140
|
|
|
141
141
|
/**
|
|
142
|
-
*
|
|
142
|
+
* Base filter options for event queries.
|
|
143
143
|
*/
|
|
144
|
-
export type
|
|
145
|
-
/** The address of the contract that emitted the events. */
|
|
146
|
-
contractAddress: AztecAddress;
|
|
147
|
-
/** Addresses of accounts that are in scope for this filter. */
|
|
148
|
-
scopes: AztecAddress[];
|
|
144
|
+
export type EventFilterBase = {
|
|
149
145
|
/** Transaction in which the events were emitted. */
|
|
150
146
|
txHash?: TxHash;
|
|
151
147
|
/** The block number from which to start fetching events (inclusive).
|
|
152
148
|
* Optional. If provided, it must be greater or equal than 1.
|
|
153
149
|
* Defaults to the initial L2 block number (INITIAL_L2_BLOCK_NUM).
|
|
154
|
-
|
|
150
|
+
*/
|
|
155
151
|
fromBlock?: BlockNumber;
|
|
156
152
|
/** The block number until which to fetch logs (not inclusive).
|
|
157
153
|
* Optional. If provided, it must be greater than fromBlock.
|
|
158
|
-
* Defaults to the latest known block to PXE + 1.
|
|
159
154
|
*/
|
|
160
155
|
toBlock?: BlockNumber;
|
|
161
156
|
};
|
|
162
157
|
|
|
163
158
|
/**
|
|
164
|
-
*
|
|
159
|
+
* Filter options when querying private events.
|
|
160
|
+
*/
|
|
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)
|
|
165
180
|
*/
|
|
166
|
-
export type
|
|
181
|
+
export type Event<T, M extends object = object> = {
|
|
167
182
|
/** The ABI decoded event */
|
|
168
183
|
event: T;
|
|
169
184
|
/** Metadata describing event context information such as tx and block */
|
|
170
|
-
metadata: InTx;
|
|
185
|
+
metadata: InTx & M;
|
|
171
186
|
};
|
|
172
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
|
+
|
|
173
202
|
/**
|
|
174
203
|
* Contract metadata including deployment and registration status.
|
|
175
204
|
*/
|
|
@@ -196,6 +225,16 @@ export type ContractClassMetadata = {
|
|
|
196
225
|
isContractClassPubliclyRegistered: boolean;
|
|
197
226
|
};
|
|
198
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
|
+
|
|
199
238
|
/**
|
|
200
239
|
* The wallet interface.
|
|
201
240
|
*/
|
|
@@ -216,29 +255,19 @@ export type Wallet = {
|
|
|
216
255
|
secretKey?: Fr,
|
|
217
256
|
): Promise<ContractInstanceWithAddress>;
|
|
218
257
|
simulateTx(exec: ExecutionPayload, opts: SimulateOptions): Promise<TxSimulationResult>;
|
|
219
|
-
|
|
258
|
+
executeUtility(call: FunctionCall, opts: ExecuteUtilityOptions): Promise<UtilityExecutionResult>;
|
|
220
259
|
profileTx(exec: ExecutionPayload, opts: ProfileOptions): Promise<TxProfileResult>;
|
|
221
260
|
sendTx<W extends InteractionWaitOptions = undefined>(
|
|
222
261
|
exec: ExecutionPayload,
|
|
223
262
|
opts: SendOptions<W>,
|
|
224
263
|
): Promise<SendReturn<W>>;
|
|
225
264
|
createAuthWit(from: AztecAddress, messageHashOrIntent: IntentInnerHash | CallIntent): Promise<AuthWitness>;
|
|
265
|
+
requestCapabilities(manifest: AppCapabilities): Promise<WalletCapabilities>;
|
|
226
266
|
batch<const T extends readonly BatchedMethod[]>(methods: T): Promise<BatchResults<T>>;
|
|
227
267
|
};
|
|
228
268
|
|
|
229
|
-
export const FunctionCallSchema = z.object({
|
|
230
|
-
name: z.string(),
|
|
231
|
-
to: schemas.AztecAddress,
|
|
232
|
-
selector: schemas.FunctionSelector,
|
|
233
|
-
type: z.nativeEnum(FunctionType),
|
|
234
|
-
isStatic: z.boolean(),
|
|
235
|
-
hideMsgSender: z.boolean(),
|
|
236
|
-
args: z.array(schemas.Fr),
|
|
237
|
-
returnTypes: z.array(AbiTypeSchema),
|
|
238
|
-
});
|
|
239
|
-
|
|
240
269
|
export const ExecutionPayloadSchema = z.object({
|
|
241
|
-
calls: z.array(
|
|
270
|
+
calls: z.array(FunctionCall.schema),
|
|
242
271
|
authWitnesses: z.array(AuthWitness.schema),
|
|
243
272
|
capsules: z.array(Capsule.schema),
|
|
244
273
|
extraHashedArgs: z.array(HashedValues.schema),
|
|
@@ -274,6 +303,7 @@ export const SendOptionsSchema = z.object({
|
|
|
274
303
|
capsules: optional(z.array(Capsule.schema)),
|
|
275
304
|
fee: optional(GasSettingsOptionSchema),
|
|
276
305
|
wait: optional(z.union([z.literal(NO_WAIT), WaitOptsSchema])),
|
|
306
|
+
additionalScopes: optional(z.array(schemas.AztecAddress)),
|
|
277
307
|
});
|
|
278
308
|
|
|
279
309
|
export const SimulateOptionsSchema = z.object({
|
|
@@ -284,6 +314,7 @@ export const SimulateOptionsSchema = z.object({
|
|
|
284
314
|
skipTxValidation: optional(z.boolean()),
|
|
285
315
|
skipFeeEnforcement: optional(z.boolean()),
|
|
286
316
|
includeMetadata: optional(z.boolean()),
|
|
317
|
+
additionalScopes: optional(z.array(schemas.AztecAddress)),
|
|
287
318
|
});
|
|
288
319
|
|
|
289
320
|
export const ProfileOptionsSchema = SimulateOptionsSchema.extend({
|
|
@@ -295,7 +326,7 @@ export const MessageHashOrIntentSchema = z.union([
|
|
|
295
326
|
z.object({ consumer: schemas.AztecAddress, innerHash: schemas.Fr }),
|
|
296
327
|
z.object({
|
|
297
328
|
caller: schemas.AztecAddress,
|
|
298
|
-
call:
|
|
329
|
+
call: FunctionCall.schema,
|
|
299
330
|
}),
|
|
300
331
|
]);
|
|
301
332
|
|
|
@@ -305,6 +336,21 @@ export const EventMetadataDefinitionSchema = z.object({
|
|
|
305
336
|
fieldNames: z.array(z.string()),
|
|
306
337
|
});
|
|
307
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
|
+
|
|
308
354
|
export const PrivateEventSchema: z.ZodType<any> = zodFor<PrivateEvent<AbiDecoded>>()(
|
|
309
355
|
z.object({
|
|
310
356
|
event: AbiDecodedSchema,
|
|
@@ -312,13 +358,12 @@ export const PrivateEventSchema: z.ZodType<any> = zodFor<PrivateEvent<AbiDecoded
|
|
|
312
358
|
}),
|
|
313
359
|
);
|
|
314
360
|
|
|
315
|
-
export const
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
});
|
|
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
|
+
);
|
|
322
367
|
|
|
323
368
|
export const ContractMetadataSchema = z.object({
|
|
324
369
|
instance: optional(ContractInstanceWithAddressSchema),
|
|
@@ -333,6 +378,120 @@ export const ContractClassMetadataSchema = z.object({
|
|
|
333
378
|
isContractClassPubliclyRegistered: z.boolean(),
|
|
334
379
|
});
|
|
335
380
|
|
|
381
|
+
export const ContractFunctionPatternSchema = z.object({
|
|
382
|
+
contract: z.union([schemas.AztecAddress, z.literal('*')]),
|
|
383
|
+
function: z.union([z.string(), z.literal('*')]),
|
|
384
|
+
additionalScopes: optional(z.union([z.array(schemas.AztecAddress), z.literal('*')])),
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
export const AccountsCapabilitySchema = z.object({
|
|
388
|
+
type: z.literal('accounts'),
|
|
389
|
+
canGet: optional(z.boolean()),
|
|
390
|
+
canCreateAuthWit: optional(z.boolean()),
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
export const GrantedAccountsCapabilitySchema = AccountsCapabilitySchema.extend({
|
|
394
|
+
accounts: z.array(z.object({ alias: z.string(), item: schemas.AztecAddress })),
|
|
395
|
+
});
|
|
396
|
+
|
|
397
|
+
export const ContractsCapabilitySchema = z.object({
|
|
398
|
+
type: z.literal('contracts'),
|
|
399
|
+
contracts: z.union([z.literal('*'), z.array(schemas.AztecAddress)]),
|
|
400
|
+
canRegister: optional(z.boolean()),
|
|
401
|
+
canGetMetadata: optional(z.boolean()),
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
export const GrantedContractsCapabilitySchema = ContractsCapabilitySchema;
|
|
405
|
+
|
|
406
|
+
export const ContractClassesCapabilitySchema = z.object({
|
|
407
|
+
type: z.literal('contractClasses'),
|
|
408
|
+
classes: z.union([z.literal('*'), z.array(schemas.Fr)]),
|
|
409
|
+
canGetMetadata: z.boolean(),
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
export const GrantedContractClassesCapabilitySchema = ContractClassesCapabilitySchema;
|
|
413
|
+
|
|
414
|
+
export const SimulationCapabilitySchema = z.object({
|
|
415
|
+
type: z.literal('simulation'),
|
|
416
|
+
transactions: optional(
|
|
417
|
+
z.object({
|
|
418
|
+
scope: z.union([z.literal('*'), z.array(ContractFunctionPatternSchema)]),
|
|
419
|
+
}),
|
|
420
|
+
),
|
|
421
|
+
utilities: optional(
|
|
422
|
+
z.object({
|
|
423
|
+
scope: z.union([z.literal('*'), z.array(ContractFunctionPatternSchema)]),
|
|
424
|
+
}),
|
|
425
|
+
),
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
export const GrantedSimulationCapabilitySchema = SimulationCapabilitySchema;
|
|
429
|
+
|
|
430
|
+
export const TransactionCapabilitySchema = z.object({
|
|
431
|
+
type: z.literal('transaction'),
|
|
432
|
+
scope: z.union([z.literal('*'), z.array(ContractFunctionPatternSchema)]),
|
|
433
|
+
});
|
|
434
|
+
|
|
435
|
+
export const GrantedTransactionCapabilitySchema = TransactionCapabilitySchema;
|
|
436
|
+
|
|
437
|
+
export const DataCapabilitySchema = z.object({
|
|
438
|
+
type: z.literal('data'),
|
|
439
|
+
addressBook: optional(z.boolean()),
|
|
440
|
+
privateEvents: optional(
|
|
441
|
+
z.object({
|
|
442
|
+
contracts: z.union([z.literal('*'), z.array(schemas.AztecAddress)]),
|
|
443
|
+
}),
|
|
444
|
+
),
|
|
445
|
+
});
|
|
446
|
+
|
|
447
|
+
export const GrantedDataCapabilitySchema = DataCapabilitySchema;
|
|
448
|
+
|
|
449
|
+
export const CapabilitySchema = z.discriminatedUnion('type', [
|
|
450
|
+
AccountsCapabilitySchema,
|
|
451
|
+
ContractsCapabilitySchema,
|
|
452
|
+
ContractClassesCapabilitySchema,
|
|
453
|
+
SimulationCapabilitySchema,
|
|
454
|
+
TransactionCapabilitySchema,
|
|
455
|
+
DataCapabilitySchema,
|
|
456
|
+
]);
|
|
457
|
+
|
|
458
|
+
export const GrantedCapabilitySchema = z.discriminatedUnion('type', [
|
|
459
|
+
GrantedAccountsCapabilitySchema,
|
|
460
|
+
GrantedContractsCapabilitySchema,
|
|
461
|
+
GrantedContractClassesCapabilitySchema,
|
|
462
|
+
GrantedSimulationCapabilitySchema,
|
|
463
|
+
GrantedTransactionCapabilitySchema,
|
|
464
|
+
GrantedDataCapabilitySchema,
|
|
465
|
+
]);
|
|
466
|
+
|
|
467
|
+
export const AppCapabilitiesSchema = z.object({
|
|
468
|
+
version: z.literal('1.0'),
|
|
469
|
+
metadata: z.object({
|
|
470
|
+
name: z.string(),
|
|
471
|
+
version: z.string(),
|
|
472
|
+
description: optional(z.string()),
|
|
473
|
+
url: optional(z.string()),
|
|
474
|
+
icon: optional(z.string()),
|
|
475
|
+
}),
|
|
476
|
+
capabilities: z.array(CapabilitySchema),
|
|
477
|
+
behavior: optional(
|
|
478
|
+
z.object({
|
|
479
|
+
mode: optional(z.enum(['strict', 'permissive'])),
|
|
480
|
+
expiration: optional(z.number()),
|
|
481
|
+
}),
|
|
482
|
+
),
|
|
483
|
+
});
|
|
484
|
+
|
|
485
|
+
export const WalletCapabilitiesSchema = z.object({
|
|
486
|
+
version: z.literal('1.0'),
|
|
487
|
+
granted: z.array(GrantedCapabilitySchema),
|
|
488
|
+
wallet: z.object({
|
|
489
|
+
name: z.string(),
|
|
490
|
+
version: z.string(),
|
|
491
|
+
}),
|
|
492
|
+
expiresAt: optional(z.number()),
|
|
493
|
+
});
|
|
494
|
+
|
|
336
495
|
/**
|
|
337
496
|
* Record of all wallet method schemas (excluding batch).
|
|
338
497
|
* This is the single source of truth for method schemas - batch schemas are derived from this.
|
|
@@ -362,16 +521,23 @@ const WalletMethodSchemas = {
|
|
|
362
521
|
.args(ContractInstanceWithAddressSchema, optional(ContractArtifactSchema), optional(schemas.Fr))
|
|
363
522
|
.returns(ContractInstanceWithAddressSchema),
|
|
364
523
|
simulateTx: z.function().args(ExecutionPayloadSchema, SimulateOptionsSchema).returns(TxSimulationResult.schema),
|
|
365
|
-
|
|
524
|
+
executeUtility: z
|
|
366
525
|
.function()
|
|
367
|
-
.args(
|
|
368
|
-
|
|
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),
|
|
369
534
|
profileTx: z.function().args(ExecutionPayloadSchema, ProfileOptionsSchema).returns(TxProfileResult.schema),
|
|
370
535
|
sendTx: z
|
|
371
536
|
.function()
|
|
372
537
|
.args(ExecutionPayloadSchema, SendOptionsSchema)
|
|
373
538
|
.returns(z.union([TxHash.schema, TxReceipt.schema])),
|
|
374
539
|
createAuthWit: z.function().args(schemas.AztecAddress, MessageHashOrIntentSchema).returns(AuthWitness.schema),
|
|
540
|
+
requestCapabilities: z.function().args(AppCapabilitiesSchema).returns(WalletCapabilitiesSchema),
|
|
375
541
|
};
|
|
376
542
|
|
|
377
543
|
/**
|
|
@@ -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
|
-
}
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ARTIFACT_FUNCTION_TREE_MAX_HEIGHT,
|
|
3
|
-
CONTRACT_CLASS_REGISTRY_BYTECODE_CAPSULE_SLOT,
|
|
4
|
-
MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS,
|
|
5
|
-
} from '@aztec/constants';
|
|
6
|
-
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
7
|
-
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
8
|
-
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
9
|
-
import { type ContractArtifact, FunctionSelector, FunctionType, bufferAsFields } from '@aztec/stdlib/abi';
|
|
10
|
-
import {
|
|
11
|
-
computeVerificationKeyHash,
|
|
12
|
-
createPrivateFunctionMembershipProof,
|
|
13
|
-
createUtilityFunctionMembershipProof,
|
|
14
|
-
getContractClassFromArtifact,
|
|
15
|
-
} from '@aztec/stdlib/contract';
|
|
16
|
-
import { Capsule } from '@aztec/stdlib/tx';
|
|
17
|
-
|
|
18
|
-
import type { ContractFunctionInteraction } from '../contract/contract_function_interaction.js';
|
|
19
|
-
import { ContractClassRegistryContract } from '../contract/protocol_contracts/contract-class-registry.js';
|
|
20
|
-
import type { Wallet } from '../wallet/index.js';
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Sets up a call to broadcast a private function's bytecode via the ClassRegistry contract.
|
|
24
|
-
* Note that this is not required for users to call the function, but is rather a convenience to make
|
|
25
|
-
* this code publicly available so dapps or wallets do not need to redistribute it.
|
|
26
|
-
* @param wallet - Wallet to send the transaction.
|
|
27
|
-
* @param artifact - Contract artifact that contains the function to be broadcast.
|
|
28
|
-
* @param selector - Selector of the function to be broadcast.
|
|
29
|
-
* @returns A ContractFunctionInteraction object that can be used to send the transaction.
|
|
30
|
-
*/
|
|
31
|
-
export async function broadcastPrivateFunction(
|
|
32
|
-
wallet: Wallet,
|
|
33
|
-
artifact: ContractArtifact,
|
|
34
|
-
selector: FunctionSelector,
|
|
35
|
-
): Promise<ContractFunctionInteraction> {
|
|
36
|
-
const contractClass = await getContractClassFromArtifact(artifact);
|
|
37
|
-
const privateFunctions = artifact.functions.filter(fn => fn.functionType === FunctionType.PRIVATE);
|
|
38
|
-
const functionsAndSelectors = await Promise.all(
|
|
39
|
-
privateFunctions.map(async fn => ({
|
|
40
|
-
f: fn,
|
|
41
|
-
selector: await FunctionSelector.fromNameAndParameters(fn.name, fn.parameters),
|
|
42
|
-
})),
|
|
43
|
-
);
|
|
44
|
-
const privateFunctionArtifact = functionsAndSelectors.find(fn => selector.equals(fn.selector))?.f;
|
|
45
|
-
if (!privateFunctionArtifact) {
|
|
46
|
-
throw new Error(`Private function with selector ${selector.toString()} not found`);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const {
|
|
50
|
-
artifactTreeSiblingPath,
|
|
51
|
-
artifactTreeLeafIndex,
|
|
52
|
-
artifactMetadataHash,
|
|
53
|
-
functionMetadataHash,
|
|
54
|
-
utilityFunctionsTreeRoot,
|
|
55
|
-
privateFunctionTreeSiblingPath,
|
|
56
|
-
privateFunctionTreeLeafIndex,
|
|
57
|
-
} = await createPrivateFunctionMembershipProof(selector, artifact);
|
|
58
|
-
|
|
59
|
-
const vkHash = await computeVerificationKeyHash(privateFunctionArtifact);
|
|
60
|
-
|
|
61
|
-
const classRegistry = ContractClassRegistryContract.at(wallet);
|
|
62
|
-
const bytecode = bufferAsFields(
|
|
63
|
-
privateFunctionArtifact.bytecode,
|
|
64
|
-
MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS,
|
|
65
|
-
);
|
|
66
|
-
return classRegistry.methods
|
|
67
|
-
.broadcast_private_function(
|
|
68
|
-
contractClass.id,
|
|
69
|
-
artifactMetadataHash,
|
|
70
|
-
utilityFunctionsTreeRoot,
|
|
71
|
-
privateFunctionTreeSiblingPath,
|
|
72
|
-
privateFunctionTreeLeafIndex,
|
|
73
|
-
padArrayEnd(artifactTreeSiblingPath, Fr.ZERO, ARTIFACT_FUNCTION_TREE_MAX_HEIGHT),
|
|
74
|
-
artifactTreeLeafIndex,
|
|
75
|
-
// eslint-disable-next-line camelcase
|
|
76
|
-
{ selector, metadata_hash: functionMetadataHash, vk_hash: vkHash },
|
|
77
|
-
)
|
|
78
|
-
.with({
|
|
79
|
-
capsules: [
|
|
80
|
-
new Capsule(
|
|
81
|
-
ProtocolContractAddress.ContractClassRegistry,
|
|
82
|
-
new Fr(CONTRACT_CLASS_REGISTRY_BYTECODE_CAPSULE_SLOT),
|
|
83
|
-
bytecode,
|
|
84
|
-
),
|
|
85
|
-
],
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Sets up a call to broadcast a utility function's bytecode via the ClassRegistry contract.
|
|
91
|
-
* Note that this is not required for users to call the function, but is rather a convenience to make
|
|
92
|
-
* this code publicly available so dapps or wallets do not need to redistribute it.
|
|
93
|
-
* @param wallet - Wallet to send the transaction.
|
|
94
|
-
* @param artifact - Contract artifact that contains the function to be broadcast.
|
|
95
|
-
* @param selector - Selector of the function to be broadcast.
|
|
96
|
-
* @returns A ContractFunctionInteraction object that can be used to send the transaction.
|
|
97
|
-
*/
|
|
98
|
-
export async function broadcastUtilityFunction(
|
|
99
|
-
wallet: Wallet,
|
|
100
|
-
artifact: ContractArtifact,
|
|
101
|
-
selector: FunctionSelector,
|
|
102
|
-
): Promise<ContractFunctionInteraction> {
|
|
103
|
-
const contractClass = await getContractClassFromArtifact(artifact);
|
|
104
|
-
const utilityFunctions = artifact.functions.filter(fn => fn.functionType === FunctionType.UTILITY);
|
|
105
|
-
const utilityFunctionsAndSelectors = await Promise.all(
|
|
106
|
-
utilityFunctions.map(async fn => ({
|
|
107
|
-
f: fn,
|
|
108
|
-
selector: await FunctionSelector.fromNameAndParameters(fn.name, fn.parameters),
|
|
109
|
-
})),
|
|
110
|
-
);
|
|
111
|
-
const utilityFunctionArtifact = utilityFunctionsAndSelectors.find(fn => selector.equals(fn.selector))?.f;
|
|
112
|
-
if (!utilityFunctionArtifact) {
|
|
113
|
-
throw new Error(`Utility function with selector ${selector.toString()} not found`);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
const {
|
|
117
|
-
artifactMetadataHash,
|
|
118
|
-
artifactTreeLeafIndex,
|
|
119
|
-
artifactTreeSiblingPath,
|
|
120
|
-
functionMetadataHash,
|
|
121
|
-
privateFunctionsArtifactTreeRoot,
|
|
122
|
-
} = await createUtilityFunctionMembershipProof(selector, artifact);
|
|
123
|
-
|
|
124
|
-
const classRegistry = ContractClassRegistryContract.at(wallet);
|
|
125
|
-
const bytecode = bufferAsFields(
|
|
126
|
-
utilityFunctionArtifact.bytecode,
|
|
127
|
-
MAX_PACKED_BYTECODE_SIZE_PER_PRIVATE_FUNCTION_IN_FIELDS,
|
|
128
|
-
);
|
|
129
|
-
return classRegistry.methods
|
|
130
|
-
.broadcast_utility_function(
|
|
131
|
-
contractClass.id,
|
|
132
|
-
artifactMetadataHash,
|
|
133
|
-
privateFunctionsArtifactTreeRoot,
|
|
134
|
-
padArrayEnd(artifactTreeSiblingPath, Fr.ZERO, ARTIFACT_FUNCTION_TREE_MAX_HEIGHT),
|
|
135
|
-
artifactTreeLeafIndex,
|
|
136
|
-
// eslint-disable-next-line camelcase
|
|
137
|
-
{ selector, metadata_hash: functionMetadataHash },
|
|
138
|
-
)
|
|
139
|
-
.with({
|
|
140
|
-
capsules: [
|
|
141
|
-
new Capsule(
|
|
142
|
-
ProtocolContractAddress.ContractClassRegistry,
|
|
143
|
-
new Fr(CONTRACT_CLASS_REGISTRY_BYTECODE_CAPSULE_SLOT),
|
|
144
|
-
bytecode,
|
|
145
|
-
),
|
|
146
|
-
],
|
|
147
|
-
});
|
|
148
|
-
}
|