@aztec/pxe 0.0.1-commit.96bb3f7 → 0.0.1-commit.a072138
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 +1 -1
- package/dest/block_synchronizer/block_synchronizer.d.ts +9 -5
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +66 -21
- package/dest/config/index.d.ts +3 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +17 -0
- package/dest/contract_function_simulator/benchmarked_node.d.ts +9 -0
- package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
- package/dest/contract_function_simulator/benchmarked_node.js +77 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +6 -10
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +33 -25
- package/dest/contract_function_simulator/execution_note_cache.d.ts +18 -9
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +45 -28
- package/dest/contract_function_simulator/index.d.ts +2 -2
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +1 -1
- 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/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/noir-structs/utility_context.d.ts +4 -10
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +15 -11
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +6 -6
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +8 -8
- package/dest/contract_function_simulator/oracle/oracle.d.ts +10 -8
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +44 -33
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -26
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +0 -35
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +11 -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 +22 -10
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +33 -20
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +78 -76
- package/dest/contract_sync/index.d.ts +23 -0
- package/dest/contract_sync/index.d.ts.map +1 -0
- package/dest/contract_sync/index.js +54 -0
- 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 +20 -10
- package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +12 -6
- package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +13 -7
- package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +3 -1
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +2 -0
- 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 +6 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +19 -22
- package/dest/events/private_event_filter_validator.d.ts +5 -5
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.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 -4
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +21 -16
- 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 +31 -36
- package/dest/oracle_version.d.ts +3 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +4 -3
- package/dest/private_kernel/hints/index.d.ts +2 -2
- package/dest/private_kernel/hints/index.d.ts.map +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +28 -0
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
- package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +12 -6
- 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 +3 -3
- package/dest/private_kernel/private_kernel_oracle.d.ts +23 -28
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +90 -2
- package/dest/pxe.d.ts +7 -36
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +43 -83
- 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.d.ts +24 -9
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_store.js +130 -23
- package/dest/storage/contract_store/contract_store.d.ts +1 -2
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +22 -25
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +51 -52
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +282 -263
- package/dest/storage/note_store/stored_note.d.ts +16 -0
- package/dest/storage/note_store/stored_note.d.ts.map +1 -0
- package/dest/storage/note_store/stored_note.js +43 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +43 -8
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +226 -111
- package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
- package/dest/storage/private_event_store/stored_private_event.js +56 -0
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +15 -8
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.js +88 -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 +19 -9
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +252 -100
- package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
- package/dest/tagging/get_all_logs_by_tags.js +46 -0
- package/dest/tagging/index.d.ts +2 -1
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +1 -0
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +3 -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 +6 -6
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +3 -2
- 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 +5 -2
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +3 -2
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +7 -7
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
- 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 +5 -8
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -2
- 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 +10 -5
- package/package.json +18 -18
- package/src/bin/check_oracle_version.ts +1 -0
- package/src/block_synchronizer/block_synchronizer.ts +85 -33
- package/src/config/index.ts +14 -0
- package/src/contract_function_simulator/benchmarked_node.ts +103 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +34 -28
- package/src/contract_function_simulator/execution_note_cache.ts +44 -25
- package/src/contract_function_simulator/index.ts +1 -1
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
- package/src/contract_function_simulator/oracle/interfaces.ts +20 -10
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
- package/src/contract_function_simulator/oracle/oracle.ts +65 -40
- package/src/contract_function_simulator/oracle/private_execution.ts +1 -67
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +35 -12
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +100 -82
- package/src/contract_sync/index.ts +98 -0
- package/src/debug/pxe_debug_utils.ts +26 -11
- package/src/entrypoints/client/bundle/utils.ts +7 -14
- package/src/entrypoints/client/lazy/utils.ts +8 -14
- package/src/entrypoints/pxe_creation_options.ts +2 -1
- package/src/entrypoints/server/index.ts +2 -0
- package/src/entrypoints/server/utils.ts +15 -19
- package/src/events/event_service.ts +17 -25
- package/src/events/private_event_filter_validator.ts +3 -5
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +32 -14
- package/src/notes/note_service.ts +38 -43
- package/src/oracle_version.ts +4 -3
- package/src/private_kernel/hints/index.ts +1 -1
- package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +32 -20
- package/src/private_kernel/private_kernel_execution_prover.ts +7 -4
- package/src/private_kernel/private_kernel_oracle.ts +116 -37
- package/src/pxe.ts +77 -118
- 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 +159 -23
- package/src/storage/contract_store/contract_store.ts +22 -31
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +317 -318
- package/src/storage/note_store/stored_note.ts +48 -0
- package/src/storage/private_event_store/private_event_store.ts +292 -124
- package/src/storage/private_event_store/stored_private_event.ts +73 -0
- package/src/storage/tagging_store/recipient_tagging_store.ts +106 -20
- package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
- package/src/storage/tagging_store/sender_tagging_store.ts +293 -108
- package/src/tagging/get_all_logs_by_tags.ts +68 -0
- package/src/tagging/index.ts +1 -0
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +16 -5
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +9 -6
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -17
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +16 -4
- package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
- package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
- package/dest/contract_function_simulator/proxied_node.js +0 -27
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -46
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.js +0 -85
- package/dest/public_storage/public_storage_service.d.ts +0 -24
- package/dest/public_storage/public_storage_service.d.ts.map +0 -1
- package/dest/public_storage/public_storage_service.js +0 -26
- package/dest/tree_membership/tree_membership_service.d.ts +0 -52
- package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
- package/dest/tree_membership/tree_membership_service.js +0 -84
- package/src/contract_function_simulator/proxied_node.ts +0 -33
- package/src/private_kernel/private_kernel_oracle_impl.ts +0 -127
- package/src/public_storage/public_storage_service.ts +0 -33
- package/src/tree_membership/tree_membership_service.ts +0 -112
|
@@ -157,16 +157,6 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
157
157
|
allowRemainder,
|
|
158
158
|
);
|
|
159
159
|
|
|
160
|
-
const previousVkMembershipWitness = await oracle.getVkMembershipWitness(
|
|
161
|
-
this.previousKernelOutput.verificationKey.keyAsFields,
|
|
162
|
-
);
|
|
163
|
-
const vkData = new VkData(
|
|
164
|
-
this.previousKernelOutput.verificationKey,
|
|
165
|
-
Number(previousVkMembershipWitness.leafIndex),
|
|
166
|
-
previousVkMembershipWitness.siblingPath,
|
|
167
|
-
);
|
|
168
|
-
const previousKernelData = new PrivateKernelData(this.previousKernelOutput.publicInputs, vkData);
|
|
169
|
-
|
|
170
160
|
this.reduceReadRequestActions(
|
|
171
161
|
this.noteHashResetActions,
|
|
172
162
|
dimensions.NOTE_HASH_PENDING_READ,
|
|
@@ -178,29 +168,51 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
178
168
|
dimensions.NULLIFIER_SETTLED_READ,
|
|
179
169
|
);
|
|
180
170
|
|
|
181
|
-
//
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
171
|
+
// Execute all the expensive node querying operations in parallel.
|
|
172
|
+
const [previousVkMembershipWitness, noteHashReadRequestHints, nullifierReadRequestHints, keyValidationHints] =
|
|
173
|
+
await Promise.all([
|
|
174
|
+
oracle.getVkMembershipWitness(this.previousKernelOutput.verificationKey.keyAsFields),
|
|
175
|
+
buildNoteHashReadRequestHintsFromResetActions<
|
|
176
|
+
typeof MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
|
|
177
|
+
typeof MAX_NOTE_HASH_READ_REQUESTS_PER_TX
|
|
178
|
+
>(
|
|
189
179
|
oracle,
|
|
190
180
|
this.previousKernel.validationRequests.noteHashReadRequests,
|
|
191
181
|
this.previousKernel.end.noteHashes,
|
|
192
182
|
this.noteHashResetActions,
|
|
193
183
|
),
|
|
194
|
-
|
|
184
|
+
buildNullifierReadRequestHintsFromResetActions<
|
|
185
|
+
typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX,
|
|
186
|
+
typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX
|
|
187
|
+
>(
|
|
195
188
|
{ getNullifierMembershipWitness: getNullifierMembershipWitnessResolver(oracle) },
|
|
196
189
|
this.previousKernel.validationRequests.nullifierReadRequests,
|
|
197
190
|
this.nullifierResetActions,
|
|
198
191
|
),
|
|
199
|
-
|
|
192
|
+
getMasterSecretKeysAndAppKeyGenerators(
|
|
200
193
|
this.previousKernel.validationRequests.scopedKeyValidationRequestsAndGenerators,
|
|
201
194
|
dimensions.KEY_VALIDATION,
|
|
202
195
|
oracle,
|
|
203
196
|
),
|
|
197
|
+
]);
|
|
198
|
+
|
|
199
|
+
const vkData = new VkData(
|
|
200
|
+
this.previousKernelOutput.verificationKey,
|
|
201
|
+
Number(previousVkMembershipWitness.leafIndex),
|
|
202
|
+
previousVkMembershipWitness.siblingPath,
|
|
203
|
+
);
|
|
204
|
+
const previousKernelData = new PrivateKernelData(this.previousKernelOutput.publicInputs, vkData);
|
|
205
|
+
|
|
206
|
+
// TODO: Enable padding when we have a better idea what are the final amounts we should pad to.
|
|
207
|
+
const paddedSideEffects = PaddedSideEffects.empty();
|
|
208
|
+
|
|
209
|
+
return new PrivateKernelResetCircuitPrivateInputs(
|
|
210
|
+
previousKernelData,
|
|
211
|
+
paddedSideEffects,
|
|
212
|
+
new PrivateKernelResetHints(
|
|
213
|
+
noteHashReadRequestHints,
|
|
214
|
+
nullifierReadRequestHints,
|
|
215
|
+
keyValidationHints,
|
|
204
216
|
this.transientDataSquashingHints,
|
|
205
217
|
),
|
|
206
218
|
dimensions,
|
|
@@ -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';
|
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
} from '@aztec/stdlib/tx';
|
|
34
34
|
import { VerificationKeyAsFields, VerificationKeyData, VkData } from '@aztec/stdlib/vks';
|
|
35
35
|
|
|
36
|
-
import { PrivateKernelResetPrivateInputsBuilder } from './hints/
|
|
36
|
+
import { PrivateKernelResetPrivateInputsBuilder } from './hints/private_kernel_reset_private_inputs_builder.js';
|
|
37
37
|
import type { PrivateKernelOracle } from './private_kernel_oracle.js';
|
|
38
38
|
|
|
39
39
|
const NULL_SIMULATE_OUTPUT: PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs> = {
|
|
@@ -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.
|
|
@@ -1,73 +1,152 @@
|
|
|
1
|
-
import { FUNCTION_TREE_HEIGHT, NOTE_HASH_TREE_HEIGHT, VK_TREE_HEIGHT } from '@aztec/constants';
|
|
1
|
+
import { FUNCTION_TREE_HEIGHT, NOTE_HASH_TREE_HEIGHT, PUBLIC_DATA_TREE_HEIGHT, VK_TREE_HEIGHT } from '@aztec/constants';
|
|
2
2
|
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
3
|
import type { GrumpkinScalar, Point } from '@aztec/foundation/curves/grumpkin';
|
|
4
4
|
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
5
|
+
import type { KeyStore } from '@aztec/key-store';
|
|
6
|
+
import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
7
|
+
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
5
8
|
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
6
9
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
10
|
+
import { BlockHash } from '@aztec/stdlib/block';
|
|
11
|
+
import {
|
|
12
|
+
type ContractInstanceWithAddress,
|
|
13
|
+
computeContractClassIdPreimage,
|
|
14
|
+
computeSaltedInitializationHash,
|
|
15
|
+
} from '@aztec/stdlib/contract';
|
|
16
|
+
import { DelayedPublicMutableValues, DelayedPublicMutableValuesWithHash } from '@aztec/stdlib/delayed-public-mutable';
|
|
17
|
+
import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
|
|
18
|
+
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
7
19
|
import { UpdatedClassIdHints } from '@aztec/stdlib/kernel';
|
|
8
|
-
import type { PublicKeys } from '@aztec/stdlib/keys';
|
|
9
20
|
import type { NullifierMembershipWitness } from '@aztec/stdlib/trees';
|
|
10
21
|
import type { VerificationKeyAsFields } from '@aztec/stdlib/vks';
|
|
11
22
|
|
|
23
|
+
import type { ContractStore } from '../storage/contract_store/contract_store.js';
|
|
24
|
+
|
|
12
25
|
/**
|
|
13
26
|
* Provides functionality needed by the private kernel for interacting with our state trees.
|
|
14
|
-
* This is either PrivateKernelOracleImpl, or a mocked test implementation.
|
|
15
27
|
*/
|
|
16
|
-
export
|
|
28
|
+
export class PrivateKernelOracle {
|
|
29
|
+
constructor(
|
|
30
|
+
private contractStore: ContractStore,
|
|
31
|
+
private keyStore: KeyStore,
|
|
32
|
+
private node: AztecNode,
|
|
33
|
+
private blockHash: BlockHash,
|
|
34
|
+
) {}
|
|
35
|
+
|
|
17
36
|
/** Retrieves the preimage of a contract address from the registered contract instances db. */
|
|
18
|
-
getContractAddressPreimage(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
37
|
+
public async getContractAddressPreimage(
|
|
38
|
+
address: AztecAddress,
|
|
39
|
+
): Promise<ContractInstanceWithAddress & { saltedInitializationHash: Fr }> {
|
|
40
|
+
const instance = await this.contractStore.getContractInstance(address);
|
|
41
|
+
if (!instance) {
|
|
42
|
+
throw new Error(`Contract instance not found when getting address preimage. Contract address: ${address}.`);
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
saltedInitializationHash: await computeSaltedInitializationHash(instance),
|
|
46
|
+
...instance,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
24
49
|
|
|
25
50
|
/** Retrieves the preimage of a contract class id from the contract classes db. */
|
|
26
|
-
getContractClassIdPreimage(
|
|
27
|
-
contractClassId
|
|
28
|
-
|
|
51
|
+
public async getContractClassIdPreimage(contractClassId: Fr) {
|
|
52
|
+
const contractClass = await this.contractStore.getContractClass(contractClassId);
|
|
53
|
+
if (!contractClass) {
|
|
54
|
+
throw new Error(`Contract class not found when getting class id preimage. Class id: ${contractClassId}.`);
|
|
55
|
+
}
|
|
56
|
+
return computeContractClassIdPreimage(contractClass);
|
|
57
|
+
}
|
|
29
58
|
|
|
30
|
-
/**
|
|
31
|
-
|
|
32
|
-
*/
|
|
33
|
-
getFunctionMembershipWitness(
|
|
59
|
+
/** Returns a membership witness with the sibling path and leaf index in our private functions tree. */
|
|
60
|
+
public async getFunctionMembershipWitness(
|
|
34
61
|
contractClassId: Fr,
|
|
35
62
|
selector: FunctionSelector,
|
|
36
|
-
): Promise<MembershipWitness<typeof FUNCTION_TREE_HEIGHT
|
|
63
|
+
): Promise<MembershipWitness<typeof FUNCTION_TREE_HEIGHT>> {
|
|
64
|
+
const membershipWitness = await this.contractStore.getFunctionMembershipWitness(contractClassId, selector);
|
|
65
|
+
if (!membershipWitness) {
|
|
66
|
+
throw new Error(
|
|
67
|
+
`Membership witness not found for contract class id ${contractClassId} and selector ${selector}.`,
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
return membershipWitness;
|
|
71
|
+
}
|
|
37
72
|
|
|
38
73
|
/**
|
|
39
74
|
* Returns a membership witness with the sibling path and leaf index in our protocol VK indexed merkle tree.
|
|
40
75
|
* Used to validate the previous kernel's verification key.
|
|
41
76
|
*/
|
|
42
|
-
getVkMembershipWitness(vk: VerificationKeyAsFields): Promise<MembershipWitness<typeof VK_TREE_HEIGHT
|
|
77
|
+
public getVkMembershipWitness(vk: VerificationKeyAsFields): Promise<MembershipWitness<typeof VK_TREE_HEIGHT>> {
|
|
78
|
+
const leafIndex = getVKIndex(vk);
|
|
79
|
+
return Promise.resolve(new MembershipWitness(VK_TREE_HEIGHT, BigInt(leafIndex), getVKSiblingPath(leafIndex)));
|
|
80
|
+
}
|
|
43
81
|
|
|
44
|
-
/**
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
82
|
+
/** Returns a membership witness with the sibling path and leaf index in our note hash tree. */
|
|
83
|
+
getNoteHashMembershipWitness(noteHash: Fr): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined> {
|
|
84
|
+
return this.node.getNoteHashMembershipWitness(this.blockHash, noteHash);
|
|
85
|
+
}
|
|
48
86
|
|
|
49
|
-
/**
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
87
|
+
/** Returns a membership witness with the sibling path and leaf index in our nullifier indexed merkle tree. */
|
|
88
|
+
getNullifierMembershipWitness(nullifier: Fr): Promise<NullifierMembershipWitness | undefined> {
|
|
89
|
+
return this.node.getNullifierMembershipWitness(this.blockHash, nullifier);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** Returns the root of our note hash merkle tree. */
|
|
93
|
+
async getNoteHashTreeRoot(): Promise<Fr> {
|
|
94
|
+
const header = await this.node.getBlockHeader(this.blockHash);
|
|
95
|
+
if (!header) {
|
|
96
|
+
throw new Error(`No block header found for block hash ${this.blockHash}`);
|
|
97
|
+
}
|
|
98
|
+
return header.state.partial.noteHashTree.root;
|
|
99
|
+
}
|
|
57
100
|
|
|
58
101
|
/**
|
|
59
102
|
* Retrieves the sk_m corresponding to the pk_m.
|
|
60
103
|
* @throws If the provided public key is not associated with any of the registered accounts.
|
|
61
|
-
* @param
|
|
104
|
+
* @param masterPublicKey - The master public key to get secret key for.
|
|
62
105
|
* @returns A Promise that resolves to sk_m.
|
|
63
106
|
* @dev Used when feeding the sk_m to the kernel circuit for keys verification.
|
|
64
107
|
*/
|
|
65
|
-
getMasterSecretKey(masterPublicKey: Point): Promise<GrumpkinScalar
|
|
108
|
+
public getMasterSecretKey(masterPublicKey: Point): Promise<GrumpkinScalar> {
|
|
109
|
+
return this.keyStore.getMasterSecretKey(masterPublicKey);
|
|
110
|
+
}
|
|
66
111
|
|
|
67
112
|
/** Use debug data to get the function name corresponding to a selector. */
|
|
68
|
-
getDebugFunctionName(contractAddress: AztecAddress, selector: FunctionSelector): Promise<string | undefined
|
|
113
|
+
public getDebugFunctionName(contractAddress: AztecAddress, selector: FunctionSelector): Promise<string | undefined> {
|
|
114
|
+
return this.contractStore.getDebugFunctionName(contractAddress, selector);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Returns a membership witness and leaf index to our public data indexed merkle tree,
|
|
119
|
+
* along with an associated DelayedPublicMutable containing the class ID to update.
|
|
120
|
+
*/
|
|
121
|
+
public async getUpdatedClassIdHints(contractAddress: AztecAddress): Promise<UpdatedClassIdHints> {
|
|
122
|
+
const { delayedPublicMutableSlot, delayedPublicMutableHashSlot } =
|
|
123
|
+
await DelayedPublicMutableValuesWithHash.getContractUpdateSlots(contractAddress);
|
|
124
|
+
|
|
125
|
+
const hashLeafSlot = await computePublicDataTreeLeafSlot(
|
|
126
|
+
ProtocolContractAddress.ContractInstanceRegistry,
|
|
127
|
+
delayedPublicMutableHashSlot,
|
|
128
|
+
);
|
|
129
|
+
const updatedClassIdWitness = await this.node.getPublicDataWitness(this.blockHash, hashLeafSlot);
|
|
130
|
+
|
|
131
|
+
if (!updatedClassIdWitness) {
|
|
132
|
+
throw new Error(`No public data tree witness found for ${hashLeafSlot}`);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const readStorage = (storageSlot: Fr) =>
|
|
136
|
+
this.node.getPublicStorageAt(this.blockHash, ProtocolContractAddress.ContractInstanceRegistry, storageSlot);
|
|
137
|
+
const delayedPublicMutableValues = await DelayedPublicMutableValues.readFromTree(
|
|
138
|
+
delayedPublicMutableSlot,
|
|
139
|
+
readStorage,
|
|
140
|
+
);
|
|
69
141
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
142
|
+
return new UpdatedClassIdHints(
|
|
143
|
+
new MembershipWitness(
|
|
144
|
+
PUBLIC_DATA_TREE_HEIGHT,
|
|
145
|
+
updatedClassIdWitness.index,
|
|
146
|
+
updatedClassIdWitness.siblingPath.toTuple(),
|
|
147
|
+
),
|
|
148
|
+
updatedClassIdWitness.leafPreimage,
|
|
149
|
+
delayedPublicMutableValues,
|
|
150
|
+
);
|
|
151
|
+
}
|
|
73
152
|
}
|
package/src/pxe.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { PrivateEventFilter } from '@aztec/aztec.js/wallet';
|
|
2
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
|
-
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
4
5
|
import { SerialQueue } from '@aztec/foundation/queue';
|
|
5
6
|
import { Timer } from '@aztec/foundation/timer';
|
|
6
7
|
import { KeyStore } from '@aztec/key-store';
|
|
@@ -19,14 +20,12 @@ import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
|
19
20
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
20
21
|
import {
|
|
21
22
|
CompleteAddress,
|
|
22
|
-
type ContractClassWithId,
|
|
23
23
|
type ContractInstanceWithAddress,
|
|
24
24
|
type PartialAddress,
|
|
25
25
|
computeContractAddressFromInstance,
|
|
26
26
|
getContractClassFromArtifact,
|
|
27
27
|
} from '@aztec/stdlib/contract';
|
|
28
28
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
29
|
-
import { computeProtocolNullifier, siloNullifier } from '@aztec/stdlib/hash';
|
|
30
29
|
import type { AztecNode, PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
|
|
31
30
|
import type {
|
|
32
31
|
PrivateExecutionStep,
|
|
@@ -54,13 +53,13 @@ import { inspect } from 'util';
|
|
|
54
53
|
|
|
55
54
|
import { BlockSynchronizer } from './block_synchronizer/index.js';
|
|
56
55
|
import type { PXEConfig } from './config/index.js';
|
|
56
|
+
import { BenchmarkedNodeFactory } from './contract_function_simulator/benchmarked_node.js';
|
|
57
57
|
import {
|
|
58
58
|
ContractFunctionSimulator,
|
|
59
59
|
generateSimulatedProvingResult,
|
|
60
60
|
} from './contract_function_simulator/contract_function_simulator.js';
|
|
61
|
-
import { readCurrentClassId } from './contract_function_simulator/oracle/private_execution.js';
|
|
62
61
|
import { ProxiedContractStoreFactory } from './contract_function_simulator/proxied_contract_data_source.js';
|
|
63
|
-
import {
|
|
62
|
+
import { ensureContractSynced, readCurrentClassId } from './contract_sync/index.js';
|
|
64
63
|
import { PXEDebugUtils } from './debug/pxe_debug_utils.js';
|
|
65
64
|
import { enrichPublicSimulationError, enrichSimulationError } from './error_enriching.js';
|
|
66
65
|
import { PrivateEventFilterValidator } from './events/private_event_filter_validator.js';
|
|
@@ -69,7 +68,7 @@ import {
|
|
|
69
68
|
PrivateKernelExecutionProver,
|
|
70
69
|
type PrivateKernelExecutionProverConfig,
|
|
71
70
|
} from './private_kernel/private_kernel_execution_prover.js';
|
|
72
|
-
import {
|
|
71
|
+
import { PrivateKernelOracle } from './private_kernel/private_kernel_oracle.js';
|
|
73
72
|
import { AddressStore } from './storage/address_store/address_store.js';
|
|
74
73
|
import { AnchorBlockStore } from './storage/anchor_block_store/anchor_block_store.js';
|
|
75
74
|
import { CapsuleStore } from './storage/capsule_store/capsule_store.js';
|
|
@@ -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`)
|
|
@@ -138,7 +141,7 @@ export class PXE {
|
|
|
138
141
|
const addressStore = new AddressStore(store);
|
|
139
142
|
const privateEventStore = new PrivateEventStore(store);
|
|
140
143
|
const contractStore = new ContractStore(store);
|
|
141
|
-
const noteStore =
|
|
144
|
+
const noteStore = new NoteStore(store);
|
|
142
145
|
const anchorBlockStore = new AnchorBlockStore(store);
|
|
143
146
|
const senderTaggingStore = new SenderTaggingStore(store);
|
|
144
147
|
const senderAddressBookStore = new SenderAddressBookStore(store);
|
|
@@ -148,17 +151,25 @@ export class PXE {
|
|
|
148
151
|
const tipsStore = new L2TipsKVStore(store, 'pxe');
|
|
149
152
|
const synchronizer = new BlockSynchronizer(
|
|
150
153
|
node,
|
|
154
|
+
store,
|
|
151
155
|
anchorBlockStore,
|
|
152
156
|
noteStore,
|
|
153
157
|
privateEventStore,
|
|
154
158
|
tipsStore,
|
|
155
159
|
config,
|
|
156
|
-
|
|
160
|
+
bindings,
|
|
157
161
|
);
|
|
158
162
|
|
|
159
|
-
const jobCoordinator = new JobCoordinator(store);
|
|
163
|
+
const jobCoordinator = new JobCoordinator(store, bindings);
|
|
164
|
+
jobCoordinator.registerStores([
|
|
165
|
+
capsuleStore,
|
|
166
|
+
senderTaggingStore,
|
|
167
|
+
recipientTaggingStore,
|
|
168
|
+
privateEventStore,
|
|
169
|
+
noteStore,
|
|
170
|
+
]);
|
|
160
171
|
|
|
161
|
-
const debugUtils = new PXEDebugUtils(contractStore, noteStore);
|
|
172
|
+
const debugUtils = new PXEDebugUtils(contractStore, noteStore, synchronizer, anchorBlockStore);
|
|
162
173
|
|
|
163
174
|
const jobQueue = new SerialQueue();
|
|
164
175
|
|
|
@@ -185,7 +196,7 @@ export class PXE {
|
|
|
185
196
|
debugUtils,
|
|
186
197
|
);
|
|
187
198
|
|
|
188
|
-
debugUtils.setPXE(pxe);
|
|
199
|
+
debugUtils.setPXE(pxe, pxe.#putInJobQueue.bind(pxe));
|
|
189
200
|
|
|
190
201
|
pxe.jobQueue.start();
|
|
191
202
|
|
|
@@ -205,8 +216,7 @@ export class PXE {
|
|
|
205
216
|
this.noteStore,
|
|
206
217
|
this.keyStore,
|
|
207
218
|
this.addressStore,
|
|
208
|
-
|
|
209
|
-
this.anchorBlockStore,
|
|
219
|
+
BenchmarkedNodeFactory.create(this.node),
|
|
210
220
|
this.senderTaggingStore,
|
|
211
221
|
this.recipientTaggingStore,
|
|
212
222
|
this.senderAddressBookStore,
|
|
@@ -274,19 +284,6 @@ export class PXE {
|
|
|
274
284
|
this.log.verbose(`Registered protocol contracts in pxe`, registered);
|
|
275
285
|
}
|
|
276
286
|
|
|
277
|
-
async #isContractClassPubliclyRegistered(id: Fr): Promise<boolean> {
|
|
278
|
-
return !!(await this.node.getContractClass(id));
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
async #isContractPublished(address: AztecAddress): Promise<boolean> {
|
|
282
|
-
return !!(await this.node.getContract(address));
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
async #isContractInitialized(address: AztecAddress): Promise<boolean> {
|
|
286
|
-
const initNullifier = await siloNullifier(address, address.toField());
|
|
287
|
-
return !!(await this.node.getNullifierMembershipWitness('latest', initNullifier));
|
|
288
|
-
}
|
|
289
|
-
|
|
290
287
|
// Executes the entrypoint private function, as well as all nested private
|
|
291
288
|
// functions that might arise.
|
|
292
289
|
async #executePrivate(
|
|
@@ -300,6 +297,15 @@ export class PXE {
|
|
|
300
297
|
try {
|
|
301
298
|
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
302
299
|
|
|
300
|
+
await ensureContractSynced(
|
|
301
|
+
contractAddress,
|
|
302
|
+
functionSelector,
|
|
303
|
+
privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
304
|
+
this.node,
|
|
305
|
+
this.contractStore,
|
|
306
|
+
anchorBlockHeader,
|
|
307
|
+
);
|
|
308
|
+
|
|
303
309
|
const result = await contractFunctionSimulator.run(
|
|
304
310
|
txRequest,
|
|
305
311
|
contractAddress,
|
|
@@ -394,14 +400,15 @@ export class PXE {
|
|
|
394
400
|
privateExecutionResult: PrivateExecutionResult,
|
|
395
401
|
config: PrivateKernelExecutionProverConfig,
|
|
396
402
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
397
|
-
const
|
|
398
|
-
const
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
404
|
+
const anchorBlockHash = await anchorBlockHeader.hash();
|
|
405
|
+
const kernelOracle = new PrivateKernelOracle(this.contractStore, this.keyStore, this.node, anchorBlockHash);
|
|
406
|
+
const kernelTraceProver = new PrivateKernelExecutionProver(
|
|
407
|
+
kernelOracle,
|
|
408
|
+
proofCreator,
|
|
409
|
+
!this.proverEnabled,
|
|
410
|
+
this.log.getBindings(),
|
|
403
411
|
);
|
|
404
|
-
const kernelTraceProver = new PrivateKernelExecutionProver(kernelOracle, proofCreator, !this.proverEnabled);
|
|
405
412
|
this.log.debug(`Executing kernel trace prover (${JSON.stringify(config)})...`);
|
|
406
413
|
return await kernelTraceProver.proveWithKernels(txExecutionRequest.toTxRequest(), privateExecutionResult, config);
|
|
407
414
|
}
|
|
@@ -413,66 +420,12 @@ export class PXE {
|
|
|
413
420
|
}
|
|
414
421
|
|
|
415
422
|
/**
|
|
416
|
-
* Returns the contract
|
|
417
|
-
*
|
|
418
|
-
* @
|
|
419
|
-
* @param id - Identifier of the class.
|
|
420
|
-
* @param includeArtifact - Identifier of the class.
|
|
421
|
-
* @returns - It returns the contract class metadata, with the artifact field being optional, and will only be returned if true is passed in
|
|
422
|
-
* for `includeArtifact`
|
|
423
|
-
* TODO(@spalladino): The PXE actually holds artifacts and not classes, what should we return? Also,
|
|
424
|
-
* should the pxe query the node for contract public info, and merge it with its own definitions?
|
|
425
|
-
* TODO(@spalladino): This method is strictly needed to decide whether to publicly register a class or not
|
|
426
|
-
* during a public deployment. We probably want a nicer and more general API for this, but it'll have to
|
|
427
|
-
* do for the time being.
|
|
428
|
-
*/
|
|
429
|
-
public async getContractClassMetadata(
|
|
430
|
-
id: Fr,
|
|
431
|
-
includeArtifact: boolean = false,
|
|
432
|
-
): Promise<{
|
|
433
|
-
contractClass: ContractClassWithId | undefined;
|
|
434
|
-
isContractClassPubliclyRegistered: boolean;
|
|
435
|
-
artifact: ContractArtifact | undefined;
|
|
436
|
-
}> {
|
|
437
|
-
const artifact = await this.contractStore.getContractArtifact(id);
|
|
438
|
-
if (!artifact) {
|
|
439
|
-
this.log.warn(`No artifact found for contract class ${id.toString()} when looking for its metadata`);
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
return {
|
|
443
|
-
contractClass: artifact && (await getContractClassFromArtifact(artifact)),
|
|
444
|
-
isContractClassPubliclyRegistered: await this.#isContractClassPubliclyRegistered(id),
|
|
445
|
-
artifact: includeArtifact ? artifact : undefined,
|
|
446
|
-
};
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
/**
|
|
450
|
-
* Returns the contract metadata given an address.
|
|
451
|
-
* The metadata consists of its contract instance, which includes the contract class identifier,
|
|
452
|
-
* initialization hash, deployment salt, and public keys hash; whether the contract instance has been initialized;
|
|
453
|
-
* and whether the contract instance with the given address has been publicly deployed.
|
|
454
|
-
* @remark - it queries the node to check whether the contract instance has been initialized / publicly deployed through a node.
|
|
455
|
-
* This query is not dependent on the PXE.
|
|
456
|
-
* @param address - The address that the contract instance resides at.
|
|
457
|
-
* @returns - It returns the contract metadata
|
|
458
|
-
* TODO(@spalladino): Should we return the public keys in plain as well here?
|
|
423
|
+
* Returns the contract artifact for a given contract class id, if it's registered in the PXE.
|
|
424
|
+
* @param id - Identifier of the contract class.
|
|
425
|
+
* @returns The contract artifact if found, undefined otherwise.
|
|
459
426
|
*/
|
|
460
|
-
public async
|
|
461
|
-
|
|
462
|
-
isContractInitialized: boolean;
|
|
463
|
-
isContractPublished: boolean;
|
|
464
|
-
}> {
|
|
465
|
-
let instance;
|
|
466
|
-
try {
|
|
467
|
-
instance = await this.contractStore.getContractInstance(address);
|
|
468
|
-
} catch {
|
|
469
|
-
this.log.warn(`No instance found for contract ${address.toString()} when looking for its metadata`);
|
|
470
|
-
}
|
|
471
|
-
return {
|
|
472
|
-
contractInstance: instance,
|
|
473
|
-
isContractInitialized: await this.#isContractInitialized(address),
|
|
474
|
-
isContractPublished: await this.#isContractPublished(address),
|
|
475
|
-
};
|
|
427
|
+
public async getContractArtifact(id: Fr): Promise<ContractArtifact | undefined> {
|
|
428
|
+
return await this.contractStore.getContractArtifact(id);
|
|
476
429
|
}
|
|
477
430
|
|
|
478
431
|
/**
|
|
@@ -497,7 +450,6 @@ export class PXE {
|
|
|
497
450
|
}
|
|
498
451
|
|
|
499
452
|
await this.addressStore.addCompleteAddress(accountCompleteAddress);
|
|
500
|
-
await this.noteStore.addScope(accountCompleteAddress.address);
|
|
501
453
|
return accountCompleteAddress;
|
|
502
454
|
}
|
|
503
455
|
|
|
@@ -645,13 +597,7 @@ export class PXE {
|
|
|
645
597
|
|
|
646
598
|
const header = await this.anchorBlockStore.getBlockHeader();
|
|
647
599
|
|
|
648
|
-
const currentClassId = await readCurrentClassId(
|
|
649
|
-
contractAddress,
|
|
650
|
-
currentInstance,
|
|
651
|
-
this.node,
|
|
652
|
-
header.globalVariables.blockNumber,
|
|
653
|
-
header.globalVariables.timestamp,
|
|
654
|
-
);
|
|
600
|
+
const currentClassId = await readCurrentClassId(contractAddress, currentInstance, this.node, header);
|
|
655
601
|
if (!contractClass.id.equals(currentClassId)) {
|
|
656
602
|
throw new Error('Could not update contract to a class different from the current one.');
|
|
657
603
|
}
|
|
@@ -744,7 +690,7 @@ export class PXE {
|
|
|
744
690
|
// TODO(benesjan): The following is an expensive operation. Figure out a way to avoid it.
|
|
745
691
|
const txHash = (await txProvingResult.toTx()).txHash;
|
|
746
692
|
|
|
747
|
-
await this.senderTaggingStore.storePendingIndexes(preTagsUsedInTheTx, txHash);
|
|
693
|
+
await this.senderTaggingStore.storePendingIndexes(preTagsUsedInTheTx, txHash, jobId);
|
|
748
694
|
this.log.debug(`Stored used pre-tags as sender for the tx`, {
|
|
749
695
|
preTagsUsedInTheTx,
|
|
750
696
|
});
|
|
@@ -911,14 +857,8 @@ export class PXE {
|
|
|
911
857
|
let executionSteps: PrivateExecutionStep[] = [];
|
|
912
858
|
|
|
913
859
|
if (skipKernels) {
|
|
914
|
-
// According to the protocol rules, the nonce generator for the note hashes
|
|
915
|
-
// can either be the first nullifier in the tx or the protocol nullifier if there are none.
|
|
916
|
-
const nonceGenerator = privateExecutionResult.firstNullifier.equals(Fr.ZERO)
|
|
917
|
-
? await computeProtocolNullifier(await txRequest.toTxRequest().hash())
|
|
918
|
-
: privateExecutionResult.firstNullifier;
|
|
919
860
|
({ publicInputs, executionSteps } = await generateSimulatedProvingResult(
|
|
920
861
|
privateExecutionResult,
|
|
921
|
-
nonceGenerator,
|
|
922
862
|
this.contractStore,
|
|
923
863
|
));
|
|
924
864
|
} else {
|
|
@@ -1029,8 +969,14 @@ export class PXE {
|
|
|
1029
969
|
const functionTimer = new Timer();
|
|
1030
970
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
1031
971
|
|
|
1032
|
-
await this.
|
|
1033
|
-
|
|
972
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
973
|
+
await ensureContractSynced(
|
|
974
|
+
call.to,
|
|
975
|
+
call.selector,
|
|
976
|
+
privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
977
|
+
this.node,
|
|
978
|
+
this.contractStore,
|
|
979
|
+
anchorBlockHeader,
|
|
1034
980
|
);
|
|
1035
981
|
|
|
1036
982
|
const executionResult = await this.#simulateUtility(
|
|
@@ -1080,26 +1026,39 @@ export class PXE {
|
|
|
1080
1026
|
* Defaults to the latest known block to PXE + 1.
|
|
1081
1027
|
* @returns - The packed events with block and tx metadata.
|
|
1082
1028
|
*/
|
|
1083
|
-
public getPrivateEvents(
|
|
1084
|
-
|
|
1029
|
+
public async getPrivateEvents(
|
|
1030
|
+
eventSelector: EventSelector,
|
|
1031
|
+
filter: PrivateEventFilter,
|
|
1032
|
+
): Promise<PackedPrivateEvent[]> {
|
|
1033
|
+
let anchorBlockNumber: BlockNumber;
|
|
1034
|
+
|
|
1035
|
+
await this.#putInJobQueue(async jobId => {
|
|
1085
1036
|
await this.blockStateSynchronizer.sync();
|
|
1037
|
+
|
|
1038
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
1039
|
+
anchorBlockNumber = anchorBlockHeader.getBlockNumber();
|
|
1040
|
+
|
|
1086
1041
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
1087
1042
|
|
|
1088
|
-
await
|
|
1043
|
+
await ensureContractSynced(
|
|
1089
1044
|
filter.contractAddress,
|
|
1090
1045
|
null,
|
|
1091
1046
|
async privateSyncCall =>
|
|
1092
1047
|
await this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
|
|
1048
|
+
this.node,
|
|
1049
|
+
this.contractStore,
|
|
1050
|
+
anchorBlockHeader,
|
|
1093
1051
|
);
|
|
1052
|
+
});
|
|
1094
1053
|
|
|
1095
|
-
|
|
1054
|
+
// anchorBlockNumber is set during the job and fixed to whatever it is after a block sync
|
|
1055
|
+
const sanitizedFilter = new PrivateEventFilterValidator(anchorBlockNumber!).validate(filter);
|
|
1096
1056
|
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1057
|
+
this.log.debug(
|
|
1058
|
+
`Getting private events for ${sanitizedFilter.contractAddress.toString()} from ${sanitizedFilter.fromBlock} to ${sanitizedFilter.toBlock}`,
|
|
1059
|
+
);
|
|
1100
1060
|
|
|
1101
|
-
|
|
1102
|
-
});
|
|
1061
|
+
return this.privateEventStore.getPrivateEvents(eventSelector, sanitizedFilter);
|
|
1103
1062
|
}
|
|
1104
1063
|
|
|
1105
1064
|
/**
|