@aztec/pxe 0.8.6
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 +13 -0
- package/dest/bin/index.d.ts +3 -0
- package/dest/bin/index.d.ts.map +1 -0
- package/dest/bin/index.js +31 -0
- package/dest/config/index.d.ts +21 -0
- package/dest/config/index.d.ts.map +1 -0
- package/dest/config/index.js +21 -0
- package/dest/contract_data_oracle/index.d.ts +99 -0
- package/dest/contract_data_oracle/index.d.ts.map +1 -0
- package/dest/contract_data_oracle/index.js +137 -0
- package/dest/contract_database/index.d.ts +2 -0
- package/dest/contract_database/index.d.ts.map +1 -0
- package/dest/contract_database/index.js +2 -0
- package/dest/contract_database/memory_contract_database.d.ts +43 -0
- package/dest/contract_database/memory_contract_database.d.ts.map +1 -0
- package/dest/contract_database/memory_contract_database.js +51 -0
- package/dest/contract_tree/index.d.ts +107 -0
- package/dest/contract_tree/index.d.ts.map +1 -0
- package/dest/contract_tree/index.js +181 -0
- package/dest/database/database.d.ts +118 -0
- package/dest/database/database.d.ts.map +1 -0
- package/dest/database/database.js +2 -0
- package/dest/database/index.d.ts +4 -0
- package/dest/database/index.d.ts.map +1 -0
- package/dest/database/index.js +4 -0
- package/dest/database/memory_db.d.ts +45 -0
- package/dest/database/memory_db.d.ts.map +1 -0
- package/dest/database/memory_db.js +111 -0
- package/dest/database/note_spending_info_dao.d.ts +44 -0
- package/dest/database/note_spending_info_dao.d.ts.map +1 -0
- package/dest/database/note_spending_info_dao.js +14 -0
- package/dest/index.d.ts +10 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +10 -0
- package/dest/kernel_oracle/index.d.ts +18 -0
- package/dest/kernel_oracle/index.d.ts.map +1 -0
- package/dest/kernel_oracle/index.js +29 -0
- package/dest/kernel_prover/index.d.ts +3 -0
- package/dest/kernel_prover/index.d.ts.map +1 -0
- package/dest/kernel_prover/index.js +3 -0
- package/dest/kernel_prover/kernel_prover.d.ts +89 -0
- package/dest/kernel_prover/kernel_prover.d.ts.map +1 -0
- package/dest/kernel_prover/kernel_prover.js +175 -0
- package/dest/kernel_prover/proof_creator.d.ts +84 -0
- package/dest/kernel_prover/proof_creator.d.ts.map +1 -0
- package/dest/kernel_prover/proof_creator.js +83 -0
- package/dest/kernel_prover/proving_data_oracle.d.ts +53 -0
- package/dest/kernel_prover/proving_data_oracle.d.ts.map +1 -0
- package/dest/kernel_prover/proving_data_oracle.js +2 -0
- package/dest/note_processor/index.d.ts +2 -0
- package/dest/note_processor/index.d.ts.map +1 -0
- package/dest/note_processor/index.js +2 -0
- package/dest/note_processor/note_processor.d.ts +78 -0
- package/dest/note_processor/note_processor.d.ts.map +1 -0
- package/dest/note_processor/note_processor.js +206 -0
- package/dest/pxe_http/index.d.ts +2 -0
- package/dest/pxe_http/index.d.ts.map +1 -0
- package/dest/pxe_http/index.js +2 -0
- package/dest/pxe_http/pxe_http_server.d.ts +40 -0
- package/dest/pxe_http/pxe_http_server.d.ts.map +1 -0
- package/dest/pxe_http/pxe_http_server.js +44 -0
- package/dest/pxe_service/create_pxe_service.d.ts +30 -0
- package/dest/pxe_service/create_pxe_service.d.ts.map +1 -0
- package/dest/pxe_service/create_pxe_service.js +27 -0
- package/dest/pxe_service/index.d.ts +4 -0
- package/dest/pxe_service/index.d.ts.map +1 -0
- package/dest/pxe_service/index.js +4 -0
- package/dest/pxe_service/pxe_service.d.ts +70 -0
- package/dest/pxe_service/pxe_service.d.ts.map +1 -0
- package/dest/pxe_service/pxe_service.js +470 -0
- package/dest/pxe_service/test/pxe_test_suite.d.ts +3 -0
- package/dest/pxe_service/test/pxe_test_suite.d.ts.map +1 -0
- package/dest/pxe_service/test/pxe_test_suite.js +100 -0
- package/dest/simulator/index.d.ts +9 -0
- package/dest/simulator/index.d.ts.map +1 -0
- package/dest/simulator/index.js +11 -0
- package/dest/simulator_oracle/index.d.ts +53 -0
- package/dest/simulator_oracle/index.d.ts.map +1 -0
- package/dest/simulator_oracle/index.js +91 -0
- package/dest/synchronizer/index.d.ts +2 -0
- package/dest/synchronizer/index.d.ts.map +1 -0
- package/dest/synchronizer/index.js +2 -0
- package/dest/synchronizer/synchronizer.d.ts +82 -0
- package/dest/synchronizer/synchronizer.d.ts.map +1 -0
- package/dest/synchronizer/synchronizer.js +241 -0
- package/package.json +74 -0
- package/src/bin/index.ts +39 -0
- package/src/config/index.ts +34 -0
- package/src/contract_data_oracle/index.ts +151 -0
- package/src/contract_database/index.ts +1 -0
- package/src/contract_database/memory_contract_database.ts +58 -0
- package/src/contract_tree/index.ts +245 -0
- package/src/database/database.ts +131 -0
- package/src/database/index.ts +3 -0
- package/src/database/memory_db.ts +147 -0
- package/src/database/note_spending_info_dao.ts +64 -0
- package/src/index.ts +11 -0
- package/src/kernel_oracle/index.ts +39 -0
- package/src/kernel_prover/index.ts +2 -0
- package/src/kernel_prover/kernel_prover.ts +317 -0
- package/src/kernel_prover/proof_creator.ts +176 -0
- package/src/kernel_prover/proving_data_oracle.ts +69 -0
- package/src/note_processor/index.ts +1 -0
- package/src/note_processor/note_processor.ts +267 -0
- package/src/pxe_http/index.ts +1 -0
- package/src/pxe_http/pxe_http_server.ts +70 -0
- package/src/pxe_service/create_pxe_service.ts +52 -0
- package/src/pxe_service/index.ts +3 -0
- package/src/pxe_service/pxe_service.ts +650 -0
- package/src/pxe_service/test/pxe_test_suite.ts +138 -0
- package/src/simulator/index.ts +24 -0
- package/src/simulator_oracle/index.ts +121 -0
- package/src/synchronizer/index.ts +1 -0
- package/src/synchronizer/synchronizer.ts +285 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { CONTRACT_TREE_HEIGHT, CircuitsWasm, FUNCTION_TREE_HEIGHT, FunctionData, MembershipWitness, NewContractData, computeFunctionTree, computeFunctionTreeData, generateFunctionLeaves, hashVKStr, isConstrained, isConstructor, } from '@aztec/circuits.js';
|
|
2
|
+
import { computeCompleteAddress, computeContractLeaf, computeFunctionTreeRoot, computeVarArgsHash, hashConstructor, } from '@aztec/circuits.js/abis';
|
|
3
|
+
import { FunctionSelector } from '@aztec/foundation/abi';
|
|
4
|
+
import { assertLength } from '@aztec/foundation/serialize';
|
|
5
|
+
import { MerkleTreeId } from '@aztec/types';
|
|
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 ABI and bytecode 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 ABI and contract address.
|
|
16
|
+
*/
|
|
17
|
+
contract, stateInfoProvider, wasm,
|
|
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.wasm = wasm;
|
|
25
|
+
this.newContractConstructor = newContractConstructor;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Create a new ContractTree instance from the provided contract ABI, constructor arguments, and related data.
|
|
29
|
+
* The function generates function leaves for constrained functions, computes the function tree root,
|
|
30
|
+
* and hashes the constructor's verification key. It then computes the contract address using the contract
|
|
31
|
+
* and portal contract addresses, contract address salt, and generated data. Finally, it returns a new
|
|
32
|
+
* ContractTree instance containing the contract data and computed values.
|
|
33
|
+
*
|
|
34
|
+
* @param abi - The contract's ABI containing the functions and their metadata.
|
|
35
|
+
* @param args - An array of Fr elements representing the constructor's arguments.
|
|
36
|
+
* @param portalContract - The Ethereum address of the portal smart contract.
|
|
37
|
+
* @param contractAddressSalt - An Fr element representing the salt used to compute the contract address.
|
|
38
|
+
* @param from - The public key of the contract deployer.
|
|
39
|
+
* @param node - An instance of the AztecNode class representing the current node.
|
|
40
|
+
* @returns A new ContractTree instance containing the contract data and computed values.
|
|
41
|
+
*/
|
|
42
|
+
static async new(abi, args, portalContract, contractAddressSalt, from, node) {
|
|
43
|
+
const wasm = await CircuitsWasm.get();
|
|
44
|
+
const constructorAbi = abi.functions.find(isConstructor);
|
|
45
|
+
if (!constructorAbi) {
|
|
46
|
+
throw new Error('Constructor not found.');
|
|
47
|
+
}
|
|
48
|
+
if (!constructorAbi.verificationKey) {
|
|
49
|
+
throw new Error('Missing verification key for the constructor.');
|
|
50
|
+
}
|
|
51
|
+
const functions = abi.functions.map(f => ({
|
|
52
|
+
...f,
|
|
53
|
+
selector: FunctionSelector.fromNameAndParameters(f.name, f.parameters),
|
|
54
|
+
}));
|
|
55
|
+
const leaves = generateFunctionLeaves(functions, wasm);
|
|
56
|
+
const root = computeFunctionTreeRoot(wasm, leaves);
|
|
57
|
+
const functionData = FunctionData.fromAbi(constructorAbi);
|
|
58
|
+
const vkHash = hashVKStr(constructorAbi.verificationKey, wasm);
|
|
59
|
+
const argsHash = await computeVarArgsHash(wasm, args);
|
|
60
|
+
const constructorHash = hashConstructor(wasm, functionData, argsHash, vkHash);
|
|
61
|
+
const completeAddress = computeCompleteAddress(wasm, from, contractAddressSalt, root, constructorHash);
|
|
62
|
+
const contractDao = {
|
|
63
|
+
...abi,
|
|
64
|
+
completeAddress,
|
|
65
|
+
functions,
|
|
66
|
+
portalContract,
|
|
67
|
+
};
|
|
68
|
+
const NewContractConstructor = {
|
|
69
|
+
functionData,
|
|
70
|
+
vkHash,
|
|
71
|
+
};
|
|
72
|
+
return new ContractTree(contractDao, node, wasm, NewContractConstructor);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Retrieve the ABI of a given function.
|
|
76
|
+
* The function is identified by its selector, which represents a unique identifier for the function's signature.
|
|
77
|
+
* Throws an error if the function with the provided selector is not found in the contract.
|
|
78
|
+
*
|
|
79
|
+
* @param selector - The function selector.
|
|
80
|
+
* @returns The ABI object containing relevant information about the targeted function.
|
|
81
|
+
*/
|
|
82
|
+
getFunctionAbi(selector) {
|
|
83
|
+
const abi = this.contract.functions.find(f => f.selector.equals(selector));
|
|
84
|
+
if (!abi) {
|
|
85
|
+
throw new Error(`Unknown function. Selector ${selector.toString()} not found in the ABI of contract ${this.contract.completeAddress.address.toString()}. Expected one of: ${this.contract.functions
|
|
86
|
+
.map(f => f.selector.toString())
|
|
87
|
+
.join(', ')}`);
|
|
88
|
+
}
|
|
89
|
+
return abi;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Retrieve the bytecode of a function in the contract by its function selector.
|
|
93
|
+
* The function selector is a unique identifier for each function in a contract.
|
|
94
|
+
* Throws an error if the function with the given selector is not found in the contract.
|
|
95
|
+
*
|
|
96
|
+
* @param selector - The selector of a function to get bytecode for.
|
|
97
|
+
* @returns The bytecode of the function as a string.
|
|
98
|
+
*/
|
|
99
|
+
getBytecode(selector) {
|
|
100
|
+
return this.getFunctionAbi(selector).bytecode;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Retrieves the contract membership witness for the current contract tree instance.
|
|
104
|
+
* The contract membership witness is a proof that demonstrates the existence of the contract
|
|
105
|
+
* in the global contract merkle tree. This proof contains the index of the contract's leaf
|
|
106
|
+
* in the tree and the sibling path needed to construct the root of the merkle tree.
|
|
107
|
+
* If the witness hasn't been previously computed, this function will request the contract node
|
|
108
|
+
* to find the contract's index and path in order to create the membership witness.
|
|
109
|
+
*
|
|
110
|
+
* @returns A Promise that resolves to the MembershipWitness object for the given contract tree.
|
|
111
|
+
*/
|
|
112
|
+
async getContractMembershipWitness() {
|
|
113
|
+
const index = await this.getContractIndex();
|
|
114
|
+
const siblingPath = await this.stateInfoProvider.getContractPath(index);
|
|
115
|
+
return new MembershipWitness(CONTRACT_TREE_HEIGHT, index, assertLength(siblingPath.toFieldArray(), CONTRACT_TREE_HEIGHT));
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Calculate and return the root of the function tree for the current contract.
|
|
119
|
+
* This root is a cryptographic commitment to the set of constrained functions within the contract,
|
|
120
|
+
* which is used in the Aztec node's proof system. The root will be cached after the first call.
|
|
121
|
+
*
|
|
122
|
+
* @returns A promise that resolves to the Fr (finite field element) representation of the function tree root.
|
|
123
|
+
*/
|
|
124
|
+
getFunctionTreeRoot() {
|
|
125
|
+
if (!this.functionTreeRoot) {
|
|
126
|
+
const leaves = this.getFunctionLeaves();
|
|
127
|
+
this.functionTreeRoot = computeFunctionTreeRoot(this.wasm, leaves);
|
|
128
|
+
}
|
|
129
|
+
return Promise.resolve(this.functionTreeRoot);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Retrieve the membership witness of a function within a contract's function tree.
|
|
133
|
+
* A membership witness represents the position and authentication path of a target function
|
|
134
|
+
* in the Merkle tree of constrained functions. It is required to prove the existence of the
|
|
135
|
+
* function within the contract during execution.
|
|
136
|
+
*
|
|
137
|
+
* @param selector - The function selector.
|
|
138
|
+
* @returns A MembershipWitness instance representing the position and authentication path of the function in the function tree.
|
|
139
|
+
*/
|
|
140
|
+
getFunctionMembershipWitness(selector) {
|
|
141
|
+
const targetFunctions = this.contract.functions.filter(isConstrained);
|
|
142
|
+
const functionIndex = targetFunctions.findIndex(f => f.selector.equals(selector));
|
|
143
|
+
if (functionIndex < 0) {
|
|
144
|
+
return Promise.resolve(MembershipWitness.empty(FUNCTION_TREE_HEIGHT, 0n));
|
|
145
|
+
}
|
|
146
|
+
if (!this.functionTree) {
|
|
147
|
+
const leaves = this.getFunctionLeaves();
|
|
148
|
+
this.functionTree = computeFunctionTree(this.wasm, leaves);
|
|
149
|
+
}
|
|
150
|
+
const functionTreeData = computeFunctionTreeData(this.functionTree, functionIndex);
|
|
151
|
+
return Promise.resolve(new MembershipWitness(FUNCTION_TREE_HEIGHT, BigInt(functionIndex), assertLength(functionTreeData.siblingPath, FUNCTION_TREE_HEIGHT)));
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Retrieve the function leaves for the contract tree.
|
|
155
|
+
* Function leaves are computed based on constrained functions present in the contract.
|
|
156
|
+
* It caches the computed function leaves and returns them if already calculated.
|
|
157
|
+
*
|
|
158
|
+
* @returns An array of Fr representing the function leaves.
|
|
159
|
+
*/
|
|
160
|
+
getFunctionLeaves() {
|
|
161
|
+
if (!this.functionLeaves) {
|
|
162
|
+
this.functionLeaves = generateFunctionLeaves(this.contract.functions, this.wasm);
|
|
163
|
+
}
|
|
164
|
+
return this.functionLeaves;
|
|
165
|
+
}
|
|
166
|
+
async getContractIndex() {
|
|
167
|
+
if (this.contractIndex === undefined) {
|
|
168
|
+
const { completeAddress, portalContract } = this.contract;
|
|
169
|
+
const root = await this.getFunctionTreeRoot();
|
|
170
|
+
const newContractData = new NewContractData(completeAddress.address, portalContract, root);
|
|
171
|
+
const commitment = computeContractLeaf(this.wasm, newContractData);
|
|
172
|
+
this.contractIndex = await this.stateInfoProvider.findLeafIndex(MerkleTreeId.CONTRACT_TREE, commitment.toBuffer());
|
|
173
|
+
if (this.contractIndex === undefined) {
|
|
174
|
+
throw new Error(`Failed to find contract at ${completeAddress.address} with portal ${portalContract} resulting in commitment ${commitment}.`);
|
|
175
|
+
}
|
|
176
|
+
return this.contractIndex;
|
|
177
|
+
}
|
|
178
|
+
return this.contractIndex;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RfdHJlZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLFlBQVksRUFFWixvQkFBb0IsRUFFcEIsWUFBWSxFQUNaLGlCQUFpQixFQUVqQixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsU0FBUyxFQUNULGFBQWEsRUFDYixhQUFhLEdBQ2QsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUNuQix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLGVBQWUsR0FDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUEwQixZQUFZLEVBQWdDLE1BQU0sY0FBYyxDQUFDO0FBRWxHOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFNdkI7SUFDRTs7T0FFRztJQUNhLFFBQXFCLEVBQzdCLGlCQUFvQyxFQUNwQyxJQUFrQjtJQUMxQjs7T0FFRztJQUNhLHNCQUErQztRQU4vQyxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQzdCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsU0FBSSxHQUFKLElBQUksQ0FBYztRQUlWLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBeUI7SUFDOUQsQ0FBQztJQUVKOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQ3JCLEdBQWdCLEVBQ2hCLElBQVUsRUFDVixjQUEwQixFQUMxQixtQkFBdUIsRUFDdkIsSUFBZSxFQUNmLElBQWU7UUFFZixNQUFNLElBQUksR0FBRyxNQUFNLFlB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
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { CompleteAddress, HistoricBlockData } from '@aztec/circuits.js';
|
|
2
|
+
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
3
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
+
import { ContractDatabase, MerkleTreeId, PublicKey } from '@aztec/types';
|
|
5
|
+
import { NoteSpendingInfoDao } from './note_spending_info_dao.js';
|
|
6
|
+
/**
|
|
7
|
+
* A database interface that provides methods for retrieving, adding, and removing transactional data related to Aztec
|
|
8
|
+
* addresses, storage slots, and nullifiers.
|
|
9
|
+
*/
|
|
10
|
+
export interface Database extends ContractDatabase {
|
|
11
|
+
/**
|
|
12
|
+
* Add a auth witness to the database.
|
|
13
|
+
* @param messageHash - The message hash.
|
|
14
|
+
* @param witness - An array of field elements representing the auth witness.
|
|
15
|
+
*/
|
|
16
|
+
addAuthWitness(messageHash: Fr, witness: Fr[]): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Fetching the auth witness for a given message hash.
|
|
19
|
+
* @param messageHash - The message hash.
|
|
20
|
+
* @returns A Promise that resolves to an array of field elements representing the auth witness.
|
|
21
|
+
*/
|
|
22
|
+
getAuthWitness(messageHash: Fr): Promise<Fr[]>;
|
|
23
|
+
/**
|
|
24
|
+
* Get auxiliary transaction data based on contract address and storage slot.
|
|
25
|
+
* It searches for matching NoteSpendingInfoDao objects in the MemoryDB's noteSpendingInfoTable
|
|
26
|
+
* where both the contractAddress and storageSlot properties match the given inputs.
|
|
27
|
+
*
|
|
28
|
+
* @param contract - The contract address.
|
|
29
|
+
* @param storageSlot - A Fr object representing the storage slot to search for in the auxiliary data.
|
|
30
|
+
* @returns An array of NoteSpendingInfoDao objects that fulfill the contract address and storage slot criteria.
|
|
31
|
+
*/
|
|
32
|
+
getNoteSpendingInfo(contract: AztecAddress, storageSlot: Fr): Promise<NoteSpendingInfoDao[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Add a NoteSpendingInfoDao instance to the noteSpendingInfoTable.
|
|
35
|
+
* This function is used to store auxiliary data related to a transaction,
|
|
36
|
+
* such as contract address and storage slot, in the database.
|
|
37
|
+
*
|
|
38
|
+
* @param noteSpendingInfoDao - The NoteSpendingInfoDao instance containing the auxiliary data of a transaction.
|
|
39
|
+
* @returns A promise that resolves when the auxiliary data is added to the database.
|
|
40
|
+
*/
|
|
41
|
+
addNoteSpendingInfo(noteSpendingInfoDao: NoteSpendingInfoDao): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Adds an array of NoteSpendingInfoDaos to the noteSpendingInfoTable.
|
|
44
|
+
* This function is used to insert multiple transaction auxiliary data objects into the database at once,
|
|
45
|
+
* which can improve performance when dealing with large numbers of transactions.
|
|
46
|
+
*
|
|
47
|
+
* @param noteSpendingInfoDaos - An array of NoteSpendingInfoDao instances representing the auxiliary data of transactions.
|
|
48
|
+
* @returns A Promise that resolves when all NoteSpendingInfoDaos have been successfully added to the noteSpendingInfoTable.
|
|
49
|
+
*/
|
|
50
|
+
addNoteSpendingInfoBatch(noteSpendingInfoDaos: NoteSpendingInfoDao[]): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Remove nullified transaction auxiliary data records associated with the given account and nullifiers.
|
|
53
|
+
* The function filters the records based on matching account and nullifier values, and updates the
|
|
54
|
+
* noteSpendingInfoTable with the remaining records. It returns an array of removed NoteSpendingInfoDao instances.
|
|
55
|
+
*
|
|
56
|
+
* @param nullifiers - An array of Fr instances representing nullifiers to be matched.
|
|
57
|
+
* @param account - A PublicKey instance representing the account for which the records are being removed.
|
|
58
|
+
* @returns A Promise resolved with an array of removed NoteSpendingInfoDao instances.
|
|
59
|
+
*/
|
|
60
|
+
removeNullifiedNoteSpendingInfo(nullifiers: Fr[], account: PublicKey): Promise<NoteSpendingInfoDao[]>;
|
|
61
|
+
/**
|
|
62
|
+
* Retrieve the stored Merkle tree roots from the database.
|
|
63
|
+
* The function returns a Promise that resolves to an object containing the MerkleTreeId as keys
|
|
64
|
+
* and their corresponding Fr values as roots. Throws an error if the tree roots are not set in the
|
|
65
|
+
* memory database.
|
|
66
|
+
*
|
|
67
|
+
* @returns An object containing the Merkle tree roots for each merkle tree id.
|
|
68
|
+
*/
|
|
69
|
+
getTreeRoots(): Record<MerkleTreeId, Fr>;
|
|
70
|
+
/**
|
|
71
|
+
* Set the tree roots for the Merkle trees in the database.
|
|
72
|
+
* This function updates the 'treeRoots' property of the instance
|
|
73
|
+
* with the provided 'roots' object containing MerkleTreeId and Fr pairs.
|
|
74
|
+
* Note that this will overwrite any existing tree roots in the database.
|
|
75
|
+
*
|
|
76
|
+
* @param roots - A Record object mapping MerkleTreeIds to their corresponding Fr root values.
|
|
77
|
+
* @returns A Promise that resolves when the tree roots have been successfully updated in the database.
|
|
78
|
+
*/
|
|
79
|
+
setTreeRoots(roots: Record<MerkleTreeId, Fr>): Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* Retrieve the stored Historic Block Data from the database.
|
|
82
|
+
* The function returns a Promise that resolves to the Historic Block Data.
|
|
83
|
+
* This data is required to reproduce block attestations.
|
|
84
|
+
* Throws an error if the historic block data is not available within the database.
|
|
85
|
+
*
|
|
86
|
+
* note: this data is a combination of the tree roots and the global variables hash.
|
|
87
|
+
*/
|
|
88
|
+
getHistoricBlockData(): HistoricBlockData;
|
|
89
|
+
/**
|
|
90
|
+
* Set the latest Historic Block Data.
|
|
91
|
+
* This function updates the 'global variables hash' and `tree roots` property of the instance
|
|
92
|
+
* Note that this will overwrite any existing hash or roots in the database.
|
|
93
|
+
*
|
|
94
|
+
* @param historicBlockData - An object containing the most recent historic block data.
|
|
95
|
+
* @returns A Promise that resolves when the hash has been successfully updated in the database.
|
|
96
|
+
*/
|
|
97
|
+
setHistoricBlockData(historicBlockData: HistoricBlockData): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Adds complete address to the database.
|
|
100
|
+
* @param address - The complete address to add.
|
|
101
|
+
* @returns A promise resolving to true if the address was added, false if it already exists.
|
|
102
|
+
* @throws If we try to add a CompleteAddress with the same AztecAddress but different public key or partial
|
|
103
|
+
* address.
|
|
104
|
+
*/
|
|
105
|
+
addCompleteAddress(address: CompleteAddress): Promise<boolean>;
|
|
106
|
+
/**
|
|
107
|
+
* Retrieves the complete address corresponding to the provided aztec address.
|
|
108
|
+
* @param address - The aztec address of the complete address contract.
|
|
109
|
+
* @returns A promise that resolves to a CompleteAddress instance if the address is found, or undefined if not found.
|
|
110
|
+
*/
|
|
111
|
+
getCompleteAddress(address: AztecAddress): Promise<CompleteAddress | undefined>;
|
|
112
|
+
/**
|
|
113
|
+
* Retrieves the list of complete address added to this database
|
|
114
|
+
* @returns A promise that resolves to an array of AztecAddress instances.
|
|
115
|
+
*/
|
|
116
|
+
getCompleteAddresses(): Promise<CompleteAddress[]>;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/database/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE;;;GAGG;AACH,MAAM,WAAW,QAAS,SAAQ,gBAAgB;IAChD;;;;OAIG;IACH,cAAc,CAAC,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9D;;;;OAIG;IACH,cAAc,CAAC,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAE/C;;;;;;;;OAQG;IACH,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAE7F;;;;;;;OAOG;IACH,mBAAmB,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7E;;;;;;;OAOG;IACH,wBAAwB,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErF;;;;;;;;OAQG;IACH,+BAA+B,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAEtG;;;;;;;OAOG;IACH,YAAY,IAAI,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAEzC;;;;;;;;OAQG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D;;;;;;;OAOG;IACH,oBAAoB,IAAI,iBAAiB,CAAC;IAE1C;;;;;;;OAOG;IACH,oBAAoB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E;;;;;;OAMG;IACH,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/D;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IAEhF;;;OAGG;IACH,oBAAoB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;CACpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './database.js';
|
|
2
|
+
export * from './memory_db.js';
|
|
3
|
+
export * from './note_spending_info_dao.js';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDZCQUE2QixDQUFDIn0=
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { CompleteAddress, HistoricBlockData } from '@aztec/circuits.js';
|
|
2
|
+
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
3
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
+
import { MerkleTreeId, PublicKey } from '@aztec/types';
|
|
5
|
+
import { MemoryContractDatabase } from '../contract_database/index.js';
|
|
6
|
+
import { Database } from './database.js';
|
|
7
|
+
import { NoteSpendingInfoDao } from './note_spending_info_dao.js';
|
|
8
|
+
/**
|
|
9
|
+
* The MemoryDB class provides an in-memory implementation of a database to manage transactions and auxiliary data.
|
|
10
|
+
* It extends the MemoryContractDatabase, allowing it to store contract-related data as well.
|
|
11
|
+
* 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.
|
|
12
|
+
* As an in-memory database, the stored data will not persist beyond the life of the application instance.
|
|
13
|
+
*/
|
|
14
|
+
export declare class MemoryDB extends MemoryContractDatabase implements Database {
|
|
15
|
+
private noteSpendingInfoTable;
|
|
16
|
+
private treeRoots;
|
|
17
|
+
private globalVariablesHash;
|
|
18
|
+
private addresses;
|
|
19
|
+
private authWitnesses;
|
|
20
|
+
constructor(logSuffix?: string);
|
|
21
|
+
/**
|
|
22
|
+
* Add a auth witness to the database.
|
|
23
|
+
* @param messageHash - The message hash.
|
|
24
|
+
* @param witness - An array of field elements representing the auth witness.
|
|
25
|
+
*/
|
|
26
|
+
addAuthWitness(messageHash: Fr, witness: Fr[]): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Fetching the auth witness for a given message hash.
|
|
29
|
+
* @param messageHash - The message hash.
|
|
30
|
+
* @returns A Promise that resolves to an array of field elements representing the auth witness.
|
|
31
|
+
*/
|
|
32
|
+
getAuthWitness(messageHash: Fr): Promise<Fr[]>;
|
|
33
|
+
addNoteSpendingInfo(noteSpendingInfoDao: NoteSpendingInfoDao): Promise<void>;
|
|
34
|
+
addNoteSpendingInfoBatch(noteSpendingInfoDaos: NoteSpendingInfoDao[]): Promise<void>;
|
|
35
|
+
getNoteSpendingInfo(contract: AztecAddress, storageSlot: Fr): Promise<NoteSpendingInfoDao[]>;
|
|
36
|
+
removeNullifiedNoteSpendingInfo(nullifiers: Fr[], account: PublicKey): Promise<NoteSpendingInfoDao[]>;
|
|
37
|
+
getTreeRoots(): Record<MerkleTreeId, Fr>;
|
|
38
|
+
setTreeRoots(roots: Record<MerkleTreeId, Fr>): Promise<void>;
|
|
39
|
+
getHistoricBlockData(): HistoricBlockData;
|
|
40
|
+
setHistoricBlockData(historicBlockData: HistoricBlockData): Promise<void>;
|
|
41
|
+
addCompleteAddress(completeAddress: CompleteAddress): Promise<boolean>;
|
|
42
|
+
getCompleteAddress(address: AztecAddress): Promise<CompleteAddress | undefined>;
|
|
43
|
+
getCompleteAddresses(): Promise<CompleteAddress[]>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=memory_db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory_db.d.ts","sourceRoot":"","sources":["../../src/database/memory_db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE;;;;;GAKG;AACH,qBAAa,QAAS,SAAQ,sBAAuB,YAAW,QAAQ;IACtE,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,mBAAmB,CAAiB;IAC5C,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,aAAa,CAA4B;gBAErC,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,CAAC;IAI9C,mBAAmB,CAAC,mBAAmB,EAAE,mBAAmB;IAK5D,wBAAwB,CAAC,oBAAoB,EAAE,mBAAmB,EAAE;IAKpE,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE;IAS3D,+BAA+B,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS;IAoBpE,YAAY,IAAI,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;IAMxC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;IAK5C,oBAAoB,IAAI,iBAAiB;IAenC,oBAAoB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAY/E,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAetE,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAK/E,oBAAoB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;CAG1D"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { HistoricBlockData } from '@aztec/circuits.js';
|
|
2
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
3
|
+
import { createDebugLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { MerkleTreeId } from '@aztec/types';
|
|
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.noteSpendingInfoTable = [];
|
|
16
|
+
this.addresses = [];
|
|
17
|
+
this.authWitnesses = {};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Add a auth witness to the database.
|
|
21
|
+
* @param messageHash - The message hash.
|
|
22
|
+
* @param witness - An array of field elements representing the auth witness.
|
|
23
|
+
*/
|
|
24
|
+
addAuthWitness(messageHash, witness) {
|
|
25
|
+
this.authWitnesses[messageHash.toString()] = witness;
|
|
26
|
+
return Promise.resolve();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Fetching the auth witness for a given message hash.
|
|
30
|
+
* @param messageHash - The message hash.
|
|
31
|
+
* @returns A Promise that resolves to an array of field elements representing the auth witness.
|
|
32
|
+
*/
|
|
33
|
+
getAuthWitness(messageHash) {
|
|
34
|
+
return Promise.resolve(this.authWitnesses[messageHash.toString()]);
|
|
35
|
+
}
|
|
36
|
+
addNoteSpendingInfo(noteSpendingInfoDao) {
|
|
37
|
+
this.noteSpendingInfoTable.push(noteSpendingInfoDao);
|
|
38
|
+
return Promise.resolve();
|
|
39
|
+
}
|
|
40
|
+
addNoteSpendingInfoBatch(noteSpendingInfoDaos) {
|
|
41
|
+
this.noteSpendingInfoTable.push(...noteSpendingInfoDaos);
|
|
42
|
+
return Promise.resolve();
|
|
43
|
+
}
|
|
44
|
+
getNoteSpendingInfo(contract, storageSlot) {
|
|
45
|
+
const res = this.noteSpendingInfoTable.filter(noteSpendingInfo => noteSpendingInfo.contractAddress.equals(contract) &&
|
|
46
|
+
noteSpendingInfo.storageSlot.toBuffer().equals(storageSlot.toBuffer()));
|
|
47
|
+
return Promise.resolve(res);
|
|
48
|
+
}
|
|
49
|
+
removeNullifiedNoteSpendingInfo(nullifiers, account) {
|
|
50
|
+
const nullifierSet = new Set(nullifiers.map(nullifier => nullifier.toString()));
|
|
51
|
+
const [remaining, removed] = this.noteSpendingInfoTable.reduce((acc, noteSpendingInfo) => {
|
|
52
|
+
const nullifier = noteSpendingInfo.siloedNullifier.toString();
|
|
53
|
+
if (noteSpendingInfo.publicKey.equals(account) && nullifierSet.has(nullifier)) {
|
|
54
|
+
acc[1].push(noteSpendingInfo);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
acc[0].push(noteSpendingInfo);
|
|
58
|
+
}
|
|
59
|
+
return acc;
|
|
60
|
+
}, [[], []]);
|
|
61
|
+
this.noteSpendingInfoTable = remaining;
|
|
62
|
+
return Promise.resolve(removed);
|
|
63
|
+
}
|
|
64
|
+
getTreeRoots() {
|
|
65
|
+
const roots = this.treeRoots;
|
|
66
|
+
if (!roots)
|
|
67
|
+
throw new Error(`Tree roots not set in memory database`);
|
|
68
|
+
return roots;
|
|
69
|
+
}
|
|
70
|
+
setTreeRoots(roots) {
|
|
71
|
+
this.treeRoots = roots;
|
|
72
|
+
return Promise.resolve();
|
|
73
|
+
}
|
|
74
|
+
getHistoricBlockData() {
|
|
75
|
+
const roots = this.getTreeRoots();
|
|
76
|
+
if (!this.globalVariablesHash)
|
|
77
|
+
throw new Error(`Global variables hash not set in memory database`);
|
|
78
|
+
return new HistoricBlockData(roots[MerkleTreeId.PRIVATE_DATA_TREE], roots[MerkleTreeId.NULLIFIER_TREE], roots[MerkleTreeId.CONTRACT_TREE], roots[MerkleTreeId.L1_TO_L2_MESSAGES_TREE], roots[MerkleTreeId.BLOCKS_TREE], Fr.ZERO, // todo: private kernel vk tree root
|
|
79
|
+
roots[MerkleTreeId.PUBLIC_DATA_TREE], this.globalVariablesHash);
|
|
80
|
+
}
|
|
81
|
+
async setHistoricBlockData(historicBlockData) {
|
|
82
|
+
this.globalVariablesHash = historicBlockData.globalVariablesHash;
|
|
83
|
+
await this.setTreeRoots({
|
|
84
|
+
[MerkleTreeId.PRIVATE_DATA_TREE]: historicBlockData.privateDataTreeRoot,
|
|
85
|
+
[MerkleTreeId.NULLIFIER_TREE]: historicBlockData.nullifierTreeRoot,
|
|
86
|
+
[MerkleTreeId.CONTRACT_TREE]: historicBlockData.contractTreeRoot,
|
|
87
|
+
[MerkleTreeId.L1_TO_L2_MESSAGES_TREE]: historicBlockData.l1ToL2MessagesTreeRoot,
|
|
88
|
+
[MerkleTreeId.BLOCKS_TREE]: historicBlockData.blocksTreeRoot,
|
|
89
|
+
[MerkleTreeId.PUBLIC_DATA_TREE]: historicBlockData.publicDataTreeRoot,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
addCompleteAddress(completeAddress) {
|
|
93
|
+
const accountIndex = this.addresses.findIndex(r => r.address.equals(completeAddress.address));
|
|
94
|
+
if (accountIndex !== -1) {
|
|
95
|
+
if (this.addresses[accountIndex].equals(completeAddress)) {
|
|
96
|
+
return Promise.resolve(false);
|
|
97
|
+
}
|
|
98
|
+
throw new Error(`Complete address with aztec address ${completeAddress.address.toString()} but different public key or partial key already exists in memory database`);
|
|
99
|
+
}
|
|
100
|
+
this.addresses.push(completeAddress);
|
|
101
|
+
return Promise.resolve(true);
|
|
102
|
+
}
|
|
103
|
+
getCompleteAddress(address) {
|
|
104
|
+
const recipient = this.addresses.find(r => r.address.equals(address));
|
|
105
|
+
return Promise.resolve(recipient);
|
|
106
|
+
}
|
|
107
|
+
getCompleteAddresses() {
|
|
108
|
+
return Promise.resolve(this.addresses);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5X2RiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFiYXNlL21lbW9yeV9kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSxjQUFjLENBQUM7QUFFdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJdkU7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sUUFBUyxTQUFRLHNCQUFzQjtJQU9sRCxZQUFZLFNBQWtCO1FBQzVCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBUG5GLDBCQUFxQixHQUEwQixFQUFFLENBQUM7UUFHbEQsY0FBUyxHQUFzQixFQUFFLENBQUM7UUFDbEMsa0JBQWEsR0FBeUIsRUFBRSxDQUFDO0lBSWpELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYyxDQUFDLFdBQWUsRUFBRSxPQUFhO1FBQ2xELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ3JELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYyxDQUFDLFdBQWU7UUFDbkMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRU0sbUJBQW1CLENB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
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { AztecAddress, Fr, PublicKey } from '@aztec/circuits.js';
|
|
2
|
+
import { NotePreimage } from '@aztec/types';
|
|
3
|
+
/**
|
|
4
|
+
* Represents the data access object for auxiliary transaction data.
|
|
5
|
+
* Contains properties from the decrypted note, computed properties, and information about
|
|
6
|
+
* the public key used for encryption, as well as the location of the data in the tree.
|
|
7
|
+
*/
|
|
8
|
+
export interface NoteSpendingInfoDao {
|
|
9
|
+
/**
|
|
10
|
+
* The contract address this note is created in.
|
|
11
|
+
*/
|
|
12
|
+
contractAddress: AztecAddress;
|
|
13
|
+
/**
|
|
14
|
+
* The nonce of the note.
|
|
15
|
+
*/
|
|
16
|
+
nonce: Fr;
|
|
17
|
+
/**
|
|
18
|
+
* The specific storage location of the note on the contract.
|
|
19
|
+
*/
|
|
20
|
+
storageSlot: Fr;
|
|
21
|
+
/**
|
|
22
|
+
* The preimage of the note, containing essential information about the note.
|
|
23
|
+
*/
|
|
24
|
+
notePreimage: NotePreimage;
|
|
25
|
+
/**
|
|
26
|
+
* Inner note hash of the note. This is customisable by the app circuit.
|
|
27
|
+
* We can use this value to compute siloedNoteHash and uniqueSiloedNoteHash.
|
|
28
|
+
*/
|
|
29
|
+
innerNoteHash: Fr;
|
|
30
|
+
/**
|
|
31
|
+
* The nullifier of the note (siloed by contract address).
|
|
32
|
+
*/
|
|
33
|
+
siloedNullifier: Fr;
|
|
34
|
+
/**
|
|
35
|
+
* The location of the relevant note in the private data tree.
|
|
36
|
+
*/
|
|
37
|
+
index: bigint;
|
|
38
|
+
/**
|
|
39
|
+
* The public key that was used to encrypt the data.
|
|
40
|
+
*/
|
|
41
|
+
publicKey: PublicKey;
|
|
42
|
+
}
|
|
43
|
+
export declare const createRandomNoteSpendingInfoDao: ({ contractAddress, nonce, storageSlot, notePreimage, innerNoteHash, siloedNullifier, index, publicKey, }?: Partial<NoteSpendingInfoDao>) => NoteSpendingInfoDao;
|
|
44
|
+
//# sourceMappingURL=note_spending_info_dao.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"note_spending_info_dao.d.ts","sourceRoot":"","sources":["../../src/database/note_spending_info_dao.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,eAAe,EAAE,YAAY,CAAC;IAC9B;;OAEG;IACH,KAAK,EAAE,EAAE,CAAC;IACV;;OAEG;IACH,WAAW,EAAE,EAAE,CAAC;IAChB;;OAEG;IACH,YAAY,EAAE,YAAY,CAAC;IAC3B;;;OAGG;IACH,aAAa,EAAE,EAAE,CAAC;IAClB;;OAEG;IACH,eAAe,EAAE,EAAE,CAAC;IACpB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,eAAO,MAAM,+BAA+B,8GASzC,QAAQ,mBAAmB,CAAC,KAAQ,mBASrC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AztecAddress, Fr } from '@aztec/circuits.js';
|
|
2
|
+
import { Point } from '@aztec/foundation/fields';
|
|
3
|
+
import { NotePreimage } from '@aztec/types';
|
|
4
|
+
export const createRandomNoteSpendingInfoDao = ({ contractAddress = AztecAddress.random(), nonce = Fr.random(), storageSlot = Fr.random(), notePreimage = NotePreimage.random(), innerNoteHash = Fr.random(), siloedNullifier = Fr.random(), index = Fr.random().value, publicKey = Point.random(), } = {}) => ({
|
|
5
|
+
contractAddress,
|
|
6
|
+
nonce,
|
|
7
|
+
storageSlot,
|
|
8
|
+
notePreimage,
|
|
9
|
+
innerNoteHash,
|
|
10
|
+
siloedNullifier,
|
|
11
|
+
index,
|
|
12
|
+
publicKey,
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZV9zcGVuZGluZ19pbmZvX2Rhby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9ub3RlX3NwZW5kaW5nX2luZm9fZGFvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFhLE1BQU0sb0JBQW9CLENBQUM7QUFDakUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUEyQzVDLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLENBQUMsRUFDOUMsZUFBZSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsRUFDdkMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFDbkIsV0FBVyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFDekIsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsRUFDcEMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFDM0IsZUFBZSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFDN0IsS0FBSyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQ3pCLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQ00sRUFBRSxFQUF1QixFQUFFLENBQUMsQ0FBQztJQUM3RCxlQUFlO0lBQ2YsS0FBSztJQUNMLFdBQVc7SUFDWCxZQUFZO0lBQ1osYUFBYTtJQUNiLGVBQWU7SUFDZixLQUFLO0lBQ0wsU0FBUztDQUNWLENBQUMsQ0FBQyJ9
|
package/dest/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './pxe_service/index.js';
|
|
2
|
+
export * from './pxe_http/index.js';
|
|
3
|
+
export * from './config/index.js';
|
|
4
|
+
export { Tx, TxHash } from '@aztec/types';
|
|
5
|
+
export { TxRequest, CircuitsWasm, PartialAddress } from '@aztec/circuits.js';
|
|
6
|
+
export * from '@aztec/foundation/fields';
|
|
7
|
+
export * from '@aztec/foundation/eth-address';
|
|
8
|
+
export * from '@aztec/foundation/aztec-address';
|
|
9
|
+
export * from '@aztec/key-store';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC7E,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,kBAAkB,CAAC"}
|
package/dest/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './pxe_service/index.js';
|
|
2
|
+
export * from './pxe_http/index.js';
|
|
3
|
+
export * from './config/index.js';
|
|
4
|
+
export { Tx, TxHash } from '@aztec/types';
|
|
5
|
+
export { TxRequest, CircuitsWasm } from '@aztec/circuits.js';
|
|
6
|
+
export * from '@aztec/foundation/fields';
|
|
7
|
+
export * from '@aztec/foundation/eth-address';
|
|
8
|
+
export * from '@aztec/foundation/aztec-address';
|
|
9
|
+
export * from '@aztec/key-store';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsbUJBQW1CLENBQUM7QUFFbEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQWtCLE1BQU0sb0JBQW9CLENBQUM7QUFDN0UsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxrQkFBa0IsQ0FBQyJ9
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AztecAddress, Fr, FunctionSelector, MembershipWitness, PRIVATE_DATA_TREE_HEIGHT } from '@aztec/circuits.js';
|
|
2
|
+
import { AztecNode } from '@aztec/types';
|
|
3
|
+
import { ContractDataOracle } from '../contract_data_oracle/index.js';
|
|
4
|
+
import { ProvingDataOracle } from './../kernel_prover/proving_data_oracle.js';
|
|
5
|
+
/**
|
|
6
|
+
* A data oracle that provides information needed for simulating a transaction.
|
|
7
|
+
*/
|
|
8
|
+
export declare class KernelOracle implements ProvingDataOracle {
|
|
9
|
+
private contractDataOracle;
|
|
10
|
+
private node;
|
|
11
|
+
constructor(contractDataOracle: ContractDataOracle, node: AztecNode);
|
|
12
|
+
getContractMembershipWitness(contractAddress: AztecAddress): Promise<MembershipWitness<16>>;
|
|
13
|
+
getFunctionMembershipWitness(contractAddress: AztecAddress, selector: FunctionSelector): Promise<MembershipWitness<4>>;
|
|
14
|
+
getVkMembershipWitness(): Promise<MembershipWitness<3>>;
|
|
15
|
+
getNoteMembershipWitness(leafIndex: bigint): Promise<MembershipWitness<typeof PRIVATE_DATA_TREE_HEIGHT>>;
|
|
16
|
+
getPrivateDataRoot(): Promise<Fr>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/kernel_oracle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAErH,OAAO,EAAE,SAAS,EAAgB,MAAM,cAAc,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAE9E;;GAEG;AACH,qBAAa,YAAa,YAAW,iBAAiB;IACxC,OAAO,CAAC,kBAAkB;IAAsB,OAAO,CAAC,IAAI;gBAApD,kBAAkB,EAAE,kBAAkB,EAAU,IAAI,EAAE,SAAS;IAEtE,4BAA4B,CAAC,eAAe,EAAE,YAAY;IAI1D,4BAA4B,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB;IAItF,sBAAsB;IAI7B,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,OAAO,wBAAwB,CAAC,CAAC;IASxG,kBAAkB,IAAI,OAAO,CAAC,EAAE,CAAC;CAIxC"}
|