@aztec/pxe 0.0.1-commit.e6bd8901 → 0.0.1-commit.ee80a48
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 +3 -3
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +5 -5
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +2 -4
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +7 -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 +3 -3
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +15 -15
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +2 -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 +6 -8
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +20 -16
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +23 -27
- package/dest/contract_sync/index.d.ts +4 -3
- package/dest/contract_sync/index.d.ts.map +1 -1
- package/dest/contract_sync/index.js +12 -7
- package/dest/debug/pxe_debug_utils.d.ts +16 -6
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +17 -8
- 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/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 -16
- 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 -8
- 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/private_kernel/private_kernel_oracle.d.ts +3 -3
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/pxe.d.ts +1 -1
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +12 -11
- 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.d.ts +4 -4
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -1
- package/dest/storage/private_event_store/stored_private_event.js +2 -2
- 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/dest/tagging/get_all_logs_by_tags.d.ts +4 -4
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +3 -3
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +3 -3
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +3 -3
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +3 -3
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
- package/package.json +16 -16
- package/src/block_synchronizer/block_synchronizer.ts +17 -19
- package/src/contract_function_simulator/contract_function_simulator.ts +6 -6
- package/src/contract_function_simulator/oracle/interfaces.ts +10 -10
- package/src/contract_function_simulator/oracle/oracle.ts +27 -17
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +4 -8
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +32 -35
- package/src/contract_sync/index.ts +24 -5
- package/src/debug/pxe_debug_utils.ts +23 -9
- 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/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 -15
- package/src/notes/note_service.ts +5 -8
- package/src/oracle_version.ts +2 -2
- package/src/private_kernel/private_kernel_execution_prover.ts +6 -3
- package/src/private_kernel/private_kernel_oracle.ts +2 -2
- package/src/pxe.ts +22 -9
- 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 +3 -3
- 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/src/tagging/get_all_logs_by_tags.ts +3 -3
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +2 -2
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +2 -2
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +2 -2
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +3 -3
package/src/logs/log_service.ts
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
3
3
|
import type { KeyStore } from '@aztec/key-store';
|
|
4
4
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
|
-
import { L2BlockHash } from '@aztec/stdlib/block';
|
|
6
5
|
import type { CompleteAddress } from '@aztec/stdlib/contract';
|
|
7
6
|
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
8
7
|
import { DirectionalAppTaggingSecret, PendingTaggedLog, SiloedTag, Tag, TxScopedL2Log } from '@aztec/stdlib/logs';
|
|
8
|
+
import type { BlockHeader } from '@aztec/stdlib/tx';
|
|
9
9
|
|
|
10
10
|
import type { LogRetrievalRequest } from '../contract_function_simulator/noir-structs/log_retrieval_request.js';
|
|
11
11
|
import { LogRetrievalResponse } from '../contract_function_simulator/noir-structs/log_retrieval_response.js';
|
|
12
12
|
import { AddressStore } from '../storage/address_store/address_store.js';
|
|
13
|
-
import { AnchorBlockStore } from '../storage/anchor_block_store/anchor_block_store.js';
|
|
14
13
|
import { CapsuleStore } from '../storage/capsule_store/capsule_store.js';
|
|
15
14
|
import type { RecipientTaggingStore } from '../storage/tagging_store/recipient_tagging_store.js';
|
|
16
15
|
import type { SenderAddressBookStore } from '../storage/tagging_store/sender_address_book_store.js';
|
|
@@ -21,18 +20,21 @@ import {
|
|
|
21
20
|
} from '../tagging/index.js';
|
|
22
21
|
|
|
23
22
|
export class LogService {
|
|
24
|
-
private log
|
|
23
|
+
private log: Logger;
|
|
25
24
|
|
|
26
25
|
constructor(
|
|
27
26
|
private readonly aztecNode: AztecNode,
|
|
28
|
-
private readonly
|
|
27
|
+
private readonly anchorBlockHeader: BlockHeader,
|
|
29
28
|
private readonly keyStore: KeyStore,
|
|
30
29
|
private readonly capsuleStore: CapsuleStore,
|
|
31
30
|
private readonly recipientTaggingStore: RecipientTaggingStore,
|
|
32
31
|
private readonly senderAddressBookStore: SenderAddressBookStore,
|
|
33
32
|
private readonly addressStore: AddressStore,
|
|
34
33
|
private readonly jobId: string,
|
|
35
|
-
|
|
34
|
+
bindings?: LoggerBindings,
|
|
35
|
+
) {
|
|
36
|
+
this.log = createLogger('pxe:log_service', bindings);
|
|
37
|
+
}
|
|
36
38
|
|
|
37
39
|
public async bulkRetrieveLogs(logRetrievalRequests: LogRetrievalRequest[]): Promise<(LogRetrievalResponse | null)[]> {
|
|
38
40
|
return await Promise.all(
|
|
@@ -54,8 +56,7 @@ export class LogService {
|
|
|
54
56
|
}
|
|
55
57
|
|
|
56
58
|
async #getPublicLogByTag(tag: Tag, contractAddress: AztecAddress): Promise<LogRetrievalResponse | null> {
|
|
57
|
-
const
|
|
58
|
-
const anchorBlockHash = L2BlockHash.fromField(await anchorBlockHeader.hash());
|
|
59
|
+
const anchorBlockHash = await this.anchorBlockHeader.hash();
|
|
59
60
|
const allLogsPerTag = await getAllPublicLogsByTagsFromContract(
|
|
60
61
|
this.aztecNode,
|
|
61
62
|
contractAddress,
|
|
@@ -84,8 +85,7 @@ export class LogService {
|
|
|
84
85
|
}
|
|
85
86
|
|
|
86
87
|
async #getPrivateLogByTag(siloedTag: SiloedTag): Promise<LogRetrievalResponse | null> {
|
|
87
|
-
const
|
|
88
|
-
const anchorBlockHash = L2BlockHash.fromField(await anchorBlockHeader.hash());
|
|
88
|
+
const anchorBlockHash = await this.anchorBlockHeader.hash();
|
|
89
89
|
const allLogsPerTag = await getAllPrivateLogsByTags(this.aztecNode, [siloedTag], anchorBlockHash);
|
|
90
90
|
const logsForTag = allLogsPerTag[0];
|
|
91
91
|
|
|
@@ -108,17 +108,16 @@ export class LogService {
|
|
|
108
108
|
);
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
public async
|
|
111
|
+
public async fetchTaggedLogs(
|
|
112
112
|
contractAddress: AztecAddress,
|
|
113
113
|
pendingTaggedLogArrayBaseSlot: Fr,
|
|
114
114
|
scopes?: AztecAddress[],
|
|
115
115
|
) {
|
|
116
|
-
this.log.verbose(
|
|
116
|
+
this.log.verbose(`Fetching tagged logs for ${contractAddress.toString()}`);
|
|
117
117
|
|
|
118
118
|
// We only load logs from block up to and including the anchor block number
|
|
119
|
-
const
|
|
120
|
-
const
|
|
121
|
-
const anchorBlockHash = L2BlockHash.fromField(await anchorBlockHeader.hash());
|
|
119
|
+
const anchorBlockNumber = this.anchorBlockHeader.getBlockNumber();
|
|
120
|
+
const anchorBlockHash = await this.anchorBlockHeader.hash();
|
|
122
121
|
|
|
123
122
|
// Determine recipients: use scopes if provided, otherwise get all accounts
|
|
124
123
|
const recipients = scopes && scopes.length > 0 ? scopes : await this.keyStore.getAccounts();
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
3
|
import type { DataInBlock } from '@aztec/stdlib/block';
|
|
4
|
-
import { L2BlockHash } from '@aztec/stdlib/block';
|
|
5
4
|
import { computeUniqueNoteHash, siloNoteHash, siloNullifier } from '@aztec/stdlib/hash';
|
|
6
5
|
import { type AztecNode, MAX_RPC_LEN } from '@aztec/stdlib/interfaces/client';
|
|
7
6
|
import { Note, NoteDao, NoteStatus } from '@aztec/stdlib/note';
|
|
8
7
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
9
|
-
import type { TxHash } from '@aztec/stdlib/tx';
|
|
8
|
+
import type { BlockHeader, TxHash } from '@aztec/stdlib/tx';
|
|
10
9
|
|
|
11
|
-
import type { AnchorBlockStore } from '../storage/anchor_block_store/anchor_block_store.js';
|
|
12
10
|
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
13
11
|
|
|
14
12
|
export class NoteService {
|
|
15
13
|
constructor(
|
|
16
14
|
private readonly noteStore: NoteStore,
|
|
17
15
|
private readonly aztecNode: AztecNode,
|
|
18
|
-
private readonly
|
|
16
|
+
private readonly anchorBlockHeader: BlockHeader,
|
|
19
17
|
private readonly jobId: string,
|
|
20
18
|
) {}
|
|
21
19
|
|
|
@@ -73,7 +71,7 @@ export class NoteService {
|
|
|
73
71
|
* @param contractAddress - The contract whose notes should be checked and nullified.
|
|
74
72
|
*/
|
|
75
73
|
public async syncNoteNullifiers(contractAddress: AztecAddress): Promise<void> {
|
|
76
|
-
const anchorBlockHash =
|
|
74
|
+
const anchorBlockHash = await this.anchorBlockHeader.hash();
|
|
77
75
|
|
|
78
76
|
const contractNotes = await this.noteStore.getNotes({ contractAddress }, this.jobId);
|
|
79
77
|
|
|
@@ -143,9 +141,8 @@ export class NoteService {
|
|
|
143
141
|
// number which *should* be recent enough to be available, even for non-archive nodes.
|
|
144
142
|
// Also note that the note should never be ahead of the synced block here since `fetchTaggedLogs` only processes
|
|
145
143
|
// logs up to the synced block making this only an additional safety check.
|
|
146
|
-
const
|
|
147
|
-
const
|
|
148
|
-
const anchorBlockHash = L2BlockHash.fromField(await anchorBlockHeader.hash());
|
|
144
|
+
const anchorBlockNumber = this.anchorBlockHeader.getBlockNumber();
|
|
145
|
+
const anchorBlockHash = await this.anchorBlockHeader.hash();
|
|
149
146
|
|
|
150
147
|
// By computing siloed and unique note hashes ourselves we prevent contracts from interfering with the note storage
|
|
151
148
|
// of other contracts, which would constitute a security breach.
|
package/src/oracle_version.ts
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
///
|
|
5
5
|
/// @dev Whenever a contract function or Noir test is run, the `utilityAssertCompatibleOracleVersion` oracle is called
|
|
6
6
|
/// and if the oracle version is incompatible an error is thrown.
|
|
7
|
-
export const ORACLE_VERSION =
|
|
7
|
+
export const ORACLE_VERSION = 10;
|
|
8
8
|
|
|
9
9
|
/// This hash is computed as by hashing the Oracle interface and it is used to detect when the Oracle interface changes,
|
|
10
10
|
/// which in turn implies that you need to update the ORACLE_VERSION constant in this file and in
|
|
11
11
|
/// `noir-projects/aztec-nr/aztec/src/oracle/version.nr`.
|
|
12
|
-
export const ORACLE_INTERFACE_HASH = '
|
|
12
|
+
export const ORACLE_INTERFACE_HASH = 'a3b284ee5abff0509986d6d2fa78a3e6e2ec212325674de78355c5e70b05784c';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { vkAsFieldsMegaHonk } from '@aztec/foundation/crypto/keys';
|
|
2
2
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
+
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { pushTestData } from '@aztec/foundation/testing';
|
|
5
5
|
import { Timer } from '@aztec/foundation/timer';
|
|
6
6
|
import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
@@ -56,13 +56,16 @@ export interface PrivateKernelExecutionProverConfig {
|
|
|
56
56
|
* inform state tree updates.
|
|
57
57
|
*/
|
|
58
58
|
export class PrivateKernelExecutionProver {
|
|
59
|
-
private log
|
|
59
|
+
private log: Logger;
|
|
60
60
|
|
|
61
61
|
constructor(
|
|
62
62
|
private oracle: PrivateKernelOracle,
|
|
63
63
|
private proofCreator: PrivateKernelProver,
|
|
64
64
|
private fakeProofs = false,
|
|
65
|
-
|
|
65
|
+
bindings?: LoggerBindings,
|
|
66
|
+
) {
|
|
67
|
+
this.log = createLogger('pxe:private-kernel-execution-prover', bindings);
|
|
68
|
+
}
|
|
66
69
|
|
|
67
70
|
/**
|
|
68
71
|
* Generate a proof for a given transaction request and execution result.
|
|
@@ -7,7 +7,7 @@ import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-type
|
|
|
7
7
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
8
8
|
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
9
9
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
10
|
-
import {
|
|
10
|
+
import { BlockHash } from '@aztec/stdlib/block';
|
|
11
11
|
import {
|
|
12
12
|
type ContractInstanceWithAddress,
|
|
13
13
|
computeContractClassIdPreimage,
|
|
@@ -30,7 +30,7 @@ export class PrivateKernelOracle {
|
|
|
30
30
|
private contractStore: ContractStore,
|
|
31
31
|
private keyStore: KeyStore,
|
|
32
32
|
private node: AztecNode,
|
|
33
|
-
private blockHash:
|
|
33
|
+
private blockHash: BlockHash,
|
|
34
34
|
) {}
|
|
35
35
|
|
|
36
36
|
/** Retrieves the preimage of a contract address from the registered contract instances db. */
|
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';
|
|
@@ -18,7 +18,6 @@ import {
|
|
|
18
18
|
} from '@aztec/stdlib/abi';
|
|
19
19
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
20
20
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
21
|
-
import { L2BlockHash } from '@aztec/stdlib/block';
|
|
22
21
|
import {
|
|
23
22
|
CompleteAddress,
|
|
24
23
|
type ContractInstanceWithAddress,
|
|
@@ -129,6 +128,10 @@ export class PXE {
|
|
|
129
128
|
config: PXEConfig,
|
|
130
129
|
loggerOrSuffix?: string | Logger,
|
|
131
130
|
) {
|
|
131
|
+
// Extract bindings from the logger, or use empty bindings if a string suffix is provided.
|
|
132
|
+
const bindings: LoggerBindings | undefined =
|
|
133
|
+
loggerOrSuffix && typeof loggerOrSuffix !== 'string' ? loggerOrSuffix.getBindings() : undefined;
|
|
134
|
+
|
|
132
135
|
const log =
|
|
133
136
|
!loggerOrSuffix || typeof loggerOrSuffix === 'string'
|
|
134
137
|
? createLogger(loggerOrSuffix ? `pxe:service:${loggerOrSuffix}` : `pxe:service`)
|
|
@@ -154,10 +157,10 @@ export class PXE {
|
|
|
154
157
|
privateEventStore,
|
|
155
158
|
tipsStore,
|
|
156
159
|
config,
|
|
157
|
-
|
|
160
|
+
bindings,
|
|
158
161
|
);
|
|
159
162
|
|
|
160
|
-
const jobCoordinator = new JobCoordinator(store);
|
|
163
|
+
const jobCoordinator = new JobCoordinator(store, bindings);
|
|
161
164
|
jobCoordinator.registerStores([
|
|
162
165
|
capsuleStore,
|
|
163
166
|
senderTaggingStore,
|
|
@@ -166,7 +169,7 @@ export class PXE {
|
|
|
166
169
|
noteStore,
|
|
167
170
|
]);
|
|
168
171
|
|
|
169
|
-
const debugUtils = new PXEDebugUtils(contractStore, noteStore);
|
|
172
|
+
const debugUtils = new PXEDebugUtils(contractStore, noteStore, synchronizer, anchorBlockStore);
|
|
170
173
|
|
|
171
174
|
const jobQueue = new SerialQueue();
|
|
172
175
|
|
|
@@ -193,7 +196,7 @@ export class PXE {
|
|
|
193
196
|
debugUtils,
|
|
194
197
|
);
|
|
195
198
|
|
|
196
|
-
debugUtils.setPXE(pxe);
|
|
199
|
+
debugUtils.setPXE(pxe, pxe.#putInJobQueue.bind(pxe));
|
|
197
200
|
|
|
198
201
|
pxe.jobQueue.start();
|
|
199
202
|
|
|
@@ -214,7 +217,6 @@ export class PXE {
|
|
|
214
217
|
this.keyStore,
|
|
215
218
|
this.addressStore,
|
|
216
219
|
BenchmarkedNodeFactory.create(this.node),
|
|
217
|
-
this.anchorBlockStore,
|
|
218
220
|
this.senderTaggingStore,
|
|
219
221
|
this.recipientTaggingStore,
|
|
220
222
|
this.senderAddressBookStore,
|
|
@@ -301,7 +303,9 @@ export class PXE {
|
|
|
301
303
|
privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
302
304
|
this.node,
|
|
303
305
|
this.contractStore,
|
|
306
|
+
this.noteStore,
|
|
304
307
|
anchorBlockHeader,
|
|
308
|
+
jobId,
|
|
305
309
|
);
|
|
306
310
|
|
|
307
311
|
const result = await contractFunctionSimulator.run(
|
|
@@ -399,9 +403,14 @@ export class PXE {
|
|
|
399
403
|
config: PrivateKernelExecutionProverConfig,
|
|
400
404
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
401
405
|
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
402
|
-
const anchorBlockHash =
|
|
406
|
+
const anchorBlockHash = await anchorBlockHeader.hash();
|
|
403
407
|
const kernelOracle = new PrivateKernelOracle(this.contractStore, this.keyStore, this.node, anchorBlockHash);
|
|
404
|
-
const kernelTraceProver = new PrivateKernelExecutionProver(
|
|
408
|
+
const kernelTraceProver = new PrivateKernelExecutionProver(
|
|
409
|
+
kernelOracle,
|
|
410
|
+
proofCreator,
|
|
411
|
+
!this.proverEnabled,
|
|
412
|
+
this.log.getBindings(),
|
|
413
|
+
);
|
|
405
414
|
this.log.debug(`Executing kernel trace prover (${JSON.stringify(config)})...`);
|
|
406
415
|
return await kernelTraceProver.proveWithKernels(txExecutionRequest.toTxRequest(), privateExecutionResult, config);
|
|
407
416
|
}
|
|
@@ -969,7 +978,9 @@ export class PXE {
|
|
|
969
978
|
privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
970
979
|
this.node,
|
|
971
980
|
this.contractStore,
|
|
981
|
+
this.noteStore,
|
|
972
982
|
anchorBlockHeader,
|
|
983
|
+
jobId,
|
|
973
984
|
);
|
|
974
985
|
|
|
975
986
|
const executionResult = await this.#simulateUtility(
|
|
@@ -1040,7 +1051,9 @@ export class PXE {
|
|
|
1040
1051
|
await this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
1041
1052
|
this.node,
|
|
1042
1053
|
this.contractStore,
|
|
1054
|
+
this.noteStore,
|
|
1043
1055
|
anchorBlockHeader,
|
|
1056
|
+
jobId,
|
|
1044
1057
|
);
|
|
1045
1058
|
});
|
|
1046
1059
|
|
|
@@ -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;
|