@aztec/simulator 0.43.0 → 0.45.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 (155) hide show
  1. package/dest/acvm/oracle/oracle.d.ts +3 -1
  2. package/dest/acvm/oracle/oracle.d.ts.map +1 -1
  3. package/dest/acvm/oracle/oracle.js +12 -6
  4. package/dest/acvm/oracle/typed_oracle.d.ts +6 -4
  5. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
  6. package/dest/acvm/oracle/typed_oracle.js +8 -2
  7. package/dest/avm/avm_context.d.ts +1 -1
  8. package/dest/avm/avm_context.d.ts.map +1 -1
  9. package/dest/avm/avm_context.js +3 -3
  10. package/dest/avm/{avm_message_call_result.d.ts → avm_contract_call_result.d.ts} +2 -2
  11. package/dest/avm/avm_contract_call_result.d.ts.map +1 -0
  12. package/dest/avm/avm_contract_call_result.js +18 -0
  13. package/dest/avm/avm_execution_environment.d.ts +8 -10
  14. package/dest/avm/avm_execution_environment.d.ts.map +1 -1
  15. package/dest/avm/avm_execution_environment.js +15 -19
  16. package/dest/avm/avm_gas.js +2 -2
  17. package/dest/avm/avm_simulator.d.ts +4 -4
  18. package/dest/avm/avm_simulator.d.ts.map +1 -1
  19. package/dest/avm/avm_simulator.js +7 -8
  20. package/dest/avm/bytecode_utils.d.ts +5 -0
  21. package/dest/avm/bytecode_utils.d.ts.map +1 -0
  22. package/dest/avm/bytecode_utils.js +29 -0
  23. package/dest/avm/errors.js +2 -2
  24. package/dest/avm/fixtures/index.d.ts +10 -6
  25. package/dest/avm/fixtures/index.d.ts.map +1 -1
  26. package/dest/avm/fixtures/index.js +10 -17
  27. package/dest/avm/journal/journal.d.ts +56 -65
  28. package/dest/avm/journal/journal.d.ts.map +1 -1
  29. package/dest/avm/journal/journal.js +80 -117
  30. package/dest/avm/journal/nullifiers.d.ts +21 -8
  31. package/dest/avm/journal/nullifiers.d.ts.map +1 -1
  32. package/dest/avm/journal/nullifiers.js +26 -8
  33. package/dest/avm/journal/public_storage.d.ts +5 -1
  34. package/dest/avm/journal/public_storage.d.ts.map +1 -1
  35. package/dest/avm/journal/public_storage.js +11 -2
  36. package/dest/avm/opcodes/accrued_substate.d.ts +1 -2
  37. package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
  38. package/dest/avm/opcodes/accrued_substate.js +8 -17
  39. package/dest/avm/opcodes/environment_getters.d.ts +13 -8
  40. package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
  41. package/dest/avm/opcodes/environment_getters.js +20 -13
  42. package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
  43. package/dest/avm/opcodes/external_calls.js +11 -27
  44. package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  45. package/dest/avm/serialization/bytecode_serialization.js +5 -5
  46. package/dest/avm/serialization/instruction_serialization.d.ts +9 -9
  47. package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
  48. package/dest/avm/serialization/instruction_serialization.js +10 -10
  49. package/dest/avm/test_utils.d.ts +14 -0
  50. package/dest/avm/test_utils.d.ts.map +1 -0
  51. package/dest/avm/test_utils.js +36 -0
  52. package/dest/client/client_execution_context.d.ts +6 -4
  53. package/dest/client/client_execution_context.d.ts.map +1 -1
  54. package/dest/client/client_execution_context.js +8 -6
  55. package/dest/client/execution_note_cache.d.ts.map +1 -1
  56. package/dest/client/execution_note_cache.js +1 -1
  57. package/dest/client/execution_result.d.ts +2 -1
  58. package/dest/client/execution_result.d.ts.map +1 -1
  59. package/dest/client/execution_result.js +1 -1
  60. package/dest/client/index.d.ts +2 -0
  61. package/dest/client/index.d.ts.map +1 -1
  62. package/dest/client/index.js +3 -1
  63. package/dest/client/simulator.d.ts +3 -3
  64. package/dest/client/simulator.d.ts.map +1 -1
  65. package/dest/client/simulator.js +1 -1
  66. package/dest/client/view_data_oracle.d.ts +5 -1
  67. package/dest/client/view_data_oracle.d.ts.map +1 -1
  68. package/dest/client/view_data_oracle.js +12 -4
  69. package/dest/mocks/fixtures.d.ts +3 -3
  70. package/dest/mocks/fixtures.d.ts.map +1 -1
  71. package/dest/mocks/fixtures.js +6 -5
  72. package/dest/public/abstract_phase_manager.d.ts +1 -0
  73. package/dest/public/abstract_phase_manager.d.ts.map +1 -1
  74. package/dest/public/abstract_phase_manager.js +17 -14
  75. package/dest/public/app_logic_phase_manager.d.ts.map +1 -1
  76. package/dest/public/app_logic_phase_manager.js +2 -1
  77. package/dest/public/execution.d.ts +33 -30
  78. package/dest/public/execution.d.ts.map +1 -1
  79. package/dest/public/execution.js +2 -2
  80. package/dest/public/executor.d.ts +12 -7
  81. package/dest/public/executor.d.ts.map +1 -1
  82. package/dest/public/executor.js +42 -33
  83. package/dest/public/hints_builder.d.ts +1 -1
  84. package/dest/public/index.d.ts +1 -1
  85. package/dest/public/index.d.ts.map +1 -1
  86. package/dest/public/index.js +1 -1
  87. package/dest/public/public_kernel.d.ts +1 -1
  88. package/dest/public/public_kernel.d.ts.map +1 -1
  89. package/dest/public/public_kernel.js +2 -2
  90. package/dest/public/public_processor.d.ts +5 -2
  91. package/dest/public/public_processor.d.ts.map +1 -1
  92. package/dest/public/public_processor.js +142 -123
  93. package/dest/public/side_effect_trace.d.ts +87 -0
  94. package/dest/public/side_effect_trace.d.ts.map +1 -0
  95. package/dest/public/side_effect_trace.js +236 -0
  96. package/dest/public/side_effect_trace_interface.d.ts +36 -0
  97. package/dest/public/side_effect_trace_interface.d.ts.map +1 -0
  98. package/dest/public/side_effect_trace_interface.js +2 -0
  99. package/dest/public/teardown_phase_manager.d.ts.map +1 -1
  100. package/dest/public/teardown_phase_manager.js +2 -1
  101. package/dest/rollup/rollup.d.ts +1 -1
  102. package/dest/rollup/rollup.d.ts.map +1 -1
  103. package/dest/rollup/rollup.js +2 -2
  104. package/package.json +18 -9
  105. package/src/acvm/oracle/oracle.ts +23 -5
  106. package/src/acvm/oracle/typed_oracle.ts +23 -4
  107. package/src/avm/avm_context.ts +2 -2
  108. package/src/avm/{avm_message_call_result.ts → avm_contract_call_result.ts} +1 -1
  109. package/src/avm/avm_execution_environment.ts +16 -26
  110. package/src/avm/avm_gas.ts +1 -1
  111. package/src/avm/avm_simulator.ts +10 -13
  112. package/src/avm/bytecode_utils.ts +32 -0
  113. package/src/avm/errors.ts +1 -1
  114. package/src/avm/fixtures/index.ts +21 -23
  115. package/src/avm/journal/journal.ts +118 -224
  116. package/src/avm/journal/nullifiers.ts +30 -13
  117. package/src/avm/journal/public_storage.ts +12 -2
  118. package/src/avm/opcodes/accrued_substate.ts +12 -21
  119. package/src/avm/opcodes/environment_getters.ts +23 -14
  120. package/src/avm/opcodes/external_calls.ts +13 -36
  121. package/src/avm/serialization/bytecode_serialization.ts +4 -3
  122. package/src/avm/serialization/instruction_serialization.ts +3 -3
  123. package/src/avm/test_utils.ts +53 -0
  124. package/src/client/client_execution_context.ts +22 -7
  125. package/src/client/execution_note_cache.ts +0 -1
  126. package/src/client/execution_result.ts +2 -1
  127. package/src/client/index.ts +2 -0
  128. package/src/client/simulator.ts +8 -2
  129. package/src/client/view_data_oracle.ts +20 -3
  130. package/src/mocks/fixtures.ts +7 -6
  131. package/src/public/abstract_phase_manager.ts +32 -21
  132. package/src/public/app_logic_phase_manager.ts +1 -0
  133. package/src/public/execution.ts +45 -31
  134. package/src/public/executor.ts +71 -49
  135. package/src/public/index.ts +1 -1
  136. package/src/public/public_kernel.ts +2 -1
  137. package/src/public/public_processor.ts +11 -2
  138. package/src/public/side_effect_trace.ts +341 -0
  139. package/src/public/side_effect_trace_interface.ts +41 -0
  140. package/src/public/teardown_phase_manager.ts +1 -0
  141. package/src/rollup/rollup.ts +3 -1
  142. package/dest/avm/avm_message_call_result.d.ts.map +0 -1
  143. package/dest/avm/avm_message_call_result.js +0 -18
  144. package/dest/avm/journal/trace.d.ts +0 -33
  145. package/dest/avm/journal/trace.d.ts.map +0 -1
  146. package/dest/avm/journal/trace.js +0 -152
  147. package/dest/avm/journal/trace_types.d.ts +0 -55
  148. package/dest/avm/journal/trace_types.d.ts.map +0 -1
  149. package/dest/avm/journal/trace_types.js +0 -2
  150. package/dest/public/transitional_adaptors.d.ts +0 -21
  151. package/dest/public/transitional_adaptors.d.ts.map +0 -1
  152. package/dest/public/transitional_adaptors.js +0 -90
  153. package/src/avm/journal/trace.ts +0 -181
  154. package/src/avm/journal/trace_types.ts +0 -91
  155. package/src/public/transitional_adaptors.ts +0 -168
@@ -1,55 +0,0 @@
1
- import { type Fr } from '@aztec/foundation/fields';
2
- import { type ContractInstanceWithAddress } from '@aztec/types/contracts';
3
- export type TracedPublicStorageRead = {
4
- storageAddress: Fr;
5
- exists: boolean;
6
- cached: boolean;
7
- slot: Fr;
8
- value: Fr;
9
- counter: Fr;
10
- };
11
- export type TracedPublicStorageWrite = {
12
- storageAddress: Fr;
13
- slot: Fr;
14
- value: Fr;
15
- counter: Fr;
16
- };
17
- export type TracedNoteHashCheck = {
18
- storageAddress: Fr;
19
- leafIndex: Fr;
20
- noteHash: Fr;
21
- exists: boolean;
22
- counter: Fr;
23
- };
24
- export type TracedNoteHash = {
25
- storageAddress: Fr;
26
- noteHash: Fr;
27
- counter: Fr;
28
- };
29
- export type TracedNullifierCheck = {
30
- storageAddress: Fr;
31
- nullifier: Fr;
32
- exists: boolean;
33
- counter: Fr;
34
- isPending: boolean;
35
- leafIndex: Fr;
36
- };
37
- export type TracedNullifier = {
38
- storageAddress: Fr;
39
- nullifier: Fr;
40
- counter: Fr;
41
- };
42
- export type TracedL1toL2MessageCheck = {
43
- leafIndex: Fr;
44
- msgHash: Fr;
45
- exists: boolean;
46
- counter: Fr;
47
- };
48
- export type TracedUnencryptedL2Log = {
49
- logHash: Fr;
50
- counter: Fr;
51
- };
52
- export type TracedContractInstance = {
53
- exists: boolean;
54
- } & ContractInstanceWithAddress;
55
- //# sourceMappingURL=trace_types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trace_types.d.ts","sourceRoot":"","sources":["../../../src/avm/journal/trace_types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAS1E,MAAM,MAAM,uBAAuB,GAAG;IAEpC,cAAc,EAAE,EAAE,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,EAAE,CAAC;IACT,KAAK,EAAE,EAAE,CAAC;IACV,OAAO,EAAE,EAAE,CAAC;CAEb,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IAErC,cAAc,EAAE,EAAE,CAAC;IACnB,IAAI,EAAE,EAAE,CAAC;IACT,KAAK,EAAE,EAAE,CAAC;IACV,OAAO,EAAE,EAAE,CAAC;CAEb,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAEhC,cAAc,EAAE,EAAE,CAAC;IACnB,SAAS,EAAE,EAAE,CAAC;IACd,QAAQ,EAAE,EAAE,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,EAAE,CAAC;CAEb,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAE3B,cAAc,EAAE,EAAE,CAAC;IACnB,QAAQ,EAAE,EAAE,CAAC;IACb,OAAO,EAAE,EAAE,CAAC;CAEb,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAEjC,cAAc,EAAE,EAAE,CAAC;IACnB,SAAS,EAAE,EAAE,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,EAAE,CAAC;IAIZ,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,EAAE,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAE5B,cAAc,EAAE,EAAE,CAAC;IACnB,SAAS,EAAE,EAAE,CAAC;IACd,OAAO,EAAE,EAAE,CAAC;CAEb,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IAErC,SAAS,EAAE,EAAE,CAAC;IACd,OAAO,EAAE,EAAE,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,EAAE,CAAC;CAEb,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IAEnC,OAAO,EAAE,EAAE,CAAC;IACZ,OAAO,EAAE,EAAE,CAAC;CAEb,CAAC;AAOF,MAAM,MAAM,sBAAsB,GAAG;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,2BAA2B,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2VfdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXZtL2pvdXJuYWwvdHJhY2VfdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -1,21 +0,0 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { Gas, type GasSettings, type GlobalVariables, type Header } from '@aztec/circuits.js';
3
- import { Fr } from '@aztec/foundation/fields';
4
- import { type AvmContext } from '../avm/avm_context.js';
5
- import { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
6
- import { type AvmContractCallResults } from '../avm/avm_message_call_result.js';
7
- import { type PublicExecution, type PublicExecutionResult } from './execution.js';
8
- /**
9
- * Convert a PublicExecution(Environment) object to an AvmExecutionEnvironment
10
- *
11
- * @param current
12
- * @param globalVariables
13
- * @returns
14
- */
15
- export declare function createAvmExecutionEnvironment(current: PublicExecution, header: Header, globalVariables: GlobalVariables, gasSettings: GasSettings, transactionFee: Fr): AvmExecutionEnvironment;
16
- export declare function createPublicExecution(startSideEffectCounter: number, avmEnvironment: AvmExecutionEnvironment, calldata: Fr[]): PublicExecution;
17
- export declare function convertAvmResultsToPxResult(avmResult: AvmContractCallResults, startSideEffectCounter: number, fromPx: PublicExecution, startGas: Gas, endAvmContext: AvmContext, bytecode: Buffer | undefined): PublicExecutionResult;
18
- export declare function markBytecodeAsAvm(bytecode: Buffer): Buffer;
19
- export declare function decompressBytecodeIfCompressed(bytecode: Buffer): Promise<Buffer>;
20
- export declare function isAvmBytecode(bytecode: Buffer): Promise<boolean>;
21
- //# sourceMappingURL=transitional_adaptors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transitional_adaptors.d.ts","sourceRoot":"","sources":["../../src/public/transitional_adaptors.ts"],"names":[],"mappings":";AAEA,OAAO,EAML,GAAG,EACH,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,MAAM,EACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAK9C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAKhF,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAElF;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,EAAE,GACjB,uBAAuB,CAiBzB;AAED,wBAAgB,qBAAqB,CACnC,sBAAsB,EAAE,MAAM,EAC9B,cAAc,EAAE,uBAAuB,EACvC,QAAQ,EAAE,EAAE,EAAE,GACb,eAAe,CAgBjB;AA8BD,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,sBAAsB,EACjC,sBAAsB,EAAE,MAAM,EAC9B,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,GAAG,EACb,aAAa,EAAE,UAAU,EACzB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,qBAAqB,CAuBvB;AASD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAGD,wBAAsB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQtF;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAItE"}
@@ -1,90 +0,0 @@
1
- // All code in this file needs to die once the public executor is phased out in favor of the AVM.
2
- import { UnencryptedFunctionL2Logs } from '@aztec/circuit-types';
3
- import { AvmContractInstanceHint, AvmExecutionHints, AvmExternalCallHint, AvmKeyValueHint, CallContext, Gas, } from '@aztec/circuits.js';
4
- import { Fr } from '@aztec/foundation/fields';
5
- import { promisify } from 'util';
6
- import { gunzip } from 'zlib';
7
- import { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
8
- import { Mov } from '../avm/opcodes/memory.js';
9
- import { createSimulationError } from '../common/errors.js';
10
- /**
11
- * Convert a PublicExecution(Environment) object to an AvmExecutionEnvironment
12
- *
13
- * @param current
14
- * @param globalVariables
15
- * @returns
16
- */
17
- export function createAvmExecutionEnvironment(current, header, globalVariables, gasSettings, transactionFee) {
18
- return new AvmExecutionEnvironment(current.contractAddress, current.callContext.storageContractAddress, current.callContext.msgSender, globalVariables.gasFees.feePerL2Gas, globalVariables.gasFees.feePerDaGas,
19
- /*contractCallDepth=*/ Fr.zero(), header, globalVariables, current.callContext.isStaticCall, current.callContext.isDelegateCall, current.args, gasSettings, transactionFee, current.functionSelector);
20
- }
21
- export function createPublicExecution(startSideEffectCounter, avmEnvironment, calldata) {
22
- const callContext = CallContext.from({
23
- msgSender: avmEnvironment.sender,
24
- storageContractAddress: avmEnvironment.storageAddress,
25
- functionSelector: avmEnvironment.temporaryFunctionSelector,
26
- isDelegateCall: avmEnvironment.isDelegateCall,
27
- isStaticCall: avmEnvironment.isStaticCall,
28
- sideEffectCounter: startSideEffectCounter,
29
- });
30
- const execution = {
31
- contractAddress: avmEnvironment.address,
32
- callContext,
33
- args: calldata,
34
- functionSelector: avmEnvironment.temporaryFunctionSelector,
35
- };
36
- return execution;
37
- }
38
- function computeHints(trace, executionResult) {
39
- return new AvmExecutionHints(trace.publicStorageReads.map(read => new AvmKeyValueHint(read.counter, read.value)), trace.noteHashChecks.map(check => new AvmKeyValueHint(check.counter, new Fr(check.exists ? 1 : 0))), trace.nullifierChecks.map(check => new AvmKeyValueHint(check.counter, new Fr(check.exists ? 1 : 0))), trace.l1ToL2MessageChecks.map(check => new AvmKeyValueHint(check.counter, new Fr(check.exists ? 1 : 0))), executionResult.nestedExecutions.map(nested => {
40
- const gasUsed = new Gas(nested.startGasLeft.daGas - nested.endGasLeft.daGas, nested.startGasLeft.l2Gas - nested.endGasLeft.l2Gas);
41
- return new AvmExternalCallHint(/*success=*/ new Fr(nested.reverted ? 0 : 1), nested.returnValues, gasUsed);
42
- }), trace.gotContractInstances.map(instance => new AvmContractInstanceHint(instance.address, new Fr(instance.exists ? 1 : 0), instance.salt, instance.deployer, instance.contractClassId, instance.initializationHash, instance.publicKeysHash)));
43
- }
44
- export function convertAvmResultsToPxResult(avmResult, startSideEffectCounter, fromPx, startGas, endAvmContext, bytecode) {
45
- const endPersistableState = endAvmContext.persistableState;
46
- const endMachineState = endAvmContext.machineState;
47
- return {
48
- ...endPersistableState.transitionalExecutionResult, // includes nestedExecutions
49
- execution: fromPx,
50
- returnValues: avmResult.output,
51
- startSideEffectCounter: new Fr(startSideEffectCounter),
52
- endSideEffectCounter: new Fr(endPersistableState.trace.accessCounter),
53
- unencryptedLogs: new UnencryptedFunctionL2Logs(endPersistableState.transitionalExecutionResult.unencryptedLogs),
54
- allUnencryptedLogs: new UnencryptedFunctionL2Logs(endPersistableState.transitionalExecutionResult.allUnencryptedLogs),
55
- reverted: avmResult.reverted,
56
- revertReason: avmResult.revertReason ? createSimulationError(avmResult.revertReason) : undefined,
57
- startGasLeft: startGas,
58
- endGasLeft: endMachineState.gasLeft,
59
- transactionFee: endAvmContext.environment.transactionFee,
60
- bytecode: bytecode,
61
- calldata: endAvmContext.environment.calldata,
62
- avmHints: computeHints(endPersistableState.trace, endPersistableState.transitionalExecutionResult),
63
- };
64
- }
65
- const AVM_MAGIC_SUFFIX = Buffer.from([
66
- Mov.opcode, // opcode
67
- 0x00, // indirect
68
- ...Buffer.from('000018ca', 'hex'), // srcOffset
69
- ...Buffer.from('000018ca', 'hex'), // dstOffset
70
- ]);
71
- export function markBytecodeAsAvm(bytecode) {
72
- return Buffer.concat([bytecode, AVM_MAGIC_SUFFIX]);
73
- }
74
- // This is just a helper function for the AVM circuit.
75
- export async function decompressBytecodeIfCompressed(bytecode) {
76
- try {
77
- return await promisify(gunzip)(bytecode);
78
- }
79
- catch {
80
- // If the bytecode is not compressed, the gunzip call will throw an error
81
- // In this case, we assume the bytecode is not compressed and continue.
82
- return Promise.resolve(bytecode);
83
- }
84
- }
85
- export async function isAvmBytecode(bytecode) {
86
- const decompressedBytecode = await decompressBytecodeIfCompressed(bytecode);
87
- const magicSize = AVM_MAGIC_SUFFIX.length;
88
- return decompressedBytecode.subarray(-magicSize).equals(AVM_MAGIC_SUFFIX);
89
- }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdGlvbmFsX2FkYXB0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1YmxpYy90cmFuc2l0aW9uYWxfYWRhcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUdBQWlHO0FBQ2pHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsV0FBVyxFQUNYLEdBQUcsR0FJSixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHOUIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFJOUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRzVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FDM0MsT0FBd0IsRUFDeEIsTUFBYyxFQUNkLGVBQWdDLEVBQ2hDLFdBQXdCLEVBQ3hCLGNBQWtCO0lBRWxCLE9BQU8sSUFBSSx1QkFBdUIsQ0FDaEMsT0FBTyxDQUFDLGVBQWUsRUFDdkIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFDMUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQzdCLGVBQWUsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUNuQyxlQUFlLENBQUMsT0FBTyxDQUFDLFdBQVc7SUFDbkMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUNoQyxNQUFNLEVBQ04sZUFBZSxFQUNmLE9BQU8sQ0FBQyxX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
@@ -1,181 +0,0 @@
1
- import { Fr } from '@aztec/foundation/fields';
2
-
3
- import {
4
- type TracedContractInstance,
5
- type TracedL1toL2MessageCheck,
6
- type TracedNoteHash,
7
- type TracedNoteHashCheck,
8
- type TracedNullifier,
9
- type TracedNullifierCheck,
10
- type TracedPublicStorageRead,
11
- type TracedPublicStorageWrite,
12
- type TracedUnencryptedL2Log,
13
- } from './trace_types.js';
14
-
15
- export class WorldStateAccessTrace {
16
- public accessCounter: number;
17
-
18
- public publicStorageReads: TracedPublicStorageRead[] = [];
19
- public publicStorageWrites: TracedPublicStorageWrite[] = [];
20
-
21
- public noteHashChecks: TracedNoteHashCheck[] = [];
22
- public newNoteHashes: TracedNoteHash[] = [];
23
- public nullifierChecks: TracedNullifierCheck[] = [];
24
- public newNullifiers: TracedNullifier[] = [];
25
- public l1ToL2MessageChecks: TracedL1toL2MessageCheck[] = [];
26
- public newLogsHashes: TracedUnencryptedL2Log[] = [];
27
- public gotContractInstances: TracedContractInstance[] = [];
28
-
29
- //public contractCalls: TracedContractCall[] = [];
30
- //public archiveChecks: TracedArchiveLeafCheck[] = [];
31
-
32
- constructor(parentTrace?: WorldStateAccessTrace) {
33
- this.accessCounter = parentTrace ? parentTrace.accessCounter : 0;
34
- // TODO(4805): consider tracking the parent's trace vector lengths so we can enforce limits
35
- }
36
-
37
- public getAccessCounter() {
38
- return this.accessCounter;
39
- }
40
-
41
- public tracePublicStorageRead(storageAddress: Fr, slot: Fr, value: Fr, exists: boolean, cached: boolean) {
42
- // TODO(4805): check if some threshold is reached for max storage reads
43
- // (need access to parent length, or trace needs to be initialized with parent's contents)
44
- const traced: TracedPublicStorageRead = {
45
- // callPointer: Fr.ZERO,
46
- storageAddress,
47
- slot,
48
- value,
49
- exists,
50
- cached,
51
- counter: new Fr(this.accessCounter),
52
- // endLifetime: Fr.ZERO,
53
- };
54
- this.publicStorageReads.push(traced);
55
- this.incrementAccessCounter();
56
- }
57
-
58
- public tracePublicStorageWrite(storageAddress: Fr, slot: Fr, value: Fr) {
59
- // TODO(4805): check if some threshold is reached for max storage writes
60
- // (need access to parent length, or trace needs to be initialized with parent's contents)
61
- const traced: TracedPublicStorageWrite = {
62
- // callPointer: Fr.ZERO,
63
- storageAddress,
64
- slot,
65
- value,
66
- counter: new Fr(this.accessCounter),
67
- // endLifetime: Fr.ZERO,
68
- };
69
- this.publicStorageWrites.push(traced);
70
- this.incrementAccessCounter();
71
- }
72
-
73
- public traceNoteHashCheck(storageAddress: Fr, noteHash: Fr, exists: boolean, leafIndex: Fr) {
74
- const traced: TracedNoteHashCheck = {
75
- // callPointer: Fr.ZERO,
76
- storageAddress,
77
- noteHash,
78
- exists,
79
- counter: new Fr(this.accessCounter),
80
- // endLifetime: Fr.ZERO,
81
- leafIndex,
82
- };
83
- this.noteHashChecks.push(traced);
84
- this.incrementAccessCounter();
85
- }
86
-
87
- public traceNewNoteHash(storageAddress: Fr, noteHash: Fr) {
88
- // TODO(4805): check if some threshold is reached for max new note hash
89
- const traced: TracedNoteHash = {
90
- // callPointer: Fr.ZERO,
91
- storageAddress,
92
- noteHash,
93
- counter: new Fr(this.accessCounter),
94
- // endLifetime: Fr.ZERO,
95
- };
96
- this.newNoteHashes.push(traced);
97
- this.incrementAccessCounter();
98
- }
99
-
100
- public traceNullifierCheck(storageAddress: Fr, nullifier: Fr, exists: boolean, isPending: boolean, leafIndex: Fr) {
101
- // TODO(4805): check if some threshold is reached for max new nullifier
102
- const traced: TracedNullifierCheck = {
103
- // callPointer: Fr.ZERO,
104
- storageAddress,
105
- nullifier,
106
- exists,
107
- counter: new Fr(this.accessCounter),
108
- // endLifetime: Fr.ZERO,
109
- isPending,
110
- leafIndex,
111
- };
112
- this.nullifierChecks.push(traced);
113
- this.incrementAccessCounter();
114
- }
115
-
116
- public traceNewNullifier(storageAddress: Fr, nullifier: Fr) {
117
- // TODO(4805): check if some threshold is reached for max new nullifier
118
- const tracedNullifier: TracedNullifier = {
119
- // callPointer: Fr.ZERO,
120
- storageAddress,
121
- nullifier,
122
- counter: new Fr(this.accessCounter),
123
- // endLifetime: Fr.ZERO,
124
- };
125
- this.newNullifiers.push(tracedNullifier);
126
- this.incrementAccessCounter();
127
- }
128
-
129
- public traceL1ToL2MessageCheck(msgHash: Fr, msgLeafIndex: Fr, exists: boolean) {
130
- // TODO(4805): check if some threshold is reached for max message reads
131
- const traced: TracedL1toL2MessageCheck = {
132
- //callPointer: Fr.ZERO, // FIXME
133
- leafIndex: msgLeafIndex,
134
- msgHash: msgHash,
135
- exists: exists,
136
- counter: new Fr(this.accessCounter),
137
- //endLifetime: Fr.ZERO, // FIXME
138
- };
139
- this.l1ToL2MessageChecks.push(traced);
140
- this.incrementAccessCounter();
141
- }
142
-
143
- public traceNewLog(logHash: Fr) {
144
- const traced: TracedUnencryptedL2Log = {
145
- logHash,
146
- counter: new Fr(this.accessCounter),
147
- };
148
- this.newLogsHashes.push(traced);
149
- this.incrementAccessCounter();
150
- }
151
-
152
- public traceGetContractInstance(instance: TracedContractInstance) {
153
- this.gotContractInstances.push(instance);
154
- this.incrementAccessCounter();
155
- }
156
-
157
- private incrementAccessCounter() {
158
- this.accessCounter++;
159
- }
160
-
161
- /**
162
- * Merges another trace into this one
163
- *
164
- * @param incomingTrace - the incoming trace to merge into this instance
165
- */
166
- public acceptAndMerge(incomingTrace: WorldStateAccessTrace) {
167
- // Merge storage read and write journals
168
- this.publicStorageReads.push(...incomingTrace.publicStorageReads);
169
- this.publicStorageWrites.push(...incomingTrace.publicStorageWrites);
170
- // Merge new note hashes and nullifiers
171
- this.noteHashChecks.push(...incomingTrace.noteHashChecks);
172
- this.newNoteHashes.push(...incomingTrace.newNoteHashes);
173
- this.nullifierChecks.push(...incomingTrace.nullifierChecks);
174
- this.newNullifiers.push(...incomingTrace.newNullifiers);
175
- this.l1ToL2MessageChecks.push(...incomingTrace.l1ToL2MessageChecks);
176
- this.newLogsHashes.push(...incomingTrace.newLogsHashes);
177
- this.gotContractInstances.push(...incomingTrace.gotContractInstances);
178
- // it is assumed that the incoming trace was initialized with this as parent, so accept counter
179
- this.accessCounter = incomingTrace.accessCounter;
180
- }
181
- }
@@ -1,91 +0,0 @@
1
- import { type Fr } from '@aztec/foundation/fields';
2
- import { type ContractInstanceWithAddress } from '@aztec/types/contracts';
3
-
4
- //export type TracedContractCall = {
5
- // callPointer: Fr;
6
- // address: Fr;
7
- // storageAddress: Fr;
8
- // endLifetime: Fr;
9
- //};
10
-
11
- export type TracedPublicStorageRead = {
12
- // callPointer: Fr;
13
- storageAddress: Fr;
14
- exists: boolean;
15
- cached: boolean;
16
- slot: Fr;
17
- value: Fr;
18
- counter: Fr;
19
- // endLifetime: Fr;
20
- };
21
-
22
- export type TracedPublicStorageWrite = {
23
- // callPointer: Fr;
24
- storageAddress: Fr;
25
- slot: Fr;
26
- value: Fr;
27
- counter: Fr;
28
- // endLifetime: Fr;
29
- };
30
-
31
- export type TracedNoteHashCheck = {
32
- // callPointer: Fr;
33
- storageAddress: Fr;
34
- leafIndex: Fr;
35
- noteHash: Fr;
36
- exists: boolean;
37
- counter: Fr;
38
- // endLifetime: Fr;
39
- };
40
-
41
- export type TracedNoteHash = {
42
- // callPointer: Fr;
43
- storageAddress: Fr;
44
- noteHash: Fr;
45
- counter: Fr;
46
- // endLifetime: Fr;
47
- };
48
-
49
- export type TracedNullifierCheck = {
50
- // callPointer: Fr;
51
- storageAddress: Fr;
52
- nullifier: Fr;
53
- exists: boolean;
54
- counter: Fr;
55
- // endLifetime: Fr;
56
- // the fields below are relevant only to the public kernel
57
- // and are therefore omitted from VM inputs
58
- isPending: boolean;
59
- leafIndex: Fr;
60
- };
61
-
62
- export type TracedNullifier = {
63
- // callPointer: Fr;
64
- storageAddress: Fr;
65
- nullifier: Fr;
66
- counter: Fr;
67
- // endLifetime: Fr;
68
- };
69
-
70
- export type TracedL1toL2MessageCheck = {
71
- //callPointer: Fr;
72
- leafIndex: Fr;
73
- msgHash: Fr;
74
- exists: boolean;
75
- counter: Fr;
76
- //endLifetime: Fr;
77
- };
78
-
79
- export type TracedUnencryptedL2Log = {
80
- //callPointer: Fr;
81
- logHash: Fr;
82
- counter: Fr;
83
- //endLifetime: Fr;
84
- };
85
-
86
- //export type TracedArchiveLeafCheck = {
87
- // leafIndex: Fr;
88
- // leaf: Fr;
89
- //};
90
-
91
- export type TracedContractInstance = { exists: boolean } & ContractInstanceWithAddress;
@@ -1,168 +0,0 @@
1
- // All code in this file needs to die once the public executor is phased out in favor of the AVM.
2
- import { UnencryptedFunctionL2Logs } from '@aztec/circuit-types';
3
- import {
4
- AvmContractInstanceHint,
5
- AvmExecutionHints,
6
- AvmExternalCallHint,
7
- AvmKeyValueHint,
8
- CallContext,
9
- Gas,
10
- type GasSettings,
11
- type GlobalVariables,
12
- type Header,
13
- } from '@aztec/circuits.js';
14
- import { Fr } from '@aztec/foundation/fields';
15
-
16
- import { promisify } from 'util';
17
- import { gunzip } from 'zlib';
18
-
19
- import { type AvmContext } from '../avm/avm_context.js';
20
- import { AvmExecutionEnvironment } from '../avm/avm_execution_environment.js';
21
- import { type AvmContractCallResults } from '../avm/avm_message_call_result.js';
22
- import { type PartialPublicExecutionResult } from '../avm/journal/journal.js';
23
- import { type WorldStateAccessTrace } from '../avm/journal/trace.js';
24
- import { Mov } from '../avm/opcodes/memory.js';
25
- import { createSimulationError } from '../common/errors.js';
26
- import { type PublicExecution, type PublicExecutionResult } from './execution.js';
27
-
28
- /**
29
- * Convert a PublicExecution(Environment) object to an AvmExecutionEnvironment
30
- *
31
- * @param current
32
- * @param globalVariables
33
- * @returns
34
- */
35
- export function createAvmExecutionEnvironment(
36
- current: PublicExecution,
37
- header: Header,
38
- globalVariables: GlobalVariables,
39
- gasSettings: GasSettings,
40
- transactionFee: Fr,
41
- ): AvmExecutionEnvironment {
42
- return new AvmExecutionEnvironment(
43
- current.contractAddress,
44
- current.callContext.storageContractAddress,
45
- current.callContext.msgSender,
46
- globalVariables.gasFees.feePerL2Gas,
47
- globalVariables.gasFees.feePerDaGas,
48
- /*contractCallDepth=*/ Fr.zero(),
49
- header,
50
- globalVariables,
51
- current.callContext.isStaticCall,
52
- current.callContext.isDelegateCall,
53
- current.args,
54
- gasSettings,
55
- transactionFee,
56
- current.functionSelector,
57
- );
58
- }
59
-
60
- export function createPublicExecution(
61
- startSideEffectCounter: number,
62
- avmEnvironment: AvmExecutionEnvironment,
63
- calldata: Fr[],
64
- ): PublicExecution {
65
- const callContext = CallContext.from({
66
- msgSender: avmEnvironment.sender,
67
- storageContractAddress: avmEnvironment.storageAddress,
68
- functionSelector: avmEnvironment.temporaryFunctionSelector,
69
- isDelegateCall: avmEnvironment.isDelegateCall,
70
- isStaticCall: avmEnvironment.isStaticCall,
71
- sideEffectCounter: startSideEffectCounter,
72
- });
73
- const execution: PublicExecution = {
74
- contractAddress: avmEnvironment.address,
75
- callContext,
76
- args: calldata,
77
- functionSelector: avmEnvironment.temporaryFunctionSelector,
78
- };
79
- return execution;
80
- }
81
-
82
- function computeHints(trace: WorldStateAccessTrace, executionResult: PartialPublicExecutionResult): AvmExecutionHints {
83
- return new AvmExecutionHints(
84
- trace.publicStorageReads.map(read => new AvmKeyValueHint(read.counter, read.value)),
85
- trace.noteHashChecks.map(check => new AvmKeyValueHint(check.counter, new Fr(check.exists ? 1 : 0))),
86
- trace.nullifierChecks.map(check => new AvmKeyValueHint(check.counter, new Fr(check.exists ? 1 : 0))),
87
- trace.l1ToL2MessageChecks.map(check => new AvmKeyValueHint(check.counter, new Fr(check.exists ? 1 : 0))),
88
- executionResult.nestedExecutions.map(nested => {
89
- const gasUsed = new Gas(
90
- nested.startGasLeft.daGas - nested.endGasLeft.daGas,
91
- nested.startGasLeft.l2Gas - nested.endGasLeft.l2Gas,
92
- );
93
- return new AvmExternalCallHint(/*success=*/ new Fr(nested.reverted ? 0 : 1), nested.returnValues, gasUsed);
94
- }),
95
- trace.gotContractInstances.map(
96
- instance =>
97
- new AvmContractInstanceHint(
98
- instance.address,
99
- new Fr(instance.exists ? 1 : 0),
100
- instance.salt,
101
- instance.deployer,
102
- instance.contractClassId,
103
- instance.initializationHash,
104
- instance.publicKeysHash,
105
- ),
106
- ),
107
- );
108
- }
109
-
110
- export function convertAvmResultsToPxResult(
111
- avmResult: AvmContractCallResults,
112
- startSideEffectCounter: number,
113
- fromPx: PublicExecution,
114
- startGas: Gas,
115
- endAvmContext: AvmContext,
116
- bytecode: Buffer | undefined,
117
- ): PublicExecutionResult {
118
- const endPersistableState = endAvmContext.persistableState;
119
- const endMachineState = endAvmContext.machineState;
120
-
121
- return {
122
- ...endPersistableState.transitionalExecutionResult, // includes nestedExecutions
123
- execution: fromPx,
124
- returnValues: avmResult.output,
125
- startSideEffectCounter: new Fr(startSideEffectCounter),
126
- endSideEffectCounter: new Fr(endPersistableState.trace.accessCounter),
127
- unencryptedLogs: new UnencryptedFunctionL2Logs(endPersistableState.transitionalExecutionResult.unencryptedLogs),
128
- allUnencryptedLogs: new UnencryptedFunctionL2Logs(
129
- endPersistableState.transitionalExecutionResult.allUnencryptedLogs,
130
- ),
131
- reverted: avmResult.reverted,
132
- revertReason: avmResult.revertReason ? createSimulationError(avmResult.revertReason) : undefined,
133
- startGasLeft: startGas,
134
- endGasLeft: endMachineState.gasLeft,
135
- transactionFee: endAvmContext.environment.transactionFee,
136
- bytecode: bytecode,
137
- calldata: endAvmContext.environment.calldata,
138
- avmHints: computeHints(endPersistableState.trace, endPersistableState.transitionalExecutionResult),
139
- };
140
- }
141
-
142
- const AVM_MAGIC_SUFFIX = Buffer.from([
143
- Mov.opcode, // opcode
144
- 0x00, // indirect
145
- ...Buffer.from('000018ca', 'hex'), // srcOffset
146
- ...Buffer.from('000018ca', 'hex'), // dstOffset
147
- ]);
148
-
149
- export function markBytecodeAsAvm(bytecode: Buffer): Buffer {
150
- return Buffer.concat([bytecode, AVM_MAGIC_SUFFIX]);
151
- }
152
-
153
- // This is just a helper function for the AVM circuit.
154
- export async function decompressBytecodeIfCompressed(bytecode: Buffer): Promise<Buffer> {
155
- try {
156
- return await promisify(gunzip)(bytecode);
157
- } catch {
158
- // If the bytecode is not compressed, the gunzip call will throw an error
159
- // In this case, we assume the bytecode is not compressed and continue.
160
- return Promise.resolve(bytecode);
161
- }
162
- }
163
-
164
- export async function isAvmBytecode(bytecode: Buffer): Promise<boolean> {
165
- const decompressedBytecode = await decompressBytecodeIfCompressed(bytecode);
166
- const magicSize = AVM_MAGIC_SUFFIX.length;
167
- return decompressedBytecode.subarray(-magicSize).equals(AVM_MAGIC_SUFFIX);
168
- }