@aztec/pxe 0.80.0 → 0.82.0
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/config/package_info.js +1 -1
- package/dest/entrypoints/server/utils.d.ts +15 -7
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +17 -9
- package/dest/{kernel_prover → private_kernel}/hints/build_private_kernel_reset_private_inputs.d.ts +2 -2
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +1 -0
- package/dest/private_kernel/hints/index.d.ts.map +1 -0
- package/dest/private_kernel/index.d.ts +3 -0
- package/dest/private_kernel/index.d.ts.map +1 -0
- package/dest/private_kernel/index.js +2 -0
- package/dest/{kernel_prover/kernel_prover.d.ts → private_kernel/private_kernel_execution_prover.d.ts} +13 -14
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -0
- package/dest/{kernel_prover/kernel_prover.js → private_kernel/private_kernel_execution_prover.js} +64 -64
- package/dest/{kernel_prover/proving_data_oracle.d.ts → private_kernel/private_kernel_oracle.d.ts} +17 -28
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -0
- package/dest/private_kernel/private_kernel_oracle.js +4 -0
- package/dest/{kernel_oracle/index.d.ts → private_kernel/private_kernel_oracle_impl.d.ts} +5 -5
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +1 -0
- package/dest/{kernel_oracle/index.js → private_kernel/private_kernel_oracle_impl.js} +2 -2
- package/dest/pxe_oracle_interface/pxe_oracle_interface.d.ts +14 -22
- package/dest/pxe_oracle_interface/pxe_oracle_interface.d.ts.map +1 -1
- package/dest/pxe_oracle_interface/pxe_oracle_interface.js +51 -107
- package/dest/pxe_service/pxe_service.d.ts +13 -27
- package/dest/pxe_service/pxe_service.d.ts.map +1 -1
- package/dest/pxe_service/pxe_service.js +213 -241
- package/dest/storage/contract_data_provider/contract_data_provider.d.ts +2 -2
- package/dest/storage/contract_data_provider/contract_data_provider.d.ts.map +1 -1
- package/dest/storage/contract_data_provider/contract_data_provider.js +6 -1
- package/dest/storage/contract_data_provider/private_functions_tree.d.ts +2 -2
- package/dest/storage/contract_data_provider/private_functions_tree.d.ts.map +1 -1
- package/dest/storage/index.d.ts +1 -2
- package/dest/storage/index.d.ts.map +1 -1
- package/dest/storage/index.js +1 -2
- package/dest/storage/metadata.d.ts +2 -0
- package/dest/storage/metadata.d.ts.map +1 -0
- package/dest/storage/metadata.js +1 -0
- package/dest/storage/note_data_provider/note_dao.d.ts +9 -13
- package/dest/storage/note_data_provider/note_dao.d.ts.map +1 -1
- package/dest/storage/note_data_provider/note_dao.js +11 -15
- package/dest/storage/note_data_provider/note_data_provider.d.ts +2 -2
- package/dest/storage/note_data_provider/note_data_provider.d.ts.map +1 -1
- package/dest/storage/note_data_provider/note_data_provider.js +18 -19
- package/dest/synchronizer/synchronizer.js +1 -1
- package/package.json +15 -15
- package/src/config/package_info.ts +1 -1
- package/src/entrypoints/server/utils.ts +25 -11
- package/src/{kernel_prover → private_kernel}/hints/build_private_kernel_reset_private_inputs.ts +4 -4
- package/src/private_kernel/index.ts +2 -0
- package/src/{kernel_prover/kernel_prover.ts → private_kernel/private_kernel_execution_prover.ts} +76 -71
- package/src/{kernel_prover/proving_data_oracle.ts → private_kernel/private_kernel_oracle.ts} +17 -29
- package/src/{kernel_oracle/index.ts → private_kernel/private_kernel_oracle_impl.ts} +6 -5
- package/src/pxe_oracle_interface/pxe_oracle_interface.ts +77 -153
- package/src/pxe_service/pxe_service.ts +289 -310
- package/src/storage/contract_data_provider/contract_data_provider.ts +11 -2
- package/src/storage/contract_data_provider/private_functions_tree.ts +2 -2
- package/src/storage/index.ts +1 -3
- package/src/storage/metadata.ts +1 -0
- package/src/storage/note_data_provider/note_dao.ts +9 -18
- package/src/storage/note_data_provider/note_data_provider.ts +22 -28
- package/src/synchronizer/synchronizer.ts +1 -1
- package/dest/kernel_oracle/index.d.ts.map +0 -1
- package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
- package/dest/kernel_prover/hints/index.d.ts.map +0 -1
- package/dest/kernel_prover/index.d.ts +0 -3
- package/dest/kernel_prover/index.d.ts.map +0 -1
- package/dest/kernel_prover/index.js +0 -2
- package/dest/kernel_prover/kernel_prover.d.ts.map +0 -1
- package/dest/kernel_prover/proving_data_oracle.d.ts.map +0 -1
- package/dest/kernel_prover/proving_data_oracle.js +0 -4
- package/dest/note_decryption_utils/add_public_values_to_payload.d.ts +0 -11
- package/dest/note_decryption_utils/add_public_values_to_payload.d.ts.map +0 -1
- package/dest/note_decryption_utils/add_public_values_to_payload.js +0 -47
- package/dest/storage/auth_witness_data_provider/auth_witness_data_provider.d.ts +0 -11
- package/dest/storage/auth_witness_data_provider/auth_witness_data_provider.d.ts.map +0 -1
- package/dest/storage/auth_witness_data_provider/auth_witness_data_provider.js +0 -20
- package/dest/storage/auth_witness_data_provider/index.d.ts +0 -2
- package/dest/storage/auth_witness_data_provider/index.d.ts.map +0 -1
- package/dest/storage/auth_witness_data_provider/index.js +0 -1
- package/src/kernel_prover/index.ts +0 -2
- package/src/note_decryption_utils/add_public_values_to_payload.ts +0 -64
- package/src/storage/auth_witness_data_provider/auth_witness_data_provider.ts +0 -34
- package/src/storage/auth_witness_data_provider/index.ts +0 -1
- /package/dest/{kernel_prover → private_kernel}/hints/build_private_kernel_reset_private_inputs.js +0 -0
- /package/dest/{kernel_prover → private_kernel}/hints/index.d.ts +0 -0
- /package/dest/{kernel_prover → private_kernel}/hints/index.js +0 -0
- /package/src/{kernel_prover → private_kernel}/hints/index.ts +0 -0
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { type L1_TO_L2_MSG_TREE_HEIGHT } from '@aztec/constants';
|
|
2
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
2
|
+
import { Fr, Point } from '@aztec/foundation/fields';
|
|
3
3
|
import type { KeyStore } from '@aztec/key-store';
|
|
4
|
-
import { AcirSimulator, type ExecutionDataProvider, type SimulationProvider } from '@aztec/simulator/client';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
|
+
import { AcirSimulator, type ExecutionDataProvider, MessageLoadOracleInputs, type SimulationProvider } from '@aztec/simulator/client';
|
|
5
|
+
import { type FunctionArtifactWithContractName, FunctionSelector } from '@aztec/stdlib/abi';
|
|
6
|
+
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
8
7
|
import type { L2Block } from '@aztec/stdlib/block';
|
|
9
8
|
import type { CompleteAddress, ContractInstance } from '@aztec/stdlib/contract';
|
|
10
9
|
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
@@ -15,7 +14,6 @@ import { MerkleTreeId, type NullifierMembershipWitness, PublicDataWitness } from
|
|
|
15
14
|
import type { BlockHeader } from '@aztec/stdlib/tx';
|
|
16
15
|
import { TxHash } from '@aztec/stdlib/tx';
|
|
17
16
|
import type { AddressDataProvider } from '../storage/address_data_provider/address_data_provider.js';
|
|
18
|
-
import type { AuthWitnessDataProvider } from '../storage/auth_witness_data_provider/auth_witness_data_provider.js';
|
|
19
17
|
import type { CapsuleDataProvider } from '../storage/capsule_data_provider/capsule_data_provider.js';
|
|
20
18
|
import type { ContractDataProvider } from '../storage/contract_data_provider/contract_data_provider.js';
|
|
21
19
|
import type { NoteDataProvider } from '../storage/note_data_provider/note_data_provider.js';
|
|
@@ -35,13 +33,11 @@ export declare class PXEOracleInterface implements ExecutionDataProvider {
|
|
|
35
33
|
private syncDataProvider;
|
|
36
34
|
private taggingDataProvider;
|
|
37
35
|
private addressDataProvider;
|
|
38
|
-
private authWitnessDataProvider;
|
|
39
36
|
private log;
|
|
40
|
-
constructor(aztecNode: AztecNode, keyStore: KeyStore, simulationProvider: SimulationProvider, contractDataProvider: ContractDataProvider, noteDataProvider: NoteDataProvider, capsuleDataProvider: CapsuleDataProvider, syncDataProvider: SyncDataProvider, taggingDataProvider: TaggingDataProvider, addressDataProvider: AddressDataProvider,
|
|
37
|
+
constructor(aztecNode: AztecNode, keyStore: KeyStore, simulationProvider: SimulationProvider, contractDataProvider: ContractDataProvider, noteDataProvider: NoteDataProvider, capsuleDataProvider: CapsuleDataProvider, syncDataProvider: SyncDataProvider, taggingDataProvider: TaggingDataProvider, addressDataProvider: AddressDataProvider, log?: import("@aztec/foundation/log").Logger);
|
|
41
38
|
getKeyValidationRequest(pkMHash: Fr, contractAddress: AztecAddress): Promise<KeyValidationRequest>;
|
|
42
39
|
getCompleteAddress(account: AztecAddress): Promise<CompleteAddress>;
|
|
43
40
|
getContractInstance(address: AztecAddress): Promise<ContractInstance>;
|
|
44
|
-
getAuthWitness(messageHash: Fr): Promise<Fr[] | undefined>;
|
|
45
41
|
getNotes(contractAddress: AztecAddress, storageSlot: Fr, status: NoteStatus, scopes?: AztecAddress[]): Promise<{
|
|
46
42
|
contractAddress: AztecAddress;
|
|
47
43
|
storageSlot: Fr;
|
|
@@ -51,8 +47,8 @@ export declare class PXEOracleInterface implements ExecutionDataProvider {
|
|
|
51
47
|
siloedNullifier: Fr;
|
|
52
48
|
index: bigint;
|
|
53
49
|
}[]>;
|
|
54
|
-
getFunctionArtifact(contractAddress: AztecAddress, selector: FunctionSelector): Promise<
|
|
55
|
-
getFunctionArtifactByName(contractAddress: AztecAddress, functionName: string): Promise<
|
|
50
|
+
getFunctionArtifact(contractAddress: AztecAddress, selector: FunctionSelector): Promise<FunctionArtifactWithContractName>;
|
|
51
|
+
getFunctionArtifactByName(contractAddress: AztecAddress, functionName: string): Promise<FunctionArtifactWithContractName | undefined>;
|
|
56
52
|
/**
|
|
57
53
|
* Fetches a message from the db, given its key.
|
|
58
54
|
* @param contractAddress - Address of a contract by which the message was emitted.
|
|
@@ -62,21 +58,15 @@ export declare class PXEOracleInterface implements ExecutionDataProvider {
|
|
|
62
58
|
* @returns The l1 to l2 membership witness (index of message in the tree and sibling path).
|
|
63
59
|
*/
|
|
64
60
|
getL1ToL2MembershipWitness(contractAddress: AztecAddress, messageHash: Fr, secret: Fr): Promise<MessageLoadOracleInputs<typeof L1_TO_L2_MSG_TREE_HEIGHT>>;
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
* Gets the index of a commitment in the note hash tree.
|
|
68
|
-
* @param commitment - The commitment.
|
|
69
|
-
* @returns - The index of the commitment. Undefined if it does not exist in the tree.
|
|
70
|
-
*/
|
|
71
|
-
getCommitmentIndex(commitment: Fr): Promise<bigint | undefined>;
|
|
72
|
-
getCommitmentValue(_leafIndex: bigint): Promise<Fr | undefined>;
|
|
61
|
+
getL1ToL2MessageHash(_leafIndex: bigint): Promise<Fr | undefined>;
|
|
62
|
+
getNoteHash(_leafIndex: bigint): Promise<Fr | undefined>;
|
|
73
63
|
getNullifierIndex(nullifier: Fr): Promise<bigint | undefined>;
|
|
74
64
|
getMembershipWitness(blockNumber: number, treeId: MerkleTreeId, leafValue: Fr): Promise<Fr[]>;
|
|
75
65
|
getNullifierMembershipWitnessAtLatestBlock(nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
|
|
76
66
|
getNullifierMembershipWitness(blockNumber: number, nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
|
|
77
67
|
getLowNullifierMembershipWitness(blockNumber: number, nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
|
|
78
68
|
getBlock(blockNumber: number): Promise<L2Block | undefined>;
|
|
79
|
-
|
|
69
|
+
getPublicDataWitness(blockNumber: number, leafSlot: Fr): Promise<PublicDataWitness | undefined>;
|
|
80
70
|
getPublicStorageAt(blockNumber: number, contract: AztecAddress, slot: Fr): Promise<Fr>;
|
|
81
71
|
/**
|
|
82
72
|
* Retrieve the databases view of the Block Header object.
|
|
@@ -143,17 +133,19 @@ export declare class PXEOracleInterface implements ExecutionDataProvider {
|
|
|
143
133
|
syncTaggedLogs(contractAddress: AztecAddress, maxBlockNumber: number, scopes?: AztecAddress[]): Promise<Map<string, TxScopedL2Log[]>>;
|
|
144
134
|
/**
|
|
145
135
|
* Processes the tagged logs returned by syncTaggedLogs by decrypting them and storing them in the database.
|
|
136
|
+
* @param contractAddress - The address of the contract that the logs are tagged for.
|
|
146
137
|
* @param logs - The logs to process.
|
|
147
138
|
* @param recipient - The recipient of the logs.
|
|
148
139
|
*/
|
|
149
|
-
processTaggedLogs(logs: TxScopedL2Log[], recipient: AztecAddress, simulator?: AcirSimulator): Promise<void>;
|
|
140
|
+
processTaggedLogs(contractAddress: AztecAddress, logs: TxScopedL2Log[], recipient: AztecAddress, simulator?: AcirSimulator): Promise<void>;
|
|
150
141
|
deliverNote(contractAddress: AztecAddress, storageSlot: Fr, nonce: Fr, content: Fr[], noteHash: Fr, nullifier: Fr, txHash: Fr, recipient: AztecAddress): Promise<void>;
|
|
151
142
|
getLogByTag(tag: Fr): Promise<LogWithTxData | null>;
|
|
152
143
|
removeNullifiedNotes(contractAddress: AztecAddress): Promise<void>;
|
|
153
|
-
callProcessLog(contractAddress: AztecAddress,
|
|
144
|
+
callProcessLog(contractAddress: AztecAddress, logCiphertext: Fr[], txHash: TxHash, noteHashes: Fr[], firstNullifier: Fr, recipient: AztecAddress, simulator?: AcirSimulator): Promise<void>;
|
|
154
145
|
storeCapsule(contractAddress: AztecAddress, slot: Fr, capsule: Fr[]): Promise<void>;
|
|
155
146
|
loadCapsule(contractAddress: AztecAddress, slot: Fr): Promise<Fr[] | null>;
|
|
156
147
|
deleteCapsule(contractAddress: AztecAddress, slot: Fr): Promise<void>;
|
|
157
148
|
copyCapsule(contractAddress: AztecAddress, srcSlot: Fr, dstSlot: Fr, numEntries: number): Promise<void>;
|
|
149
|
+
getSharedSecret(address: AztecAddress, ephPk: Point): Promise<Point>;
|
|
158
150
|
}
|
|
159
151
|
//# sourceMappingURL=pxe_oracle_interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pxe_oracle_interface.d.ts","sourceRoot":"","sources":["../../src/pxe_oracle_interface/pxe_oracle_interface.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"pxe_oracle_interface.d.ts","sourceRoot":"","sources":["../../src/pxe_oracle_interface/pxe_oracle_interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
import { MAX_NOTE_HASHES_PER_TX, PRIVATE_LOG_SIZE_IN_FIELDS
|
|
1
|
+
import { MAX_NOTE_HASHES_PER_TX, PRIVATE_LOG_SIZE_IN_FIELDS } from '@aztec/constants';
|
|
2
2
|
import { timesParallel } from '@aztec/foundation/collection';
|
|
3
3
|
import { poseidon2Hash } from '@aztec/foundation/crypto';
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { MessageLoadOracleInputs } from '@aztec/simulator/client';
|
|
9
|
-
import { FunctionSelector, FunctionType, NoteSelector, encodeArguments, getFunctionArtifact } from '@aztec/stdlib/abi';
|
|
6
|
+
import { AcirSimulator, MessageLoadOracleInputs } from '@aztec/simulator/client';
|
|
7
|
+
import { FunctionSelector, FunctionType, encodeArguments, getFunctionArtifact } from '@aztec/stdlib/abi';
|
|
10
8
|
import { computeUniqueNoteHash, siloNoteHash, siloNullifier } from '@aztec/stdlib/hash';
|
|
11
9
|
import { computeAddressSecret, computeTaggingSecretPoint } from '@aztec/stdlib/keys';
|
|
12
|
-
import { IndexedTaggingSecret,
|
|
10
|
+
import { IndexedTaggingSecret, LogWithTxData, deriveEcdhSharedSecret } from '@aztec/stdlib/logs';
|
|
13
11
|
import { getNonNullifiedL1ToL2MessageWitness } from '@aztec/stdlib/messaging';
|
|
14
12
|
import { Note } from '@aztec/stdlib/note';
|
|
15
13
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
16
14
|
import { TxHash } from '@aztec/stdlib/tx';
|
|
17
|
-
import { getOrderedNoteItems } from '../note_decryption_utils/add_public_values_to_payload.js';
|
|
18
15
|
import { NoteDao } from '../storage/note_data_provider/note_dao.js';
|
|
19
16
|
import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndexesMap } from './tagging_utils.js';
|
|
20
17
|
/**
|
|
@@ -29,9 +26,8 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
29
26
|
syncDataProvider;
|
|
30
27
|
taggingDataProvider;
|
|
31
28
|
addressDataProvider;
|
|
32
|
-
authWitnessDataProvider;
|
|
33
29
|
log;
|
|
34
|
-
constructor(aztecNode, keyStore, simulationProvider, contractDataProvider, noteDataProvider, capsuleDataProvider, syncDataProvider, taggingDataProvider, addressDataProvider,
|
|
30
|
+
constructor(aztecNode, keyStore, simulationProvider, contractDataProvider, noteDataProvider, capsuleDataProvider, syncDataProvider, taggingDataProvider, addressDataProvider, log = createLogger('pxe:pxe_oracle_interface')){
|
|
35
31
|
this.aztecNode = aztecNode;
|
|
36
32
|
this.keyStore = keyStore;
|
|
37
33
|
this.simulationProvider = simulationProvider;
|
|
@@ -41,7 +37,6 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
41
37
|
this.syncDataProvider = syncDataProvider;
|
|
42
38
|
this.taggingDataProvider = taggingDataProvider;
|
|
43
39
|
this.addressDataProvider = addressDataProvider;
|
|
44
|
-
this.authWitnessDataProvider = authWitnessDataProvider;
|
|
45
40
|
this.log = log;
|
|
46
41
|
}
|
|
47
42
|
getKeyValidationRequest(pkMHash, contractAddress) {
|
|
@@ -62,10 +57,6 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
62
57
|
}
|
|
63
58
|
return instance;
|
|
64
59
|
}
|
|
65
|
-
async getAuthWitness(messageHash) {
|
|
66
|
-
const witness = await this.authWitnessDataProvider.getAuthWitness(messageHash);
|
|
67
|
-
return witness;
|
|
68
|
-
}
|
|
69
60
|
async getNotes(contractAddress, storageSlot, status, scopes) {
|
|
70
61
|
const noteDaos = await this.noteDataProvider.getNotes({
|
|
71
62
|
contractAddress,
|
|
@@ -110,18 +101,11 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
110
101
|
return new MessageLoadOracleInputs(messageIndex, siblingPath);
|
|
111
102
|
}
|
|
112
103
|
// Only used in public.
|
|
113
|
-
|
|
104
|
+
getL1ToL2MessageHash(_leafIndex) {
|
|
114
105
|
throw new Error('Unimplemented in private!');
|
|
115
106
|
}
|
|
116
|
-
/**
|
|
117
|
-
* Gets the index of a commitment in the note hash tree.
|
|
118
|
-
* @param commitment - The commitment.
|
|
119
|
-
* @returns - The index of the commitment. Undefined if it does not exist in the tree.
|
|
120
|
-
*/ async getCommitmentIndex(commitment) {
|
|
121
|
-
return await this.#findLeafIndex('latest', MerkleTreeId.NOTE_HASH_TREE, commitment);
|
|
122
|
-
}
|
|
123
107
|
// We need this in public as part of the EXISTS calls - but isn't used in private
|
|
124
|
-
|
|
108
|
+
getNoteHash(_leafIndex) {
|
|
125
109
|
throw new Error('Unimplemented in private!');
|
|
126
110
|
}
|
|
127
111
|
async getNullifierIndex(nullifier) {
|
|
@@ -131,7 +115,7 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
131
115
|
const [leafIndex] = await this.aztecNode.findLeavesIndexes(blockNumber, treeId, [
|
|
132
116
|
leafValue
|
|
133
117
|
]);
|
|
134
|
-
return leafIndex;
|
|
118
|
+
return leafIndex?.data;
|
|
135
119
|
}
|
|
136
120
|
async getMembershipWitness(blockNumber, treeId, leafValue) {
|
|
137
121
|
const leafIndex = await this.#findLeafIndex(blockNumber, treeId, leafValue);
|
|
@@ -170,8 +154,8 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
170
154
|
async getBlock(blockNumber) {
|
|
171
155
|
return await this.aztecNode.getBlock(blockNumber);
|
|
172
156
|
}
|
|
173
|
-
async
|
|
174
|
-
return await this.aztecNode.
|
|
157
|
+
async getPublicDataWitness(blockNumber, leafSlot) {
|
|
158
|
+
return await this.aztecNode.getPublicDataWitness(blockNumber, leafSlot);
|
|
175
159
|
}
|
|
176
160
|
async getPublicStorageAt(blockNumber, contract, slot) {
|
|
177
161
|
return await this.aztecNode.getPublicStorageAt(blockNumber, contract, slot);
|
|
@@ -365,7 +349,7 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
365
349
|
const recipients = scopes ? scopes : await this.keyStore.getAccounts();
|
|
366
350
|
// A map of logs going from recipient address to logs. Note that the logs might have been processed before
|
|
367
351
|
// due to us having a sliding window that "looks back" for logs as well. (We look back as there is no guarantee
|
|
368
|
-
// that a logs will be received ordered by a given
|
|
352
|
+
// that a logs will be received ordered by a given tag index and that the tags won't be reused).
|
|
369
353
|
const logsMap = new Map();
|
|
370
354
|
const contractName = await this.contractDataProvider.getDebugContractName(contractAddress);
|
|
371
355
|
for (const recipient of recipients){
|
|
@@ -401,19 +385,18 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
401
385
|
const logsByTags = await this.aztecNode.getLogsByTags(tagsForTheWholeWindow);
|
|
402
386
|
logsByTags.forEach((logsByTag, logIndex)=>{
|
|
403
387
|
if (logsByTag.length > 0) {
|
|
404
|
-
//
|
|
405
|
-
const
|
|
406
|
-
if (
|
|
407
|
-
|
|
408
|
-
this.log.warn(`Discarded ${logsByTag.length - checkedLogsbyTag.length} public logs with mismatched contract address ${contractAddress}:`, discarded.map((l)=>PublicLog.fromBuffer(l.logData)));
|
|
388
|
+
// Discard public logs
|
|
389
|
+
const filteredLogsByTag = logsByTag.filter((l)=>!l.isFromPublic);
|
|
390
|
+
if (filteredLogsByTag.length < logsByTag.length) {
|
|
391
|
+
this.log.warn(`Discarded ${logsByTag.filter((l)=>l.isFromPublic).length} public logs with matching tags`);
|
|
409
392
|
}
|
|
410
393
|
// The logs for the given tag exist so we store them for later processing
|
|
411
|
-
logsForRecipient.push(...
|
|
394
|
+
logsForRecipient.push(...filteredLogsByTag);
|
|
412
395
|
// We retrieve the indexed tagging secret corresponding to the log as I need that to evaluate whether
|
|
413
396
|
// a new largest index have been found.
|
|
414
397
|
const secretCorrespondingToLog = secretsForTheWholeWindow[logIndex];
|
|
415
398
|
const initialIndex = initialIndexesMap[secretCorrespondingToLog.appTaggingSecret.toString()];
|
|
416
|
-
this.log.debug(`Found ${
|
|
399
|
+
this.log.debug(`Found ${filteredLogsByTag.length} logs as recipient ${recipient}`, {
|
|
417
400
|
recipient,
|
|
418
401
|
secret: secretCorrespondingToLog.appTaggingSecret,
|
|
419
402
|
contractName,
|
|
@@ -457,61 +440,24 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
457
440
|
return logsMap;
|
|
458
441
|
}
|
|
459
442
|
/**
|
|
460
|
-
* Decrypts logs tagged for a recipient and returns them.
|
|
461
|
-
* @param scopedLogs - The logs to decrypt.
|
|
462
|
-
* @param recipient - The recipient of the logs.
|
|
463
|
-
* @returns The decrypted notes.
|
|
464
|
-
*/ async #decryptTaggedLogs(scopedLogs, recipient) {
|
|
465
|
-
const recipientCompleteAddress = await this.getCompleteAddress(recipient);
|
|
466
|
-
const ivskM = await this.keyStore.getMasterSecretKey(recipientCompleteAddress.publicKeys.masterIncomingViewingPublicKey);
|
|
467
|
-
const addressSecret = await computeAddressSecret(await recipientCompleteAddress.getPreaddress(), ivskM);
|
|
468
|
-
// Since we could have notes with the same index for different txs, we need
|
|
469
|
-
// to keep track of them scoping by txHash
|
|
470
|
-
const excludedIndices = new Map();
|
|
471
|
-
const decrypted = [];
|
|
472
|
-
for (const scopedLog of scopedLogs){
|
|
473
|
-
const payload = scopedLog.isFromPublic ? await L1NotePayload.decryptAsIncomingFromPublic(PublicLog.fromBuffer(scopedLog.logData), addressSecret) : await L1NotePayload.decryptAsIncoming(PrivateLog.fromBuffer(scopedLog.logData), addressSecret);
|
|
474
|
-
if (!payload) {
|
|
475
|
-
this.log.verbose('Unable to decrypt log');
|
|
476
|
-
continue;
|
|
477
|
-
}
|
|
478
|
-
if (!excludedIndices.has(scopedLog.txHash.toString())) {
|
|
479
|
-
excludedIndices.set(scopedLog.txHash.toString(), new Set());
|
|
480
|
-
}
|
|
481
|
-
const note = await getOrderedNoteItems(this.contractDataProvider, payload);
|
|
482
|
-
const plaintext = [
|
|
483
|
-
payload.storageSlot,
|
|
484
|
-
payload.noteTypeId.toField(),
|
|
485
|
-
...note.items
|
|
486
|
-
];
|
|
487
|
-
decrypted.push({
|
|
488
|
-
plaintext,
|
|
489
|
-
txHash: scopedLog.txHash,
|
|
490
|
-
contractAddress: payload.contractAddress
|
|
491
|
-
});
|
|
492
|
-
}
|
|
493
|
-
return decrypted;
|
|
494
|
-
}
|
|
495
|
-
/**
|
|
496
443
|
* Processes the tagged logs returned by syncTaggedLogs by decrypting them and storing them in the database.
|
|
444
|
+
* @param contractAddress - The address of the contract that the logs are tagged for.
|
|
497
445
|
* @param logs - The logs to process.
|
|
498
446
|
* @param recipient - The recipient of the logs.
|
|
499
|
-
*/ async processTaggedLogs(logs, recipient, simulator) {
|
|
500
|
-
const
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
// contract for further processing.
|
|
505
|
-
for (const decryptedLog of decryptedLogs){
|
|
447
|
+
*/ async processTaggedLogs(contractAddress, logs, recipient, simulator) {
|
|
448
|
+
for (const scopedLog of logs){
|
|
449
|
+
if (scopedLog.isFromPublic) {
|
|
450
|
+
throw new Error('Attempted to decrypt public log');
|
|
451
|
+
}
|
|
506
452
|
// Log processing requires the note hashes in the tx in which the note was created. We are now assuming that the
|
|
507
453
|
// note was included in the same block in which the log was delivered - note that partial notes will not work this
|
|
508
454
|
// way.
|
|
509
|
-
const txEffect = await this.aztecNode.getTxEffect(
|
|
455
|
+
const txEffect = await this.aztecNode.getTxEffect(scopedLog.txHash);
|
|
510
456
|
if (!txEffect) {
|
|
511
|
-
throw new Error(`Could not find tx effect for tx hash ${
|
|
457
|
+
throw new Error(`Could not find tx effect for tx hash ${scopedLog.txHash}`);
|
|
512
458
|
}
|
|
513
459
|
// This will trigger calls to the deliverNote oracle
|
|
514
|
-
await this.callProcessLog(
|
|
460
|
+
await this.callProcessLog(contractAddress, scopedLog.log.toFields(), scopedLog.txHash, txEffect.data.noteHashes, txEffect.data.nullifiers[0], recipient, simulator);
|
|
515
461
|
}
|
|
516
462
|
return;
|
|
517
463
|
}
|
|
@@ -542,23 +488,13 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
542
488
|
const siloedNullifier = await siloNullifier(contractAddress, nullifier);
|
|
543
489
|
// We store notes by their index in the global note hash tree, which has the convenient side effect of validating
|
|
544
490
|
// note existence in said tree.
|
|
545
|
-
const [
|
|
491
|
+
const [uniqueNoteHashTreeIndexInBlock] = await this.aztecNode.findLeavesIndexes(syncedBlockNumber, MerkleTreeId.NOTE_HASH_TREE, [
|
|
546
492
|
uniqueNoteHash
|
|
547
493
|
]);
|
|
548
|
-
if (
|
|
494
|
+
if (uniqueNoteHashTreeIndexInBlock === undefined) {
|
|
549
495
|
throw new Error(`Note hash ${noteHash} (uniqued as ${uniqueNoteHash}) is not present on the tree at block ${syncedBlockNumber} (from tx ${txHash})`);
|
|
550
496
|
}
|
|
551
|
-
|
|
552
|
-
// would save us from having to then query the tx receipt in order to get the block hash and number. Note regardless
|
|
553
|
-
// that we're not validating that the note was indeed created in this tx (which would require inspecting the tx
|
|
554
|
-
// effects), so maybe what we really want is an InTx.
|
|
555
|
-
const txReceipt = await this.aztecNode.getTxReceipt(new TxHash(txHash));
|
|
556
|
-
if (txReceipt === undefined) {
|
|
557
|
-
throw new Error(`Failed to fetch tx receipt for tx hash ${txHash} when searching for note hashes`);
|
|
558
|
-
}
|
|
559
|
-
// TODO(#12549): does it make sense to store the recipient's address point instead of just its address?
|
|
560
|
-
const recipientAddressPoint = await recipient.toAddressPoint();
|
|
561
|
-
const noteDao = new NoteDao(new Note(content), contractAddress, storageSlot, nonce, noteHash, siloedNullifier, new TxHash(txHash), txReceipt.blockNumber, txReceipt.blockHash.toString(), uniqueNoteHashTreeIndex, recipientAddressPoint, NoteSelector.empty());
|
|
497
|
+
const noteDao = new NoteDao(new Note(content), contractAddress, storageSlot, nonce, noteHash, siloedNullifier, new TxHash(txHash), uniqueNoteHashTreeIndexInBlock?.l2BlockNumber, uniqueNoteHashTreeIndexInBlock?.l2BlockHash, uniqueNoteHashTreeIndexInBlock?.data, recipient);
|
|
562
498
|
await this.noteDataProvider.addNotes([
|
|
563
499
|
noteDao
|
|
564
500
|
], recipient);
|
|
@@ -568,7 +504,7 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
568
504
|
noteHash: noteDao.noteHash,
|
|
569
505
|
nullifier: noteDao.siloedNullifier.toString()
|
|
570
506
|
});
|
|
571
|
-
const [nullifierIndex] = await this.aztecNode.
|
|
507
|
+
const [nullifierIndex] = await this.aztecNode.findLeavesIndexes(syncedBlockNumber, MerkleTreeId.NULLIFIER_TREE, [
|
|
572
508
|
siloedNullifier
|
|
573
509
|
]);
|
|
574
510
|
if (nullifierIndex !== undefined) {
|
|
@@ -578,7 +514,7 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
578
514
|
data: siloedNullifier,
|
|
579
515
|
...blockHashAndNum
|
|
580
516
|
}
|
|
581
|
-
],
|
|
517
|
+
], recipient);
|
|
582
518
|
this.log.verbose(`Removed just-added note`, {
|
|
583
519
|
contract: contractAddress,
|
|
584
520
|
slot: storageSlot,
|
|
@@ -599,23 +535,24 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
599
535
|
// TODO(#11627): handle this case
|
|
600
536
|
throw new Error(`Got ${logsForTag.length} logs for tag ${tag}. getLogByTag currently only supports a single log per tag`);
|
|
601
537
|
}
|
|
602
|
-
const
|
|
538
|
+
const scopedLog = logsForTag[0];
|
|
603
539
|
// getLogsByTag doesn't have all of the information that we need (notably note hashes and the first nullifier), so
|
|
604
540
|
// we need to make a second call to the node for `getTxEffect`.
|
|
605
541
|
// TODO(#9789): bundle this information in the `getLogsByTag` call.
|
|
606
|
-
const txEffect = await this.aztecNode.getTxEffect(
|
|
542
|
+
const txEffect = await this.aztecNode.getTxEffect(scopedLog.txHash);
|
|
607
543
|
if (txEffect == undefined) {
|
|
608
|
-
throw new Error(`Unexpected: failed to retrieve tx effects for tx ${
|
|
544
|
+
throw new Error(`Unexpected: failed to retrieve tx effects for tx ${scopedLog.txHash} which is known to exist`);
|
|
609
545
|
}
|
|
610
|
-
const reader = BufferReader.asReader(log.logData);
|
|
611
|
-
const logArray = reader.readArray(PUBLIC_LOG_DATA_SIZE_IN_FIELDS, Fr);
|
|
612
546
|
// Public logs always take up all available fields by padding with zeroes, and the length of the originally emitted
|
|
613
547
|
// log is lost. Until this is improved, we simply remove all of the zero elements (which are expected to be at the
|
|
614
548
|
// end).
|
|
615
549
|
// TODO(#11636): use the actual log length.
|
|
616
|
-
const trimmedLog =
|
|
617
|
-
return new LogWithTxData(trimmedLog,
|
|
550
|
+
const trimmedLog = scopedLog.log.toFields().filter((x)=>!x.isZero());
|
|
551
|
+
return new LogWithTxData(trimmedLog, scopedLog.txHash.hash, txEffect.data.noteHashes, txEffect.data.nullifiers[0]);
|
|
618
552
|
}
|
|
553
|
+
// TODO(#12553): nuke this as part of tackling that issue. This function is no longer unit tested as I had to remove
|
|
554
|
+
// it from pxe_oracle_interface.test.ts when moving decryption to Noir (at that point we could not get a hold of
|
|
555
|
+
// the decrypted note in the test as TS decryption no longer existed).
|
|
619
556
|
async removeNullifiedNotes(contractAddress) {
|
|
620
557
|
this.log.verbose('Searching for nullifiers of known notes', {
|
|
621
558
|
contract: contractAddress
|
|
@@ -623,10 +560,10 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
623
560
|
for (const recipient of (await this.keyStore.getAccounts())){
|
|
624
561
|
const currentNotesForRecipient = await this.noteDataProvider.getNotes({
|
|
625
562
|
contractAddress,
|
|
626
|
-
|
|
563
|
+
recipient
|
|
627
564
|
});
|
|
628
565
|
const nullifiersToCheck = currentNotesForRecipient.map((note)=>note.siloedNullifier);
|
|
629
|
-
const nullifierIndexes = await this.aztecNode.
|
|
566
|
+
const nullifierIndexes = await this.aztecNode.findLeavesIndexes('latest', MerkleTreeId.NULLIFIER_TREE, nullifiersToCheck);
|
|
630
567
|
const foundNullifiers = nullifiersToCheck.map((nullifier, i)=>{
|
|
631
568
|
if (nullifierIndexes[i] !== undefined) {
|
|
632
569
|
return {
|
|
@@ -637,7 +574,7 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
637
574
|
};
|
|
638
575
|
}
|
|
639
576
|
}).filter((nullifier)=>nullifier !== undefined);
|
|
640
|
-
const nullifiedNotes = await this.noteDataProvider.removeNullifiedNotes(foundNullifiers,
|
|
577
|
+
const nullifiedNotes = await this.noteDataProvider.removeNullifiedNotes(foundNullifiers, recipient);
|
|
641
578
|
nullifiedNotes.forEach((noteDao)=>{
|
|
642
579
|
this.log.verbose(`Removed note for contract ${noteDao.contractAddress} at slot ${noteDao.storageSlot}`, {
|
|
643
580
|
contract: noteDao.contractAddress,
|
|
@@ -647,7 +584,7 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
647
584
|
});
|
|
648
585
|
}
|
|
649
586
|
}
|
|
650
|
-
async callProcessLog(contractAddress,
|
|
587
|
+
async callProcessLog(contractAddress, logCiphertext, txHash, noteHashes, firstNullifier, recipient, simulator) {
|
|
651
588
|
const artifact = await this.contractDataProvider.getFunctionArtifactByName(contractAddress, 'process_log');
|
|
652
589
|
if (!artifact) {
|
|
653
590
|
throw new Error(`Mandatory implementation of "process_log" missing in noir contract ${contractAddress.toString()}.`);
|
|
@@ -660,7 +597,7 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
660
597
|
type: FunctionType.UNCONSTRAINED,
|
|
661
598
|
isStatic: artifact.isStatic,
|
|
662
599
|
args: encodeArguments(artifact, [
|
|
663
|
-
toBoundedVec(
|
|
600
|
+
toBoundedVec(logCiphertext, PRIVATE_LOG_SIZE_IN_FIELDS),
|
|
664
601
|
txHash.toString(),
|
|
665
602
|
toBoundedVec(noteHashes, MAX_NOTE_HASHES_PER_TX),
|
|
666
603
|
firstNullifier,
|
|
@@ -682,6 +619,13 @@ import { WINDOW_HALF_SIZE, getIndexedTaggingSecretsForTheWindow, getInitialIndex
|
|
|
682
619
|
copyCapsule(contractAddress, srcSlot, dstSlot, numEntries) {
|
|
683
620
|
return this.capsuleDataProvider.copyCapsule(contractAddress, srcSlot, dstSlot, numEntries);
|
|
684
621
|
}
|
|
622
|
+
async getSharedSecret(address, ephPk) {
|
|
623
|
+
// TODO(#12656): return an app-siloed secret
|
|
624
|
+
const recipientCompleteAddress = await this.getCompleteAddress(address);
|
|
625
|
+
const ivskM = await this.keyStore.getMasterSecretKey(recipientCompleteAddress.publicKeys.masterIncomingViewingPublicKey);
|
|
626
|
+
const addressSecret = await computeAddressSecret(await recipientCompleteAddress.getPreaddress(), ivskM);
|
|
627
|
+
return deriveEcdhSharedSecret(addressSecret, ephPk);
|
|
628
|
+
}
|
|
685
629
|
}
|
|
686
630
|
function toBoundedVec(array, maxLength) {
|
|
687
631
|
return {
|
|
@@ -14,7 +14,7 @@ import type { GasFees } from '@aztec/stdlib/gas';
|
|
|
14
14
|
import type { AztecNode, EventMetadataDefinition, GetContractClassLogsResponse, GetPublicLogsResponse, PXE, PXEInfo, PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
|
|
15
15
|
import type { LogFilter } from '@aztec/stdlib/logs';
|
|
16
16
|
import { type NotesFilter, UniqueNote } from '@aztec/stdlib/note';
|
|
17
|
-
import { PrivateExecutionResult,
|
|
17
|
+
import { PrivateExecutionResult, Tx, type TxEffect, TxExecutionRequest, type TxHash, TxProfileResult, TxProvingResult, type TxReceipt, TxSimulationResult } from '@aztec/stdlib/tx';
|
|
18
18
|
import type { PXEServiceConfig } from '../config/index.js';
|
|
19
19
|
/**
|
|
20
20
|
* A Private eXecution Environment (PXE) implementation.
|
|
@@ -30,7 +30,6 @@ export declare class PXEService implements PXE {
|
|
|
30
30
|
private syncDataProvider;
|
|
31
31
|
private taggingDataProvider;
|
|
32
32
|
private addressDataProvider;
|
|
33
|
-
private authWitnessDataProvider;
|
|
34
33
|
private simulator;
|
|
35
34
|
private packageVersion;
|
|
36
35
|
private proverEnabled;
|
|
@@ -48,11 +47,17 @@ export declare class PXEService implements PXE {
|
|
|
48
47
|
*/
|
|
49
48
|
static create(node: AztecNode, store: AztecAsyncKVStore, proofCreator: PrivateKernelProver, simulationProvider: SimulationProvider, protocolContractsProvider: ProtocolContractsProvider, config: PXEServiceConfig, loggerOrSuffix?: string | Logger): Promise<PXEService>;
|
|
50
49
|
isL1ToL2MessageSynced(l1ToL2Message: Fr): Promise<boolean>;
|
|
50
|
+
getL2ToL1MembershipWitness(blockNumber: number, l2Tol1Message: Fr): Promise<[bigint, SiblingPath<number>]>;
|
|
51
|
+
getTxReceipt(txHash: TxHash): Promise<TxReceipt>;
|
|
52
|
+
getTxEffect(txHash: TxHash): Promise<InBlock<TxEffect> | undefined>;
|
|
53
|
+
getBlockNumber(): Promise<number>;
|
|
54
|
+
getProvenBlockNumber(): Promise<number>;
|
|
55
|
+
getPublicLogs(filter: LogFilter): Promise<GetPublicLogsResponse>;
|
|
56
|
+
getContractClassLogs(filter: LogFilter): Promise<GetContractClassLogsResponse>;
|
|
57
|
+
getPublicStorageAt(contract: AztecAddress, slot: Fr): Promise<Fr>;
|
|
58
|
+
getL1ToL2MembershipWitness(contractAddress: AztecAddress, messageHash: Fr, secret: Fr): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>]>;
|
|
51
59
|
/** Returns an estimate of the db size in bytes. */
|
|
52
60
|
estimateDbSize(): Promise<number>;
|
|
53
|
-
addAuthWitness(witness: AuthWitness): Promise<void>;
|
|
54
|
-
getAuthWitness(messageHash: Fr): Promise<Fr[] | undefined>;
|
|
55
|
-
storeCapsule(contract: AztecAddress, storageSlot: Fr, capsule: Fr[]): Promise<void>;
|
|
56
61
|
getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined>;
|
|
57
62
|
getContractClassMetadata(id: Fr, includeArtifact?: boolean): Promise<{
|
|
58
63
|
contractClass: ContractClassWithId | undefined;
|
|
@@ -76,37 +81,18 @@ export declare class PXEService implements PXE {
|
|
|
76
81
|
}): Promise<void>;
|
|
77
82
|
updateContract(contractAddress: AztecAddress, artifact: ContractArtifact): Promise<void>;
|
|
78
83
|
getContracts(): Promise<AztecAddress[]>;
|
|
79
|
-
getPublicStorageAt(contract: AztecAddress, slot: Fr): Promise<Fr>;
|
|
80
84
|
getNotes(filter: NotesFilter): Promise<UniqueNote[]>;
|
|
81
|
-
getL1ToL2MembershipWitness(contractAddress: AztecAddress, messageHash: Fr, secret: Fr): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>]>;
|
|
82
|
-
getL2ToL1MembershipWitness(blockNumber: number, l2Tol1Message: Fr): Promise<[bigint, SiblingPath<number>]>;
|
|
83
85
|
getBlock(blockNumber: number): Promise<L2Block | undefined>;
|
|
84
86
|
getCurrentBaseFees(): Promise<GasFees>;
|
|
85
87
|
proveTx(txRequest: TxExecutionRequest, privateExecutionResult: PrivateExecutionResult): Promise<TxProvingResult>;
|
|
86
|
-
|
|
88
|
+
profileTx(txRequest: TxExecutionRequest, profileMode: 'full' | 'execution-steps' | 'gates', msgSender?: AztecAddress): Promise<TxProfileResult>;
|
|
89
|
+
simulateTx(txRequest: TxExecutionRequest, simulatePublic: boolean, msgSender?: AztecAddress | undefined, skipTxValidation?: boolean, skipFeeEnforcement?: boolean, scopes?: AztecAddress[]): Promise<TxSimulationResult>;
|
|
87
90
|
sendTx(tx: Tx): Promise<TxHash>;
|
|
88
|
-
simulateUnconstrained(functionName: string, args: any[], to: AztecAddress, _from?: AztecAddress, scopes?: AztecAddress[]): Promise<AbiDecoded>;
|
|
89
|
-
getTxReceipt(txHash: TxHash): Promise<TxReceipt>;
|
|
90
|
-
getTxEffect(txHash: TxHash): Promise<InBlock<TxEffect> | undefined>;
|
|
91
|
-
getBlockNumber(): Promise<number>;
|
|
92
|
-
getProvenBlockNumber(): Promise<number>;
|
|
93
|
-
/**
|
|
94
|
-
* Gets public logs based on the provided filter.
|
|
95
|
-
* @param filter - The filter to apply to the logs.
|
|
96
|
-
* @returns The requested logs.
|
|
97
|
-
*/
|
|
98
|
-
getPublicLogs(filter: LogFilter): Promise<GetPublicLogsResponse>;
|
|
99
|
-
/**
|
|
100
|
-
* Gets contract class logs based on the provided filter.
|
|
101
|
-
* @param filter - The filter to apply to the logs.
|
|
102
|
-
* @returns The requested logs.
|
|
103
|
-
*/
|
|
104
|
-
getContractClassLogs(filter: LogFilter): Promise<GetContractClassLogsResponse>;
|
|
91
|
+
simulateUnconstrained(functionName: string, args: any[], to: AztecAddress, authwits?: AuthWitness[], _from?: AztecAddress, scopes?: AztecAddress[]): Promise<AbiDecoded>;
|
|
105
92
|
getNodeInfo(): Promise<NodeInfo>;
|
|
106
93
|
getPXEInfo(): Promise<PXEInfo>;
|
|
107
94
|
getPrivateEvents<T>(eventMetadataDef: EventMetadataDefinition, from: number, limit: number, vpks: Point[]): Promise<T[]>;
|
|
108
95
|
getPublicEvents<T>(eventMetadataDef: EventMetadataDefinition, from: number, limit: number): Promise<T[]>;
|
|
109
96
|
resetNoteSyncData(): Promise<void>;
|
|
110
|
-
private contextualizeError;
|
|
111
97
|
}
|
|
112
98
|
//# sourceMappingURL=pxe_service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pxe_service.d.ts","sourceRoot":"","sources":["../../src/pxe_service/pxe_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,EAAE,EAAE,KAAK,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAEL,KAAK,yBAAyB,EAE/B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAiB,KAAK,kBAAkB,EAAsB,MAAM,yBAAyB,CAAC;AACrG,OAAO,EACL,KAAK,UAAU,EACf,KAAK,gBAAgB,EAOtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAChC,KAAK,QAAQ,EACb,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"pxe_service.d.ts","sourceRoot":"","sources":["../../src/pxe_service/pxe_service.ts"],"names":[],"mappings":"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"}
|