@aztec/pxe 0.15.1 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/index.d.ts +1 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -2
- package/dest/kernel_prover/kernel_prover.d.ts.map +1 -1
- package/dest/kernel_prover/kernel_prover.js +11 -13
- package/dest/kernel_prover/proof_creator.d.ts +4 -8
- package/dest/kernel_prover/proof_creator.d.ts.map +1 -1
- package/dest/kernel_prover/proof_creator.js +5 -5
- package/dest/pxe_service/pxe_service.d.ts.map +1 -1
- package/dest/pxe_service/pxe_service.js +17 -14
- package/package.json +9 -9
- package/src/index.ts +1 -1
- package/src/kernel_prover/kernel_prover.ts +20 -16
- package/src/kernel_prover/proof_creator.ts +4 -8
- package/src/pxe_service/pxe_service.ts +19 -14
package/dest/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export * from './pxe_service/index.js';
|
|
|
2
2
|
export * from './pxe_http/index.js';
|
|
3
3
|
export * from './config/index.js';
|
|
4
4
|
export { Tx, TxHash } from '@aztec/types';
|
|
5
|
-
export { TxRequest,
|
|
5
|
+
export { TxRequest, PartialAddress } from '@aztec/circuits.js';
|
|
6
6
|
export * from '@aztec/foundation/fields';
|
|
7
7
|
export * from '@aztec/foundation/eth-address';
|
|
8
8
|
export * from '@aztec/foundation/aztec-address';
|
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,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,
|
|
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,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,kBAAkB,CAAC"}
|
package/dest/index.js
CHANGED
|
@@ -2,9 +2,9 @@ export * from './pxe_service/index.js';
|
|
|
2
2
|
export * from './pxe_http/index.js';
|
|
3
3
|
export * from './config/index.js';
|
|
4
4
|
export { Tx, TxHash } from '@aztec/types';
|
|
5
|
-
export { TxRequest
|
|
5
|
+
export { TxRequest } from '@aztec/circuits.js';
|
|
6
6
|
export * from '@aztec/foundation/fields';
|
|
7
7
|
export * from '@aztec/foundation/eth-address';
|
|
8
8
|
export * from '@aztec/foundation/aztec-address';
|
|
9
9
|
export * from '@aztec/key-store';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsbUJBQW1CLENBQUM7QUFFbEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFMUMsT0FBTyxFQUFFLFNBQVMsRUFBa0IsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGtCQUFrQixDQUFDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kernel_prover.d.ts","sourceRoot":"","sources":["../../src/kernel_prover/kernel_prover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EACL,YAAY,
|
|
1
|
+
{"version":3,"file":"kernel_prover.d.ts","sourceRoot":"","sources":["../../src/kernel_prover/kernel_prover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EACL,YAAY,EAIZ,EAAE,EAeF,SAAS,EAKV,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAsB,YAAY,EAAe,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,eAAe,EAAE,YAAY,CAAC;IAC9B;;OAEG;IACH,IAAI,EAAE,WAAW,CAAC;IAClB;;OAEG;IACH,UAAU,EAAE,EAAE,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D;;OAEG;IACH,WAAW,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED;;;;;GAKG;AACH,qBAAa,YAAY;IACX,OAAO,CAAC,MAAM;IAAqB,OAAO,CAAC,YAAY;gBAA/C,MAAM,EAAE,iBAAiB,EAAU,YAAY,GAAE,YAAuC;IAE5G;;;;;;;;;OASG;IACG,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;YA2GlF,qBAAqB;IA+CnC;;;;;;;;OAQG;YACW,WAAW;IAezB;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;CAsB1B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { CONTRACT_TREE_HEIGHT, EMPTY_NULLIFIED_COMMITMENT, Fr, MAX_NEW_NULLIFIERS_PER_TX, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_READ_REQUESTS_PER_CALL, MAX_READ_REQUESTS_PER_TX, MembershipWitness, PreviousKernelData, PrivateCallData,
|
|
1
|
+
import { CONTRACT_TREE_HEIGHT, CallRequest, EMPTY_NULLIFIED_COMMITMENT, Fr, MAX_NEW_NULLIFIERS_PER_TX, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_READ_REQUESTS_PER_CALL, MAX_READ_REQUESTS_PER_TX, MembershipWitness, PreviousKernelData, PrivateCallData, PrivateKernelInputsInit, PrivateKernelInputsInner, PrivateKernelInputsOrdering, PrivateKernelPublicInputs, ReadRequestMembershipWitness, VK_TREE_HEIGHT, VerificationKey, makeEmptyProof, makeTuple, } from '@aztec/circuits.js';
|
|
2
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
2
3
|
import { assertLength } from '@aztec/foundation/serialize';
|
|
3
4
|
import { KernelProofCreator } from './proof_creator.js';
|
|
4
5
|
/**
|
|
@@ -34,14 +35,8 @@ export class KernelProver {
|
|
|
34
35
|
while (executionStack.length) {
|
|
35
36
|
const currentExecution = executionStack.pop();
|
|
36
37
|
executionStack.push(...currentExecution.nestedExecutions);
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
throw new Error(`Too many items in the call stack. Maximum amount is ${MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL}. Got ${privateCallStackPreimages.length}.`);
|
|
40
|
-
}
|
|
41
|
-
// Pad with empty items to reach max/const length expected by circuit.
|
|
42
|
-
privateCallStackPreimages.push(...Array(MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL - privateCallStackPreimages.length)
|
|
43
|
-
.fill(0)
|
|
44
|
-
.map(() => PrivateCallStackItem.empty()));
|
|
38
|
+
const privateCallRequests = currentExecution.nestedExecutions.map(result => result.callStackItem.toCallRequest());
|
|
39
|
+
const publicCallRequests = currentExecution.enqueuedPublicFunctionCalls.map(result => result.toCallRequest());
|
|
45
40
|
// Start with the partially filled in read request witnesses from the simulator
|
|
46
41
|
// and fill the non-transient ones in with sibling paths via oracle.
|
|
47
42
|
const readRequestMembershipWitnesses = currentExecution.readRequestPartialWitnesses;
|
|
@@ -65,7 +60,7 @@ export class KernelProver {
|
|
|
65
60
|
readRequestMembershipWitnesses.push(...Array(MAX_READ_REQUESTS_PER_CALL - readRequestMembershipWitnesses.length)
|
|
66
61
|
.fill(0)
|
|
67
62
|
.map(() => ReadRequestMembershipWitness.empty(BigInt(0))));
|
|
68
|
-
const privateCallData = await this.createPrivateCallData(currentExecution,
|
|
63
|
+
const privateCallData = await this.createPrivateCallData(currentExecution, privateCallRequests, publicCallRequests, readRequestMembershipWitnesses);
|
|
69
64
|
if (firstIteration) {
|
|
70
65
|
output = await this.proofCreator.createProofInit(new PrivateKernelInputsInit(txRequest, privateCallData));
|
|
71
66
|
}
|
|
@@ -91,9 +86,12 @@ export class KernelProver {
|
|
|
91
86
|
const outputNotes = finalNewCommitments.map(c => newNotes[c.toString()]).filter(c => !!c);
|
|
92
87
|
return { ...outputFinal, outputNotes };
|
|
93
88
|
}
|
|
94
|
-
async createPrivateCallData({ callStackItem, vk },
|
|
89
|
+
async createPrivateCallData({ callStackItem, vk }, privateCallRequests, publicCallRequests, readRequestMembershipWitnesses) {
|
|
95
90
|
const { contractAddress, functionData, publicInputs } = callStackItem;
|
|
96
91
|
const { portalContractAddress } = publicInputs.callContext;
|
|
92
|
+
// Pad with empty items to reach max/const length expected by circuit.
|
|
93
|
+
const privateCallStack = padArrayEnd(privateCallRequests, CallRequest.empty(), MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL);
|
|
94
|
+
const publicCallStack = padArrayEnd(publicCallRequests, CallRequest.empty(), MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL);
|
|
97
95
|
const contractLeafMembershipWitness = functionData.isConstructor
|
|
98
96
|
? MembershipWitness.random(CONTRACT_TREE_HEIGHT)
|
|
99
97
|
: await this.oracle.getContractMembershipWitness(contractAddress);
|
|
@@ -103,7 +101,7 @@ export class KernelProver {
|
|
|
103
101
|
const acirHash = Fr.fromBuffer(Buffer.alloc(32, 0));
|
|
104
102
|
// TODO
|
|
105
103
|
const proof = makeEmptyProof();
|
|
106
|
-
return new PrivateCallData(callStackItem,
|
|
104
|
+
return new PrivateCallData(callStackItem, privateCallStack, publicCallStack, proof, VerificationKey.fromBuffer(vk), functionLeafMembershipWitness, contractLeafMembershipWitness, makeTuple(MAX_READ_REQUESTS_PER_CALL, i => readRequestMembershipWitnesses[i], 0), portalContractAddress.toField(), acirHash);
|
|
107
105
|
}
|
|
108
106
|
/**
|
|
109
107
|
* Retrieves the new output notes for a given execution result.
|
|
@@ -176,4 +174,4 @@ export class KernelProver {
|
|
|
176
174
|
return hints;
|
|
177
175
|
}
|
|
178
176
|
}
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VybmVsX3Byb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rZXJuZWxfcHJvdmVyL2tlcm5lbF9wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUVMLG9CQUFvQixFQUNwQixXQUFXLEVBQ1gsMEJBQTBCLEVBQzFCLEVBQUUsRUFFRix5QkFBeUIsRUFDekIsc0NBQXNDLEVBQ3RDLHFDQUFxQyxFQUNyQywwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLHVCQUF1QixFQUN2Qix3QkFBd0IsRUFDeEIsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFFNUIsY0FBYyxFQUNkLGVBQWUsRUFDZixjQUFjLEVBQ2QsU0FBUyxHQUNWLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBUyxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQStDLE1BQU0sb0JBQW9CLENBQUM7QUFrQ3JHOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBb0IsTUFBeUIsRUFBVSxlQUE2QixJQUFJLGtCQUFrQixFQUFFO1FBQXhGLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQXlDO0lBQUcsQ0FBQztJQUVoSDs7Ozs7Ozs7O09BU0c7SUFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQW9CLEVBQUUsZUFBZ0M7UUFDaEUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN6QyxNQUFNLFFBQVEsR0FBZ0QsRUFBRSxDQUFDO1FBQ2pFLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLHVCQUF1QixHQUFHLGVBQWUsQ0FBQyxRQUFRLEVB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
|
|
@@ -7,8 +7,6 @@ import { Fr } from '@aztec/foundation/fields';
|
|
|
7
7
|
export interface ProofOutput {
|
|
8
8
|
/**
|
|
9
9
|
* The public inputs required for the proof generation process.
|
|
10
|
-
* Note: C++ side does not define the specific data structure PrivateKernelPublicInputs and therefore
|
|
11
|
-
* would not generate a binding in circuits.gen.ts.
|
|
12
10
|
*/
|
|
13
11
|
publicInputs: KernelCircuitPublicInputs;
|
|
14
12
|
/**
|
|
@@ -23,8 +21,6 @@ export interface ProofOutput {
|
|
|
23
21
|
export interface ProofOutputFinal {
|
|
24
22
|
/**
|
|
25
23
|
* The public inputs required for the proof generation process.
|
|
26
|
-
* Note: C++ side does not define the specific data structure PrivateKernelPublicInputsFinal and therefore
|
|
27
|
-
* would not generate a binding in circuits.gen.ts.
|
|
28
24
|
*/
|
|
29
25
|
publicInputs: KernelCircuitPublicInputsFinal;
|
|
30
26
|
/**
|
|
@@ -68,10 +64,10 @@ export interface ProofCreator {
|
|
|
68
64
|
}
|
|
69
65
|
/**
|
|
70
66
|
* The KernelProofCreator class is responsible for generating siloed commitments and zero-knowledge proofs
|
|
71
|
-
* for private kernel circuit. It leverages Barretenberg and
|
|
72
|
-
* to
|
|
73
|
-
*
|
|
74
|
-
*
|
|
67
|
+
* for private kernel circuit. It leverages Barretenberg to perform cryptographic operations and proof creation.
|
|
68
|
+
* The class provides methods to compute commitments based on the given public inputs and to generate proofs based on
|
|
69
|
+
* signed transaction requests, previous kernel data, private call data, and a flag indicating whether it's the first
|
|
70
|
+
* iteration or not.
|
|
75
71
|
*/
|
|
76
72
|
export declare class KernelProofCreator implements ProofCreator {
|
|
77
73
|
private log;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proof_creator.d.ts","sourceRoot":"","sources":["../../src/kernel_prover/proof_creator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,2BAA2B,EAC3B,KAAK,EAEN,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAM9C;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B
|
|
1
|
+
{"version":3,"file":"proof_creator.d.ts","sourceRoot":"","sources":["../../src/kernel_prover/proof_creator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,2BAA2B,EAC3B,KAAK,EAEN,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAM9C;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,YAAY,EAAE,yBAAyB,CAAC;IACxC;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,YAAY,EAAE,8BAA8B,CAAC;IAC7C;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,oBAAoB,CAAC,YAAY,EAAE,0BAA0B,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAE9E;;;;;OAKG;IACH,eAAe,CAAC,uBAAuB,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAExF;;;;;OAKG;IACH,gBAAgB,CAAC,wBAAwB,EAAE,wBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE3F;;;;;OAKG;IACH,mBAAmB,CAAC,2BAA2B,EAAE,2BAA2B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC1G;AAED;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IACzC,OAAO,CAAC,GAAG;gBAAH,GAAG,8CAAkD;IAElE,oBAAoB,CAAC,YAAY,EAAE,0BAA0B;IAMvD,eAAe,CAAC,aAAa,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC;IAkB7E,gBAAgB,CAAC,aAAa,EAAE,wBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC;IAkB/E,mBAAmB,CAAC,aAAa,EAAE,2BAA2B,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAiBxG"}
|
|
@@ -5,10 +5,10 @@ import { elapsed } from '@aztec/foundation/timer';
|
|
|
5
5
|
import { executeInit, executeInner, executeOrdering } from '@aztec/noir-protocol-circuits';
|
|
6
6
|
/**
|
|
7
7
|
* The KernelProofCreator class is responsible for generating siloed commitments and zero-knowledge proofs
|
|
8
|
-
* for private kernel circuit. It leverages Barretenberg and
|
|
9
|
-
* to
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* for private kernel circuit. It leverages Barretenberg to perform cryptographic operations and proof creation.
|
|
9
|
+
* The class provides methods to compute commitments based on the given public inputs and to generate proofs based on
|
|
10
|
+
* signed transaction requests, previous kernel data, private call data, and a flag indicating whether it's the first
|
|
11
|
+
* iteration or not.
|
|
12
12
|
*/
|
|
13
13
|
export class KernelProofCreator {
|
|
14
14
|
constructor(log = createDebugLogger('aztec:kernel_proof_creator')) {
|
|
@@ -67,4 +67,4 @@ export class KernelProofCreator {
|
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvb2ZfY3JlYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rZXJuZWxfcHJvdmVyL3Byb29mX2NyZWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQVFMLGNBQWMsR0FDZixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUF1RTNGOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsWUFBb0IsTUFBTSxpQkFBaUIsQ0FBQyw0QkFBNEIsQ0FBQztRQUFyRCxRQUFHLEdBQUgsR0FBRyxDQUFrRDtJQUFHLENBQUM7SUFFdEUsb0JBQW9CLENBQUMsWUFBd0M7UUFDbEUsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQztRQUV4RSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxhQUFzQztRQUNqRSxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUU7WUFDeEMsU0FBUyxFQUFFLG9CQUFvQjtZQUMvQixXQUFXLEVBQUUscUJBQXFCO1lBQ2xDLFFBQVE7WUFDUixTQUFTLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU07WUFDMUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNO1NBQ0osQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUNwRCxNQUFNLEtBQUssR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUUvQixPQUFPO1lBQ0wsWUFBWSxFQUFFLE1BQU07WUFDcEIsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxhQUF1QztRQUNuRSxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUU7WUFDekMsU0FBUyxFQUFFLG9CQUFvQjtZQUMvQixXQUFXLEVBQUUsc0JBQXNCO1lBQ25DLFFBQVE7WUFDUixTQUFTLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU07WUFDMUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNO1NBQ0osQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUNyRCxNQUFNLEtBQUssR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUUvQixPQUFPO1lBQ0wsWUFBWSxFQUFFLE1BQU07WUFDcEIsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxhQUEwQztRQUN6RSxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxHQUFHLENBQUMsbUNBQW1DLEVBQUU7WUFDNUMsU0FBUyxFQUFFLG9CQUFvQjtZQUMvQixXQUFXLEVBQUUseUJBQXlCO1lBQ3RDLFFBQVE7WUFDUixTQUFTLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU07WUFDMUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNO1NBQ0osQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUN4RCxNQUFNLEtBQUssR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUUvQixPQUFPO1lBQ0wsWUFBWSxFQUFFLE1BQU07WUFDcEIsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDO0lBQ0osQ0FBQztDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pxe_service.d.ts","sourceRoot":"","sources":["../../src/pxe_service/pxe_service.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,YAAY,
|
|
1
|
+
{"version":3,"file":"pxe_service.d.ts","sourceRoot":"","sources":["../../src/pxe_service/pxe_service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var _PXEService_instances, _PXEService_getFunctionCall, _PXEService_getSimulationParameters, _PXEService_simulate, _PXEService_simulateUnconstrained, _PXEService_simulatePublicCalls, _PXEService_simulateAndProve, _PXEService_enrichSimulationError;
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
3
|
import { collectEncryptedLogs, collectEnqueuedPublicFunctionCalls, collectUnencryptedLogs, resolveOpcodeLocations, } from '@aztec/acir-simulator';
|
|
4
|
-
import { AztecAddress, CompleteAddress, FunctionData, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, } from '@aztec/circuits.js';
|
|
4
|
+
import { AztecAddress, CallRequest, CompleteAddress, FunctionData, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, } from '@aztec/circuits.js';
|
|
5
5
|
import { computeCommitmentNonce, siloNullifier } from '@aztec/circuits.js/abis';
|
|
6
6
|
import { encodeArguments } from '@aztec/foundation/abi';
|
|
7
7
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
@@ -248,16 +248,20 @@ export class PXEService {
|
|
|
248
248
|
return executionResult;
|
|
249
249
|
}
|
|
250
250
|
async getTxReceipt(txHash) {
|
|
251
|
+
let txReceipt = new TxReceipt(txHash, TxStatus.DROPPED, 'Tx dropped by P2P node.');
|
|
252
|
+
// We first check if the tx is in pending (instead of first checking if it is mined) because if we first check
|
|
253
|
+
// for mined and then for pending there could be a race condition where the tx is mined between the two checks
|
|
254
|
+
// and we would incorrectly return a TxReceipt with status DROPPED
|
|
255
|
+
const pendingTx = await this.node.getPendingTxByHash(txHash);
|
|
256
|
+
if (pendingTx) {
|
|
257
|
+
txReceipt = new TxReceipt(txHash, TxStatus.PENDING, '');
|
|
258
|
+
}
|
|
251
259
|
const settledTx = await this.node.getTx(txHash);
|
|
252
260
|
if (settledTx) {
|
|
253
261
|
const deployedContractAddress = settledTx.newContractData.find(c => !c.contractAddress.equals(AztecAddress.ZERO))?.contractAddress;
|
|
254
|
-
|
|
255
|
-
}
|
|
256
|
-
const pendingTx = await this.node.getPendingTxByHash(txHash);
|
|
257
|
-
if (pendingTx) {
|
|
258
|
-
return new TxReceipt(txHash, TxStatus.PENDING, '');
|
|
262
|
+
txReceipt = new TxReceipt(txHash, TxStatus.MINED, '', settledTx.blockHash, settledTx.blockNumber, deployedContractAddress);
|
|
259
263
|
}
|
|
260
|
-
return
|
|
264
|
+
return txReceipt;
|
|
261
265
|
}
|
|
262
266
|
async getTx(txHash) {
|
|
263
267
|
return await this.node.getTx(txHash);
|
|
@@ -302,18 +306,17 @@ export class PXEService {
|
|
|
302
306
|
// See https://github.com/AztecProtocol/aztec-packages/issues/1615
|
|
303
307
|
// TODO(#757): Enforce proper ordering of enqueued public calls
|
|
304
308
|
async patchPublicCallStackOrdering(publicInputs, enqueuedPublicCalls) {
|
|
305
|
-
const
|
|
306
|
-
const enqueuedPublicCallsHashes = await Promise.all(enqueuedPublicCalls.map(callToHash));
|
|
309
|
+
const enqueuedPublicCallStackItems = await Promise.all(enqueuedPublicCalls.map(c => c.toCallRequest()));
|
|
307
310
|
const { publicCallStack } = publicInputs.end;
|
|
308
311
|
// Validate all items in enqueued public calls are in the kernel emitted stack
|
|
309
|
-
const areEqual =
|
|
312
|
+
const areEqual = enqueuedPublicCallStackItems.reduce((accum, enqueued) => accum && !!publicCallStack.find(item => item.equals(enqueued)), true);
|
|
310
313
|
if (!areEqual) {
|
|
311
|
-
throw new Error(`Enqueued public function calls and public call stack do not match.\nEnqueued calls: ${
|
|
312
|
-
.map(h => h.toString())
|
|
314
|
+
throw new Error(`Enqueued public function calls and public call stack do not match.\nEnqueued calls: ${enqueuedPublicCallStackItems
|
|
315
|
+
.map(h => h.hash.toString())
|
|
313
316
|
.join(', ')}\nPublic call stack: ${publicCallStack.map(i => i.toString()).join(', ')}`);
|
|
314
317
|
}
|
|
315
318
|
// Override kernel output
|
|
316
|
-
publicInputs.end.publicCallStack = padArrayEnd(
|
|
319
|
+
publicInputs.end.publicCallStack = padArrayEnd(enqueuedPublicCallStackItems, CallRequest.empty(), MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX);
|
|
317
320
|
}
|
|
318
321
|
async isGlobalStateSynchronized() {
|
|
319
322
|
return await this.synchronizer.isGlobalStateSynchronized();
|
|
@@ -487,4 +490,4 @@ async function _PXEService_enrichSimulationError(err) {
|
|
|
487
490
|
}
|
|
488
491
|
}));
|
|
489
492
|
};
|
|
490
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHhlX3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHhlX3NlcnZpY2UvcHhlX3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBR0wsb0JBQW9CLEVBQ3BCLGtDQUFrQyxFQUNsQyxzQkFBc0IsRUFDdEIsc0JBQXNCLEdBQ3ZCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLFlBQVksRUFDWixlQUFlLEVBQ2YsWUFBWSxFQUdaLG1DQUFtQyxHQUdwQyxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQWUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUlMLFlBQVksRUFFWixvQkFBb0IsRUFDcEIsWUFBWSxFQU9aLFlBQVksRUFJWixlQUFlLEVBQ2YsRUFBRSxFQUdGLFFBQVEsRUFDUixTQUFTLEVBQ1QsUUFBUSxFQUNSLDZCQUE2QixFQUM3Qix5QkFBeUIsRUFDekIsYUFBYSxHQUNkLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBb0IsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6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
|
|
493
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHhlX3NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHhlX3NlcnZpY2UvcHhlX3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBR0wsb0JBQW9CLEVBQ3BCLGtDQUFrQyxFQUNsQyxzQkFBc0IsRUFDdEIsc0JBQXNCLEdBQ3ZCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLFlBQVksRUFDWixXQUFXLEVBQ1gsZUFBZSxFQUNmLFlBQVksRUFHWixtQ0FBbUMsR0FHcEMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFlLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFJTCxZQUFZLEVBRVosb0JBQW9CLEVBQ3BCLFlBQVksRUFPWixZQUFZLEVBSVosZUFBZSxFQUNmLEVBQUUsRUFHRixRQUFRLEVBQ1IsU0FBUyxFQUNULFFBQVEsRUFDUiw2QkFBNkIsRUFDN0IseUJBQXlCLEVBQ3pCLGFBQWEsR0FDZCxNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQW9CLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJC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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/pxe",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": "./dest/index.js",
|
|
6
6
|
"bin": "./dest/bin/index.js",
|
|
@@ -32,14 +32,14 @@
|
|
|
32
32
|
"rootDir": "./src"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@aztec/acir-simulator": "0.
|
|
36
|
-
"@aztec/circuits.js": "0.
|
|
37
|
-
"@aztec/ethereum": "0.
|
|
38
|
-
"@aztec/foundation": "0.
|
|
39
|
-
"@aztec/key-store": "0.
|
|
40
|
-
"@aztec/noir-compiler": "0.
|
|
41
|
-
"@aztec/noir-protocol-circuits": "0.
|
|
42
|
-
"@aztec/types": "0.
|
|
35
|
+
"@aztec/acir-simulator": "0.16.0",
|
|
36
|
+
"@aztec/circuits.js": "0.16.0",
|
|
37
|
+
"@aztec/ethereum": "0.16.0",
|
|
38
|
+
"@aztec/foundation": "0.16.0",
|
|
39
|
+
"@aztec/key-store": "0.16.0",
|
|
40
|
+
"@aztec/noir-compiler": "0.16.0",
|
|
41
|
+
"@aztec/noir-protocol-circuits": "0.16.0",
|
|
42
|
+
"@aztec/types": "0.16.0",
|
|
43
43
|
"koa": "^2.14.2",
|
|
44
44
|
"koa-router": "^12.0.0",
|
|
45
45
|
"lodash.omit": "^4.5.0",
|
package/src/index.ts
CHANGED
|
@@ -4,7 +4,7 @@ export * from './config/index.js';
|
|
|
4
4
|
|
|
5
5
|
export { Tx, TxHash } from '@aztec/types';
|
|
6
6
|
|
|
7
|
-
export { TxRequest,
|
|
7
|
+
export { TxRequest, PartialAddress } from '@aztec/circuits.js';
|
|
8
8
|
export * from '@aztec/foundation/fields';
|
|
9
9
|
export * from '@aztec/foundation/eth-address';
|
|
10
10
|
export * from '@aztec/foundation/aztec-address';
|
|
@@ -2,17 +2,18 @@ import { ExecutionResult, NoteAndSlot } from '@aztec/acir-simulator';
|
|
|
2
2
|
import {
|
|
3
3
|
AztecAddress,
|
|
4
4
|
CONTRACT_TREE_HEIGHT,
|
|
5
|
+
CallRequest,
|
|
5
6
|
EMPTY_NULLIFIED_COMMITMENT,
|
|
6
7
|
Fr,
|
|
7
8
|
MAX_NEW_COMMITMENTS_PER_TX,
|
|
8
9
|
MAX_NEW_NULLIFIERS_PER_TX,
|
|
9
10
|
MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL,
|
|
11
|
+
MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,
|
|
10
12
|
MAX_READ_REQUESTS_PER_CALL,
|
|
11
13
|
MAX_READ_REQUESTS_PER_TX,
|
|
12
14
|
MembershipWitness,
|
|
13
15
|
PreviousKernelData,
|
|
14
16
|
PrivateCallData,
|
|
15
|
-
PrivateCallStackItem,
|
|
16
17
|
PrivateKernelInputsInit,
|
|
17
18
|
PrivateKernelInputsInner,
|
|
18
19
|
PrivateKernelInputsOrdering,
|
|
@@ -24,6 +25,7 @@ import {
|
|
|
24
25
|
makeEmptyProof,
|
|
25
26
|
makeTuple,
|
|
26
27
|
} from '@aztec/circuits.js';
|
|
28
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
27
29
|
import { Tuple, assertLength } from '@aztec/foundation/serialize';
|
|
28
30
|
|
|
29
31
|
import { KernelProofCreator, ProofCreator, ProofOutput, ProofOutputFinal } from './proof_creator.js';
|
|
@@ -93,18 +95,9 @@ export class KernelProver {
|
|
|
93
95
|
while (executionStack.length) {
|
|
94
96
|
const currentExecution = executionStack.pop()!;
|
|
95
97
|
executionStack.push(...currentExecution.nestedExecutions);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
`Too many items in the call stack. Maximum amount is ${MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL}. Got ${privateCallStackPreimages.length}.`,
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
// Pad with empty items to reach max/const length expected by circuit.
|
|
103
|
-
privateCallStackPreimages.push(
|
|
104
|
-
...Array(MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL - privateCallStackPreimages.length)
|
|
105
|
-
.fill(0)
|
|
106
|
-
.map(() => PrivateCallStackItem.empty()),
|
|
107
|
-
);
|
|
98
|
+
|
|
99
|
+
const privateCallRequests = currentExecution.nestedExecutions.map(result => result.callStackItem.toCallRequest());
|
|
100
|
+
const publicCallRequests = currentExecution.enqueuedPublicFunctionCalls.map(result => result.toCallRequest());
|
|
108
101
|
|
|
109
102
|
// Start with the partially filled in read request witnesses from the simulator
|
|
110
103
|
// and fill the non-transient ones in with sibling paths via oracle.
|
|
@@ -135,8 +128,9 @@ export class KernelProver {
|
|
|
135
128
|
|
|
136
129
|
const privateCallData = await this.createPrivateCallData(
|
|
137
130
|
currentExecution,
|
|
131
|
+
privateCallRequests,
|
|
132
|
+
publicCallRequests,
|
|
138
133
|
readRequestMembershipWitnesses,
|
|
139
|
-
makeTuple(MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, i => privateCallStackPreimages[i], 0),
|
|
140
134
|
);
|
|
141
135
|
|
|
142
136
|
if (firstIteration) {
|
|
@@ -196,12 +190,21 @@ export class KernelProver {
|
|
|
196
190
|
|
|
197
191
|
private async createPrivateCallData(
|
|
198
192
|
{ callStackItem, vk }: ExecutionResult,
|
|
193
|
+
privateCallRequests: CallRequest[],
|
|
194
|
+
publicCallRequests: CallRequest[],
|
|
199
195
|
readRequestMembershipWitnesses: ReadRequestMembershipWitness[],
|
|
200
|
-
privateCallStackPreimages: Tuple<PrivateCallStackItem, typeof MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,
|
|
201
196
|
) {
|
|
202
197
|
const { contractAddress, functionData, publicInputs } = callStackItem;
|
|
203
198
|
const { portalContractAddress } = publicInputs.callContext;
|
|
204
199
|
|
|
200
|
+
// Pad with empty items to reach max/const length expected by circuit.
|
|
201
|
+
const privateCallStack = padArrayEnd(
|
|
202
|
+
privateCallRequests,
|
|
203
|
+
CallRequest.empty(),
|
|
204
|
+
MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL,
|
|
205
|
+
);
|
|
206
|
+
const publicCallStack = padArrayEnd(publicCallRequests, CallRequest.empty(), MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL);
|
|
207
|
+
|
|
205
208
|
const contractLeafMembershipWitness = functionData.isConstructor
|
|
206
209
|
? MembershipWitness.random(CONTRACT_TREE_HEIGHT)
|
|
207
210
|
: await this.oracle.getContractMembershipWitness(contractAddress);
|
|
@@ -220,7 +223,8 @@ export class KernelProver {
|
|
|
220
223
|
|
|
221
224
|
return new PrivateCallData(
|
|
222
225
|
callStackItem,
|
|
223
|
-
|
|
226
|
+
privateCallStack,
|
|
227
|
+
publicCallStack,
|
|
224
228
|
proof,
|
|
225
229
|
VerificationKey.fromBuffer(vk),
|
|
226
230
|
functionLeafMembershipWitness,
|
|
@@ -22,8 +22,6 @@ import { CircuitSimulationStats } from '@aztec/types/stats';
|
|
|
22
22
|
export interface ProofOutput {
|
|
23
23
|
/**
|
|
24
24
|
* The public inputs required for the proof generation process.
|
|
25
|
-
* Note: C++ side does not define the specific data structure PrivateKernelPublicInputs and therefore
|
|
26
|
-
* would not generate a binding in circuits.gen.ts.
|
|
27
25
|
*/
|
|
28
26
|
publicInputs: KernelCircuitPublicInputs;
|
|
29
27
|
/**
|
|
@@ -39,8 +37,6 @@ export interface ProofOutput {
|
|
|
39
37
|
export interface ProofOutputFinal {
|
|
40
38
|
/**
|
|
41
39
|
* The public inputs required for the proof generation process.
|
|
42
|
-
* Note: C++ side does not define the specific data structure PrivateKernelPublicInputsFinal and therefore
|
|
43
|
-
* would not generate a binding in circuits.gen.ts.
|
|
44
40
|
*/
|
|
45
41
|
publicInputs: KernelCircuitPublicInputsFinal;
|
|
46
42
|
/**
|
|
@@ -89,10 +85,10 @@ export interface ProofCreator {
|
|
|
89
85
|
|
|
90
86
|
/**
|
|
91
87
|
* The KernelProofCreator class is responsible for generating siloed commitments and zero-knowledge proofs
|
|
92
|
-
* for private kernel circuit. It leverages Barretenberg and
|
|
93
|
-
* to
|
|
94
|
-
*
|
|
95
|
-
*
|
|
88
|
+
* for private kernel circuit. It leverages Barretenberg to perform cryptographic operations and proof creation.
|
|
89
|
+
* The class provides methods to compute commitments based on the given public inputs and to generate proofs based on
|
|
90
|
+
* signed transaction requests, previous kernel data, private call data, and a flag indicating whether it's the first
|
|
91
|
+
* iteration or not.
|
|
96
92
|
*/
|
|
97
93
|
export class KernelProofCreator implements ProofCreator {
|
|
98
94
|
constructor(private log = createDebugLogger('aztec:kernel_proof_creator')) {}
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from '@aztec/acir-simulator';
|
|
9
9
|
import {
|
|
10
10
|
AztecAddress,
|
|
11
|
+
CallRequest,
|
|
11
12
|
CompleteAddress,
|
|
12
13
|
FunctionData,
|
|
13
14
|
GrumpkinPrivateKey,
|
|
@@ -355,13 +356,23 @@ export class PXEService implements PXE {
|
|
|
355
356
|
}
|
|
356
357
|
|
|
357
358
|
public async getTxReceipt(txHash: TxHash): Promise<TxReceipt> {
|
|
359
|
+
let txReceipt = new TxReceipt(txHash, TxStatus.DROPPED, 'Tx dropped by P2P node.');
|
|
360
|
+
|
|
361
|
+
// We first check if the tx is in pending (instead of first checking if it is mined) because if we first check
|
|
362
|
+
// for mined and then for pending there could be a race condition where the tx is mined between the two checks
|
|
363
|
+
// and we would incorrectly return a TxReceipt with status DROPPED
|
|
364
|
+
const pendingTx = await this.node.getPendingTxByHash(txHash);
|
|
365
|
+
if (pendingTx) {
|
|
366
|
+
txReceipt = new TxReceipt(txHash, TxStatus.PENDING, '');
|
|
367
|
+
}
|
|
368
|
+
|
|
358
369
|
const settledTx = await this.node.getTx(txHash);
|
|
359
370
|
if (settledTx) {
|
|
360
371
|
const deployedContractAddress = settledTx.newContractData.find(
|
|
361
372
|
c => !c.contractAddress.equals(AztecAddress.ZERO),
|
|
362
373
|
)?.contractAddress;
|
|
363
374
|
|
|
364
|
-
|
|
375
|
+
txReceipt = new TxReceipt(
|
|
365
376
|
txHash,
|
|
366
377
|
TxStatus.MINED,
|
|
367
378
|
'',
|
|
@@ -371,12 +382,7 @@ export class PXEService implements PXE {
|
|
|
371
382
|
);
|
|
372
383
|
}
|
|
373
384
|
|
|
374
|
-
|
|
375
|
-
if (pendingTx) {
|
|
376
|
-
return new TxReceipt(txHash, TxStatus.PENDING, '');
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
return new TxReceipt(txHash, TxStatus.DROPPED, 'Tx dropped by P2P node.');
|
|
385
|
+
return txReceipt;
|
|
380
386
|
}
|
|
381
387
|
|
|
382
388
|
public async getTx(txHash: TxHash): Promise<L2Tx | undefined> {
|
|
@@ -630,28 +636,27 @@ export class PXEService implements PXE {
|
|
|
630
636
|
publicInputs: KernelCircuitPublicInputsFinal,
|
|
631
637
|
enqueuedPublicCalls: PublicCallRequest[],
|
|
632
638
|
) {
|
|
633
|
-
const
|
|
634
|
-
const enqueuedPublicCallsHashes = await Promise.all(enqueuedPublicCalls.map(callToHash));
|
|
639
|
+
const enqueuedPublicCallStackItems = await Promise.all(enqueuedPublicCalls.map(c => c.toCallRequest()));
|
|
635
640
|
const { publicCallStack } = publicInputs.end;
|
|
636
641
|
|
|
637
642
|
// Validate all items in enqueued public calls are in the kernel emitted stack
|
|
638
|
-
const areEqual =
|
|
643
|
+
const areEqual = enqueuedPublicCallStackItems.reduce(
|
|
639
644
|
(accum, enqueued) => accum && !!publicCallStack.find(item => item.equals(enqueued)),
|
|
640
645
|
true,
|
|
641
646
|
);
|
|
642
647
|
|
|
643
648
|
if (!areEqual) {
|
|
644
649
|
throw new Error(
|
|
645
|
-
`Enqueued public function calls and public call stack do not match.\nEnqueued calls: ${
|
|
646
|
-
.map(h => h.toString())
|
|
650
|
+
`Enqueued public function calls and public call stack do not match.\nEnqueued calls: ${enqueuedPublicCallStackItems
|
|
651
|
+
.map(h => h.hash.toString())
|
|
647
652
|
.join(', ')}\nPublic call stack: ${publicCallStack.map(i => i.toString()).join(', ')}`,
|
|
648
653
|
);
|
|
649
654
|
}
|
|
650
655
|
|
|
651
656
|
// Override kernel output
|
|
652
657
|
publicInputs.end.publicCallStack = padArrayEnd(
|
|
653
|
-
|
|
654
|
-
|
|
658
|
+
enqueuedPublicCallStackItems,
|
|
659
|
+
CallRequest.empty(),
|
|
655
660
|
MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX,
|
|
656
661
|
);
|
|
657
662
|
}
|