@aztec/pxe 0.20.0 → 0.22.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/README.md +1 -1
- package/dest/config/index.d.ts +1 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +3 -3
- package/dest/contract_data_oracle/index.d.ts +10 -14
- package/dest/contract_data_oracle/index.d.ts.map +1 -1
- package/dest/contract_data_oracle/index.js +26 -23
- package/dest/contract_data_oracle/private_functions_tree.d.ts +71 -0
- package/dest/contract_data_oracle/private_functions_tree.d.ts.map +1 -0
- package/dest/contract_data_oracle/private_functions_tree.js +97 -0
- package/dest/contract_database/memory_contract_database.js +3 -3
- package/dest/database/contracts/contract_artifact_db.d.ts +19 -0
- package/dest/database/contracts/contract_artifact_db.d.ts.map +1 -0
- package/dest/database/contracts/contract_artifact_db.js +2 -0
- package/dest/database/contracts/contract_instance_db.d.ts +18 -0
- package/dest/database/contracts/contract_instance_db.d.ts.map +1 -0
- package/dest/database/contracts/contract_instance_db.js +2 -0
- package/dest/database/index.d.ts +0 -1
- package/dest/database/index.d.ts.map +1 -1
- package/dest/database/index.js +1 -2
- package/dest/database/kv_pxe_database.d.ts +11 -10
- package/dest/database/kv_pxe_database.d.ts.map +1 -1
- package/dest/database/kv_pxe_database.js +173 -132
- package/dest/database/note_dao.d.ts +1 -1
- package/dest/database/note_dao.d.ts.map +1 -1
- package/dest/database/note_dao.js +1 -1
- package/dest/database/pxe_database.d.ts +8 -17
- package/dest/database/pxe_database.d.ts.map +1 -1
- package/dest/database/pxe_database_test_suite.d.ts.map +1 -1
- package/dest/database/pxe_database_test_suite.js +53 -26
- package/dest/kernel_oracle/index.d.ts +15 -4
- package/dest/kernel_oracle/index.d.ts.map +1 -1
- package/dest/kernel_oracle/index.js +20 -9
- package/dest/kernel_prover/kernel_prover.d.ts +2 -1
- package/dest/kernel_prover/kernel_prover.d.ts.map +1 -1
- package/dest/kernel_prover/kernel_prover.js +34 -7
- package/dest/kernel_prover/proving_data_oracle.d.ts +20 -12
- package/dest/kernel_prover/proving_data_oracle.d.ts.map +1 -1
- package/dest/note_processor/note_processor.d.ts +1 -1
- package/dest/note_processor/note_processor.d.ts.map +1 -1
- package/dest/note_processor/note_processor.js +2 -2
- package/dest/note_processor/produce_note_dao.d.ts +1 -1
- package/dest/note_processor/produce_note_dao.d.ts.map +1 -1
- package/dest/note_processor/produce_note_dao.js +1 -1
- package/dest/pxe_http/pxe_http_server.d.ts +0 -23
- package/dest/pxe_http/pxe_http_server.d.ts.map +1 -1
- package/dest/pxe_http/pxe_http_server.js +2 -4
- package/dest/pxe_service/create_pxe_service.d.ts.map +1 -1
- package/dest/pxe_service/create_pxe_service.js +3 -3
- package/dest/pxe_service/pxe_service.d.ts +3 -0
- package/dest/pxe_service/pxe_service.d.ts.map +1 -1
- package/dest/pxe_service/pxe_service.js +28 -13
- package/dest/pxe_service/test/pxe_test_suite.js +2 -2
- package/dest/simulator/index.d.ts +3 -3
- package/dest/simulator/index.d.ts.map +1 -1
- package/dest/simulator/index.js +5 -5
- package/dest/simulator_oracle/index.d.ts +9 -9
- package/dest/simulator_oracle/index.d.ts.map +1 -1
- package/dest/simulator_oracle/index.js +31 -31
- package/dest/synchronizer/synchronizer.d.ts +1 -1
- package/dest/synchronizer/synchronizer.d.ts.map +1 -1
- package/dest/synchronizer/synchronizer.js +7 -15
- package/package.json +12 -11
- package/dest/contract_tree/index.d.ts +0 -108
- package/dest/contract_tree/index.d.ts.map +0 -1
- package/dest/contract_tree/index.js +0 -176
- package/dest/database/memory_db.d.ts +0 -59
- package/dest/database/memory_db.d.ts.map +0 -1
- package/dest/database/memory_db.js +0 -170
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
import { ContractDao, MerkleTreeId } from '@aztec/circuit-types';
|
|
2
|
-
import { CONTRACT_TREE_HEIGHT, FUNCTION_TREE_HEIGHT, FunctionData, MembershipWitness, NewContractData, computeFunctionTreeData, generateFunctionLeaves, hashVKStr, isConstrained, isConstructor, } from '@aztec/circuits.js';
|
|
3
|
-
import { computeCompleteAddress, computeContractLeaf, computeFunctionTree, computeFunctionTreeRoot, computeVarArgsHash, hashConstructor, } from '@aztec/circuits.js/abis';
|
|
4
|
-
import { FunctionSelector } from '@aztec/foundation/abi';
|
|
5
|
-
import { assertLength } from '@aztec/foundation/serialize';
|
|
6
|
-
/**
|
|
7
|
-
* The ContractTree class represents a Merkle tree of functions for a particular contract.
|
|
8
|
-
* It manages the construction of the function tree, computes its root, and generates membership witnesses
|
|
9
|
-
* for constrained functions. This class also enables lookup of specific function artifact using selectors.
|
|
10
|
-
* It is used in combination with the AztecNode to compute various data for executing private transactions.
|
|
11
|
-
*/
|
|
12
|
-
export class ContractTree {
|
|
13
|
-
constructor(
|
|
14
|
-
/**
|
|
15
|
-
* The contract data object containing the artifact and contract address.
|
|
16
|
-
*/
|
|
17
|
-
contract, stateInfoProvider,
|
|
18
|
-
/**
|
|
19
|
-
* Data associated with the contract constructor for a new contract.
|
|
20
|
-
*/
|
|
21
|
-
newContractConstructor) {
|
|
22
|
-
this.contract = contract;
|
|
23
|
-
this.stateInfoProvider = stateInfoProvider;
|
|
24
|
-
this.newContractConstructor = newContractConstructor;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Create a new ContractTree instance from the provided contract artifact, constructor arguments, and related data.
|
|
28
|
-
* The function generates function leaves for constrained functions, computes the function tree root,
|
|
29
|
-
* and hashes the constructor's verification key. It then computes the contract address using the contract
|
|
30
|
-
* and portal contract addresses, contract address salt, and generated data. Finally, it returns a new
|
|
31
|
-
* ContractTree instance containing the contract data and computed values.
|
|
32
|
-
*
|
|
33
|
-
* @param artifact - The contract's build artifact containing the functions and their metadata.
|
|
34
|
-
* @param args - An array of Fr elements representing the constructor's arguments.
|
|
35
|
-
* @param portalContract - The Ethereum address of the portal smart contract.
|
|
36
|
-
* @param contractAddressSalt - An Fr element representing the salt used to compute the contract address.
|
|
37
|
-
* @param from - The public key of the contract deployer.
|
|
38
|
-
* @param node - An instance of the AztecNode class representing the current node.
|
|
39
|
-
* @returns A new ContractTree instance containing the contract data and computed values.
|
|
40
|
-
*/
|
|
41
|
-
static new(artifact, args, portalContract, contractAddressSalt, from, node) {
|
|
42
|
-
const constructorArtifact = artifact.functions.find(isConstructor);
|
|
43
|
-
if (!constructorArtifact) {
|
|
44
|
-
throw new Error('Constructor not found.');
|
|
45
|
-
}
|
|
46
|
-
if (!constructorArtifact.verificationKey) {
|
|
47
|
-
throw new Error('Missing verification key for the constructor.');
|
|
48
|
-
}
|
|
49
|
-
const functions = artifact.functions.map(f => ({
|
|
50
|
-
...f,
|
|
51
|
-
selector: FunctionSelector.fromNameAndParameters(f.name, f.parameters),
|
|
52
|
-
}));
|
|
53
|
-
const leaves = generateFunctionLeaves(functions);
|
|
54
|
-
const root = computeFunctionTreeRoot(leaves);
|
|
55
|
-
const functionData = FunctionData.fromAbi(constructorArtifact);
|
|
56
|
-
const vkHash = hashVKStr(constructorArtifact.verificationKey);
|
|
57
|
-
const argsHash = computeVarArgsHash(args);
|
|
58
|
-
const constructorHash = hashConstructor(functionData, argsHash, vkHash);
|
|
59
|
-
const completeAddress = computeCompleteAddress(from, contractAddressSalt, root, constructorHash);
|
|
60
|
-
const contractDao = new ContractDao(artifact, completeAddress, portalContract);
|
|
61
|
-
const NewContractConstructor = {
|
|
62
|
-
functionData,
|
|
63
|
-
vkHash,
|
|
64
|
-
};
|
|
65
|
-
return new ContractTree(contractDao, node, NewContractConstructor);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Retrieve the artifact of a given function.
|
|
69
|
-
* The function is identified by its selector, which represents a unique identifier for the function's signature.
|
|
70
|
-
* Throws an error if the function with the provided selector is not found in the contract.
|
|
71
|
-
*
|
|
72
|
-
* @param selector - The function selector.
|
|
73
|
-
* @returns The artifact object containing relevant information about the targeted function.
|
|
74
|
-
*/
|
|
75
|
-
getFunctionArtifact(selector) {
|
|
76
|
-
const artifact = this.contract.functions.find(f => f.selector.equals(selector));
|
|
77
|
-
if (!artifact) {
|
|
78
|
-
throw new Error(`Unknown function. Selector ${selector.toString()} not found in the artifact of contract ${this.contract.completeAddress.address.toString()}. Expected one of: ${this.contract.functions
|
|
79
|
-
.map(f => f.selector.toString())
|
|
80
|
-
.join(', ')}`);
|
|
81
|
-
}
|
|
82
|
-
return artifact;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Retrieve the bytecode of a function in the contract by its function selector.
|
|
86
|
-
* The function selector is a unique identifier for each function in a contract.
|
|
87
|
-
* Throws an error if the function with the given selector is not found in the contract.
|
|
88
|
-
*
|
|
89
|
-
* @param selector - The selector of a function to get bytecode for.
|
|
90
|
-
* @returns The bytecode of the function as a string.
|
|
91
|
-
*/
|
|
92
|
-
getBytecode(selector) {
|
|
93
|
-
return this.getFunctionArtifact(selector).bytecode;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Retrieves the contract membership witness for the current contract tree instance.
|
|
97
|
-
* The contract membership witness is a proof that demonstrates the existence of the contract
|
|
98
|
-
* in the global contract merkle tree. This proof contains the index of the contract's leaf
|
|
99
|
-
* in the tree and the sibling path needed to construct the root of the merkle tree.
|
|
100
|
-
* If the witness hasn't been previously computed, this function will request the contract node
|
|
101
|
-
* to find the contract's index and path in order to create the membership witness.
|
|
102
|
-
*
|
|
103
|
-
* @param blockNumber - The block number at which to get the data.
|
|
104
|
-
*
|
|
105
|
-
* @returns A Promise that resolves to the MembershipWitness object for the given contract tree.
|
|
106
|
-
*/
|
|
107
|
-
async getContractMembershipWitness(blockNumber = 'latest') {
|
|
108
|
-
const index = await this.getContractIndex();
|
|
109
|
-
const siblingPath = await this.stateInfoProvider.getContractSiblingPath(blockNumber, index);
|
|
110
|
-
return new MembershipWitness(CONTRACT_TREE_HEIGHT, index, assertLength(siblingPath.toFieldArray(), CONTRACT_TREE_HEIGHT));
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Calculate and return the root of the function tree for the current contract.
|
|
114
|
-
* This root is a cryptographic commitment to the set of constrained functions within the contract,
|
|
115
|
-
* which is used in the Aztec node's proof system. The root will be cached after the first call.
|
|
116
|
-
*
|
|
117
|
-
* @returns A promise that resolves to the Fr (finite field element) representation of the function tree root.
|
|
118
|
-
*/
|
|
119
|
-
getFunctionTreeRoot() {
|
|
120
|
-
if (!this.functionTreeRoot) {
|
|
121
|
-
const leaves = this.getFunctionLeaves();
|
|
122
|
-
this.functionTreeRoot = computeFunctionTreeRoot(leaves);
|
|
123
|
-
}
|
|
124
|
-
return Promise.resolve(this.functionTreeRoot);
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Retrieve the membership witness of a function within a contract's function tree.
|
|
128
|
-
* A membership witness represents the position and authentication path of a target function
|
|
129
|
-
* in the Merkle tree of constrained functions. It is required to prove the existence of the
|
|
130
|
-
* function within the contract during execution.
|
|
131
|
-
*
|
|
132
|
-
* @param selector - The function selector.
|
|
133
|
-
* @returns A MembershipWitness instance representing the position and authentication path of the function in the function tree.
|
|
134
|
-
*/
|
|
135
|
-
getFunctionMembershipWitness(selector) {
|
|
136
|
-
const targetFunctions = this.contract.functions.filter(isConstrained);
|
|
137
|
-
const functionIndex = targetFunctions.findIndex(f => f.selector.equals(selector));
|
|
138
|
-
if (functionIndex < 0) {
|
|
139
|
-
return Promise.resolve(MembershipWitness.empty(FUNCTION_TREE_HEIGHT, 0n));
|
|
140
|
-
}
|
|
141
|
-
if (!this.functionTree) {
|
|
142
|
-
const leaves = this.getFunctionLeaves();
|
|
143
|
-
this.functionTree = computeFunctionTree(leaves);
|
|
144
|
-
}
|
|
145
|
-
const functionTreeData = computeFunctionTreeData(this.functionTree, functionIndex);
|
|
146
|
-
return Promise.resolve(new MembershipWitness(FUNCTION_TREE_HEIGHT, BigInt(functionIndex), assertLength(functionTreeData.siblingPath, FUNCTION_TREE_HEIGHT)));
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Retrieve the function leaves for the contract tree.
|
|
150
|
-
* Function leaves are computed based on constrained functions present in the contract.
|
|
151
|
-
* It caches the computed function leaves and returns them if already calculated.
|
|
152
|
-
*
|
|
153
|
-
* @returns An array of Fr representing the function leaves.
|
|
154
|
-
*/
|
|
155
|
-
getFunctionLeaves() {
|
|
156
|
-
if (!this.functionLeaves) {
|
|
157
|
-
this.functionLeaves = generateFunctionLeaves(this.contract.functions);
|
|
158
|
-
}
|
|
159
|
-
return this.functionLeaves;
|
|
160
|
-
}
|
|
161
|
-
async getContractIndex() {
|
|
162
|
-
if (this.contractIndex === undefined) {
|
|
163
|
-
const { completeAddress, portalContract } = this.contract;
|
|
164
|
-
const root = await this.getFunctionTreeRoot();
|
|
165
|
-
const newContractData = new NewContractData(completeAddress.address, portalContract, root);
|
|
166
|
-
const commitment = computeContractLeaf(newContractData);
|
|
167
|
-
this.contractIndex = await this.stateInfoProvider.findLeafIndex('latest', MerkleTreeId.CONTRACT_TREE, commitment);
|
|
168
|
-
if (this.contractIndex === undefined) {
|
|
169
|
-
throw new Error(`Failed to find contract at ${completeAddress.address} with portal ${portalContract} resulting in commitment ${commitment}.`);
|
|
170
|
-
}
|
|
171
|
-
return this.contractIndex;
|
|
172
|
-
}
|
|
173
|
-
return this.contractIndex;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RfdHJlZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsV0FBVyxFQUFFLFlBQVksRUFBZ0MsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRyxPQUFPLEVBQ0wsb0JBQW9CLEVBRXBCLG9CQUFvQixFQUVwQixZQUFZLEVBQ1osaUJBQWlCLEVBRWpCLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxhQUFhLEVBQ2IsYUFBYSxHQUNkLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixrQkFBa0IsRUFDbEIsZUFBZSxHQUNoQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBb0IsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFM0Q7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQU12QjtJQUNFOztPQUVHO0lBQ2EsUUFBcUIsRUFDN0IsaUJBQW9DO0lBQzVDOztPQUVHO0lBQ2Esc0JBQStDO1FBTC9DLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDN0Isc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUk1QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXlCO0lBQzlELENBQUM7SUFFSjs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNJLE1BQU0sQ0FBQyxHQUFHLENBQ2YsUUFBMEIsRUFDMUIsSUFBVSxFQUNWLGNBQTBCLEVBQzFCLG1CQUF1QixFQUN2QixJQUFlLEVBQ2YsSUFBZTtRQUVmLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkUs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
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { MerkleTreeId, NoteFilter } from '@aztec/circuit-types';
|
|
2
|
-
import { BlockHeader, CompleteAddress, PublicKey } from '@aztec/circuits.js';
|
|
3
|
-
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
4
|
-
import { Fr, Point } from '@aztec/foundation/fields';
|
|
5
|
-
import { MemoryContractDatabase } from '../contract_database/index.js';
|
|
6
|
-
import { DeferredNoteDao } from './deferred_note_dao.js';
|
|
7
|
-
import { NoteDao } from './note_dao.js';
|
|
8
|
-
import { PxeDatabase } from './pxe_database.js';
|
|
9
|
-
/**
|
|
10
|
-
* The MemoryDB class provides an in-memory implementation of a database to manage transactions and auxiliary data.
|
|
11
|
-
* It extends the MemoryContractDatabase, allowing it to store contract-related data as well.
|
|
12
|
-
* The class offers methods to add, fetch, and remove transaction records and auxiliary data based on various filters such as transaction hash, address, and storage slot.
|
|
13
|
-
* As an in-memory database, the stored data will not persist beyond the life of the application instance.
|
|
14
|
-
*/
|
|
15
|
-
export declare class MemoryDB extends MemoryContractDatabase implements PxeDatabase {
|
|
16
|
-
private notesTable;
|
|
17
|
-
private deferredNotesTable;
|
|
18
|
-
private treeRoots;
|
|
19
|
-
private globalVariablesHash;
|
|
20
|
-
private blockNumber;
|
|
21
|
-
private addresses;
|
|
22
|
-
private authWitnesses;
|
|
23
|
-
private syncedBlockPerPublicKey;
|
|
24
|
-
private capsuleStack;
|
|
25
|
-
constructor(logSuffix?: string);
|
|
26
|
-
/**
|
|
27
|
-
* Add a auth witness to the database.
|
|
28
|
-
* @param messageHash - The message hash.
|
|
29
|
-
* @param witness - An array of field elements representing the auth witness.
|
|
30
|
-
*/
|
|
31
|
-
addAuthWitness(messageHash: Fr, witness: Fr[]): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* Fetching the auth witness for a given message hash.
|
|
34
|
-
* @param messageHash - The message hash.
|
|
35
|
-
* @returns A Promise that resolves to an array of field elements representing the auth witness.
|
|
36
|
-
*/
|
|
37
|
-
getAuthWitness(messageHash: Fr): Promise<Fr[] | undefined>;
|
|
38
|
-
addNote(note: NoteDao): Promise<void>;
|
|
39
|
-
addDeferredNotes(notes: DeferredNoteDao[]): Promise<void>;
|
|
40
|
-
getDeferredNotesByContract(contractAddress: AztecAddress): Promise<DeferredNoteDao[]>;
|
|
41
|
-
removeDeferredNotesByContract(contractAddress: AztecAddress): Promise<DeferredNoteDao[]>;
|
|
42
|
-
addCapsule(capsule: Fr[]): Promise<void>;
|
|
43
|
-
popCapsule(): Promise<Fr[] | undefined>;
|
|
44
|
-
addNotes(notes: NoteDao[]): Promise<void>;
|
|
45
|
-
getNotes(filter: NoteFilter): Promise<NoteDao[]>;
|
|
46
|
-
removeNullifiedNotes(nullifiers: Fr[], account: PublicKey): Promise<NoteDao[]>;
|
|
47
|
-
getTreeRoots(): Record<MerkleTreeId, Fr>;
|
|
48
|
-
private setTreeRoots;
|
|
49
|
-
getBlockHeader(): BlockHeader;
|
|
50
|
-
setBlockData(blockNumber: number, blockHeader: BlockHeader): Promise<void>;
|
|
51
|
-
getBlockNumber(): number | undefined;
|
|
52
|
-
addCompleteAddress(completeAddress: CompleteAddress): Promise<boolean>;
|
|
53
|
-
getCompleteAddress(address: AztecAddress): Promise<CompleteAddress | undefined>;
|
|
54
|
-
getCompleteAddresses(): Promise<CompleteAddress[]>;
|
|
55
|
-
getSynchedBlockNumberForPublicKey(publicKey: Point): number | undefined;
|
|
56
|
-
setSynchedBlockNumberForPublicKey(publicKey: Point, blockNumber: number): Promise<boolean>;
|
|
57
|
-
estimateSize(): number;
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=memory_db.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory_db.d.ts","sourceRoot":"","sources":["../../src/database/memory_db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAGrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;GAKG;AACH,qBAAa,QAAS,SAAQ,sBAAuB,YAAW,WAAW;IACzE,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,mBAAmB,CAAiB;IAC5C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,uBAAuB,CAA6B;IAG5D,OAAO,CAAC,YAAY,CAAc;gBAEtB,SAAS,CAAC,EAAE,MAAM;IAI9B;;;;OAIG;IACI,cAAc,CAAC,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpE;;;;OAIG;IACI,cAAc,CAAC,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC;IAI1D,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrC,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzD,0BAA0B,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAIrF,6BAA6B,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAYxF,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC,UAAU,IAAI,OAAO,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC;IAIvC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE;IAKnB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAmBtD,oBAAoB,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS;IAoBzD,YAAY,IAAI,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;IAQ/C,OAAO,CAAC,YAAY;IAIb,cAAc,IAAI,WAAW;IAiB7B,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1E,cAAc,IAAI,MAAM,GAAG,SAAS;IAIpC,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBtE,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAK/E,oBAAoB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAIzD,iCAAiC,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS;IAIvE,iCAAiC,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnF,YAAY;CAOpB"}
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import { MerkleTreeId } from '@aztec/circuit-types';
|
|
2
|
-
import { BlockHeader, CompleteAddress } from '@aztec/circuits.js';
|
|
3
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
-
import { createDebugLogger } from '@aztec/foundation/log';
|
|
5
|
-
import { MemoryContractDatabase } from '../contract_database/index.js';
|
|
6
|
-
/**
|
|
7
|
-
* The MemoryDB class provides an in-memory implementation of a database to manage transactions and auxiliary data.
|
|
8
|
-
* It extends the MemoryContractDatabase, allowing it to store contract-related data as well.
|
|
9
|
-
* The class offers methods to add, fetch, and remove transaction records and auxiliary data based on various filters such as transaction hash, address, and storage slot.
|
|
10
|
-
* As an in-memory database, the stored data will not persist beyond the life of the application instance.
|
|
11
|
-
*/
|
|
12
|
-
export class MemoryDB extends MemoryContractDatabase {
|
|
13
|
-
constructor(logSuffix) {
|
|
14
|
-
super(createDebugLogger(logSuffix ? 'aztec:memory_db_' + logSuffix : 'aztec:memory_db'));
|
|
15
|
-
this.notesTable = [];
|
|
16
|
-
this.deferredNotesTable = [];
|
|
17
|
-
this.addresses = [];
|
|
18
|
-
this.authWitnesses = {};
|
|
19
|
-
this.syncedBlockPerPublicKey = new Map();
|
|
20
|
-
// A capsule is a "blob" of data that is passed to the contract through an oracle.
|
|
21
|
-
// We are using a stack to keep track of the capsules that are passed to the contract.
|
|
22
|
-
this.capsuleStack = [];
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Add a auth witness to the database.
|
|
26
|
-
* @param messageHash - The message hash.
|
|
27
|
-
* @param witness - An array of field elements representing the auth witness.
|
|
28
|
-
*/
|
|
29
|
-
addAuthWitness(messageHash, witness) {
|
|
30
|
-
this.authWitnesses[messageHash.toString()] = witness;
|
|
31
|
-
return Promise.resolve();
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Fetching the auth witness for a given message hash.
|
|
35
|
-
* @param messageHash - The message hash.
|
|
36
|
-
* @returns A Promise that resolves to an array of field elements representing the auth witness.
|
|
37
|
-
*/
|
|
38
|
-
getAuthWitness(messageHash) {
|
|
39
|
-
return Promise.resolve(this.authWitnesses[messageHash.toString()]);
|
|
40
|
-
}
|
|
41
|
-
addNote(note) {
|
|
42
|
-
this.notesTable.push(note);
|
|
43
|
-
return Promise.resolve();
|
|
44
|
-
}
|
|
45
|
-
addDeferredNotes(notes) {
|
|
46
|
-
this.deferredNotesTable.push(...notes);
|
|
47
|
-
return Promise.resolve();
|
|
48
|
-
}
|
|
49
|
-
getDeferredNotesByContract(contractAddress) {
|
|
50
|
-
return Promise.resolve(this.deferredNotesTable.filter(note => note.contractAddress.equals(contractAddress)));
|
|
51
|
-
}
|
|
52
|
-
removeDeferredNotesByContract(contractAddress) {
|
|
53
|
-
const removed = [];
|
|
54
|
-
this.deferredNotesTable = this.deferredNotesTable.filter(note => {
|
|
55
|
-
if (note.contractAddress.equals(contractAddress)) {
|
|
56
|
-
removed.push(note);
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
return true;
|
|
60
|
-
});
|
|
61
|
-
return Promise.resolve(removed);
|
|
62
|
-
}
|
|
63
|
-
addCapsule(capsule) {
|
|
64
|
-
this.capsuleStack.push(capsule);
|
|
65
|
-
return Promise.resolve();
|
|
66
|
-
}
|
|
67
|
-
popCapsule() {
|
|
68
|
-
return Promise.resolve(this.capsuleStack.pop());
|
|
69
|
-
}
|
|
70
|
-
addNotes(notes) {
|
|
71
|
-
this.notesTable.push(...notes);
|
|
72
|
-
return Promise.resolve();
|
|
73
|
-
}
|
|
74
|
-
async getNotes(filter) {
|
|
75
|
-
let ownerPublicKey;
|
|
76
|
-
if (filter.owner !== undefined) {
|
|
77
|
-
const ownerCompleteAddress = await this.getCompleteAddress(filter.owner);
|
|
78
|
-
if (ownerCompleteAddress === undefined) {
|
|
79
|
-
throw new Error(`Owner ${filter.owner.toString()} not found in memory database`);
|
|
80
|
-
}
|
|
81
|
-
ownerPublicKey = ownerCompleteAddress.publicKey;
|
|
82
|
-
}
|
|
83
|
-
return this.notesTable.filter(note => (filter.contractAddress == undefined || note.contractAddress.equals(filter.contractAddress)) &&
|
|
84
|
-
(filter.txHash == undefined || note.txHash.equals(filter.txHash)) &&
|
|
85
|
-
(filter.storageSlot == undefined || note.storageSlot.equals(filter.storageSlot)) &&
|
|
86
|
-
(ownerPublicKey == undefined || note.publicKey.equals(ownerPublicKey)));
|
|
87
|
-
}
|
|
88
|
-
removeNullifiedNotes(nullifiers, account) {
|
|
89
|
-
const nullifierSet = new Set(nullifiers.map(nullifier => nullifier.toString()));
|
|
90
|
-
const [remaining, removed] = this.notesTable.reduce((acc, note) => {
|
|
91
|
-
const nullifier = note.siloedNullifier.toString();
|
|
92
|
-
if (note.publicKey.equals(account) && nullifierSet.has(nullifier)) {
|
|
93
|
-
acc[1].push(note);
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
acc[0].push(note);
|
|
97
|
-
}
|
|
98
|
-
return acc;
|
|
99
|
-
}, [[], []]);
|
|
100
|
-
this.notesTable = remaining;
|
|
101
|
-
return Promise.resolve(removed);
|
|
102
|
-
}
|
|
103
|
-
getTreeRoots() {
|
|
104
|
-
const roots = this.treeRoots;
|
|
105
|
-
if (!roots) {
|
|
106
|
-
throw new Error(`Tree roots not set in memory database`);
|
|
107
|
-
}
|
|
108
|
-
return roots;
|
|
109
|
-
}
|
|
110
|
-
setTreeRoots(roots) {
|
|
111
|
-
this.treeRoots = roots;
|
|
112
|
-
}
|
|
113
|
-
getBlockHeader() {
|
|
114
|
-
const roots = this.getTreeRoots();
|
|
115
|
-
if (!this.globalVariablesHash) {
|
|
116
|
-
throw new Error(`Global variables hash not set in memory database`);
|
|
117
|
-
}
|
|
118
|
-
return new BlockHeader(roots[MerkleTreeId.NOTE_HASH_TREE], roots[MerkleTreeId.NULLIFIER_TREE], roots[MerkleTreeId.CONTRACT_TREE], roots[MerkleTreeId.L1_TO_L2_MESSAGE_TREE], roots[MerkleTreeId.ARCHIVE], Fr.ZERO, // todo: private kernel vk tree root
|
|
119
|
-
roots[MerkleTreeId.PUBLIC_DATA_TREE], this.globalVariablesHash);
|
|
120
|
-
}
|
|
121
|
-
setBlockData(blockNumber, blockHeader) {
|
|
122
|
-
this.globalVariablesHash = blockHeader.globalVariablesHash;
|
|
123
|
-
this.blockNumber = blockNumber;
|
|
124
|
-
this.setTreeRoots({
|
|
125
|
-
[MerkleTreeId.NOTE_HASH_TREE]: blockHeader.noteHashTreeRoot,
|
|
126
|
-
[MerkleTreeId.NULLIFIER_TREE]: blockHeader.nullifierTreeRoot,
|
|
127
|
-
[MerkleTreeId.CONTRACT_TREE]: blockHeader.contractTreeRoot,
|
|
128
|
-
[MerkleTreeId.L1_TO_L2_MESSAGE_TREE]: blockHeader.l1ToL2MessageTreeRoot,
|
|
129
|
-
[MerkleTreeId.ARCHIVE]: blockHeader.archiveRoot,
|
|
130
|
-
[MerkleTreeId.PUBLIC_DATA_TREE]: blockHeader.publicDataTreeRoot,
|
|
131
|
-
});
|
|
132
|
-
return Promise.resolve();
|
|
133
|
-
}
|
|
134
|
-
getBlockNumber() {
|
|
135
|
-
return this.blockNumber;
|
|
136
|
-
}
|
|
137
|
-
addCompleteAddress(completeAddress) {
|
|
138
|
-
const accountIndex = this.addresses.findIndex(r => r.address.equals(completeAddress.address));
|
|
139
|
-
if (accountIndex !== -1) {
|
|
140
|
-
if (this.addresses[accountIndex].equals(completeAddress)) {
|
|
141
|
-
return Promise.resolve(false);
|
|
142
|
-
}
|
|
143
|
-
return Promise.reject(new Error(`Complete address with aztec address ${completeAddress.address.toString()} but different public key or partial key already exists in memory database`));
|
|
144
|
-
}
|
|
145
|
-
this.addresses.push(completeAddress);
|
|
146
|
-
return Promise.resolve(true);
|
|
147
|
-
}
|
|
148
|
-
getCompleteAddress(address) {
|
|
149
|
-
const recipient = this.addresses.find(r => r.address.equals(address));
|
|
150
|
-
return Promise.resolve(recipient);
|
|
151
|
-
}
|
|
152
|
-
getCompleteAddresses() {
|
|
153
|
-
return Promise.resolve(this.addresses);
|
|
154
|
-
}
|
|
155
|
-
getSynchedBlockNumberForPublicKey(publicKey) {
|
|
156
|
-
return this.syncedBlockPerPublicKey.get(publicKey.toString());
|
|
157
|
-
}
|
|
158
|
-
setSynchedBlockNumberForPublicKey(publicKey, blockNumber) {
|
|
159
|
-
this.syncedBlockPerPublicKey.set(publicKey.toString(), blockNumber);
|
|
160
|
-
return Promise.resolve(true);
|
|
161
|
-
}
|
|
162
|
-
estimateSize() {
|
|
163
|
-
const notesSize = this.notesTable.reduce((sum, note) => sum + note.getSize(), 0);
|
|
164
|
-
const treeRootsSize = this.treeRoots ? Object.entries(this.treeRoots).length * Fr.SIZE_IN_BYTES : 0;
|
|
165
|
-
const authWits = Object.entries(this.authWitnesses);
|
|
166
|
-
const authWitsSize = authWits.reduce((sum, [key, value]) => sum + key.length + value.length * Fr.SIZE_IN_BYTES, 0);
|
|
167
|
-
return notesSize + treeRootsSize + authWitsSize + this.addresses.length * CompleteAddress.SIZE_IN_BYTES;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5X2RiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFiYXNlL21lbW9yeV9kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQWEsTUFBTSxvQkFBb0IsQ0FBQztBQUU3RSxPQUFPLEVBQUUsRUFBRSxFQUFTLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFLdkU7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sUUFBUyxTQUFRLHNCQUFzQjtJQWFsRCxZQUFZLFNBQWtCO1FBQzVCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBYm5GLGVBQVUsR0FBYyxFQUFFLENBQUM7UUFDM0IsdUJBQWtCLEdBQXNCLEVBQUUsQ0FBQztRQUkzQyxjQUFTLEdBQXNCLEVBQUUsQ0FBQztRQUNsQyxrQkFBYSxHQUF5QixFQUFFLENBQUM7UUFDekMsNEJBQXVCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFDNUQsa0ZBQWtGO1FBQ2xGLHNGQUFzRjtRQUM5RSxpQkFBWSxHQUFXLEVBQUUsQ0FBQztJQUlsQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGNBQWMsQ0FBQyxXQUFlLEVBQUUsT0FBYTtRQUNsRCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUNyRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJ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
|