@aztec/pxe 0.76.4 → 0.77.0-testnet-ignition.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bin/index.js +4 -6
- package/dest/config/index.d.ts +2 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +20 -23
- package/dest/config/package_info.js +4 -2
- package/dest/contract_data_oracle/index.d.ts +10 -10
- package/dest/contract_data_oracle/index.d.ts.map +1 -1
- package/dest/contract_data_oracle/index.js +74 -89
- package/dest/contract_data_oracle/private_functions_tree.d.ts +5 -4
- package/dest/contract_data_oracle/private_functions_tree.d.ts.map +1 -1
- package/dest/contract_data_oracle/private_functions_tree.js +47 -51
- package/dest/database/contracts/contract_artifact_db.d.ts +2 -2
- package/dest/database/contracts/contract_artifact_db.d.ts.map +1 -1
- package/dest/database/contracts/contract_artifact_db.js +3 -2
- package/dest/database/contracts/contract_instance_db.d.ts +2 -1
- package/dest/database/contracts/contract_instance_db.d.ts.map +1 -1
- package/dest/database/contracts/contract_instance_db.js +3 -2
- package/dest/database/index.js +0 -1
- package/dest/database/kv_pxe_database.d.ts +9 -5
- package/dest/database/kv_pxe_database.d.ts.map +1 -1
- package/dest/database/kv_pxe_database.js +244 -257
- package/dest/database/note_dao.d.ts +13 -10
- package/dest/database/note_dao.d.ts.map +1 -1
- package/dest/database/note_dao.js +35 -48
- package/dest/database/outgoing_note_dao.d.ts +6 -3
- package/dest/database/outgoing_note_dao.d.ts.map +1 -1
- package/dest/database/outgoing_note_dao.js +25 -37
- package/dest/database/pxe_database.d.ts +12 -8
- package/dest/database/pxe_database.d.ts.map +1 -1
- package/dest/database/pxe_database.js +4 -2
- package/dest/database/pxe_database_test_suite.d.ts +1 -1
- package/dest/database/pxe_database_test_suite.d.ts.map +1 -1
- package/dest/database/pxe_database_test_suite.js +286 -147
- package/dest/index.d.ts +1 -6
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -7
- package/dest/kernel_oracle/index.d.ts +20 -10
- package/dest/kernel_oracle/index.d.ts.map +1 -1
- package/dest/kernel_oracle/index.js +32 -9
- package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.d.ts +3 -3
- package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.d.ts.map +1 -1
- package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.js +71 -67
- package/dest/kernel_prover/hints/index.js +0 -1
- package/dest/kernel_prover/index.js +0 -1
- package/dest/kernel_prover/kernel_prover.d.ts +6 -6
- package/dest/kernel_prover/kernel_prover.d.ts.map +1 -1
- package/dest/kernel_prover/kernel_prover.js +98 -81
- package/dest/kernel_prover/proving_data_oracle.d.ts +15 -7
- package/dest/kernel_prover/proving_data_oracle.d.ts.map +1 -1
- package/dest/kernel_prover/proving_data_oracle.js +4 -2
- package/dest/note_decryption_utils/add_public_values_to_payload.d.ts +3 -2
- package/dest/note_decryption_utils/add_public_values_to_payload.d.ts.map +1 -1
- package/dest/note_decryption_utils/add_public_values_to_payload.js +11 -12
- package/dest/pxe_http/index.js +0 -1
- package/dest/pxe_http/pxe_http_server.d.ts +1 -1
- package/dest/pxe_http/pxe_http_server.d.ts.map +1 -1
- package/dest/pxe_http/pxe_http_server.js +9 -7
- package/dest/pxe_service/error_enriching.d.ts +3 -3
- package/dest/pxe_service/error_enriching.d.ts.map +1 -1
- package/dest/pxe_service/error_enriching.js +14 -17
- package/dest/pxe_service/index.d.ts +0 -1
- package/dest/pxe_service/index.d.ts.map +1 -1
- package/dest/pxe_service/index.js +0 -2
- package/dest/pxe_service/pxe_service.d.ts +21 -12
- package/dest/pxe_service/pxe_service.d.ts.map +1 -1
- package/dest/pxe_service/pxe_service.js +279 -333
- package/dest/pxe_service/test/pxe_test_suite.d.ts +1 -1
- package/dest/pxe_service/test/pxe_test_suite.d.ts.map +1 -1
- package/dest/pxe_service/test/pxe_test_suite.js +44 -28
- package/dest/simulator/index.d.ts +3 -3
- package/dest/simulator/index.d.ts.map +1 -1
- package/dest/simulator/index.js +1 -3
- package/dest/simulator_oracle/index.d.ts +18 -6
- package/dest/simulator_oracle/index.d.ts.map +1 -1
- package/dest/simulator_oracle/index.js +307 -235
- package/dest/simulator_oracle/tagging_utils.d.ts +2 -1
- package/dest/simulator_oracle/tagging_utils.d.ts.map +1 -1
- package/dest/simulator_oracle/tagging_utils.js +5 -7
- package/dest/synchronizer/index.js +0 -1
- package/dest/synchronizer/synchronizer.d.ts +7 -4
- package/dest/synchronizer/synchronizer.d.ts.map +1 -1
- package/dest/synchronizer/synchronizer.js +64 -43
- package/dest/utils/create_pxe_service.d.ts +2 -2
- package/dest/utils/create_pxe_service.d.ts.map +1 -1
- package/dest/utils/create_pxe_service.js +13 -11
- package/package.json +18 -19
- package/src/bin/index.ts +1 -1
- package/src/config/index.ts +3 -3
- package/src/contract_data_oracle/index.ts +20 -20
- package/src/contract_data_oracle/private_functions_tree.ts +6 -7
- package/src/database/contracts/contract_artifact_db.ts +2 -2
- package/src/database/contracts/contract_instance_db.ts +2 -1
- package/src/database/kv_pxe_database.ts +33 -32
- package/src/database/note_dao.ts +11 -8
- package/src/database/outgoing_note_dao.ts +7 -4
- package/src/database/pxe_database.ts +13 -15
- package/src/database/pxe_database_test_suite.ts +8 -11
- package/src/index.ts +1 -7
- package/src/kernel_oracle/index.ts +55 -22
- package/src/kernel_prover/hints/build_private_kernel_reset_private_inputs.ts +14 -11
- package/src/kernel_prover/kernel_prover.ts +89 -69
- package/src/kernel_prover/proving_data_oracle.ts +20 -20
- package/src/note_decryption_utils/add_public_values_to_payload.ts +5 -4
- package/src/pxe_http/pxe_http_server.ts +1 -1
- package/src/pxe_service/error_enriching.ts +6 -6
- package/src/pxe_service/index.ts +0 -1
- package/src/pxe_service/pxe_service.ts +121 -224
- package/src/pxe_service/test/pxe_test_suite.ts +6 -3
- package/src/simulator/index.ts +3 -3
- package/src/simulator_oracle/index.ts +77 -47
- package/src/simulator_oracle/tagging_utils.ts +2 -1
- package/src/synchronizer/synchronizer.ts +31 -12
- package/src/utils/create_pxe_service.ts +16 -4
package/dest/index.d.ts
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
export * from './pxe_service/index.js';
|
|
2
|
+
export { pxeTestSuite } from './pxe_service/test/pxe_test_suite.js';
|
|
2
3
|
export * from './pxe_http/index.js';
|
|
3
4
|
export * from './config/index.js';
|
|
4
5
|
export * from './utils/create_pxe_service.js';
|
|
5
|
-
export { Tx, TxHash } from '@aztec/circuit-types';
|
|
6
|
-
export { TxRequest } from '@aztec/circuits.js';
|
|
7
|
-
export * from '@aztec/foundation/fields';
|
|
8
|
-
export * from '@aztec/foundation/eth-address';
|
|
9
|
-
export * from '@aztec/foundation/aztec-address';
|
|
10
|
-
export * from '@aztec/key-store';
|
|
11
6
|
export * from './database/index.js';
|
|
12
7
|
export { ContractDataOracle } from './contract_data_oracle/index.js';
|
|
13
8
|
export { PrivateFunctionsTree } from './contract_data_oracle/private_functions_tree.js';
|
package/dest/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,+BAA+B,CAAC;AAE9C,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC"}
|
package/dest/index.js
CHANGED
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
export * from './pxe_service/index.js';
|
|
2
|
+
export { pxeTestSuite } from './pxe_service/test/pxe_test_suite.js';
|
|
2
3
|
export * from './pxe_http/index.js';
|
|
3
4
|
export * from './config/index.js';
|
|
4
5
|
export * from './utils/create_pxe_service.js';
|
|
5
|
-
export { Tx, TxHash } from '@aztec/circuit-types';
|
|
6
|
-
export { TxRequest } from '@aztec/circuits.js';
|
|
7
|
-
export * from '@aztec/foundation/fields';
|
|
8
|
-
export * from '@aztec/foundation/eth-address';
|
|
9
|
-
export * from '@aztec/foundation/aztec-address';
|
|
10
|
-
export * from '@aztec/key-store';
|
|
11
6
|
export * from './database/index.js';
|
|
12
7
|
export { ContractDataOracle } from './contract_data_oracle/index.js';
|
|
13
8
|
export { PrivateFunctionsTree } from './contract_data_oracle/private_functions_tree.js';
|
|
14
9
|
export { SimulatorOracle } from './simulator_oracle/index.js';
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywrQkFBK0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDeEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDIn0=
|
|
@@ -1,8 +1,16 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { type NOTE_HASH_TREE_HEIGHT } from '@aztec/constants';
|
|
2
|
+
import type { Fr, GrumpkinScalar, Point } from '@aztec/foundation/fields';
|
|
3
|
+
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
4
|
+
import type { KeyStore } from '@aztec/key-store';
|
|
5
|
+
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
6
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
7
|
+
import type { L2BlockNumber } from '@aztec/stdlib/block';
|
|
8
|
+
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
9
|
+
import { UpdatedClassIdHints } from '@aztec/stdlib/kernel';
|
|
10
|
+
import type { NullifierMembershipWitness } from '@aztec/stdlib/trees';
|
|
11
|
+
import type { VerificationKeyAsFields } from '@aztec/stdlib/vks';
|
|
12
|
+
import type { ContractDataOracle } from '../contract_data_oracle/index.js';
|
|
13
|
+
import type { ProvingDataOracle } from './../kernel_prover/proving_data_oracle.js';
|
|
6
14
|
/**
|
|
7
15
|
* A data oracle that provides information needed for simulating a transaction.
|
|
8
16
|
*/
|
|
@@ -17,18 +25,20 @@ export declare class KernelOracle implements ProvingDataOracle {
|
|
|
17
25
|
version: 1;
|
|
18
26
|
salt: Fr;
|
|
19
27
|
deployer: AztecAddress;
|
|
20
|
-
|
|
28
|
+
currentContractClassId: Fr;
|
|
29
|
+
originalContractClassId: Fr;
|
|
21
30
|
initializationHash: Fr;
|
|
22
|
-
publicKeys: import("@aztec/
|
|
31
|
+
publicKeys: import("@aztec/aztec.js").PublicKeys;
|
|
23
32
|
saltedInitializationHash: Fr;
|
|
24
33
|
}>;
|
|
25
|
-
getContractClassIdPreimage(contractClassId: Fr): Promise<import("@aztec/
|
|
26
|
-
getFunctionMembershipWitness(
|
|
34
|
+
getContractClassIdPreimage(contractClassId: Fr): Promise<import("@aztec/stdlib/contract").ContractClassIdPreimage>;
|
|
35
|
+
getFunctionMembershipWitness(contractClassId: Fr, selector: FunctionSelector): Promise<MembershipWitness<5>>;
|
|
27
36
|
getVkMembershipWitness(vk: VerificationKeyAsFields): Promise<MembershipWitness<6>>;
|
|
28
37
|
getNoteHashMembershipWitness(leafIndex: bigint): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT>>;
|
|
29
|
-
getNullifierMembershipWitness(nullifier: Fr): Promise<
|
|
38
|
+
getNullifierMembershipWitness(nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
|
|
30
39
|
getNoteHashTreeRoot(): Promise<Fr>;
|
|
31
40
|
getMasterSecretKey(masterPublicKey: Point): Promise<GrumpkinScalar>;
|
|
32
41
|
getDebugFunctionName(contractAddress: AztecAddress, selector: FunctionSelector): Promise<string>;
|
|
42
|
+
getUpdatedClassIdHints(contractAddress: AztecAddress): Promise<UpdatedClassIdHints>;
|
|
33
43
|
}
|
|
34
44
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/kernel_oracle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/kernel_oracle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAA2C,MAAM,kBAAkB,CAAC;AACvG,OAAO,KAAK,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAG1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAInF;;GAEG;AACH,qBAAa,YAAa,YAAW,iBAAiB;IAElD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,GAAG;gBAJH,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,SAAS,EACf,WAAW,GAAE,aAAwB,EACrC,GAAG,yCAAoC;IAGpC,0BAA0B,CAAC,OAAO,EAAE,YAAY;;;;;;;;;;IAQhD,0BAA0B,CAAC,eAAe,EAAE,EAAE;IAK9C,4BAA4B,CAAC,eAAe,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB;IAIlF,sBAAsB,CAAC,EAAE,EAAE,uBAAuB;IAKnD,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,OAAO,qBAAqB,CAAC,CAAC;IAS/G,6BAA6B,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC;IAIvF,mBAAmB,IAAI,OAAO,CAAC,EAAE,CAAC;IAQjC,kBAAkB,CAAC,eAAe,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC;IAInE,oBAAoB,CAAC,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1F,sBAAsB,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA6BjG"}
|
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PUBLIC_DATA_TREE_HEIGHT, VK_TREE_HEIGHT } from '@aztec/constants';
|
|
2
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
-
import {
|
|
3
|
+
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
4
|
+
import { getVKIndex, getVKSiblingPath } from '@aztec/noir-protocol-circuits-types/vk-tree';
|
|
5
|
+
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
6
|
+
import { computeContractClassIdPreimage, computeSaltedInitializationHash } from '@aztec/stdlib/contract';
|
|
7
|
+
import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
|
|
8
|
+
import { UpdatedClassIdHints } from '@aztec/stdlib/kernel';
|
|
9
|
+
import { SharedMutableValues, SharedMutableValuesWithHash } from '@aztec/stdlib/shared-mutable';
|
|
4
10
|
// TODO: Block number should not be "latest".
|
|
5
11
|
// It should be fixed at the time the proof is being simulated. I.e., it should be the same as the value defined in the constant data.
|
|
6
12
|
/**
|
|
7
13
|
* A data oracle that provides information needed for simulating a transaction.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
|
|
14
|
+
*/ export class KernelOracle {
|
|
15
|
+
contractDataOracle;
|
|
16
|
+
keyStore;
|
|
17
|
+
node;
|
|
18
|
+
blockNumber;
|
|
19
|
+
log;
|
|
20
|
+
constructor(contractDataOracle, keyStore, node, blockNumber = 'latest', log = createLogger('pxe:kernel_oracle')){
|
|
11
21
|
this.contractDataOracle = contractDataOracle;
|
|
12
22
|
this.keyStore = keyStore;
|
|
13
23
|
this.node = node;
|
|
@@ -18,15 +28,15 @@ export class KernelOracle {
|
|
|
18
28
|
const instance = await this.contractDataOracle.getContractInstance(address);
|
|
19
29
|
return {
|
|
20
30
|
saltedInitializationHash: await computeSaltedInitializationHash(instance),
|
|
21
|
-
...instance
|
|
31
|
+
...instance
|
|
22
32
|
};
|
|
23
33
|
}
|
|
24
34
|
async getContractClassIdPreimage(contractClassId) {
|
|
25
35
|
const contractClass = await this.contractDataOracle.getContractClass(contractClassId);
|
|
26
36
|
return computeContractClassIdPreimage(contractClass);
|
|
27
37
|
}
|
|
28
|
-
async getFunctionMembershipWitness(
|
|
29
|
-
return await this.contractDataOracle.getFunctionMembershipWitness(
|
|
38
|
+
async getFunctionMembershipWitness(contractClassId, selector) {
|
|
39
|
+
return await this.contractDataOracle.getFunctionMembershipWitness(contractClassId, selector);
|
|
30
40
|
}
|
|
31
41
|
getVkMembershipWitness(vk) {
|
|
32
42
|
const leafIndex = getVKIndex(vk);
|
|
@@ -41,6 +51,9 @@ export class KernelOracle {
|
|
|
41
51
|
}
|
|
42
52
|
async getNoteHashTreeRoot() {
|
|
43
53
|
const header = await this.node.getBlockHeader(this.blockNumber);
|
|
54
|
+
if (!header) {
|
|
55
|
+
throw new Error(`No block header found for block number ${this.blockNumber}`);
|
|
56
|
+
}
|
|
44
57
|
return header.state.partial.noteHashTree.root;
|
|
45
58
|
}
|
|
46
59
|
getMasterSecretKey(masterPublicKey) {
|
|
@@ -49,5 +62,15 @@ export class KernelOracle {
|
|
|
49
62
|
getDebugFunctionName(contractAddress, selector) {
|
|
50
63
|
return this.contractDataOracle.getDebugFunctionName(contractAddress, selector);
|
|
51
64
|
}
|
|
65
|
+
async getUpdatedClassIdHints(contractAddress) {
|
|
66
|
+
const { sharedMutableSlot, sharedMutableHashSlot } = await SharedMutableValuesWithHash.getContractUpdateSlots(contractAddress);
|
|
67
|
+
const hashLeafSlot = await computePublicDataTreeLeafSlot(ProtocolContractAddress.ContractInstanceDeployer, sharedMutableHashSlot);
|
|
68
|
+
const updatedClassIdWitness = await this.node.getPublicDataTreeWitness(this.blockNumber, hashLeafSlot);
|
|
69
|
+
if (!updatedClassIdWitness) {
|
|
70
|
+
throw new Error(`No public data tree witness found for ${hashLeafSlot}`);
|
|
71
|
+
}
|
|
72
|
+
const readStorage = (storageSlot)=>this.node.getPublicStorageAt(ProtocolContractAddress.ContractInstanceDeployer, storageSlot, this.blockNumber);
|
|
73
|
+
const sharedMutableValues = await SharedMutableValues.readFromTree(sharedMutableSlot, readStorage);
|
|
74
|
+
return new UpdatedClassIdHints(new MembershipWitness(PUBLIC_DATA_TREE_HEIGHT, updatedClassIdWitness.index, updatedClassIdWitness.siblingPath.toTuple()), updatedClassIdWitness.leafPreimage, sharedMutableValues);
|
|
75
|
+
}
|
|
52
76
|
}
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2VybmVsX29yYWNsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBS0wsaUJBQWlCLEVBR2pCLGNBQWMsRUFFZCw4QkFBOEIsRUFDOUIsK0JBQStCLEdBQ2hDLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUt2Riw2Q0FBNkM7QUFDN0Msc0lBQXNJO0FBQ3RJOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFDVSxrQkFBc0MsRUFDdEMsUUFBa0IsRUFDbEIsSUFBZSxFQUNmLGNBQTZCLFFBQVEsRUFDckMsTUFBTSxZQUFZLENBQUMsbUJBQW1CLENBQUM7UUFKdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFNBQUksR0FBSixJQUFJLENBQVc7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBMEI7UUFDckMsUUFBRyxHQUFILEdBQUcsQ0FBb0M7SUFDOUMsQ0FBQztJQUVHLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxPQUFxQjtRQUMzRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RSxPQUFPO1lBQ0wsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQyxRQUFRLENBQUM7WUFDekUsR0FBRyxRQUFRO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsMEJBQTBCLENBQUMsZUFBbUI7UUFDekQsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdEYsT0FBTyw4QkFBOEIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU0sS0FBSyxDQUFDLDRCQUE0QixDQUFDLGVBQTZCLEVBQUUsUUFBMEI7UUFDakcsT0FBTyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyw0QkFBNEIsQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVNLHNCQUFzQixDQUFDLEVBQTJCO1FBQ3ZELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoSCxDQUFDO0lBRUQsS0FBSyxDQUFDLDRCQUE0QixDQUFDLFNBQWlCO1FBQ2xELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2pGLE9BQU8sSUFBSSxpQkFBaUIsQ0FDMUIsSUFBSSxDQUFDLFFBQVEsRUFDYixTQUFTLEVBQ1QsSUFBSSxDQUFDLFFBQVEsRUFBNkMsQ0FDM0QsQ0FBQztJQUNKLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxTQUFhO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztJQUNoRCxDQUFDO0lBRU0sa0JBQWtCLENBQUMsZUFBc0I7UUFDOUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxlQUE2QixFQUFFLFFBQTBCO1FBQ25GLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNqRixDQUFDO0NBQ0YifQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import { type
|
|
3
|
-
import {
|
|
1
|
+
import { type PrivateKernelCircuitPublicInputs, PrivateKernelResetCircuitPrivateInputs, type PrivateKernelSimulateOutput } from '@aztec/stdlib/kernel';
|
|
2
|
+
import { type PrivateCallExecutionResult } from '@aztec/stdlib/tx';
|
|
3
|
+
import type { ProvingDataOracle } from '../proving_data_oracle.js';
|
|
4
4
|
export declare class PrivateKernelResetPrivateInputsBuilder {
|
|
5
5
|
private previousKernelOutput;
|
|
6
6
|
private executionStack;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build_private_kernel_reset_private_inputs.d.ts","sourceRoot":"","sources":["../../../src/kernel_prover/hints/build_private_kernel_reset_private_inputs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build_private_kernel_reset_private_inputs.d.ts","sourceRoot":"","sources":["../../../src/kernel_prover/hints/build_private_kernel_reset_private_inputs.ts"],"names":[],"mappings":"AAeA,OAAO,EAGL,KAAK,gCAAgC,EAErC,sCAAsC,EAGtC,KAAK,2BAA2B,EAkBjC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,0BAA0B,EAAiB,MAAM,kBAAkB,CAAC;AAElF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAiDnE,qBAAa,sCAAsC;IAY/C,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,2BAA2B;IACnC,OAAO,CAAC,8BAA8B;IAdxC,OAAO,CAAC,cAAc,CAAmC;IAEzD,OAAO,CAAC,aAAa,CAAC,CAA6B;IAEnD,OAAO,CAAC,mBAAmB,CAAoE;IAC/F,OAAO,CAAC,oBAAoB,CAAoE;IAChG,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,uBAAuB,CAA8D;IAC7F,OAAO,CAAC,mBAAmB,CAA+B;gBAGhD,oBAAoB,EAAE,2BAA2B,CAAC,gCAAgC,CAAC,EACnF,cAAc,EAAE,0BAA0B,EAAE,EAC5C,2BAA2B,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAChD,8BAA8B,EAAE,MAAM;IAahD,UAAU,IAAI,OAAO;IAwBf,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAgEhF,OAAO,CAAC,uBAAuB;IA2B/B,OAAO,CAAC,8BAA8B;IAoDtC,OAAO,CAAC,+BAA+B;IAoDvC,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,uBAAuB;IAmE/B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,oBAAoB;CAmB7B"}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { KeyValidationHint, MAX_KEY_VALIDATION_REQUESTS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NOTE_HASH_READ_REQUESTS_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX, MembershipWitness, NULLIFIER_TREE_HEIGHT, PrivateKernelData, PrivateKernelResetCircuitPrivateInputs, PrivateKernelResetDimensions, PrivateKernelResetHints, ReadRequestResetStates, ReadRequestState, ScopedNoteHash, ScopedNullifier, ScopedReadRequest, TransientDataIndexHint, VK_TREE_HEIGHT, buildNoteHashReadRequestHintsFromResetStates, buildNullifierReadRequestHintsFromResetStates, buildTransientDataHints, countAccumulatedItems, findPrivateKernelResetDimensions, getNonEmptyItems, getNoteHashReadRequestResetStates, getNullifierReadRequestResetStates, privateKernelResetDimensionNames, } from '@aztec/circuits.js';
|
|
1
|
+
import { MAX_KEY_VALIDATION_REQUESTS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NOTE_HASH_READ_REQUESTS_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX, NULLIFIER_TREE_HEIGHT, VK_TREE_HEIGHT } from '@aztec/constants';
|
|
3
2
|
import { makeTuple } from '@aztec/foundation/array';
|
|
4
3
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
5
4
|
import { assertLength } from '@aztec/foundation/serialize';
|
|
5
|
+
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
6
6
|
import { privateKernelResetDimensionsConfig } from '@aztec/noir-protocol-circuits-types/client';
|
|
7
|
+
import { KeyValidationHint, PrivateKernelData, PrivateKernelResetCircuitPrivateInputs, PrivateKernelResetDimensions, PrivateKernelResetHints, ReadRequestResetStates, ReadRequestState, ScopedNoteHash, ScopedNullifier, ScopedReadRequest, TransientDataIndexHint, buildNoteHashReadRequestHintsFromResetStates, buildNullifierReadRequestHintsFromResetStates, buildTransientDataHints, countAccumulatedItems, findPrivateKernelResetDimensions, getNonEmptyItems, getNoteHashReadRequestResetStates, getNullifierReadRequestResetStates, privateKernelResetDimensionNames } from '@aztec/stdlib/kernel';
|
|
8
|
+
import { collectNested } from '@aztec/stdlib/tx';
|
|
7
9
|
function collectNestedReadRequests(executionStack, extractReadRequests) {
|
|
8
|
-
return collectNested(executionStack, executionResult
|
|
10
|
+
return collectNested(executionStack, (executionResult)=>{
|
|
9
11
|
const nonEmptyReadRequests = getNonEmptyItems(extractReadRequests(executionResult));
|
|
10
|
-
return nonEmptyReadRequests.map(readRequest
|
|
12
|
+
return nonEmptyReadRequests.map((readRequest)=>new ScopedReadRequest(readRequest, executionResult.publicInputs.callContext.contractAddress));
|
|
11
13
|
});
|
|
12
14
|
}
|
|
13
15
|
function getNullifierMembershipWitnessResolver(oracle) {
|
|
14
|
-
return async (nullifier)
|
|
16
|
+
return async (nullifier)=>{
|
|
15
17
|
const res = await oracle.getNullifierMembershipWitness(nullifier);
|
|
16
18
|
if (!res) {
|
|
17
19
|
throw new Error(`Cannot find the leaf for nullifier ${nullifier}.`);
|
|
@@ -19,13 +21,13 @@ function getNullifierMembershipWitnessResolver(oracle) {
|
|
|
19
21
|
const { index, siblingPath, leafPreimage } = res;
|
|
20
22
|
return {
|
|
21
23
|
membershipWitness: new MembershipWitness(NULLIFIER_TREE_HEIGHT, index, siblingPath.toTuple()),
|
|
22
|
-
leafPreimage
|
|
24
|
+
leafPreimage
|
|
23
25
|
};
|
|
24
26
|
};
|
|
25
27
|
}
|
|
26
28
|
async function getMasterSecretKeysAndAppKeyGenerators(keyValidationRequests, oracle) {
|
|
27
29
|
const keysHints = [];
|
|
28
|
-
for
|
|
30
|
+
for(let i = 0; i < keyValidationRequests.length; ++i){
|
|
29
31
|
const request = keyValidationRequests[i].request;
|
|
30
32
|
if (request.isEmpty()) {
|
|
31
33
|
break;
|
|
@@ -36,7 +38,19 @@ async function getMasterSecretKeysAndAppKeyGenerators(keyValidationRequests, ora
|
|
|
36
38
|
return padArrayEnd(keysHints, KeyValidationHint.nada(MAX_KEY_VALIDATION_REQUESTS_PER_TX), MAX_KEY_VALIDATION_REQUESTS_PER_TX);
|
|
37
39
|
}
|
|
38
40
|
export class PrivateKernelResetPrivateInputsBuilder {
|
|
39
|
-
|
|
41
|
+
previousKernelOutput;
|
|
42
|
+
executionStack;
|
|
43
|
+
noteHashNullifierCounterMap;
|
|
44
|
+
validationRequestsSplitCounter;
|
|
45
|
+
previousKernel;
|
|
46
|
+
// If there's no next iteration, it's the final reset.
|
|
47
|
+
nextIteration;
|
|
48
|
+
noteHashResetStates;
|
|
49
|
+
nullifierResetStates;
|
|
50
|
+
numTransientData;
|
|
51
|
+
transientDataIndexHints;
|
|
52
|
+
requestedDimensions;
|
|
53
|
+
constructor(previousKernelOutput, executionStack, noteHashNullifierCounterMap, validationRequestsSplitCounter){
|
|
40
54
|
this.previousKernelOutput = previousKernelOutput;
|
|
41
55
|
this.executionStack = executionStack;
|
|
42
56
|
this.noteHashNullifierCounterMap = noteHashNullifierCounterMap;
|
|
@@ -45,32 +59,35 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
45
59
|
this.requestedDimensions = PrivateKernelResetDimensions.empty();
|
|
46
60
|
this.noteHashResetStates = ReadRequestResetStates.empty(MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
|
|
47
61
|
this.nullifierResetStates = ReadRequestResetStates.empty(MAX_NULLIFIER_READ_REQUESTS_PER_TX);
|
|
48
|
-
this.transientDataIndexHints = makeTuple(MAX_NULLIFIERS_PER_TX, ()
|
|
62
|
+
this.transientDataIndexHints = makeTuple(MAX_NULLIFIERS_PER_TX, ()=>new TransientDataIndexHint(MAX_NULLIFIERS_PER_TX, MAX_NOTE_HASHES_PER_TX));
|
|
49
63
|
this.nextIteration = executionStack[this.executionStack.length - 1]?.publicInputs;
|
|
50
64
|
}
|
|
51
65
|
needsReset() {
|
|
52
66
|
const fns = [
|
|
53
|
-
()
|
|
54
|
-
()
|
|
55
|
-
()
|
|
56
|
-
()
|
|
67
|
+
()=>this.needsResetNoteHashReadRequests(),
|
|
68
|
+
()=>this.needsResetNullifierReadRequests(),
|
|
69
|
+
()=>this.needsResetNullifierKeys(),
|
|
70
|
+
()=>this.needsResetTransientData()
|
|
57
71
|
];
|
|
58
72
|
if (this.nextIteration) {
|
|
59
73
|
// If there's a next iteration, reset is needed only when data of a dimension is about to overflow.
|
|
60
74
|
// fns are executed until a dimension that needs reset is found.
|
|
61
|
-
return fns.some(fn
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
75
|
+
return fns.some((fn)=>fn());
|
|
76
|
+
} else {
|
|
64
77
|
// Siloing is only needed after processing all iterations.
|
|
65
|
-
fns.push(...[
|
|
78
|
+
fns.push(...[
|
|
79
|
+
()=>this.needsSiloNoteHashes(),
|
|
80
|
+
()=>this.needsSiloNullifiers(),
|
|
81
|
+
()=>this.needsSiloPrivateLogs()
|
|
82
|
+
]);
|
|
66
83
|
// If there's no next iteration, reset is needed when any of the dimension has non empty data.
|
|
67
84
|
// All the fns should to be executed so that data in all dimensions will be reset.
|
|
68
|
-
const result = fns.map(fn
|
|
69
|
-
return result.some(r
|
|
85
|
+
const result = fns.map((fn)=>fn());
|
|
86
|
+
return result.some((r)=>r);
|
|
70
87
|
}
|
|
71
88
|
}
|
|
72
89
|
async build(oracle, noteHashLeafIndexMap) {
|
|
73
|
-
if (privateKernelResetDimensionNames.every(name
|
|
90
|
+
if (privateKernelResetDimensionNames.every((name)=>!this.requestedDimensions[name])) {
|
|
74
91
|
throw new Error('Reset is not required.');
|
|
75
92
|
}
|
|
76
93
|
const isInner = !!this.nextIteration;
|
|
@@ -83,26 +100,25 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
83
100
|
const previousKernelData = new PrivateKernelData(this.previousKernelOutput.publicInputs, this.previousKernelOutput.verificationKey, Number(previousVkMembershipWitness.leafIndex), assertLength(previousVkMembershipWitness.siblingPath, VK_TREE_HEIGHT));
|
|
84
101
|
this.reduceReadRequestStates(this.noteHashResetStates, dimensions.NOTE_HASH_PENDING_AMOUNT, dimensions.NOTE_HASH_SETTLED_AMOUNT);
|
|
85
102
|
this.reduceReadRequestStates(this.nullifierResetStates, dimensions.NULLIFIER_PENDING_AMOUNT, dimensions.NULLIFIER_SETTLED_AMOUNT);
|
|
86
|
-
return new PrivateKernelResetCircuitPrivateInputs(previousKernelData, new PrivateKernelResetHints(await buildNoteHashReadRequestHintsFromResetStates(oracle, this.previousKernel.validationRequests.noteHashReadRequests, this.previousKernel.end.noteHashes, this.noteHashResetStates, noteHashLeafIndexMap), await buildNullifierReadRequestHintsFromResetStates({
|
|
103
|
+
return new PrivateKernelResetCircuitPrivateInputs(previousKernelData, new PrivateKernelResetHints(await buildNoteHashReadRequestHintsFromResetStates(oracle, this.previousKernel.validationRequests.noteHashReadRequests, this.previousKernel.end.noteHashes, this.noteHashResetStates, noteHashLeafIndexMap), await buildNullifierReadRequestHintsFromResetStates({
|
|
104
|
+
getNullifierMembershipWitness: getNullifierMembershipWitnessResolver(oracle)
|
|
105
|
+
}, this.previousKernel.validationRequests.nullifierReadRequests, this.nullifierResetStates), await getMasterSecretKeysAndAppKeyGenerators(this.previousKernel.validationRequests.scopedKeyValidationRequestsAndGenerators, oracle), this.transientDataIndexHints, this.validationRequestsSplitCounter), dimensions);
|
|
87
106
|
}
|
|
88
107
|
reduceReadRequestStates(resetStates, maxPending, maxSettled) {
|
|
89
108
|
let numPending = 0;
|
|
90
109
|
let numSettled = 0;
|
|
91
|
-
for
|
|
110
|
+
for(let i = 0; i < resetStates.states.length; i++){
|
|
92
111
|
const state = resetStates.states[i];
|
|
93
112
|
if (state === ReadRequestState.PENDING) {
|
|
94
113
|
if (numPending < maxPending) {
|
|
95
114
|
numPending++;
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
115
|
+
} else {
|
|
98
116
|
resetStates.states[i] = ReadRequestState.NADA;
|
|
99
117
|
}
|
|
100
|
-
}
|
|
101
|
-
else if (state === ReadRequestState.SETTLED) {
|
|
118
|
+
} else if (state === ReadRequestState.SETTLED) {
|
|
102
119
|
if (numSettled < maxSettled) {
|
|
103
120
|
numSettled++;
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
121
|
+
} else {
|
|
106
122
|
resetStates.states[i] = ReadRequestState.NADA;
|
|
107
123
|
}
|
|
108
124
|
}
|
|
@@ -116,28 +132,26 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
116
132
|
if (numCurr + numNext <= maxAmountToKeep) {
|
|
117
133
|
return false;
|
|
118
134
|
}
|
|
119
|
-
const futureNoteHashes = collectNested(this.executionStack, executionResult
|
|
135
|
+
const futureNoteHashes = collectNested(this.executionStack, (executionResult)=>{
|
|
120
136
|
const nonEmptyNoteHashes = getNonEmptyItems(executionResult.publicInputs.noteHashes);
|
|
121
|
-
return nonEmptyNoteHashes.map(noteHash
|
|
137
|
+
return nonEmptyNoteHashes.map((noteHash)=>new ScopedNoteHash(noteHash, executionResult.publicInputs.callContext.contractAddress));
|
|
122
138
|
});
|
|
123
139
|
const resetStates = getNoteHashReadRequestResetStates(this.previousKernel.validationRequests.noteHashReadRequests, this.previousKernel.end.noteHashes, futureNoteHashes);
|
|
124
140
|
const numPendingReads = resetStates.pendingReadHints.length;
|
|
125
|
-
const numSettledReads = resetStates.states.reduce((accum, state)
|
|
141
|
+
const numSettledReads = resetStates.states.reduce((accum, state)=>accum + (state === ReadRequestState.SETTLED ? 1 : 0), 0);
|
|
126
142
|
if (!this.nextIteration) {
|
|
127
143
|
this.noteHashResetStates = resetStates;
|
|
128
144
|
this.requestedDimensions.NOTE_HASH_PENDING_AMOUNT = numPendingReads;
|
|
129
145
|
this.requestedDimensions.NOTE_HASH_SETTLED_AMOUNT = numSettledReads;
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
146
|
+
} else {
|
|
132
147
|
// Pick only one dimension to reset if next iteration is not empty.
|
|
133
148
|
if (numPendingReads > numSettledReads) {
|
|
134
149
|
this.requestedDimensions.NOTE_HASH_PENDING_AMOUNT = numPendingReads;
|
|
135
|
-
this.noteHashResetStates.states = assertLength(resetStates.states.map(state
|
|
150
|
+
this.noteHashResetStates.states = assertLength(resetStates.states.map((state)=>state === ReadRequestState.PENDING ? state : ReadRequestState.NADA), MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
|
|
136
151
|
this.noteHashResetStates.pendingReadHints = resetStates.pendingReadHints;
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
152
|
+
} else {
|
|
139
153
|
this.requestedDimensions.NOTE_HASH_SETTLED_AMOUNT = numSettledReads;
|
|
140
|
-
this.noteHashResetStates.states = assertLength(resetStates.states.map(state
|
|
154
|
+
this.noteHashResetStates.states = assertLength(resetStates.states.map((state)=>state === ReadRequestState.SETTLED ? state : ReadRequestState.NADA), MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
|
|
141
155
|
}
|
|
142
156
|
}
|
|
143
157
|
return true;
|
|
@@ -149,37 +163,33 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
149
163
|
if (numCurr + numNext <= maxAmountToKeep) {
|
|
150
164
|
return false;
|
|
151
165
|
}
|
|
152
|
-
const futureNullifiers = collectNested(this.executionStack, executionResult
|
|
166
|
+
const futureNullifiers = collectNested(this.executionStack, (executionResult)=>{
|
|
153
167
|
const nonEmptyNullifiers = getNonEmptyItems(executionResult.publicInputs.nullifiers);
|
|
154
|
-
return nonEmptyNullifiers.map(nullifier
|
|
168
|
+
return nonEmptyNullifiers.map((nullifier)=>new ScopedNullifier(nullifier, executionResult.publicInputs.callContext.contractAddress));
|
|
155
169
|
});
|
|
156
170
|
const resetStates = getNullifierReadRequestResetStates(this.previousKernel.validationRequests.nullifierReadRequests, this.previousKernel.end.nullifiers, futureNullifiers);
|
|
157
171
|
const numPendingReads = resetStates.pendingReadHints.length;
|
|
158
|
-
const numSettledReads = resetStates.states.reduce((accum, state)
|
|
172
|
+
const numSettledReads = resetStates.states.reduce((accum, state)=>accum + (state === ReadRequestState.SETTLED ? 1 : 0), 0);
|
|
159
173
|
if (!this.nextIteration) {
|
|
160
174
|
this.nullifierResetStates = resetStates;
|
|
161
175
|
this.requestedDimensions.NULLIFIER_PENDING_AMOUNT = numPendingReads;
|
|
162
176
|
this.requestedDimensions.NULLIFIER_SETTLED_AMOUNT = numSettledReads;
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
177
|
+
} else {
|
|
165
178
|
// Pick only one dimension to reset if next iteration is not empty.
|
|
166
179
|
if (numPendingReads > numSettledReads) {
|
|
167
180
|
this.requestedDimensions.NULLIFIER_PENDING_AMOUNT = numPendingReads;
|
|
168
|
-
this.nullifierResetStates.states = assertLength(resetStates.states.map(state
|
|
181
|
+
this.nullifierResetStates.states = assertLength(resetStates.states.map((state)=>state === ReadRequestState.PENDING ? state : ReadRequestState.NADA), MAX_NULLIFIER_READ_REQUESTS_PER_TX);
|
|
169
182
|
this.nullifierResetStates.pendingReadHints = resetStates.pendingReadHints;
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
183
|
+
} else {
|
|
172
184
|
this.requestedDimensions.NULLIFIER_SETTLED_AMOUNT = numSettledReads;
|
|
173
|
-
this.nullifierResetStates.states = assertLength(resetStates.states.map(state
|
|
185
|
+
this.nullifierResetStates.states = assertLength(resetStates.states.map((state)=>state === ReadRequestState.SETTLED ? state : ReadRequestState.NADA), MAX_NULLIFIER_READ_REQUESTS_PER_TX);
|
|
174
186
|
}
|
|
175
187
|
}
|
|
176
188
|
return true;
|
|
177
189
|
}
|
|
178
190
|
needsResetNullifierKeys() {
|
|
179
191
|
const numCurr = countAccumulatedItems(this.previousKernel.validationRequests.scopedKeyValidationRequestsAndGenerators);
|
|
180
|
-
const numNext = this.nextIteration
|
|
181
|
-
? countAccumulatedItems(this.nextIteration.keyValidationRequestsAndGenerators)
|
|
182
|
-
: 0;
|
|
192
|
+
const numNext = this.nextIteration ? countAccumulatedItems(this.nextIteration.keyValidationRequestsAndGenerators) : 0;
|
|
183
193
|
const maxAmountToKeep = !this.nextIteration ? 0 : MAX_KEY_VALIDATION_REQUESTS_PER_TX;
|
|
184
194
|
if (numCurr + numNext <= maxAmountToKeep) {
|
|
185
195
|
return false;
|
|
@@ -190,28 +200,25 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
190
200
|
needsResetTransientData() {
|
|
191
201
|
// Initialize this to 0 so that needsSilo can be run.
|
|
192
202
|
this.numTransientData = 0;
|
|
193
|
-
const nextAccumNoteHashes = countAccumulatedItems(this.previousKernel.end.noteHashes) +
|
|
194
|
-
countAccumulatedItems(this.nextIteration?.noteHashes ?? []);
|
|
203
|
+
const nextAccumNoteHashes = countAccumulatedItems(this.previousKernel.end.noteHashes) + countAccumulatedItems(this.nextIteration?.noteHashes ?? []);
|
|
195
204
|
const noteHashWillOverflow = nextAccumNoteHashes > MAX_NOTE_HASHES_PER_TX;
|
|
196
|
-
const nextAccumNullifiers = countAccumulatedItems(this.previousKernel.end.nullifiers) +
|
|
197
|
-
countAccumulatedItems(this.nextIteration?.nullifiers ?? []);
|
|
205
|
+
const nextAccumNullifiers = countAccumulatedItems(this.previousKernel.end.nullifiers) + countAccumulatedItems(this.nextIteration?.nullifiers ?? []);
|
|
198
206
|
const nullifierWillOverflow = nextAccumNullifiers > MAX_NULLIFIERS_PER_TX;
|
|
199
207
|
if (this.nextIteration && !noteHashWillOverflow && !nullifierWillOverflow) {
|
|
200
208
|
return false;
|
|
201
209
|
}
|
|
202
|
-
const futureNoteHashReads = collectNestedReadRequests(this.executionStack, executionResult
|
|
203
|
-
const futureNullifierReads = collectNestedReadRequests(this.executionStack, executionResult
|
|
210
|
+
const futureNoteHashReads = collectNestedReadRequests(this.executionStack, (executionResult)=>executionResult.publicInputs.noteHashReadRequests);
|
|
211
|
+
const futureNullifierReads = collectNestedReadRequests(this.executionStack, (executionResult)=>executionResult.publicInputs.nullifierReadRequests);
|
|
204
212
|
if (this.nextIteration) {
|
|
205
213
|
// If it's not the final reset, only one dimension will be reset at a time.
|
|
206
214
|
// The note hashes and nullifiers for the remaining read requests can't be squashed.
|
|
207
|
-
futureNoteHashReads.push(...this.previousKernel.validationRequests.noteHashReadRequests.filter(r
|
|
208
|
-
futureNullifierReads.push(...this.previousKernel.validationRequests.nullifierReadRequests.filter(r
|
|
215
|
+
futureNoteHashReads.push(...this.previousKernel.validationRequests.noteHashReadRequests.filter((r)=>!r.isEmpty()));
|
|
216
|
+
futureNullifierReads.push(...this.previousKernel.validationRequests.nullifierReadRequests.filter((r)=>!r.isEmpty()));
|
|
209
217
|
}
|
|
210
218
|
const { numTransientData, hints: transientDataIndexHints } = buildTransientDataHints(this.previousKernel.end.noteHashes, this.previousKernel.end.nullifiers, futureNoteHashReads, futureNullifierReads, this.noteHashNullifierCounterMap, this.validationRequestsSplitCounter, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX);
|
|
211
219
|
if (this.nextIteration && !numTransientData) {
|
|
212
220
|
const forceResetAll = true;
|
|
213
|
-
const canClearReadRequests =
|
|
214
|
-
(nullifierWillOverflow && this.needsResetNullifierReadRequests(forceResetAll));
|
|
221
|
+
const canClearReadRequests = noteHashWillOverflow && this.needsResetNoteHashReadRequests(forceResetAll) || nullifierWillOverflow && this.needsResetNullifierReadRequests(forceResetAll);
|
|
215
222
|
if (!canClearReadRequests) {
|
|
216
223
|
const overflownData = noteHashWillOverflow ? 'note hashes' : 'nullifiers';
|
|
217
224
|
throw new Error(`Number of ${overflownData} exceeds the limit.`);
|
|
@@ -229,7 +236,7 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
229
236
|
if (this.numTransientData === undefined) {
|
|
230
237
|
throw new Error('`needsResetTransientData` must be run before `needsSiloNoteHashes`.');
|
|
231
238
|
}
|
|
232
|
-
const numNoteHashes = this.previousKernel.end.noteHashes.filter(n
|
|
239
|
+
const numNoteHashes = this.previousKernel.end.noteHashes.filter((n)=>!n.contractAddress.isZero()).length;
|
|
233
240
|
const numToSilo = Math.max(0, numNoteHashes - this.numTransientData);
|
|
234
241
|
this.requestedDimensions.NOTE_HASH_SILOING_AMOUNT = numToSilo;
|
|
235
242
|
return numToSilo > 0;
|
|
@@ -238,7 +245,7 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
238
245
|
if (this.numTransientData === undefined) {
|
|
239
246
|
throw new Error('`needsResetTransientData` must be run before `needsSiloNullifiers`.');
|
|
240
247
|
}
|
|
241
|
-
const numNullifiers = this.previousKernel.end.nullifiers.filter(n
|
|
248
|
+
const numNullifiers = this.previousKernel.end.nullifiers.filter((n)=>!n.contractAddress.isZero()).length;
|
|
242
249
|
const numToSilo = Math.max(0, numNullifiers - this.numTransientData);
|
|
243
250
|
// Include the first nullifier if there's something to silo.
|
|
244
251
|
// The reset circuit checks that capped_size must be greater than or equal to all non-empty nullifiers.
|
|
@@ -252,15 +259,12 @@ export class PrivateKernelResetPrivateInputsBuilder {
|
|
|
252
259
|
throw new Error('`needsResetTransientData` must be run before `needsSiloPrivateLogs`.');
|
|
253
260
|
}
|
|
254
261
|
const privateLogs = this.previousKernel.end.privateLogs;
|
|
255
|
-
const numLogs = privateLogs.filter(l
|
|
262
|
+
const numLogs = privateLogs.filter((l)=>!l.contractAddress.isZero()).length;
|
|
256
263
|
const noteHashes = this.previousKernel.end.noteHashes;
|
|
257
|
-
const squashedNoteHashCounters = this.transientDataIndexHints
|
|
258
|
-
|
|
259
|
-
.map(h => noteHashes[h.noteHashIndex].counter);
|
|
260
|
-
const numSquashedLogs = privateLogs.filter(l => squashedNoteHashCounters.includes(l.inner.noteHashCounter)).length;
|
|
264
|
+
const squashedNoteHashCounters = this.transientDataIndexHints.filter((h)=>h.noteHashIndex < noteHashes.length).map((h)=>noteHashes[h.noteHashIndex].counter);
|
|
265
|
+
const numSquashedLogs = privateLogs.filter((l)=>squashedNoteHashCounters.includes(l.inner.noteHashCounter)).length;
|
|
261
266
|
const numToSilo = numLogs - numSquashedLogs;
|
|
262
267
|
this.requestedDimensions.PRIVATE_LOG_SILOING_AMOUNT = numToSilo;
|
|
263
268
|
return numToSilo > 0;
|
|
264
269
|
}
|
|
265
270
|
}
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRfcHJpdmF0ZV9rZXJuZWxfcmVzZXRfcHJpdmF0ZV9pbnB1dHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMva2VybmVsX3Byb3Zlci9oaW50cy9idWlsZF9wcml2YXRlX2tlcm5lbF9yZXNldF9wcml2YXRlX2lucHV0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hILE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsa0NBQWtDLEVBQ2xDLHNCQUFzQixFQUN0QixrQ0FBa0MsRUFDbEMscUJBQXFCLEVBQ3JCLGtDQUFrQyxFQUNsQyxpQkFBaUIsRUFDakIscUJBQXFCLEVBR3JCLGlCQUFpQixFQUNqQixzQ0FBc0MsRUFDdEMsNEJBQTRCLEVBQzVCLHVCQUF1QixFQUV2QixzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBRWhCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0QixjQUFjLEVBQ2QsNENBQTRDLEVBQzVDLDZDQUE2QyxFQUM3Qyx1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3JCLGdDQUFnQyxFQUNoQyxnQkFBZ0IsRUFDaEIsaUNBQWlDLEVBQ2pDLGtDQUFrQyxFQUNsQyxnQ0FBZ0MsR0FDakMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBYyxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUloRyxTQUFTLHlCQUF5QixDQUNoQyxjQUE0QyxFQUM1QyxtQkFBNkU7SUFFN0UsT0FBTyxhQUFhLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQyxFQUFFO1FBQ3JELE1B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
|
|
@@ -1,2 +1 @@
|
|
|
1
1
|
export * from './build_private_kernel_reset_private_inputs.js';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMva2VybmVsX3Byb3Zlci9oaW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdEQUFnRCxDQUFDIn0=
|
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
export * from './kernel_prover.js';
|
|
2
2
|
export * from './proving_data_oracle.js';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2VybmVsX3Byb3Zlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsMEJBQTBCLENBQUMifQ==
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { type
|
|
3
|
-
import { type
|
|
1
|
+
import type { PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
|
|
2
|
+
import { type PrivateKernelSimulateOutput, type PrivateKernelTailCircuitPublicInputs } from '@aztec/stdlib/kernel';
|
|
3
|
+
import { type PrivateExecutionResult, TxRequest } from '@aztec/stdlib/tx';
|
|
4
|
+
import type { ProvingDataOracle } from './proving_data_oracle.js';
|
|
4
5
|
export type ProvingConfig = {
|
|
5
6
|
simulate: boolean;
|
|
7
|
+
skipFeeEnforcement: boolean;
|
|
6
8
|
profile: boolean;
|
|
7
|
-
dryRun: boolean;
|
|
8
9
|
};
|
|
9
10
|
/**
|
|
10
11
|
* The KernelProver class is responsible for generating kernel proofs.
|
|
@@ -27,11 +28,10 @@ export declare class KernelProver {
|
|
|
27
28
|
* @param txRequest - The authenticated transaction request object.
|
|
28
29
|
* @param executionResult - The execution result object containing nested executions and preimages.
|
|
29
30
|
* @param profile - Set true to profile the gate count for each circuit
|
|
30
|
-
* @param dryRun - Set true to skip the IVC proof generation (only simulation is run). Useful for profiling gate count without proof gen.
|
|
31
31
|
* @returns A Promise that resolves to a KernelProverOutput object containing proof, public inputs, and output notes.
|
|
32
32
|
* TODO(#7368) this should be refactored to not recreate the ACIR bytecode now that it operates on a program stack
|
|
33
33
|
*/
|
|
34
|
-
prove(txRequest: TxRequest, executionResult: PrivateExecutionResult, { simulate,
|
|
34
|
+
prove(txRequest: TxRequest, executionResult: PrivateExecutionResult, { simulate, skipFeeEnforcement, profile }?: ProvingConfig): Promise<PrivateKernelSimulateOutput<PrivateKernelTailCircuitPublicInputs>>;
|
|
35
35
|
private createPrivateCallData;
|
|
36
36
|
private isPrivateOnly;
|
|
37
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kernel_prover.d.ts","sourceRoot":"","sources":["../../src/kernel_prover/kernel_prover.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kernel_prover.d.ts","sourceRoot":"","sources":["../../src/kernel_prover/kernel_prover.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAML,KAAK,2BAA2B,EAEhC,KAAK,oCAAoC,EAG1C,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAEL,KAAK,sBAAsB,EAC3B,SAAS,EAMV,MAAM,kBAAkB,CAAC;AAO1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AA8ClE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,YAAY;IAIrB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,UAAU;IALpB,OAAO,CAAC,GAAG,CAAqC;gBAGtC,MAAM,EAAE,iBAAiB,EACzB,YAAY,EAAE,mBAAmB,EACjC,UAAU,UAAQ;IAG5B;;;;;;;;;;;OAWG;IACG,KAAK,CACT,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,sBAAsB,EACvC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAE,aAI1C,GACA,OAAO,CAAC,2BAA2B,CAAC,oCAAoC,CAAC,CAAC;YAkN/D,qBAAqB;IAiDnC,OAAO,CAAC,aAAa;CAYtB"}
|