@aztec/pxe 0.0.1-commit.fff30aa → 0.0.1-dev
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 +5 -3
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +10 -2
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +4 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +18 -10
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +5 -2
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.d.ts +4 -1
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +53 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +10 -14
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +16 -14
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +19 -2
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +108 -5
- package/dest/contract_sync/contract_sync_service.d.ts +2 -1
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
- package/dest/contract_sync/contract_sync_service.js +41 -7
- package/dest/contract_sync/helpers.d.ts +2 -3
- package/dest/contract_sync/helpers.d.ts.map +1 -1
- package/dest/contract_sync/helpers.js +12 -19
- 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 +2 -1
- 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 +2 -1
- package/dest/entrypoints/pxe_creation_options.d.ts +4 -1
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +2 -1
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +1 -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 +2 -1
- package/dest/events/event_service.d.ts +13 -5
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +28 -7
- package/dest/hooks/authorize_utility_call.d.ts +37 -0
- package/dest/hooks/authorize_utility_call.d.ts.map +1 -0
- package/dest/hooks/authorize_utility_call.js +4 -0
- package/dest/hooks/execution_hooks.d.ts +42 -0
- package/dest/hooks/execution_hooks.d.ts.map +1 -0
- package/dest/hooks/execution_hooks.js +9 -0
- package/dest/hooks/index.d.ts +4 -0
- package/dest/hooks/index.d.ts.map +1 -0
- package/dest/hooks/index.js +1 -0
- package/dest/logs/log_service.d.ts +1 -1
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +20 -35
- package/dest/messages/message_context_service.d.ts +1 -1
- package/dest/messages/message_context_service.d.ts.map +1 -1
- package/dest/messages/message_context_service.js +12 -10
- package/dest/notes/note_service.d.ts +25 -3
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +80 -65
- package/dest/oracle_version.d.ts +2 -2
- package/dest/oracle_version.js +2 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +2 -1
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +18 -4
- package/dest/private_kernel/private_kernel_oracle.d.ts +1 -1
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +7 -2
- package/dest/pxe.d.ts +20 -5
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +61 -59
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.js +588 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
- package/dest/storage/open_pxe_stores.d.ts +31 -0
- package/dest/storage/open_pxe_stores.d.ts.map +1 -0
- package/dest/storage/open_pxe_stores.js +26 -0
- 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 +3 -0
- package/dest/tagging/index.d.ts +4 -3
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +3 -2
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +56 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +158 -0
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +19 -8
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +11 -6
- 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 +21 -0
- package/package.json +17 -16
- package/src/bin/check_oracle_version.ts +1 -1
- package/src/block_synchronizer/block_synchronizer.ts +11 -3
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +32 -9
- package/src/contract_function_simulator/oracle/interfaces.ts +12 -1
- package/src/contract_function_simulator/oracle/oracle.ts +73 -1
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +25 -21
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +165 -29
- package/src/contract_sync/contract_sync_service.ts +55 -23
- package/src/contract_sync/helpers.ts +11 -23
- package/src/entrypoints/client/bundle/utils.ts +1 -0
- package/src/entrypoints/client/lazy/utils.ts +1 -0
- package/src/entrypoints/pxe_creation_options.ts +4 -0
- package/src/entrypoints/server/index.ts +1 -0
- package/src/entrypoints/server/utils.ts +1 -0
- package/src/events/event_service.ts +52 -17
- package/src/hooks/authorize_utility_call.ts +40 -0
- package/src/hooks/execution_hooks.ts +48 -0
- package/src/hooks/index.ts +7 -0
- package/src/logs/log_service.ts +46 -71
- package/src/messages/message_context_service.ts +25 -24
- package/src/notes/note_service.ts +115 -91
- package/src/oracle_version.ts +2 -2
- package/src/private_kernel/private_kernel_execution_prover.ts +29 -3
- package/src/private_kernel/private_kernel_oracle.ts +15 -5
- package/src/pxe.ts +116 -53
- package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +22 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/AnchorBlockStore.json +3 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/CapsuleStore.json +16 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +28 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +42 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +36 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +18 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderAddressBookStore.json +16 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +22 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +97 -0
- package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
- package/src/storage/backwards_compatibility_tests/schema_tests.ts +707 -0
- package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
- package/src/storage/open_pxe_stores.ts +47 -0
- package/src/tagging/get_all_logs_by_tags.ts +4 -0
- package/src/tagging/index.ts +3 -2
- package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
- package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +236 -0
- package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +33 -10
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +23 -8
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -14
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -85
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -14
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -33
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -130
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -44
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { uniqueBy } from '@aztec/foundation/collection';
|
|
1
2
|
import { vkAsFieldsMegaHonk } from '@aztec/foundation/crypto/keys';
|
|
2
3
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
4
|
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
@@ -22,12 +23,14 @@ import {
|
|
|
22
23
|
PrivateKernelTailCircuitPrivateInputs,
|
|
23
24
|
type PrivateKernelTailCircuitPublicInputs,
|
|
24
25
|
PrivateVerificationKeyHints,
|
|
26
|
+
type UpdatedClassIdHints,
|
|
25
27
|
} from '@aztec/stdlib/kernel';
|
|
26
28
|
import { ChonkProof, ChonkProofWithPublicInputs } from '@aztec/stdlib/proofs';
|
|
27
29
|
import {
|
|
28
30
|
type PrivateCallExecutionResult,
|
|
29
31
|
type PrivateExecutionResult,
|
|
30
32
|
TxRequest,
|
|
33
|
+
collectNested,
|
|
31
34
|
collectNoteHashNullifierCounterMap,
|
|
32
35
|
getFinalMinRevertibleSideEffectCounter,
|
|
33
36
|
} from '@aztec/stdlib/tx';
|
|
@@ -108,6 +111,8 @@ export class PrivateKernelExecutionProver {
|
|
|
108
111
|
const minRevertibleSideEffectCounter = getFinalMinRevertibleSideEffectCounter(executionResult);
|
|
109
112
|
const splitCounter = isPrivateOnlyTx ? 0 : minRevertibleSideEffectCounter;
|
|
110
113
|
|
|
114
|
+
const updatedClassIdHintsMap = await this.prefetchUpdatedClassIdHints(executionResult);
|
|
115
|
+
|
|
111
116
|
while (executionStack.length) {
|
|
112
117
|
if (!firstIteration) {
|
|
113
118
|
let resetBuilder = new PrivateKernelResetPrivateInputsBuilder(
|
|
@@ -161,7 +166,7 @@ export class PrivateKernelExecutionProver {
|
|
|
161
166
|
},
|
|
162
167
|
});
|
|
163
168
|
|
|
164
|
-
const privateCallData = await this.createPrivateCallData(currentExecution);
|
|
169
|
+
const privateCallData = await this.createPrivateCallData(currentExecution, updatedClassIdHintsMap);
|
|
165
170
|
|
|
166
171
|
if (firstIteration) {
|
|
167
172
|
const witgenTimer = new Timer();
|
|
@@ -401,7 +406,28 @@ export class PrivateKernelExecutionProver {
|
|
|
401
406
|
);
|
|
402
407
|
}
|
|
403
408
|
|
|
404
|
-
|
|
409
|
+
/** Prefetches updated class id hints for all unique contracts in the execution tree in parallel. */
|
|
410
|
+
private async prefetchUpdatedClassIdHints(
|
|
411
|
+
executionResult: PrivateExecutionResult,
|
|
412
|
+
): Promise<Map<string, UpdatedClassIdHints>> {
|
|
413
|
+
const allAddresses = collectNested([executionResult.entrypoint], exec => [
|
|
414
|
+
exec.publicInputs.callContext.contractAddress,
|
|
415
|
+
]);
|
|
416
|
+
const uniqueAddresses = uniqueBy(allAddresses, a => a.toString());
|
|
417
|
+
return new Map<string, UpdatedClassIdHints>(
|
|
418
|
+
await Promise.all(
|
|
419
|
+
uniqueAddresses.map(
|
|
420
|
+
async addr =>
|
|
421
|
+
[addr.toString(), await this.oracle.getUpdatedClassIdHints(addr)] as [string, UpdatedClassIdHints],
|
|
422
|
+
),
|
|
423
|
+
),
|
|
424
|
+
);
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
private async createPrivateCallData(
|
|
428
|
+
{ publicInputs, vk: vkAsBuffer }: PrivateCallExecutionResult,
|
|
429
|
+
updatedClassIdHintsMap: Map<string, UpdatedClassIdHints>,
|
|
430
|
+
) {
|
|
405
431
|
const { contractAddress, functionSelector } = publicInputs.callContext;
|
|
406
432
|
|
|
407
433
|
const vkAsFields = await vkAsFieldsMegaHonk(vkAsBuffer);
|
|
@@ -417,7 +443,7 @@ export class PrivateKernelExecutionProver {
|
|
|
417
443
|
const { artifactHash: contractClassArtifactHash, publicBytecodeCommitment: contractClassPublicBytecodeCommitment } =
|
|
418
444
|
await this.oracle.getContractClassIdPreimage(currentContractClassId);
|
|
419
445
|
|
|
420
|
-
const updatedClassIdHints =
|
|
446
|
+
const updatedClassIdHints = updatedClassIdHintsMap.get(contractAddress.toString())!;
|
|
421
447
|
|
|
422
448
|
return PrivateCallData.from({
|
|
423
449
|
publicInputs,
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
FUNCTION_TREE_HEIGHT,
|
|
3
|
+
NOTE_HASH_TREE_HEIGHT,
|
|
4
|
+
PUBLIC_DATA_TREE_HEIGHT,
|
|
5
|
+
UPDATES_VALUE_SIZE,
|
|
6
|
+
VK_TREE_HEIGHT,
|
|
7
|
+
} from '@aztec/constants';
|
|
2
8
|
import type { Fr } from '@aztec/foundation/curves/bn254';
|
|
3
9
|
import type { GrumpkinScalar, Point } from '@aztec/foundation/curves/grumpkin';
|
|
4
10
|
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
@@ -132,12 +138,16 @@ export class PrivateKernelOracle {
|
|
|
132
138
|
throw new Error(`No public data tree witness found for ${hashLeafSlot}`);
|
|
133
139
|
}
|
|
134
140
|
|
|
141
|
+
// In an indexed merkle tree, getPublicDataWitness returns a leaf whose slot matches our query
|
|
142
|
+
// only if the slot has been written to. Otherwise, it returns the "low leaf" predecessor, whose
|
|
143
|
+
// slot will differ. Most contracts are never updated, so we can skip the readFromTree call
|
|
144
|
+
// (which triggers multiple RPC calls) and return empty values directly.
|
|
135
145
|
const readStorage = (storageSlot: Fr) =>
|
|
136
146
|
this.node.getPublicStorageAt(blockHash, ProtocolContractAddress.ContractInstanceRegistry, storageSlot);
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
readStorage
|
|
140
|
-
|
|
147
|
+
const slotExists = updatedClassIdWitness.leafPreimage.leaf.slot.equals(hashLeafSlot);
|
|
148
|
+
const delayedPublicMutableValues = slotExists
|
|
149
|
+
? await DelayedPublicMutableValues.readFromTree(delayedPublicMutableSlot, readStorage)
|
|
150
|
+
: DelayedPublicMutableValues.empty(UPDATES_VALUE_SIZE);
|
|
141
151
|
|
|
142
152
|
return new UpdatedClassIdHints(
|
|
143
153
|
new MembershipWitness(
|
package/src/pxe.ts
CHANGED
|
@@ -6,7 +6,6 @@ import { SerialQueue } from '@aztec/foundation/queue';
|
|
|
6
6
|
import { Timer } from '@aztec/foundation/timer';
|
|
7
7
|
import { KeyStore } from '@aztec/key-store';
|
|
8
8
|
import type { AztecAsyncKVStore } from '@aztec/kv-store';
|
|
9
|
-
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
10
9
|
import { type ProtocolContractsProvider, protocolContractNames } from '@aztec/protocol-contracts';
|
|
11
10
|
import type { CircuitSimulator } from '@aztec/simulator/client';
|
|
12
11
|
import {
|
|
@@ -67,6 +66,7 @@ import { readCurrentClassId } from './contract_sync/helpers.js';
|
|
|
67
66
|
import { PXEDebugUtils } from './debug/pxe_debug_utils.js';
|
|
68
67
|
import { enrichPublicSimulationError, enrichSimulationError } from './error_enriching.js';
|
|
69
68
|
import { PrivateEventFilterValidator } from './events/private_event_filter_validator.js';
|
|
69
|
+
import type { ExecutionHooks } from './hooks/index.js';
|
|
70
70
|
import { JobCoordinator } from './job_coordinator/job_coordinator.js';
|
|
71
71
|
import { MessageContextService } from './messages/message_context_service.js';
|
|
72
72
|
import {
|
|
@@ -79,16 +79,26 @@ import { AnchorBlockStore } from './storage/anchor_block_store/anchor_block_stor
|
|
|
79
79
|
import { CapsuleStore } from './storage/capsule_store/capsule_store.js';
|
|
80
80
|
import { ContractStore } from './storage/contract_store/contract_store.js';
|
|
81
81
|
import { NoteStore } from './storage/note_store/note_store.js';
|
|
82
|
+
import { openPxeStores } from './storage/open_pxe_stores.js';
|
|
82
83
|
import { PrivateEventStore } from './storage/private_event_store/private_event_store.js';
|
|
83
84
|
import { RecipientTaggingStore } from './storage/tagging_store/recipient_tagging_store.js';
|
|
84
85
|
import { SenderAddressBookStore } from './storage/tagging_store/sender_address_book_store.js';
|
|
85
86
|
import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store.js';
|
|
87
|
+
import { persistSenderTaggingIndexRangesForTx } from './tagging/index.js';
|
|
86
88
|
|
|
87
89
|
export type PackedPrivateEvent = InTx & {
|
|
88
90
|
packedEvent: Fr[];
|
|
89
91
|
eventSelector: EventSelector;
|
|
90
92
|
};
|
|
91
93
|
|
|
94
|
+
/** Options for PXE.proveTx. */
|
|
95
|
+
export type ProveTxOpts = {
|
|
96
|
+
/** Addresses whose private state and keys are accessible during private execution. */
|
|
97
|
+
scopes: AztecAddress[];
|
|
98
|
+
/** Sender address used to derive discovery tags for private messages (notes, events, logs) this tx emits. */
|
|
99
|
+
senderForTags?: AztecAddress;
|
|
100
|
+
};
|
|
101
|
+
|
|
92
102
|
/** Options for PXE.profileTx. */
|
|
93
103
|
export type ProfileTxOpts = {
|
|
94
104
|
/** The profiling mode to use. */
|
|
@@ -97,6 +107,8 @@ export type ProfileTxOpts = {
|
|
|
97
107
|
skipProofGeneration?: boolean;
|
|
98
108
|
/** Addresses whose private state and keys are accessible during private execution. */
|
|
99
109
|
scopes: AztecAddress[];
|
|
110
|
+
/** Sender address used to derive discovery tags for private messages (notes, events, logs) this tx emits. */
|
|
111
|
+
senderForTags?: AztecAddress;
|
|
100
112
|
};
|
|
101
113
|
|
|
102
114
|
/** Options for PXE.simulateTx. */
|
|
@@ -113,6 +125,8 @@ export type SimulateTxOpts = {
|
|
|
113
125
|
overrides?: SimulationOverrides;
|
|
114
126
|
/** Addresses whose private state and keys are accessible during private execution */
|
|
115
127
|
scopes: AztecAddress[];
|
|
128
|
+
/** Sender address used to derive discovery tags for private messages (notes, events, logs) this tx emits. */
|
|
129
|
+
senderForTags?: AztecAddress;
|
|
116
130
|
};
|
|
117
131
|
|
|
118
132
|
/** Options for PXE.executeUtility. */
|
|
@@ -139,6 +153,8 @@ export type PXECreateArgs = {
|
|
|
139
153
|
config: PXEConfig;
|
|
140
154
|
/** Optional logger instance or string suffix for the logger name. */
|
|
141
155
|
loggerOrSuffix?: string | Logger;
|
|
156
|
+
/** Optional hooks to observe and influence contract execution. */
|
|
157
|
+
hooks?: ExecutionHooks;
|
|
142
158
|
};
|
|
143
159
|
|
|
144
160
|
/**
|
|
@@ -170,6 +186,7 @@ export class PXE {
|
|
|
170
186
|
private jobQueue: SerialQueue,
|
|
171
187
|
private jobCoordinator: JobCoordinator,
|
|
172
188
|
public debug: PXEDebugUtils,
|
|
189
|
+
private hooks: ExecutionHooks | undefined,
|
|
173
190
|
) {}
|
|
174
191
|
|
|
175
192
|
/**
|
|
@@ -187,6 +204,7 @@ export class PXE {
|
|
|
187
204
|
protocolContractsProvider,
|
|
188
205
|
config,
|
|
189
206
|
loggerOrSuffix,
|
|
207
|
+
hooks,
|
|
190
208
|
}: PXECreateArgs) {
|
|
191
209
|
// Extract bindings from the logger, or use empty bindings if a string suffix is provided.
|
|
192
210
|
const bindings: LoggerBindings | undefined =
|
|
@@ -200,17 +218,19 @@ export class PXE {
|
|
|
200
218
|
const info = await node.getNodeInfo();
|
|
201
219
|
|
|
202
220
|
const proverEnabled = config.proverEnabled !== undefined ? config.proverEnabled : info.realProofs;
|
|
203
|
-
const
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
221
|
+
const {
|
|
222
|
+
addressStore,
|
|
223
|
+
privateEventStore,
|
|
224
|
+
contractStore,
|
|
225
|
+
noteStore,
|
|
226
|
+
anchorBlockStore,
|
|
227
|
+
senderTaggingStore,
|
|
228
|
+
senderAddressBookStore,
|
|
229
|
+
recipientTaggingStore,
|
|
230
|
+
capsuleStore,
|
|
231
|
+
keyStore,
|
|
232
|
+
l2TipsStore,
|
|
233
|
+
} = openPxeStores(store);
|
|
214
234
|
const contractSyncService = new ContractSyncService(
|
|
215
235
|
node,
|
|
216
236
|
contractStore,
|
|
@@ -225,7 +245,7 @@ export class PXE {
|
|
|
225
245
|
anchorBlockStore,
|
|
226
246
|
noteStore,
|
|
227
247
|
privateEventStore,
|
|
228
|
-
|
|
248
|
+
l2TipsStore,
|
|
229
249
|
contractSyncService,
|
|
230
250
|
config,
|
|
231
251
|
bindings,
|
|
@@ -260,7 +280,7 @@ export class PXE {
|
|
|
260
280
|
privateEventStore,
|
|
261
281
|
contractSyncService,
|
|
262
282
|
messageContextService,
|
|
263
|
-
|
|
283
|
+
l2TipsStore,
|
|
264
284
|
simulator,
|
|
265
285
|
proverEnabled,
|
|
266
286
|
proofCreator,
|
|
@@ -269,6 +289,7 @@ export class PXE {
|
|
|
269
289
|
jobQueue,
|
|
270
290
|
jobCoordinator,
|
|
271
291
|
debugUtils,
|
|
292
|
+
hooks,
|
|
272
293
|
);
|
|
273
294
|
|
|
274
295
|
debugUtils.setPXEHelpers(
|
|
@@ -304,6 +325,7 @@ export class PXE {
|
|
|
304
325
|
simulator: this.simulator,
|
|
305
326
|
contractSyncService: this.contractSyncService,
|
|
306
327
|
messageContextService: this.messageContextService,
|
|
328
|
+
hooks: this.hooks,
|
|
307
329
|
});
|
|
308
330
|
}
|
|
309
331
|
|
|
@@ -366,17 +388,24 @@ export class PXE {
|
|
|
366
388
|
|
|
367
389
|
// Executes the entrypoint private function, as well as all nested private
|
|
368
390
|
// functions that might arise.
|
|
369
|
-
async #executePrivate(
|
|
370
|
-
contractFunctionSimulator
|
|
371
|
-
txRequest
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
391
|
+
async #executePrivate({
|
|
392
|
+
contractFunctionSimulator,
|
|
393
|
+
txRequest,
|
|
394
|
+
anchorBlockHeader,
|
|
395
|
+
scopes,
|
|
396
|
+
jobId,
|
|
397
|
+
senderForTags,
|
|
398
|
+
}: {
|
|
399
|
+
contractFunctionSimulator: ContractFunctionSimulator;
|
|
400
|
+
txRequest: TxExecutionRequest;
|
|
401
|
+
anchorBlockHeader: BlockHeader;
|
|
402
|
+
scopes: AztecAddress[];
|
|
403
|
+
jobId: string;
|
|
404
|
+
senderForTags?: AztecAddress;
|
|
405
|
+
}): Promise<PrivateExecutionResult> {
|
|
375
406
|
const { origin: contractAddress, functionSelector } = txRequest;
|
|
376
407
|
|
|
377
408
|
try {
|
|
378
|
-
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
379
|
-
|
|
380
409
|
await this.contractSyncService.ensureContractSynced(
|
|
381
410
|
contractAddress,
|
|
382
411
|
functionSelector,
|
|
@@ -393,6 +422,7 @@ export class PXE {
|
|
|
393
422
|
anchorBlockHeader,
|
|
394
423
|
scopes,
|
|
395
424
|
jobId,
|
|
425
|
+
senderForTags,
|
|
396
426
|
});
|
|
397
427
|
this.log.debug(`Private simulation completed for ${contractAddress.toString()}:${functionSelector}`);
|
|
398
428
|
return result;
|
|
@@ -481,9 +511,9 @@ export class PXE {
|
|
|
481
511
|
txExecutionRequest: TxExecutionRequest,
|
|
482
512
|
proofCreator: PrivateKernelProver,
|
|
483
513
|
privateExecutionResult: PrivateExecutionResult,
|
|
514
|
+
anchorBlockHeader: BlockHeader,
|
|
484
515
|
config: PrivateKernelExecutionProverConfig,
|
|
485
516
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
486
|
-
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
487
517
|
const kernelOracle = new PrivateKernelOracle(this.contractStore, this.keyStore, this.node, anchorBlockHeader);
|
|
488
518
|
const kernelTraceProver = new PrivateKernelExecutionProver(
|
|
489
519
|
kernelOracle,
|
|
@@ -663,7 +693,9 @@ export class PXE {
|
|
|
663
693
|
const publicFunctionSignatures = artifact.functions
|
|
664
694
|
.filter(fn => fn.functionType === FunctionType.PUBLIC)
|
|
665
695
|
.map(fn => decodeFunctionSignature(fn.name, fn.parameters));
|
|
666
|
-
|
|
696
|
+
if (publicFunctionSignatures.length > 0) {
|
|
697
|
+
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
|
|
698
|
+
}
|
|
667
699
|
} else {
|
|
668
700
|
// Otherwise, make sure there is an artifact already registered for that class id
|
|
669
701
|
artifact = await this.contractStore.getContractArtifact(instance.currentContractClassId);
|
|
@@ -710,7 +742,9 @@ export class PXE {
|
|
|
710
742
|
const publicFunctionSignatures = artifact.functions
|
|
711
743
|
.filter(fn => fn.functionType === FunctionType.PUBLIC)
|
|
712
744
|
.map(fn => decodeFunctionSignature(fn.name, fn.parameters));
|
|
713
|
-
|
|
745
|
+
if (publicFunctionSignatures.length > 0) {
|
|
746
|
+
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
|
|
747
|
+
}
|
|
714
748
|
|
|
715
749
|
currentInstance.currentContractClassId = contractClass.id;
|
|
716
750
|
await Promise.all([
|
|
@@ -739,7 +773,7 @@ export class PXE {
|
|
|
739
773
|
* @throws If contract code not found, or public simulation reverts.
|
|
740
774
|
* Also throws if simulatePublic is true and public simulation reverts.
|
|
741
775
|
*/
|
|
742
|
-
public proveTx(txRequest: TxExecutionRequest, scopes:
|
|
776
|
+
public proveTx(txRequest: TxExecutionRequest, { scopes, senderForTags }: ProveTxOpts): Promise<TxProvingResult> {
|
|
743
777
|
let privateExecutionResult: PrivateExecutionResult;
|
|
744
778
|
// We disable proving concurrently mostly out of caution, since it accesses some of our stores. Proving is so
|
|
745
779
|
// computationally demanding that it'd be rare for someone to try to do it concurrently regardless.
|
|
@@ -748,16 +782,24 @@ export class PXE {
|
|
|
748
782
|
try {
|
|
749
783
|
const syncTimer = new Timer();
|
|
750
784
|
await this.blockStateSynchronizer.sync();
|
|
785
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
751
786
|
const syncTime = syncTimer.ms();
|
|
752
787
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
753
|
-
privateExecutionResult = await this.#executePrivate(
|
|
788
|
+
privateExecutionResult = await this.#executePrivate({
|
|
789
|
+
contractFunctionSimulator,
|
|
790
|
+
txRequest,
|
|
791
|
+
anchorBlockHeader,
|
|
792
|
+
scopes,
|
|
793
|
+
jobId,
|
|
794
|
+
senderForTags,
|
|
795
|
+
});
|
|
754
796
|
|
|
755
797
|
const {
|
|
756
798
|
publicInputs,
|
|
757
799
|
chonkProof,
|
|
758
800
|
executionSteps,
|
|
759
801
|
timings: { proving } = {},
|
|
760
|
-
} = await this.#prove(txRequest, this.proofCreator, privateExecutionResult, {
|
|
802
|
+
} = await this.#prove(txRequest, this.proofCreator, privateExecutionResult, anchorBlockHeader, {
|
|
761
803
|
simulate: false,
|
|
762
804
|
skipFeeEnforcement: false,
|
|
763
805
|
profileMode: 'none',
|
|
@@ -787,23 +829,20 @@ export class PXE {
|
|
|
787
829
|
nodeRPCCalls: contractFunctionSimulator?.getStats().nodeRPCCalls,
|
|
788
830
|
});
|
|
789
831
|
|
|
790
|
-
//
|
|
791
|
-
//
|
|
792
|
-
//
|
|
793
|
-
//
|
|
794
|
-
//
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
} else {
|
|
805
|
-
this.log.debug(`No tagging index ranges used in the tx`);
|
|
806
|
-
}
|
|
832
|
+
// We keep track of which tagging indices we've used in this tx so that we don't repeat them in future txs
|
|
833
|
+
// (which would link them) without having to rely on this tx being mined (and us seeing the indices being used
|
|
834
|
+
// onchain).
|
|
835
|
+
// Note that this must happen _after_ proving as it requires the proof's public inputs, from which the kernels
|
|
836
|
+
// may have removed some logs due to note-nullifier squashing - this may lead to range of tagging indices we've
|
|
837
|
+
// actually used to being reduced.
|
|
838
|
+
await persistSenderTaggingIndexRangesForTx(
|
|
839
|
+
this.senderTaggingStore,
|
|
840
|
+
privateExecutionResult.entrypoint.taggingIndexRanges,
|
|
841
|
+
publicInputs,
|
|
842
|
+
() => txProvingResult.getTxHash(),
|
|
843
|
+
jobId,
|
|
844
|
+
this.log,
|
|
845
|
+
);
|
|
807
846
|
|
|
808
847
|
return txProvingResult;
|
|
809
848
|
} catch (err: any) {
|
|
@@ -820,7 +859,7 @@ export class PXE {
|
|
|
820
859
|
*/
|
|
821
860
|
public profileTx(
|
|
822
861
|
txRequest: TxExecutionRequest,
|
|
823
|
-
{ profileMode, skipProofGeneration = true, scopes }: ProfileTxOpts,
|
|
862
|
+
{ profileMode, skipProofGeneration = true, scopes, senderForTags }: ProfileTxOpts,
|
|
824
863
|
): Promise<TxProfileResult> {
|
|
825
864
|
// We disable concurrent profiles for consistency with simulateTx.
|
|
826
865
|
return this.#putInJobQueue(async jobId => {
|
|
@@ -840,15 +879,24 @@ export class PXE {
|
|
|
840
879
|
);
|
|
841
880
|
const syncTimer = new Timer();
|
|
842
881
|
await this.blockStateSynchronizer.sync();
|
|
882
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
843
883
|
const syncTime = syncTimer.ms();
|
|
844
884
|
|
|
845
885
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
846
|
-
const privateExecutionResult = await this.#executePrivate(
|
|
886
|
+
const privateExecutionResult = await this.#executePrivate({
|
|
887
|
+
contractFunctionSimulator,
|
|
888
|
+
txRequest,
|
|
889
|
+
anchorBlockHeader,
|
|
890
|
+
scopes,
|
|
891
|
+
jobId,
|
|
892
|
+
senderForTags,
|
|
893
|
+
});
|
|
847
894
|
|
|
848
895
|
const { executionSteps, timings: { proving } = {} } = await this.#prove(
|
|
849
896
|
txRequest,
|
|
850
897
|
this.proofCreator,
|
|
851
898
|
privateExecutionResult,
|
|
899
|
+
anchorBlockHeader,
|
|
852
900
|
{
|
|
853
901
|
simulate: skipProofGeneration,
|
|
854
902
|
skipFeeEnforcement: false,
|
|
@@ -916,6 +964,7 @@ export class PXE {
|
|
|
916
964
|
skipKernels = true,
|
|
917
965
|
overrides,
|
|
918
966
|
scopes,
|
|
967
|
+
senderForTags,
|
|
919
968
|
}: SimulateTxOpts,
|
|
920
969
|
): Promise<TxSimulationResult> {
|
|
921
970
|
// We disable concurrent simulations since those might execute oracles which read and write to the PXE stores (e.g.
|
|
@@ -938,6 +987,7 @@ export class PXE {
|
|
|
938
987
|
);
|
|
939
988
|
const syncTimer = new Timer();
|
|
940
989
|
await this.blockStateSynchronizer.sync();
|
|
990
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
941
991
|
const syncTime = syncTimer.ms();
|
|
942
992
|
|
|
943
993
|
const overriddenContracts = overrides?.contracts ? new Set(Object.keys(overrides.contracts)) : undefined;
|
|
@@ -957,7 +1007,14 @@ export class PXE {
|
|
|
957
1007
|
}
|
|
958
1008
|
|
|
959
1009
|
// Execution of private functions only; no proving, and no kernel logic.
|
|
960
|
-
const privateExecutionResult = await this.#executePrivate(
|
|
1010
|
+
const privateExecutionResult = await this.#executePrivate({
|
|
1011
|
+
contractFunctionSimulator,
|
|
1012
|
+
txRequest,
|
|
1013
|
+
anchorBlockHeader,
|
|
1014
|
+
scopes,
|
|
1015
|
+
jobId,
|
|
1016
|
+
senderForTags,
|
|
1017
|
+
});
|
|
961
1018
|
|
|
962
1019
|
let publicInputs: PrivateKernelTailCircuitPublicInputs | undefined;
|
|
963
1020
|
let executionSteps: PrivateExecutionStep[] = [];
|
|
@@ -970,11 +1027,17 @@ export class PXE {
|
|
|
970
1027
|
));
|
|
971
1028
|
} else {
|
|
972
1029
|
// Kernel logic, plus proving of all private functions and kernels.
|
|
973
|
-
({ publicInputs, executionSteps } = await this.#prove(
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
1030
|
+
({ publicInputs, executionSteps } = await this.#prove(
|
|
1031
|
+
txRequest,
|
|
1032
|
+
this.proofCreator,
|
|
1033
|
+
privateExecutionResult,
|
|
1034
|
+
anchorBlockHeader,
|
|
1035
|
+
{
|
|
1036
|
+
simulate: true,
|
|
1037
|
+
skipFeeEnforcement,
|
|
1038
|
+
profileMode: 'none',
|
|
1039
|
+
},
|
|
1040
|
+
));
|
|
978
1041
|
}
|
|
979
1042
|
|
|
980
1043
|
const privateSimulationResult = new PrivateSimulationResult(privateExecutionResult, publicInputs);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"complete_addresses": [
|
|
3
|
+
{
|
|
4
|
+
"index": 0,
|
|
5
|
+
"value": "0e097c323e48522fcbd592590a72a0d4e50f22b3fb1913d19c936439ab74851a214c7a24ddf501afc8734c7379ee502296289eb24cd8cd03cd435e128c06be0000987721e0963b4a5bd81ee862e2740d8849fd90537569064d3d3a4640e858d219e95c05f09cb86d1a6257572f9082ca15d4a02373c4d8c9cee23dc61a4c2a882f9017d51bca6616102d8a1d4dba89e4ce12881a2414576f01d2fec9492814a22c19ff0b089b07da436e6f7be6b26cdc17b9cee504a528c071ef6a416299683d0b369479d6e50504702d0b56bb56e4e8e0e77171429896651d0c11621e82ebc32fcdd0d194adafd753dc0ed279f5cfb54ddcce1dd581d4631cf343ba9ee6c1ab2858abca6c00da3def156b1f12a6464384e326d5fa724c2fc2ff2b7f3fc8ad5f0000000000000000000000000000000000000000000000000000000000000003"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"index": 1,
|
|
9
|
+
"value": "2bc83a7fe553d4b649228410040c130a782f86f9b54813f4d847d0c3eeba065a156832f7840991767f448681237ef8bce6895fc79e5d9d0dedd89dccfd9d59ce215403719ea86d38909507bba0ba2d191f72dc1991a5dfc17da8bf7e8c1f1f4f267e526a2e6e9adf6a026989be005bd50d1aea76d20816b9843bc95557696f9f16c3eb259ba3e3eb27b7fe3abc36e87923990bf5c265cb0d57790eda2a4432f1237296442bbb36cc3632af0578ad4b7d5d69d52e05937a1d3e2fe295ac9af98628737df05bb727d77dd52691d42566eb22e529f9f404a2f9bc2e1982956ba09c1df52a95111bd76680a4356951e68a20c3e51cbddb7d1536c572b416bd342e3204aa15eaf393bb18695ddee077d52be6489ed510f357a90003099ce337e6232c0000000000000000000000000000000000000000000000000000000000000007"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"complete_address_index": [
|
|
13
|
+
{
|
|
14
|
+
"key": "utf8:0x0e097c323e48522fcbd592590a72a0d4e50f22b3fb1913d19c936439ab74851a",
|
|
15
|
+
"value": "num:0"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"key": "utf8:0x2bc83a7fe553d4b649228410040c130a782f86f9b54813f4d847d0c3eeba065a",
|
|
19
|
+
"value": "num:1"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
{
|
|
2
|
+
"header": "000000000000000000000000000000000000000000000000000000000000000200000003000000000000000000000000000000000000000000000000000000000000000500000007000000000000000000000000000000000000000000000000000000000000000b0000000d00000000000000000000000000000000000000000000000000000000000000110000001300000000000000000000000000000000000000000000000000000000000000170000001d000000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000002500000000000000000000000000000000000000000000000000000000000000290000002b0000002f0000000000000035000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003d00000000000000000000000000000043000000000000000000000000000000470000000000000000000000000000000000000000000000000000000000000049000000000000000000000000000000000000000000000000000000000000004f"
|
|
3
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"capsules": [
|
|
3
|
+
{
|
|
4
|
+
"key": "utf8:0x0000000000000000000000000000000000000000000000000000000000000002:0x0000000000000000000000000000000000000000000000000000000000000003:0x0000000000000000000000000000000000000000000000000000000000000005",
|
|
5
|
+
"value": "0000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000b"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"key": "utf8:0x0000000000000000000000000000000000000000000000000000000000000002:0x0000000000000000000000000000000000000000000000000000000000000003:0x000000000000000000000000000000000000000000000000000000000000000d",
|
|
9
|
+
"value": "0000000000000000000000000000000000000000000000000000000000000011"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"key": "utf8:0x0000000000000000000000000000000000000000000000000000000000000002:0x0000000000000000000000000000000000000000000000000000000000000003:0x0000000000000000000000000000000000000000000000000000000000000013",
|
|
13
|
+
"value": ""
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"contract_artifacts": [
|
|
3
|
+
{
|
|
4
|
+
"key": "utf8:0x0000000000000000000000000000000000000000000000000000000000000002",
|
|
5
|
+
"value": "7b226e616d65223a22536368656d6146697874757265436f6e7472616374222c22617a74656356657273696f6e223a22736368656d612d666978747572652d76657273696f6e222c2266756e6374696f6e73223a5b7b226e616d65223a22707269766174655f666e222c2266756e6374696f6e54797065223a2270726976617465222c2269734f6e6c7953656c66223a66616c73652c226973537461746963223a66616c73652c226973496e697469616c697a6572223a747275652c22706172616d6574657273223a5b7b226e616d65223a226669727374222c2274797065223a7b226b696e64223a226669656c64227d2c227669736962696c697479223a2270726976617465227d2c7b226e616d65223a227365636f6e64222c2274797065223a7b226b696e64223a22696e7465676572222c227369676e223a22756e7369676e6564222c227769647468223a33327d2c227669736962696c697479223a227075626c6963227d5d2c2272657475726e5479706573223a5b7b226b696e64223a22626f6f6c65616e227d5d2c226572726f725479706573223a7b22736368656d615f746573745f6572726f72223a7b226572726f725f6b696e64223a22737472696e67222c22737472696e67223a22666978656420736368656d612d74657374206572726f72227d7d2c2262797465636f6465223a2241674d4642773d3d222c22646562756753796d626f6c73223a22736368656d612d666978747572652d6465627567227d5d2c226e6f6e44697370617463685075626c696346756e6374696f6e73223a5b7b226e616d65223a227075626c69635f666e222c2266756e6374696f6e54797065223a227075626c6963222c2269734f6e6c7953656c66223a747275652c226973537461746963223a747275652c226973496e697469616c697a6572223a66616c73652c22706172616d6574657273223a5b5d2c2272657475726e5479706573223a5b5d2c226572726f725479706573223a7b7d7d5d2c226f757470757473223a7b2273747275637473223a7b226d795f737472756374223a5b7b226b696e64223a226669656c64227d2c7b226b696e64223a22626f6f6c65616e227d5d7d2c22676c6f62616c73223a7b7d7d2c2273746f726167654c61796f7574223a7b226d795f6669656c64223a7b22736c6f74223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303062227d7d2c2266696c654d6170223a7b2231223a7b22736f75726365223a22736368656d61206669787475726520736f75726365222c2270617468223a227372632f736368656d615f666978747572652e6e72222c2266756e6374696f6e5f6c6f636174696f6e73223a5b5d7d7d7d"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"key": "utf8:0x0000000000000000000000000000000000000000000000000000000000000017",
|
|
9
|
+
"value": "7b226e616d65223a22536368656d6146697874757265436f6e7472616374222c22617a74656356657273696f6e223a22736368656d612d666978747572652d76657273696f6e222c2266756e6374696f6e73223a5b7b226e616d65223a22707269766174655f666e222c2266756e6374696f6e54797065223a2270726976617465222c2269734f6e6c7953656c66223a66616c73652c226973537461746963223a66616c73652c226973496e697469616c697a6572223a747275652c22706172616d6574657273223a5b7b226e616d65223a226669727374222c2274797065223a7b226b696e64223a226669656c64227d2c227669736962696c697479223a2270726976617465227d2c7b226e616d65223a227365636f6e64222c2274797065223a7b226b696e64223a22696e7465676572222c227369676e223a22756e7369676e6564222c227769647468223a33327d2c227669736962696c697479223a227075626c6963227d5d2c2272657475726e5479706573223a5b7b226b696e64223a22626f6f6c65616e227d5d2c226572726f725479706573223a7b22736368656d615f746573745f6572726f72223a7b226572726f725f6b696e64223a22737472696e67222c22737472696e67223a22666978656420736368656d612d74657374206572726f72227d7d2c2262797465636f6465223a2241674d4642773d3d222c22646562756753796d626f6c73223a22736368656d612d666978747572652d6465627567227d5d2c226e6f6e44697370617463685075626c696346756e6374696f6e73223a5b7b226e616d65223a227075626c69635f666e222c2266756e6374696f6e54797065223a227075626c6963222c2269734f6e6c7953656c66223a747275652c226973537461746963223a747275652c226973496e697469616c697a6572223a66616c73652c22706172616d6574657273223a5b5d2c2272657475726e5479706573223a5b5d2c226572726f725479706573223a7b7d7d5d2c226f757470757473223a7b2273747275637473223a7b226d795f737472756374223a5b7b226b696e64223a226669656c64227d2c7b226b696e64223a22626f6f6c65616e227d5d7d2c22676c6f62616c73223a7b7d7d2c2273746f726167654c61796f7574223a7b226d795f6669656c64223a7b22736c6f74223a22307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303062227d7d2c2266696c654d6170223a7b2231223a7b22736f75726365223a22736368656d61206669787475726520736f75726365222c2270617468223a227372632f736368656d615f666978747572652e6e72222c2266756e6374696f6e5f6c6f636174696f6e73223a5b5d7d7d7d"
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"contract_classes": [
|
|
13
|
+
{
|
|
14
|
+
"key": "utf8:0x0000000000000000000000000000000000000000000000000000000000000002",
|
|
15
|
+
"value": "010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000007000000020000000b000000000000000000000000000000000000000000000000000000000000000d000000110000000000000000000000000000000000000000000000000000000000000013"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"key": "utf8:0x0000000000000000000000000000000000000000000000000000000000000017",
|
|
19
|
+
"value": "010000000000000000000000000000000000000000000000000000000000000017000000000000000000000000000000000000000000000000000000000000001d000000000000000000000000000000000000000000000000000000000000001f000000000000000000000000000000000000000000000000000000000000002500000000"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"contracts_instances": [
|
|
23
|
+
{
|
|
24
|
+
"key": "utf8:0x0000000000000000000000000000000000000000000000000000000000000065",
|
|
25
|
+
"value": "010000000000000000000000000000000000000000000000000000000000000049000000000000000000000000000000000000000000000000000000000000004f0000000000000000000000000000000000000000000000000000000000000053000000000000000000000000000000000000000000000000000000000000005900000000000000000000000000000000000000000000000000000000000000610000000000000000000000000000000000000000000000000000000000000029000000000000000000000000000000000000000000000000000000000000002b000000000000000000000000000000000000000000000000000000000000002f0000000000000000000000000000000000000000000000000000000000000035000000000000000000000000000000000000000000000000000000000000003b000000000000000000000000000000000000000000000000000000000000003d00000000000000000000000000000000000000000000000000000000000000430000000000000000000000000000000000000000000000000000000000000047"
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"key_store": [
|
|
3
|
+
{
|
|
4
|
+
"key": "utf8:0x0e097c323e48522fcbd592590a72a0d4e50f22b3fb1913d19c936439ab74851a-ivpk_m",
|
|
5
|
+
"value": "19e95c05f09cb86d1a6257572f9082ca15d4a02373c4d8c9cee23dc61a4c2a882f9017d51bca6616102d8a1d4dba89e4ce12881a2414576f01d2fec9492814a2"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"key": "utf8:0x0e097c323e48522fcbd592590a72a0d4e50f22b3fb1913d19c936439ab74851a-ivpk_m_hash",
|
|
9
|
+
"value": "2c8a04047c06c447dcf1011ddd80c1d03dc9f70a5fa4645722d086fe82504d76"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"key": "utf8:0x0e097c323e48522fcbd592590a72a0d4e50f22b3fb1913d19c936439ab74851a-ivsk_m",
|
|
13
|
+
"value": "1fb01c42d1aaa2662041b899c77cb19e08192193acc5a94405f1b43c974eba7a"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"key": "utf8:0x0e097c323e48522fcbd592590a72a0d4e50f22b3fb1913d19c936439ab74851a-nhk_m",
|
|
17
|
+
"value": "2dd30220767969b10044b1322585bb4c4df4e0c5d9b4d7b3045a879a8e3e91d2"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"key": "utf8:0x0e097c323e48522fcbd592590a72a0d4e50f22b3fb1913d19c936439ab74851a-npk_m",
|
|
21
|
+
"value": "214c7a24ddf501afc8734c7379ee502296289eb24cd8cd03cd435e128c06be0000987721e0963b4a5bd81ee862e2740d8849fd90537569064d3d3a4640e858d2"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"key": "utf8:0x0e097c323e48522fcbd592590a72a0d4e50f22b3fb1913d19c936439ab74851a-npk_m_hash",
|
|
25
|
+
"value": "0df588690e44b50e4ca694d25b494039b60f09451eaea7aaba97bd4cf8001710"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"key": "utf8:0x0e097c323e48522fcbd592590a72a0d4e50f22b3fb1913d19c936439ab74851a-ovpk_m",
|
|
29
|
+
"value": "2c19ff0b089b07da436e6f7be6b26cdc17b9cee504a528c071ef6a416299683d0b369479d6e50504702d0b56bb56e4e8e0e77171429896651d0c11621e82ebc3"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"key": "utf8:0x0e097c323e48522fcbd592590a72a0d4e50f22b3fb1913d19c936439ab74851a-ovpk_m_hash",
|
|
33
|
+
"value": "2cbd8a987ad7dc81814feabc55abdf40b810161611ad89b705db92f32cf94603"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"key": "utf8:0x0e097c323e48522fcbd592590a72a0d4e50f22b3fb1913d19c936439ab74851a-ovsk_m",
|
|
37
|
+
"value": "279fe6ef7dd2477b919327b1ebab7497c41b9a7ccfa9d5d52e32698e3b85293b"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"key": "utf8:0x0e097c323e48522fcbd592590a72a0d4e50f22b3fb1913d19c936439ab74851a-tpk_m",
|
|
41
|
+
"value": "2fcdd0d194adafd753dc0ed279f5cfb54ddcce1dd581d4631cf343ba9ee6c1ab2858abca6c00da3def156b1f12a6464384e326d5fa724c2fc2ff2b7f3fc8ad5f"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"key": "utf8:0x0e097c323e48522fcbd592590a72a0d4e50f22b3fb1913d19c936439ab74851a-tpk_m_hash",
|
|
45
|
+
"value": "2a0b3526801cd5edcaf6b4ba6e1f0a378b6d78d42a62410e86202fb66b44dd53"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"key": "utf8:0x0e097c323e48522fcbd592590a72a0d4e50f22b3fb1913d19c936439ab74851a-tsk_m",
|
|
49
|
+
"value": "183cb61099458d1564aa57c90c7091ac623a14092ab314150c9cfbb416810320"
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|