@aztec/pxe 0.0.1-commit.2d9cb6034 → 0.0.1-commit.2e20a94
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/bin/check_oracle_version.js +4 -4
- package/dest/config/index.d.ts +1 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +7 -14
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +4 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +5 -1
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
- package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +1 -1
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +13 -2
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +1 -1
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +10 -1
- package/dest/contract_function_simulator/oracle/oracle.d.ts +13 -2
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +98 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +3 -2
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +26 -10
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +97 -24
- package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
- package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
- package/dest/contract_function_simulator/pick_notes.js +9 -2
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +3 -0
- package/dest/contract_sync/contract_sync_service.d.ts +1 -1
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
- package/dest/contract_sync/contract_sync_service.js +35 -23
- package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +2 -2
- 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 +2 -2
- package/dest/entrypoints/pxe_creation_options.d.ts +3 -1
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/pxe_creation_options.js +3 -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 +2 -2
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +2 -2
- package/dest/events/private_event_filter_validator.d.ts +3 -2
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +15 -0
- package/dest/logs/log_service.d.ts +6 -6
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +8 -20
- package/dest/oracle_version.d.ts +4 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +20 -10
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +4 -7
- package/dest/pxe.d.ts +2 -1
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +8 -2
- package/dest/storage/private_event_store/stored_private_event.js +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +2 -2
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +1 -15
- package/package.json +16 -16
- package/src/bin/check_oracle_version.ts +4 -4
- package/src/config/index.ts +2 -8
- package/src/contract_function_simulator/contract_function_simulator.ts +6 -1
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -1
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
- package/src/contract_function_simulator/oracle/interfaces.ts +20 -1
- package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +7 -1
- package/src/contract_function_simulator/oracle/oracle.ts +143 -3
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +2 -1
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +160 -51
- package/src/contract_function_simulator/pick_notes.ts +9 -2
- package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
- package/src/contract_sync/contract_sync_service.ts +57 -51
- package/src/entrypoints/client/bundle/utils.ts +2 -3
- package/src/entrypoints/client/lazy/utils.ts +2 -3
- package/src/entrypoints/pxe_creation_options.ts +7 -0
- package/src/entrypoints/server/index.ts +1 -1
- package/src/entrypoints/server/utils.ts +2 -3
- package/src/events/private_event_filter_validator.ts +21 -1
- package/src/logs/log_service.ts +14 -50
- package/src/oracle_version.ts +20 -10
- package/src/private_kernel/private_kernel_execution_prover.ts +4 -9
- package/src/pxe.ts +10 -0
- package/src/storage/private_event_store/stored_private_event.ts +1 -1
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +2 -14
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import type { PrivateEventFilter } from '@aztec/aztec.js/wallet';
|
|
2
2
|
import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
|
|
3
3
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
4
5
|
|
|
5
6
|
import type { PrivateEventStoreFilter } from '../storage/private_event_store/private_event_store.js';
|
|
6
7
|
|
|
7
8
|
export class PrivateEventFilterValidator {
|
|
8
|
-
|
|
9
|
+
private readonly log = createLogger('pxe:private_event_filter_validator');
|
|
10
|
+
|
|
11
|
+
constructor(private readonly lastBlock: BlockNumber) {}
|
|
9
12
|
|
|
10
13
|
validate(filter: PrivateEventFilter): PrivateEventStoreFilter {
|
|
11
14
|
let { fromBlock, toBlock } = filter;
|
|
@@ -35,6 +38,23 @@ export class PrivateEventFilterValidator {
|
|
|
35
38
|
throw new Error('toBlock must be strictly greater than fromBlock');
|
|
36
39
|
}
|
|
37
40
|
|
|
41
|
+
// Cap the requested range to the synced block range. Without this, callers that pass a large
|
|
42
|
+
// toBlock (e.g. Number.MAX_SAFE_INTEGER as a "give me everything" idiom) would silently receive
|
|
43
|
+
// only the events that happen to be synced and believe they have complete coverage.
|
|
44
|
+
// We warn + cap rather than throw so callers don't need to query the last synced block before
|
|
45
|
+
// every request (which would also be unreliable, as the block can advance between the two calls).
|
|
46
|
+
const syncedUpperBound = BlockNumber(this.lastBlock + 1);
|
|
47
|
+
if (fromBlock >= syncedUpperBound) {
|
|
48
|
+
this.log.warn(
|
|
49
|
+
`Requested fromBlock ${fromBlock} is past last synced block ${this.lastBlock}; no events will be returned until PXE syncs further.`,
|
|
50
|
+
);
|
|
51
|
+
} else if (toBlock > syncedUpperBound) {
|
|
52
|
+
this.log.warn(
|
|
53
|
+
`Requested toBlock ${toBlock} exceeds last synced block ${this.lastBlock}; capping to ${syncedUpperBound}. Retry once PXE is further synced for complete coverage.`,
|
|
54
|
+
);
|
|
55
|
+
toBlock = syncedUpperBound;
|
|
56
|
+
}
|
|
57
|
+
|
|
38
58
|
return {
|
|
39
59
|
contractAddress: filter.contractAddress,
|
|
40
60
|
scopes: filter.scopes,
|
package/src/logs/log_service.ts
CHANGED
|
@@ -1,21 +1,14 @@
|
|
|
1
|
-
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
1
|
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
3
2
|
import type { KeyStore } from '@aztec/key-store';
|
|
4
3
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
|
+
import type { L2TipsProvider } from '@aztec/stdlib/block';
|
|
5
5
|
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
6
|
-
import {
|
|
7
|
-
ExtendedDirectionalAppTaggingSecret,
|
|
8
|
-
PendingTaggedLog,
|
|
9
|
-
SiloedTag,
|
|
10
|
-
Tag,
|
|
11
|
-
TxScopedL2Log,
|
|
12
|
-
} from '@aztec/stdlib/logs';
|
|
6
|
+
import { ExtendedDirectionalAppTaggingSecret, PendingTaggedLog, SiloedTag, Tag } from '@aztec/stdlib/logs';
|
|
13
7
|
import type { BlockHeader } from '@aztec/stdlib/tx';
|
|
14
8
|
|
|
15
9
|
import type { LogRetrievalRequest } from '../contract_function_simulator/noir-structs/log_retrieval_request.js';
|
|
16
10
|
import { LogRetrievalResponse } from '../contract_function_simulator/noir-structs/log_retrieval_response.js';
|
|
17
11
|
import { AddressStore } from '../storage/address_store/address_store.js';
|
|
18
|
-
import type { CapsuleService } from '../storage/capsule_store/capsule_service.js';
|
|
19
12
|
import type { RecipientTaggingStore } from '../storage/tagging_store/recipient_tagging_store.js';
|
|
20
13
|
import type { SenderAddressBookStore } from '../storage/tagging_store/sender_address_book_store.js';
|
|
21
14
|
import {
|
|
@@ -30,8 +23,8 @@ export class LogService {
|
|
|
30
23
|
constructor(
|
|
31
24
|
private readonly aztecNode: AztecNode,
|
|
32
25
|
private readonly anchorBlockHeader: BlockHeader,
|
|
26
|
+
private readonly l2TipsStore: L2TipsProvider,
|
|
33
27
|
private readonly keyStore: KeyStore,
|
|
34
|
-
private readonly capsuleService: CapsuleService,
|
|
35
28
|
private readonly recipientTaggingStore: RecipientTaggingStore,
|
|
36
29
|
private readonly senderAddressBookStore: SenderAddressBookStore,
|
|
37
30
|
private readonly addressStore: AddressStore,
|
|
@@ -120,17 +113,15 @@ export class LogService {
|
|
|
120
113
|
);
|
|
121
114
|
}
|
|
122
115
|
|
|
123
|
-
public async fetchTaggedLogs(
|
|
124
|
-
contractAddress: AztecAddress,
|
|
125
|
-
pendingTaggedLogArrayBaseSlot: Fr,
|
|
126
|
-
recipient: AztecAddress,
|
|
127
|
-
) {
|
|
116
|
+
public async fetchTaggedLogs(contractAddress: AztecAddress, recipient: AztecAddress): Promise<PendingTaggedLog[]> {
|
|
128
117
|
this.log.verbose(`Fetching tagged logs for ${contractAddress.toString()}`);
|
|
129
118
|
|
|
130
119
|
// We only load logs from block up to and including the anchor block number
|
|
131
120
|
const anchorBlockNumber = this.anchorBlockHeader.getBlockNumber();
|
|
132
121
|
const anchorBlockHash = await this.anchorBlockHeader.hash();
|
|
133
122
|
|
|
123
|
+
const l2Tips = await this.l2TipsStore.getL2Tips();
|
|
124
|
+
const currentTimestamp = this.anchorBlockHeader.globalVariables.timestamp;
|
|
134
125
|
// Get all secrets for this recipient (one per sender)
|
|
135
126
|
const secrets = await this.#getSecretsForSenders(contractAddress, recipient);
|
|
136
127
|
|
|
@@ -143,17 +134,19 @@ export class LogService {
|
|
|
143
134
|
this.recipientTaggingStore,
|
|
144
135
|
anchorBlockNumber,
|
|
145
136
|
anchorBlockHash,
|
|
137
|
+
currentTimestamp,
|
|
138
|
+
l2Tips.finalized.block.number,
|
|
146
139
|
this.jobId,
|
|
147
140
|
),
|
|
148
141
|
),
|
|
149
142
|
);
|
|
150
143
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
144
|
+
return logArrays
|
|
145
|
+
.flat()
|
|
146
|
+
.map(
|
|
147
|
+
scopedLog =>
|
|
148
|
+
new PendingTaggedLog(scopedLog.logData, scopedLog.txHash, scopedLog.noteHashes, scopedLog.firstNullifier),
|
|
149
|
+
);
|
|
157
150
|
}
|
|
158
151
|
|
|
159
152
|
async #getSecretsForSenders(
|
|
@@ -187,7 +180,6 @@ export class LogService {
|
|
|
187
180
|
|
|
188
181
|
if (!secret) {
|
|
189
182
|
// Note that all senders originate from either the SenderAddressBookStore or the KeyStore.
|
|
190
|
-
// TODO(F-512): make sure we actually prevent registering invalid senders.
|
|
191
183
|
throw new Error(
|
|
192
184
|
`Failed to compute a tagging secret for sender ${sender} - this implies this is an invalid address, which should not happen as they have been previously registered in PXE.`,
|
|
193
185
|
);
|
|
@@ -197,32 +189,4 @@ export class LogService {
|
|
|
197
189
|
}),
|
|
198
190
|
);
|
|
199
191
|
}
|
|
200
|
-
|
|
201
|
-
#storePendingTaggedLogs(
|
|
202
|
-
contractAddress: AztecAddress,
|
|
203
|
-
capsuleArrayBaseSlot: Fr,
|
|
204
|
-
recipient: AztecAddress,
|
|
205
|
-
privateLogs: TxScopedL2Log[],
|
|
206
|
-
) {
|
|
207
|
-
// Build all pending tagged logs from the scoped logs
|
|
208
|
-
const pendingTaggedLogs = privateLogs.map(scopedLog => {
|
|
209
|
-
const pendingTaggedLog = new PendingTaggedLog(
|
|
210
|
-
scopedLog.logData,
|
|
211
|
-
scopedLog.txHash,
|
|
212
|
-
scopedLog.noteHashes,
|
|
213
|
-
scopedLog.firstNullifier,
|
|
214
|
-
);
|
|
215
|
-
|
|
216
|
-
return pendingTaggedLog.toFields();
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
// TODO: This looks like it could belong more at the oracle interface level
|
|
220
|
-
return this.capsuleService.appendToCapsuleArray(
|
|
221
|
-
contractAddress,
|
|
222
|
-
capsuleArrayBaseSlot,
|
|
223
|
-
pendingTaggedLogs,
|
|
224
|
-
this.jobId,
|
|
225
|
-
recipient,
|
|
226
|
-
);
|
|
227
|
-
}
|
|
228
192
|
}
|
package/src/oracle_version.ts
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
|
-
/// The
|
|
2
|
-
///
|
|
3
|
-
///
|
|
1
|
+
/// The oracle version constants are used to check that the oracle interface is in sync between PXE and Aztec.nr.
|
|
2
|
+
/// We version the oracle interface as `major.minor` where:
|
|
3
|
+
/// - `major` = backward-breaking changes (must match exactly between PXE and Aztec.nr)
|
|
4
|
+
/// - `minor` = oracle additions (non-breaking; PXE minor >= contract minor)
|
|
4
5
|
///
|
|
5
|
-
///
|
|
6
|
-
///
|
|
7
|
-
|
|
6
|
+
/// The Noir counterparts are in `noir-projects/aztec-nr/aztec/src/oracle/version.nr`.
|
|
7
|
+
///
|
|
8
|
+
/// @dev Whenever a contract function or Noir test is run, the `aztec_utl_assertCompatibleOracleVersion` oracle is called.
|
|
9
|
+
/// If the major version is incompatible, an error is thrown immediately. The minor version is recorded by the PXE and
|
|
10
|
+
/// used to provide helpful error messages if a contract calls an oracle that doesn't exist. We don't throw immediately
|
|
11
|
+
/// if AZTEC_NR_MINOR > PXE_MINOR because if a contract is updated to use a newer Aztec.nr dependency without actually
|
|
12
|
+
/// using any of the new oracles then there is no reason to throw.
|
|
13
|
+
export const ORACLE_VERSION_MAJOR = 22;
|
|
14
|
+
export const ORACLE_VERSION_MINOR = 1;
|
|
8
15
|
|
|
9
|
-
/// This hash is computed
|
|
10
|
-
///
|
|
11
|
-
/// `
|
|
12
|
-
|
|
16
|
+
/// This hash is computed from the Oracle interface and is used to detect when that interface changes. When it does,
|
|
17
|
+
/// you need to either:
|
|
18
|
+
/// - increment `ORACLE_VERSION_MAJOR` and reset `ORACLE_VERSION_MINOR` to zero if the change is breaking, or
|
|
19
|
+
/// - increment only `ORACLE_VERSION_MINOR` if the change is additive (a new oracle was added).
|
|
20
|
+
///
|
|
21
|
+
/// These constants must be kept in sync between this file and `noir-projects/aztec-nr/aztec/src/oracle/version.nr`.
|
|
22
|
+
export const ORACLE_INTERFACE_HASH = 'efafa0db2cc1f94e26d794d0079c8f71115261df0c3d0fa8cb5b64f17a12db92';
|
|
@@ -33,6 +33,7 @@ import {
|
|
|
33
33
|
} from '@aztec/stdlib/tx';
|
|
34
34
|
import { VerificationKeyAsFields, VerificationKeyData, VkData } from '@aztec/stdlib/vks';
|
|
35
35
|
|
|
36
|
+
import { computeTxExpirationTimestamp } from './hints/compute_tx_expiration_timestamp.js';
|
|
36
37
|
import { PrivateKernelResetPrivateInputsBuilder } from './hints/private_kernel_reset_private_inputs_builder.js';
|
|
37
38
|
import type { PrivateKernelOracle } from './private_kernel_oracle.js';
|
|
38
39
|
|
|
@@ -267,15 +268,9 @@ export class PrivateKernelExecutionProver {
|
|
|
267
268
|
// TODO: Enable padding once we better understand the final amounts to pad to.
|
|
268
269
|
const paddedSideEffectAmounts = PaddedSideEffectAmounts.empty();
|
|
269
270
|
|
|
270
|
-
//
|
|
271
|
-
//
|
|
272
|
-
const expirationTimestampUpperBound = previousKernelData.publicInputs
|
|
273
|
-
const anchorBlockTimestamp = previousKernelData.publicInputs.constants.anchorBlockHeader.globalVariables.timestamp;
|
|
274
|
-
if (expirationTimestampUpperBound <= anchorBlockTimestamp) {
|
|
275
|
-
throw new Error(
|
|
276
|
-
`Include-by timestamp must be greater than the anchor block timestamp. Anchor block timestamp: ${anchorBlockTimestamp}. Include-by timestamp: ${expirationTimestampUpperBound}.`,
|
|
277
|
-
);
|
|
278
|
-
}
|
|
271
|
+
// Round the aggregated expirationTimestamp down to reduce precision and avoid leaking which private
|
|
272
|
+
// functions were called via their exact expiration offsets.
|
|
273
|
+
const expirationTimestampUpperBound = computeTxExpirationTimestamp(previousKernelData.publicInputs);
|
|
279
274
|
|
|
280
275
|
const privateInputs = new PrivateKernelTailCircuitPrivateInputs(
|
|
281
276
|
previousKernelData,
|
package/src/pxe.ts
CHANGED
|
@@ -18,6 +18,7 @@ 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 type { L2TipsProvider } from '@aztec/stdlib/block';
|
|
21
22
|
import {
|
|
22
23
|
CompleteAddress,
|
|
23
24
|
type ContractInstanceWithAddress,
|
|
@@ -161,6 +162,7 @@ export class PXE {
|
|
|
161
162
|
private privateEventStore: PrivateEventStore,
|
|
162
163
|
private contractSyncService: ContractSyncService,
|
|
163
164
|
private messageContextService: MessageContextService,
|
|
165
|
+
private l2TipsStore: L2TipsProvider,
|
|
164
166
|
private simulator: CircuitSimulator,
|
|
165
167
|
private proverEnabled: boolean,
|
|
166
168
|
private proofCreator: PrivateKernelProver,
|
|
@@ -260,6 +262,7 @@ export class PXE {
|
|
|
260
262
|
privateEventStore,
|
|
261
263
|
contractSyncService,
|
|
262
264
|
messageContextService,
|
|
265
|
+
tipsStore,
|
|
263
266
|
simulator,
|
|
264
267
|
proverEnabled,
|
|
265
268
|
proofCreator,
|
|
@@ -294,6 +297,7 @@ export class PXE {
|
|
|
294
297
|
keyStore: this.keyStore,
|
|
295
298
|
addressStore: this.addressStore,
|
|
296
299
|
aztecNode: BenchmarkedNodeFactory.create(this.node),
|
|
300
|
+
l2TipsStore: this.l2TipsStore,
|
|
297
301
|
senderTaggingStore: this.senderTaggingStore,
|
|
298
302
|
recipientTaggingStore: this.recipientTaggingStore,
|
|
299
303
|
senderAddressBookStore: this.senderAddressBookStore,
|
|
@@ -560,6 +564,12 @@ export class PXE {
|
|
|
560
564
|
* TODO: It's strange that we return the address here and I (benesjan) think we should drop the return value.
|
|
561
565
|
*/
|
|
562
566
|
public async registerSender(sender: AztecAddress): Promise<AztecAddress> {
|
|
567
|
+
if (!(await sender.isValid())) {
|
|
568
|
+
throw new Error(
|
|
569
|
+
`Address ${sender} is not valid: it does not correspond to a point on the Grumpkin curve. Cannot register it as a sender.`,
|
|
570
|
+
);
|
|
571
|
+
}
|
|
572
|
+
|
|
563
573
|
const accounts = await this.keyStore.getAccounts();
|
|
564
574
|
if (accounts.includes(sender)) {
|
|
565
575
|
this.log.info(`Sender:\n "${sender.toString()}"\n already registered.`);
|
|
@@ -49,7 +49,7 @@ export class StoredPrivateEvent {
|
|
|
49
49
|
const msgContentLength = reader.readNumber();
|
|
50
50
|
const msgContent = reader.readArray(msgContentLength, Fr);
|
|
51
51
|
const l2BlockNumber = reader.readNumber();
|
|
52
|
-
const l2BlockHash =
|
|
52
|
+
const l2BlockHash = BlockHash.fromBuffer(reader);
|
|
53
53
|
const txHash = TxHash.fromBuffer(reader);
|
|
54
54
|
const txIndexInBlock = reader.readNumber();
|
|
55
55
|
const eventIndexInTx = reader.readNumber();
|
|
@@ -21,6 +21,8 @@ export async function loadPrivateLogsForSenderRecipientPair(
|
|
|
21
21
|
taggingStore: RecipientTaggingStore,
|
|
22
22
|
anchorBlockNumber: BlockNumber,
|
|
23
23
|
anchorBlockHash: BlockHash,
|
|
24
|
+
currentTimestamp: bigint,
|
|
25
|
+
finalizedBlockNumber: BlockNumber,
|
|
24
26
|
jobId: string,
|
|
25
27
|
): Promise<TxScopedL2Log[]> {
|
|
26
28
|
// # Explanation of how the algorithm works
|
|
@@ -61,20 +63,6 @@ export async function loadPrivateLogsForSenderRecipientPair(
|
|
|
61
63
|
// the highest finalized index. If that index was already used, they will throw an error. For this reason we
|
|
62
64
|
// don't have to look further than `highestFinalizedIndex + WINDOW_LEN`.
|
|
63
65
|
|
|
64
|
-
let finalizedBlockNumber: number, currentTimestamp: bigint;
|
|
65
|
-
{
|
|
66
|
-
const [l2Tips, latestBlockHeader] = await Promise.all([aztecNode.getL2Tips(), aztecNode.getBlockHeader('latest')]);
|
|
67
|
-
|
|
68
|
-
if (!latestBlockHeader) {
|
|
69
|
-
throw new Error('Node failed to return latest block header when syncing logs');
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
[finalizedBlockNumber, currentTimestamp] = [
|
|
73
|
-
l2Tips.finalized.block.number,
|
|
74
|
-
latestBlockHeader.globalVariables.timestamp,
|
|
75
|
-
];
|
|
76
|
-
}
|
|
77
|
-
|
|
78
66
|
let start: number, end: number;
|
|
79
67
|
{
|
|
80
68
|
const currentHighestAgedIndex = await taggingStore.getHighestAgedIndex(secret, jobId);
|