@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,21 @@
1
+ /**
2
+ * Results of an contract call's execution in the AVM.
3
+ */
4
+ export class AvmContractCallResults {
5
+ constructor(reverted, output, revertReason) {
6
+ this.reverted = reverted;
7
+ this.output = output;
8
+ this.revertReason = revertReason;
9
+ }
10
+ /**
11
+ * Generate a string representation of call results.
12
+ */
13
+ toString() {
14
+ let resultsStr = `reverted: ${this.reverted}, output: ${this.output}`;
15
+ if (this.revertReason) {
16
+ resultsStr += `, revertReason: ${this.revertReason}`;
17
+ }
18
+ return resultsStr;
19
+ }
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX21lc3NhZ2VfY2FsbF9yZXN1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXZtL2F2bV9tZXNzYWdlX2NhbGxfcmVzdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQU9qQyxZQUFZLFFBQWlCLEVBQUUsTUFBWSxFQUFFLFlBQW9CO1FBQy9ELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVE7UUFDTixJQUFJLFVBQVUsR0FBRyxhQUFhLElBQUksQ0FBQyxRQUFRLGFBQWEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3RFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLFVBQVUsSUFBSSxtQkFBbUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZELENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,22 @@
1
+ import type { AvmContext } from './avm_context.js';
2
+ import { AvmContractCallResults } from './avm_message_call_result.js';
3
+ import type { Instruction } from './opcodes/index.js';
4
+ export declare class AvmSimulator {
5
+ private context;
6
+ private log;
7
+ constructor(context: AvmContext);
8
+ /**
9
+ * Fetch the bytecode and execute it in the current context.
10
+ */
11
+ execute(): Promise<AvmContractCallResults>;
12
+ /**
13
+ * Executes the provided instructions in the current context.
14
+ * This method is useful for testing and debugging.
15
+ */
16
+ executeInstructions(instructions: Instruction[]): Promise<AvmContractCallResults>;
17
+ /**
18
+ * Fetch contract bytecode from world state and decode into executable instructions.
19
+ */
20
+ private fetchAndDecodeBytecode;
21
+ }
22
+ //# sourceMappingURL=avm_simulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avm_simulator.d.ts","sourceRoot":"","sources":["../../src/avm/avm_simulator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,qBAAa,YAAY;IAGX,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,GAAG,CAAyD;gBAEhD,OAAO,EAAE,UAAU;IAEvC;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAKvD;;;OAGG;IACU,mBAAmB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAyC9F;;OAEG;YACW,sBAAsB;CAgBrC"}
@@ -0,0 +1,74 @@
1
+ import { FunctionSelector } from '@aztec/circuits.js';
2
+ import { createDebugLogger } from '@aztec/foundation/log';
3
+ import { strict as assert } from 'assert';
4
+ import { AvmContractCallResults } from './avm_message_call_result.js';
5
+ import { AvmExecutionError, InvalidProgramCounterError, NoBytecodeForContractError } from './errors.js';
6
+ import { decodeFromBytecode } from './serialization/bytecode_serialization.js';
7
+ export class AvmSimulator {
8
+ constructor(context) {
9
+ this.context = context;
10
+ this.log = createDebugLogger('aztec:avm_simulator');
11
+ }
12
+ /**
13
+ * Fetch the bytecode and execute it in the current context.
14
+ */
15
+ async execute() {
16
+ const instructions = await this.fetchAndDecodeBytecode();
17
+ return this.executeInstructions(instructions);
18
+ }
19
+ /**
20
+ * Executes the provided instructions in the current context.
21
+ * This method is useful for testing and debugging.
22
+ */
23
+ async executeInstructions(instructions) {
24
+ assert(instructions.length > 0);
25
+ try {
26
+ // Execute instruction pointed to by the current program counter
27
+ // continuing until the machine state signifies a halt
28
+ while (!this.context.machineState.halted) {
29
+ const instruction = instructions[this.context.machineState.pc];
30
+ assert(!!instruction); // This should never happen
31
+ this.log(`Executing PC=${this.context.machineState.pc}: ${instruction.toString()}`);
32
+ // Execute the instruction.
33
+ // Normal returns and reverts will return normally here.
34
+ // "Exceptional halts" will throw.
35
+ await instruction.execute(this.context);
36
+ if (this.context.machineState.pc >= instructions.length) {
37
+ this.log('Passed end of program!');
38
+ throw new InvalidProgramCounterError(this.context.machineState.pc, /*max=*/ instructions.length);
39
+ }
40
+ }
41
+ // Return results for processing by calling context
42
+ const results = this.context.machineState.getResults();
43
+ this.log(`Context execution results: ${results.toString()}`);
44
+ return results;
45
+ }
46
+ catch (e) {
47
+ this.log('Exceptional halt');
48
+ if (!(e instanceof AvmExecutionError)) {
49
+ this.log(`Unknown error thrown by avm: ${e}`);
50
+ throw e;
51
+ }
52
+ // Return results for processing by calling context
53
+ // Note: "exceptional halts" cannot return data
54
+ const results = new AvmContractCallResults(/*reverted=*/ true, /*output=*/ [], /*revertReason=*/ e);
55
+ this.log(`Context execution results: ${results.toString()}`);
56
+ return results;
57
+ }
58
+ }
59
+ /**
60
+ * Fetch contract bytecode from world state and decode into executable instructions.
61
+ */
62
+ async fetchAndDecodeBytecode() {
63
+ // NOTE: the following is mocked as getPublicBytecode does not exist yet
64
+ const selector = new FunctionSelector(0);
65
+ const bytecode = await this.context.worldState.hostStorage.contractsDb.getBytecode(this.context.environment.address, selector);
66
+ // This assumes that we will not be able to send messages to accounts without code
67
+ // Pending classes and instances impl details
68
+ if (!bytecode) {
69
+ throw new NoBytecodeForContractError(this.context.environment.address);
70
+ }
71
+ return decodeFromBytecode(bytecode);
72
+ }
73
+ }
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX3NpbXVsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdm0vYXZtX3NpbXVsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQWUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsTUFBTSxJQUFJLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUcxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFL0UsTUFBTSxPQUFPLFlBQVk7SUFHdkIsWUFBb0IsT0FBbUI7UUFBbkIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUYvQixRQUFHLEdBQWdCLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFMUIsQ0FBQztJQUUzQzs7T0FFRztJQUNJLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxZQUEyQjtRQUMxRCxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUM7WUFDSCxnRUFBZ0U7WUFDaEUsc0RBQXNEO1lBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxXQUFX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
@@ -0,0 +1,30 @@
1
+ import { AztecAddress } from '@aztec/circuits.js';
2
+ /**
3
+ * Avm-specific errors should derive from this
4
+ */
5
+ export declare abstract class AvmExecutionError extends Error {
6
+ constructor(message: string, ...rest: any[]);
7
+ }
8
+ export declare class NoBytecodeForContractError extends AvmExecutionError {
9
+ constructor(contractAddress: AztecAddress);
10
+ }
11
+ /**
12
+ * Error is thrown when the program counter goes to an invalid location.
13
+ * There is no instruction at the provided pc
14
+ */
15
+ export declare class InvalidProgramCounterError extends AvmExecutionError {
16
+ constructor(pc: number, max: number);
17
+ }
18
+ /**
19
+ * Error thrown during an instruction's execution (during its execute()).
20
+ */
21
+ export declare class InstructionExecutionError extends AvmExecutionError {
22
+ constructor(message: string);
23
+ }
24
+ /**
25
+ * Error thrown on failed AVM memory tag check.
26
+ */
27
+ export declare class TagCheckError extends AvmExecutionError {
28
+ constructor(offset: number, gotTag: string, expectedTag: string);
29
+ }
30
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/avm/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,8BAAsB,iBAAkB,SAAQ,KAAK;gBACvC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;CAI5C;AAED,qBAAa,0BAA2B,SAAQ,iBAAiB;gBACnD,eAAe,EAAE,YAAY;CAI1C;AAED;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,iBAAiB;gBACnD,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAIpC;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,iBAAiB;gBAClD,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,iBAAiB;gBACtC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAIhE"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Avm-specific errors should derive from this
3
+ */
4
+ export class AvmExecutionError extends Error {
5
+ constructor(message, ...rest) {
6
+ super(message, ...rest);
7
+ this.name = 'AvmInterpreterError';
8
+ }
9
+ }
10
+ export class NoBytecodeForContractError extends AvmExecutionError {
11
+ constructor(contractAddress) {
12
+ super(`No bytecode found at: ${contractAddress}`);
13
+ this.name = 'NoBytecodeFoundInterpreterError';
14
+ }
15
+ }
16
+ /**
17
+ * Error is thrown when the program counter goes to an invalid location.
18
+ * There is no instruction at the provided pc
19
+ */
20
+ export class InvalidProgramCounterError extends AvmExecutionError {
21
+ constructor(pc, max) {
22
+ super(`Invalid program counter ${pc}, max is ${max}`);
23
+ this.name = 'InvalidProgramCounterError';
24
+ }
25
+ }
26
+ /**
27
+ * Error thrown during an instruction's execution (during its execute()).
28
+ */
29
+ export class InstructionExecutionError extends AvmExecutionError {
30
+ constructor(message) {
31
+ super(message);
32
+ this.name = 'InstructionExecutionError';
33
+ }
34
+ }
35
+ /**
36
+ * Error thrown on failed AVM memory tag check.
37
+ */
38
+ export class TagCheckError extends AvmExecutionError {
39
+ constructor(offset, gotTag, expectedTag) {
40
+ super(`Memory offset ${offset} has tag ${gotTag}, expected ${expectedTag}`);
41
+ this.name = 'TagCheckError';
42
+ }
43
+ }
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F2bS9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLGlCQUFrQixTQUFRLEtBQUs7SUFDbkQsWUFBWSxPQUFlLEVBQUUsR0FBRyxJQUFXO1FBQ3pDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTywwQkFBMkIsU0FBUSxpQkFBaUI7SUFDL0QsWUFBWSxlQUE2QjtRQUN2QyxLQUFLLENBQUMseUJBQXlCLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksR0FBRyxpQ0FBaUMsQ0FBQztJQUNoRCxDQUFDO0NBQ0Y7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsaUJBQWlCO0lBQy9ELFlBQVksRUFBVSxFQUFFLEdBQVc7UUFDakMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsSUFBSSxHQUFHLDRCQUE0QixDQUFDO0lBQzNDLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGlCQUFpQjtJQUM5RCxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztJQUMxQyxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFjLFNBQVEsaUJBQWlCO0lBQ2xELFlBQVksTUFBYyxFQUFFLE1BQWMsRUFBRSxXQUFtQjtRQUM3RCxLQUFLLENBQUMsaUJBQWlCLE1BQU0sWUFBWSxNQUFNLGNBQWMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztJQUM5QixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,28 @@
1
+ import { GlobalVariables } from '@aztec/circuits.js';
2
+ import { AvmContext } from '../avm_context.js';
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
+ * Create a new AVM context with default values.
8
+ */
9
+ export declare function initContext(overrides?: {
10
+ worldState?: AvmWorldStateJournal;
11
+ env?: AvmExecutionEnvironment;
12
+ machineState?: AvmMachineState;
13
+ }): AvmContext;
14
+ /** Creates an empty world state with mocked storage. */
15
+ export declare function initMockWorldStateJournal(): AvmWorldStateJournal;
16
+ /**
17
+ * Create an empty instance of the Execution Environment where all values are zero, unless overridden in the overrides object
18
+ */
19
+ export declare function initExecutionEnvironment(overrides?: Partial<AvmExecutionEnvironment>): AvmExecutionEnvironment;
20
+ /**
21
+ * Create an empty instance of the Execution Environment where all values are zero, unless overridden in the overrides object
22
+ */
23
+ export declare function initGlobalVariables(overrides?: Partial<GlobalVariables>): GlobalVariables;
24
+ /**
25
+ * Create an empty instance of the Machine State where all values are zero, unless overridden in the overrides object
26
+ */
27
+ export declare function initMachineState(overrides?: Partial<AvmMachineState>): AvmMachineState;
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/avm/fixtures/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAQrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,CAAC,EAAE;IACtC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,GAAG,CAAC,EAAE,uBAAuB,CAAC;IAC9B,YAAY,CAAC,EAAE,eAAe,CAAC;CAChC,GAAG,UAAU,CAMb;AAED,wDAAwD;AACxD,wBAAgB,yBAAyB,IAAI,oBAAoB,CAGhE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,uBAAuB,CAgB9G;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAOzF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAMtF"}
@@ -0,0 +1,44 @@
1
+ import { GlobalVariables } from '@aztec/circuits.js';
2
+ import { AztecAddress } from '@aztec/foundation/aztec-address';
3
+ import { EthAddress } from '@aztec/foundation/eth-address';
4
+ import { Fr } from '@aztec/foundation/fields';
5
+ import { mock } from 'jest-mock-extended';
6
+ import { AvmContext } from '../avm_context.js';
7
+ import { AvmExecutionEnvironment } from '../avm_execution_environment.js';
8
+ import { AvmMachineState } from '../avm_machine_state.js';
9
+ import { HostStorage } from '../journal/host_storage.js';
10
+ import { AvmWorldStateJournal } from '../journal/journal.js';
11
+ /**
12
+ * Create a new AVM context with default values.
13
+ */
14
+ export function initContext(overrides) {
15
+ return new AvmContext(overrides?.worldState || initMockWorldStateJournal(), overrides?.env || initExecutionEnvironment(), overrides?.machineState || initMachineState());
16
+ }
17
+ /** Creates an empty world state with mocked storage. */
18
+ export function initMockWorldStateJournal() {
19
+ const hostStorage = new HostStorage(mock(), mock(), mock());
20
+ return new AvmWorldStateJournal(hostStorage);
21
+ }
22
+ /**
23
+ * Create an empty instance of the Execution Environment where all values are zero, unless overridden in the overrides object
24
+ */
25
+ export function initExecutionEnvironment(overrides) {
26
+ return new AvmExecutionEnvironment(overrides?.address ?? AztecAddress.zero(), overrides?.storageAddress ?? AztecAddress.zero(), overrides?.origin ?? AztecAddress.zero(), overrides?.sender ?? AztecAddress.zero(), overrides?.portal ?? EthAddress.ZERO, overrides?.feePerL1Gas ?? Fr.zero(), overrides?.feePerL2Gas ?? Fr.zero(), overrides?.feePerDaGas ?? Fr.zero(), overrides?.contractCallDepth ?? Fr.zero(), overrides?.globals ?? GlobalVariables.empty(), overrides?.isStaticCall ?? false, overrides?.isDelegateCall ?? false, overrides?.calldata ?? []);
27
+ }
28
+ /**
29
+ * Create an empty instance of the Execution Environment where all values are zero, unless overridden in the overrides object
30
+ */
31
+ export function initGlobalVariables(overrides) {
32
+ return new GlobalVariables(overrides?.chainId ?? Fr.zero(), overrides?.version ?? Fr.zero(), overrides?.blockNumber ?? Fr.zero(), overrides?.timestamp ?? Fr.zero());
33
+ }
34
+ /**
35
+ * Create an empty instance of the Machine State where all values are zero, unless overridden in the overrides object
36
+ */
37
+ export function initMachineState(overrides) {
38
+ return AvmMachineState.fromState({
39
+ l1GasLeft: overrides?.l1GasLeft ?? 0,
40
+ l2GasLeft: overrides?.l2GasLeft ?? 0,
41
+ daGasLeft: overrides?.daGasLeft ?? 0,
42
+ });
43
+ }
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXZtL2ZpeHR1cmVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0Q7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLFNBSTNCO0lBQ0MsT0FBTyxJQUFJLFVBQVUsQ0FDbkIsU0FBUyxFQUFFLFVBQVUsSUFBSSx5QkFBeUIsRUFBRSxFQUNwRCxTQUFTLEVBQUUsR0FBRyxJQUFJLHdCQUF3QixFQUFFLEVBQzVDLFNBQVMsRUFBRSxZQUFZLElBQUksZ0JBQWdCLEVBQUUsQ0FDOUMsQ0FBQztBQUNKLENBQUM7QUFFRCx3REFBd0Q7QUFDeEQsTUFBTSxVQUFVLHlCQUF5QjtJQUN2QyxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQWlCLEVBQUUsSUFBSSxFQUFxQixFQUFFLElBQUksRUFBaUIsQ0FBQyxDQUFDO0lBQzdHLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsU0FBNEM7SUFDbkYsT0FBTyxJQUFJLHVCQUF1QixDQUNoQyxTQUFTLEVBQUUsT0FBTyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFDekMsU0FBUyxFQUFFLGNBQWMsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQ2hELFNBQVMsRUFBRSxNQUFNLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxFQUN4QyxTQUFTLEVBQUUsTUFBTSxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFDeEMsU0FBUyxFQUFFLE1BQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxFQUNwQyxTQUFTLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFDbkMsU0FBUyxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQ25DLFNBQVMsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUNuQyxTQUFTLEVBQUUsaUJBQWlCLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUN6QyxTQUFTLEVBQUUsT0FBTyxJQUFJLGVBQWUsQ0FBQyxLQUFLLEVBQUUsRUFDN0MsU0FBUyxFQUFFLFlBQVksSUFBSSxLQUFLLEVBQ2hDLFNBQVMsRUFBRSxjQUFjLElBQUksS0FBSyxFQUNsQyxTQUFTLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FDMUIsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxTQUFvQztJQUN0RSxPQUFPLElBQUksZUFBZSxDQUN4QixTQUFTLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFDL0IsU0FBUyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQy9CLFNBQVMsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUNuQyxTQUFTLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FDbEMsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxTQUFvQztJQUNuRSxPQUFPLGVBQWUsQ0FBQyxTQUFTLENBQUM7UUFDL0IsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLElBQUksQ0FBQztRQUNwQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsSUFBSSxDQUFDO1FBQ3BDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxJQUFJLENBQUM7S0FDckMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9
@@ -0,0 +1,13 @@
1
+ import { CommitmentsDB, PublicContractsDB, PublicStateDB } from '../../index.js';
2
+ /**
3
+ * Host storage
4
+ *
5
+ * A wrapper around the node dbs
6
+ */
7
+ export declare class HostStorage {
8
+ readonly publicStateDb: PublicStateDB;
9
+ readonly contractsDb: PublicContractsDB;
10
+ readonly commitmentsDb: CommitmentsDB;
11
+ constructor(publicStateDb: PublicStateDB, contractsDb: PublicContractsDB, commitmentsDb: CommitmentsDB);
12
+ }
13
+ //# sourceMappingURL=host_storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host_storage.d.ts","sourceRoot":"","sources":["../../../src/avm/journal/host_storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEjF;;;;GAIG;AACH,qBAAa,WAAW;IACtB,SAAgB,aAAa,EAAE,aAAa,CAAC;IAE7C,SAAgB,WAAW,EAAE,iBAAiB,CAAC;IAE/C,SAAgB,aAAa,EAAE,aAAa,CAAC;gBAEjC,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa;CAKvG"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Host storage
3
+ *
4
+ * A wrapper around the node dbs
5
+ */
6
+ export class HostStorage {
7
+ constructor(publicStateDb, contractsDb, commitmentsDb) {
8
+ this.publicStateDb = publicStateDb;
9
+ this.contractsDb = contractsDb;
10
+ this.commitmentsDb = commitmentsDb;
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdF9zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F2bS9qb3VybmFsL2hvc3Rfc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFPdEIsWUFBWSxhQUE0QixFQUFFLFdBQThCLEVBQUUsYUFBNEI7UUFDcEcsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDckMsQ0FBQztDQUNGIn0=
@@ -0,0 +1,3 @@
1
+ export * from './host_storage.js';
2
+ export * from './journal.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/avm/journal/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './host_storage.js';
2
+ export * from './journal.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXZtL2pvdXJuYWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGNBQWMsQ0FBQyJ9
@@ -0,0 +1,95 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ import { HostStorage } from './host_storage.js';
3
+ /**
4
+ * Data held within the journal
5
+ */
6
+ export type JournalData = {
7
+ newNoteHashes: Fr[];
8
+ newNullifiers: Fr[];
9
+ newL1Messages: Fr[][];
10
+ newLogs: Fr[][];
11
+ /** contract address -\> key -\> value */
12
+ currentStorageValue: Map<bigint, Map<bigint, Fr>>;
13
+ /** contract address -\> key -\> value[] (stored in order of access) */
14
+ storageWrites: Map<bigint, Map<bigint, Fr[]>>;
15
+ /** contract address -\> key -\> value[] (stored in order of access) */
16
+ storageReads: Map<bigint, Map<bigint, Fr[]>>;
17
+ };
18
+ /**
19
+ * A cache of the current state of the AVM
20
+ * The interpreter should make any state queries through this object
21
+ *
22
+ * When a nested context succeeds, it's journal is merge into the parent
23
+ * When a call fails, it's journal is discarded and the parent is used from this point forward
24
+ * When a call succeeds's we can merge a child into its parent
25
+ */
26
+ export declare class AvmWorldStateJournal {
27
+ /** Reference to node storage */
28
+ readonly hostStorage: HostStorage;
29
+ private storageReads;
30
+ private storageWrites;
31
+ private newNoteHashes;
32
+ private newNullifiers;
33
+ private newL1Messages;
34
+ private newLogs;
35
+ private currentStorageValue;
36
+ private parentJournal;
37
+ constructor(hostStorage: HostStorage, parentJournal?: AvmWorldStateJournal);
38
+ /**
39
+ * Create a new world state journal forked from this one
40
+ */
41
+ fork(): AvmWorldStateJournal;
42
+ /**
43
+ * Write storage into journal
44
+ *
45
+ * @param contractAddress -
46
+ * @param key -
47
+ * @param value -
48
+ */
49
+ writeStorage(contractAddress: Fr, key: Fr, value: Fr): void;
50
+ /**
51
+ * Read storage from journal
52
+ * Read from host storage on cache miss
53
+ *
54
+ * @param contractAddress -
55
+ * @param key -
56
+ * @returns current value
57
+ */
58
+ readStorage(contractAddress: Fr, key: Fr): Promise<Fr>;
59
+ /**
60
+ * We want to keep track of all performed reads in the journal
61
+ * This information is hinted to the avm circuit
62
+
63
+ * @param contractAddress -
64
+ * @param key -
65
+ * @param value -
66
+ */
67
+ journalUpdate(map: Map<bigint, Map<bigint, Fr[]>>, contractAddress: Fr, key: Fr, value: Fr): void;
68
+ private journalRead;
69
+ private journalWrite;
70
+ writeNoteHash(noteHash: Fr): void;
71
+ writeL1Message(message: Fr[]): void;
72
+ writeNullifier(nullifier: Fr): void;
73
+ writeLog(log: Fr[]): void;
74
+ /**
75
+ * Accept nested world state, merging in its journal, and accepting its state modifications
76
+ * - Utxo objects are concatenated
77
+ * - Public state changes are merged, with the value in the incoming journal taking precedent
78
+ * - Public state journals (r/w logs), with the accessing being appended in chronological order
79
+ */
80
+ acceptNestedWorldState(nestedJournal: AvmWorldStateJournal): void;
81
+ /**
82
+ * Reject nested world state, merging in its journal, but not accepting its state modifications
83
+ * - Utxo objects are concatenated
84
+ * - Public state changes are dropped
85
+ * - Public state journals (r/w logs) are maintained, with the accessing being appended in chronological order
86
+ */
87
+ rejectNestedWorldState(nestedJournal: AvmWorldStateJournal): void;
88
+ /**
89
+ * Access the current state of the journal
90
+ *
91
+ * @returns a JournalData object
92
+ */
93
+ flush(): JournalData;
94
+ }
95
+ //# sourceMappingURL=journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../../src/avm/journal/journal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,aAAa,EAAE,EAAE,EAAE,CAAC;IACpB,aAAa,EAAE,EAAE,EAAE,CAAC;IACpB,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC;IACtB,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;IAEhB,yCAAyC;IACzC,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IAElD,uEAAuE;IACvE,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9C,uEAAuE;IACvE,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;CAC9C,CAAC;AAEF;;;;;;;GAOG;AACH,qBAAa,oBAAoB;IAC/B,gCAAgC;IAChC,SAAgB,WAAW,EAAE,WAAW,CAAC;IAIzC,OAAO,CAAC,YAAY,CAA6C;IACjE,OAAO,CAAC,aAAa,CAA6C;IAGlE,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,aAAa,CAAY;IAGjC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,OAAO,CAAc;IAG7B,OAAO,CAAC,mBAAmB,CAA2C;IAEtE,OAAO,CAAC,aAAa,CAAmC;gBAE5C,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,oBAAoB;IAK1E;;OAEG;IACI,IAAI;IAIX;;;;;;OAMG;IACI,YAAY,CAAC,eAAe,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;IAY3D;;;;;;;OAOG;IACU,WAAW,CAAC,eAAe,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IAkBnE;;;;;;;OAOG;IACH,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI;IAgBjG,OAAO,CAAC,WAAW,CAAoD;IAEvE,OAAO,CAAC,YAAY,CAAqD;IAElE,aAAa,CAAC,QAAQ,EAAE,EAAE;IAI1B,cAAc,CAAC,OAAO,EAAE,EAAE,EAAE;IAI5B,cAAc,CAAC,SAAS,EAAE,EAAE;IAI5B,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE;IAIzB;;;;;OAKG;IACI,sBAAsB,CAAC,aAAa,EAAE,oBAAoB;IAejE;;;;;OAKG;IACI,sBAAsB,CAAC,aAAa,EAAE,oBAAoB;IAMjE;;;;OAIG;IACI,KAAK,IAAI,WAAW;CAW5B"}