@aztec/txe 2.0.0-nightly.20250903 → 2.0.0-rc.2
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.map +1 -1
- package/dest/index.js +1 -0
- package/dest/oracle/txe_oracle.d.ts +2 -15
- package/dest/oracle/txe_oracle.d.ts.map +1 -1
- package/dest/oracle/txe_oracle.js +8 -78
- package/dest/oracle/txe_oracle_public_context.d.ts +34 -0
- package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -0
- package/dest/oracle/txe_oracle_public_context.js +126 -0
- package/dest/oracle/txe_typed_oracle.d.ts +8 -2
- package/dest/oracle/txe_typed_oracle.d.ts.map +1 -1
- package/dest/oracle/txe_typed_oracle.js +18 -0
- package/dest/txe_service/txe_service.d.ts +25 -9
- package/dest/txe_service/txe_service.d.ts.map +1 -1
- package/dest/txe_service/txe_service.js +97 -81
- package/dest/txe_session.d.ts +22 -10
- package/dest/txe_session.d.ts.map +1 -1
- package/dest/txe_session.js +62 -46
- package/package.json +15 -15
- package/src/index.ts +1 -0
- package/src/oracle/txe_oracle.ts +9 -93
- package/src/oracle/txe_oracle_public_context.ts +198 -0
- package/src/oracle/txe_typed_oracle.ts +26 -2
- package/src/txe_service/txe_service.ts +125 -86
- package/src/txe_session.ts +96 -58
package/dest/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AA8NpD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,iEAIhD"}
|
package/dest/index.js
CHANGED
|
@@ -16,6 +16,7 @@ const sessions = new Map();
|
|
|
16
16
|
* TXE typically has to load the same contract artifacts over and over again for multiple tests,
|
|
17
17
|
* so we cache them here to avoid both loading them from disk repeatedly and computing their artifact hashes
|
|
18
18
|
*/ const TXEArtifactsCache = new Map();
|
|
19
|
+
// TODO: why does the zod validation in the txe dispatcher not reject invalid function names?
|
|
19
20
|
const TXEForeignCallInputSchema = z.object({
|
|
20
21
|
// eslint-disable-next-line camelcase
|
|
21
22
|
session_id: z.number().int().nonnegative(),
|
|
@@ -4,7 +4,6 @@ import { KeyStore } from '@aztec/key-store';
|
|
|
4
4
|
import { AddressDataProvider, CapsuleDataProvider, NoteDataProvider, PrivateEventDataProvider, TaggingDataProvider } from '@aztec/pxe/server';
|
|
5
5
|
import { ExecutionNoteCache, MessageLoadOracleInputs, type NoteData } from '@aztec/pxe/simulator';
|
|
6
6
|
import { type ContractArtifact, type FunctionAbi, FunctionSelector, type NoteSelector } from '@aztec/stdlib/abi';
|
|
7
|
-
import { PublicDataWrite } from '@aztec/stdlib/avm';
|
|
8
7
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
9
8
|
import { type ContractInstance, type ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
10
9
|
import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server';
|
|
@@ -28,7 +27,7 @@ export declare class TXE extends TXETypedOracle {
|
|
|
28
27
|
private privateEventDataProvider;
|
|
29
28
|
private accountDataProvider;
|
|
30
29
|
private contractAddress;
|
|
31
|
-
|
|
30
|
+
baseFork: MerkleTreeWriteOperations;
|
|
32
31
|
private stateMachine;
|
|
33
32
|
private logger;
|
|
34
33
|
private blockNumber;
|
|
@@ -37,11 +36,7 @@ export declare class TXE extends TXETypedOracle {
|
|
|
37
36
|
private msgSender;
|
|
38
37
|
private functionSelector;
|
|
39
38
|
private pxeOracleInterface;
|
|
40
|
-
private publicDataWrites;
|
|
41
|
-
private uniqueNoteHashesFromPublic;
|
|
42
|
-
private siloedNullifiersFromPublic;
|
|
43
39
|
private privateLogs;
|
|
44
|
-
private publicLogs;
|
|
45
40
|
private committedBlocks;
|
|
46
41
|
private ROLLUP_VERSION;
|
|
47
42
|
private CHAIN_ID;
|
|
@@ -68,12 +63,9 @@ export declare class TXE extends TXETypedOracle {
|
|
|
68
63
|
getAddressDataProvider(): AddressDataProvider;
|
|
69
64
|
addContractInstance(contractInstance: ContractInstanceWithAddress): Promise<void>;
|
|
70
65
|
addContractArtifact(contractClassId: Fr, artifact: ContractArtifact): Promise<void>;
|
|
71
|
-
txeGetPrivateContextInputs(blockNumber
|
|
66
|
+
txeGetPrivateContextInputs(blockNumber?: number, sideEffectsCounter?: number, isStaticCall?: boolean): Promise<PrivateContextInputs>;
|
|
72
67
|
txeAddAuthWitness(address: AztecAddress, messageHash: Fr): Promise<void>;
|
|
73
|
-
addPublicDataWrites(writes: PublicDataWrite[]): Promise<void>;
|
|
74
68
|
checkNullifiersNotInTree(contractAddress: AztecAddress, nullifiers: Fr[]): Promise<void>;
|
|
75
|
-
addSiloedNullifiersFromPublic(siloedNullifiers: Fr[]): void;
|
|
76
|
-
addUniqueNoteHashesFromPublic(siloedNoteHashes: Fr[]): void;
|
|
77
69
|
utilityAssertCompatibleOracleVersion(version: number): void;
|
|
78
70
|
utilityGetBlockNumber(): Promise<number>;
|
|
79
71
|
utilityGetTimestamp(): Promise<bigint>;
|
|
@@ -98,7 +90,6 @@ export declare class TXE extends TXETypedOracle {
|
|
|
98
90
|
utilityCheckNullifierExists(innerNullifier: Fr): Promise<boolean>;
|
|
99
91
|
getL1ToL2MembershipWitness(_contractAddress: AztecAddress, _messageHash: Fr, _secret: Fr): Promise<MessageLoadOracleInputs<typeof L1_TO_L2_MSG_TREE_HEIGHT>>;
|
|
100
92
|
utilityStorageRead(contractAddress: AztecAddress, startStorageSlot: Fr, blockNumber: number, numberOfElements: number): Promise<Fr[]>;
|
|
101
|
-
storageWrite(startStorageSlot: Fr, values: Fr[]): Promise<Fr[]>;
|
|
102
93
|
commitState(): Promise<void>;
|
|
103
94
|
getTxRequestHash(): Fr;
|
|
104
95
|
notifyCreatedContractClassLog(_log: ContractClassLog, _counter: number): Fr;
|
|
@@ -111,10 +102,6 @@ export declare class TXE extends TXETypedOracle {
|
|
|
111
102
|
utilityFetchTaggedLogs(pendingTaggedLogArrayBaseSlot: Fr): Promise<void>;
|
|
112
103
|
utilityValidateEnqueuedNotesAndEvents(contractAddress: AztecAddress, noteValidationRequestsArrayBaseSlot: Fr, eventValidationRequestsArrayBaseSlot: Fr): Promise<void>;
|
|
113
104
|
utilityBulkRetrieveLogs(contractAddress: AztecAddress, logRetrievalRequestsArrayBaseSlot: Fr, logRetrievalResponsesArrayBaseSlot: Fr): Promise<void>;
|
|
114
|
-
avmOpcodeNullifierExists(innerNullifier: Fr, targetAddress: AztecAddress): Promise<boolean>;
|
|
115
|
-
avmOpcodeEmitNullifier(nullifier: Fr): Promise<void>;
|
|
116
|
-
avmOpcodeEmitNoteHash(noteHash: Fr): Promise<void>;
|
|
117
|
-
avmOpcodeStorageRead(slot: Fr): Promise<Fr>;
|
|
118
105
|
utilityStoreCapsule(contractAddress: AztecAddress, slot: Fr, capsule: Fr[]): Promise<void>;
|
|
119
106
|
utilityLoadCapsule(contractAddress: AztecAddress, slot: Fr): Promise<Fr[] | null>;
|
|
120
107
|
utilityDeleteCapsule(contractAddress: AztecAddress, slot: Fr): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"txe_oracle.d.ts","sourceRoot":"","sources":["../../src/oracle/txe_oracle.ts"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,wBAAwB,EAM9B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAGhB,wBAAwB,EACxB,mBAAmB,EAEpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAElB,uBAAuB,EACvB,KAAK,QAAQ,EAOd,MAAM,sBAAsB,CAAC;AAW9B,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,gBAAgB,EAEhB,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"txe_oracle.d.ts","sourceRoot":"","sources":["../../src/oracle/txe_oracle.ts"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,wBAAwB,EAM9B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAGhB,wBAAwB,EACxB,mBAAmB,EAEpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAElB,uBAAuB,EACvB,KAAK,QAAQ,EAOd,MAAM,sBAAsB,CAAC;AAW9B,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,gBAAgB,EAEhB,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,2BAA2B,EAAyB,MAAM,wBAAwB,CAAC;AAWxH,OAAO,KAAK,EAA4B,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC3G,OAAO,EACL,KAAK,oBAAoB,EAEzB,oBAAoB,EAIrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAc,MAAM,oBAAoB,CAAC;AACxF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAQrD,OAAO,EAEL,YAAY,EACZ,0BAA0B,EAE1B,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,WAAW,EASX,MAAM,EAEP,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAEhF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,qBAAa,GAAI,SAAQ,cAAc;IAiCnC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,wBAAwB;IAChC,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,eAAe;IAChB,QAAQ,EAAE,yBAAyB;IAC1C,OAAO,CAAC,YAAY;IA1CtB,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,SAAS,CAAqB;IAEtC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,gBAAgB,CAAyC;IAEjE,OAAO,CAAC,kBAAkB,CAAqB;IAE/C,OAAO,CAAC,WAAW,CAAoB;IAEvC,OAAO,CAAC,eAAe,CAAqB;IAE5C,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAK;IAErB,OAAO,CAAC,IAAI,CAAY;IAExB,OAAO,CAAC,SAAS,CAAuB;IAEjC,SAAS,EAAE,kBAAkB,CAAC;IAErC,OAAO,CAAC,QAAQ,CAAuC;IAGvD,OAAO,CAAC,aAAa,CAAC,CAAe;IAErC,OAAO,CAAC,cAAc,CAAoB;gBAGhC,QAAQ,EAAE,QAAQ,EAClB,oBAAoB,EAAE,uBAAuB,EAC7C,gBAAgB,EAAE,gBAAgB,EAClC,mBAAmB,EAAE,mBAAmB,EACxC,mBAAmB,EAAE,mBAAmB,EACxC,mBAAmB,EAAE,mBAAmB,EACxC,wBAAwB,EAAE,wBAAwB,EAClD,mBAAmB,EAAE,sBAAsB,EAC3C,eAAe,EAAE,YAAY,EAC9B,QAAQ,EAAE,yBAAyB,EAClC,YAAY,EAAE,eAAe;IA+B9B,iBAAiB,IAAI,OAAO,CAAC,EAAE,CAAC;IAIhC,iBAAiB,IAAI,OAAO,CAAC,EAAE,CAAC;IAIhC,YAAY;IAIZ,qBAAqB,CAAC,eAAe,EAAE,YAAY;IAK5D,cAAc,CAAC,WAAW,EAAE,MAAM;IAInB,kBAAkB,CAAC,MAAM,EAAE,MAAM;IAUvC,qBAAqB,CAAC,QAAQ,EAAE,MAAM;IAKhC,SAAS,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,EAAE,EAAE;IAqBvF,aAAa,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,2BAA2B,EAAE,MAAM,EAAE,EAAE;IAkB3F,gBAAgB,CAAC,MAAM,EAAE,EAAE;IAa1C,uBAAuB;IAIvB,WAAW;IAIX,sBAAsB;IAItB,sBAAsB;IAIhB,mBAAmB,CAAC,gBAAgB,EAAE,2BAA2B;IAIjE,mBAAmB,CAAC,eAAe,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB;IAI1D,0BAA0B,CACvC,WAAW,CAAC,EAAE,MAAM,EACpB,kBAAkB,SAAyB,EAC3C,YAAY,UAAQ;IA2BP,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE;IAUjE,wBAAwB,CAAC,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;IAcrE,oCAAoC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ3D,qBAAqB;IAIrB,mBAAmB;IAInB,wBAAwB;IAIxB,yBAAyB;IAIzB,qBAAqB;IAIrB,4BAA4B,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;IAInD,6BAA6B,CAAC,IAAI,EAAE,EAAE;IAQtC,8BAA8B,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAI1E,0BAA0B,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI5E,2BAA2B,CAClC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,EAAE,GACZ,OAAO,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC;IAInB,oCAAoC,CAC3C,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,EAAE,GACZ,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC;IAIzC,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAItG,uCAAuC,CAC9C,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,EAAE,GACZ,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC;IAIzC,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAI5E,yBAAyB,CAAC,OAAO,EAAE,YAAY;IAI/C,qBAAqB,CAAC,WAAW,EAAE,EAAE;IAK/B,eAAe,CAC5B,WAAW,EAAE,EAAE,EACf,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EAAE,EACzB,eAAe,EAAE,MAAM,EAAE,EACzB,eAAe,EAAE,MAAM,EAAE,EACzB,YAAY,EAAE,EAAE,EAAE,EAClB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,aAAa,EAAE,MAAM,EAAE,EACvB,aAAa,EAAE,MAAM,EAAE,EACvB,aAAa,EAAE,MAAM,EAAE,EACvB,SAAS,EAAE,MAAM,EAAE,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU;IAuCX,wBAAwB,CAC/B,WAAW,EAAE,EAAE,EACf,WAAW,EAAE,YAAY,EACzB,SAAS,EAAE,EAAE,EAAE,EACf,QAAQ,EAAE,EAAE,EACZ,OAAO,EAAE,MAAM;IAiBF,0BAA0B,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM;IAM5E,6BAA6B,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE,2BAA2B,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAWhF,0BAA0B,CACxB,gBAAgB,EAAE,YAAY,EAC9B,YAAY,EAAE,EAAE,EAChB,OAAO,EAAE,EAAE,GACV,OAAO,CAAC,uBAAuB,CAAC,OAAO,wBAAwB,CAAC,CAAC;IAIrD,kBAAkB,CAC/B,eAAe,EAAE,YAAY,EAC7B,gBAAgB,EAAE,EAAE,EACpB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,EAAE,EAAE,CAAC;IA6BV,WAAW;IAsGjB,gBAAgB;IAKhB,6BAA6B,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,EAAE;IAI5D,uBAAuB,CACpC,qBAAqB,EAAE,YAAY,EACnC,gBAAgB,EAAE,gBAAgB,EAClC,QAAQ,EAAE,EAAE;IAwDR,iBAAiB,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO;IAyB3F,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIxG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI;IAI9C,6CAA6C,CAC1D,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,IAAI,CAAC;IAID,sCAAsC,CACnD,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,oBAAoB,CAAC;IAIjB,sBAAsB,CAAC,6BAA6B,EAAE,EAAE;IAQjD,qCAAqC,CACzD,eAAe,EAAE,YAAY,EAC7B,mCAAmC,EAAE,EAAE,EACvC,oCAAoC,EAAE,EAAE,GACvC,OAAO,CAAC,IAAI,CAAC;IAQD,uBAAuB,CACpC,eAAe,EAAE,YAAY,EAC7B,iCAAiC,EAAE,EAAE,EACrC,kCAAkC,EAAE,EAAE,GACrC,OAAO,CAAC,IAAI,CAAC;IAQP,mBAAmB,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1F,kBAAkB,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;IAQjF,oBAAoB,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5E,kBAAkB,CACzB,eAAe,EAAE,YAAY,EAC7B,OAAO,EAAE,EAAE,EACX,OAAO,EAAE,EAAE,EACX,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAQP,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKrF,sBAAsB,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAI3E,uBAAuB,IAAI,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAI5D,uBAAuB,CAAC,aAAa,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D,qBAAqB,CAClC,IAAI,EAAE,YAAY,EAClB,qBAAqB,EAAE,YAAY,YAAsB,EACzD,gBAAgB,EAAE,gBAAgB,YAA2B,EAC7D,IAAI,EAAE,EAAE,EAAE,EACV,QAAQ,GAAE,EAAc,EACxB,YAAY,GAAE,OAAe;;;;;IAiNhB,oBAAoB,CACjC,IAAI,EAAE,YAAY,EAClB,qBAAqB,EAAE,YAAY,EACnC,QAAQ,EAAE,EAAE,EAAE,EACd,YAAY,EAAE,OAAO;;;;YAwKT,iBAAiB;CAQhC"}
|
|
@@ -11,7 +11,6 @@ import { WASMSimulator, extractCallStack, toACVMWitness, witnessMapToFields } fr
|
|
|
11
11
|
import { ExecutionError, GuardedMerkleTreeOperations, PublicContractsDB, PublicProcessor, PublicTxSimulator, createSimulationError, resolveAssertionMessageFromError } from '@aztec/simulator/server';
|
|
12
12
|
import { FunctionSelector, FunctionType, countArgumentsSize } from '@aztec/stdlib/abi';
|
|
13
13
|
import { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
14
|
-
import { PublicDataWrite } from '@aztec/stdlib/avm';
|
|
15
14
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
16
15
|
import { computePartialAddress } from '@aztec/stdlib/contract';
|
|
17
16
|
import { Gas, GasFees, GasSettings } from '@aztec/stdlib/gas';
|
|
@@ -19,7 +18,7 @@ import { computeCalldataHash, computeNoteHashNonce, computePublicDataTreeLeafSlo
|
|
|
19
18
|
import { PartialPrivateTailPublicInputsForPublic, PrivateContextInputs, PrivateKernelTailCircuitPublicInputs, PrivateToPublicAccumulatedData, PublicCallRequest } from '@aztec/stdlib/kernel';
|
|
20
19
|
import { ClientIvcProof } from '@aztec/stdlib/proofs';
|
|
21
20
|
import { makeAppendOnlyTreeSnapshot, makeContentCommitment, makeGlobalVariables, makeHeader } from '@aztec/stdlib/testing';
|
|
22
|
-
import { AppendOnlyTreeSnapshot, MerkleTreeId
|
|
21
|
+
import { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees';
|
|
23
22
|
import { BlockHeader, CallContext, HashedValues, PrivateExecutionResult, Tx, TxConstantData, TxContext, TxEffect, TxHash, collectNested } from '@aztec/stdlib/tx';
|
|
24
23
|
import { ForkCheckpoint } from '@aztec/world-state/native';
|
|
25
24
|
import { GENESIS_TIMESTAMP } from '../txe_constants.js';
|
|
@@ -44,11 +43,7 @@ export class TXE extends TXETypedOracle {
|
|
|
44
43
|
msgSender;
|
|
45
44
|
functionSelector;
|
|
46
45
|
pxeOracleInterface;
|
|
47
|
-
publicDataWrites;
|
|
48
|
-
uniqueNoteHashesFromPublic;
|
|
49
|
-
siloedNullifiersFromPublic;
|
|
50
46
|
privateLogs;
|
|
51
|
-
publicLogs;
|
|
52
47
|
committedBlocks;
|
|
53
48
|
ROLLUP_VERSION;
|
|
54
49
|
CHAIN_ID;
|
|
@@ -60,7 +55,7 @@ export class TXE extends TXETypedOracle {
|
|
|
60
55
|
senderForTags;
|
|
61
56
|
executionCache;
|
|
62
57
|
constructor(keyStore, contractDataProvider, noteDataProvider, capsuleDataProvider, taggingDataProvider, addressDataProvider, privateEventDataProvider, accountDataProvider, contractAddress, baseFork, stateMachine){
|
|
63
|
-
super(), this.keyStore = keyStore, this.contractDataProvider = contractDataProvider, this.noteDataProvider = noteDataProvider, this.capsuleDataProvider = capsuleDataProvider, this.taggingDataProvider = taggingDataProvider, this.addressDataProvider = addressDataProvider, this.privateEventDataProvider = privateEventDataProvider, this.accountDataProvider = accountDataProvider, this.contractAddress = contractAddress, this.baseFork = baseFork, this.stateMachine = stateMachine, this.blockNumber = 1, this.timestamp = GENESIS_TIMESTAMP, this.sideEffectCounter = 0, this.functionSelector = FunctionSelector.fromField(new Fr(0)), this.
|
|
58
|
+
super(), this.keyStore = keyStore, this.contractDataProvider = contractDataProvider, this.noteDataProvider = noteDataProvider, this.capsuleDataProvider = capsuleDataProvider, this.taggingDataProvider = taggingDataProvider, this.addressDataProvider = addressDataProvider, this.privateEventDataProvider = privateEventDataProvider, this.accountDataProvider = accountDataProvider, this.contractAddress = contractAddress, this.baseFork = baseFork, this.stateMachine = stateMachine, this.blockNumber = 1, this.timestamp = GENESIS_TIMESTAMP, this.sideEffectCounter = 0, this.functionSelector = FunctionSelector.fromField(new Fr(0)), this.privateLogs = [], this.committedBlocks = new Set(), this.ROLLUP_VERSION = 1, this.CHAIN_ID = 1, this.simulator = new WASMSimulator(), this.authwits = new Map();
|
|
64
59
|
this.logger = createLogger('txe:oracle');
|
|
65
60
|
this.noteCache = new ExecutionNoteCache(this.getTxRequestHash());
|
|
66
61
|
this.node = stateMachine.node;
|
|
@@ -185,10 +180,6 @@ export class TXE extends TXETypedOracle {
|
|
|
185
180
|
]);
|
|
186
181
|
this.authwits.set(authWitness.requestHash.toString(), authWitness);
|
|
187
182
|
}
|
|
188
|
-
async addPublicDataWrites(writes) {
|
|
189
|
-
this.publicDataWrites.push(...writes);
|
|
190
|
-
await this.baseFork.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, writes.map((w)=>new PublicDataTreeLeaf(w.leafSlot, w.value).toBuffer()));
|
|
191
|
-
}
|
|
192
183
|
async checkNullifiersNotInTree(contractAddress, nullifiers) {
|
|
193
184
|
const siloedNullifiers = await Promise.all(nullifiers.map((nullifier)=>siloNullifier(contractAddress, nullifier)));
|
|
194
185
|
const db = this.baseFork;
|
|
@@ -197,12 +188,6 @@ export class TXE extends TXETypedOracle {
|
|
|
197
188
|
throw new Error(`Rejecting tx for emitting duplicate nullifiers`);
|
|
198
189
|
}
|
|
199
190
|
}
|
|
200
|
-
addSiloedNullifiersFromPublic(siloedNullifiers) {
|
|
201
|
-
this.siloedNullifiersFromPublic.push(...siloedNullifiers);
|
|
202
|
-
}
|
|
203
|
-
addUniqueNoteHashesFromPublic(siloedNoteHashes) {
|
|
204
|
-
this.uniqueNoteHashesFromPublic.push(...siloedNoteHashes);
|
|
205
|
-
}
|
|
206
191
|
// TypedOracle
|
|
207
192
|
utilityAssertCompatibleOracleVersion(version) {
|
|
208
193
|
if (version !== ORACLE_VERSION) {
|
|
@@ -360,15 +345,6 @@ export class TXE extends TXETypedOracle {
|
|
|
360
345
|
}
|
|
361
346
|
return values;
|
|
362
347
|
}
|
|
363
|
-
async storageWrite(startStorageSlot, values) {
|
|
364
|
-
const publicDataWrites = await Promise.all(values.map(async (value, i)=>{
|
|
365
|
-
const storageSlot = startStorageSlot.add(new Fr(i));
|
|
366
|
-
this.logger.debug(`Oracle storage write: slot=${storageSlot.toString()} value=${value}`);
|
|
367
|
-
return new PublicDataWrite(await computePublicDataTreeLeafSlot(this.contractAddress, storageSlot), value);
|
|
368
|
-
}));
|
|
369
|
-
await this.addPublicDataWrites(publicDataWrites);
|
|
370
|
-
return publicDataWrites.map((write)=>write.value);
|
|
371
|
-
}
|
|
372
348
|
async commitState() {
|
|
373
349
|
const blockNumber = await this.utilityGetBlockNumber();
|
|
374
350
|
const { usedTxRequestHashForNonces } = this.noteCache.finish();
|
|
@@ -382,20 +358,12 @@ export class TXE extends TXETypedOracle {
|
|
|
382
358
|
const nonceGenerator = usedTxRequestHashForNonces ? this.getTxRequestHash() : this.noteCache.getAllNullifiers()[0];
|
|
383
359
|
let i = 0;
|
|
384
360
|
const uniqueNoteHashesFromPrivate = await Promise.all(this.noteCache.getAllNotes().map(async (pendingNote)=>computeUniqueNoteHash(await computeNoteHashNonce(nonceGenerator, i++), await siloNoteHash(pendingNote.note.contractAddress, pendingNote.noteHashForConsumption))));
|
|
385
|
-
txEffect.noteHashes =
|
|
386
|
-
|
|
387
|
-
...this.uniqueNoteHashesFromPublic
|
|
388
|
-
];
|
|
389
|
-
txEffect.nullifiers = [
|
|
390
|
-
...this.siloedNullifiersFromPublic,
|
|
391
|
-
...this.noteCache.getAllNullifiers()
|
|
392
|
-
];
|
|
361
|
+
txEffect.noteHashes = uniqueNoteHashesFromPrivate;
|
|
362
|
+
txEffect.nullifiers = this.noteCache.getAllNullifiers();
|
|
393
363
|
if (usedTxRequestHashForNonces) {
|
|
394
364
|
txEffect.nullifiers.unshift(this.getTxRequestHash());
|
|
395
365
|
}
|
|
396
|
-
txEffect.publicDataWrites = this.publicDataWrites;
|
|
397
366
|
txEffect.privateLogs = this.privateLogs;
|
|
398
|
-
txEffect.publicLogs = this.publicLogs;
|
|
399
367
|
txEffect.txHash = new TxHash(new Fr(blockNumber));
|
|
400
368
|
const body = new Body([
|
|
401
369
|
txEffect
|
|
@@ -429,11 +397,7 @@ export class TXE extends TXETypedOracle {
|
|
|
429
397
|
l2Block.header = header;
|
|
430
398
|
await fork.updateArchive(l2Block.header);
|
|
431
399
|
await this.stateMachine.handleL2Block(l2Block);
|
|
432
|
-
this.publicDataWrites = [];
|
|
433
400
|
this.privateLogs = [];
|
|
434
|
-
this.publicLogs = [];
|
|
435
|
-
this.uniqueNoteHashesFromPublic = [];
|
|
436
|
-
this.siloedNullifiersFromPublic = [];
|
|
437
401
|
this.noteCache = new ExecutionNoteCache(this.getTxRequestHash());
|
|
438
402
|
}
|
|
439
403
|
getTxRequestHash() {
|
|
@@ -526,39 +490,6 @@ export class TXE extends TXETypedOracle {
|
|
|
526
490
|
async utilityBulkRetrieveLogs(contractAddress, logRetrievalRequestsArrayBaseSlot, logRetrievalResponsesArrayBaseSlot) {
|
|
527
491
|
return await this.pxeOracleInterface.bulkRetrieveLogs(contractAddress, logRetrievalRequestsArrayBaseSlot, logRetrievalResponsesArrayBaseSlot);
|
|
528
492
|
}
|
|
529
|
-
async avmOpcodeNullifierExists(innerNullifier, targetAddress) {
|
|
530
|
-
const nullifier = await siloNullifier(targetAddress, innerNullifier);
|
|
531
|
-
const db = this.baseFork;
|
|
532
|
-
const treeIndex = (await db.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, [
|
|
533
|
-
nullifier.toBuffer()
|
|
534
|
-
]))[0];
|
|
535
|
-
const transientIndex = this.siloedNullifiersFromPublic.find((n)=>n.equals(nullifier));
|
|
536
|
-
return treeIndex !== undefined || transientIndex !== undefined;
|
|
537
|
-
}
|
|
538
|
-
async avmOpcodeEmitNullifier(nullifier) {
|
|
539
|
-
const siloedNullifier = await siloNullifier(this.contractAddress, nullifier);
|
|
540
|
-
this.addSiloedNullifiersFromPublic([
|
|
541
|
-
siloedNullifier
|
|
542
|
-
]);
|
|
543
|
-
return Promise.resolve();
|
|
544
|
-
}
|
|
545
|
-
// Doesn't this need to get hashed w/ the nonce ?
|
|
546
|
-
async avmOpcodeEmitNoteHash(noteHash) {
|
|
547
|
-
const siloedNoteHash = await siloNoteHash(this.contractAddress, noteHash);
|
|
548
|
-
this.addUniqueNoteHashesFromPublic([
|
|
549
|
-
siloedNoteHash
|
|
550
|
-
]);
|
|
551
|
-
return Promise.resolve();
|
|
552
|
-
}
|
|
553
|
-
async avmOpcodeStorageRead(slot) {
|
|
554
|
-
const leafSlot = await computePublicDataTreeLeafSlot(this.contractAddress, slot);
|
|
555
|
-
const lowLeafResult = await this.baseFork.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot.toBigInt());
|
|
556
|
-
if (!lowLeafResult || !lowLeafResult.alreadyPresent) {
|
|
557
|
-
return Fr.ZERO;
|
|
558
|
-
}
|
|
559
|
-
const preimage = await this.baseFork.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE, lowLeafResult.index);
|
|
560
|
-
return preimage.leaf.value;
|
|
561
|
-
}
|
|
562
493
|
utilityStoreCapsule(contractAddress, slot, capsule) {
|
|
563
494
|
if (!contractAddress.equals(this.contractAddress)) {
|
|
564
495
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
@@ -618,17 +549,16 @@ export class TXE extends TXETypedOracle {
|
|
|
618
549
|
const txContext = new TxContext(this.CHAIN_ID, this.ROLLUP_VERSION, gasSettings);
|
|
619
550
|
const blockHeader = await this.pxeOracleInterface.getBlockHeader();
|
|
620
551
|
const noteCache = new ExecutionNoteCache(this.getTxRequestHash());
|
|
621
|
-
|
|
622
|
-
const context = new PrivateExecutionOracle(argsHash, txContext, callContext, /** Header of a block whose state is used during private execution (not the block the transaction is included in). */ blockHeader, /** List of transient auth witnesses to be used during this simulation */ Array.from(this.authwits.values()), /** List of transient auth witnesses to be used during this simulation */ [], HashedValuesCache.create(), noteCache, this.pxeOracleInterface, this.simulator, 0, 1, undefined, undefined, /**
|
|
552
|
+
const privateExecutionOracle = new PrivateExecutionOracle(argsHash, txContext, callContext, /** Header of a block whose state is used during private execution (not the block the transaction is included in). */ blockHeader, /** List of transient auth witnesses to be used during this simulation */ Array.from(this.authwits.values()), /** List of transient auth witnesses to be used during this simulation */ [], HashedValuesCache.create(), noteCache, this.pxeOracleInterface, this.simulator, 0, 1, undefined, undefined, /**
|
|
623
553
|
* In TXE, the typical transaction entrypoint is skipped, so we need to simulate the actions that such a
|
|
624
554
|
* contract would perform, including setting senderForTags.
|
|
625
555
|
*/ from);
|
|
626
|
-
|
|
556
|
+
privateExecutionOracle.privateStoreInExecutionCache(args, argsHash);
|
|
627
557
|
// Note: This is a slight modification of simulator.run without any of the checks. Maybe we should modify simulator.run with a boolean value to skip checks.
|
|
628
558
|
let result;
|
|
629
559
|
let executionResult;
|
|
630
560
|
try {
|
|
631
|
-
executionResult = await executePrivateFunction(this.simulator,
|
|
561
|
+
executionResult = await executePrivateFunction(this.simulator, privateExecutionOracle, artifact, targetContractAddress, functionSelector);
|
|
632
562
|
const { usedTxRequestHashForNonces } = noteCache.finish();
|
|
633
563
|
const firstNullifierHint = usedTxRequestHashForNonces ? Fr.ZERO : noteCache.getAllNullifiers()[0];
|
|
634
564
|
const publicCallRequests = collectNested([
|
|
@@ -637,7 +567,7 @@ export class TXE extends TXETypedOracle {
|
|
|
637
567
|
r.publicInputs.publicTeardownCallRequest
|
|
638
568
|
]));
|
|
639
569
|
const publicFunctionsCalldata = await Promise.all(publicCallRequests.map(async (r)=>{
|
|
640
|
-
const calldata = await
|
|
570
|
+
const calldata = await privateExecutionOracle.privateLoadFromExecutionCache(r.calldataHash);
|
|
641
571
|
return new HashedValues(calldata, r.calldataHash);
|
|
642
572
|
}));
|
|
643
573
|
result = new PrivateExecutionResult(executionResult, firstNullifierHint, publicFunctionsCalldata);
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
2
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
|
+
import { L2Block } from '@aztec/stdlib/block';
|
|
4
|
+
import { type MerkleTreeWriteOperations } from '@aztec/stdlib/trees';
|
|
5
|
+
import { GlobalVariables } from '@aztec/stdlib/tx';
|
|
6
|
+
import type { UInt32 } from '@aztec/stdlib/types';
|
|
7
|
+
import { TXETypedOracle } from './txe_typed_oracle.js';
|
|
8
|
+
export declare class TXEOraclePublicContext extends TXETypedOracle {
|
|
9
|
+
private contractAddress;
|
|
10
|
+
private worldTrees;
|
|
11
|
+
private txRequestHash;
|
|
12
|
+
private globalVariables;
|
|
13
|
+
private logger;
|
|
14
|
+
private transientUniqueNoteHashes;
|
|
15
|
+
private transientSiloedNullifiers;
|
|
16
|
+
private publicDataWrites;
|
|
17
|
+
constructor(contractAddress: AztecAddress, worldTrees: MerkleTreeWriteOperations, txRequestHash: Fr, globalVariables: GlobalVariables);
|
|
18
|
+
avmOpcodeAddress(): Promise<AztecAddress>;
|
|
19
|
+
avmOpcodeBlockNumber(): Promise<UInt32>;
|
|
20
|
+
avmOpcodeTimestamp(): Promise<bigint>;
|
|
21
|
+
avmOpcodeIsStaticCall(): Promise<boolean>;
|
|
22
|
+
avmOpcodeChainId(): Promise<Fr>;
|
|
23
|
+
avmOpcodeVersion(): Promise<Fr>;
|
|
24
|
+
avmOpcodeEmitNullifier(nullifier: Fr): Promise<void>;
|
|
25
|
+
avmOpcodeEmitNoteHash(noteHash: Fr): Promise<void>;
|
|
26
|
+
avmOpcodeNullifierExists(innerNullifier: Fr, targetAddress: AztecAddress): Promise<boolean>;
|
|
27
|
+
avmOpcodeStorageWrite(slot: Fr, value: Fr): Promise<void>;
|
|
28
|
+
avmOpcodeStorageRead(slot: Fr): Promise<Fr>;
|
|
29
|
+
close(): Promise<L2Block>;
|
|
30
|
+
private makeTxEffect;
|
|
31
|
+
private insertSideEffectIntoWorldTrees;
|
|
32
|
+
private makeBlockHeader;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=txe_oracle_public_context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"txe_oracle_public_context.d.ts","sourceRoot":"","sources":["../../src/oracle/txe_oracle_public_context.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAG9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAQ,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAGL,KAAK,yBAAyB,EAG/B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAe,eAAe,EAAoB,MAAM,kBAAkB,CAAC;AAClF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,qBAAa,sBAAuB,SAAQ,cAAc;IAOtD,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,eAAe;IATzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,yBAAyB,CAAY;IAC7C,OAAO,CAAC,yBAAyB,CAAY;IAC7C,OAAO,CAAC,gBAAgB,CAAyB;gBAGvC,eAAe,EAAE,YAAY,EAC7B,UAAU,EAAE,yBAAyB,EACrC,aAAa,EAAE,EAAE,EACjB,eAAe,EAAE,eAAe;IAYjC,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC;IAIzC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIvC,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIrC,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;IAIzC,gBAAgB,IAAI,OAAO,CAAC,EAAE,CAAC;IAI/B,gBAAgB,IAAI,OAAO,CAAC,EAAE,CAAC;IAIzB,sBAAsB,CAAC,SAAS,EAAE,EAAE;IAKpC,qBAAqB,CAAC,QAAQ,EAAE,EAAE;IAMlC,wBAAwB,CAAC,cAAc,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3F,qBAAqB,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;IAYzC,oBAAoB,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IAuBpD,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAwB/B,OAAO,CAAC,YAAY;YAcN,8BAA8B;YAmB9B,eAAe;CAa9B"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, NULLIFIER_SUBTREE_HEIGHT, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/constants';
|
|
2
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
4
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
5
|
+
import { PublicDataWrite } from '@aztec/stdlib/avm';
|
|
6
|
+
import { Body, L2Block } from '@aztec/stdlib/block';
|
|
7
|
+
import { computePublicDataTreeLeafSlot, siloNoteHash, siloNullifier } from '@aztec/stdlib/hash';
|
|
8
|
+
import { makeAppendOnlyTreeSnapshot, makeContentCommitment } from '@aztec/stdlib/testing';
|
|
9
|
+
import { AppendOnlyTreeSnapshot, MerkleTreeId, PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
10
|
+
import { BlockHeader, TxEffect, TxHash } from '@aztec/stdlib/tx';
|
|
11
|
+
import { TXETypedOracle } from './txe_typed_oracle.js';
|
|
12
|
+
export class TXEOraclePublicContext extends TXETypedOracle {
|
|
13
|
+
contractAddress;
|
|
14
|
+
worldTrees;
|
|
15
|
+
txRequestHash;
|
|
16
|
+
globalVariables;
|
|
17
|
+
logger;
|
|
18
|
+
transientUniqueNoteHashes;
|
|
19
|
+
transientSiloedNullifiers;
|
|
20
|
+
publicDataWrites;
|
|
21
|
+
constructor(contractAddress, worldTrees, txRequestHash, globalVariables){
|
|
22
|
+
super(), this.contractAddress = contractAddress, this.worldTrees = worldTrees, this.txRequestHash = txRequestHash, this.globalVariables = globalVariables, this.transientUniqueNoteHashes = [], this.transientSiloedNullifiers = [], this.publicDataWrites = [];
|
|
23
|
+
this.logger = createLogger('txe:public_context');
|
|
24
|
+
this.logger.debug('Entering PublicContext', {
|
|
25
|
+
contractAddress,
|
|
26
|
+
blockNumber: globalVariables.blockNumber,
|
|
27
|
+
timestamp: globalVariables.timestamp
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
avmOpcodeAddress() {
|
|
31
|
+
return Promise.resolve(this.contractAddress);
|
|
32
|
+
}
|
|
33
|
+
avmOpcodeBlockNumber() {
|
|
34
|
+
return Promise.resolve(this.globalVariables.blockNumber);
|
|
35
|
+
}
|
|
36
|
+
avmOpcodeTimestamp() {
|
|
37
|
+
return Promise.resolve(this.globalVariables.timestamp);
|
|
38
|
+
}
|
|
39
|
+
avmOpcodeIsStaticCall() {
|
|
40
|
+
return Promise.resolve(false);
|
|
41
|
+
}
|
|
42
|
+
avmOpcodeChainId() {
|
|
43
|
+
return Promise.resolve(this.globalVariables.chainId);
|
|
44
|
+
}
|
|
45
|
+
avmOpcodeVersion() {
|
|
46
|
+
return Promise.resolve(this.globalVariables.version);
|
|
47
|
+
}
|
|
48
|
+
async avmOpcodeEmitNullifier(nullifier) {
|
|
49
|
+
const siloedNullifier = await siloNullifier(this.contractAddress, nullifier);
|
|
50
|
+
this.transientSiloedNullifiers.push(siloedNullifier);
|
|
51
|
+
}
|
|
52
|
+
async avmOpcodeEmitNoteHash(noteHash) {
|
|
53
|
+
const siloedNoteHash = await siloNoteHash(this.contractAddress, noteHash);
|
|
54
|
+
// TODO: make the note hash unique - they are only siloed right now
|
|
55
|
+
this.transientUniqueNoteHashes.push(siloedNoteHash);
|
|
56
|
+
}
|
|
57
|
+
async avmOpcodeNullifierExists(innerNullifier, targetAddress) {
|
|
58
|
+
const nullifier = await siloNullifier(targetAddress, innerNullifier);
|
|
59
|
+
const treeIndex = (await this.worldTrees.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, [
|
|
60
|
+
nullifier.toBuffer()
|
|
61
|
+
]))[0];
|
|
62
|
+
const transientIndex = this.transientSiloedNullifiers.find((n)=>n.equals(nullifier));
|
|
63
|
+
return treeIndex !== undefined || transientIndex !== undefined;
|
|
64
|
+
}
|
|
65
|
+
async avmOpcodeStorageWrite(slot, value) {
|
|
66
|
+
this.logger.debug('AVM storage write', {
|
|
67
|
+
slot,
|
|
68
|
+
value
|
|
69
|
+
});
|
|
70
|
+
const dataWrite = new PublicDataWrite(await computePublicDataTreeLeafSlot(this.contractAddress, slot), value);
|
|
71
|
+
this.publicDataWrites.push(dataWrite);
|
|
72
|
+
await this.worldTrees.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE, [
|
|
73
|
+
new PublicDataTreeLeaf(dataWrite.leafSlot, dataWrite.value).toBuffer()
|
|
74
|
+
]);
|
|
75
|
+
}
|
|
76
|
+
async avmOpcodeStorageRead(slot) {
|
|
77
|
+
const leafSlot = await computePublicDataTreeLeafSlot(this.contractAddress, slot);
|
|
78
|
+
const lowLeafResult = await this.worldTrees.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE, leafSlot.toBigInt());
|
|
79
|
+
const value = !lowLeafResult || !lowLeafResult.alreadyPresent ? Fr.ZERO : (await this.worldTrees.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE, lowLeafResult.index)).leaf.value;
|
|
80
|
+
this.logger.debug('AVM storage read', {
|
|
81
|
+
slot,
|
|
82
|
+
value
|
|
83
|
+
});
|
|
84
|
+
return value;
|
|
85
|
+
}
|
|
86
|
+
async close() {
|
|
87
|
+
this.logger.debug('Exiting PublicContext, building block with collected side effects', {
|
|
88
|
+
blockNumber: this.globalVariables.blockNumber
|
|
89
|
+
});
|
|
90
|
+
const txEffect = this.makeTxEffect();
|
|
91
|
+
await this.insertSideEffectIntoWorldTrees(txEffect);
|
|
92
|
+
const block = new L2Block(makeAppendOnlyTreeSnapshot(this.globalVariables.blockNumber), await this.makeBlockHeader(), new Body([
|
|
93
|
+
txEffect
|
|
94
|
+
]));
|
|
95
|
+
await this.worldTrees.close();
|
|
96
|
+
this.logger.debug('Exited PublicContext with built block', {
|
|
97
|
+
blockNumber: block.number,
|
|
98
|
+
txEffects: block.body.txEffects
|
|
99
|
+
});
|
|
100
|
+
return block;
|
|
101
|
+
}
|
|
102
|
+
makeTxEffect() {
|
|
103
|
+
const txEffect = TxEffect.empty();
|
|
104
|
+
txEffect.noteHashes = this.transientUniqueNoteHashes;
|
|
105
|
+
txEffect.nullifiers = [
|
|
106
|
+
this.txRequestHash,
|
|
107
|
+
...this.transientSiloedNullifiers
|
|
108
|
+
];
|
|
109
|
+
txEffect.publicDataWrites = this.publicDataWrites;
|
|
110
|
+
// TODO: support public logs
|
|
111
|
+
txEffect.txHash = new TxHash(new Fr(this.globalVariables.blockNumber));
|
|
112
|
+
return txEffect;
|
|
113
|
+
}
|
|
114
|
+
async insertSideEffectIntoWorldTrees(txEffect) {
|
|
115
|
+
const l1ToL2Messages = Array(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).fill(0).map(Fr.zero);
|
|
116
|
+
await this.worldTrees.appendLeaves(MerkleTreeId.NOTE_HASH_TREE, padArrayEnd(txEffect.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX));
|
|
117
|
+
await this.worldTrees.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE, l1ToL2Messages);
|
|
118
|
+
// We do not need to add public data writes because we apply them as we go.
|
|
119
|
+
await this.worldTrees.batchInsert(MerkleTreeId.NULLIFIER_TREE, padArrayEnd(txEffect.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX).map((nullifier)=>nullifier.toBuffer()), NULLIFIER_SUBTREE_HEIGHT);
|
|
120
|
+
}
|
|
121
|
+
async makeBlockHeader() {
|
|
122
|
+
const stateReference = await this.worldTrees.getStateReference();
|
|
123
|
+
const archiveInfo = await this.worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE);
|
|
124
|
+
return new BlockHeader(new AppendOnlyTreeSnapshot(new Fr(archiveInfo.root), Number(archiveInfo.size)), makeContentCommitment(), stateReference, this.globalVariables, Fr.ZERO, Fr.ZERO);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -4,14 +4,20 @@ import { TypedOracle } from '@aztec/pxe/simulator';
|
|
|
4
4
|
import type { FunctionSelector } from '@aztec/stdlib/abi';
|
|
5
5
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
6
6
|
import type { PrivateContextInputs } from '@aztec/stdlib/kernel';
|
|
7
|
-
import type { UInt64 } from '@aztec/stdlib/types';
|
|
7
|
+
import type { UInt32, UInt64 } from '@aztec/stdlib/types';
|
|
8
8
|
export declare class TXETypedOracle extends TypedOracle {
|
|
9
|
+
avmOpcodeAddress(): Promise<AztecAddress>;
|
|
10
|
+
avmOpcodeBlockNumber(): Promise<UInt32>;
|
|
11
|
+
avmOpcodeTimestamp(): Promise<bigint>;
|
|
12
|
+
avmOpcodeIsStaticCall(): Promise<boolean>;
|
|
13
|
+
avmOpcodeChainId(): Promise<Fr>;
|
|
14
|
+
avmOpcodeVersion(): Promise<Fr>;
|
|
9
15
|
avmOpcodeEmitNullifier(_nullifier: Fr): Promise<void>;
|
|
10
16
|
avmOpcodeEmitNoteHash(_noteHash: Fr): Promise<void>;
|
|
11
17
|
avmOpcodeNullifierExists(_innerNullifier: Fr, _targetAddress: AztecAddress): Promise<boolean>;
|
|
12
18
|
avmOpcodeStorageWrite(_slot: Fr, _value: Fr): Promise<void>;
|
|
13
19
|
avmOpcodeStorageRead(_slot: Fr): Promise<Fr>;
|
|
14
|
-
txeGetPrivateContextInputs(_blockNumber
|
|
20
|
+
txeGetPrivateContextInputs(_blockNumber?: number): Promise<PrivateContextInputs>;
|
|
15
21
|
txeAdvanceBlocksBy(_blocks: number): Promise<void>;
|
|
16
22
|
txeAdvanceTimestampBy(_duration: UInt64): void;
|
|
17
23
|
txeSetContractAddress(_contractAddress: AztecAddress): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"txe_typed_oracle.d.ts","sourceRoot":"","sources":["../../src/oracle/txe_typed_oracle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9G,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"txe_typed_oracle.d.ts","sourceRoot":"","sources":["../../src/oracle/txe_typed_oracle.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,24 @@ class OracleMethodNotAvailableError extends Error {
|
|
|
5
5
|
}
|
|
6
6
|
}
|
|
7
7
|
export class TXETypedOracle extends TypedOracle {
|
|
8
|
+
avmOpcodeAddress() {
|
|
9
|
+
throw new OracleMethodNotAvailableError('avmOpcodeAddress');
|
|
10
|
+
}
|
|
11
|
+
avmOpcodeBlockNumber() {
|
|
12
|
+
throw new OracleMethodNotAvailableError('avmOpcodeBlockNumber');
|
|
13
|
+
}
|
|
14
|
+
avmOpcodeTimestamp() {
|
|
15
|
+
throw new OracleMethodNotAvailableError('avmOpcodeTimestamp');
|
|
16
|
+
}
|
|
17
|
+
avmOpcodeIsStaticCall() {
|
|
18
|
+
throw new OracleMethodNotAvailableError('avmOpcodeIsStaticCall');
|
|
19
|
+
}
|
|
20
|
+
avmOpcodeChainId() {
|
|
21
|
+
throw new OracleMethodNotAvailableError('avmOpcodeChainId');
|
|
22
|
+
}
|
|
23
|
+
avmOpcodeVersion() {
|
|
24
|
+
throw new OracleMethodNotAvailableError('avmOpcodeVersion');
|
|
25
|
+
}
|
|
8
26
|
avmOpcodeEmitNullifier(_nullifier) {
|
|
9
27
|
throw new OracleMethodNotAvailableError('avmOpcodeEmitNullifier');
|
|
10
28
|
}
|
|
@@ -1,12 +1,31 @@
|
|
|
1
1
|
import { type ContractInstanceWithAddress } from '@aztec/aztec.js';
|
|
2
2
|
import { type ContractArtifact } from '@aztec/stdlib/abi';
|
|
3
3
|
import type { TXETypedOracle } from '../oracle/txe_typed_oracle.js';
|
|
4
|
+
import type { TXESessionStateHandler } from '../txe_session.js';
|
|
4
5
|
import { type ForeignCallArray, type ForeignCallSingle } from '../util/encoding.js';
|
|
5
6
|
export declare class TXEService {
|
|
6
|
-
private
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
private stateHandler;
|
|
8
|
+
private oracleHandler;
|
|
9
|
+
/**
|
|
10
|
+
* Create a new instance of `TXEService` that will translate all TXE RPC calls to and from the foreign
|
|
11
|
+
* (`ForeignCallSingle`, `ForeignCallResult`, etc.) and native TS types, delegating actual execution of the oracles
|
|
12
|
+
* to the different handlers.
|
|
13
|
+
* @param stateHandler The handler that will process TXE session state transitions, such as entering a private or
|
|
14
|
+
* public context.
|
|
15
|
+
* @param oracleHandler The handler that will process all other oracle calls that are not directly related to session
|
|
16
|
+
* state.
|
|
17
|
+
*/
|
|
18
|
+
constructor(stateHandler: TXESessionStateHandler, oracleHandler: TXETypedOracle);
|
|
19
|
+
txeSetTopLevelTXEContext(): Promise<{
|
|
20
|
+
values: (string | ForeignCallArray)[];
|
|
21
|
+
}>;
|
|
22
|
+
txeSetPrivateTXEContext(foreignContractAddressIsSome: ForeignCallSingle, foreignContractAddressValue: ForeignCallSingle, foreignHistoricalBlockNumberIsSome: ForeignCallSingle, foreignHistoricalBlockNumberValue: ForeignCallSingle): Promise<{
|
|
23
|
+
values: (string | ForeignCallArray)[];
|
|
24
|
+
}>;
|
|
25
|
+
txeSetPublicTXEContext(foreignContractAddressIsSome: ForeignCallSingle, foreignContractAddressValue: ForeignCallSingle): Promise<{
|
|
26
|
+
values: (string | ForeignCallArray)[];
|
|
27
|
+
}>;
|
|
28
|
+
txeSetUtilityTXEContext(foreignContractAddressIsSome: ForeignCallSingle, foreignContractAddressValue: ForeignCallSingle): Promise<{
|
|
10
29
|
values: (string | ForeignCallArray)[];
|
|
11
30
|
}>;
|
|
12
31
|
txeAdvanceBlocksBy(foreignBlocks: ForeignCallSingle): Promise<{
|
|
@@ -15,9 +34,6 @@ export declare class TXEService {
|
|
|
15
34
|
txeAdvanceTimestampBy(foreignDuration: ForeignCallSingle): {
|
|
16
35
|
values: (string | ForeignCallArray)[];
|
|
17
36
|
};
|
|
18
|
-
txeSetContractAddress(foreignAddress: ForeignCallSingle): {
|
|
19
|
-
values: (string | ForeignCallArray)[];
|
|
20
|
-
};
|
|
21
37
|
txeDeploy(artifact: ContractArtifact, instance: ContractInstanceWithAddress, foreignSecret: ForeignCallSingle): Promise<{
|
|
22
38
|
values: (string | ForeignCallArray)[];
|
|
23
39
|
}>;
|
|
@@ -182,9 +198,9 @@ export declare class TXEService {
|
|
|
182
198
|
avmOpcodeTimestamp(): Promise<{
|
|
183
199
|
values: (string | ForeignCallArray)[];
|
|
184
200
|
}>;
|
|
185
|
-
avmOpcodeIsStaticCall(): {
|
|
201
|
+
avmOpcodeIsStaticCall(): Promise<{
|
|
186
202
|
values: (string | ForeignCallArray)[];
|
|
187
|
-
}
|
|
203
|
+
}>;
|
|
188
204
|
avmOpcodeChainId(): Promise<{
|
|
189
205
|
values: (string | ForeignCallArray)[];
|
|
190
206
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"txe_service.d.ts","sourceRoot":"","sources":["../../src/txe_service/txe_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,2BAA2B,EAAa,MAAM,iBAAiB,CAAC;AAE9E,OAAO,EAAE,KAAK,gBAAgB,EAAkC,MAAM,mBAAmB,CAAC;AAI1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EAYvB,MAAM,qBAAqB,CAAC;AAE7B,qBAAa,UAAU;
|
|
1
|
+
{"version":3,"file":"txe_service.d.ts","sourceRoot":"","sources":["../../src/txe_service/txe_service.ts"],"names":[],"mappings":"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"}
|