@aztec/aztec.js 0.0.1-commit.d1f2d6c → 0.0.1-commit.d431d1c
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/block.d.ts +2 -2
- package/dest/api/block.d.ts.map +1 -1
- package/dest/api/block.js +1 -1
- package/dest/api/contract.d.ts +10 -16
- package/dest/api/contract.d.ts.map +1 -1
- package/dest/api/contract.js +8 -14
- package/dest/api/node.d.ts +4 -8
- package/dest/api/node.d.ts.map +1 -1
- package/dest/api/node.js +3 -7
- package/dest/api/tx.d.ts +2 -2
- package/dest/api/tx.d.ts.map +1 -1
- package/dest/api/tx.js +1 -1
- package/dest/api/wallet.d.ts +2 -2
- package/dest/api/wallet.d.ts.map +1 -1
- package/dest/api/wallet.js +1 -1
- package/dest/contract/base_contract_interaction.d.ts +10 -8
- package/dest/contract/base_contract_interaction.d.ts.map +1 -1
- package/dest/contract/base_contract_interaction.js +17 -5
- package/dest/contract/deploy_method.d.ts +16 -63
- package/dest/contract/deploy_method.d.ts.map +1 -1
- package/dest/contract/deploy_method.js +19 -36
- package/dest/contract/deploy_sent_tx.d.ts +48 -0
- package/dest/contract/deploy_sent_tx.d.ts.map +1 -0
- package/dest/contract/deploy_sent_tx.js +46 -0
- package/dest/contract/interaction_options.d.ts +5 -42
- package/dest/contract/interaction_options.d.ts.map +1 -1
- package/dest/contract/interaction_options.js +1 -8
- 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 +13 -0
- package/dest/contract/protocol_contracts/contract-class-registry.d.ts +1 -1
- package/dest/contract/protocol_contracts/contract-class-registry.d.ts.map +1 -1
- package/dest/contract/protocol_contracts/contract-class-registry.js +13 -0
- package/dest/contract/protocol_contracts/contract-instance-registry.d.ts +1 -1
- package/dest/contract/protocol_contracts/contract-instance-registry.d.ts.map +1 -1
- package/dest/contract/protocol_contracts/contract-instance-registry.js +13 -0
- package/dest/contract/protocol_contracts/fee-juice.d.ts +1 -1
- package/dest/contract/protocol_contracts/fee-juice.d.ts.map +1 -1
- package/dest/contract/protocol_contracts/fee-juice.js +13 -0
- 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 +13 -0
- 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 +13 -0
- package/dest/contract/sent_tx.d.ts +50 -0
- package/dest/contract/sent_tx.d.ts.map +1 -0
- package/dest/contract/sent_tx.js +90 -0
- package/dest/contract/wait_for_proven.js +1 -1
- package/dest/utils/authwit.d.ts +6 -6
- package/dest/utils/authwit.d.ts.map +1 -1
- package/dest/utils/authwit.js +6 -2
- package/dest/utils/node.d.ts +1 -12
- package/dest/utils/node.d.ts.map +1 -1
- package/dest/utils/node.js +0 -46
- package/dest/wallet/deploy_account_method.d.ts +5 -19
- package/dest/wallet/deploy_account_method.d.ts.map +1 -1
- package/dest/wallet/wallet.d.ts +18 -63
- package/dest/wallet/wallet.d.ts.map +1 -1
- package/dest/wallet/wallet.js +3 -16
- package/package.json +9 -9
- package/src/api/block.ts +1 -1
- package/src/api/contract.ts +7 -22
- package/src/api/node.ts +3 -7
- package/src/api/tx.ts +0 -2
- package/src/api/wallet.ts +0 -5
- package/src/contract/base_contract_interaction.ts +15 -27
- package/src/contract/deploy_method.ts +23 -115
- package/src/contract/deploy_sent_tx.ts +75 -0
- package/src/contract/interaction_options.ts +4 -49
- package/src/contract/protocol_contracts/auth-registry.ts +9 -0
- package/src/contract/protocol_contracts/contract-class-registry.ts +9 -0
- package/src/contract/protocol_contracts/contract-instance-registry.ts +9 -0
- package/src/contract/protocol_contracts/fee-juice.ts +9 -0
- package/src/contract/protocol_contracts/multi-call-entrypoint.ts +9 -0
- package/src/contract/protocol_contracts/public-checks.ts +9 -0
- package/src/contract/sent_tx.ts +129 -0
- package/src/contract/wait_for_proven.ts +1 -1
- package/src/utils/authwit.ts +4 -16
- package/src/utils/node.ts +0 -62
- package/src/wallet/deploy_account_method.ts +4 -19
- package/src/wallet/wallet.ts +11 -31
- package/dest/contract/wait_opts.d.ts +0 -16
- package/dest/contract/wait_opts.d.ts.map +0 -1
- package/dest/contract/wait_opts.js +0 -5
- package/src/contract/wait_opts.ts +0 -21
|
@@ -2,11 +2,10 @@ import type { FieldsOf } from '@aztec/foundation/types';
|
|
|
2
2
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
3
3
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
4
|
import type { GasSettings } from '@aztec/stdlib/gas';
|
|
5
|
-
import type { Capsule, OffchainEffect, SimulationStats
|
|
5
|
+
import type { Capsule, OffchainEffect, SimulationStats } from '@aztec/stdlib/tx';
|
|
6
6
|
|
|
7
7
|
import type { FeePaymentMethod } from '../fee/fee_payment_method.js';
|
|
8
8
|
import type { ProfileOptions, SendOptions, SimulateOptions } from '../wallet/index.js';
|
|
9
|
-
import type { WaitOpts } from './wait_opts.js';
|
|
10
9
|
|
|
11
10
|
/**
|
|
12
11
|
* Options used to tweak the simulation and add gas estimation capabilities
|
|
@@ -56,47 +55,15 @@ export type RequestInteractionOptions = {
|
|
|
56
55
|
};
|
|
57
56
|
|
|
58
57
|
/**
|
|
59
|
-
*
|
|
60
|
-
* We use this instead of false to avoid confusion with falsy checks.
|
|
61
|
-
*/
|
|
62
|
-
export const NO_WAIT = 'NO_WAIT' as const;
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Type for the NO_WAIT constant.
|
|
66
|
-
*/
|
|
67
|
-
export type NoWait = typeof NO_WAIT;
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Type for wait options in interactions.
|
|
71
|
-
* - NO_WAIT symbol: Don't wait for confirmation, return TxHash immediately
|
|
72
|
-
* - WaitOpts object: Wait with custom options and return receipt/result
|
|
73
|
-
* - undefined: Wait with default options and return receipt/result
|
|
74
|
-
*/
|
|
75
|
-
export type InteractionWaitOptions = NoWait | WaitOpts | undefined;
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Base options for calling a (constrained) function in a contract, without wait parameter.
|
|
58
|
+
* Represents options for calling a (constrained) function in a contract.
|
|
79
59
|
*/
|
|
80
|
-
export type
|
|
60
|
+
export type SendInteractionOptions = RequestInteractionOptions & {
|
|
81
61
|
/** The sender's Aztec address. */
|
|
82
62
|
from: AztecAddress;
|
|
83
63
|
/** The fee options for the transaction. */
|
|
84
64
|
fee?: InteractionFeeOptions;
|
|
85
65
|
};
|
|
86
66
|
|
|
87
|
-
/**
|
|
88
|
-
* Represents options for calling a (constrained) function in a contract.
|
|
89
|
-
*/
|
|
90
|
-
export type SendInteractionOptions<W extends InteractionWaitOptions = undefined> = SendInteractionOptionsWithoutWait & {
|
|
91
|
-
/**
|
|
92
|
-
* Whether to wait for the transaction to be mined.
|
|
93
|
-
* - undefined (default): wait with default options and return TxReceipt
|
|
94
|
-
* - WaitOpts object: wait with custom options and return TxReceipt
|
|
95
|
-
* - NO_WAIT: return txHash immediately without waiting
|
|
96
|
-
*/
|
|
97
|
-
wait?: W;
|
|
98
|
-
};
|
|
99
|
-
|
|
100
67
|
/**
|
|
101
68
|
* Represents the options for simulating a contract function interaction.
|
|
102
69
|
* Allows specifying the address from which the method should be called.
|
|
@@ -143,22 +110,11 @@ export type SimulationReturn<T extends boolean | undefined> = T extends true
|
|
|
143
110
|
}
|
|
144
111
|
: any;
|
|
145
112
|
|
|
146
|
-
/**
|
|
147
|
-
* Represents the result type of sending a transaction.
|
|
148
|
-
* If `wait` is NO_WAIT, returns TxHash immediately without waiting.
|
|
149
|
-
* If `wait` is undefined or WaitOpts, returns TReturn (defaults to TxReceipt) after waiting.
|
|
150
|
-
*/
|
|
151
|
-
export type SendReturn<T extends InteractionWaitOptions, TReturn = TxReceipt> = T extends NoWait ? TxHash : TReturn;
|
|
152
|
-
|
|
153
113
|
/**
|
|
154
114
|
* Transforms and cleans up the higher level SendInteractionOptions defined by the interaction into
|
|
155
115
|
* SendOptions, which are the ones that can be serialized and forwarded to the wallet
|
|
156
|
-
* @param options - The send interaction options with optional wait parameter
|
|
157
|
-
* @returns The send options to forward to the wallet
|
|
158
116
|
*/
|
|
159
|
-
export function toSendOptions
|
|
160
|
-
options: SendInteractionOptions<W>,
|
|
161
|
-
): SendOptions<W> {
|
|
117
|
+
export function toSendOptions(options: SendInteractionOptions): SendOptions {
|
|
162
118
|
return {
|
|
163
119
|
...options,
|
|
164
120
|
fee: {
|
|
@@ -170,7 +126,6 @@ export function toSendOptions<W extends InteractionWaitOptions = undefined>(
|
|
|
170
126
|
...options.fee?.gasSettings,
|
|
171
127
|
},
|
|
172
128
|
},
|
|
173
|
-
wait: options.wait, // Pass through wait option
|
|
174
129
|
};
|
|
175
130
|
}
|
|
176
131
|
|
|
@@ -165,9 +165,18 @@ const AuthRegistryContractArtifact: ContractArtifact = {
|
|
|
165
165
|
error_kind: 'string',
|
|
166
166
|
string: '0 has a square root; you cannot claim it is not square',
|
|
167
167
|
},
|
|
168
|
+
'9885968605480832328': {
|
|
169
|
+
error_kind: 'string',
|
|
170
|
+
string: 'Attempted to read past the length of a CapsuleArray',
|
|
171
|
+
},
|
|
168
172
|
'10135509984888824963': { error_kind: 'fmtstring', length: 58, item_types: [{ kind: 'field' }] },
|
|
169
173
|
'10791800398362570014': { error_kind: 'string', string: 'extend_from_bounded_vec out of bounds' },
|
|
174
|
+
'11021520179822076911': {
|
|
175
|
+
error_kind: 'string',
|
|
176
|
+
string: 'Attempted to delete past the length of a CapsuleArray',
|
|
177
|
+
},
|
|
170
178
|
'11692359521570349358': { error_kind: 'fmtstring', length: 40, item_types: [] },
|
|
179
|
+
'12327971061804302172': { error_kind: 'fmtstring', length: 98, item_types: [] },
|
|
171
180
|
'12469291177396340830': { error_kind: 'string', string: 'call to assert_max_bit_size' },
|
|
172
181
|
'12913276134398371456': { error_kind: 'string', string: 'push out of bounds' },
|
|
173
182
|
'13557316507370296400': {
|
|
@@ -250,9 +250,18 @@ const ContractClassRegistryContractArtifact: ContractArtifact = {
|
|
|
250
250
|
error_kind: 'string',
|
|
251
251
|
string: '0 has a square root; you cannot claim it is not square',
|
|
252
252
|
},
|
|
253
|
+
'9885968605480832328': {
|
|
254
|
+
error_kind: 'string',
|
|
255
|
+
string: 'Attempted to read past the length of a CapsuleArray',
|
|
256
|
+
},
|
|
253
257
|
'10135509984888824963': { error_kind: 'fmtstring', length: 58, item_types: [{ kind: 'field' }] },
|
|
254
258
|
'10791800398362570014': { error_kind: 'string', string: 'extend_from_bounded_vec out of bounds' },
|
|
259
|
+
'11021520179822076911': {
|
|
260
|
+
error_kind: 'string',
|
|
261
|
+
string: 'Attempted to delete past the length of a CapsuleArray',
|
|
262
|
+
},
|
|
255
263
|
'11692359521570349358': { error_kind: 'fmtstring', length: 40, item_types: [] },
|
|
264
|
+
'12327971061804302172': { error_kind: 'fmtstring', length: 98, item_types: [] },
|
|
256
265
|
'12469291177396340830': { error_kind: 'string', string: 'call to assert_max_bit_size' },
|
|
257
266
|
'12913276134398371456': { error_kind: 'string', string: 'push out of bounds' },
|
|
258
267
|
'13557316507370296400': {
|
|
@@ -228,9 +228,18 @@ const ContractInstanceRegistryContractArtifact: ContractArtifact = {
|
|
|
228
228
|
error_kind: 'string',
|
|
229
229
|
string: '0 has a square root; you cannot claim it is not square',
|
|
230
230
|
},
|
|
231
|
+
'9885968605480832328': {
|
|
232
|
+
error_kind: 'string',
|
|
233
|
+
string: 'Attempted to read past the length of a CapsuleArray',
|
|
234
|
+
},
|
|
231
235
|
'10135509984888824963': { error_kind: 'fmtstring', length: 58, item_types: [{ kind: 'field' }] },
|
|
232
236
|
'10791800398362570014': { error_kind: 'string', string: 'extend_from_bounded_vec out of bounds' },
|
|
237
|
+
'11021520179822076911': {
|
|
238
|
+
error_kind: 'string',
|
|
239
|
+
string: 'Attempted to delete past the length of a CapsuleArray',
|
|
240
|
+
},
|
|
233
241
|
'11692359521570349358': { error_kind: 'fmtstring', length: 40, item_types: [] },
|
|
242
|
+
'12327971061804302172': { error_kind: 'fmtstring', length: 98, item_types: [] },
|
|
234
243
|
'12469291177396340830': { error_kind: 'string', string: 'call to assert_max_bit_size' },
|
|
235
244
|
'12913276134398371456': { error_kind: 'string', string: 'push out of bounds' },
|
|
236
245
|
'13557316507370296400': {
|
|
@@ -172,9 +172,18 @@ const FeeJuiceContractArtifact: ContractArtifact = {
|
|
|
172
172
|
error_kind: 'string',
|
|
173
173
|
string: '0 has a square root; you cannot claim it is not square',
|
|
174
174
|
},
|
|
175
|
+
'9885968605480832328': {
|
|
176
|
+
error_kind: 'string',
|
|
177
|
+
string: 'Attempted to read past the length of a CapsuleArray',
|
|
178
|
+
},
|
|
175
179
|
'10135509984888824963': { error_kind: 'fmtstring', length: 58, item_types: [{ kind: 'field' }] },
|
|
176
180
|
'10791800398362570014': { error_kind: 'string', string: 'extend_from_bounded_vec out of bounds' },
|
|
181
|
+
'11021520179822076911': {
|
|
182
|
+
error_kind: 'string',
|
|
183
|
+
string: 'Attempted to delete past the length of a CapsuleArray',
|
|
184
|
+
},
|
|
177
185
|
'11692359521570349358': { error_kind: 'fmtstring', length: 40, item_types: [] },
|
|
186
|
+
'12327971061804302172': { error_kind: 'fmtstring', length: 98, item_types: [] },
|
|
178
187
|
'12469291177396340830': { error_kind: 'string', string: 'call to assert_max_bit_size' },
|
|
179
188
|
'12913276134398371456': { error_kind: 'string', string: 'push out of bounds' },
|
|
180
189
|
'13557316507370296400': {
|
|
@@ -164,9 +164,18 @@ const MultiCallEntrypointContractArtifact: ContractArtifact = {
|
|
|
164
164
|
error_kind: 'string',
|
|
165
165
|
string: '0 has a square root; you cannot claim it is not square',
|
|
166
166
|
},
|
|
167
|
+
'9885968605480832328': {
|
|
168
|
+
error_kind: 'string',
|
|
169
|
+
string: 'Attempted to read past the length of a CapsuleArray',
|
|
170
|
+
},
|
|
167
171
|
'10135509984888824963': { error_kind: 'fmtstring', length: 58, item_types: [{ kind: 'field' }] },
|
|
168
172
|
'10791800398362570014': { error_kind: 'string', string: 'extend_from_bounded_vec out of bounds' },
|
|
173
|
+
'11021520179822076911': {
|
|
174
|
+
error_kind: 'string',
|
|
175
|
+
string: 'Attempted to delete past the length of a CapsuleArray',
|
|
176
|
+
},
|
|
169
177
|
'11692359521570349358': { error_kind: 'fmtstring', length: 40, item_types: [] },
|
|
178
|
+
'12327971061804302172': { error_kind: 'fmtstring', length: 98, item_types: [] },
|
|
170
179
|
'12469291177396340830': { error_kind: 'string', string: 'call to assert_max_bit_size' },
|
|
171
180
|
'12913276134398371456': { error_kind: 'string', string: 'push out of bounds' },
|
|
172
181
|
'13557316507370296400': {
|
|
@@ -97,9 +97,18 @@ const PublicChecksContractArtifact: ContractArtifact = {
|
|
|
97
97
|
error_kind: 'string',
|
|
98
98
|
string: '0 has a square root; you cannot claim it is not square',
|
|
99
99
|
},
|
|
100
|
+
'9885968605480832328': {
|
|
101
|
+
error_kind: 'string',
|
|
102
|
+
string: 'Attempted to read past the length of a CapsuleArray',
|
|
103
|
+
},
|
|
100
104
|
'10135509984888824963': { error_kind: 'fmtstring', length: 58, item_types: [{ kind: 'field' }] },
|
|
101
105
|
'10791800398362570014': { error_kind: 'string', string: 'extend_from_bounded_vec out of bounds' },
|
|
106
|
+
'11021520179822076911': {
|
|
107
|
+
error_kind: 'string',
|
|
108
|
+
string: 'Attempted to delete past the length of a CapsuleArray',
|
|
109
|
+
},
|
|
102
110
|
'11692359521570349358': { error_kind: 'fmtstring', length: 40, item_types: [] },
|
|
111
|
+
'12327971061804302172': { error_kind: 'fmtstring', length: 98, item_types: [] },
|
|
103
112
|
'12469291177396340830': { error_kind: 'string', string: 'call to assert_max_bit_size' },
|
|
104
113
|
'12913276134398371456': { error_kind: 'string', string: 'push out of bounds' },
|
|
105
114
|
'13557316507370296400': {
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
2
|
+
import { retryUntil } from '@aztec/foundation/retry';
|
|
3
|
+
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
4
|
+
import { TxHash, type TxReceipt, TxStatus } from '@aztec/stdlib/tx';
|
|
5
|
+
|
|
6
|
+
import type { Wallet } from '../wallet/wallet.js';
|
|
7
|
+
|
|
8
|
+
/** Options related to waiting for a tx. */
|
|
9
|
+
export type WaitOpts = {
|
|
10
|
+
/** The amount of time to ignore TxStatus.DROPPED receipts (in seconds) due to the presumption that it is being propagated by the p2p network. Defaults to 5. */
|
|
11
|
+
ignoreDroppedReceiptsFor?: number;
|
|
12
|
+
/** The maximum time (in seconds) to wait for the transaction to be mined. Defaults to 60. */
|
|
13
|
+
timeout?: number;
|
|
14
|
+
/** The time interval (in seconds) between retries to fetch the transaction receipt. Defaults to 1. */
|
|
15
|
+
interval?: number;
|
|
16
|
+
/** Whether to accept a revert as a status code for the tx when waiting for it. If false, will throw if the tx reverts. */
|
|
17
|
+
dontThrowOnRevert?: boolean;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const DefaultWaitOpts: WaitOpts = {
|
|
21
|
+
ignoreDroppedReceiptsFor: 5,
|
|
22
|
+
timeout: 300,
|
|
23
|
+
interval: 1,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The SentTx class represents a sent transaction through the PXE (or directly to a node) providing methods to fetch
|
|
28
|
+
* its hash, receipt, and mining status.
|
|
29
|
+
*/
|
|
30
|
+
export class SentTx {
|
|
31
|
+
protected sendTxPromise: Promise<void>;
|
|
32
|
+
protected sendTxError?: Error;
|
|
33
|
+
protected txHash?: TxHash;
|
|
34
|
+
|
|
35
|
+
constructor(
|
|
36
|
+
protected walletOrNode: Wallet | AztecNode,
|
|
37
|
+
sendTx: () => Promise<TxHash>,
|
|
38
|
+
) {
|
|
39
|
+
const { promise, resolve } = promiseWithResolvers<void>();
|
|
40
|
+
this.sendTxPromise = promise;
|
|
41
|
+
sendTx()
|
|
42
|
+
.then(txHash => {
|
|
43
|
+
this.txHash = txHash;
|
|
44
|
+
resolve();
|
|
45
|
+
})
|
|
46
|
+
.catch(err => {
|
|
47
|
+
this.sendTxError = err;
|
|
48
|
+
// Calling resolve instead of reject here because we want to throw the error when getTxHash is called.
|
|
49
|
+
resolve();
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Retrieves the transaction hash of the SentTx instance.
|
|
55
|
+
* The function internally awaits for the 'txHashPromise' to resolve, and then returns the resolved transaction hash.
|
|
56
|
+
*
|
|
57
|
+
* @returns A promise that resolves to the transaction hash of the SentTx instance.
|
|
58
|
+
* TODO(#7717): Don't throw here.
|
|
59
|
+
*/
|
|
60
|
+
public async getTxHash(): Promise<TxHash> {
|
|
61
|
+
// Make sure sendTx has been resolved, which can be triggered when it returns a txHash or when it throws an error.
|
|
62
|
+
await this.sendTxPromise;
|
|
63
|
+
|
|
64
|
+
// If sendTx threw an error, throw it.
|
|
65
|
+
if (this.sendTxError) {
|
|
66
|
+
throw this.sendTxError;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// sendTx returned a txHash if it's been resolved and no error was set.
|
|
70
|
+
return Promise.resolve(this.txHash!);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Retrieve the transaction receipt associated with the current SentTx instance.
|
|
75
|
+
* The function fetches the transaction hash using 'getTxHash' and then queries
|
|
76
|
+
* the PXE to get the corresponding transaction receipt.
|
|
77
|
+
*
|
|
78
|
+
* @returns A promise that resolves to a TxReceipt object representing the fetched transaction receipt.
|
|
79
|
+
*/
|
|
80
|
+
public async getReceipt(): Promise<TxReceipt> {
|
|
81
|
+
const txHash = await this.getTxHash();
|
|
82
|
+
return await this.walletOrNode.getTxReceipt(txHash);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Awaits for a tx to be mined and returns the receipt. Throws if tx is not mined.
|
|
87
|
+
* @param opts - Options for configuring the waiting for the tx to be mined.
|
|
88
|
+
* @returns The transaction receipt.
|
|
89
|
+
*/
|
|
90
|
+
public async wait(opts?: WaitOpts): Promise<TxReceipt> {
|
|
91
|
+
const receipt = await this.waitForReceipt(opts);
|
|
92
|
+
if (receipt.status !== TxStatus.SUCCESS && !opts?.dontThrowOnRevert) {
|
|
93
|
+
throw new Error(
|
|
94
|
+
`Transaction ${(await this.getTxHash()).toString()} was ${receipt.status}. Reason: ${receipt.error ?? 'unknown'}`,
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
return receipt;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
protected async waitForReceipt(opts?: WaitOpts): Promise<TxReceipt> {
|
|
101
|
+
const txHash = await this.getTxHash();
|
|
102
|
+
const startTime = Date.now();
|
|
103
|
+
const ignoreDroppedReceiptsFor = opts?.ignoreDroppedReceiptsFor ?? DefaultWaitOpts.ignoreDroppedReceiptsFor;
|
|
104
|
+
|
|
105
|
+
return await retryUntil(
|
|
106
|
+
async () => {
|
|
107
|
+
const txReceipt = await this.walletOrNode.getTxReceipt(txHash);
|
|
108
|
+
// If receipt is not yet available, try again
|
|
109
|
+
if (txReceipt.status === TxStatus.PENDING) {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
// If the tx was "dropped", either return it or ignore based on timing.
|
|
113
|
+
// We can ignore it at first because the transaction may have been sent to node 1, and now we're asking node 2 for the receipt.
|
|
114
|
+
// If we don't allow a short grace period, we could incorrectly return a TxReceipt with status DROPPED.
|
|
115
|
+
if (txReceipt.status === TxStatus.DROPPED) {
|
|
116
|
+
const elapsedSeconds = (Date.now() - startTime) / 1000;
|
|
117
|
+
if (!ignoreDroppedReceiptsFor || elapsedSeconds > ignoreDroppedReceiptsFor) {
|
|
118
|
+
return txReceipt;
|
|
119
|
+
}
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
return txReceipt;
|
|
123
|
+
},
|
|
124
|
+
'isMined',
|
|
125
|
+
opts?.timeout ?? DefaultWaitOpts.timeout,
|
|
126
|
+
opts?.interval ?? DefaultWaitOpts.interval,
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
@@ -2,7 +2,7 @@ import { retryUntil } from '@aztec/foundation/retry';
|
|
|
2
2
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
3
3
|
import type { TxReceipt } from '@aztec/stdlib/tx';
|
|
4
4
|
|
|
5
|
-
import { DefaultWaitOpts } from './
|
|
5
|
+
import { DefaultWaitOpts } from './sent_tx.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Options for waiting for a transaction to be proven.
|
package/src/utils/authwit.ts
CHANGED
|
@@ -5,18 +5,16 @@ import { type ABIParameterVisibility, type FunctionAbi, type FunctionCall, Funct
|
|
|
5
5
|
import { AuthWitness, computeInnerAuthWitHash, computeOuterAuthWitHash } from '@aztec/stdlib/auth-witness';
|
|
6
6
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
7
|
import { computeVarArgsHash } from '@aztec/stdlib/hash';
|
|
8
|
-
import type {
|
|
8
|
+
import type { TxProfileResult } from '@aztec/stdlib/tx';
|
|
9
9
|
|
|
10
10
|
import { ContractFunctionInteraction } from '../contract/contract_function_interaction.js';
|
|
11
11
|
import type {
|
|
12
|
-
InteractionWaitOptions,
|
|
13
12
|
ProfileInteractionOptions,
|
|
14
13
|
SendInteractionOptions,
|
|
15
|
-
SendInteractionOptionsWithoutWait,
|
|
16
|
-
SendReturn,
|
|
17
14
|
SimulateInteractionOptions,
|
|
18
15
|
SimulationReturn,
|
|
19
16
|
} from '../contract/interaction_options.js';
|
|
17
|
+
import type { SentTx } from '../contract/sent_tx.js';
|
|
20
18
|
import type { Wallet } from '../wallet/index.js';
|
|
21
19
|
|
|
22
20
|
/** Intent with an inner hash */
|
|
@@ -288,19 +286,9 @@ export class SetPublicAuthwitContractInteraction extends ContractFunctionInterac
|
|
|
288
286
|
* Overrides the send method, adding the sender of the authwit (authorizer) as from
|
|
289
287
|
* and preventing misuse
|
|
290
288
|
* @param options - An optional object containing 'fee' options information
|
|
291
|
-
* @returns A
|
|
289
|
+
* @returns A SentTx instance for tracking the transaction status and information.
|
|
292
290
|
*/
|
|
293
|
-
|
|
294
|
-
public override send(options?: Omit<SendInteractionOptionsWithoutWait, 'from'>): Promise<TxReceipt>;
|
|
295
|
-
// Generic overload for explicit wait values
|
|
296
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
297
|
-
public override send<W extends InteractionWaitOptions>(
|
|
298
|
-
options?: Omit<SendInteractionOptions<W>, 'from'>,
|
|
299
|
-
): Promise<SendReturn<W>>;
|
|
300
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
301
|
-
public override send(
|
|
302
|
-
options?: Omit<SendInteractionOptions<InteractionWaitOptions>, 'from'>,
|
|
303
|
-
): Promise<TxReceipt | TxHash> {
|
|
291
|
+
public override send(options: Omit<SendInteractionOptions, 'from'> = {}): SentTx {
|
|
304
292
|
return super.send({ ...options, from: this.from });
|
|
305
293
|
}
|
|
306
294
|
|
package/src/utils/node.ts
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import type { Logger } from '@aztec/foundation/log';
|
|
2
2
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
3
3
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
4
|
-
import type { TxHash, TxReceipt } from '@aztec/stdlib/tx';
|
|
5
|
-
import { SortedTxStatuses, TxStatus } from '@aztec/stdlib/tx';
|
|
6
|
-
|
|
7
|
-
import { DefaultWaitOpts, type WaitOpts } from '../contract/wait_opts.js';
|
|
8
4
|
|
|
9
5
|
export const waitForNode = async (node: AztecNode, logger?: Logger) => {
|
|
10
6
|
await retryUntil(async () => {
|
|
@@ -20,62 +16,4 @@ export const waitForNode = async (node: AztecNode, logger?: Logger) => {
|
|
|
20
16
|
}, 'RPC Get Node Info');
|
|
21
17
|
};
|
|
22
18
|
|
|
23
|
-
/** Returns true if the receipt status is at least the desired status level. */
|
|
24
|
-
function hasReachedStatus(receipt: TxReceipt, desiredStatus: TxStatus): boolean {
|
|
25
|
-
return SortedTxStatuses.indexOf(receipt.status) >= SortedTxStatuses.indexOf(desiredStatus);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Waits for a transaction to be mined and returns its receipt.
|
|
30
|
-
* @param node - The Aztec node to query for transaction status
|
|
31
|
-
* @param txHash - The hash of the transaction to wait for
|
|
32
|
-
* @param opts - Optional configuration for waiting behavior
|
|
33
|
-
* @returns The transaction receipt
|
|
34
|
-
* @throws If the transaction fails and dontThrowOnRevert is not set
|
|
35
|
-
*/
|
|
36
|
-
export async function waitForTx(node: AztecNode, txHash: TxHash, opts?: WaitOpts): Promise<TxReceipt> {
|
|
37
|
-
const startTime = Date.now();
|
|
38
|
-
const ignoreDroppedReceiptsFor = opts?.ignoreDroppedReceiptsFor ?? DefaultWaitOpts.ignoreDroppedReceiptsFor;
|
|
39
|
-
const waitForStatus = opts?.waitForStatus ?? TxStatus.CHECKPOINTED;
|
|
40
|
-
|
|
41
|
-
const receipt = await retryUntil(
|
|
42
|
-
async () => {
|
|
43
|
-
const txReceipt = await node.getTxReceipt(txHash);
|
|
44
|
-
// If receipt is not yet available, try again
|
|
45
|
-
if (txReceipt.isPending()) {
|
|
46
|
-
return undefined;
|
|
47
|
-
}
|
|
48
|
-
// If the tx was "dropped", either return it or ignore based on timing.
|
|
49
|
-
// We can ignore it at first because the transaction may have been sent to node 1, and now we're asking node 2 for the receipt.
|
|
50
|
-
// If we don't allow a short grace period, we could incorrectly return a TxReceipt with status DROPPED.
|
|
51
|
-
if (txReceipt.isDropped()) {
|
|
52
|
-
const elapsedSeconds = (Date.now() - startTime) / 1000;
|
|
53
|
-
if (!ignoreDroppedReceiptsFor || elapsedSeconds > ignoreDroppedReceiptsFor) {
|
|
54
|
-
return txReceipt;
|
|
55
|
-
}
|
|
56
|
-
return undefined;
|
|
57
|
-
}
|
|
58
|
-
// Check if the receipt has reached the desired status level
|
|
59
|
-
if (!hasReachedStatus(txReceipt, waitForStatus)) {
|
|
60
|
-
return undefined;
|
|
61
|
-
}
|
|
62
|
-
return txReceipt;
|
|
63
|
-
},
|
|
64
|
-
'isMined',
|
|
65
|
-
opts?.timeout ?? DefaultWaitOpts.timeout,
|
|
66
|
-
opts?.interval ?? DefaultWaitOpts.interval,
|
|
67
|
-
);
|
|
68
|
-
|
|
69
|
-
if (!receipt.isMined()) {
|
|
70
|
-
throw new Error(`Transaction ${txHash.toString()} was ${receipt.status}. Reason: ${receipt.error ?? 'unknown'}`);
|
|
71
|
-
}
|
|
72
|
-
if (!receipt.hasExecutionSucceeded() && !opts?.dontThrowOnRevert) {
|
|
73
|
-
throw new Error(
|
|
74
|
-
`Transaction ${txHash.toString()} reverted: ${receipt.executionResult}. Reason: ${receipt.error ?? 'unknown'}`,
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return receipt;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
19
|
export { createAztecNodeClient, type AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
@@ -10,11 +10,11 @@ import type { Contract } from '../contract/contract.js';
|
|
|
10
10
|
import type { ContractBase } from '../contract/contract_base.js';
|
|
11
11
|
import {
|
|
12
12
|
DeployMethod,
|
|
13
|
-
type
|
|
13
|
+
type DeployOptions,
|
|
14
14
|
type RequestDeployOptions,
|
|
15
15
|
type SimulateDeployOptions,
|
|
16
16
|
} from '../contract/deploy_method.js';
|
|
17
|
-
import type { FeePaymentMethodOption
|
|
17
|
+
import type { FeePaymentMethodOption } from '../contract/interaction_options.js';
|
|
18
18
|
import type { FeePaymentMethod } from '../fee/fee_payment_method.js';
|
|
19
19
|
import { AccountEntrypointMetaPaymentMethod } from './account_entrypoint_meta_payment_method.js';
|
|
20
20
|
import type { Wallet } from './index.js';
|
|
@@ -36,27 +36,12 @@ export type RequestDeployAccountOptions = Omit<RequestDeployOptions, 'contractAd
|
|
|
36
36
|
fee?: DeployAccountFeePaymentMethodOption;
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
/**
|
|
40
|
-
* Base configuration options for the send/prove methods without wait parameter. Omits:
|
|
41
|
-
* - The contractAddressSalt, since for account contracts that is fixed in the constructor.
|
|
42
|
-
* - UniversalDeployment flag, since account contracts are always deployed with it set to true
|
|
43
|
-
*/
|
|
44
|
-
export type DeployAccountOptionsWithoutWait = Omit<DeployOptionsWithoutWait, 'contractAddressSalt' | 'universalDeploy'>;
|
|
45
|
-
|
|
46
39
|
/**
|
|
47
40
|
* The configuration options for the send/prove methods. Omits:
|
|
48
41
|
* - The contractAddressSalt, since for account contracts that is fixed in the constructor.
|
|
49
42
|
* - UniversalDeployment flag, since account contracts are always deployed with it set to true
|
|
50
43
|
*/
|
|
51
|
-
export type DeployAccountOptions
|
|
52
|
-
/**
|
|
53
|
-
* Whether to wait for the transaction to be mined.
|
|
54
|
-
* - undefined (default): wait with default options and return TxReceipt
|
|
55
|
-
* - WaitOpts object: wait with custom options and return TxReceipt
|
|
56
|
-
* - false: return txHash immediately without waiting
|
|
57
|
-
*/
|
|
58
|
-
wait?: W;
|
|
59
|
-
};
|
|
44
|
+
export type DeployAccountOptions = Omit<DeployOptions, 'contractAddressSalt' | 'universalDeploy'>;
|
|
60
45
|
|
|
61
46
|
/**
|
|
62
47
|
* The configuration options for the simulate method. Omits the contractAddressSalt, since
|
|
@@ -137,7 +122,7 @@ export class DeployAccountMethod<TContract extends ContractBase = Contract> exte
|
|
|
137
122
|
return mergeExecutionPayloads(executionPayloads);
|
|
138
123
|
}
|
|
139
124
|
|
|
140
|
-
override convertDeployOptionsToRequestOptions(options:
|
|
125
|
+
override convertDeployOptionsToRequestOptions(options: DeployOptions): RequestDeployOptions {
|
|
141
126
|
return {
|
|
142
127
|
...options,
|
|
143
128
|
// Deployer is handled in the request method and forcibly set to undefined,
|
package/src/wallet/wallet.ts
CHANGED
|
@@ -29,15 +29,12 @@ import type { ExecutionPayload, InTx } from '@aztec/stdlib/tx';
|
|
|
29
29
|
|
|
30
30
|
import { z } from 'zod';
|
|
31
31
|
|
|
32
|
-
import {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
type SendInteractionOptionsWithoutWait,
|
|
39
|
-
type SendReturn,
|
|
40
|
-
type SimulateInteractionOptions,
|
|
32
|
+
import type {
|
|
33
|
+
FeeEstimationOptions,
|
|
34
|
+
GasSettingsOption,
|
|
35
|
+
ProfileInteractionOptions,
|
|
36
|
+
SendInteractionOptions,
|
|
37
|
+
SimulateInteractionOptions,
|
|
41
38
|
} from '../contract/interaction_options.js';
|
|
42
39
|
import type { CallIntent, IntentInnerHash } from '../utils/authwit.js';
|
|
43
40
|
|
|
@@ -80,14 +77,9 @@ export type ProfileOptions = Omit<ProfileInteractionOptions, 'fee'> & {
|
|
|
80
77
|
* a simplified version that only hints at the wallet whether the interaction contains a
|
|
81
78
|
* fee payment method or not
|
|
82
79
|
*/
|
|
83
|
-
export type SendOptions
|
|
84
|
-
SendInteractionOptionsWithoutWait,
|
|
85
|
-
'fee'
|
|
86
|
-
> & {
|
|
80
|
+
export type SendOptions = Omit<SendInteractionOptions, 'fee'> & {
|
|
87
81
|
/** The fee options */
|
|
88
82
|
fee?: GasSettingsOption;
|
|
89
|
-
/** Whether to wait for the transaction to be mined */
|
|
90
|
-
wait?: W;
|
|
91
83
|
};
|
|
92
84
|
|
|
93
85
|
/**
|
|
@@ -205,6 +197,7 @@ export type Wallet = {
|
|
|
205
197
|
eventFilter: PrivateEventFilter,
|
|
206
198
|
): Promise<PrivateEvent<T>[]>;
|
|
207
199
|
getChainInfo(): Promise<ChainInfo>;
|
|
200
|
+
getTxReceipt(txHash: TxHash): Promise<TxReceipt>;
|
|
208
201
|
getContractMetadata(address: AztecAddress): Promise<ContractMetadata>;
|
|
209
202
|
getContractClassMetadata(id: Fr): Promise<ContractClassMetadata>;
|
|
210
203
|
registerSender(address: AztecAddress, alias?: string): Promise<AztecAddress>;
|
|
@@ -218,10 +211,7 @@ export type Wallet = {
|
|
|
218
211
|
simulateTx(exec: ExecutionPayload, opts: SimulateOptions): Promise<TxSimulationResult>;
|
|
219
212
|
simulateUtility(call: FunctionCall, authwits?: AuthWitness[]): Promise<UtilitySimulationResult>;
|
|
220
213
|
profileTx(exec: ExecutionPayload, opts: ProfileOptions): Promise<TxProfileResult>;
|
|
221
|
-
sendTx
|
|
222
|
-
exec: ExecutionPayload,
|
|
223
|
-
opts: SendOptions<W>,
|
|
224
|
-
): Promise<SendReturn<W>>;
|
|
214
|
+
sendTx(exec: ExecutionPayload, opts: SendOptions): Promise<TxHash>;
|
|
225
215
|
createAuthWit(from: AztecAddress, messageHashOrIntent: IntentInnerHash | CallIntent): Promise<AuthWitness>;
|
|
226
216
|
batch<const T extends readonly BatchedMethod[]>(methods: T): Promise<BatchResults<T>>;
|
|
227
217
|
};
|
|
@@ -261,19 +251,11 @@ export const WalletSimulationFeeOptionSchema = GasSettingsOptionSchema.extend({
|
|
|
261
251
|
estimateGas: optional(z.boolean()),
|
|
262
252
|
});
|
|
263
253
|
|
|
264
|
-
export const WaitOptsSchema = z.object({
|
|
265
|
-
ignoreDroppedReceiptsFor: optional(z.number()),
|
|
266
|
-
timeout: optional(z.number()),
|
|
267
|
-
interval: optional(z.number()),
|
|
268
|
-
dontThrowOnRevert: optional(z.boolean()),
|
|
269
|
-
});
|
|
270
|
-
|
|
271
254
|
export const SendOptionsSchema = z.object({
|
|
272
255
|
from: schemas.AztecAddress,
|
|
273
256
|
authWitnesses: optional(z.array(AuthWitness.schema)),
|
|
274
257
|
capsules: optional(z.array(Capsule.schema)),
|
|
275
258
|
fee: optional(GasSettingsOptionSchema),
|
|
276
|
-
wait: optional(z.union([z.literal(NO_WAIT), WaitOptsSchema])),
|
|
277
259
|
});
|
|
278
260
|
|
|
279
261
|
export const SimulateOptionsSchema = z.object({
|
|
@@ -342,6 +324,7 @@ const WalletMethodSchemas = {
|
|
|
342
324
|
.function()
|
|
343
325
|
.args()
|
|
344
326
|
.returns(z.object({ chainId: schemas.Fr, version: schemas.Fr })),
|
|
327
|
+
getTxReceipt: z.function().args(TxHash.schema).returns(TxReceipt.schema),
|
|
345
328
|
getContractMetadata: z.function().args(schemas.AztecAddress).returns(ContractMetadataSchema),
|
|
346
329
|
getContractClassMetadata: z.function().args(schemas.Fr).returns(ContractClassMetadataSchema),
|
|
347
330
|
getPrivateEvents: z
|
|
@@ -367,10 +350,7 @@ const WalletMethodSchemas = {
|
|
|
367
350
|
.args(FunctionCallSchema, optional(z.array(AuthWitness.schema)))
|
|
368
351
|
.returns(UtilitySimulationResult.schema),
|
|
369
352
|
profileTx: z.function().args(ExecutionPayloadSchema, ProfileOptionsSchema).returns(TxProfileResult.schema),
|
|
370
|
-
sendTx: z
|
|
371
|
-
.function()
|
|
372
|
-
.args(ExecutionPayloadSchema, SendOptionsSchema)
|
|
373
|
-
.returns(z.union([TxHash.schema, TxReceipt.schema])),
|
|
353
|
+
sendTx: z.function().args(ExecutionPayloadSchema, SendOptionsSchema).returns(TxHash.schema),
|
|
374
354
|
createAuthWit: z.function().args(schemas.AztecAddress, MessageHashOrIntentSchema).returns(AuthWitness.schema),
|
|
375
355
|
};
|
|
376
356
|
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { TxStatus } from '@aztec/stdlib/tx';
|
|
2
|
-
/** Options related to waiting for a tx. */
|
|
3
|
-
export type WaitOpts = {
|
|
4
|
-
/** The amount of time to ignore TxStatus.DROPPED receipts (in seconds) due to the presumption that it is being propagated by the p2p network. Defaults to 5. */
|
|
5
|
-
ignoreDroppedReceiptsFor?: number;
|
|
6
|
-
/** The maximum time (in seconds) to wait for the transaction to be mined. Defaults to 60. */
|
|
7
|
-
timeout?: number;
|
|
8
|
-
/** The time interval (in seconds) between retries to fetch the transaction receipt. Defaults to 1. */
|
|
9
|
-
interval?: number;
|
|
10
|
-
/** Whether to accept a revert as a status code for the tx when waiting for it. If false, will throw if the tx reverts. */
|
|
11
|
-
dontThrowOnRevert?: boolean;
|
|
12
|
-
/** The minimum inclusion status to wait for. If set, waits until the receipt reaches this status or higher. Defaults to CHECKPOINTED. */
|
|
13
|
-
waitForStatus?: TxStatus;
|
|
14
|
-
};
|
|
15
|
-
export declare const DefaultWaitOpts: WaitOpts;
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdF9vcHRzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3Qvd2FpdF9vcHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpELDJDQUEyQztBQUMzQyxNQUFNLE1BQU0sUUFBUSxHQUFHO0lBQ3JCLGdLQUFnSztJQUNoSyx3QkFBd0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNsQyw2RkFBNkY7SUFDN0YsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2pCLHNHQUFzRztJQUN0RyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDbEIsMEhBQTBIO0lBQzFILGlCQUFpQixDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQzVCLHlJQUF5STtJQUN6SSxhQUFhLENBQUMsRUFBRSxRQUFRLENBQUM7Q0FDMUIsQ0FBQztBQUVGLGVBQU8sTUFBTSxlQUFlLEVBQUUsUUFJN0IsQ0FBQyJ9
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wait_opts.d.ts","sourceRoot":"","sources":["../../src/contract/wait_opts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,2CAA2C;AAC3C,MAAM,MAAM,QAAQ,GAAG;IACrB,gKAAgK;IAChK,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,6FAA6F;IAC7F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sGAAsG;IACtG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0HAA0H;IAC1H,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yIAAyI;IACzI,aAAa,CAAC,EAAE,QAAQ,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,QAI7B,CAAC"}
|