@aztec/simulator 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/README.md +47 -0
  2. package/dest/acvm/acvm.d.ts +39 -0
  3. package/dest/acvm/acvm.d.ts.map +1 -0
  4. package/dest/acvm/acvm.js +97 -0
  5. package/dest/acvm/acvm_types.d.ts +10 -0
  6. package/dest/acvm/acvm_types.d.ts.map +1 -0
  7. package/dest/acvm/acvm_types.js +2 -0
  8. package/dest/acvm/deserialize.d.ts +24 -0
  9. package/dest/acvm/deserialize.d.ts.map +1 -0
  10. package/dest/acvm/deserialize.js +31 -0
  11. package/dest/acvm/index.d.ts +6 -0
  12. package/dest/acvm/index.d.ts.map +1 -0
  13. package/dest/acvm/index.js +6 -0
  14. package/dest/acvm/oracle/debug.d.ts +19 -0
  15. package/dest/acvm/oracle/debug.d.ts.map +1 -0
  16. package/dest/acvm/oracle/debug.js +95 -0
  17. package/dest/acvm/oracle/index.d.ts +15 -0
  18. package/dest/acvm/oracle/index.d.ts.map +1 -0
  19. package/dest/acvm/oracle/index.js +4 -0
  20. package/dest/acvm/oracle/oracle.d.ts +38 -0
  21. package/dest/acvm/oracle/oracle.d.ts.map +1 -0
  22. package/dest/acvm/oracle/oracle.js +193 -0
  23. package/dest/acvm/oracle/typed_oracle.d.ts +88 -0
  24. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -0
  25. package/dest/acvm/oracle/typed_oracle.js +103 -0
  26. package/dest/acvm/serialize.d.ts +30 -0
  27. package/dest/acvm/serialize.d.ts.map +1 -0
  28. package/dest/acvm/serialize.js +67 -0
  29. package/dest/avm/avm_context.d.ts +49 -0
  30. package/dest/avm/avm_context.d.ts.map +1 -0
  31. package/dest/avm/avm_context.js +56 -0
  32. package/dest/avm/avm_execution_environment.d.ts +28 -0
  33. package/dest/avm/avm_execution_environment.d.ts.map +1 -0
  34. package/dest/avm/avm_execution_environment.js +42 -0
  35. package/dest/avm/avm_machine_state.d.ts +62 -0
  36. package/dest/avm/avm_machine_state.d.ts.map +1 -0
  37. package/dest/avm/avm_machine_state.js +69 -0
  38. package/dest/avm/avm_memory_types.d.ts +113 -0
  39. package/dest/avm/avm_memory_types.d.ts.map +1 -0
  40. package/dest/avm/avm_memory_types.js +269 -0
  41. package/dest/avm/avm_message_call_result.d.ts +16 -0
  42. package/dest/avm/avm_message_call_result.d.ts.map +1 -0
  43. package/dest/avm/avm_message_call_result.js +21 -0
  44. package/dest/avm/avm_simulator.d.ts +22 -0
  45. package/dest/avm/avm_simulator.d.ts.map +1 -0
  46. package/dest/avm/avm_simulator.js +74 -0
  47. package/dest/avm/errors.d.ts +30 -0
  48. package/dest/avm/errors.d.ts.map +1 -0
  49. package/dest/avm/errors.js +44 -0
  50. package/dest/avm/fixtures/index.d.ts +28 -0
  51. package/dest/avm/fixtures/index.d.ts.map +1 -0
  52. package/dest/avm/fixtures/index.js +44 -0
  53. package/dest/avm/journal/host_storage.d.ts +13 -0
  54. package/dest/avm/journal/host_storage.d.ts.map +1 -0
  55. package/dest/avm/journal/host_storage.js +13 -0
  56. package/dest/avm/journal/index.d.ts +3 -0
  57. package/dest/avm/journal/index.d.ts.map +1 -0
  58. package/dest/avm/journal/index.js +3 -0
  59. package/dest/avm/journal/journal.d.ts +95 -0
  60. package/dest/avm/journal/journal.d.ts.map +1 -0
  61. package/dest/avm/journal/journal.js +217 -0
  62. package/dest/avm/opcodes/accrued_substate.d.ts +42 -0
  63. package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -0
  64. package/dest/avm/opcodes/accrued_substate.js +82 -0
  65. package/dest/avm/opcodes/arithmetic.d.ts +28 -0
  66. package/dest/avm/opcodes/arithmetic.d.ts.map +1 -0
  67. package/dest/avm/opcodes/arithmetic.js +59 -0
  68. package/dest/avm/opcodes/bitwise.d.ts +40 -0
  69. package/dest/avm/opcodes/bitwise.d.ts.map +1 -0
  70. package/dest/avm/opcodes/bitwise.js +92 -0
  71. package/dest/avm/opcodes/comparators.d.ts +22 -0
  72. package/dest/avm/opcodes/comparators.d.ts.map +1 -0
  73. package/dest/avm/opcodes/comparators.js +51 -0
  74. package/dest/avm/opcodes/control_flow.d.ts +57 -0
  75. package/dest/avm/opcodes/control_flow.d.ts.map +1 -0
  76. package/dest/avm/opcodes/control_flow.js +118 -0
  77. package/dest/avm/opcodes/environment_getters.d.ts +74 -0
  78. package/dest/avm/opcodes/environment_getters.d.ts.map +1 -0
  79. package/dest/avm/opcodes/environment_getters.js +151 -0
  80. package/dest/avm/opcodes/external_calls.d.ts +34 -0
  81. package/dest/avm/opcodes/external_calls.d.ts.map +1 -0
  82. package/dest/avm/opcodes/external_calls.js +103 -0
  83. package/dest/avm/opcodes/index.d.ts +11 -0
  84. package/dest/avm/opcodes/index.d.ts.map +1 -0
  85. package/dest/avm/opcodes/index.js +11 -0
  86. package/dest/avm/opcodes/instruction.d.ts +43 -0
  87. package/dest/avm/opcodes/instruction.d.ts.map +1 -0
  88. package/dest/avm/opcodes/instruction.js +44 -0
  89. package/dest/avm/opcodes/instruction_impl.d.ts +28 -0
  90. package/dest/avm/opcodes/instruction_impl.d.ts.map +1 -0
  91. package/dest/avm/opcodes/instruction_impl.js +47 -0
  92. package/dest/avm/opcodes/memory.d.ts +55 -0
  93. package/dest/avm/opcodes/memory.d.ts.map +1 -0
  94. package/dest/avm/opcodes/memory.js +125 -0
  95. package/dest/avm/opcodes/storage.d.ts +31 -0
  96. package/dest/avm/opcodes/storage.d.ts.map +1 -0
  97. package/dest/avm/opcodes/storage.js +59 -0
  98. package/dest/avm/serialization/buffer_cursor.d.ts +25 -0
  99. package/dest/avm/serialization/buffer_cursor.d.ts.map +1 -0
  100. package/dest/avm/serialization/buffer_cursor.js +94 -0
  101. package/dest/avm/serialization/bytecode_serialization.d.ts +25 -0
  102. package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -0
  103. package/dest/avm/serialization/bytecode_serialization.js +100 -0
  104. package/dest/avm/serialization/instruction_serialization.d.ts +91 -0
  105. package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -0
  106. package/dest/avm/serialization/instruction_serialization.js +146 -0
  107. package/dest/client/client_execution_context.d.ts +188 -0
  108. package/dest/client/client_execution_context.d.ts.map +1 -0
  109. package/dest/client/client_execution_context.js +326 -0
  110. package/dest/client/db_oracle.d.ts +155 -0
  111. package/dest/client/db_oracle.d.ts.map +1 -0
  112. package/dest/client/db_oracle.js +17 -0
  113. package/dest/client/execution_note_cache.d.ts +54 -0
  114. package/dest/client/execution_note_cache.d.ts.map +1 -0
  115. package/dest/client/execution_note_cache.js +82 -0
  116. package/dest/client/execution_result.d.ts +67 -0
  117. package/dest/client/execution_result.d.ts.map +1 -0
  118. package/dest/client/execution_result.js +32 -0
  119. package/dest/client/index.d.ts +4 -0
  120. package/dest/client/index.d.ts.map +1 -0
  121. package/dest/client/index.js +4 -0
  122. package/dest/client/pick_notes.d.ts +80 -0
  123. package/dest/client/pick_notes.d.ts.map +1 -0
  124. package/dest/client/pick_notes.js +45 -0
  125. package/dest/client/private_execution.d.ts +10 -0
  126. package/dest/client/private_execution.d.ts.map +1 -0
  127. package/dest/client/private_execution.js +55 -0
  128. package/dest/client/simulator.d.ts +100 -0
  129. package/dest/client/simulator.d.ts.map +1 -0
  130. package/dest/client/simulator.js +171 -0
  131. package/dest/client/unconstrained_execution.d.ts +10 -0
  132. package/dest/client/unconstrained_execution.d.ts.map +1 -0
  133. package/dest/client/unconstrained_execution.js +25 -0
  134. package/dest/client/view_data_oracle.d.ts +139 -0
  135. package/dest/client/view_data_oracle.d.ts.map +1 -0
  136. package/dest/client/view_data_oracle.js +196 -0
  137. package/dest/common/errors.d.ts +36 -0
  138. package/dest/common/errors.d.ts.map +1 -0
  139. package/dest/common/errors.js +57 -0
  140. package/dest/common/index.d.ts +4 -0
  141. package/dest/common/index.d.ts.map +1 -0
  142. package/dest/common/index.js +4 -0
  143. package/dest/common/packed_args_cache.d.ts +28 -0
  144. package/dest/common/packed_args_cache.d.ts.map +1 -0
  145. package/dest/common/packed_args_cache.js +50 -0
  146. package/dest/common/side_effect_counter.d.ts +9 -0
  147. package/dest/common/side_effect_counter.d.ts.map +1 -0
  148. package/dest/common/side_effect_counter.js +14 -0
  149. package/dest/index.d.ts +4 -0
  150. package/dest/index.d.ts.map +1 -0
  151. package/dest/index.js +4 -0
  152. package/dest/public/db.d.ts +77 -0
  153. package/dest/public/db.d.ts.map +1 -0
  154. package/dest/public/db.js +2 -0
  155. package/dest/public/execution.d.ts +62 -0
  156. package/dest/public/execution.d.ts.map +1 -0
  157. package/dest/public/execution.js +61 -0
  158. package/dest/public/executor.d.ts +27 -0
  159. package/dest/public/executor.d.ts.map +1 -0
  160. package/dest/public/executor.js +83 -0
  161. package/dest/public/index.d.ts +4 -0
  162. package/dest/public/index.d.ts.map +1 -0
  163. package/dest/public/index.js +4 -0
  164. package/dest/public/public_execution_context.d.ts +103 -0
  165. package/dest/public/public_execution_context.d.ts.map +1 -0
  166. package/dest/public/public_execution_context.js +175 -0
  167. package/dest/public/state_actions.d.ts +39 -0
  168. package/dest/public/state_actions.d.ts.map +1 -0
  169. package/dest/public/state_actions.js +79 -0
  170. package/dest/test/utils.d.ts +12 -0
  171. package/dest/test/utils.d.ts.map +1 -0
  172. package/dest/test/utils.js +23 -0
  173. package/dest/utils.d.ts +27 -0
  174. package/dest/utils.d.ts.map +1 -0
  175. package/dest/utils.js +28 -0
  176. package/package.json +66 -0
@@ -0,0 +1,193 @@
1
+ import { MerkleTreeId, UnencryptedL2Log } from '@aztec/circuit-types';
2
+ import { RETURN_VALUES_LENGTH } from '@aztec/circuits.js';
3
+ import { EventSelector, FunctionSelector } from '@aztec/foundation/abi';
4
+ import { AztecAddress } from '@aztec/foundation/aztec-address';
5
+ import { padArrayEnd } from '@aztec/foundation/collection';
6
+ import { Fr, Point } from '@aztec/foundation/fields';
7
+ import { createDebugLogger } from '@aztec/foundation/log';
8
+ import { frToNumber, fromACVMField } from '../deserialize.js';
9
+ import { toACVMField, toAcvmEnqueuePublicFunctionResult } from '../serialize.js';
10
+ import { acvmFieldMessageToString, oracleDebugCallToFormattedStr } from './debug.js';
11
+ /**
12
+ * A data source that has all the apis required by Aztec.nr.
13
+ */
14
+ export class Oracle {
15
+ constructor(typedOracle, log = createDebugLogger('aztec:simulator:oracle')) {
16
+ this.typedOracle = typedOracle;
17
+ this.log = log;
18
+ }
19
+ getRandomField() {
20
+ const val = this.typedOracle.getRandomField();
21
+ return toACVMField(val);
22
+ }
23
+ async packArguments(args) {
24
+ const packed = await this.typedOracle.packArguments(args.map(fromACVMField));
25
+ return toACVMField(packed);
26
+ }
27
+ async getNullifierKeyPair([accountAddress]) {
28
+ const { publicKey, secretKey } = await this.typedOracle.getNullifierKeyPair(fromACVMField(accountAddress));
29
+ return [
30
+ toACVMField(publicKey.x),
31
+ toACVMField(publicKey.y),
32
+ toACVMField(secretKey.high),
33
+ toACVMField(secretKey.low),
34
+ ];
35
+ }
36
+ async getPublicKeyAndPartialAddress([address]) {
37
+ const { publicKey, partialAddress } = await this.typedOracle.getCompleteAddress(AztecAddress.fromField(fromACVMField(address)));
38
+ return [publicKey.x, publicKey.y, partialAddress].map(toACVMField);
39
+ }
40
+ async getMembershipWitness([blockNumber], [treeId], [leafValue]) {
41
+ const parsedBlockNumber = frToNumber(fromACVMField(blockNumber));
42
+ const parsedTreeId = frToNumber(fromACVMField(treeId));
43
+ const parsedLeafValue = fromACVMField(leafValue);
44
+ const witness = await this.typedOracle.getMembershipWitness(parsedBlockNumber, parsedTreeId, parsedLeafValue);
45
+ if (!witness) {
46
+ throw new Error(`Leaf ${leafValue} not found in the tree ${MerkleTreeId[parsedTreeId]} at block ${parsedBlockNumber}.`);
47
+ }
48
+ return witness.map(toACVMField);
49
+ }
50
+ async getSiblingPath([blockNumber], [treeId], [leafIndex]) {
51
+ const parsedBlockNumber = frToNumber(fromACVMField(blockNumber));
52
+ const parsedTreeId = frToNumber(fromACVMField(treeId));
53
+ const parsedLeafIndex = fromACVMField(leafIndex);
54
+ const path = await this.typedOracle.getSiblingPath(parsedBlockNumber, parsedTreeId, parsedLeafIndex);
55
+ return path.map(toACVMField);
56
+ }
57
+ async getNullifierMembershipWitness([blockNumber], [nullifier]) {
58
+ const parsedBlockNumber = frToNumber(fromACVMField(blockNumber));
59
+ const parsedNullifier = fromACVMField(nullifier);
60
+ const witness = await this.typedOracle.getNullifierMembershipWitness(parsedBlockNumber, parsedNullifier);
61
+ if (!witness) {
62
+ throw new Error(`Low nullifier witness not found for nullifier ${parsedNullifier} at block ${parsedBlockNumber}.`);
63
+ }
64
+ return witness.toFields().map(toACVMField);
65
+ }
66
+ async getLowNullifierMembershipWitness([blockNumber], [nullifier]) {
67
+ const parsedBlockNumber = frToNumber(fromACVMField(blockNumber));
68
+ const parsedNullifier = fromACVMField(nullifier);
69
+ const witness = await this.typedOracle.getLowNullifierMembershipWitness(parsedBlockNumber, parsedNullifier);
70
+ if (!witness) {
71
+ throw new Error(`Low nullifier witness not found for nullifier ${parsedNullifier} at block ${parsedBlockNumber}.`);
72
+ }
73
+ return witness.toFields().map(toACVMField);
74
+ }
75
+ async getPublicDataTreeWitness([blockNumber], [leafSlot]) {
76
+ const parsedBlockNumber = frToNumber(fromACVMField(blockNumber));
77
+ const parsedLeafSlot = fromACVMField(leafSlot);
78
+ const witness = await this.typedOracle.getPublicDataTreeWitness(parsedBlockNumber, parsedLeafSlot);
79
+ if (!witness) {
80
+ throw new Error(`Public data witness not found for slot ${parsedLeafSlot} at block ${parsedBlockNumber}.`);
81
+ }
82
+ return witness.toFields().map(toACVMField);
83
+ }
84
+ async getHeader([blockNumber]) {
85
+ const parsedBlockNumber = frToNumber(fromACVMField(blockNumber));
86
+ const header = await this.typedOracle.getHeader(parsedBlockNumber);
87
+ if (!header) {
88
+ throw new Error(`Block header not found for block ${parsedBlockNumber}.`);
89
+ }
90
+ return header.toFields().map(toACVMField);
91
+ }
92
+ async getAuthWitness([messageHash]) {
93
+ const messageHashField = fromACVMField(messageHash);
94
+ const witness = await this.typedOracle.getAuthWitness(messageHashField);
95
+ if (!witness) {
96
+ throw new Error(`Authorization not found for message hash ${messageHashField}`);
97
+ }
98
+ return witness.map(toACVMField);
99
+ }
100
+ async popCapsule() {
101
+ const capsule = await this.typedOracle.popCapsule();
102
+ if (!capsule) {
103
+ throw new Error(`No capsules available`);
104
+ }
105
+ return capsule.map(toACVMField);
106
+ }
107
+ async getNotes([storageSlot], [numSelects], selectBy, selectValues, selectComparators, sortBy, sortOrder, [limit], [offset], [status], [returnSize]) {
108
+ const noteDatas = await this.typedOracle.getNotes(fromACVMField(storageSlot), +numSelects, selectBy.map(s => +s), selectValues.map(fromACVMField), selectComparators.map(s => +s), sortBy.map(s => +s), sortOrder.map(s => +s), +limit, +offset, +status);
109
+ const noteLength = noteDatas?.[0]?.note.items.length ?? 0;
110
+ if (!noteDatas.every(({ note }) => noteLength === note.items.length)) {
111
+ throw new Error('Notes should all be the same length.');
112
+ }
113
+ const contractAddress = noteDatas[0]?.contractAddress ?? Fr.ZERO;
114
+ // Values indicates whether the note is settled or transient.
115
+ const noteTypes = {
116
+ isSettled: new Fr(0),
117
+ isTransient: new Fr(1),
118
+ };
119
+ const flattenData = noteDatas.flatMap(({ nonce, note, index }) => [
120
+ nonce,
121
+ index === undefined ? noteTypes.isTransient : noteTypes.isSettled,
122
+ ...note.items,
123
+ ]);
124
+ const returnFieldSize = +returnSize;
125
+ const returnData = [noteDatas.length, contractAddress, ...flattenData].map(v => toACVMField(v));
126
+ if (returnData.length > returnFieldSize) {
127
+ throw new Error(`Return data size too big. Maximum ${returnFieldSize} fields. Got ${flattenData.length}.`);
128
+ }
129
+ const paddedZeros = Array(returnFieldSize - returnData.length).fill(toACVMField(0));
130
+ return returnData.concat(paddedZeros);
131
+ }
132
+ notifyCreatedNote([storageSlot], note, [innerNoteHash]) {
133
+ this.typedOracle.notifyCreatedNote(fromACVMField(storageSlot), note.map(fromACVMField), fromACVMField(innerNoteHash));
134
+ return toACVMField(0);
135
+ }
136
+ async notifyNullifiedNote([innerNullifier], [innerNoteHash]) {
137
+ await this.typedOracle.notifyNullifiedNote(fromACVMField(innerNullifier), fromACVMField(innerNoteHash));
138
+ return toACVMField(0);
139
+ }
140
+ async checkNullifierExists([innerNullifier]) {
141
+ const exists = await this.typedOracle.checkNullifierExists(fromACVMField(innerNullifier));
142
+ return toACVMField(exists);
143
+ }
144
+ async getL1ToL2Message([msgKey]) {
145
+ const message = await this.typedOracle.getL1ToL2Message(fromACVMField(msgKey));
146
+ return message.toFields().map(toACVMField);
147
+ }
148
+ async getPortalContractAddress([aztecAddress]) {
149
+ const contractAddress = AztecAddress.fromString(aztecAddress);
150
+ const portalContactAddress = await this.typedOracle.getPortalContractAddress(contractAddress);
151
+ return toACVMField(portalContactAddress);
152
+ }
153
+ async storageRead([startStorageSlot], [numberOfElements]) {
154
+ const values = await this.typedOracle.storageRead(fromACVMField(startStorageSlot), +numberOfElements);
155
+ return values.map(toACVMField);
156
+ }
157
+ async storageWrite([startStorageSlot], values) {
158
+ const newValues = await this.typedOracle.storageWrite(fromACVMField(startStorageSlot), values.map(fromACVMField));
159
+ return newValues.map(toACVMField);
160
+ }
161
+ emitEncryptedLog([contractAddress], [storageSlot], [publicKeyX], [publicKeyY], log) {
162
+ const publicKey = new Point(fromACVMField(publicKeyX), fromACVMField(publicKeyY));
163
+ this.typedOracle.emitEncryptedLog(AztecAddress.fromString(contractAddress), Fr.fromString(storageSlot), publicKey, log.map(fromACVMField));
164
+ return toACVMField(0);
165
+ }
166
+ emitUnencryptedLog([contractAddress], [eventSelector], message) {
167
+ const logPayload = Buffer.concat(message.map(fromACVMField).map(f => f.toBuffer()));
168
+ const log = new UnencryptedL2Log(AztecAddress.fromString(contractAddress), EventSelector.fromField(fromACVMField(eventSelector)), logPayload);
169
+ this.typedOracle.emitUnencryptedLog(log);
170
+ return toACVMField(0);
171
+ }
172
+ debugLog(...args) {
173
+ this.log(oracleDebugCallToFormattedStr(args));
174
+ return toACVMField(0);
175
+ }
176
+ debugLogWithPrefix(arg0, ...args) {
177
+ this.log(`${acvmFieldMessageToString(arg0)}: ${oracleDebugCallToFormattedStr(args)}`);
178
+ return toACVMField(0);
179
+ }
180
+ async callPrivateFunction([contractAddress], [functionSelector], [argsHash], [sideffectCounter]) {
181
+ const callStackItem = await this.typedOracle.callPrivateFunction(AztecAddress.fromField(fromACVMField(contractAddress)), FunctionSelector.fromField(fromACVMField(functionSelector)), fromACVMField(argsHash), frToNumber(fromACVMField(sideffectCounter)));
182
+ return callStackItem.toFields().map(toACVMField);
183
+ }
184
+ async callPublicFunction([contractAddress], [functionSelector], [argsHash]) {
185
+ const returnValues = await this.typedOracle.callPublicFunction(AztecAddress.fromField(fromACVMField(contractAddress)), FunctionSelector.fromField(fromACVMField(functionSelector)), fromACVMField(argsHash));
186
+ return padArrayEnd(returnValues, Fr.ZERO, RETURN_VALUES_LENGTH).map(toACVMField);
187
+ }
188
+ async enqueuePublicFunctionCall([contractAddress], [functionSelector], [argsHash], [sideffectCounter]) {
189
+ const enqueuedRequest = await this.typedOracle.enqueuePublicFunctionCall(AztecAddress.fromString(contractAddress), FunctionSelector.fromField(fromACVMField(functionSelector)), fromACVMField(argsHash), frToNumber(fromACVMField(sideffectCounter)));
190
+ return toAcvmEnqueuePublicFunctionResult(enqueuedRequest);
191
+ }
192
+ }
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JhY2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Fjdm0vb3JhY2xlL29yYWNsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHckY7O0dBRUc7QUFDSCxNQUFNLE9BQU8sTUFBTTtJQUNqQixZQUFvQixXQUF3QixFQUFVLE1BQU0saUJBQWlCLENBQUMsd0JBQXdCLENBQUM7UUFBbkYsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUE4QztJQUFHLENBQUM7SUFFM0csY0FBYztRQUNaLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDOUMsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFh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
@@ -0,0 +1,88 @@
1
+ import { CompleteAddress, L1ToL2Message, MerkleTreeId, Note, NoteStatus, NullifierMembershipWitness, PublicDataWitness, PublicKey, SiblingPath, UnencryptedL2Log } from '@aztec/circuit-types';
2
+ import { GrumpkinPrivateKey, Header, L1_TO_L2_MSG_TREE_HEIGHT, PrivateCallStackItem, PublicCallRequest } from '@aztec/circuits.js';
3
+ import { FunctionSelector } from '@aztec/foundation/abi';
4
+ import { AztecAddress } from '@aztec/foundation/aztec-address';
5
+ import { EthAddress } from '@aztec/foundation/eth-address';
6
+ import { Fr } from '@aztec/foundation/fields';
7
+ /**
8
+ * A pair of public key and secret key.
9
+ */
10
+ export interface KeyPair {
11
+ /**
12
+ * Public key.
13
+ */
14
+ publicKey: PublicKey;
15
+ /**
16
+ * Secret Key.
17
+ */
18
+ secretKey: GrumpkinPrivateKey;
19
+ }
20
+ /**
21
+ * Information about a note needed during execution.
22
+ */
23
+ export interface NoteData {
24
+ /** The note. */
25
+ note: Note;
26
+ /** The contract address of the note. */
27
+ contractAddress: AztecAddress;
28
+ /** The storage slot of the note. */
29
+ storageSlot: Fr;
30
+ /** The nonce of the note. */
31
+ nonce: Fr;
32
+ /** The inner note hash of the note. */
33
+ innerNoteHash: Fr;
34
+ /** The corresponding nullifier of the note. Undefined for pending notes. */
35
+ siloedNullifier?: Fr;
36
+ /** The note's leaf index in the note hash tree. Undefined for pending notes. */
37
+ index?: bigint;
38
+ }
39
+ export declare class MessageLoadOracleInputs<N extends number> {
40
+ /** The message. */
41
+ message: L1ToL2Message;
42
+ /** The index of the message commitment in the merkle tree. */
43
+ index: bigint;
44
+ /** The path in the merkle tree to the message. */
45
+ siblingPath: SiblingPath<N>;
46
+ constructor(
47
+ /** The message. */
48
+ message: L1ToL2Message,
49
+ /** The index of the message commitment in the merkle tree. */
50
+ index: bigint,
51
+ /** The path in the merkle tree to the message. */
52
+ siblingPath: SiblingPath<N>);
53
+ toFields(): Fr[];
54
+ }
55
+ /**
56
+ * Oracle with typed parameters and typed return values.
57
+ * Methods that require read and/or write will have to be implemented based on the context (public, private, or view)
58
+ * and are unavailable by default.
59
+ */
60
+ export declare abstract class TypedOracle {
61
+ getRandomField(): Fr;
62
+ packArguments(_args: Fr[]): Promise<Fr>;
63
+ getNullifierKeyPair(_accountAddress: AztecAddress): Promise<KeyPair>;
64
+ getPublicKeyAndPartialAddress(_address: AztecAddress): Promise<Fr[] | undefined>;
65
+ getMembershipWitness(_blockNumber: number, _treeId: MerkleTreeId, _leafValue: Fr): Promise<Fr[] | undefined>;
66
+ getSiblingPath(_blockNumber: number, _treeId: MerkleTreeId, _leafIndex: Fr): Promise<Fr[]>;
67
+ getNullifierMembershipWitness(_blockNumber: number, _nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
68
+ getPublicDataTreeWitness(_blockNumber: number, _leafSlot: Fr): Promise<PublicDataWitness | undefined>;
69
+ getLowNullifierMembershipWitness(_blockNumber: number, _nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
70
+ getHeader(_blockNumber: number): Promise<Header | undefined>;
71
+ getCompleteAddress(_address: AztecAddress): Promise<CompleteAddress>;
72
+ getAuthWitness(_messageHash: Fr): Promise<Fr[] | undefined>;
73
+ popCapsule(): Promise<Fr[]>;
74
+ getNotes(_storageSlot: Fr, _numSelects: number, _selectBy: number[], _selectValues: Fr[], _selectComparators: number[], _sortBy: number[], _sortOrder: number[], _limit: number, _offset: number, _status: NoteStatus): Promise<NoteData[]>;
75
+ notifyCreatedNote(_storageSlot: Fr, _note: Fr[], _innerNoteHash: Fr): void;
76
+ notifyNullifiedNote(_innerNullifier: Fr, _innerNoteHash: Fr): Promise<void>;
77
+ checkNullifierExists(_innerNullifier: Fr): Promise<boolean>;
78
+ getL1ToL2Message(_msgKey: Fr): Promise<MessageLoadOracleInputs<typeof L1_TO_L2_MSG_TREE_HEIGHT>>;
79
+ getPortalContractAddress(_contractAddress: AztecAddress): Promise<EthAddress>;
80
+ storageRead(_startStorageSlot: Fr, _numberOfElements: number): Promise<Fr[]>;
81
+ storageWrite(_startStorageSlot: Fr, _values: Fr[]): Promise<Fr[]>;
82
+ emitEncryptedLog(_contractAddress: AztecAddress, _storageSlot: Fr, _publicKey: PublicKey, _log: Fr[]): void;
83
+ emitUnencryptedLog(_log: UnencryptedL2Log): void;
84
+ callPrivateFunction(_targetContractAddress: AztecAddress, _functionSelector: FunctionSelector, _argsHash: Fr, _sideffectCounter: number): Promise<PrivateCallStackItem>;
85
+ callPublicFunction(_targetContractAddress: AztecAddress, _functionSelector: FunctionSelector, _argsHash: Fr): Promise<Fr[]>;
86
+ enqueuePublicFunctionCall(_targetContractAddress: AztecAddress, _functionSelector: FunctionSelector, _argsHash: Fr, _sideffectCounter: number): Promise<PublicCallRequest>;
87
+ }
88
+ //# sourceMappingURL=typed_oracle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed_oracle.d.ts","sourceRoot":"","sources":["../../../src/acvm/oracle/typed_oracle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ export class MessageLoadOracleInputs {
3
+ constructor(
4
+ /** The message. */
5
+ message,
6
+ /** The index of the message commitment in the merkle tree. */
7
+ index,
8
+ /** The path in the merkle tree to the message. */
9
+ siblingPath) {
10
+ this.message = message;
11
+ this.index = index;
12
+ this.siblingPath = siblingPath;
13
+ }
14
+ toFields() {
15
+ return [...this.message.toFields(), new Fr(this.index), ...this.siblingPath.toFields()];
16
+ }
17
+ }
18
+ /**
19
+ * Oracle with typed parameters and typed return values.
20
+ * Methods that require read and/or write will have to be implemented based on the context (public, private, or view)
21
+ * and are unavailable by default.
22
+ */
23
+ export class TypedOracle {
24
+ getRandomField() {
25
+ return Fr.random();
26
+ }
27
+ packArguments(_args) {
28
+ throw new Error('Not available.');
29
+ }
30
+ getNullifierKeyPair(_accountAddress) {
31
+ throw new Error('Not available.');
32
+ }
33
+ getPublicKeyAndPartialAddress(_address) {
34
+ throw new Error('Not available.');
35
+ }
36
+ getMembershipWitness(_blockNumber, _treeId, _leafValue) {
37
+ throw new Error('Not available.');
38
+ }
39
+ getSiblingPath(_blockNumber, _treeId, _leafIndex) {
40
+ throw new Error('Not available.');
41
+ }
42
+ getNullifierMembershipWitness(_blockNumber, _nullifier) {
43
+ throw new Error('Not available.');
44
+ }
45
+ getPublicDataTreeWitness(_blockNumber, _leafSlot) {
46
+ throw new Error('Not available.');
47
+ }
48
+ getLowNullifierMembershipWitness(_blockNumber, _nullifier) {
49
+ throw new Error('Not available.');
50
+ }
51
+ getHeader(_blockNumber) {
52
+ throw new Error('Not available.');
53
+ }
54
+ getCompleteAddress(_address) {
55
+ throw new Error('Not available.');
56
+ }
57
+ getAuthWitness(_messageHash) {
58
+ throw new Error('Not available.');
59
+ }
60
+ popCapsule() {
61
+ throw new Error('Not available.');
62
+ }
63
+ getNotes(_storageSlot, _numSelects, _selectBy, _selectValues, _selectComparators, _sortBy, _sortOrder, _limit, _offset, _status) {
64
+ throw new Error('Not available.');
65
+ }
66
+ notifyCreatedNote(_storageSlot, _note, _innerNoteHash) {
67
+ throw new Error('Not available.');
68
+ }
69
+ notifyNullifiedNote(_innerNullifier, _innerNoteHash) {
70
+ throw new Error('Not available.');
71
+ }
72
+ checkNullifierExists(_innerNullifier) {
73
+ throw new Error('Not available.');
74
+ }
75
+ getL1ToL2Message(_msgKey) {
76
+ throw new Error('Not available.');
77
+ }
78
+ getPortalContractAddress(_contractAddress) {
79
+ throw new Error('Not available.');
80
+ }
81
+ storageRead(_startStorageSlot, _numberOfElements) {
82
+ throw new Error('Not available.');
83
+ }
84
+ storageWrite(_startStorageSlot, _values) {
85
+ throw new Error('Not available.');
86
+ }
87
+ emitEncryptedLog(_contractAddress, _storageSlot, _publicKey, _log) {
88
+ throw new Error('Not available.');
89
+ }
90
+ emitUnencryptedLog(_log) {
91
+ throw new Error('Not available.');
92
+ }
93
+ callPrivateFunction(_targetContractAddress, _functionSelector, _argsHash, _sideffectCounter) {
94
+ throw new Error('Not available.');
95
+ }
96
+ callPublicFunction(_targetContractAddress, _functionSelector, _argsHash) {
97
+ throw new Error('Not available.');
98
+ }
99
+ enqueuePublicFunctionCall(_targetContractAddress, _functionSelector, _argsHash, _sideffectCounter) {
100
+ throw new Error('Not available.');
101
+ }
102
+ }
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRfb3JhY2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Fjdm0vb3JhY2xlL3R5cGVkX29yYWNsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzQkEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBb0M5QyxNQUFNLE9BQU8sdUJBQXVCO0lBQ2xDO0lBQ0UsbUJBQW1CO0lBQ1osT0FBc0I7SUFDN0IsOERBQThEO0lBQ3ZELEtBQWE7SUFDcEIsa0RBQWtEO0lBQzNDLFdBQTJCO1FBSjNCLFlBQU8sR0FBUCxPQUFPLENBQWU7UUFFdEIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUViLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtJQUNqQyxDQUFDO0lBRUosUUFBUTtRQUNOLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzFGLENBQUM7Q0FDRjtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQWdCLFdBQVc7SUFDL0IsY0FBYztRQUNaLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBVztRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELG1CQUFtQixDQUFDLGVBQTZCO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsNkJBQTZCLENBQUMsUUFBc0I7UUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxZQUFvQixFQUFFLE9BQXFCLEVBQUUsVUFBYztRQUM5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
@@ -0,0 +1,30 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { PublicCallRequest } from '@aztec/circuits.js';
3
+ import { AztecAddress } from '@aztec/foundation/aztec-address';
4
+ import { EthAddress } from '@aztec/foundation/eth-address';
5
+ import { Fr } from '@aztec/foundation/fields';
6
+ import { ACVMField } from './acvm_types.js';
7
+ /**
8
+ * Converts a value to an ACVM field.
9
+ * @param value - The value to convert.
10
+ * @returns The ACVM field.
11
+ */
12
+ export declare function toACVMField(value: AztecAddress | EthAddress | Fr | Buffer | boolean | number | bigint | ACVMField): ACVMField;
13
+ /**
14
+ * Converts a public call stack item with the request for executing a public function to
15
+ * a set of ACVM fields accepted by the enqueue_public_function_call_oracle Aztec.nr function.
16
+ * Note that only the fields related to the request are serialized: those related to the result
17
+ * are empty since this is just an execution request, so we don't send them to the circuit.
18
+ * @param item - The public call stack item to serialize to be passed onto Noir.
19
+ * @returns The fields expected by the enqueue_public_function_call_oracle Aztec.nr function.
20
+ * TODO(#4380): Nuke this and replace it with PublicCallRequest.toFields()
21
+ */
22
+ export declare function toAcvmEnqueuePublicFunctionResult(item: PublicCallRequest): ACVMField[];
23
+ /**
24
+ * Inserts a list of ACVM fields to a witness.
25
+ * @param witnessStartIndex - The index where to start inserting the fields.
26
+ * @param fields - The fields to insert.
27
+ * @returns The witness.
28
+ */
29
+ export declare function toACVMWitness(witnessStartIndex: number, fields: Parameters<typeof toACVMField>[0][]): Map<number, string>;
30
+ //# sourceMappingURL=serialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/acvm/serialize.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAgB5C;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,YAAY,GAAG,UAAU,GAAG,EAAE,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GACrF,SAAS,CAYX;AAKD;;;;;;;;GAQG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,iBAAiB,GAAG,SAAS,EAAE,CAOtF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,uBAKnG"}
@@ -0,0 +1,67 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ /**
3
+ * Adapts the buffer to the field size.
4
+ * @param originalBuf - The buffer to adapt.
5
+ * @returns The adapted buffer.
6
+ */
7
+ function adaptBufferSize(originalBuf) {
8
+ const buffer = Buffer.alloc(Fr.SIZE_IN_BYTES);
9
+ if (originalBuf.length > buffer.length) {
10
+ throw new Error('Buffer does not fit in field');
11
+ }
12
+ originalBuf.copy(buffer, buffer.length - originalBuf.length);
13
+ return buffer;
14
+ }
15
+ /**
16
+ * Converts a value to an ACVM field.
17
+ * @param value - The value to convert.
18
+ * @returns The ACVM field.
19
+ */
20
+ export function toACVMField(value) {
21
+ let buffer;
22
+ if (Buffer.isBuffer(value)) {
23
+ buffer = value;
24
+ }
25
+ else if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'bigint') {
26
+ buffer = new Fr(value).toBuffer();
27
+ }
28
+ else if (typeof value === 'string') {
29
+ buffer = Fr.fromString(value).toBuffer();
30
+ }
31
+ else {
32
+ buffer = value.toBuffer();
33
+ }
34
+ return `0x${adaptBufferSize(buffer).toString('hex')}`;
35
+ }
36
+ // Utilities to write TS classes to ACVM Field arrays
37
+ // In the order that the ACVM expects them
38
+ /**
39
+ * Converts a public call stack item with the request for executing a public function to
40
+ * a set of ACVM fields accepted by the enqueue_public_function_call_oracle Aztec.nr function.
41
+ * Note that only the fields related to the request are serialized: those related to the result
42
+ * are empty since this is just an execution request, so we don't send them to the circuit.
43
+ * @param item - The public call stack item to serialize to be passed onto Noir.
44
+ * @returns The fields expected by the enqueue_public_function_call_oracle Aztec.nr function.
45
+ * TODO(#4380): Nuke this and replace it with PublicCallRequest.toFields()
46
+ */
47
+ export function toAcvmEnqueuePublicFunctionResult(item) {
48
+ return [
49
+ item.contractAddress.toField(),
50
+ ...item.functionData.toFields(),
51
+ ...item.callContext.toFields(),
52
+ item.getArgsHash(),
53
+ ].map(toACVMField);
54
+ }
55
+ /**
56
+ * Inserts a list of ACVM fields to a witness.
57
+ * @param witnessStartIndex - The index where to start inserting the fields.
58
+ * @param fields - The fields to insert.
59
+ * @returns The witness.
60
+ */
61
+ export function toACVMWitness(witnessStartIndex, fields) {
62
+ return fields.reduce((witness, field, index) => {
63
+ witness.set(index + witnessStartIndex, toACVMField(field));
64
+ return witness;
65
+ }, new Map());
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Fjdm0vc2VyaWFsaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUk5Qzs7OztHQUlHO0FBQ0gsU0FBUyxlQUFlLENBQUMsV0FBbUI7SUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUMsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsS0FBc0Y7SUFFdEYsSUFBSSxNQUFNLENBQUM7SUFDWCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMzQixNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLENBQUM7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEcsTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BDLENBQUM7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNDLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQ0QsT0FBTyxLQUFLLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN4RCxDQUFDO0FBRUQscURBQXFEO0FBQ3JELDBDQUEwQztBQUUxQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxpQ0FBaUMsQ0FBQyxJQUF1QjtJQUN2RSxPQUFPO1FBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUU7UUFDOUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRTtRQUMvQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1FBQzlCLElBQUksQ0FBQyxXQUFXLEVBQUU7S0FDbkIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxpQkFBeUIsRUFBRSxNQUEyQztJQUNsRyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBcUIsQ0FBQyxDQUFDO0FBQ25DLENBQUMifQ==
@@ -0,0 +1,49 @@
1
+ import { AztecAddress } from '@aztec/circuits.js';
2
+ import { Fr } from '@aztec/foundation/fields';
3
+ import { AvmExecutionEnvironment } from './avm_execution_environment.js';
4
+ import { AvmMachineState } from './avm_machine_state.js';
5
+ import { AvmWorldStateJournal } from './journal/journal.js';
6
+ /**
7
+ * An execution context includes the information necessary to initiate AVM
8
+ * execution along with all state maintained by the AVM throughout execution.
9
+ */
10
+ export declare class AvmContext {
11
+ worldState: AvmWorldStateJournal;
12
+ environment: AvmExecutionEnvironment;
13
+ machineState: AvmMachineState;
14
+ /**
15
+ * Create a new AVM context
16
+ * @param worldState - Manages mutable state during execution - (caching, fetching)
17
+ * @param environment - Contains constant variables provided by the kernel
18
+ * @param machineState - VM state that is modified on an instruction-by-instruction basis
19
+ * @returns new AvmContext instance
20
+ */
21
+ constructor(worldState: AvmWorldStateJournal, environment: AvmExecutionEnvironment, machineState: AvmMachineState);
22
+ /**
23
+ * Prepare a new AVM context that will be ready for an external/nested call
24
+ * - Fork the world state journal
25
+ * - Derive a machine state from the current state
26
+ * - E.g., gas metering is preserved but pc is reset
27
+ * - Derive an execution environment from the caller/parent
28
+ * - Alter both address and storageAddress
29
+ *
30
+ * @param address - The contract instance to initialize a context for
31
+ * @param calldata - Data/arguments for nested call
32
+ * @returns new AvmContext instance
33
+ */
34
+ createNestedContractCallContext(address: AztecAddress, calldata: Fr[]): AvmContext;
35
+ /**
36
+ * Prepare a new AVM context that will be ready for an external/nested static call
37
+ * - Fork the world state journal
38
+ * - Derive a machine state from the current state
39
+ * - E.g., gas metering is preserved but pc is reset
40
+ * - Derive an execution environment from the caller/parent
41
+ * - Alter both address and storageAddress
42
+ *
43
+ * @param address - The contract instance to initialize a context for
44
+ * @param calldata - Data/arguments for nested call
45
+ * @returns new AvmContext instance
46
+ */
47
+ createNestedContractStaticCallContext(address: AztecAddress, calldata: Fr[]): AvmContext;
48
+ }
49
+ //# sourceMappingURL=avm_context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avm_context.d.ts","sourceRoot":"","sources":["../../src/avm/avm_context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;GAGG;AACH,qBAAa,UAAU;IASZ,UAAU,EAAE,oBAAoB;IAChC,WAAW,EAAE,uBAAuB;IACpC,YAAY,EAAE,eAAe;IAVtC;;;;;;OAMG;gBAEM,UAAU,EAAE,oBAAoB,EAChC,WAAW,EAAE,uBAAuB,EACpC,YAAY,EAAE,eAAe;IAGtC;;;;;;;;;;;OAWG;IACI,+BAA+B,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,UAAU;IAOzF;;;;;;;;;;;OAWG;IACI,qCAAqC,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,UAAU;CAMhG"}
@@ -0,0 +1,56 @@
1
+ import { AvmMachineState } from './avm_machine_state.js';
2
+ /**
3
+ * An execution context includes the information necessary to initiate AVM
4
+ * execution along with all state maintained by the AVM throughout execution.
5
+ */
6
+ export class AvmContext {
7
+ /**
8
+ * Create a new AVM context
9
+ * @param worldState - Manages mutable state during execution - (caching, fetching)
10
+ * @param environment - Contains constant variables provided by the kernel
11
+ * @param machineState - VM state that is modified on an instruction-by-instruction basis
12
+ * @returns new AvmContext instance
13
+ */
14
+ constructor(worldState, environment, machineState) {
15
+ this.worldState = worldState;
16
+ this.environment = environment;
17
+ this.machineState = machineState;
18
+ }
19
+ /**
20
+ * Prepare a new AVM context that will be ready for an external/nested call
21
+ * - Fork the world state journal
22
+ * - Derive a machine state from the current state
23
+ * - E.g., gas metering is preserved but pc is reset
24
+ * - Derive an execution environment from the caller/parent
25
+ * - Alter both address and storageAddress
26
+ *
27
+ * @param address - The contract instance to initialize a context for
28
+ * @param calldata - Data/arguments for nested call
29
+ * @returns new AvmContext instance
30
+ */
31
+ createNestedContractCallContext(address, calldata) {
32
+ const newExecutionEnvironment = this.environment.deriveEnvironmentForNestedCall(address, calldata);
33
+ const forkedWorldState = this.worldState.fork();
34
+ const machineState = AvmMachineState.fromState(this.machineState);
35
+ return new AvmContext(forkedWorldState, newExecutionEnvironment, machineState);
36
+ }
37
+ /**
38
+ * Prepare a new AVM context that will be ready for an external/nested static call
39
+ * - Fork the world state journal
40
+ * - Derive a machine state from the current state
41
+ * - E.g., gas metering is preserved but pc is reset
42
+ * - Derive an execution environment from the caller/parent
43
+ * - Alter both address and storageAddress
44
+ *
45
+ * @param address - The contract instance to initialize a context for
46
+ * @param calldata - Data/arguments for nested call
47
+ * @returns new AvmContext instance
48
+ */
49
+ createNestedContractStaticCallContext(address, calldata) {
50
+ const newExecutionEnvironment = this.environment.deriveEnvironmentForNestedStaticCall(address, calldata);
51
+ const forkedWorldState = this.worldState.fork();
52
+ const machineState = AvmMachineState.fromState(this.machineState);
53
+ return new AvmContext(forkedWorldState, newExecutionEnvironment, machineState);
54
+ }
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX2NvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZtL2F2bV9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd6RDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUNyQjs7Ozs7O09BTUc7SUFDSCxZQUNTLFVBQWdDLEVBQ2hDLFdBQW9DLEVBQ3BDLFlBQTZCO1FBRjdCLGVBQVUsR0FBVixVQUFVLENBQXNCO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUF5QjtRQUNwQyxpQkFBWSxHQUFaLFlBQVksQ0FBaUI7SUFDbkMsQ0FBQztJQUVKOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksK0JBQStCLENBQUMsT0FBcUIsRUFBRSxRQUFjO1FBQzFFLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkcsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0kscUNBQXFDLENBQUMsT0FBcUIsRUFBRSxRQUFjO1FBQ2hGLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQ0FBb0MsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekcsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDakYsQ0FBQztDQUNGIn0=