@aztec/simulator 0.33.0 → 0.35.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 (186) hide show
  1. package/dest/acvm/acvm.d.ts +4 -1
  2. package/dest/acvm/acvm.d.ts.map +1 -1
  3. package/dest/acvm/acvm.js +5 -5
  4. package/dest/acvm/deserialize.d.ts +3 -5
  5. package/dest/acvm/deserialize.d.ts.map +1 -1
  6. package/dest/acvm/deserialize.js +6 -9
  7. package/dest/acvm/oracle/oracle.d.ts +3 -1
  8. package/dest/acvm/oracle/oracle.d.ts.map +1 -1
  9. package/dest/acvm/oracle/oracle.js +14 -6
  10. package/dest/acvm/oracle/typed_oracle.d.ts +2 -0
  11. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
  12. package/dest/acvm/oracle/typed_oracle.js +7 -1
  13. package/dest/avm/avm_execution_environment.d.ts +6 -3
  14. package/dest/avm/avm_execution_environment.d.ts.map +1 -1
  15. package/dest/avm/avm_execution_environment.js +12 -9
  16. package/dest/avm/avm_gas.js +2 -2
  17. package/dest/avm/avm_machine_state.d.ts +2 -0
  18. package/dest/avm/avm_machine_state.d.ts.map +1 -1
  19. package/dest/avm/avm_machine_state.js +24 -6
  20. package/dest/avm/avm_memory_types.js +6 -6
  21. package/dest/avm/avm_simulator.js +7 -7
  22. package/dest/avm/fixtures/index.d.ts +3 -0
  23. package/dest/avm/fixtures/index.d.ts.map +1 -1
  24. package/dest/avm/fixtures/index.js +11 -4
  25. package/dest/avm/journal/journal.d.ts +15 -13
  26. package/dest/avm/journal/journal.d.ts.map +1 -1
  27. package/dest/avm/journal/journal.js +16 -5
  28. package/dest/avm/journal/trace.d.ts +8 -19
  29. package/dest/avm/journal/trace.d.ts.map +1 -1
  30. package/dest/avm/journal/trace.js +48 -116
  31. package/dest/avm/journal/trace_types.d.ts +23 -4
  32. package/dest/avm/journal/trace_types.d.ts.map +1 -1
  33. package/dest/avm/opcodes/accrued_substate.d.ts +2 -1
  34. package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
  35. package/dest/avm/opcodes/accrued_substate.js +14 -6
  36. package/dest/avm/opcodes/context_getters.js +2 -2
  37. package/dest/avm/opcodes/external_calls.d.ts +2 -2
  38. package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
  39. package/dest/avm/opcodes/external_calls.js +26 -10
  40. package/dest/avm/opcodes/hashing.d.ts +8 -8
  41. package/dest/avm/opcodes/hashing.d.ts.map +1 -1
  42. package/dest/avm/opcodes/hashing.js +35 -43
  43. package/dest/avm/serialization/instruction_serialization.d.ts +1 -1
  44. package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
  45. package/dest/avm/serialization/instruction_serialization.js +2 -2
  46. package/dest/client/client_execution_context.d.ts +14 -4
  47. package/dest/client/client_execution_context.d.ts.map +1 -1
  48. package/dest/client/client_execution_context.js +28 -13
  49. package/dest/client/private_execution.d.ts +1 -1
  50. package/dest/client/private_execution.d.ts.map +1 -1
  51. package/dest/client/private_execution.js +10 -8
  52. package/dest/client/simulator.d.ts.map +1 -1
  53. package/dest/client/simulator.js +6 -5
  54. package/dest/client/unconstrained_execution.d.ts +1 -1
  55. package/dest/client/unconstrained_execution.d.ts.map +1 -1
  56. package/dest/client/unconstrained_execution.js +6 -5
  57. package/dest/client/view_data_oracle.d.ts +2 -2
  58. package/dest/client/view_data_oracle.d.ts.map +1 -1
  59. package/dest/client/view_data_oracle.js +2 -2
  60. package/dest/common/index.d.ts +1 -1
  61. package/dest/common/index.d.ts.map +1 -1
  62. package/dest/common/index.js +2 -2
  63. package/dest/common/packed_values_cache.d.ts +28 -0
  64. package/dest/common/packed_values_cache.d.ts.map +1 -0
  65. package/dest/common/packed_values_cache.js +50 -0
  66. package/dest/index.d.ts +1 -0
  67. package/dest/index.d.ts.map +1 -1
  68. package/dest/index.js +2 -1
  69. package/dest/mocks/fixtures.d.ts +42 -0
  70. package/dest/mocks/fixtures.d.ts.map +1 -0
  71. package/dest/mocks/fixtures.js +84 -0
  72. package/dest/mocks/index.d.ts +2 -0
  73. package/dest/mocks/index.d.ts.map +1 -0
  74. package/dest/mocks/index.js +2 -0
  75. package/dest/public/abstract_phase_manager.d.ts +82 -0
  76. package/dest/public/abstract_phase_manager.d.ts.map +1 -0
  77. package/dest/public/abstract_phase_manager.js +320 -0
  78. package/dest/public/app_logic_phase_manager.d.ts +29 -0
  79. package/dest/public/app_logic_phase_manager.d.ts.map +1 -0
  80. package/dest/public/app_logic_phase_manager.js +50 -0
  81. package/dest/public/execution.d.ts +3 -0
  82. package/dest/public/execution.d.ts.map +1 -1
  83. package/dest/public/execution.js +1 -1
  84. package/dest/public/executor.d.ts +1 -15
  85. package/dest/public/executor.d.ts.map +1 -1
  86. package/dest/public/executor.js +80 -83
  87. package/dest/public/hints_builder.d.ts +23 -0
  88. package/dest/public/hints_builder.d.ts.map +1 -0
  89. package/dest/public/hints_builder.js +62 -0
  90. package/dest/public/index.d.ts +5 -0
  91. package/dest/public/index.d.ts.map +1 -1
  92. package/dest/public/index.js +6 -1
  93. package/dest/public/phase_manager_factory.d.ts +18 -0
  94. package/dest/public/phase_manager_factory.d.ts.map +1 -0
  95. package/dest/public/phase_manager_factory.js +56 -0
  96. package/dest/public/public_execution_context.d.ts +20 -10
  97. package/dest/public/public_execution_context.d.ts.map +1 -1
  98. package/dest/public/public_execution_context.js +35 -23
  99. package/dest/public/public_executor.d.ts +79 -0
  100. package/dest/public/public_executor.d.ts.map +1 -0
  101. package/dest/public/public_executor.js +198 -0
  102. package/dest/public/public_kernel.d.ts +37 -0
  103. package/dest/public/public_kernel.d.ts.map +1 -0
  104. package/dest/public/public_kernel.js +97 -0
  105. package/dest/public/public_kernel_circuit_simulator.d.ts +31 -0
  106. package/dest/public/public_kernel_circuit_simulator.d.ts.map +1 -0
  107. package/dest/public/public_kernel_circuit_simulator.js +2 -0
  108. package/dest/public/public_processor.d.ts +53 -0
  109. package/dest/public/public_processor.d.ts.map +1 -0
  110. package/dest/public/public_processor.js +144 -0
  111. package/dest/public/setup_phase_manager.d.ts +30 -0
  112. package/dest/public/setup_phase_manager.d.ts.map +1 -0
  113. package/dest/public/setup_phase_manager.js +46 -0
  114. package/dest/public/tail_phase_manager.d.ts +30 -0
  115. package/dest/public/tail_phase_manager.d.ts.map +1 -0
  116. package/dest/public/tail_phase_manager.js +60 -0
  117. package/dest/public/teardown_phase_manager.d.ts +30 -0
  118. package/dest/public/teardown_phase_manager.d.ts.map +1 -0
  119. package/dest/public/teardown_phase_manager.js +46 -0
  120. package/dest/public/transitional_adaptors.d.ts +33 -0
  121. package/dest/public/transitional_adaptors.d.ts.map +1 -0
  122. package/dest/public/transitional_adaptors.js +162 -0
  123. package/dest/public/utils.d.ts +8 -0
  124. package/dest/public/utils.d.ts.map +1 -0
  125. package/dest/public/utils.js +29 -0
  126. package/dest/simulator/acvm_native.d.ts +19 -3
  127. package/dest/simulator/acvm_native.d.ts.map +1 -1
  128. package/dest/simulator/acvm_native.js +75 -48
  129. package/dest/simulator/acvm_wasm.d.ts.map +1 -1
  130. package/dest/simulator/acvm_wasm.js +3 -4
  131. package/package.json +8 -5
  132. package/src/acvm/acvm.ts +8 -5
  133. package/src/acvm/deserialize.ts +5 -9
  134. package/src/acvm/oracle/oracle.ts +15 -5
  135. package/src/acvm/oracle/typed_oracle.ts +8 -0
  136. package/src/avm/avm_execution_environment.ts +17 -17
  137. package/src/avm/avm_gas.ts +1 -1
  138. package/src/avm/avm_machine_state.ts +26 -5
  139. package/src/avm/avm_memory_types.ts +5 -5
  140. package/src/avm/avm_simulator.ts +6 -6
  141. package/src/avm/fixtures/index.ts +14 -1
  142. package/src/avm/journal/journal.ts +37 -17
  143. package/src/avm/journal/trace.ts +59 -121
  144. package/src/avm/journal/trace_types.ts +39 -39
  145. package/src/avm/opcodes/accrued_substate.ts +17 -5
  146. package/src/avm/opcodes/context_getters.ts +1 -1
  147. package/src/avm/opcodes/external_calls.ts +32 -9
  148. package/src/avm/opcodes/hashing.ts +38 -54
  149. package/src/avm/serialization/instruction_serialization.ts +1 -1
  150. package/src/client/client_execution_context.ts +30 -11
  151. package/src/client/private_execution.ts +9 -8
  152. package/src/client/simulator.ts +7 -3
  153. package/src/client/unconstrained_execution.ts +5 -4
  154. package/src/client/view_data_oracle.ts +1 -1
  155. package/src/common/index.ts +1 -1
  156. package/src/common/packed_values_cache.ts +55 -0
  157. package/src/index.ts +1 -0
  158. package/src/mocks/fixtures.ts +169 -0
  159. package/src/mocks/index.ts +1 -0
  160. package/src/public/abstract_phase_manager.ts +571 -0
  161. package/src/public/app_logic_phase_manager.ts +76 -0
  162. package/src/public/execution.ts +4 -0
  163. package/src/public/executor.ts +93 -93
  164. package/src/public/hints_builder.ts +119 -0
  165. package/src/public/index.ts +5 -0
  166. package/src/public/phase_manager_factory.ts +126 -0
  167. package/src/public/public_execution_context.ts +43 -37
  168. package/src/public/public_executor.ts +267 -0
  169. package/src/public/public_kernel.ts +139 -0
  170. package/src/public/public_kernel_circuit_simulator.ts +36 -0
  171. package/src/public/public_processor.ts +212 -0
  172. package/src/public/setup_phase_manager.ts +66 -0
  173. package/src/public/tail_phase_manager.ts +120 -0
  174. package/src/public/teardown_phase_manager.ts +66 -0
  175. package/src/public/transitional_adaptors.ts +249 -0
  176. package/src/public/utils.ts +31 -0
  177. package/src/simulator/acvm_native.ts +94 -47
  178. package/src/simulator/acvm_wasm.ts +7 -3
  179. package/dest/avm/temporary_executor_migration.d.ts +0 -27
  180. package/dest/avm/temporary_executor_migration.d.ts.map +0 -1
  181. package/dest/avm/temporary_executor_migration.js +0 -94
  182. package/dest/common/packed_args_cache.d.ts +0 -28
  183. package/dest/common/packed_args_cache.d.ts.map +0 -1
  184. package/dest/common/packed_args_cache.js +0 -50
  185. package/src/avm/temporary_executor_migration.ts +0 -136
  186. package/src/common/packed_args_cache.ts +0 -55
@@ -1,50 +0,0 @@
1
- import { PackedArguments } from '@aztec/circuit-types';
2
- import { Fr } from '@aztec/circuits.js';
3
- /**
4
- * A cache for packed arguments during transaction execution.
5
- */
6
- export class PackedArgsCache {
7
- constructor(initialArguments = []) {
8
- this.cache = new Map();
9
- for (const initialArg of initialArguments) {
10
- this.cache.set(initialArg.hash.toBigInt(), initialArg.args);
11
- }
12
- }
13
- /**
14
- * Creates a new packed arguments cache.
15
- * @param initialArguments - The initial arguments to add to the cache.
16
- * @returns The new packed arguments cache.
17
- */
18
- static create(initialArguments = []) {
19
- return new PackedArgsCache(initialArguments);
20
- }
21
- /**
22
- * Unpacks packed arguments.
23
- * @param hash - The hash of the packed arguments.
24
- * @returns The unpacked arguments.
25
- */
26
- unpack(hash) {
27
- if (hash.equals(Fr.ZERO)) {
28
- return [];
29
- }
30
- const packedArgs = this.cache.get(hash.value);
31
- if (!packedArgs) {
32
- throw new Error(`Packed arguments for hash ${hash.toString()} not found in cache`);
33
- }
34
- return packedArgs;
35
- }
36
- /**
37
- * Packs arguments.
38
- * @param args - The arguments to pack.
39
- * @returns The hash of the packed arguments.
40
- */
41
- pack(args) {
42
- if (args.length === 0) {
43
- return Fr.ZERO;
44
- }
45
- const packedArguments = PackedArguments.fromArgs(args);
46
- this.cache.set(packedArguments.hash.value, packedArguments.args);
47
- return packedArguments.hash;
48
- }
49
- }
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2VkX2FyZ3NfY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbW9uL3BhY2tlZF9hcmdzX2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUcxQixZQUFZLG1CQUFzQyxFQUFFO1FBQ2xELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2QixLQUFLLE1BQU0sVUFBVSxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUQsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQkFBc0MsRUFBRTtRQUMzRCxPQUFPLElBQUksZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsSUFBUTtRQUNwQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixJQUFJLENBQUMsUUFBUSxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDckYsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksSUFBSSxDQUFDLElBQVU7UUFDcEIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztRQUNqQixDQUFDO1FBQ0QsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakUsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDO0lBQzlCLENBQUM7Q0FDRiJ9
@@ -1,136 +0,0 @@
1
- // All code in this file needs to die once the public executor is phased out.
2
- import { UnencryptedFunctionL2Logs } from '@aztec/circuit-types';
3
- import {
4
- ContractStorageRead,
5
- ContractStorageUpdateRequest,
6
- type GlobalVariables,
7
- L2ToL1Message,
8
- type ReadRequest,
9
- SideEffect,
10
- SideEffectLinkedToNoteHash,
11
- } from '@aztec/circuits.js';
12
- import { Fr } from '@aztec/foundation/fields';
13
-
14
- import { createSimulationError } from '../common/errors.js';
15
- import { type PublicExecution, type PublicExecutionResult } from '../public/execution.js';
16
- import { AvmExecutionEnvironment } from './avm_execution_environment.js';
17
- import { type AvmContractCallResults } from './avm_message_call_result.js';
18
- import { type JournalData } from './journal/journal.js';
19
- import { Mov } from './opcodes/memory.js';
20
-
21
- /** Temporary Method
22
- *
23
- * Convert a PublicExecution(Environment) object to an AvmExecutionEnvironment
24
- *
25
- * @param current
26
- * @param globalVariables
27
- * @returns
28
- */
29
- export function temporaryCreateAvmExecutionEnvironment(
30
- current: PublicExecution,
31
- globalVariables: GlobalVariables,
32
- ): AvmExecutionEnvironment {
33
- // Function selector is included temporarily until noir codegens public contract bytecode in a single blob
34
- return new AvmExecutionEnvironment(
35
- current.contractAddress,
36
- current.callContext.storageContractAddress,
37
- current.callContext.msgSender, // TODO: origin is not available
38
- current.callContext.msgSender,
39
- current.callContext.portalContractAddress,
40
- /*feePerL1Gas=*/ Fr.zero(),
41
- /*feePerL2Gas=*/ Fr.zero(),
42
- /*feePerDaGas=*/ Fr.zero(),
43
- /*contractCallDepth=*/ Fr.zero(),
44
- globalVariables,
45
- current.callContext.isStaticCall,
46
- current.callContext.isDelegateCall,
47
- current.args,
48
- current.functionData.selector,
49
- );
50
- }
51
-
52
- /** Temporary Method
53
- *
54
- * Convert the result of an AVM contract call to a PublicExecutionResult for the public kernel
55
- *
56
- * @param execution
57
- * @param newWorldState
58
- * @param result
59
- * @returns
60
- */
61
- export function temporaryConvertAvmResults(
62
- execution: PublicExecution,
63
- newWorldState: JournalData,
64
- result: AvmContractCallResults,
65
- ): PublicExecutionResult {
66
- const newNoteHashes = newWorldState.newNoteHashes.map(noteHash => new SideEffect(noteHash, Fr.zero()));
67
-
68
- const contractStorageReads: ContractStorageRead[] = [];
69
- const reduceStorageReadRequests = (contractAddress: bigint, storageReads: Map<bigint, Fr[]>) => {
70
- return storageReads.forEach((innerArray, key) => {
71
- innerArray.forEach(value => {
72
- contractStorageReads.push(new ContractStorageRead(new Fr(key), new Fr(value), 0));
73
- });
74
- });
75
- };
76
- newWorldState.storageReads.forEach((storageMap: Map<bigint, Fr[]>, address: bigint) =>
77
- reduceStorageReadRequests(address, storageMap),
78
- );
79
-
80
- const contractStorageUpdateRequests: ContractStorageUpdateRequest[] = [];
81
- const reduceStorageUpdateRequests = (contractAddress: bigint, storageUpdateRequests: Map<bigint, Fr[]>) => {
82
- return storageUpdateRequests.forEach((innerArray, key) => {
83
- innerArray.forEach(value => {
84
- contractStorageUpdateRequests.push(new ContractStorageUpdateRequest(new Fr(key), new Fr(value), 0));
85
- });
86
- });
87
- };
88
- newWorldState.storageWrites.forEach((storageMap: Map<bigint, Fr[]>, address: bigint) =>
89
- reduceStorageUpdateRequests(address, storageMap),
90
- );
91
-
92
- const returnValues = result.output;
93
-
94
- // TODO(follow up in pr tree): NOT SUPPORTED YET, make sure hashing and log resolution is done correctly
95
- // Disabled.
96
- const nestedExecutions: PublicExecutionResult[] = [];
97
- const nullifierReadRequests: ReadRequest[] = [];
98
- const nullifierNonExistentReadRequests: ReadRequest[] = [];
99
- const newNullifiers: SideEffectLinkedToNoteHash[] = newWorldState.newNullifiers.map(
100
- (nullifier, i) => new SideEffectLinkedToNoteHash(nullifier.toField(), Fr.zero(), new Fr(i + 1)),
101
- );
102
- const unencryptedLogs = UnencryptedFunctionL2Logs.empty();
103
- const newL2ToL1Messages = newWorldState.newL1Messages.map(() => L2ToL1Message.empty());
104
- // TODO keep track of side effect counters
105
- const startSideEffectCounter = Fr.ZERO;
106
- const endSideEffectCounter = Fr.ZERO;
107
-
108
- return {
109
- execution,
110
- nullifierReadRequests,
111
- nullifierNonExistentReadRequests,
112
- newNoteHashes,
113
- newL2ToL1Messages,
114
- startSideEffectCounter,
115
- endSideEffectCounter,
116
- newNullifiers,
117
- contractStorageReads,
118
- contractStorageUpdateRequests,
119
- returnValues,
120
- nestedExecutions,
121
- unencryptedLogs,
122
- reverted: result.reverted,
123
- revertReason: result.revertReason ? createSimulationError(result.revertReason) : undefined,
124
- };
125
- }
126
-
127
- export function isAvmBytecode(bytecode: Buffer): boolean {
128
- const magicBuf = Buffer.from([
129
- Mov.opcode, // opcode
130
- 0x00, // indirect
131
- ...Buffer.from('000018ca', 'hex'), // srcOffset
132
- ...Buffer.from('000018ca', 'hex'), // dstOffset
133
- ]);
134
- const magicSize = magicBuf.length;
135
- return bytecode.subarray(-magicSize).equals(magicBuf);
136
- }
@@ -1,55 +0,0 @@
1
- import { PackedArguments } from '@aztec/circuit-types';
2
- import { Fr } from '@aztec/circuits.js';
3
-
4
- /**
5
- * A cache for packed arguments during transaction execution.
6
- */
7
- export class PackedArgsCache {
8
- private cache: Map<bigint, Fr[]>;
9
-
10
- constructor(initialArguments: PackedArguments[] = []) {
11
- this.cache = new Map();
12
- for (const initialArg of initialArguments) {
13
- this.cache.set(initialArg.hash.toBigInt(), initialArg.args);
14
- }
15
- }
16
-
17
- /**
18
- * Creates a new packed arguments cache.
19
- * @param initialArguments - The initial arguments to add to the cache.
20
- * @returns The new packed arguments cache.
21
- */
22
- public static create(initialArguments: PackedArguments[] = []) {
23
- return new PackedArgsCache(initialArguments);
24
- }
25
-
26
- /**
27
- * Unpacks packed arguments.
28
- * @param hash - The hash of the packed arguments.
29
- * @returns The unpacked arguments.
30
- */
31
- public unpack(hash: Fr): Fr[] {
32
- if (hash.equals(Fr.ZERO)) {
33
- return [];
34
- }
35
- const packedArgs = this.cache.get(hash.value);
36
- if (!packedArgs) {
37
- throw new Error(`Packed arguments for hash ${hash.toString()} not found in cache`);
38
- }
39
- return packedArgs;
40
- }
41
-
42
- /**
43
- * Packs arguments.
44
- * @param args - The arguments to pack.
45
- * @returns The hash of the packed arguments.
46
- */
47
- public pack(args: Fr[]) {
48
- if (args.length === 0) {
49
- return Fr.ZERO;
50
- }
51
- const packedArguments = PackedArguments.fromArgs(args);
52
- this.cache.set(packedArguments.hash.value, packedArguments.args);
53
- return packedArguments.hash;
54
- }
55
- }