@feelyourprotocol/util 8141.0.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 (223) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +297 -0
  3. package/dist/cjs/account.d.ts +165 -0
  4. package/dist/cjs/account.d.ts.map +1 -0
  5. package/dist/cjs/account.js +530 -0
  6. package/dist/cjs/account.js.map +1 -0
  7. package/dist/cjs/address.d.ts +67 -0
  8. package/dist/cjs/address.d.ts.map +1 -0
  9. package/dist/cjs/address.js +136 -0
  10. package/dist/cjs/address.js.map +1 -0
  11. package/dist/cjs/authorization.d.ts +41 -0
  12. package/dist/cjs/authorization.d.ts.map +1 -0
  13. package/dist/cjs/authorization.js +135 -0
  14. package/dist/cjs/authorization.js.map +1 -0
  15. package/dist/cjs/bal.d.ts +129 -0
  16. package/dist/cjs/bal.d.ts.map +1 -0
  17. package/dist/cjs/bal.js +529 -0
  18. package/dist/cjs/bal.js.map +1 -0
  19. package/dist/cjs/binaryTree.d.ts +148 -0
  20. package/dist/cjs/binaryTree.d.ts.map +1 -0
  21. package/dist/cjs/binaryTree.js +240 -0
  22. package/dist/cjs/binaryTree.js.map +1 -0
  23. package/dist/cjs/blobs.d.ts +76 -0
  24. package/dist/cjs/blobs.d.ts.map +1 -0
  25. package/dist/cjs/blobs.js +175 -0
  26. package/dist/cjs/blobs.js.map +1 -0
  27. package/dist/cjs/bytes.d.ts +291 -0
  28. package/dist/cjs/bytes.d.ts.map +1 -0
  29. package/dist/cjs/bytes.js +606 -0
  30. package/dist/cjs/bytes.js.map +1 -0
  31. package/dist/cjs/constants.d.ts +91 -0
  32. package/dist/cjs/constants.d.ts.map +1 -0
  33. package/dist/cjs/constants.js +97 -0
  34. package/dist/cjs/constants.js.map +1 -0
  35. package/dist/cjs/db.d.ts +65 -0
  36. package/dist/cjs/db.d.ts.map +1 -0
  37. package/dist/cjs/db.js +14 -0
  38. package/dist/cjs/db.js.map +1 -0
  39. package/dist/cjs/env.d.ts +9 -0
  40. package/dist/cjs/env.d.ts.map +1 -0
  41. package/dist/cjs/env.js +13 -0
  42. package/dist/cjs/env.js.map +1 -0
  43. package/dist/cjs/errors.d.ts +3 -0
  44. package/dist/cjs/errors.d.ts.map +1 -0
  45. package/dist/cjs/errors.js +19 -0
  46. package/dist/cjs/errors.js.map +1 -0
  47. package/dist/cjs/helpers.d.ts +21 -0
  48. package/dist/cjs/helpers.d.ts.map +1 -0
  49. package/dist/cjs/helpers.js +50 -0
  50. package/dist/cjs/helpers.js.map +1 -0
  51. package/dist/cjs/index.d.ts +67 -0
  52. package/dist/cjs/index.d.ts.map +1 -0
  53. package/dist/cjs/index.js +93 -0
  54. package/dist/cjs/index.js.map +1 -0
  55. package/dist/cjs/internal.d.ts +72 -0
  56. package/dist/cjs/internal.d.ts.map +1 -0
  57. package/dist/cjs/internal.js +182 -0
  58. package/dist/cjs/internal.js.map +1 -0
  59. package/dist/cjs/kzg.d.ts +14 -0
  60. package/dist/cjs/kzg.d.ts.map +1 -0
  61. package/dist/cjs/kzg.js +3 -0
  62. package/dist/cjs/kzg.js.map +1 -0
  63. package/dist/cjs/lock.d.ts +15 -0
  64. package/dist/cjs/lock.d.ts.map +1 -0
  65. package/dist/cjs/lock.js +45 -0
  66. package/dist/cjs/lock.js.map +1 -0
  67. package/dist/cjs/mapDB.d.ts +17 -0
  68. package/dist/cjs/mapDB.d.ts.map +1 -0
  69. package/dist/cjs/mapDB.js +46 -0
  70. package/dist/cjs/mapDB.js.map +1 -0
  71. package/dist/cjs/package.json +3 -0
  72. package/dist/cjs/provider.d.ts +46 -0
  73. package/dist/cjs/provider.d.ts.map +1 -0
  74. package/dist/cjs/provider.js +84 -0
  75. package/dist/cjs/provider.js.map +1 -0
  76. package/dist/cjs/request.d.ts +20 -0
  77. package/dist/cjs/request.d.ts.map +1 -0
  78. package/dist/cjs/request.js +35 -0
  79. package/dist/cjs/request.js.map +1 -0
  80. package/dist/cjs/signature.d.ts +47 -0
  81. package/dist/cjs/signature.d.ts.map +1 -0
  82. package/dist/cjs/signature.js +147 -0
  83. package/dist/cjs/signature.js.map +1 -0
  84. package/dist/cjs/tasks.d.ts +32 -0
  85. package/dist/cjs/tasks.d.ts.map +1 -0
  86. package/dist/cjs/tasks.js +51 -0
  87. package/dist/cjs/tasks.js.map +1 -0
  88. package/dist/cjs/types.d.ts +64 -0
  89. package/dist/cjs/types.d.ts.map +1 -0
  90. package/dist/cjs/types.js +78 -0
  91. package/dist/cjs/types.js.map +1 -0
  92. package/dist/cjs/units.d.ts +22 -0
  93. package/dist/cjs/units.d.ts.map +1 -0
  94. package/dist/cjs/units.js +51 -0
  95. package/dist/cjs/units.js.map +1 -0
  96. package/dist/cjs/withdrawal.d.ts +72 -0
  97. package/dist/cjs/withdrawal.d.ts.map +1 -0
  98. package/dist/cjs/withdrawal.js +93 -0
  99. package/dist/cjs/withdrawal.js.map +1 -0
  100. package/dist/esm/account.d.ts +165 -0
  101. package/dist/esm/account.d.ts.map +1 -0
  102. package/dist/esm/account.js +505 -0
  103. package/dist/esm/account.js.map +1 -0
  104. package/dist/esm/address.d.ts +67 -0
  105. package/dist/esm/address.d.ts.map +1 -0
  106. package/dist/esm/address.js +125 -0
  107. package/dist/esm/address.js.map +1 -0
  108. package/dist/esm/authorization.d.ts +41 -0
  109. package/dist/esm/authorization.d.ts.map +1 -0
  110. package/dist/esm/authorization.js +126 -0
  111. package/dist/esm/authorization.js.map +1 -0
  112. package/dist/esm/bal.d.ts +129 -0
  113. package/dist/esm/bal.d.ts.map +1 -0
  114. package/dist/esm/bal.js +522 -0
  115. package/dist/esm/bal.js.map +1 -0
  116. package/dist/esm/binaryTree.d.ts +148 -0
  117. package/dist/esm/binaryTree.d.ts.map +1 -0
  118. package/dist/esm/binaryTree.js +226 -0
  119. package/dist/esm/binaryTree.js.map +1 -0
  120. package/dist/esm/blobs.d.ts +76 -0
  121. package/dist/esm/blobs.d.ts.map +1 -0
  122. package/dist/esm/blobs.js +163 -0
  123. package/dist/esm/blobs.js.map +1 -0
  124. package/dist/esm/bytes.d.ts +291 -0
  125. package/dist/esm/bytes.d.ts.map +1 -0
  126. package/dist/esm/bytes.js +562 -0
  127. package/dist/esm/bytes.js.map +1 -0
  128. package/dist/esm/constants.d.ts +91 -0
  129. package/dist/esm/constants.d.ts.map +1 -0
  130. package/dist/esm/constants.js +94 -0
  131. package/dist/esm/constants.js.map +1 -0
  132. package/dist/esm/db.d.ts +65 -0
  133. package/dist/esm/db.d.ts.map +1 -0
  134. package/dist/esm/db.js +11 -0
  135. package/dist/esm/db.js.map +1 -0
  136. package/dist/esm/env.d.ts +9 -0
  137. package/dist/esm/env.d.ts.map +1 -0
  138. package/dist/esm/env.js +9 -0
  139. package/dist/esm/env.js.map +1 -0
  140. package/dist/esm/errors.d.ts +3 -0
  141. package/dist/esm/errors.d.ts.map +1 -0
  142. package/dist/esm/errors.js +14 -0
  143. package/dist/esm/errors.js.map +1 -0
  144. package/dist/esm/helpers.d.ts +21 -0
  145. package/dist/esm/helpers.d.ts.map +1 -0
  146. package/dist/esm/helpers.js +43 -0
  147. package/dist/esm/helpers.js.map +1 -0
  148. package/dist/esm/index.d.ts +67 -0
  149. package/dist/esm/index.d.ts.map +1 -0
  150. package/dist/esm/index.js +67 -0
  151. package/dist/esm/index.js.map +1 -0
  152. package/dist/esm/internal.d.ts +72 -0
  153. package/dist/esm/internal.d.ts.map +1 -0
  154. package/dist/esm/internal.js +170 -0
  155. package/dist/esm/internal.js.map +1 -0
  156. package/dist/esm/kzg.d.ts +14 -0
  157. package/dist/esm/kzg.d.ts.map +1 -0
  158. package/dist/esm/kzg.js +2 -0
  159. package/dist/esm/kzg.js.map +1 -0
  160. package/dist/esm/lock.d.ts +15 -0
  161. package/dist/esm/lock.d.ts.map +1 -0
  162. package/dist/esm/lock.js +41 -0
  163. package/dist/esm/lock.js.map +1 -0
  164. package/dist/esm/mapDB.d.ts +17 -0
  165. package/dist/esm/mapDB.d.ts.map +1 -0
  166. package/dist/esm/mapDB.js +42 -0
  167. package/dist/esm/mapDB.js.map +1 -0
  168. package/dist/esm/package.json +3 -0
  169. package/dist/esm/provider.d.ts +46 -0
  170. package/dist/esm/provider.d.ts.map +1 -0
  171. package/dist/esm/provider.js +79 -0
  172. package/dist/esm/provider.js.map +1 -0
  173. package/dist/esm/request.d.ts +20 -0
  174. package/dist/esm/request.d.ts.map +1 -0
  175. package/dist/esm/request.js +30 -0
  176. package/dist/esm/request.js.map +1 -0
  177. package/dist/esm/signature.d.ts +47 -0
  178. package/dist/esm/signature.d.ts.map +1 -0
  179. package/dist/esm/signature.js +137 -0
  180. package/dist/esm/signature.js.map +1 -0
  181. package/dist/esm/tasks.d.ts +32 -0
  182. package/dist/esm/tasks.d.ts.map +1 -0
  183. package/dist/esm/tasks.js +47 -0
  184. package/dist/esm/tasks.js.map +1 -0
  185. package/dist/esm/types.d.ts +64 -0
  186. package/dist/esm/types.d.ts.map +1 -0
  187. package/dist/esm/types.js +71 -0
  188. package/dist/esm/types.js.map +1 -0
  189. package/dist/esm/units.d.ts +22 -0
  190. package/dist/esm/units.d.ts.map +1 -0
  191. package/dist/esm/units.js +46 -0
  192. package/dist/esm/units.js.map +1 -0
  193. package/dist/esm/withdrawal.d.ts +72 -0
  194. package/dist/esm/withdrawal.d.ts.map +1 -0
  195. package/dist/esm/withdrawal.js +86 -0
  196. package/dist/esm/withdrawal.js.map +1 -0
  197. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
  198. package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
  199. package/package.json +116 -0
  200. package/src/account.ts +630 -0
  201. package/src/address.ts +158 -0
  202. package/src/authorization.ts +180 -0
  203. package/src/bal.ts +761 -0
  204. package/src/binaryTree.ts +353 -0
  205. package/src/blobs.ts +209 -0
  206. package/src/bytes.ts +659 -0
  207. package/src/constants.ts +125 -0
  208. package/src/db.ts +86 -0
  209. package/src/env.ts +9 -0
  210. package/src/errors.ts +28 -0
  211. package/src/helpers.ts +46 -0
  212. package/src/index.ts +88 -0
  213. package/src/internal.ts +212 -0
  214. package/src/kzg.ts +24 -0
  215. package/src/lock.ts +42 -0
  216. package/src/mapDB.ts +57 -0
  217. package/src/provider.ts +109 -0
  218. package/src/request.ts +48 -0
  219. package/src/signature.ts +202 -0
  220. package/src/tasks.ts +59 -0
  221. package/src/types.ts +177 -0
  222. package/src/units.ts +56 -0
  223. package/src/withdrawal.ts +133 -0
@@ -0,0 +1,529 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BlockLevelAccessList = void 0;
4
+ exports.createBlockLevelAccessList = createBlockLevelAccessList;
5
+ exports.createBlockLevelAccessListFromJSON = createBlockLevelAccessListFromJSON;
6
+ exports.createBlockLevelAccessListFromRLP = createBlockLevelAccessListFromRLP;
7
+ const rlp_1 = require("@feelyourprotocol/rlp");
8
+ const sha3_js_1 = require("@noble/hashes/sha3.js");
9
+ const bytes_ts_1 = require("./bytes.js");
10
+ const constants_ts_1 = require("./constants.js");
11
+ const internal_ts_1 = require("./internal.js");
12
+ /**
13
+ * Structural helper class for block level access lists
14
+ *
15
+ * EXPERIMENTAL: DO NOT USE IN PRODUCTION!
16
+ */
17
+ class BlockLevelAccessList {
18
+ constructor(accesses = {}) {
19
+ this.checkpoints = [];
20
+ // Track original (pre-transaction) balances for net-zero detection
21
+ this.originalBalances = new Map();
22
+ // Track original code at the start of each blockAccessIndex for each address
23
+ // Key format: `${address}-${blockAccessIndex}`
24
+ this.originalCodesAtIndex = new Map();
25
+ this.accesses = accesses;
26
+ this.blockAccessIndex = 0;
27
+ }
28
+ /**
29
+ * Serializes the block level access list to RLP.
30
+ *
31
+ * @returns the RLP encoded block level access list
32
+ */
33
+ serialize() {
34
+ return rlp_1.RLP.encode(this.raw());
35
+ }
36
+ /**
37
+ * This hash is used in the block header
38
+ *
39
+ * @returns the hash of the serialized block level access list
40
+ */
41
+ hash() {
42
+ return (0, sha3_js_1.keccak_256)(this.serialize());
43
+ }
44
+ checkpoint() {
45
+ this.checkpoints.push({
46
+ accesses: this.cloneAccesses(this.accesses),
47
+ blockAccessIndex: this.blockAccessIndex,
48
+ });
49
+ }
50
+ commit() {
51
+ if (this.checkpoints.length > 0) {
52
+ this.checkpoints.pop();
53
+ }
54
+ }
55
+ revert() {
56
+ const snapshot = this.checkpoints.pop();
57
+ if (!snapshot) {
58
+ return;
59
+ }
60
+ const current = this.accesses;
61
+ this.accesses = snapshot.accesses;
62
+ this.blockAccessIndex = snapshot.blockAccessIndex;
63
+ // Preserve address touches and storage reads across reverts.
64
+ // EIP-7928: When storage writes are reverted, the slot keys MUST still
65
+ // appear in storageReads since the slots were accessed (SSTORE reads
66
+ // the current value for gas calculation).
67
+ for (const [address, access] of Object.entries(current)) {
68
+ if (this.accesses[address] === undefined) {
69
+ // Collect both explicit reads and slots that were written (but will be reverted)
70
+ const allReads = new Set(access.storageReads);
71
+ for (const slot of Object.keys(access.storageChanges)) {
72
+ allReads.add(slot);
73
+ }
74
+ this.accesses[address] = {
75
+ nonceChanges: new Map(),
76
+ balanceChanges: new Map(),
77
+ codeChanges: [],
78
+ storageChanges: {},
79
+ storageReads: allReads,
80
+ };
81
+ continue;
82
+ }
83
+ const target = this.accesses[address];
84
+ // Preserve explicit storageReads
85
+ for (const slot of access.storageReads) {
86
+ target.storageReads.add(slot);
87
+ }
88
+ // EIP-7928: Convert reverted storageChanges to storageReads
89
+ for (const slot of Object.keys(access.storageChanges)) {
90
+ // Only add to reads if not already in the target's storageChanges
91
+ // (a successful write subsumes a read)
92
+ if (target.storageChanges[slot] === undefined) {
93
+ target.storageReads.add(slot);
94
+ }
95
+ }
96
+ }
97
+ }
98
+ cloneAccesses(accesses) {
99
+ const cloned = {};
100
+ for (const [address, access] of Object.entries(accesses)) {
101
+ const storageChanges = {};
102
+ for (const [slot, changes] of Object.entries(access.storageChanges)) {
103
+ storageChanges[slot] = changes.map(([index, value]) => [index, value]);
104
+ }
105
+ cloned[address] = {
106
+ nonceChanges: new Map(access.nonceChanges),
107
+ balanceChanges: new Map(access.balanceChanges),
108
+ codeChanges: access.codeChanges.map(([index, code]) => [index, code]),
109
+ storageChanges,
110
+ storageReads: new Set(access.storageReads),
111
+ };
112
+ }
113
+ return cloned;
114
+ }
115
+ /**
116
+ * Returns the raw block level access list with values
117
+ * correctly sorted.
118
+ *
119
+ * @returns the raw block level access list
120
+ */
121
+ raw() {
122
+ const bal = [];
123
+ for (const address of Object.keys(this.accesses)
124
+ .sort()
125
+ .filter((address) => shouldIncludeAddress(address, this.accesses[address]))) {
126
+ const data = this.accesses[address];
127
+ // Format storage changes: [slot, [[index, value], ...]]
128
+ // Normalize slot keys for canonical RLP encoding (0 -> empty bytes)
129
+ const storageChanges = Object.entries(data.storageChanges)
130
+ .sort((a, b) => compareLexicographicHexOrBytes(a[0], b[0]))
131
+ .map(([slot, changes]) => [
132
+ normalizeHexForRLP(slot),
133
+ changes
134
+ .sort((a, b) => a[0] - b[0])
135
+ .map(([index, value]) => [index, normalizeBytesForRLPQuantity(value)]),
136
+ ]);
137
+ // Normalize storage reads for canonical RLP encoding (0 -> empty bytes)
138
+ const storageReads = Array.from(data.storageReads)
139
+ .map(normalizeHexForRLP)
140
+ .sort((a, b) => compareLexicographicHexOrBytes(a, b));
141
+ const balanceChanges = Array.from(data.balanceChanges.entries())
142
+ .sort(([a], [b]) => a - b)
143
+ .map(([index, balance]) => [index, normalizeQuantityHexForRLP(balance)]);
144
+ const nonceChanges = Array.from(data.nonceChanges.entries())
145
+ .sort(([a], [b]) => a - b)
146
+ .map(([index, nonce]) => [index, normalizeQuantityHexForRLP(nonce)]);
147
+ const codeChanges = [...data.codeChanges].sort(([a], [b]) => a - b);
148
+ bal.push([
149
+ address,
150
+ storageChanges,
151
+ storageReads,
152
+ balanceChanges,
153
+ nonceChanges,
154
+ codeChanges,
155
+ ]);
156
+ }
157
+ return bal;
158
+ }
159
+ addAddress(address) {
160
+ if (this.accesses[address] !== undefined) {
161
+ return;
162
+ }
163
+ this.accesses[address] = {
164
+ storageChanges: {},
165
+ storageReads: new Set(),
166
+ balanceChanges: new Map(),
167
+ nonceChanges: new Map(),
168
+ codeChanges: [],
169
+ };
170
+ }
171
+ addStorageWrite(address, storageKey, value, blockAccessIndex, originalValue) {
172
+ const strippedKey = normalizeStorageKeyHex((0, bytes_ts_1.bytesToHex)(stripLeadingZeros(storageKey)));
173
+ const strippedValue = stripLeadingZeros(value);
174
+ const strippedOriginal = originalValue ? stripLeadingZeros(originalValue) : undefined;
175
+ const isZeroWrite = strippedValue.length === 0;
176
+ // EIP-7928: Check if this is a no-op write (value equals pre-transaction value)
177
+ // No-op writes should be recorded as reads, not changes.
178
+ // Note: Both empty arrays (zero values) compare equal via bytesToHex
179
+ let isNoOp = false;
180
+ if (strippedOriginal !== undefined) {
181
+ // We have original value - compare properly
182
+ isNoOp = (0, bytes_ts_1.bytesToHex)(strippedValue) === (0, bytes_ts_1.bytesToHex)(strippedOriginal);
183
+ }
184
+ else if (isZeroWrite) {
185
+ // No original value provided and writing zero - likely a no-op for system contracts
186
+ // reading empty slots. Treat as read for safety.
187
+ isNoOp = true;
188
+ }
189
+ // Only no-op writes (writing same value as original) are treated as reads
190
+ // EIP-7928: Zeroing a slot (pre-value exists, post-value is zero) IS a write
191
+ if (isNoOp) {
192
+ // EIP-7928: If a slot is written back to its original value (net-zero change),
193
+ // it should appear in storageReads, not storageChanges.
194
+ // This handles nested calls where intermediate frames write different values
195
+ // but the final value equals the original.
196
+ if (this.accesses[address] !== undefined) {
197
+ // Remove any existing storageChanges for this slot since final == original
198
+ delete this.accesses[address].storageChanges[strippedKey];
199
+ }
200
+ this.addStorageRead(address, storageKey);
201
+ return;
202
+ }
203
+ if (this.accesses[address] === undefined) {
204
+ this.addAddress(address);
205
+ }
206
+ if (this.accesses[address].storageChanges[strippedKey] === undefined) {
207
+ this.accesses[address].storageChanges[strippedKey] = [];
208
+ }
209
+ // For zero values, strippedValue is empty - this is correct for RLP encoding
210
+ this.accesses[address].storageChanges[strippedKey].push([blockAccessIndex, strippedValue]);
211
+ // Per EIP-7928: A successful storage write subsumes any prior read of the same slot.
212
+ // Remove the slot from storageReads since it's now in storageChanges.
213
+ this.accesses[address].storageReads.delete(strippedKey);
214
+ }
215
+ addStorageRead(address, storageKey) {
216
+ if (this.accesses[address] === undefined) {
217
+ this.addAddress(address);
218
+ }
219
+ const strippedKey = normalizeStorageKeyHex((0, bytes_ts_1.bytesToHex)(stripLeadingZeros(storageKey)));
220
+ // Per EIP-7928: Don't add to storageReads if the slot was already written.
221
+ // A write subsumes any reads of the same slot.
222
+ if (this.accesses[address].storageChanges[strippedKey] === undefined) {
223
+ this.accesses[address].storageReads.add(strippedKey);
224
+ }
225
+ }
226
+ addBalanceChange(address, balance, blockAccessIndex, originalBalance) {
227
+ if (this.accesses[address] === undefined) {
228
+ this.addAddress(address);
229
+ }
230
+ // EIP-7928: Track the original (pre-transaction) balance for net-zero detection
231
+ // Only set if not already tracked (first call wins)
232
+ if (originalBalance !== undefined && !this.originalBalances.has(address)) {
233
+ this.originalBalances.set(address, originalBalance);
234
+ }
235
+ this.accesses[address].balanceChanges.set(blockAccessIndex, padToEvenHex((0, bytes_ts_1.bytesToHex)(stripLeadingZeros((0, bytes_ts_1.bigIntToBytes)(balance)))));
236
+ }
237
+ /**
238
+ * EIP-7928: Remove balance changes for addresses where final balance equals first balance.
239
+ * Call this at the end of each transaction to clean up net-zero balance changes.
240
+ */
241
+ cleanupNetZeroBalanceChanges() {
242
+ for (const [address, originalBalance] of this.originalBalances.entries()) {
243
+ const access = this.accesses[address];
244
+ if (access === undefined || access.balanceChanges.size === 0) {
245
+ continue;
246
+ }
247
+ // Get the final balance (last entry in the balanceChanges map)
248
+ const entries = Array.from(access.balanceChanges.values());
249
+ const finalBalanceHex = entries[entries.length - 1];
250
+ const finalBalance = finalBalanceHex === '0x' ? BigInt(0) : BigInt(`0x${finalBalanceHex.replace(/^0x/, '')}`);
251
+ // EIP-7928: If final balance == original balance, remove all balanceChanges
252
+ // for the current blockAccessIndex only, but keep prior tx entries.
253
+ if (finalBalance === originalBalance) {
254
+ access.balanceChanges.delete(this.blockAccessIndex);
255
+ }
256
+ }
257
+ // Clear the tracking map for the next transaction
258
+ this.originalBalances.clear();
259
+ }
260
+ addNonceChange(address, nonce, blockAccessIndex) {
261
+ if (this.accesses[address] === undefined) {
262
+ this.addAddress(address);
263
+ }
264
+ this.accesses[address].nonceChanges.set(blockAccessIndex, padToEvenHex((0, bytes_ts_1.bigIntToHex)(nonce)));
265
+ }
266
+ addCodeChange(address, code, blockAccessIndex, originalCode) {
267
+ if (this.accesses[address] === undefined) {
268
+ this.addAddress(address);
269
+ }
270
+ const codeChanges = this.accesses[address].codeChanges;
271
+ // Track the original code at the start of this blockAccessIndex
272
+ const trackingKey = `${address}-${blockAccessIndex}`;
273
+ if (!this.originalCodesAtIndex.has(trackingKey) && originalCode !== undefined) {
274
+ this.originalCodesAtIndex.set(trackingKey, originalCode);
275
+ }
276
+ // Get the original code at the start of this blockAccessIndex
277
+ const originalCodeAtIndex = this.originalCodesAtIndex.get(trackingKey);
278
+ // Check if there's already a code change at this blockAccessIndex
279
+ const existingIndex = codeChanges.findIndex(([idx]) => idx === blockAccessIndex);
280
+ if (existingIndex !== -1) {
281
+ // Check if the new code equals the original code at start of this blockAccessIndex
282
+ // If so, remove the entry (net-zero change within this blockAccessIndex)
283
+ if (originalCodeAtIndex !== undefined &&
284
+ (0, bytes_ts_1.bytesToHex)(code) === (0, bytes_ts_1.bytesToHex)(originalCodeAtIndex)) {
285
+ codeChanges.splice(existingIndex, 1);
286
+ }
287
+ else {
288
+ // Update the existing entry with the new code
289
+ codeChanges[existingIndex] = [blockAccessIndex, code];
290
+ }
291
+ }
292
+ else {
293
+ // Add new entry, but only if code is actually different from originalCode
294
+ if (originalCode !== undefined && (0, bytes_ts_1.bytesToHex)(code) === (0, bytes_ts_1.bytesToHex)(originalCode)) {
295
+ // No actual change, don't record
296
+ return;
297
+ }
298
+ codeChanges.push([blockAccessIndex, code]);
299
+ }
300
+ }
301
+ /**
302
+ * EIP-7928: For selfdestructed accounts, drop all state changes while
303
+ * preserving read footprints. Any storageChanges are converted to storageReads.
304
+ *
305
+ * Per EIP-7928: "if the account had a positive balance pre-transaction,
306
+ * the balance change to zero MUST be recorded."
307
+ */
308
+ /**
309
+ * Converts the internal representation to the JSON format (BALJSONBlockAccessList).
310
+ * Inverse of createBlockLevelAccessListFromJSON().
311
+ */
312
+ toJSON() {
313
+ const result = [];
314
+ for (const [address, access] of Object.entries(this.accesses)
315
+ .sort(([a], [b]) => a.localeCompare(b))
316
+ .filter(([address, access]) => shouldIncludeAddress(address, access))) {
317
+ const storageChanges = Object.entries(access.storageChanges)
318
+ .sort(([a], [b]) => a.localeCompare(b))
319
+ .map(([slot, changes]) => ({
320
+ slot,
321
+ slotChanges: changes
322
+ .sort((a, b) => a[0] - b[0])
323
+ .map(([index, value]) => ({
324
+ blockAccessIndex: indexToHex(index),
325
+ postValue: padToEvenHex((0, bytes_ts_1.bytesToHex)(value)),
326
+ })),
327
+ }));
328
+ const storageReads = Array.from(access.storageReads).sort((a, b) => Number((a === '0x' ? 0n : (0, bytes_ts_1.hexToBigInt)(a)) -
329
+ (b === '0x' ? 0n : (0, bytes_ts_1.hexToBigInt)(b))));
330
+ const balanceChanges = Array.from(access.balanceChanges.entries())
331
+ .sort(([a], [b]) => a - b)
332
+ .map(([index, balance]) => ({
333
+ blockAccessIndex: indexToHex(index),
334
+ postBalance: balance,
335
+ }));
336
+ const nonceChanges = Array.from(access.nonceChanges.entries())
337
+ .sort(([a], [b]) => a - b)
338
+ .map(([index, nonce]) => ({
339
+ blockAccessIndex: indexToHex(index),
340
+ postNonce: nonce,
341
+ }));
342
+ const codeChanges = access.codeChanges.map(([index, code]) => ({
343
+ blockAccessIndex: indexToHex(index),
344
+ newCode: (0, bytes_ts_1.bytesToHex)(code),
345
+ }));
346
+ result.push({
347
+ address: address,
348
+ nonceChanges,
349
+ balanceChanges,
350
+ codeChanges,
351
+ storageChanges,
352
+ storageReads,
353
+ });
354
+ }
355
+ return result;
356
+ }
357
+ cleanupSelfdestructed(addresses) {
358
+ for (const address of addresses) {
359
+ const access = this.accesses[address];
360
+ if (access === undefined) {
361
+ continue;
362
+ }
363
+ // Convert any storageChanges into storageReads
364
+ for (const slot of Object.keys(access.storageChanges)) {
365
+ access.storageReads.add(slot);
366
+ }
367
+ access.storageChanges = {};
368
+ access.nonceChanges.clear();
369
+ access.codeChanges = [];
370
+ // EIP-7928: If the account had a positive pre-transaction balance,
371
+ // the balance change to zero MUST be recorded.
372
+ // The balance change to 0 is already added during SELFDESTRUCT execution.
373
+ // We only clear balance changes if pre-transaction balance was 0 (no actual change).
374
+ const originalBalance = this.originalBalances.get(address);
375
+ if (originalBalance === undefined || originalBalance === BigInt(0)) {
376
+ // Pre-transaction balance was 0 or unknown - clear balance changes
377
+ // (0 -> 0 is no change, so nothing to record)
378
+ access.balanceChanges.clear();
379
+ }
380
+ // If originalBalance > 0, keep the balance changes (which should show balance = 0)
381
+ }
382
+ }
383
+ }
384
+ exports.BlockLevelAccessList = BlockLevelAccessList;
385
+ function compareLexicographicHexOrBytes(a, b) {
386
+ const aBytes = a instanceof Uint8Array ? a : (0, bytes_ts_1.hexToBytes)(a);
387
+ const bBytes = b instanceof Uint8Array ? b : (0, bytes_ts_1.hexToBytes)(b);
388
+ const minLength = Math.min(aBytes.length, bBytes.length);
389
+ for (let i = 0; i < minLength; i++) {
390
+ if (aBytes[i] < bBytes[i])
391
+ return -1;
392
+ if (aBytes[i] > bBytes[i])
393
+ return 1;
394
+ }
395
+ if (aBytes.length < bBytes.length)
396
+ return -1;
397
+ if (aBytes.length > bBytes.length)
398
+ return 1;
399
+ return 0;
400
+ }
401
+ function createBlockLevelAccessList() {
402
+ return new BlockLevelAccessList();
403
+ }
404
+ function createBlockLevelAccessListFromJSON(json) {
405
+ const bal = new BlockLevelAccessList();
406
+ for (const account of json) {
407
+ bal.addAddress(account.address);
408
+ const access = bal.accesses[account.address];
409
+ for (const slotChange of account.storageChanges) {
410
+ const normalizedSlot = normalizeStorageKeyHex(slotChange.slot);
411
+ if (access.storageChanges[normalizedSlot] === undefined) {
412
+ access.storageChanges[normalizedSlot] = [];
413
+ }
414
+ for (const change of slotChange.slotChanges) {
415
+ access.storageChanges[normalizedSlot].push([
416
+ parseInt(change.blockAccessIndex, 16),
417
+ (0, bytes_ts_1.hexToBytes)(change.postValue),
418
+ ]);
419
+ }
420
+ }
421
+ for (const slot of account.storageReads) {
422
+ access.storageReads.add(normalizeStorageKeyHex(slot));
423
+ }
424
+ for (const change of account.balanceChanges) {
425
+ access.balanceChanges.set(parseInt(change.blockAccessIndex, 16), padToEvenHex(change.postBalance));
426
+ }
427
+ for (const change of account.nonceChanges) {
428
+ access.nonceChanges.set(parseInt(change.blockAccessIndex, 16), padToEvenHex(change.postNonce));
429
+ }
430
+ for (const change of account.codeChanges) {
431
+ access.codeChanges.push([parseInt(change.blockAccessIndex, 16), (0, bytes_ts_1.hexToBytes)(change.newCode)]);
432
+ }
433
+ }
434
+ return bal;
435
+ }
436
+ /**
437
+ * Normalizes a quantity-like hex string for canonical RLP encoding.
438
+ * Integer fields in the BAL use minimal big-endian encoding, so leading zero bytes
439
+ * are stripped and zero is encoded as empty bytes.
440
+ */
441
+ function normalizeHexForRLP(hex) {
442
+ const stripped = hex.slice(2).replace(/^0+/, '');
443
+ if (stripped === '') {
444
+ return Uint8Array.from([]);
445
+ }
446
+ return `0x${(0, internal_ts_1.padToEven)(stripped)}`;
447
+ }
448
+ function normalizeBytesForRLPQuantity(bytes) {
449
+ return stripLeadingZeros(bytes);
450
+ }
451
+ function normalizeQuantityHexForRLP(hex) {
452
+ const stripped = hex.slice(2).replace(/^0+/, '');
453
+ if (stripped === '') {
454
+ return '0x';
455
+ }
456
+ return `0x${(0, internal_ts_1.padToEven)(stripped)}`;
457
+ }
458
+ function createBlockLevelAccessListFromRLP(rlp) {
459
+ const decoded = rlp_1.RLP.decode(rlp);
460
+ const bal = new BlockLevelAccessList();
461
+ for (const account of decoded) {
462
+ const [addressBytes, storageChangesRaw, storageReadsRaw, balanceChangesRaw, nonceChangesRaw, codeChangesRaw,] = account;
463
+ const address = (0, bytes_ts_1.bytesToHex)(addressBytes);
464
+ bal.addAddress(address);
465
+ const access = bal.accesses[address];
466
+ for (const [slotBytes, slotChangesRaw] of storageChangesRaw) {
467
+ const slot = normalizeStorageKeyHex((0, bytes_ts_1.bytesToHex)(slotBytes));
468
+ if (access.storageChanges[slot] === undefined) {
469
+ access.storageChanges[slot] = [];
470
+ }
471
+ for (const [indexBytes, valueBytes] of slotChangesRaw) {
472
+ access.storageChanges[slot].push([(0, bytes_ts_1.bytesToInt)(indexBytes), valueBytes]);
473
+ }
474
+ }
475
+ for (const slotBytes of storageReadsRaw) {
476
+ access.storageReads.add(normalizeStorageKeyHex((0, bytes_ts_1.bytesToHex)(slotBytes)));
477
+ }
478
+ for (const [indexBytes, balanceBytes] of balanceChangesRaw) {
479
+ access.balanceChanges.set((0, bytes_ts_1.bytesToInt)(indexBytes), padToEvenHex((0, bytes_ts_1.bytesToHex)(balanceBytes)));
480
+ }
481
+ for (const [indexBytes, nonceBytes] of nonceChangesRaw) {
482
+ access.nonceChanges.set((0, bytes_ts_1.bytesToInt)(indexBytes), padToEvenHex((0, bytes_ts_1.bytesToHex)(nonceBytes)));
483
+ }
484
+ for (const [indexBytes, codeBytes] of codeChangesRaw) {
485
+ access.codeChanges.push([(0, bytes_ts_1.bytesToInt)(indexBytes), codeBytes]);
486
+ }
487
+ }
488
+ return bal;
489
+ }
490
+ function stripLeadingZeros(bytes) {
491
+ let first = bytes[0];
492
+ while (bytes.length > 0 && first.toString() === '0') {
493
+ bytes = bytes.slice(1);
494
+ first = bytes[0];
495
+ }
496
+ return bytes;
497
+ }
498
+ function padToEvenHex(hex) {
499
+ return `0x${(0, internal_ts_1.padToEven)(hex.slice(2))}`;
500
+ }
501
+ /**
502
+ * Normalizes a storage key hex string to ensure consistent even-length representation.
503
+ * - "0x" (empty bytes) is kept as is
504
+ * - "0x0" becomes "0x00"
505
+ * - Any odd-length hex is padded to even (e.g., "0x1" → "0x01")
506
+ */
507
+ function normalizeStorageKeyHex(hex) {
508
+ const stripped = hex.slice(2);
509
+ // Empty string "0x" stays as is
510
+ if (stripped === '') {
511
+ return '0x';
512
+ }
513
+ // Pad to even length (handles "0x0" → "0x00", "0x1" → "0x01", etc.)
514
+ return `0x${(0, internal_ts_1.padToEven)(stripped)}`;
515
+ }
516
+ function shouldIncludeAddress(address, access) {
517
+ if (address !== constants_ts_1.SYSTEM_ADDRESS) {
518
+ return true;
519
+ }
520
+ return (access.storageReads.size > 0 ||
521
+ Object.keys(access.storageChanges).length > 0 ||
522
+ access.balanceChanges.size > 0 ||
523
+ access.nonceChanges.size > 0 ||
524
+ access.codeChanges.length > 0);
525
+ }
526
+ function indexToHex(index) {
527
+ return padToEvenHex(`0x${index.toString(16)}`);
528
+ }
529
+ //# sourceMappingURL=bal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bal.js","sourceRoot":"","sources":["../../src/bal.ts"],"names":[],"mappings":"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"}