@aztec/simulator 0.24.0 → 0.26.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dest/acvm/deserialize.d.ts +5 -0
  2. package/dest/acvm/deserialize.d.ts.map +1 -1
  3. package/dest/acvm/deserialize.js +8 -1
  4. package/dest/acvm/oracle/oracle.d.ts +5 -4
  5. package/dest/acvm/oracle/oracle.d.ts.map +1 -1
  6. package/dest/acvm/oracle/oracle.js +24 -11
  7. package/dest/acvm/oracle/typed_oracle.d.ts +7 -9
  8. package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
  9. package/dest/acvm/oracle/typed_oracle.js +9 -9
  10. package/dest/avm/avm_context.d.ts +4 -4
  11. package/dest/avm/avm_context.d.ts.map +1 -1
  12. package/dest/avm/avm_context.js +6 -6
  13. package/dest/avm/avm_memory_types.d.ts +11 -2
  14. package/dest/avm/avm_memory_types.d.ts.map +1 -1
  15. package/dest/avm/avm_memory_types.js +11 -1
  16. package/dest/avm/avm_simulator.d.ts +6 -4
  17. package/dest/avm/avm_simulator.d.ts.map +1 -1
  18. package/dest/avm/avm_simulator.js +17 -18
  19. package/dest/avm/fixtures/index.d.ts +17 -5
  20. package/dest/avm/fixtures/index.d.ts.map +1 -1
  21. package/dest/avm/fixtures/index.js +19 -8
  22. package/dest/avm/journal/host_storage.d.ts.map +1 -1
  23. package/dest/avm/journal/host_storage.js +1 -1
  24. package/dest/avm/journal/journal.d.ts +78 -50
  25. package/dest/avm/journal/journal.d.ts.map +1 -1
  26. package/dest/avm/journal/journal.js +125 -169
  27. package/dest/avm/journal/nullifiers.d.ts +85 -0
  28. package/dest/avm/journal/nullifiers.d.ts.map +1 -0
  29. package/dest/avm/journal/nullifiers.js +147 -0
  30. package/dest/avm/journal/public_storage.d.ts +88 -0
  31. package/dest/avm/journal/public_storage.d.ts.map +1 -0
  32. package/dest/avm/journal/public_storage.js +135 -0
  33. package/dest/avm/journal/trace.d.ts +43 -0
  34. package/dest/avm/journal/trace.d.ts.map +1 -0
  35. package/dest/avm/journal/trace.js +204 -0
  36. package/dest/avm/journal/trace_types.d.ts +26 -0
  37. package/dest/avm/journal/trace_types.d.ts.map +1 -0
  38. package/dest/avm/journal/trace_types.js +6 -0
  39. package/dest/avm/opcodes/accrued_substate.d.ts +37 -4
  40. package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
  41. package/dest/avm/opcodes/accrued_substate.js +109 -12
  42. package/dest/avm/opcodes/comparators.d.ts.map +1 -1
  43. package/dest/avm/opcodes/comparators.js +5 -8
  44. package/dest/avm/opcodes/environment_getters.d.ts +14 -13
  45. package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
  46. package/dest/avm/opcodes/environment_getters.js +1 -1
  47. package/dest/avm/opcodes/external_calls.js +5 -5
  48. package/dest/avm/opcodes/hashing.d.ts +48 -0
  49. package/dest/avm/opcodes/hashing.d.ts.map +1 -0
  50. package/dest/avm/opcodes/hashing.js +127 -0
  51. package/dest/avm/opcodes/memory.d.ts.map +1 -1
  52. package/dest/avm/opcodes/memory.js +1 -1
  53. package/dest/avm/opcodes/storage.d.ts.map +1 -1
  54. package/dest/avm/opcodes/storage.js +3 -3
  55. package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
  56. package/dest/avm/serialization/bytecode_serialization.js +12 -8
  57. package/dest/avm/serialization/instruction_serialization.d.ts +10 -7
  58. package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
  59. package/dest/avm/serialization/instruction_serialization.js +12 -9
  60. package/dest/avm/temporary_executor_migration.d.ts.map +1 -1
  61. package/dest/avm/temporary_executor_migration.js +5 -5
  62. package/dest/client/client_execution_context.d.ts +9 -5
  63. package/dest/client/client_execution_context.d.ts.map +1 -1
  64. package/dest/client/client_execution_context.js +46 -24
  65. package/dest/client/db_oracle.d.ts +7 -0
  66. package/dest/client/db_oracle.d.ts.map +1 -1
  67. package/dest/client/db_oracle.js +1 -1
  68. package/dest/client/execution_note_cache.js +1 -1
  69. package/dest/client/execution_result.d.ts +2 -2
  70. package/dest/client/execution_result.d.ts.map +1 -1
  71. package/dest/client/private_execution.d.ts.map +1 -1
  72. package/dest/client/private_execution.js +4 -4
  73. package/dest/client/simulator.d.ts +1 -1
  74. package/dest/client/simulator.d.ts.map +1 -1
  75. package/dest/client/simulator.js +3 -2
  76. package/dest/client/view_data_oracle.d.ts +9 -2
  77. package/dest/client/view_data_oracle.d.ts.map +1 -1
  78. package/dest/client/view_data_oracle.js +13 -5
  79. package/dest/public/db.d.ts +17 -4
  80. package/dest/public/db.d.ts.map +1 -1
  81. package/dest/public/execution.d.ts +9 -4
  82. package/dest/public/execution.d.ts.map +1 -1
  83. package/dest/public/execution.js +17 -4
  84. package/dest/public/executor.d.ts.map +1 -1
  85. package/dest/public/executor.js +18 -9
  86. package/dest/public/public_execution_context.d.ts +5 -4
  87. package/dest/public/public_execution_context.d.ts.map +1 -1
  88. package/dest/public/public_execution_context.js +23 -12
  89. package/dest/public/state_actions.js +2 -2
  90. package/dest/test/utils.js +4 -4
  91. package/dest/utils.js +2 -3
  92. package/package.json +6 -5
  93. package/src/acvm/deserialize.ts +8 -0
  94. package/src/acvm/oracle/oracle.ts +30 -6
  95. package/src/acvm/oracle/typed_oracle.ts +13 -5
  96. package/src/avm/avm_context.ts +5 -5
  97. package/src/avm/avm_memory_types.ts +18 -3
  98. package/src/avm/avm_simulator.ts +22 -24
  99. package/src/avm/fixtures/index.ts +34 -9
  100. package/src/avm/journal/host_storage.ts +5 -11
  101. package/src/avm/journal/journal.ts +147 -182
  102. package/src/avm/journal/nullifiers.ts +170 -0
  103. package/src/avm/journal/public_storage.ts +149 -0
  104. package/src/avm/journal/trace.ts +223 -0
  105. package/src/avm/journal/trace_types.ts +79 -0
  106. package/src/avm/opcodes/accrued_substate.ts +132 -10
  107. package/src/avm/opcodes/comparators.ts +4 -7
  108. package/src/avm/opcodes/environment_getters.ts +15 -13
  109. package/src/avm/opcodes/external_calls.ts +4 -4
  110. package/src/avm/opcodes/hashing.ts +170 -0
  111. package/src/avm/opcodes/memory.ts +1 -0
  112. package/src/avm/opcodes/storage.ts +5 -2
  113. package/src/avm/serialization/bytecode_serialization.ts +13 -6
  114. package/src/avm/serialization/instruction_serialization.ts +6 -3
  115. package/src/avm/temporary_executor_migration.ts +4 -3
  116. package/src/client/client_execution_context.ts +53 -23
  117. package/src/client/db_oracle.ts +8 -0
  118. package/src/client/execution_note_cache.ts +1 -1
  119. package/src/client/execution_result.ts +2 -2
  120. package/src/client/private_execution.ts +5 -4
  121. package/src/client/simulator.ts +2 -1
  122. package/src/client/view_data_oracle.ts +14 -4
  123. package/src/public/db.ts +19 -4
  124. package/src/public/execution.ts +30 -6
  125. package/src/public/executor.ts +29 -9
  126. package/src/public/public_execution_context.ts +36 -12
  127. package/src/public/state_actions.ts +1 -1
  128. package/src/test/utils.ts +3 -3
  129. package/src/utils.ts +1 -1
@@ -0,0 +1,88 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ import type { PublicStateDB } from '../../index.js';
3
+ /**
4
+ * A class to manage public storage reads and writes during a contract call's AVM simulation.
5
+ * Maintains a storage write cache, and ensures that reads fall back to the correct source.
6
+ * When a contract call completes, its storage cache can be merged into its parent's.
7
+ */
8
+ export declare class PublicStorage {
9
+ /** Cached storage writes. */
10
+ private cache;
11
+ /** Parent's storage cache. Checked on cache-miss. */
12
+ private readonly parentCache;
13
+ /** Reference to node storage. Checked on parent cache-miss. */
14
+ private readonly hostPublicStorage;
15
+ constructor(hostPublicStorage: PublicStateDB, parent?: PublicStorage);
16
+ /**
17
+ * Get the pending storage.
18
+ */
19
+ getCache(): PublicStorageCache;
20
+ /**
21
+ * Read a value from storage.
22
+ * 1. Check cache.
23
+ * 2. Check parent's cache.
24
+ * 3. Fall back to the host state.
25
+ * 4. Not found! Value has never been written to before. Flag it as non-existent and return value zero.
26
+ *
27
+ * @param storageAddress - the address of the contract whose storage is being read from
28
+ * @param slot - the slot in the contract's storage being read from
29
+ * @returns exists: whether the slot has EVER been written to before, value: the latest value written to slot, or 0 if never written to before
30
+ */
31
+ read(storageAddress: Fr, slot: Fr): Promise<[/*exists=*/ boolean, /*value=*/ Fr]>;
32
+ /**
33
+ * Stage a storage write.
34
+ *
35
+ * @param storageAddress - the address of the contract whose storage is being written to
36
+ * @param slot - the slot in the contract's storage being written to
37
+ * @param value - the value being written to the slot
38
+ */
39
+ write(storageAddress: Fr, key: Fr, value: Fr): void;
40
+ /**
41
+ * Merges another PublicStorage's cache (pending writes) into this one.
42
+ *
43
+ * @param incomingPublicStorage - the incoming public storage to merge into this instance's
44
+ */
45
+ acceptAndMerge(incomingPublicStorage: PublicStorage): void;
46
+ }
47
+ /**
48
+ * A class to cache writes to public storage during a contract call's AVM simulation.
49
+ * "Writes" update a map, "reads" check that map or return undefined.
50
+ * An instance of this class can merge another instance's staged writes into its own.
51
+ */
52
+ declare class PublicStorageCache {
53
+ /**
54
+ * Map for staging storage writes.
55
+ * One inner-map per contract storage address,
56
+ * mapping storage slot to latest staged write value.
57
+ */
58
+ cachePerContract: Map<bigint, Map<bigint, Fr>>;
59
+ /**
60
+ * Read a staged value from storage, if it has been previously written to.
61
+ *
62
+ * @param storageAddress - the address of the contract whose storage is being read from
63
+ * @param slot - the slot in the contract's storage being read from
64
+ * @returns the latest value written to slot, or undefined if no value has been written
65
+ */
66
+ read(storageAddress: Fr, slot: Fr): Fr | undefined;
67
+ /**
68
+ * Stage a storage write.
69
+ *
70
+ * @param storageAddress - the address of the contract whose storage is being written to
71
+ * @param slot - the slot in the contract's storage being written to
72
+ * @param value - the value being written to the slot
73
+ */
74
+ write(storageAddress: Fr, slot: Fr, value: Fr): void;
75
+ /**
76
+ * Merges another cache's staged writes into this instance's cache.
77
+ *
78
+ * Staged modifications in "incoming" take precedence over those
79
+ * present in "this" as they are assumed to occur after this' writes.
80
+ *
81
+ * In practice, "this" is a parent call's storage cache, and "incoming" is a nested call's.
82
+ *
83
+ * @param incomingStorageCache - the incoming storage write cache to merge into this instance's
84
+ */
85
+ acceptAndMerge(incomingStorageCache: PublicStorageCache): void;
86
+ }
87
+ export {};
88
+ //# sourceMappingURL=public_storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public_storage.d.ts","sourceRoot":"","sources":["../../../src/avm/journal/public_storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,aAAa;IACxB,6BAA6B;IAC7B,OAAO,CAAC,KAAK,CAAqB;IAClC,qDAAqD;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgB;gBAEtC,iBAAiB,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,aAAa;IAMpE;;OAEG;IACI,QAAQ;IAIf;;;;;;;;;;OAUG;IACU,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;IAiB9F;;;;;;OAMG;IACI,KAAK,CAAC,cAAc,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;IAInD;;;;OAIG;IACI,cAAc,CAAC,qBAAqB,EAAE,aAAa;CAG3D;AAED;;;;GAIG;AACH,cAAM,kBAAkB;IACtB;;;;OAIG;IACI,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAa;IAGlE;;;;;;OAMG;IACI,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,SAAS;IAIzD;;;;;;OAMG;IACI,KAAK,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;IAUpD;;;;;;;;;OASG;IACI,cAAc,CAAC,oBAAoB,EAAE,kBAAkB;CAiB/D"}
@@ -0,0 +1,135 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ /**
3
+ * A class to manage public storage reads and writes during a contract call's AVM simulation.
4
+ * Maintains a storage write cache, and ensures that reads fall back to the correct source.
5
+ * When a contract call completes, its storage cache can be merged into its parent's.
6
+ */
7
+ export class PublicStorage {
8
+ constructor(hostPublicStorage, parent) {
9
+ this.hostPublicStorage = hostPublicStorage;
10
+ this.parentCache = parent?.cache;
11
+ this.cache = new PublicStorageCache();
12
+ }
13
+ /**
14
+ * Get the pending storage.
15
+ */
16
+ getCache() {
17
+ return this.cache;
18
+ }
19
+ /**
20
+ * Read a value from storage.
21
+ * 1. Check cache.
22
+ * 2. Check parent's cache.
23
+ * 3. Fall back to the host state.
24
+ * 4. Not found! Value has never been written to before. Flag it as non-existent and return value zero.
25
+ *
26
+ * @param storageAddress - the address of the contract whose storage is being read from
27
+ * @param slot - the slot in the contract's storage being read from
28
+ * @returns exists: whether the slot has EVER been written to before, value: the latest value written to slot, or 0 if never written to before
29
+ */
30
+ async read(storageAddress, slot) {
31
+ // First try check this storage cache
32
+ let value = this.cache.read(storageAddress, slot);
33
+ // Then try parent's storage cache (if it exists / written to earlier in this TX)
34
+ if (!value && this.parentCache) {
35
+ value = this.parentCache?.read(storageAddress, slot);
36
+ }
37
+ // Finally try the host's Aztec state (a trip to the database)
38
+ if (!value) {
39
+ value = await this.hostPublicStorage.storageRead(storageAddress, slot);
40
+ }
41
+ // if value is undefined, that means this slot has never been written to!
42
+ const exists = value !== undefined;
43
+ const valueOrZero = exists ? value : Fr.ZERO;
44
+ return Promise.resolve([exists, valueOrZero]);
45
+ }
46
+ /**
47
+ * Stage a storage write.
48
+ *
49
+ * @param storageAddress - the address of the contract whose storage is being written to
50
+ * @param slot - the slot in the contract's storage being written to
51
+ * @param value - the value being written to the slot
52
+ */
53
+ write(storageAddress, key, value) {
54
+ this.cache.write(storageAddress, key, value);
55
+ }
56
+ /**
57
+ * Merges another PublicStorage's cache (pending writes) into this one.
58
+ *
59
+ * @param incomingPublicStorage - the incoming public storage to merge into this instance's
60
+ */
61
+ acceptAndMerge(incomingPublicStorage) {
62
+ this.cache.acceptAndMerge(incomingPublicStorage.cache);
63
+ }
64
+ }
65
+ /**
66
+ * A class to cache writes to public storage during a contract call's AVM simulation.
67
+ * "Writes" update a map, "reads" check that map or return undefined.
68
+ * An instance of this class can merge another instance's staged writes into its own.
69
+ */
70
+ class PublicStorageCache {
71
+ constructor() {
72
+ /**
73
+ * Map for staging storage writes.
74
+ * One inner-map per contract storage address,
75
+ * mapping storage slot to latest staged write value.
76
+ */
77
+ this.cachePerContract = new Map();
78
+ }
79
+ // FIXME: storage ^ should be private, but its value is used in tests for "currentStorageValue"
80
+ /**
81
+ * Read a staged value from storage, if it has been previously written to.
82
+ *
83
+ * @param storageAddress - the address of the contract whose storage is being read from
84
+ * @param slot - the slot in the contract's storage being read from
85
+ * @returns the latest value written to slot, or undefined if no value has been written
86
+ */
87
+ read(storageAddress, slot) {
88
+ return this.cachePerContract.get(storageAddress.toBigInt())?.get(slot.toBigInt());
89
+ }
90
+ /**
91
+ * Stage a storage write.
92
+ *
93
+ * @param storageAddress - the address of the contract whose storage is being written to
94
+ * @param slot - the slot in the contract's storage being written to
95
+ * @param value - the value being written to the slot
96
+ */
97
+ write(storageAddress, slot, value) {
98
+ let cacheAtContract = this.cachePerContract.get(storageAddress.toBigInt());
99
+ if (!cacheAtContract) {
100
+ // If this contract's storage has no staged modifications, create a new inner map to store them
101
+ cacheAtContract = new Map();
102
+ this.cachePerContract.set(storageAddress.toBigInt(), cacheAtContract);
103
+ }
104
+ cacheAtContract.set(slot.toBigInt(), value);
105
+ }
106
+ /**
107
+ * Merges another cache's staged writes into this instance's cache.
108
+ *
109
+ * Staged modifications in "incoming" take precedence over those
110
+ * present in "this" as they are assumed to occur after this' writes.
111
+ *
112
+ * In practice, "this" is a parent call's storage cache, and "incoming" is a nested call's.
113
+ *
114
+ * @param incomingStorageCache - the incoming storage write cache to merge into this instance's
115
+ */
116
+ acceptAndMerge(incomingStorageCache) {
117
+ // Iterate over all incoming contracts with staged writes.
118
+ for (const [incomingAddress, incomingCacheAtContract] of incomingStorageCache.cachePerContract) {
119
+ const thisCacheAtContract = this.cachePerContract.get(incomingAddress);
120
+ if (!thisCacheAtContract) {
121
+ // The contract has no storage writes staged here
122
+ // so just accept the incoming cache as-is for this contract.
123
+ this.cachePerContract.set(incomingAddress, incomingCacheAtContract);
124
+ }
125
+ else {
126
+ // "Incoming" and "this" both have staged writes for this contract.
127
+ // Merge in incoming staged writes, giving them precedence over this'.
128
+ for (const [slot, value] of incomingCacheAtContract) {
129
+ thisCacheAtContract.set(slot, value);
130
+ }
131
+ }
132
+ }
133
+ }
134
+ }
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3N0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXZtL2pvdXJuYWwvcHVibGljX3N0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSTlDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQVF4QixZQUFZLGlCQUFnQyxFQUFFLE1BQXNCO1FBQ2xFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sRUFBRSxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBa0IsRUFBRSxJQUFRO1FBQzVDLHFDQUFxQztRQUNyQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEQsaUZBQWlGO1FBQ2pGLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQy9CLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QseUVBQXlFO1FBQ3pFLE1BQU0sTUFB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
@@ -0,0 +1,43 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ import { TracedL1toL2MessageCheck, TracedNoteHashCheck, TracedNullifierCheck } from './trace_types.js';
3
+ export declare class WorldStateAccessTrace {
4
+ accessCounter: number;
5
+ publicStorageReads: Map<bigint, Map<bigint, Fr[]>>;
6
+ publicStorageWrites: Map<bigint, Map<bigint, Fr[]>>;
7
+ noteHashChecks: TracedNoteHashCheck[];
8
+ newNoteHashes: Fr[];
9
+ nullifierChecks: TracedNullifierCheck[];
10
+ newNullifiers: Fr[];
11
+ l1ToL2MessageChecks: TracedL1toL2MessageCheck[];
12
+ constructor(parentTrace?: WorldStateAccessTrace);
13
+ getAccessCounter(): number;
14
+ tracePublicStorageRead(storageAddress: Fr, slot: Fr, value: Fr): void;
15
+ tracePublicStorageWrite(storageAddress: Fr, slot: Fr, value: Fr): void;
16
+ traceNoteHashCheck(storageAddress: Fr, noteHash: Fr, exists: boolean, leafIndex: Fr): void;
17
+ traceNewNoteHash(_storageAddress: Fr, noteHash: Fr): void;
18
+ traceNullifierCheck(storageAddress: Fr, nullifier: Fr, exists: boolean, isPending: boolean, leafIndex: Fr): void;
19
+ traceNewNullifier(_storageAddress: Fr, nullifier: Fr): void;
20
+ traceL1ToL2MessageCheck(msgHash: Fr, msgLeafIndex: Fr, exists: boolean): void;
21
+ private incrementAccessCounter;
22
+ /**
23
+ * Merges another trace into this one
24
+ *
25
+ * - Public state journals (r/w logs), with the accessing being appended in chronological order
26
+ * - Utxo objects are concatenated
27
+ *
28
+ * @param incomingTrace - the incoming trace to merge into this instance
29
+ */
30
+ acceptAndMerge(incomingTrace: WorldStateAccessTrace): void;
31
+ /**
32
+ * We want to keep track of all performed reads in the journal
33
+ * This information is hinted to the avm circuit
34
+
35
+ * @param contractAddress -
36
+ * @param key -
37
+ * @param value -
38
+ */
39
+ journalUpdate(map: Map<bigint, Map<bigint, Fr[]>>, contractAddress: Fr, key: Fr, value: Fr): void;
40
+ private journalRead;
41
+ private journalWrite;
42
+ }
43
+ //# sourceMappingURL=trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../../src/avm/journal/trace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE9C,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEvG,qBAAa,qBAAqB;IACzB,aAAa,EAAE,MAAM,CAAC;IAItB,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAa;IAE/D,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAa;IAEhE,cAAc,EAAE,mBAAmB,EAAE,CAAM;IAE3C,aAAa,EAAE,EAAE,EAAE,CAAM;IACzB,eAAe,EAAE,oBAAoB,EAAE,CAAM;IAE7C,aAAa,EAAE,EAAE,EAAE,CAAM;IACzB,mBAAmB,EAAE,wBAAwB,EAAE,CAAM;gBAGhD,WAAW,CAAC,EAAE,qBAAqB;IAIxC,gBAAgB;IAIhB,sBAAsB,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;IAiB9D,uBAAuB,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;IAgB/D,kBAAkB,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;IAcnF,gBAAgB,CAAC,eAAe,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;IAclD,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;IAgBzG,iBAAiB,CAAC,eAAe,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;IAcpD,uBAAuB,CAAC,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO;IAa7E,OAAO,CAAC,sBAAsB;IAI9B;;;;;;;OAOG;IACI,cAAc,CAAC,aAAa,EAAE,qBAAqB;IAc1D;;;;;;;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,CAA0D;IAE7E,OAAO,CAAC,YAAY,CAA2D;CAChF"}
@@ -0,0 +1,204 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ export class WorldStateAccessTrace {
3
+ //public archiveChecks: TracedArchiveLeafCheck[] = [];
4
+ constructor(parentTrace) {
5
+ //public contractCalls: Array<TracedContractCall> = [];
6
+ //public publicStorageReads: Array<TracedPublicStorageRead> = [];
7
+ this.publicStorageReads = new Map();
8
+ //public publicStorageWrites: Array<TracedPublicStorageWrite> = [];
9
+ this.publicStorageWrites = new Map();
10
+ this.noteHashChecks = [];
11
+ //public newNoteHashes: TracedNoteHash[] = [];
12
+ this.newNoteHashes = [];
13
+ this.nullifierChecks = [];
14
+ //public newNullifiers: TracedNullifier[] = [];
15
+ this.newNullifiers = [];
16
+ this.l1ToL2MessageChecks = [];
17
+ // Create an instance of journalUpdate that appends to the read array
18
+ this.journalRead = this.journalUpdate.bind(this, this.publicStorageReads);
19
+ // Create an instance of journalUpdate that appends to the writes array
20
+ this.journalWrite = this.journalUpdate.bind(this, this.publicStorageWrites);
21
+ this.accessCounter = parentTrace ? parentTrace.accessCounter : 0;
22
+ }
23
+ getAccessCounter() {
24
+ return this.accessCounter;
25
+ }
26
+ tracePublicStorageRead(storageAddress, slot, value /*, _exists: boolean*/) {
27
+ // TODO(4805): check if some threshold is reached for max storage reads
28
+ // (need access to parent length, or trace needs to be initialized with parent's contents)
29
+ //const traced: TracedPublicStorageRead = {
30
+ // callPointer: Fr.ZERO,
31
+ // storageAddress,
32
+ // slot,
33
+ // value,
34
+ // exists,
35
+ // counter: new Fr(this.accessCounter),
36
+ // endLifetime: Fr.ZERO,
37
+ //};
38
+ //this.publicStorageReads.push(traced);
39
+ this.journalRead(storageAddress, slot, value);
40
+ this.incrementAccessCounter();
41
+ }
42
+ tracePublicStorageWrite(storageAddress, slot, value) {
43
+ // TODO(4805): check if some threshold is reached for max storage writes
44
+ // (need access to parent length, or trace needs to be initialized with parent's contents)
45
+ //const traced: TracedPublicStorageWrite = {
46
+ // callPointer: Fr.ZERO,
47
+ // storageAddress,
48
+ // slot,
49
+ // value,
50
+ // counter: new Fr(this.accessCounter),
51
+ // endLifetime: Fr.ZERO,
52
+ //};
53
+ //this.publicStorageWrites.push(traced);
54
+ this.journalWrite(storageAddress, slot, value);
55
+ this.incrementAccessCounter();
56
+ }
57
+ traceNoteHashCheck(storageAddress, noteHash, exists, leafIndex) {
58
+ const traced = {
59
+ callPointer: Fr.ZERO, // FIXME
60
+ storageAddress,
61
+ noteHash,
62
+ exists,
63
+ counter: new Fr(this.accessCounter),
64
+ endLifetime: Fr.ZERO,
65
+ leafIndex,
66
+ };
67
+ this.noteHashChecks.push(traced);
68
+ this.incrementAccessCounter();
69
+ }
70
+ traceNewNoteHash(_storageAddress, noteHash) {
71
+ // TODO(4805): check if some threshold is reached for max new note hash
72
+ //const traced: TracedNoteHash = {
73
+ // callPointer: Fr.ZERO,
74
+ // storageAddress,
75
+ // noteHash,
76
+ // counter: new Fr(this.accessCounter),
77
+ // endLifetime: Fr.ZERO,
78
+ //};
79
+ //this.newNoteHashes.push(traced);
80
+ this.newNoteHashes.push(noteHash);
81
+ this.incrementAccessCounter();
82
+ }
83
+ traceNullifierCheck(storageAddress, nullifier, exists, isPending, leafIndex) {
84
+ // TODO(4805): check if some threshold is reached for max new nullifier
85
+ const traced = {
86
+ callPointer: Fr.ZERO, // FIXME
87
+ storageAddress,
88
+ nullifier,
89
+ exists,
90
+ counter: new Fr(this.accessCounter),
91
+ endLifetime: Fr.ZERO,
92
+ isPending,
93
+ leafIndex,
94
+ };
95
+ this.nullifierChecks.push(traced);
96
+ this.incrementAccessCounter();
97
+ }
98
+ traceNewNullifier(_storageAddress, nullifier) {
99
+ // TODO(4805): check if some threshold is reached for max new nullifier
100
+ //const traced: TracedNullifier = {
101
+ // callPointer: Fr.ZERO,
102
+ // storageAddress,
103
+ // nullifier,
104
+ // counter: new Fr(this.accessCounter),
105
+ // endLifetime: Fr.ZERO,
106
+ //};
107
+ //this.newNullifiers.push(traced);
108
+ this.newNullifiers.push(nullifier);
109
+ this.incrementAccessCounter();
110
+ }
111
+ traceL1ToL2MessageCheck(msgHash, msgLeafIndex, exists) {
112
+ // TODO(4805): check if some threshold is reached for max message reads
113
+ const traced = {
114
+ //callPointer: Fr.ZERO, // FIXME
115
+ leafIndex: msgLeafIndex,
116
+ msgHash: msgHash,
117
+ exists: exists,
118
+ //endLifetime: Fr.ZERO, // FIXME
119
+ };
120
+ this.l1ToL2MessageChecks.push(traced);
121
+ this.incrementAccessCounter();
122
+ }
123
+ incrementAccessCounter() {
124
+ this.accessCounter++;
125
+ }
126
+ /**
127
+ * Merges another trace into this one
128
+ *
129
+ * - Public state journals (r/w logs), with the accessing being appended in chronological order
130
+ * - Utxo objects are concatenated
131
+ *
132
+ * @param incomingTrace - the incoming trace to merge into this instance
133
+ */
134
+ acceptAndMerge(incomingTrace) {
135
+ // Merge storage read and write journals
136
+ mergeContractJournalMaps(this.publicStorageReads, incomingTrace.publicStorageReads);
137
+ mergeContractJournalMaps(this.publicStorageWrites, incomingTrace.publicStorageWrites);
138
+ // Merge new note hashes and nullifiers
139
+ this.noteHashChecks = this.noteHashChecks.concat(incomingTrace.noteHashChecks);
140
+ this.newNoteHashes = this.newNoteHashes.concat(incomingTrace.newNoteHashes);
141
+ this.nullifierChecks = this.nullifierChecks.concat(incomingTrace.nullifierChecks);
142
+ this.newNullifiers = this.newNullifiers.concat(incomingTrace.newNullifiers);
143
+ this.l1ToL2MessageChecks = this.l1ToL2MessageChecks.concat(incomingTrace.l1ToL2MessageChecks);
144
+ // it is assumed that the incoming trace was initialized with this as parent, so accept counter
145
+ this.accessCounter = incomingTrace.accessCounter;
146
+ }
147
+ /**
148
+ * We want to keep track of all performed reads in the journal
149
+ * This information is hinted to the avm circuit
150
+
151
+ * @param contractAddress -
152
+ * @param key -
153
+ * @param value -
154
+ */
155
+ journalUpdate(map, contractAddress, key, value) {
156
+ let contractMap = map.get(contractAddress.toBigInt());
157
+ if (!contractMap) {
158
+ contractMap = new Map();
159
+ map.set(contractAddress.toBigInt(), contractMap);
160
+ }
161
+ let accessArray = contractMap.get(key.toBigInt());
162
+ if (!accessArray) {
163
+ accessArray = new Array();
164
+ contractMap.set(key.toBigInt(), accessArray);
165
+ }
166
+ accessArray.push(value);
167
+ }
168
+ }
169
+ /**
170
+ * Merges two contract journalling maps together
171
+ * For read maps, we just append the childMap arrays into the host map arrays, as the order is important
172
+ *
173
+ * @param hostMap - The map to be merged into
174
+ * @param childMap - The map to be merged from
175
+ */
176
+ function mergeContractJournalMaps(hostMap, childMap) {
177
+ for (const [key, value] of childMap) {
178
+ const map1Value = hostMap.get(key);
179
+ if (!map1Value) {
180
+ hostMap.set(key, value);
181
+ }
182
+ else {
183
+ mergeStorageJournalMaps(map1Value, value);
184
+ }
185
+ }
186
+ }
187
+ /**
188
+ * Merge two storage journalling maps together (for a particular contract).
189
+ *
190
+ * @param hostMap - The map to be merge into
191
+ * @param childMap - The map to be merged from
192
+ */
193
+ function mergeStorageJournalMaps(hostMap, childMap) {
194
+ for (const [key, value] of childMap) {
195
+ const readArr = hostMap.get(key);
196
+ if (!readArr) {
197
+ hostMap.set(key, value);
198
+ }
199
+ else {
200
+ hostMap.set(key, readArr?.concat(...value));
201
+ }
202
+ }
203
+ }
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXZtL2pvdXJuYWwvdHJhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSTlDLE1BQU0sT0FBTyxxQkFBcUI7SUFnQmhDLHNEQUFzRDtJQUV0RCxZQUFZLFdBQW1DO1FBaEIvQyx1REFBdUQ7UUFFdkQsaUVBQWlFO1FBQzFELHVCQUFrQixHQUFtQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3RFLG1FQUFtRTtRQUM1RCx3QkFBbUIsR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVoRSxtQkFBYyxHQUEwQixFQUFFLENBQUM7UUFDbEQsOENBQThDO1FBQ3ZDLGtCQUFhLEdBQVMsRUFBRSxDQUFDO1FBQ3pCLG9CQUFlLEdBQTJCLEVBQUUsQ0FBQztRQUNwRCwrQ0FBK0M7UUFDeEMsa0JBQWEsR0FBUyxFQUFFLENBQUM7UUFDekIsd0JBQW1CLEdBQStCLEVBQUUsQ0FBQztRQW9LNUQscUVBQXFFO1FBQzdELGdCQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzdFLHVFQUF1RTtRQUMvRCxpQkFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQW5LN0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRU0sc0JBQXNCLENBQUMsY0FBa0IsRUFBRSxJQUFRLEVBQUUsS0FBUyxDQUFDLHNCQUFzQjtR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
@@ -0,0 +1,26 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ export type TracedNoteHashCheck = {
3
+ callPointer: Fr;
4
+ storageAddress: Fr;
5
+ leafIndex: Fr;
6
+ noteHash: Fr;
7
+ exists: boolean;
8
+ counter: Fr;
9
+ endLifetime: Fr;
10
+ };
11
+ export type TracedNullifierCheck = {
12
+ callPointer: Fr;
13
+ storageAddress: Fr;
14
+ nullifier: Fr;
15
+ exists: boolean;
16
+ counter: Fr;
17
+ endLifetime: Fr;
18
+ isPending: boolean;
19
+ leafIndex: Fr;
20
+ };
21
+ export type TracedL1toL2MessageCheck = {
22
+ leafIndex: Fr;
23
+ msgHash: Fr;
24
+ exists: boolean;
25
+ };
26
+ //# sourceMappingURL=trace_types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace_types.d.ts","sourceRoot":"","sources":["../../../src/avm/journal/trace_types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AA4B9C,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,EAAE,CAAC;IAChB,cAAc,EAAE,EAAE,CAAC;IACnB,SAAS,EAAE,EAAE,CAAC;IACd,QAAQ,EAAE,EAAE,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,EAAE,CAAC;IACZ,WAAW,EAAE,EAAE,CAAC;CACjB,CAAC;AAUF,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,EAAE,CAAC;IAChB,cAAc,EAAE,EAAE,CAAC;IACnB,SAAS,EAAE,EAAE,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,EAAE,CAAC;IACZ,WAAW,EAAE,EAAE,CAAC;IAGhB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,EAAE,CAAC;CACf,CAAC;AAUF,MAAM,MAAM,wBAAwB,GAAG;IAErC,SAAS,EAAE,EAAE,CAAC;IACd,OAAO,EAAE,EAAE,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;CAEjB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export {};
2
+ //export type TracedArchiveLeafCheck = {
3
+ // leafIndex: Fr;
4
+ // leaf: Fr;
5
+ //};
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2VfdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXZtL2pvdXJuYWwvdHJhY2VfdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQTJFQSx3Q0FBd0M7QUFDeEMsa0JBQWtCO0FBQ2xCLGFBQWE7QUFDYixJQUFJIn0=
@@ -1,6 +1,17 @@
1
1
  import type { AvmContext } from '../avm_context.js';
2
2
  import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
3
3
  import { Instruction } from './instruction.js';
4
+ export declare class NoteHashExists extends Instruction {
5
+ private indirect;
6
+ private noteHashOffset;
7
+ private leafIndexOffset;
8
+ private existsOffset;
9
+ static type: string;
10
+ static readonly opcode: Opcode;
11
+ static readonly wireFormat: OperandType[];
12
+ constructor(indirect: number, noteHashOffset: number, leafIndexOffset: number, existsOffset: number);
13
+ execute(context: AvmContext): Promise<void>;
14
+ }
4
15
  export declare class EmitNoteHash extends Instruction {
5
16
  private indirect;
6
17
  private noteHashOffset;
@@ -10,6 +21,16 @@ export declare class EmitNoteHash extends Instruction {
10
21
  constructor(indirect: number, noteHashOffset: number);
11
22
  execute(context: AvmContext): Promise<void>;
12
23
  }
24
+ export declare class NullifierExists extends Instruction {
25
+ private indirect;
26
+ private nullifierOffset;
27
+ private existsOffset;
28
+ static type: string;
29
+ static readonly opcode: Opcode;
30
+ static readonly wireFormat: OperandType[];
31
+ constructor(indirect: number, nullifierOffset: number, existsOffset: number);
32
+ execute(context: AvmContext): Promise<void>;
33
+ }
13
34
  export declare class EmitNullifier extends Instruction {
14
35
  private indirect;
15
36
  private nullifierOffset;
@@ -19,24 +40,36 @@ export declare class EmitNullifier extends Instruction {
19
40
  constructor(indirect: number, nullifierOffset: number);
20
41
  execute(context: AvmContext): Promise<void>;
21
42
  }
43
+ export declare class L1ToL2MessageExists extends Instruction {
44
+ private indirect;
45
+ private msgHashOffset;
46
+ private msgLeafIndexOffset;
47
+ private existsOffset;
48
+ static type: string;
49
+ static readonly opcode: Opcode;
50
+ static readonly wireFormat: OperandType[];
51
+ constructor(indirect: number, msgHashOffset: number, msgLeafIndexOffset: number, existsOffset: number);
52
+ execute(context: AvmContext): Promise<void>;
53
+ }
22
54
  export declare class EmitUnencryptedLog extends Instruction {
23
55
  private indirect;
56
+ private eventSelectorOffset;
24
57
  private logOffset;
25
58
  private logSize;
26
59
  static type: string;
27
60
  static readonly opcode: Opcode;
28
61
  static readonly wireFormat: OperandType[];
29
- constructor(indirect: number, logOffset: number, logSize: number);
62
+ constructor(indirect: number, eventSelectorOffset: number, logOffset: number, logSize: number);
30
63
  execute(context: AvmContext): Promise<void>;
31
64
  }
32
65
  export declare class SendL2ToL1Message extends Instruction {
33
66
  private indirect;
34
- private msgOffset;
35
- private msgSize;
67
+ private recipientOffset;
68
+ private contentOffset;
36
69
  static type: string;
37
70
  static readonly opcode: Opcode;
38
71
  static readonly wireFormat: OperandType[];
39
- constructor(indirect: number, msgOffset: number, msgSize: number);
72
+ constructor(indirect: number, recipientOffset: number, contentOffset: number);
40
73
  execute(context: AvmContext): Promise<void>;
41
74
  }
42
75
  //# sourceMappingURL=accrued_substate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"accrued_substate.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/accrued_substate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,qBAAa,YAAa,SAAQ,WAAW;IAM/B,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,cAAc;IAL5D,MAAM,CAAC,IAAI,EAAE,MAAM,CAAkB;IACrC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAuB;IAErD,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAA8D;gBAEpE,QAAQ,EAAE,MAAM,EAAU,cAAc,EAAE,MAAM;IAI9D,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAUlD;AAED,qBAAa,aAAc,SAAQ,WAAW;IAMhC,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,eAAe;IAL7D,MAAM,CAAC,IAAI,EAAE,MAAM,CAAmB;IACtC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAwB;IAEtD,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAA8D;gBAEpE,QAAQ,EAAE,MAAM,EAAU,eAAe,EAAE,MAAM;IAI/D,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAUlD;AAED,qBAAa,kBAAmB,SAAQ,WAAW;IAMrC,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,SAAS;IAAU,OAAO,CAAC,OAAO;IALhF,MAAM,CAAC,IAAI,EAAE,MAAM,CAAwB;IAC3C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAA6B;IAE3D,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAkF;gBAExF,QAAQ,EAAE,MAAM,EAAU,SAAS,EAAE,MAAM,EAAU,OAAO,EAAE,MAAM;IAIlF,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAUlD;AAED,qBAAa,iBAAkB,SAAQ,WAAW;IAMpC,OAAO,CAAC,QAAQ;IAAU,OAAO,CAAC,SAAS;IAAU,OAAO,CAAC,OAAO;IALhF,MAAM,CAAC,IAAI,EAAE,MAAM,CAAmB;IACtC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAwB;IAEtD,MAAM,CAAC,QAAQ,CAAC,UAAU,gBAAkF;gBAExF,QAAQ,EAAE,MAAM,EAAU,SAAS,EAAE,MAAM,EAAU,OAAO,EAAE,MAAM;IAIlF,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAUlD"}
1
+ {"version":3,"file":"accrued_substate.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/accrued_substate.ts"],"names":[],"mappings":"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"}