@aztec/pxe 0.0.1-commit.c2595eba → 0.0.1-commit.c2eed6949
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/access_scopes.d.ts +9 -0
- package/dest/access_scopes.d.ts.map +1 -0
- package/dest/access_scopes.js +6 -0
- package/dest/block_synchronizer/block_synchronizer.d.ts +4 -2
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +7 -1
- package/dest/config/index.d.ts +2 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +1 -1
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +61 -31
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +200 -74
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -7
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -11
- package/dest/contract_function_simulator/index.d.ts +2 -1
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +1 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +2 -3
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +5 -4
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -3
- package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts +16 -0
- package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/message_tx_context.js +57 -0
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +2 -4
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +3 -5
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +50 -45
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +9 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +42 -0
- package/dest/contract_function_simulator/oracle/oracle.d.ts +45 -44
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +187 -106
- package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +54 -79
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +100 -87
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +95 -53
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +205 -106
- package/dest/contract_logging.d.ts +22 -0
- package/dest/contract_logging.d.ts.map +1 -0
- package/dest/contract_logging.js +23 -0
- package/dest/contract_sync/contract_sync_service.d.ts +45 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +114 -0
- package/dest/contract_sync/helpers.d.ts +29 -0
- package/dest/contract_sync/helpers.d.ts.map +1 -0
- package/dest/contract_sync/{index.js → helpers.js} +13 -12
- package/dest/debug/pxe_debug_utils.d.ts +14 -10
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +16 -15
- package/dest/entrypoints/client/bundle/index.d.ts +4 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +3 -0
- 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 +11 -2
- package/dest/entrypoints/client/lazy/index.d.ts +4 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +3 -0
- package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +11 -2
- package/dest/entrypoints/server/index.d.ts +4 -2
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +3 -1
- package/dest/entrypoints/server/utils.js +9 -1
- 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/logs/log_service.d.ts +6 -5
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +18 -28
- package/dest/messages/message_context_service.d.ts +17 -0
- package/dest/messages/message_context_service.d.ts.map +1 -0
- package/dest/messages/message_context_service.js +36 -0
- package/dest/notes/note_service.d.ts +7 -7
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +9 -9
- package/dest/notes_filter.d.ts +25 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -0
- package/dest/oracle_version.d.ts +3 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +3 -3
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
- package/dest/private_kernel/hints/index.d.ts +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
- package/dest/private_kernel/hints/test_utils.d.ts +122 -0
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
- package/dest/private_kernel/hints/test_utils.js +203 -0
- 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 +19 -11
- package/dest/private_kernel/private_kernel_oracle.d.ts +6 -2
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +7 -3
- package/dest/pxe.d.ts +74 -24
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +124 -74
- 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 +42 -15
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +157 -72
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +13 -3
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +173 -131
- 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 +126 -101
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
- 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 +29 -28
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +233 -137
- package/dest/tagging/get_all_logs_by_tags.d.ts +1 -1
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/get_all_logs_by_tags.js +17 -3
- package/dest/tagging/index.d.ts +3 -3
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +4 -5
- 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 +7 -7
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +6 -7
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +12 -11
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -8
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +13 -7
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +4 -3
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +20 -10
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -7
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
- package/package.json +25 -16
- package/src/access_scopes.ts +9 -0
- package/src/block_synchronizer/block_synchronizer.ts +6 -0
- package/src/config/index.ts +1 -1
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +360 -137
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
- package/src/contract_function_simulator/index.ts +1 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +8 -5
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -4
- package/src/contract_function_simulator/noir-structs/message_tx_context.ts +55 -0
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +3 -6
- package/src/contract_function_simulator/oracle/interfaces.ts +60 -60
- package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +135 -0
- package/src/contract_function_simulator/oracle/oracle.ts +198 -143
- package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +126 -184
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +308 -122
- package/src/contract_logging.ts +39 -0
- package/src/contract_sync/contract_sync_service.ts +181 -0
- package/src/contract_sync/{index.ts → helpers.ts} +21 -21
- package/src/debug/pxe_debug_utils.ts +48 -18
- package/src/entrypoints/client/bundle/index.ts +3 -0
- package/src/entrypoints/client/bundle/utils.ts +12 -2
- package/src/entrypoints/client/lazy/index.ts +3 -0
- package/src/entrypoints/client/lazy/utils.ts +12 -2
- package/src/entrypoints/server/index.ts +3 -1
- package/src/entrypoints/server/utils.ts +7 -7
- package/src/events/event_service.ts +4 -6
- package/src/logs/log_service.ts +25 -35
- package/src/messages/message_context_service.ts +45 -0
- package/src/notes/note_service.ts +9 -10
- package/src/notes_filter.ts +26 -0
- package/src/oracle_version.ts +3 -3
- package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
- package/src/private_kernel/hints/index.ts +1 -1
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
- package/src/private_kernel/hints/test_utils.ts +325 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +19 -12
- package/src/private_kernel/private_kernel_oracle.ts +7 -7
- package/src/pxe.ts +228 -125
- 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 +186 -76
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +195 -153
- package/src/storage/private_event_store/private_event_store.ts +151 -128
- package/src/storage/tagging_store/recipient_tagging_store.ts +38 -24
- package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
- package/src/storage/tagging_store/sender_tagging_store.ts +287 -156
- package/src/tagging/get_all_logs_by_tags.ts +28 -4
- package/src/tagging/index.ts +2 -2
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +7 -10
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +10 -15
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +23 -10
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +26 -11
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +27 -26
- package/dest/contract_sync/index.d.ts +0 -23
- package/dest/contract_sync/index.d.ts.map +0 -1
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
-
import { toArray } from '@aztec/foundation/iterable';
|
|
3
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
3
|
import { Semaphore } from '@aztec/foundation/queue';
|
|
5
4
|
import { StoredPrivateEvent } from './stored_private_event.js';
|
|
@@ -34,27 +33,27 @@ import { StoredPrivateEvent } from './stored_private_event.js';
|
|
|
34
33
|
* txHash - The transaction hash of the event log.
|
|
35
34
|
* blockNumber - The block number in which the event was emitted.
|
|
36
35
|
*/ storePrivateEventLog(eventSelector, randomness, msgContent, siloedEventCommitment, metadata, jobId) {
|
|
37
|
-
return this.#withJobLock(jobId, async ()=>{
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
36
|
+
return this.#withJobLock(jobId, ()=>this.#store.transactionAsync(async ()=>{
|
|
37
|
+
const { contractAddress, scope, txHash, l2BlockNumber, l2BlockHash, txIndexInBlock, eventIndexInTx } = metadata;
|
|
38
|
+
const eventId = siloedEventCommitment.toString();
|
|
39
|
+
this.logger.verbose('storing private event log (job stage)', {
|
|
40
|
+
eventId,
|
|
41
|
+
contractAddress,
|
|
42
|
+
scope,
|
|
43
|
+
msgContent,
|
|
44
|
+
l2BlockNumber
|
|
45
|
+
});
|
|
46
|
+
const existing = await this.#readEvent(eventId, jobId);
|
|
47
|
+
if (existing) {
|
|
48
|
+
// If we already stored this event, we still want to make sure to track it for the given scope
|
|
49
|
+
existing.addScope(scope.toString());
|
|
50
|
+
this.#writeEvent(eventId, existing, jobId);
|
|
51
|
+
} else {
|
|
52
|
+
this.#writeEvent(eventId, new StoredPrivateEvent(randomness, msgContent, l2BlockNumber, l2BlockHash, txHash, txIndexInBlock, eventIndexInTx, contractAddress, eventSelector, new Set([
|
|
53
|
+
scope.toString()
|
|
54
|
+
])), jobId);
|
|
55
|
+
}
|
|
56
|
+
}));
|
|
58
57
|
}
|
|
59
58
|
/**
|
|
60
59
|
* Returns the private events given search parameters.
|
|
@@ -66,55 +65,67 @@ import { StoredPrivateEvent } from './stored_private_event.js';
|
|
|
66
65
|
* scope: - The addresses that decrypted the logs.
|
|
67
66
|
* @returns - The event log contents, augmented with metadata about the transaction and block in which the event was
|
|
68
67
|
* included.
|
|
69
|
-
*/
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
this.logger.verbose(`EventId ${eventId} does not exist in main index but it is referenced from contract event selector index`);
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
const storedPrivateEvent = StoredPrivateEvent.fromBuffer(eventBuffer);
|
|
82
|
-
// Filter by block range
|
|
83
|
-
if (storedPrivateEvent.l2BlockNumber < filter.fromBlock || storedPrivateEvent.l2BlockNumber >= filter.toBlock) {
|
|
84
|
-
continue;
|
|
68
|
+
*/ getPrivateEvents(eventSelector, filter) {
|
|
69
|
+
return this.#store.transactionAsync(async ()=>{
|
|
70
|
+
const key = this.#keyFor(filter.contractAddress, eventSelector);
|
|
71
|
+
const targetScopes = new Set(filter.scopes.map((s)=>s.toString()));
|
|
72
|
+
// Map from eventId to the promise that reads the event buffer.
|
|
73
|
+
// We start reads during iteration to keep DB requests pending and avoid IndexedDB auto-commit.
|
|
74
|
+
const eventReadPromises = new Map();
|
|
75
|
+
for await (const eventId of this.#eventsByContractAndEventSelector.getValuesAsync(key)){
|
|
76
|
+
eventReadPromises.set(eventId, this.#events.getAsync(eventId));
|
|
85
77
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
78
|
+
const eventIds = [
|
|
79
|
+
...eventReadPromises.keys()
|
|
80
|
+
];
|
|
81
|
+
const eventBuffers = await Promise.all(eventReadPromises.values());
|
|
82
|
+
const events = [];
|
|
83
|
+
for(let i = 0; i < eventIds.length; i++){
|
|
84
|
+
const eventId = eventIds[i];
|
|
85
|
+
const eventBuffer = eventBuffers[i];
|
|
86
|
+
// Defensive, if it happens, there's a problem with how we're handling #eventsByContractAndEventSelector
|
|
87
|
+
if (!eventBuffer) {
|
|
88
|
+
this.logger.verbose(`EventId ${eventId} does not exist in main index but it is referenced from contract event selector index`);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const storedPrivateEvent = StoredPrivateEvent.fromBuffer(eventBuffer);
|
|
92
|
+
// Filter by block range
|
|
93
|
+
if (storedPrivateEvent.l2BlockNumber < filter.fromBlock || storedPrivateEvent.l2BlockNumber >= filter.toBlock) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
// Filter by scopes
|
|
97
|
+
if (storedPrivateEvent.scopes.intersection(targetScopes).size === 0) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
// Filter by txHash
|
|
101
|
+
if (filter.txHash && !storedPrivateEvent.txHash.equals(filter.txHash)) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
events.push({
|
|
105
|
+
l2BlockNumber: storedPrivateEvent.l2BlockNumber,
|
|
106
|
+
txIndexInBlock: storedPrivateEvent.txIndexInBlock,
|
|
107
|
+
eventIndexInTx: storedPrivateEvent.eventIndexInTx,
|
|
108
|
+
event: {
|
|
109
|
+
packedEvent: storedPrivateEvent.msgContent,
|
|
110
|
+
l2BlockNumber: BlockNumber(storedPrivateEvent.l2BlockNumber),
|
|
111
|
+
txHash: storedPrivateEvent.txHash,
|
|
112
|
+
l2BlockHash: storedPrivateEvent.l2BlockHash,
|
|
113
|
+
eventSelector
|
|
114
|
+
}
|
|
115
|
+
});
|
|
93
116
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
event: {
|
|
99
|
-
packedEvent: storedPrivateEvent.msgContent,
|
|
100
|
-
l2BlockNumber: BlockNumber(storedPrivateEvent.l2BlockNumber),
|
|
101
|
-
txHash: storedPrivateEvent.txHash,
|
|
102
|
-
l2BlockHash: storedPrivateEvent.l2BlockHash,
|
|
103
|
-
eventSelector
|
|
117
|
+
// Sort by block number, then by tx index within block, then by event index within tx
|
|
118
|
+
events.sort((a, b)=>{
|
|
119
|
+
if (a.l2BlockNumber !== b.l2BlockNumber) {
|
|
120
|
+
return a.l2BlockNumber - b.l2BlockNumber;
|
|
104
121
|
}
|
|
122
|
+
if (a.txIndexInBlock !== b.txIndexInBlock) {
|
|
123
|
+
return a.txIndexInBlock - b.txIndexInBlock;
|
|
124
|
+
}
|
|
125
|
+
return a.eventIndexInTx - b.eventIndexInTx;
|
|
105
126
|
});
|
|
106
|
-
|
|
107
|
-
// Sort by block number, then by tx index within block, then by event index within tx
|
|
108
|
-
events.sort((a, b)=>{
|
|
109
|
-
if (a.l2BlockNumber !== b.l2BlockNumber) {
|
|
110
|
-
return a.l2BlockNumber - b.l2BlockNumber;
|
|
111
|
-
}
|
|
112
|
-
if (a.txIndexInBlock !== b.txIndexInBlock) {
|
|
113
|
-
return a.txIndexInBlock - b.txIndexInBlock;
|
|
114
|
-
}
|
|
115
|
-
return a.eventIndexInTx - b.eventIndexInTx;
|
|
127
|
+
return events.map((ev)=>ev.event);
|
|
116
128
|
});
|
|
117
|
-
return events.map((ev)=>ev.event);
|
|
118
129
|
}
|
|
119
130
|
/**
|
|
120
131
|
* Rolls back private events that were stored after a given `blockNumber` and up to `synchedBlockNumber` (the block
|
|
@@ -133,21 +144,34 @@ import { StoredPrivateEvent } from './stored_private_event.js';
|
|
|
133
144
|
*
|
|
134
145
|
* IMPORTANT: This method must be called within a transaction to ensure atomicity.
|
|
135
146
|
*/ async rollback(blockNumber, synchedBlockNumber) {
|
|
136
|
-
|
|
147
|
+
// First pass: collect all event IDs for all blocks, starting reads during iteration to keep tx alive.
|
|
148
|
+
const eventsByBlock = new Map();
|
|
137
149
|
for(let block = blockNumber + 1; block <= synchedBlockNumber; block++){
|
|
138
|
-
const
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
+
const blockEvents = [];
|
|
151
|
+
for await (const eventId of this.#eventsByBlockNumber.getValuesAsync(block)){
|
|
152
|
+
// Start read immediately during iteration to keep IndexedDB transaction alive
|
|
153
|
+
blockEvents.push({
|
|
154
|
+
eventId,
|
|
155
|
+
eventReadPromise: this.#events.getAsync(eventId)
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
if (blockEvents.length > 0) {
|
|
159
|
+
eventsByBlock.set(block, blockEvents);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Second pass: await reads and perform deletes
|
|
163
|
+
let removedCount = 0;
|
|
164
|
+
for (const [block, events] of eventsByBlock){
|
|
165
|
+
await this.#eventsByBlockNumber.delete(block);
|
|
166
|
+
for (const { eventId, eventReadPromise } of events){
|
|
167
|
+
const buffer = await eventReadPromise;
|
|
168
|
+
if (!buffer) {
|
|
169
|
+
throw new Error(`Event not found for eventId ${eventId}`);
|
|
150
170
|
}
|
|
171
|
+
const entry = StoredPrivateEvent.fromBuffer(buffer);
|
|
172
|
+
await this.#events.delete(eventId);
|
|
173
|
+
await this.#eventsByContractAndEventSelector.deleteValue(this.#keyFor(entry.contractAddress, entry.eventSelector), eventId);
|
|
174
|
+
removedCount++;
|
|
151
175
|
}
|
|
152
176
|
}
|
|
153
177
|
this.logger.verbose(`Rolled back ${removedCount} private events after block ${blockNumber}`);
|
|
@@ -161,39 +185,40 @@ import { StoredPrivateEvent } from './stored_private_event.js';
|
|
|
161
185
|
* (and using one would throw on IndexedDB as it does not support nested txs).
|
|
162
186
|
*
|
|
163
187
|
* @param jobId - The jobId identifying which staged data to commit
|
|
164
|
-
*/ commit(jobId) {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
}
|
|
188
|
+
*/ async commit(jobId) {
|
|
189
|
+
// Note: Don't use #withJobLock here - commit runs within JobCoordinator's transactionAsync,
|
|
190
|
+
// and awaiting the lock would create a microtask boundary with no pending DB request,
|
|
191
|
+
// causing IndexedDB to auto-commit the transaction.
|
|
192
|
+
for (const [eventId, entry] of this.#getEventsForJob(jobId).entries()){
|
|
193
|
+
const lookupKey = this.#keyFor(entry.contractAddress, entry.eventSelector);
|
|
194
|
+
this.logger.verbose('storing private event log', {
|
|
195
|
+
eventId,
|
|
196
|
+
lookupKey
|
|
197
|
+
});
|
|
198
|
+
await Promise.all([
|
|
199
|
+
this.#events.set(eventId, entry.toBuffer()),
|
|
200
|
+
this.#eventsByContractAndEventSelector.set(lookupKey, eventId),
|
|
201
|
+
this.#eventsByBlockNumber.set(entry.l2BlockNumber, eventId)
|
|
202
|
+
]);
|
|
203
|
+
}
|
|
204
|
+
this.#clearJobData(jobId);
|
|
180
205
|
}
|
|
181
206
|
/**
|
|
182
207
|
* Discards in memory job data without persisting it.
|
|
183
208
|
*/ discardStaged(jobId) {
|
|
184
|
-
|
|
209
|
+
this.#clearJobData(jobId);
|
|
210
|
+
return Promise.resolve();
|
|
185
211
|
}
|
|
186
212
|
/**
|
|
187
213
|
* Reads an event from in-memory job data first, falling back to persistent storage if not found.
|
|
188
214
|
*
|
|
189
215
|
* Returns undefined if the event does not exist in the store overall.
|
|
190
216
|
*/ async #readEvent(eventId, jobId) {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
return eventForJob;
|
|
194
|
-
}
|
|
217
|
+
// Always issue DB read to keep IndexedDB transaction alive (they auto-commit when a new micro-task starts and there
|
|
218
|
+
// are no pending read requests). The staged value still takes precedence if it exists.
|
|
195
219
|
const buffer = await this.#events.getAsync(eventId);
|
|
196
|
-
|
|
220
|
+
const eventForJob = this.#getEventsForJob(jobId).get(eventId);
|
|
221
|
+
return eventForJob ?? (buffer ? StoredPrivateEvent.fromBuffer(buffer) : undefined);
|
|
197
222
|
}
|
|
198
223
|
/**
|
|
199
224
|
* Writes an event to in-memory job data.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ExtendedDirectionalAppTaggingSecret } from '@aztec/stdlib/logs';
|
|
3
3
|
import type { StagedStore } from '../../job_coordinator/job_coordinator.js';
|
|
4
4
|
/**
|
|
5
5
|
* Data provider of tagging data used when syncing the logs as a recipient. The sender counterpart of this class
|
|
@@ -20,9 +20,9 @@ export declare class RecipientTaggingStore implements StagedStore {
|
|
|
20
20
|
*/
|
|
21
21
|
commit(jobId: string): Promise<void>;
|
|
22
22
|
discardStaged(jobId: string): Promise<void>;
|
|
23
|
-
getHighestAgedIndex(secret:
|
|
24
|
-
updateHighestAgedIndex(secret:
|
|
25
|
-
getHighestFinalizedIndex(secret:
|
|
26
|
-
updateHighestFinalizedIndex(secret:
|
|
23
|
+
getHighestAgedIndex(secret: ExtendedDirectionalAppTaggingSecret, jobId: string): Promise<number | undefined>;
|
|
24
|
+
updateHighestAgedIndex(secret: ExtendedDirectionalAppTaggingSecret, index: number, jobId: string): Promise<void>;
|
|
25
|
+
getHighestFinalizedIndex(secret: ExtendedDirectionalAppTaggingSecret, jobId: string): Promise<number | undefined>;
|
|
26
|
+
updateHighestFinalizedIndex(secret: ExtendedDirectionalAppTaggingSecret, index: number, jobId: string): Promise<void>;
|
|
27
27
|
}
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50X3RhZ2dpbmdfc3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdG9yYWdlL3RhZ2dpbmdfc3RvcmUvcmVjaXBpZW50X3RhZ2dpbmdfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQWlCLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxLQUFLLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5RSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU1RTs7Ozs7OztHQU9HO0FBQ0gscUJBQWEscUJBQXNCLFlBQVcsV0FBVzs7SUFDdkQsU0FBUyxFQUFFLE1BQU0sQ0FBdUI7SUFheEMsWUFBWSxLQUFLLEVBQUUsaUJBQWlCLEVBUW5DO0lBNENEOzs7O09BSUc7SUFDRyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBZ0J6QztJQUVELGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FJMUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsbUNBQW1DLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUUzRztJQUVELHNCQUFzQixDQUFDLE1BQU0sRUFBRSxtQ0FBbUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQVMvRztJQUVELHdCQUF3QixDQUFDLE1BQU0sRUFBRSxtQ0FBbUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBRWhIO0lBRUQsMkJBQTJCLENBQ3pCLE1BQU0sRUFBRSxtQ0FBbUMsRUFDM0MsS0FBSyxFQUFFLE1BQU0sRUFDYixLQUFLLEVBQUUsTUFBTSxHQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FVZjtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipient_tagging_store.d.ts","sourceRoot":"","sources":["../../../src/storage/tagging_store/recipient_tagging_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"recipient_tagging_store.d.ts","sourceRoot":"","sources":["../../../src/storage/tagging_store/recipient_tagging_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAE5E;;;;;;;GAOG;AACH,qBAAa,qBAAsB,YAAW,WAAW;;IACvD,SAAS,EAAE,MAAM,CAAuB;IAaxC,YAAY,KAAK,EAAE,iBAAiB,EAQnC;IA4CD;;;;OAIG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBzC;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1C;IAED,mBAAmB,CAAC,MAAM,EAAE,mCAAmC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE3G;IAED,sBAAsB,CAAC,MAAM,EAAE,mCAAmC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS/G;IAED,wBAAwB,CAAC,MAAM,EAAE,mCAAmC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEhH;IAED,2BAA2B,CACzB,MAAM,EAAE,mCAAmC,EAC3C,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAUf;CACF"}
|
|
@@ -30,7 +30,11 @@
|
|
|
30
30
|
return highestAgedIndexForJob;
|
|
31
31
|
}
|
|
32
32
|
async #readHighestAgedIndex(jobId, secret) {
|
|
33
|
-
|
|
33
|
+
// Always issue DB read to keep IndexedDB transaction alive (they auto-commit when a new micro-task starts and there
|
|
34
|
+
// are no pending read requests). The staged value still takes precedence if it exists.
|
|
35
|
+
const dbValue = await this.#highestAgedIndex.getAsync(secret);
|
|
36
|
+
const staged = this.#getHighestAgedIndexForJob(jobId).get(secret);
|
|
37
|
+
return staged ?? dbValue;
|
|
34
38
|
}
|
|
35
39
|
#writeHighestAgedIndex(jobId, secret, index) {
|
|
36
40
|
this.#getHighestAgedIndexForJob(jobId).set(secret, index);
|
|
@@ -44,7 +48,11 @@
|
|
|
44
48
|
return jobStagedHighestFinalizedIndex;
|
|
45
49
|
}
|
|
46
50
|
async #readHighestFinalizedIndex(jobId, secret) {
|
|
47
|
-
|
|
51
|
+
// Always issue DB read to keep IndexedDB transaction alive (they auto-commit when a new micro-task starts and there
|
|
52
|
+
// are no pending read requests). The staged value still takes precedence if it exists.
|
|
53
|
+
const dbValue = await this.#highestFinalizedIndex.getAsync(secret);
|
|
54
|
+
const staged = this.#getHighestFinalizedIndexForJob(jobId).get(secret);
|
|
55
|
+
return staged ?? dbValue;
|
|
48
56
|
}
|
|
49
57
|
#writeHighestFinalizedIndex(jobId, secret, index) {
|
|
50
58
|
this.#getHighestFinalizedIndexForJob(jobId).set(secret, index);
|
|
@@ -74,26 +82,30 @@
|
|
|
74
82
|
return Promise.resolve();
|
|
75
83
|
}
|
|
76
84
|
getHighestAgedIndex(secret, jobId) {
|
|
77
|
-
return this.#readHighestAgedIndex(jobId, secret.toString());
|
|
85
|
+
return this.#store.transactionAsync(()=>this.#readHighestAgedIndex(jobId, secret.toString()));
|
|
78
86
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
87
|
+
updateHighestAgedIndex(secret, index, jobId) {
|
|
88
|
+
return this.#store.transactionAsync(async ()=>{
|
|
89
|
+
const currentIndex = await this.#readHighestAgedIndex(jobId, secret.toString());
|
|
90
|
+
if (currentIndex !== undefined && index <= currentIndex) {
|
|
91
|
+
// Log sync should never set a lower highest aged index.
|
|
92
|
+
throw new Error(`New highest aged index (${index}) must be higher than the current one (${currentIndex})`);
|
|
93
|
+
}
|
|
94
|
+
this.#writeHighestAgedIndex(jobId, secret.toString(), index);
|
|
95
|
+
});
|
|
86
96
|
}
|
|
87
97
|
getHighestFinalizedIndex(secret, jobId) {
|
|
88
|
-
return this.#readHighestFinalizedIndex(jobId, secret.toString());
|
|
98
|
+
return this.#store.transactionAsync(()=>this.#readHighestFinalizedIndex(jobId, secret.toString()));
|
|
89
99
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
100
|
+
updateHighestFinalizedIndex(secret, index, jobId) {
|
|
101
|
+
return this.#store.transactionAsync(async ()=>{
|
|
102
|
+
const currentIndex = await this.#readHighestFinalizedIndex(jobId, secret.toString());
|
|
103
|
+
if (currentIndex !== undefined && index < currentIndex) {
|
|
104
|
+
// Log sync should never set a lower highest finalized index but it can happen that it would try to set the same
|
|
105
|
+
// one because we are loading logs from highest aged index + 1 and not from the highest finalized index.
|
|
106
|
+
throw new Error(`New highest finalized index (${index}) must be higher than the current one (${currentIndex})`);
|
|
107
|
+
}
|
|
108
|
+
this.#writeHighestFinalizedIndex(jobId, secret.toString(), index);
|
|
109
|
+
});
|
|
98
110
|
}
|
|
99
111
|
}
|
|
@@ -11,4 +11,4 @@ export declare class SenderAddressBookStore {
|
|
|
11
11
|
getSenders(): Promise<AztecAddress[]>;
|
|
12
12
|
removeSender(address: AztecAddress): Promise<boolean>;
|
|
13
13
|
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZGVyX2FkZHJlc3NfYm9va19zdG9yZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0b3JhZ2UvdGFnZ2luZ19zdG9yZS9zZW5kZXJfYWRkcmVzc19ib29rX3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFpQixNQUFNLGlCQUFpQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUzRDs7O0dBR0c7QUFDSCxxQkFBYSxzQkFBc0I7O0lBSWpDLFlBQVksS0FBSyxFQUFFLGlCQUFpQixFQUluQztJQUVELFNBQVMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FVakQ7SUFFRCxVQUFVLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBSXBDO0lBRUQsWUFBWSxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQVVwRDtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sender_address_book_store.d.ts","sourceRoot":"","sources":["../../../src/storage/tagging_store/sender_address_book_store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D;;;GAGG;AACH,qBAAa,sBAAsB;;IAIjC,YAAY,KAAK,EAAE,iBAAiB,EAInC;
|
|
1
|
+
{"version":3,"file":"sender_address_book_store.d.ts","sourceRoot":"","sources":["../../../src/storage/tagging_store/sender_address_book_store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D;;;GAGG;AACH,qBAAa,sBAAsB;;IAIjC,YAAY,KAAK,EAAE,iBAAiB,EAInC;IAED,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAUjD;IAED,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAIpC;IAED,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAUpD;CACF"}
|
|
@@ -10,21 +10,27 @@ import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
|
10
10
|
this.#store = store;
|
|
11
11
|
this.#addressBook = this.#store.openMap('address_book');
|
|
12
12
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
addSender(address) {
|
|
14
|
+
return this.#store.transactionAsync(async ()=>{
|
|
15
|
+
if (await this.#addressBook.hasAsync(address.toString())) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
await this.#addressBook.set(address.toString(), true);
|
|
19
|
+
return true;
|
|
20
|
+
});
|
|
19
21
|
}
|
|
20
|
-
|
|
21
|
-
return
|
|
22
|
+
getSenders() {
|
|
23
|
+
return this.#store.transactionAsync(async ()=>{
|
|
24
|
+
return (await toArray(this.#addressBook.keysAsync())).map(AztecAddress.fromString);
|
|
25
|
+
});
|
|
22
26
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
removeSender(address) {
|
|
28
|
+
return this.#store.transactionAsync(async ()=>{
|
|
29
|
+
if (!await this.#addressBook.hasAsync(address.toString())) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
await this.#addressBook.delete(address.toString());
|
|
33
|
+
return true;
|
|
34
|
+
});
|
|
29
35
|
}
|
|
30
36
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
2
|
-
import
|
|
3
|
-
import { TxHash } from '@aztec/stdlib/tx';
|
|
2
|
+
import { ExtendedDirectionalAppTaggingSecret, type TaggingIndexRange } from '@aztec/stdlib/logs';
|
|
3
|
+
import { TxEffect, TxHash } from '@aztec/stdlib/tx';
|
|
4
4
|
import type { StagedStore } from '../../job_coordinator/job_coordinator.js';
|
|
5
5
|
/**
|
|
6
6
|
* Data provider of tagging data used when syncing the sender tagging indexes. The recipient counterpart of this class
|
|
@@ -19,51 +19,43 @@ export declare class SenderTaggingStore implements StagedStore {
|
|
|
19
19
|
commit(jobId: string): Promise<void>;
|
|
20
20
|
discardStaged(jobId: string): Promise<void>;
|
|
21
21
|
/**
|
|
22
|
-
* Stores pending
|
|
23
|
-
* @remarks
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* @param
|
|
27
|
-
* stored in the db.
|
|
28
|
-
* @param txHash - The tx in which the
|
|
22
|
+
* Stores pending index ranges.
|
|
23
|
+
* @remarks If the same (secret, txHash) pair already exists in the db with an equal range, it's a no-op. This is
|
|
24
|
+
* expected to happen because whenever we start sync we start from the last finalized index and we can have pending
|
|
25
|
+
* ranges already stored from previous syncs. If the ranges differ, it throws an error as that indicates a bug.
|
|
26
|
+
* @param ranges - The tagging index ranges containing the directional app tagging secrets and the index ranges that are
|
|
27
|
+
* to be stored in the db.
|
|
28
|
+
* @param txHash - The tx in which the tagging indexes were used in private logs.
|
|
29
29
|
* @param jobId - job context for staged writes to this store. See `JobCoordinator` for more details.
|
|
30
|
-
* @throws If
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* @throws If the newly stored pending index is further than window length from the highest finalized index for the
|
|
34
|
-
* same secret. This is enforced in order to give a guarantee to a recipient that he doesn't need to look further than
|
|
35
|
-
* window length ahead of the highest finalized index.
|
|
36
|
-
* @throws If a secret + txHash pair already exists in the db with a different index value. It should never happen
|
|
37
|
-
* that we would attempt to store a different index for a given secret-txHash pair because we always store just the
|
|
38
|
-
* highest index for a given secret-txHash pair. Hence this is a good way to catch bugs.
|
|
39
|
-
* @throws If the newly stored pending index is lower than or equal to the last finalized index for the same secret.
|
|
40
|
-
* This is enforced because this should never happen if the syncing is done correctly as we look for logs from higher
|
|
41
|
-
* indexes than finalized ones.
|
|
30
|
+
* @throws If the highestIndex is further than window length from the highest finalized index for the same secret.
|
|
31
|
+
* @throws If the lowestIndex is lower than or equal to the last finalized index for the same secret.
|
|
32
|
+
* @throws If a different range already exists for the same (secret, txHash) pair.
|
|
42
33
|
*/
|
|
43
|
-
storePendingIndexes(
|
|
34
|
+
storePendingIndexes(ranges: TaggingIndexRange[], txHash: TxHash, jobId: string): Promise<void>;
|
|
44
35
|
/**
|
|
45
|
-
* Returns the transaction hashes of all pending transactions that contain indexes within a specified range
|
|
46
|
-
* for a given directional app tagging secret.
|
|
36
|
+
* Returns the transaction hashes of all pending transactions that contain highest indexes within a specified range
|
|
37
|
+
* for a given directional app tagging secret. We check based on the highest indexes only as that is the relevant
|
|
38
|
+
* information for the caller of this function.
|
|
47
39
|
* @param secret - The directional app tagging secret to query pending indexes for.
|
|
48
40
|
* @param startIndex - The lower bound of the index range (inclusive).
|
|
49
41
|
* @param endIndex - The upper bound of the index range (exclusive).
|
|
50
42
|
* @returns An array of unique transaction hashes for pending transactions that contain indexes in the range
|
|
51
43
|
* [startIndex, endIndex). Returns an empty array if no pending indexes exist in the range.
|
|
52
44
|
*/
|
|
53
|
-
getTxHashesOfPendingIndexes(secret:
|
|
45
|
+
getTxHashesOfPendingIndexes(secret: ExtendedDirectionalAppTaggingSecret, startIndex: number, endIndex: number, jobId: string): Promise<TxHash[]>;
|
|
54
46
|
/**
|
|
55
47
|
* Returns the last (highest) finalized index for a given secret.
|
|
56
48
|
* @param secret - The secret to get the last finalized index for.
|
|
57
49
|
* @returns The last (highest) finalized index for the given secret.
|
|
58
50
|
*/
|
|
59
|
-
getLastFinalizedIndex(secret:
|
|
51
|
+
getLastFinalizedIndex(secret: ExtendedDirectionalAppTaggingSecret, jobId: string): Promise<number | undefined>;
|
|
60
52
|
/**
|
|
61
53
|
* Returns the last used index for a given directional app tagging secret, considering both finalized and pending
|
|
62
54
|
* indexes.
|
|
63
55
|
* @param secret - The directional app tagging secret to query the last used index for.
|
|
64
56
|
* @returns The last used index.
|
|
65
57
|
*/
|
|
66
|
-
getLastUsedIndex(secret:
|
|
58
|
+
getLastUsedIndex(secret: ExtendedDirectionalAppTaggingSecret, jobId: string): Promise<number | undefined>;
|
|
67
59
|
/**
|
|
68
60
|
* Drops all pending indexes corresponding to the given transaction hashes.
|
|
69
61
|
*/
|
|
@@ -73,5 +65,14 @@ export declare class SenderTaggingStore implements StagedStore {
|
|
|
73
65
|
* indexes.
|
|
74
66
|
*/
|
|
75
67
|
finalizePendingIndexes(txHashes: TxHash[], jobId: string): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Handles finalization of pending indexes for a transaction whose execution was partially reverted.
|
|
70
|
+
* Recomputes the siloed tags for each pending index of the given tx and checks which ones appear in the
|
|
71
|
+
* TxEffect's private logs (i.e., which ones made it onchain). Those that survived are finalized; those that
|
|
72
|
+
* didn't are dropped.
|
|
73
|
+
* @param txEffect - The tx effect of the partially reverted transaction.
|
|
74
|
+
* @param jobId - job context for staged writes to this store. See `JobCoordinator` for more details.
|
|
75
|
+
*/
|
|
76
|
+
finalizePendingIndexesOfAPartiallyRevertedTx(txEffect: TxEffect, jobId: string): Promise<void>;
|
|
76
77
|
}
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZGVyX3RhZ2dpbmdfc3RvcmUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdG9yYWdlL3RhZ2dpbmdfc3RvcmUvc2VuZGVyX3RhZ2dpbmdfc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQWlCLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1DQUFtQyxFQUFhLEtBQUssaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1RyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBTTVFOzs7O0dBSUc7QUFDSCxxQkFBYSxrQkFBbUIsWUFBVyxXQUFXOztJQUNwRCxRQUFRLENBQUMsU0FBUyxvQkFBb0I7SUE0QnRDLFlBQVksS0FBSyxFQUFFLGlCQUFpQixFQVFuQztJQTRDRDs7OztPQUlHO0lBQ0csTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQW9CekM7SUFFRCxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSTFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsbUJBQW1CLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FpRTdGO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsMkJBQTJCLENBQ3pCLE1BQU0sRUFBRSxtQ0FBbUMsRUFDM0MsVUFBVSxFQUFFLE1BQU0sRUFDbEIsUUFBUSxFQUFFLE1BQU0sRUFDaEIsS0FBSyxFQUFFLE1BQU0sR0FDWixPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FRbkI7SUFFRDs7OztPQUlHO0lBQ0gscUJBQXFCLENBQUMsTUFBTSxFQUFFLG1DQUFtQyxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FFN0c7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUFDLE1BQU0sRUFBRSxtQ0FBbUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBaUJ4RztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQTJDbkU7SUE0Q0Q7OztPQUdHO0lBQ0csc0JBQXNCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQXNEN0U7SUFFRDs7Ozs7OztPQU9HO0lBQ0csNENBQTRDLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FnRG5HO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sender_tagging_store.d.ts","sourceRoot":"","sources":["../../../src/storage/tagging_store/sender_tagging_store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sender_tagging_store.d.ts","sourceRoot":"","sources":["../../../src/storage/tagging_store/sender_tagging_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAiB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,mCAAmC,EAAa,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5G,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAM5E;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,WAAW;;IACpD,QAAQ,CAAC,SAAS,oBAAoB;IA4BtC,YAAY,KAAK,EAAE,iBAAiB,EAQnC;IA4CD;;;;OAIG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBzC;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1C;IAED;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiE7F;IAED;;;;;;;;;OASG;IACH,2BAA2B,CACzB,MAAM,EAAE,mCAAmC,EAC3C,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CAQnB;IAED;;;;OAIG;IACH,qBAAqB,CAAC,MAAM,EAAE,mCAAmC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE7G;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,mCAAmC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiBxG;IAED;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CnE;IA4CD;;;OAGG;IACG,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsD7E;IAED;;;;;;;OAOG;IACG,4CAA4C,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDnG;CACF"}
|