@aztec/pxe 0.0.1-commit.29c6b1a3 → 0.0.1-commit.2e2504e2
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/block_synchronizer/block_synchronizer.d.ts +5 -3
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +9 -3
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +4 -4
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +9 -9
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +8 -8
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.d.ts +4 -4
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +29 -17
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +4 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +7 -7
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +18 -15
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +28 -33
- package/dest/contract_sync/contract_sync_service.d.ts +41 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +82 -0
- package/dest/contract_sync/helpers.d.ts +28 -0
- package/dest/contract_sync/helpers.d.ts.map +1 -0
- package/dest/contract_sync/{index.js → helpers.js} +13 -12
- package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +12 -6
- package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +13 -7
- package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +2 -2
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +1 -1
- package/dest/entrypoints/server/utils.d.ts +1 -1
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +19 -8
- package/dest/events/event_service.d.ts +4 -5
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +5 -6
- package/dest/job_coordinator/job_coordinator.d.ts +3 -2
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
- package/dest/job_coordinator/job_coordinator.js +3 -2
- package/dest/logs/log_service.d.ts +6 -5
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +10 -15
- package/dest/notes/note_service.d.ts +4 -5
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +6 -7
- package/dest/oracle_version.d.ts +3 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +2 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +2 -2
- package/dest/pxe.d.ts +2 -1
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +25 -12
- package/dest/storage/address_store/address_store.d.ts +1 -1
- package/dest/storage/address_store/address_store.d.ts.map +1 -1
- package/dest/storage/address_store/address_store.js +12 -11
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
- package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
- package/dest/storage/capsule_store/capsule_store.js +6 -8
- package/dest/storage/contract_store/contract_store.d.ts +1 -1
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +22 -13
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +11 -1
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +143 -105
- package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +84 -61
- package/dest/storage/private_event_store/stored_private_event.js +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.js +31 -19
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +183 -113
- package/package.json +25 -16
- package/src/block_synchronizer/block_synchronizer.ts +21 -12
- package/src/contract_function_simulator/contract_function_simulator.ts +9 -6
- package/src/contract_function_simulator/oracle/interfaces.ts +9 -9
- package/src/contract_function_simulator/oracle/oracle.ts +32 -15
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +7 -10
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +31 -35
- package/src/contract_sync/contract_sync_service.ts +129 -0
- package/src/contract_sync/{index.ts → helpers.ts} +15 -20
- package/src/entrypoints/client/bundle/utils.ts +7 -14
- package/src/entrypoints/client/lazy/utils.ts +8 -14
- package/src/entrypoints/pxe_creation_options.ts +2 -1
- package/src/entrypoints/server/index.ts +1 -1
- package/src/entrypoints/server/utils.ts +15 -19
- package/src/events/event_service.ts +4 -6
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +14 -14
- package/src/notes/note_service.ts +5 -7
- package/src/oracle_version.ts +2 -2
- package/src/private_kernel/private_kernel_execution_prover.ts +6 -3
- package/src/pxe.ts +40 -16
- package/src/storage/address_store/address_store.ts +15 -15
- package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
- package/src/storage/capsule_store/capsule_store.ts +8 -8
- package/src/storage/contract_store/contract_store.ts +22 -11
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +159 -129
- package/src/storage/private_event_store/private_event_store.ts +102 -81
- package/src/storage/private_event_store/stored_private_event.ts +1 -1
- package/src/storage/tagging_store/recipient_tagging_store.ts +31 -21
- package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
- package/src/storage/tagging_store/sender_tagging_store.ts +210 -126
- package/dest/contract_sync/index.d.ts +0 -23
- package/dest/contract_sync/index.d.ts.map +0 -1
package/src/pxe.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { PrivateEventFilter } from '@aztec/aztec.js/wallet';
|
|
2
2
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
3
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
|
-
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { SerialQueue } from '@aztec/foundation/queue';
|
|
6
6
|
import { Timer } from '@aztec/foundation/timer';
|
|
7
7
|
import { KeyStore } from '@aztec/key-store';
|
|
@@ -59,7 +59,8 @@ import {
|
|
|
59
59
|
generateSimulatedProvingResult,
|
|
60
60
|
} from './contract_function_simulator/contract_function_simulator.js';
|
|
61
61
|
import { ProxiedContractStoreFactory } from './contract_function_simulator/proxied_contract_data_source.js';
|
|
62
|
-
import {
|
|
62
|
+
import { ContractSyncService } from './contract_sync/contract_sync_service.js';
|
|
63
|
+
import { readCurrentClassId } from './contract_sync/helpers.js';
|
|
63
64
|
import { PXEDebugUtils } from './debug/pxe_debug_utils.js';
|
|
64
65
|
import { enrichPublicSimulationError, enrichSimulationError } from './error_enriching.js';
|
|
65
66
|
import { PrivateEventFilterValidator } from './events/private_event_filter_validator.js';
|
|
@@ -102,6 +103,7 @@ export class PXE {
|
|
|
102
103
|
private recipientTaggingStore: RecipientTaggingStore,
|
|
103
104
|
private addressStore: AddressStore,
|
|
104
105
|
private privateEventStore: PrivateEventStore,
|
|
106
|
+
private contractSyncService: ContractSyncService,
|
|
105
107
|
private simulator: CircuitSimulator,
|
|
106
108
|
private proverEnabled: boolean,
|
|
107
109
|
private proofCreator: PrivateKernelProver,
|
|
@@ -128,6 +130,10 @@ export class PXE {
|
|
|
128
130
|
config: PXEConfig,
|
|
129
131
|
loggerOrSuffix?: string | Logger,
|
|
130
132
|
) {
|
|
133
|
+
// Extract bindings from the logger, or use empty bindings if a string suffix is provided.
|
|
134
|
+
const bindings: LoggerBindings | undefined =
|
|
135
|
+
loggerOrSuffix && typeof loggerOrSuffix !== 'string' ? loggerOrSuffix.getBindings() : undefined;
|
|
136
|
+
|
|
131
137
|
const log =
|
|
132
138
|
!loggerOrSuffix || typeof loggerOrSuffix === 'string'
|
|
133
139
|
? createLogger(loggerOrSuffix ? `pxe:service:${loggerOrSuffix}` : `pxe:service`)
|
|
@@ -145,6 +151,12 @@ export class PXE {
|
|
|
145
151
|
const capsuleStore = new CapsuleStore(store);
|
|
146
152
|
const keyStore = new KeyStore(store);
|
|
147
153
|
const tipsStore = new L2TipsKVStore(store, 'pxe');
|
|
154
|
+
const contractSyncService = new ContractSyncService(
|
|
155
|
+
node,
|
|
156
|
+
contractStore,
|
|
157
|
+
noteStore,
|
|
158
|
+
createLogger('pxe:contract_sync', bindings),
|
|
159
|
+
);
|
|
148
160
|
const synchronizer = new BlockSynchronizer(
|
|
149
161
|
node,
|
|
150
162
|
store,
|
|
@@ -152,17 +164,19 @@ export class PXE {
|
|
|
152
164
|
noteStore,
|
|
153
165
|
privateEventStore,
|
|
154
166
|
tipsStore,
|
|
167
|
+
contractSyncService,
|
|
155
168
|
config,
|
|
156
|
-
|
|
169
|
+
bindings,
|
|
157
170
|
);
|
|
158
171
|
|
|
159
|
-
const jobCoordinator = new JobCoordinator(store);
|
|
172
|
+
const jobCoordinator = new JobCoordinator(store, bindings);
|
|
160
173
|
jobCoordinator.registerStores([
|
|
161
174
|
capsuleStore,
|
|
162
175
|
senderTaggingStore,
|
|
163
176
|
recipientTaggingStore,
|
|
164
177
|
privateEventStore,
|
|
165
178
|
noteStore,
|
|
179
|
+
contractSyncService,
|
|
166
180
|
]);
|
|
167
181
|
|
|
168
182
|
const debugUtils = new PXEDebugUtils(contractStore, noteStore, synchronizer, anchorBlockStore);
|
|
@@ -182,6 +196,7 @@ export class PXE {
|
|
|
182
196
|
recipientTaggingStore,
|
|
183
197
|
addressStore,
|
|
184
198
|
privateEventStore,
|
|
199
|
+
contractSyncService,
|
|
185
200
|
simulator,
|
|
186
201
|
proverEnabled,
|
|
187
202
|
proofCreator,
|
|
@@ -213,13 +228,13 @@ export class PXE {
|
|
|
213
228
|
this.keyStore,
|
|
214
229
|
this.addressStore,
|
|
215
230
|
BenchmarkedNodeFactory.create(this.node),
|
|
216
|
-
this.anchorBlockStore,
|
|
217
231
|
this.senderTaggingStore,
|
|
218
232
|
this.recipientTaggingStore,
|
|
219
233
|
this.senderAddressBookStore,
|
|
220
234
|
this.capsuleStore,
|
|
221
235
|
this.privateEventStore,
|
|
222
236
|
this.simulator,
|
|
237
|
+
this.contractSyncService,
|
|
223
238
|
);
|
|
224
239
|
}
|
|
225
240
|
|
|
@@ -294,13 +309,12 @@ export class PXE {
|
|
|
294
309
|
try {
|
|
295
310
|
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
296
311
|
|
|
297
|
-
await ensureContractSynced(
|
|
312
|
+
await this.contractSyncService.ensureContractSynced(
|
|
298
313
|
contractAddress,
|
|
299
314
|
functionSelector,
|
|
300
315
|
privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
301
|
-
this.node,
|
|
302
|
-
this.contractStore,
|
|
303
316
|
anchorBlockHeader,
|
|
317
|
+
jobId,
|
|
304
318
|
);
|
|
305
319
|
|
|
306
320
|
const result = await contractFunctionSimulator.run(
|
|
@@ -400,7 +414,12 @@ export class PXE {
|
|
|
400
414
|
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
401
415
|
const anchorBlockHash = await anchorBlockHeader.hash();
|
|
402
416
|
const kernelOracle = new PrivateKernelOracle(this.contractStore, this.keyStore, this.node, anchorBlockHash);
|
|
403
|
-
const kernelTraceProver = new PrivateKernelExecutionProver(
|
|
417
|
+
const kernelTraceProver = new PrivateKernelExecutionProver(
|
|
418
|
+
kernelOracle,
|
|
419
|
+
proofCreator,
|
|
420
|
+
!this.proverEnabled,
|
|
421
|
+
this.log.getBindings(),
|
|
422
|
+
);
|
|
404
423
|
this.log.debug(`Executing kernel trace prover (${JSON.stringify(config)})...`);
|
|
405
424
|
return await kernelTraceProver.proveWithKernels(txExecutionRequest.toTxRequest(), privateExecutionResult, config);
|
|
406
425
|
}
|
|
@@ -840,7 +859,14 @@ export class PXE {
|
|
|
840
859
|
// Temporary: in case there are overrides, we have to skip the kernels or validations
|
|
841
860
|
// will fail. Consider handing control to the user/wallet on whether they want to run them
|
|
842
861
|
// or not.
|
|
843
|
-
const
|
|
862
|
+
const overriddenContracts = overrides?.contracts ? new Set(Object.keys(overrides.contracts)) : undefined;
|
|
863
|
+
const hasOverriddenContracts = overriddenContracts !== undefined && overriddenContracts.size > 0;
|
|
864
|
+
const skipKernels = hasOverriddenContracts;
|
|
865
|
+
|
|
866
|
+
// Set overridden contracts on the sync service so it knows to skip syncing them
|
|
867
|
+
if (hasOverriddenContracts) {
|
|
868
|
+
this.contractSyncService.setOverriddenContracts(jobId, overriddenContracts);
|
|
869
|
+
}
|
|
844
870
|
|
|
845
871
|
// Execution of private functions only; no proving, and no kernel logic.
|
|
846
872
|
const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes, jobId);
|
|
@@ -962,13 +988,12 @@ export class PXE {
|
|
|
962
988
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
963
989
|
|
|
964
990
|
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
965
|
-
await ensureContractSynced(
|
|
991
|
+
await this.contractSyncService.ensureContractSynced(
|
|
966
992
|
call.to,
|
|
967
993
|
call.selector,
|
|
968
994
|
privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
969
|
-
this.node,
|
|
970
|
-
this.contractStore,
|
|
971
995
|
anchorBlockHeader,
|
|
996
|
+
jobId,
|
|
972
997
|
);
|
|
973
998
|
|
|
974
999
|
const executionResult = await this.#simulateUtility(
|
|
@@ -1032,14 +1057,13 @@ export class PXE {
|
|
|
1032
1057
|
|
|
1033
1058
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
1034
1059
|
|
|
1035
|
-
await ensureContractSynced(
|
|
1060
|
+
await this.contractSyncService.ensureContractSynced(
|
|
1036
1061
|
filter.contractAddress,
|
|
1037
1062
|
null,
|
|
1038
1063
|
async privateSyncCall =>
|
|
1039
1064
|
await this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
1040
|
-
this.node,
|
|
1041
|
-
this.contractStore,
|
|
1042
1065
|
anchorBlockHeader,
|
|
1066
|
+
jobId,
|
|
1043
1067
|
);
|
|
1044
1068
|
});
|
|
1045
1069
|
|
|
@@ -43,23 +43,23 @@ export class AddressStore {
|
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
async #getCompleteAddress(address: AztecAddress): Promise<CompleteAddress | undefined> {
|
|
47
|
-
const index = await this.#completeAddressIndex.getAsync(address.toString());
|
|
48
|
-
if (index === undefined) {
|
|
49
|
-
return undefined;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const value = await this.#completeAddresses.atAsync(index);
|
|
53
|
-
return value ? await CompleteAddress.fromBuffer(value) : undefined;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
46
|
getCompleteAddress(account: AztecAddress): Promise<CompleteAddress | undefined> {
|
|
57
|
-
return this.#
|
|
47
|
+
return this.#store.transactionAsync(async () => {
|
|
48
|
+
const index = await this.#completeAddressIndex.getAsync(account.toString());
|
|
49
|
+
if (index === undefined) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const value = await this.#completeAddresses.atAsync(index);
|
|
54
|
+
return value ? await CompleteAddress.fromBuffer(value) : undefined;
|
|
55
|
+
});
|
|
58
56
|
}
|
|
59
57
|
|
|
60
|
-
|
|
61
|
-
return
|
|
62
|
-
|
|
63
|
-
|
|
58
|
+
getCompleteAddresses(): Promise<CompleteAddress[]> {
|
|
59
|
+
return this.#store.transactionAsync(async () => {
|
|
60
|
+
return await Promise.all(
|
|
61
|
+
(await toArray(this.#completeAddresses.valuesAsync())).map(v => CompleteAddress.fromBuffer(v)),
|
|
62
|
+
);
|
|
63
|
+
});
|
|
64
64
|
}
|
|
65
65
|
}
|
|
@@ -10,6 +10,14 @@ export class AnchorBlockStore {
|
|
|
10
10
|
this.#synchronizedHeader = this.#store.openSingleton('header');
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Sets the currently synchronized block
|
|
15
|
+
*
|
|
16
|
+
* Important: this method is only called from BlockSynchronizer, and since we need it to run atomically with other
|
|
17
|
+
* stores in the case of a reorg, it MUST NOT be wrapped in a `transactionAsync` call. Doing so would result in a
|
|
18
|
+
* deadlock when the backend is IndexedDB, because `transactionAsync` is not designed to support reentrancy.
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
13
21
|
async setHeader(header: BlockHeader): Promise<void> {
|
|
14
22
|
await this.#synchronizedHeader.set(header.toBuffer());
|
|
15
23
|
}
|
|
@@ -57,14 +57,14 @@ export class CapsuleStore implements StagedStore {
|
|
|
57
57
|
*/
|
|
58
58
|
async #getFromStage(jobId: string, dbSlotKey: string): Promise<Buffer | null | undefined> {
|
|
59
59
|
const jobStagedCapsules = this.#getJobStagedCapsules(jobId);
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
//
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return staged;
|
|
60
|
+
const staged: Buffer | null | undefined = jobStagedCapsules.get(dbSlotKey);
|
|
61
|
+
|
|
62
|
+
// Always issue DB read to keep IndexedDB transaction alive, even if the value is in the job staged data. This
|
|
63
|
+
// keeps IndexedDB transactions alive (they auto-commit when a new micro-task starts and there are no pending read
|
|
64
|
+
// requests). The staged value still takes precedence if it exists (including null for deletions).
|
|
65
|
+
const dbValue = await this.#loadCapsuleFromDb(dbSlotKey);
|
|
66
|
+
|
|
67
|
+
return staged !== undefined ? staged : dbValue;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
/**
|
|
@@ -42,10 +42,12 @@ export class ContractStore {
|
|
|
42
42
|
/** Map from contract address to contract class id */
|
|
43
43
|
#contractClassIdMap: Map<string, Fr> = new Map();
|
|
44
44
|
|
|
45
|
+
#store: AztecAsyncKVStore;
|
|
45
46
|
#contractArtifacts: AztecAsyncMap<string, Buffer>;
|
|
46
47
|
#contractInstances: AztecAsyncMap<string, Buffer>;
|
|
47
48
|
|
|
48
49
|
constructor(store: AztecAsyncKVStore) {
|
|
50
|
+
this.#store = store;
|
|
49
51
|
this.#contractArtifacts = store.openMap('contract_artifacts');
|
|
50
52
|
this.#contractInstances = store.openMap('contracts_instances');
|
|
51
53
|
}
|
|
@@ -53,6 +55,7 @@ export class ContractStore {
|
|
|
53
55
|
// Setters
|
|
54
56
|
|
|
55
57
|
public async addContractArtifact(id: Fr, contract: ContractArtifact): Promise<void> {
|
|
58
|
+
// Validation outside transactionAsync - these are not DB operations
|
|
56
59
|
const privateFunctions = contract.functions.filter(
|
|
57
60
|
functionArtifact => functionArtifact.functionType === FunctionType.PRIVATE,
|
|
58
61
|
);
|
|
@@ -69,7 +72,9 @@ export class ContractStore {
|
|
|
69
72
|
throw new Error('Repeated function selectors of private functions');
|
|
70
73
|
}
|
|
71
74
|
|
|
72
|
-
await this.#
|
|
75
|
+
await this.#store.transactionAsync(() =>
|
|
76
|
+
this.#contractArtifacts.set(id.toString(), contractArtifactToBuffer(contract)),
|
|
77
|
+
);
|
|
73
78
|
}
|
|
74
79
|
|
|
75
80
|
async addContractInstance(contract: ContractInstanceWithAddress): Promise<void> {
|
|
@@ -123,21 +128,27 @@ export class ContractStore {
|
|
|
123
128
|
|
|
124
129
|
// Public getters
|
|
125
130
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
131
|
+
getContractsAddresses(): Promise<AztecAddress[]> {
|
|
132
|
+
return this.#store.transactionAsync(async () => {
|
|
133
|
+
const keys = await toArray(this.#contractInstances.keysAsync());
|
|
134
|
+
return keys.map(AztecAddress.fromString);
|
|
135
|
+
});
|
|
129
136
|
}
|
|
130
137
|
|
|
131
138
|
/** Returns a contract instance for a given address. Throws if not found. */
|
|
132
|
-
public
|
|
133
|
-
|
|
134
|
-
|
|
139
|
+
public getContractInstance(contractAddress: AztecAddress): Promise<ContractInstanceWithAddress | undefined> {
|
|
140
|
+
return this.#store.transactionAsync(async () => {
|
|
141
|
+
const contract = await this.#contractInstances.getAsync(contractAddress.toString());
|
|
142
|
+
return contract && SerializableContractInstance.fromBuffer(contract).withAddress(contractAddress);
|
|
143
|
+
});
|
|
135
144
|
}
|
|
136
145
|
|
|
137
|
-
public
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
146
|
+
public getContractArtifact(contractClassId: Fr): Promise<ContractArtifact | undefined> {
|
|
147
|
+
return this.#store.transactionAsync(async () => {
|
|
148
|
+
const contract = await this.#contractArtifacts.getAsync(contractClassId.toString());
|
|
149
|
+
// TODO(@spalladino): AztecAsyncMap lies and returns Uint8Arrays instead of Buffers, hence the extra Buffer.from.
|
|
150
|
+
return contract && contractArtifactFromBuffer(Buffer.from(contract));
|
|
151
|
+
});
|
|
141
152
|
}
|
|
142
153
|
|
|
143
154
|
/** Returns a contract class for a given class id. Throws if not found. */
|
package/src/storage/metadata.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const PXE_DATA_SCHEMA_VERSION =
|
|
1
|
+
export const PXE_DATA_SCHEMA_VERSION = 3;
|