sol-dbg 0.6.13 → 0.7.1

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 (169) hide show
  1. package/dist/artifacts/helpers.d.ts +3 -3
  2. package/dist/artifacts/helpers.d.ts.map +1 -1
  3. package/dist/artifacts/helpers.js +17 -53
  4. package/dist/artifacts/helpers.js.map +1 -1
  5. package/dist/artifacts/solc.d.ts +1 -8
  6. package/dist/artifacts/solc.d.ts.map +1 -1
  7. package/dist/debug/abi.d.ts +11 -41
  8. package/dist/debug/abi.d.ts.map +1 -1
  9. package/dist/debug/abi.js +60 -294
  10. package/dist/debug/abi.js.map +1 -1
  11. package/dist/debug/artifact_manager/artifact_manager.d.ts +17 -42
  12. package/dist/debug/artifact_manager/artifact_manager.d.ts.map +1 -1
  13. package/dist/debug/artifact_manager/artifact_manager.js +82 -21
  14. package/dist/debug/artifact_manager/artifact_manager.js.map +1 -1
  15. package/dist/debug/artifact_manager/bytecode_templates.d.ts +1 -1
  16. package/dist/debug/artifact_manager/bytecode_templates.d.ts.map +1 -1
  17. package/dist/debug/artifact_manager/bytecode_templates.js +3 -2
  18. package/dist/debug/artifact_manager/bytecode_templates.js.map +1 -1
  19. package/dist/debug/artifact_manager/index.d.ts +1 -0
  20. package/dist/debug/artifact_manager/index.d.ts.map +1 -1
  21. package/dist/debug/artifact_manager/index.js +1 -0
  22. package/dist/debug/artifact_manager/index.js.map +1 -1
  23. package/dist/debug/artifact_manager/types.d.ts +129 -0
  24. package/dist/debug/artifact_manager/types.d.ts.map +1 -0
  25. package/dist/debug/artifact_manager/types.js +12 -0
  26. package/dist/debug/artifact_manager/types.js.map +1 -0
  27. package/dist/debug/decoding/calldata/index.d.ts +2 -0
  28. package/dist/debug/decoding/calldata/index.d.ts.map +1 -0
  29. package/dist/debug/decoding/calldata/index.js +6 -0
  30. package/dist/debug/decoding/calldata/index.js.map +1 -0
  31. package/dist/debug/decoding/calldata/view.d.ts +74 -0
  32. package/dist/debug/decoding/calldata/view.d.ts.map +1 -0
  33. package/dist/debug/decoding/calldata/view.js +397 -0
  34. package/dist/debug/decoding/calldata/view.js.map +1 -0
  35. package/dist/debug/decoding/exp_types.d.ts +46 -0
  36. package/dist/debug/decoding/exp_types.d.ts.map +1 -0
  37. package/dist/debug/decoding/exp_types.js +202 -0
  38. package/dist/debug/decoding/exp_types.js.map +1 -0
  39. package/dist/debug/decoding/general.d.ts +5 -9
  40. package/dist/debug/decoding/general.d.ts.map +1 -1
  41. package/dist/debug/decoding/general.js +25 -103
  42. package/dist/debug/decoding/general.js.map +1 -1
  43. package/dist/debug/decoding/index.d.ts +1 -0
  44. package/dist/debug/decoding/index.d.ts.map +1 -1
  45. package/dist/debug/decoding/index.js +1 -0
  46. package/dist/debug/decoding/index.js.map +1 -1
  47. package/dist/debug/decoding/memory/index.d.ts +2 -0
  48. package/dist/debug/decoding/memory/index.d.ts.map +1 -0
  49. package/dist/debug/decoding/memory/index.js +6 -0
  50. package/dist/debug/decoding/memory/index.js.map +1 -0
  51. package/dist/debug/decoding/memory/view.d.ts +44 -0
  52. package/dist/debug/decoding/memory/view.d.ts.map +1 -0
  53. package/dist/debug/decoding/memory/view.js +183 -0
  54. package/dist/debug/decoding/memory/view.js.map +1 -0
  55. package/dist/debug/decoding/stack/index.d.ts +2 -0
  56. package/dist/debug/decoding/stack/index.d.ts.map +1 -0
  57. package/dist/debug/decoding/stack/index.js +6 -0
  58. package/dist/debug/decoding/stack/index.js.map +1 -0
  59. package/dist/debug/decoding/stack/view.d.ts +29 -0
  60. package/dist/debug/decoding/stack/view.d.ts.map +1 -0
  61. package/dist/debug/decoding/stack/view.js +116 -0
  62. package/dist/debug/decoding/stack/view.js.map +1 -0
  63. package/dist/debug/decoding/storage/index.d.ts +2 -0
  64. package/dist/debug/decoding/storage/index.d.ts.map +1 -0
  65. package/dist/debug/decoding/storage/index.js +6 -0
  66. package/dist/debug/decoding/storage/index.js.map +1 -0
  67. package/dist/debug/decoding/storage/view.d.ts +90 -0
  68. package/dist/debug/decoding/storage/view.d.ts.map +1 -0
  69. package/dist/debug/decoding/storage/view.js +465 -0
  70. package/dist/debug/decoding/storage/view.js.map +1 -0
  71. package/dist/debug/decoding/utils.d.ts +17 -0
  72. package/dist/debug/decoding/utils.d.ts.map +1 -0
  73. package/dist/debug/decoding/utils.js +43 -0
  74. package/dist/debug/decoding/utils.js.map +1 -0
  75. package/dist/debug/decoding/value.d.ts +50 -0
  76. package/dist/debug/decoding/value.d.ts.map +1 -0
  77. package/dist/debug/decoding/value.js +106 -0
  78. package/dist/debug/decoding/value.js.map +1 -0
  79. package/dist/debug/decoding/view.d.ts +20 -0
  80. package/dist/debug/decoding/view.d.ts.map +1 -0
  81. package/dist/debug/decoding/view.js +15 -0
  82. package/dist/debug/decoding/view.js.map +1 -0
  83. package/dist/debug/foundry_cheatcodes.js +6 -6
  84. package/dist/debug/foundry_cheatcodes.js.map +1 -1
  85. package/dist/debug/layout.d.ts +4 -6
  86. package/dist/debug/layout.d.ts.map +1 -1
  87. package/dist/debug/layout.js +13 -77
  88. package/dist/debug/layout.js.map +1 -1
  89. package/dist/debug/opcode_interposing.js +3 -3
  90. package/dist/debug/opcode_interposing.js.map +1 -1
  91. package/dist/debug/opcodes.d.ts.map +1 -1
  92. package/dist/debug/opcodes.js +3 -1
  93. package/dist/debug/opcodes.js.map +1 -1
  94. package/dist/debug/tracers/sol_debugger.d.ts.map +1 -1
  95. package/dist/debug/tracers/sol_debugger.js +2 -1
  96. package/dist/debug/tracers/sol_debugger.js.map +1 -1
  97. package/dist/debug/tracers/transformers/basic_info.d.ts.map +1 -1
  98. package/dist/debug/tracers/transformers/basic_info.js +4 -3
  99. package/dist/debug/tracers/transformers/basic_info.js.map +1 -1
  100. package/dist/debug/tracers/transformers/events.js +2 -2
  101. package/dist/debug/tracers/transformers/events.js.map +1 -1
  102. package/dist/debug/tracers/transformers/exc_info.d.ts +15 -0
  103. package/dist/debug/tracers/transformers/exc_info.d.ts.map +1 -0
  104. package/dist/debug/tracers/transformers/exc_info.js +39 -0
  105. package/dist/debug/tracers/transformers/exc_info.js.map +1 -0
  106. package/dist/debug/tracers/transformers/ext_stack.d.ts.map +1 -1
  107. package/dist/debug/tracers/transformers/ext_stack.js +11 -26
  108. package/dist/debug/tracers/transformers/ext_stack.js.map +1 -1
  109. package/dist/debug/tracers/transformers/index.d.ts +1 -0
  110. package/dist/debug/tracers/transformers/index.d.ts.map +1 -1
  111. package/dist/debug/tracers/transformers/index.js +1 -0
  112. package/dist/debug/tracers/transformers/index.js.map +1 -1
  113. package/dist/debug/tracers/transformers/int_stack.d.ts.map +1 -1
  114. package/dist/debug/tracers/transformers/int_stack.js +5 -13
  115. package/dist/debug/tracers/transformers/int_stack.js.map +1 -1
  116. package/dist/debug/tracers/transformers/keccak256_invert.js +4 -4
  117. package/dist/debug/tracers/transformers/keccak256_invert.js.map +1 -1
  118. package/dist/debug/tracers/transformers/ret_info.d.ts +1 -1
  119. package/dist/debug/tracers/transformers/ret_info.d.ts.map +1 -1
  120. package/dist/debug/tracers/transformers/ret_info.js +46 -32
  121. package/dist/debug/tracers/transformers/ret_info.js.map +1 -1
  122. package/dist/debug/types.d.ts +63 -22
  123. package/dist/debug/types.d.ts.map +1 -1
  124. package/dist/debug/types.js.map +1 -1
  125. package/dist/utils/index.d.ts +1 -0
  126. package/dist/utils/index.d.ts.map +1 -1
  127. package/dist/utils/index.js +1 -0
  128. package/dist/utils/index.js.map +1 -1
  129. package/dist/utils/misc.d.ts +16 -11
  130. package/dist/utils/misc.d.ts.map +1 -1
  131. package/dist/utils/misc.js +37 -49
  132. package/dist/utils/misc.js.map +1 -1
  133. package/dist/utils/pp.d.ts +3 -1
  134. package/dist/utils/pp.d.ts.map +1 -1
  135. package/dist/utils/pp.js +10 -27
  136. package/dist/utils/pp.js.map +1 -1
  137. package/dist/utils/solidity.d.ts +11 -0
  138. package/dist/utils/solidity.d.ts.map +1 -0
  139. package/dist/utils/solidity.js +69 -0
  140. package/dist/utils/solidity.js.map +1 -0
  141. package/dist/utils/test_runner.d.ts +5 -2
  142. package/dist/utils/test_runner.d.ts.map +1 -1
  143. package/dist/utils/test_runner.js +11 -7
  144. package/dist/utils/test_runner.js.map +1 -1
  145. package/dist/utils/trace.d.ts +5 -1
  146. package/dist/utils/trace.d.ts.map +1 -1
  147. package/dist/utils/trace.js +16 -0
  148. package/dist/utils/trace.js.map +1 -1
  149. package/dist/utils/types.d.ts +9 -0
  150. package/dist/utils/types.d.ts.map +1 -0
  151. package/dist/utils/types.js +3 -0
  152. package/dist/utils/types.js.map +1 -0
  153. package/package.json +8 -4
  154. package/dist/debug/decoding/calldata.d.ts +0 -6
  155. package/dist/debug/decoding/calldata.d.ts.map +0 -1
  156. package/dist/debug/decoding/calldata.js +0 -244
  157. package/dist/debug/decoding/calldata.js.map +0 -1
  158. package/dist/debug/decoding/memory.d.ts +0 -4
  159. package/dist/debug/decoding/memory.d.ts.map +0 -1
  160. package/dist/debug/decoding/memory.js +0 -216
  161. package/dist/debug/decoding/memory.js.map +0 -1
  162. package/dist/debug/decoding/stack.d.ts +0 -9
  163. package/dist/debug/decoding/stack.d.ts.map +0 -1
  164. package/dist/debug/decoding/stack.js +0 -84
  165. package/dist/debug/decoding/stack.js.map +0 -1
  166. package/dist/debug/decoding/storage.d.ts +0 -7
  167. package/dist/debug/decoding/storage.d.ts.map +0 -1
  168. package/dist/debug/decoding/storage.js +0 -393
  169. package/dist/debug/decoding/storage.js.map +0 -1
@@ -0,0 +1,397 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MissingCalldataView = exports.PointerCalldataView = exports.StructCalldataView = exports.ArraySliceCalldataView = exports.ArrayCalldataView = exports.BaseArrayCalldataView = exports.TupleCalldataView = exports.StringCalldataView = exports.BytesCalldataView = exports.FixedBytesCalldataView = exports.AddressCalldataView = exports.BoolCalldataView = exports.IntCalldataView = exports.BaseCalldataView = void 0;
4
+ exports.makeCalldataView = makeCalldataView;
5
+ exports.makeCalldataViews = makeCalldataViews;
6
+ const solc_typed_ast_1 = require("solc-typed-ast");
7
+ const value_1 = require("../value");
8
+ const view_1 = require("../view");
9
+ const utils_1 = require("../../../utils");
10
+ const util_1 = require("@ethereumjs/util");
11
+ const utils_2 = require("../utils");
12
+ const exp_types_1 = require("../exp_types");
13
+ /**
14
+ * Return true IFF the given type is "dynamic". I,e. its size is not statically known.
15
+ * @param t
16
+ * @param infer
17
+ * @returns
18
+ */
19
+ function isTypeDynamic(t) {
20
+ if (t instanceof solc_typed_ast_1.BytesType || t instanceof solc_typed_ast_1.StringType) {
21
+ return true;
22
+ }
23
+ if (t instanceof solc_typed_ast_1.ArrayType) {
24
+ return t.size === undefined || isTypeDynamic(t.elementT);
25
+ }
26
+ if (t instanceof solc_typed_ast_1.TupleType) {
27
+ for (const elementT of t.elements) {
28
+ if (elementT && isTypeDynamic(elementT)) {
29
+ return true;
30
+ }
31
+ }
32
+ }
33
+ if (t instanceof exp_types_1.ExpStructType) {
34
+ for (const [, fieldT] of t.fields) {
35
+ if (isTypeDynamic(fieldT)) {
36
+ return true;
37
+ }
38
+ }
39
+ }
40
+ if (t instanceof solc_typed_ast_1.PointerType) {
41
+ return isTypeDynamic(t.to);
42
+ }
43
+ return false;
44
+ }
45
+ /**
46
+ * Return the calldata head size for a given type. This is `len(head(X))` in the notation of
47
+ * https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding
48
+ *
49
+ * @param t
50
+ * @param infer
51
+ * @returns
52
+ */
53
+ function headSize(t) {
54
+ if (isTypeDynamic(t)) {
55
+ return 32;
56
+ }
57
+ if (t instanceof solc_typed_ast_1.TupleType) {
58
+ let size = 0;
59
+ for (const elT of t.elements) {
60
+ const elSize = headSize(elT);
61
+ if (elSize === undefined) {
62
+ return undefined;
63
+ }
64
+ size += elSize;
65
+ }
66
+ return size;
67
+ }
68
+ if (t instanceof solc_typed_ast_1.ArrayType) {
69
+ (0, solc_typed_ast_1.assert)(t.size !== undefined, `Statically sized array types must have a size`);
70
+ const elSize = headSize(t.elementT);
71
+ if (elSize === undefined) {
72
+ return undefined;
73
+ }
74
+ return elSize * Number(t.size);
75
+ }
76
+ if (t instanceof exp_types_1.ExpStructType) {
77
+ let size = 0;
78
+ for (const [, fieldT] of t.fields) {
79
+ const fieldSize = headSize(fieldT);
80
+ if (fieldSize === undefined) {
81
+ return undefined;
82
+ }
83
+ size += fieldSize;
84
+ }
85
+ return size;
86
+ }
87
+ if (t instanceof solc_typed_ast_1.IntType ||
88
+ t instanceof solc_typed_ast_1.BoolType ||
89
+ t instanceof solc_typed_ast_1.FixedBytesType ||
90
+ t instanceof solc_typed_ast_1.AddressType) {
91
+ return 32;
92
+ }
93
+ if (t instanceof solc_typed_ast_1.PointerType) {
94
+ return headSize(t.to);
95
+ }
96
+ if (t instanceof exp_types_1.MissingType) {
97
+ if (t.rawTypeName === undefined) {
98
+ return undefined;
99
+ }
100
+ // Small optimization - if we can guess this is a dynamic array of an unknown
101
+ // element type, we still know the head size is 32.
102
+ if ((0, utils_2.isTypeStringDynamicArray)(t.rawTypeName.typeString)) {
103
+ return 32;
104
+ }
105
+ }
106
+ (0, utils_1.nyi)(`Statically sized type ${t.pp()}`);
107
+ }
108
+ class BaseCalldataView extends view_1.View {
109
+ constructor(type, loc, base) {
110
+ super(type, loc);
111
+ this.base = base;
112
+ }
113
+ readMemAt(off, calldata, len) {
114
+ const actualOffset = this.base + BigInt(off);
115
+ const res = (0, utils_1.readMem)(actualOffset, len, calldata);
116
+ if (!res) {
117
+ // OoB access
118
+ return new value_1.DecodingFailure(`OoB access at ${actualOffset}:${actualOffset + BigInt(len)} in memory of size ${calldata.length}`);
119
+ }
120
+ return res;
121
+ }
122
+ decodeIntAt(offset, typ, calldata) {
123
+ const bytes = this.readMemAt(offset, calldata, 32);
124
+ if ((0, utils_2.isFailure)(bytes)) {
125
+ return bytes;
126
+ }
127
+ let res = (0, utils_1.bigEndianBufToBigint)(bytes);
128
+ // Convert signed negative 2's complement values
129
+ if (typ.signed && (res & (BigInt(1) << BigInt(typ.nBits - 1))) !== BigInt(0)) {
130
+ // Mask out any 1's above the number's size
131
+ res = res & ((BigInt(1) << BigInt(typ.nBits)) - BigInt(1));
132
+ res = -((BigInt(1) << BigInt(typ.nBits)) - res);
133
+ }
134
+ if (!(0, utils_1.fits)(res, typ)) {
135
+ return new value_1.DecodingFailure(`Decoded value ${res} doesnt fit in type ${this.type.pp()}`);
136
+ }
137
+ return res;
138
+ }
139
+ decodeBytesAt(loc, state) {
140
+ const len = this.decodeIntAt(loc, utils_1.uint256, state);
141
+ if ((0, utils_2.isFailure)(len)) {
142
+ return len;
143
+ }
144
+ if (len >= utils_1.MAX_ARR_DECODE_LIMIT) {
145
+ return new value_1.DecodingFailure(`Bytes to decode too large - ${len}`);
146
+ }
147
+ return this.readMemAt(loc + 32n, state, len);
148
+ }
149
+ decodeTupleAt(loc, curBase, type, state) {
150
+ let base = curBase;
151
+ if (isTypeDynamic(type)) {
152
+ base = loc + curBase;
153
+ loc = 0n;
154
+ }
155
+ const res = [];
156
+ let failRemaining = false;
157
+ for (const t of type.elements) {
158
+ if (failRemaining) {
159
+ res.push(new value_1.DecodingFailure(`Failed due to earlier failure.`));
160
+ }
161
+ (0, solc_typed_ast_1.assert)(t !== null, `Unexpected null element in tuple type {0}`, type);
162
+ res.push(makeCalldataView(t, loc, base).decode(state));
163
+ const tSize = headSize(t);
164
+ if (tSize === undefined) {
165
+ failRemaining = true;
166
+ }
167
+ else {
168
+ loc += BigInt(tSize);
169
+ }
170
+ }
171
+ return res;
172
+ }
173
+ pp() {
174
+ return `<${this.type.pp()}@${this.loc + this.base} in calldata>`;
175
+ }
176
+ }
177
+ exports.BaseCalldataView = BaseCalldataView;
178
+ /**
179
+ * View to an IntType in calldata
180
+ */
181
+ class IntCalldataView extends BaseCalldataView {
182
+ decode(state) {
183
+ return this.decodeIntAt(this.loc, this.type, state);
184
+ }
185
+ }
186
+ exports.IntCalldataView = IntCalldataView;
187
+ /**
188
+ * View to a BoolType in calldata
189
+ */
190
+ class BoolCalldataView extends BaseCalldataView {
191
+ decode(state) {
192
+ const intV = this.decodeIntAt(this.loc, utils_1.uint256, state);
193
+ if ((0, utils_2.isFailure)(intV)) {
194
+ return intV;
195
+ }
196
+ return intV !== 0n;
197
+ }
198
+ }
199
+ exports.BoolCalldataView = BoolCalldataView;
200
+ /**
201
+ * View to an Address in calldata
202
+ */
203
+ class AddressCalldataView extends BaseCalldataView {
204
+ decode(state) {
205
+ const m = this.readMemAt(this.loc, state, 32);
206
+ if ((0, utils_2.isFailure)(m)) {
207
+ return m;
208
+ }
209
+ return new util_1.Address(m.slice(12));
210
+ }
211
+ }
212
+ exports.AddressCalldataView = AddressCalldataView;
213
+ /**
214
+ * View to an FixedBytes in calldata
215
+ */
216
+ class FixedBytesCalldataView extends BaseCalldataView {
217
+ decode(state) {
218
+ return this.readMemAt(this.loc, state, this.type.size);
219
+ }
220
+ }
221
+ exports.FixedBytesCalldataView = FixedBytesCalldataView;
222
+ class BytesCalldataView extends BaseCalldataView {
223
+ decode(state) {
224
+ return this.decodeBytesAt(this.loc, state);
225
+ }
226
+ }
227
+ exports.BytesCalldataView = BytesCalldataView;
228
+ class StringCalldataView extends BaseCalldataView {
229
+ decode(state) {
230
+ const bytes = this.decodeBytesAt(this.loc, state);
231
+ if ((0, utils_2.isFailure)(bytes)) {
232
+ return bytes;
233
+ }
234
+ return (0, util_1.bytesToUtf8)(bytes);
235
+ }
236
+ }
237
+ exports.StringCalldataView = StringCalldataView;
238
+ class TupleCalldataView extends BaseCalldataView {
239
+ decode(state) {
240
+ let offset = this.loc;
241
+ if (isTypeDynamic(this.type)) {
242
+ offset = this.decodeIntAt(offset, utils_1.uint256, state);
243
+ if ((0, utils_2.isFailure)(offset)) {
244
+ return offset;
245
+ }
246
+ }
247
+ return this.decodeTupleAt(offset, this.base, this.type, state);
248
+ }
249
+ }
250
+ exports.TupleCalldataView = TupleCalldataView;
251
+ class BaseArrayCalldataView extends BaseCalldataView {
252
+ decodeArray(baseOff, bigIntSize, state) {
253
+ if (!(0, utils_2.inRange)(bigIntSize, 0, utils_1.MAX_ARR_DECODE_LIMIT)) {
254
+ return new value_1.DecodingFailure(`Array too large ${bigIntSize}`);
255
+ }
256
+ const size = Number(bigIntSize);
257
+ const res = [];
258
+ let off = 0n;
259
+ const newBase = baseOff + this.base;
260
+ const hs = headSize(this.type.elementT);
261
+ if (hs === undefined) {
262
+ return new value_1.DecodingFailure(`Can't compute head size of ${this.type.elementT.pp()}`);
263
+ }
264
+ const elSize = BigInt(hs);
265
+ for (let i = 0; i < size; i++) {
266
+ const elView = makeCalldataView(this.type.elementT, off, newBase);
267
+ res.push(elView.decode(state));
268
+ off += elSize;
269
+ }
270
+ return res;
271
+ }
272
+ }
273
+ exports.BaseArrayCalldataView = BaseArrayCalldataView;
274
+ class ArrayCalldataView extends BaseArrayCalldataView {
275
+ decode(state) {
276
+ let baseOff = this.loc;
277
+ // Dynamic sized arrays have length at the start. Fixed sized arrays do
278
+ // not.
279
+ let bigintSize;
280
+ if (this.type.size !== undefined) {
281
+ bigintSize = this.type.size;
282
+ }
283
+ else {
284
+ bigintSize = this.decodeIntAt(baseOff, utils_1.uint256, state);
285
+ if ((0, utils_2.isFailure)(bigintSize)) {
286
+ return bigintSize;
287
+ }
288
+ baseOff += 32n;
289
+ }
290
+ return this.decodeArray(baseOff, bigintSize, state);
291
+ }
292
+ }
293
+ exports.ArrayCalldataView = ArrayCalldataView;
294
+ /**
295
+ * An ArraySliceView is only created from stack locations. It should not be created in makeCalldataView.
296
+ */
297
+ class ArraySliceCalldataView extends BaseArrayCalldataView {
298
+ constructor(type, loc, len) {
299
+ super(type, loc, 0n);
300
+ this.len = len;
301
+ }
302
+ decode(state) {
303
+ return this.decodeArray(this.loc, this.len, state);
304
+ }
305
+ }
306
+ exports.ArraySliceCalldataView = ArraySliceCalldataView;
307
+ class StructCalldataView extends BaseCalldataView {
308
+ decode(state) {
309
+ const offset = this.loc;
310
+ const values = this.decodeTupleAt(offset, this.base, new solc_typed_ast_1.TupleType(this.type.fields.map(([, type]) => type)), state);
311
+ return new value_1.Struct((0, utils_1.zip)(this.type.fields.map(([name]) => name), values));
312
+ }
313
+ }
314
+ exports.StructCalldataView = StructCalldataView;
315
+ class PointerCalldataView extends BaseCalldataView {
316
+ decode(state) {
317
+ let off = this.loc;
318
+ if (isTypeDynamic(this.type.to)) {
319
+ off = this.decodeIntAt(off, utils_1.uint256, state);
320
+ if ((0, utils_2.isFailure)(off)) {
321
+ return off;
322
+ }
323
+ }
324
+ const innerView = makeCalldataView(this.type.to, off, this.base);
325
+ return innerView.decode(state);
326
+ }
327
+ }
328
+ exports.PointerCalldataView = PointerCalldataView;
329
+ class MissingCalldataView extends BaseCalldataView {
330
+ decode() {
331
+ return new value_1.DecodingFailure(`${this.type.rawTypeName ? this.type.rawTypeName.type : "<unknown>"}`);
332
+ }
333
+ }
334
+ exports.MissingCalldataView = MissingCalldataView;
335
+ function makeCalldataView(type, loc, base) {
336
+ if (type instanceof solc_typed_ast_1.IntType) {
337
+ return new IntCalldataView(type, loc, base);
338
+ }
339
+ if (type instanceof solc_typed_ast_1.BoolType) {
340
+ return new BoolCalldataView(type, loc, base);
341
+ }
342
+ if (type instanceof solc_typed_ast_1.AddressType) {
343
+ return new AddressCalldataView(type, loc, base);
344
+ }
345
+ if (type instanceof solc_typed_ast_1.FixedBytesType) {
346
+ return new FixedBytesCalldataView(type, loc, base);
347
+ }
348
+ if (type instanceof solc_typed_ast_1.TupleType) {
349
+ return new TupleCalldataView(type, loc, base);
350
+ }
351
+ if (type instanceof solc_typed_ast_1.BytesType) {
352
+ return new BytesCalldataView(type, loc, base);
353
+ }
354
+ if (type instanceof solc_typed_ast_1.StringType) {
355
+ return new StringCalldataView(type, loc, base);
356
+ }
357
+ if (type instanceof solc_typed_ast_1.ArrayType) {
358
+ return new ArrayCalldataView(type, loc, base);
359
+ }
360
+ if (type instanceof exp_types_1.ExpStructType) {
361
+ return new StructCalldataView(type, loc, base);
362
+ }
363
+ if (type instanceof solc_typed_ast_1.TupleType) {
364
+ return new TupleCalldataView(type, loc, base);
365
+ }
366
+ if (type instanceof solc_typed_ast_1.PointerType) {
367
+ return new PointerCalldataView(type, loc, base);
368
+ }
369
+ if (type instanceof exp_types_1.MissingType) {
370
+ return new MissingCalldataView(type, loc, base);
371
+ }
372
+ (0, utils_1.nyi)(`makeCalldataView(${type.pp()})`);
373
+ }
374
+ function makeCalldataViews(types, base) {
375
+ let off = 0n;
376
+ const res = [];
377
+ let failRemaining = false;
378
+ for (const t of types) {
379
+ // If we have missing type info at an earlier type, and we can't compute its head size,
380
+ // we make all remaining views "missing"
381
+ if (failRemaining) {
382
+ res.push(new MissingCalldataView(new exp_types_1.MissingType(undefined), off, base));
383
+ continue;
384
+ }
385
+ const view = makeCalldataView(t, off, base);
386
+ res.push(view);
387
+ const hs = headSize(t);
388
+ if (hs === undefined) {
389
+ failRemaining = true;
390
+ }
391
+ else {
392
+ off += BigInt(hs);
393
+ }
394
+ }
395
+ return res;
396
+ }
397
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../../src/debug/decoding/calldata/view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { ContractDefinition, DataLocation, InferType, TypeName, TypeNode } from "solc-typed-ast";
2
+ /**
3
+ * An internal struct type that converts all field VariableDeclaration(s) to
4
+ * TypeNode(s). This way handling this type doesn't require an InferType
5
+ * instance.
6
+ */
7
+ export declare class ExpStructType extends TypeNode {
8
+ readonly name: string;
9
+ readonly fields: Array<[string, TypeNode]>;
10
+ readonly rawType: TypeNode | undefined;
11
+ constructor(name: string, fields: Array<[string, TypeNode]>, rawType?: TypeNode | undefined);
12
+ pp(): string;
13
+ }
14
+ /**
15
+ * Simplify the given solc-typed-ast types for use in encoding. This does the following conversions:
16
+ *
17
+ * - Convert `UserDefinedType(StructDefinition)` to `ExpStructType`
18
+ * - Convert `UserDefinedType(UserDefinedValueTypeDefinition)` to the underlying type
19
+ * - Convert `UserDefinedType(ContractDefinition)` to address
20
+ *
21
+ * in the given rawT
22
+ * @param rawT
23
+ */
24
+ export declare function simplifyType(rawT: TypeNode, infer: InferType, loc: DataLocation | undefined): TypeNode;
25
+ export declare class MissingType extends TypeNode {
26
+ readonly rawTypeName: TypeName | undefined;
27
+ constructor(rawTypeName: TypeName | undefined);
28
+ pp(): string;
29
+ }
30
+ /**
31
+ * Given a `ContractDefinition` try and compute an `ExpStructType` struct that
32
+ * describes the layout of the class. This takes into account all base classes,
33
+ * and simplifies types using `simplifyType`.
34
+ *
35
+ * Since we may be missing AST information for some user-defined types, or even
36
+ * entire bases, the layout may be partial. It may be only up to a given base,
37
+ * and it may be missing exact type information for certain fields.
38
+ *
39
+ * We return a tuple with the resulting layout, and a boolean specifying whether
40
+ * the layout is complete.
41
+ *
42
+ * @param def
43
+ * @param infer
44
+ */
45
+ export declare function getContractLayoutType(contract: ContractDefinition, infer: InferType): [ExpStructType, boolean];
46
+ //# sourceMappingURL=exp_types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exp_types.d.ts","sourceRoot":"","sources":["../../../src/debug/decoding/exp_types.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,kBAAkB,EAClB,YAAY,EAGZ,SAAS,EAMT,QAAQ,EACR,QAAQ,EAKX,MAAM,gBAAgB,CAAC;AAIxB;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,QAAQ;aAEnB,IAAI,EAAE,MAAM;aACZ,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;aACjC,OAAO,EAAE,QAAQ,GAAG,SAAS;gBAF7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EACjC,OAAO,GAAE,QAAQ,GAAG,SAAqB;IAK7D,EAAE,IAAI,MAAM;CAGf;AAgDD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CACxB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,YAAY,GAAG,SAAS,GAC9B,QAAQ,CAyEV;AAED,qBAAa,WAAY,SAAQ,QAAQ;aACT,WAAW,EAAE,QAAQ,GAAG,SAAS;gBAAjC,WAAW,EAAE,QAAQ,GAAG,SAAS;IAI7D,EAAE,IAAI,MAAM;CAGf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACjC,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,SAAS,GACjB,CAAC,aAAa,EAAE,OAAO,CAAC,CA8C1B"}
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MissingType = exports.ExpStructType = void 0;
4
+ exports.simplifyType = simplifyType;
5
+ exports.getContractLayoutType = getContractLayoutType;
6
+ const solc_typed_ast_1 = require("solc-typed-ast");
7
+ const utils_1 = require("../../utils");
8
+ const utils_2 = require("./utils");
9
+ /**
10
+ * An internal struct type that converts all field VariableDeclaration(s) to
11
+ * TypeNode(s). This way handling this type doesn't require an InferType
12
+ * instance.
13
+ */
14
+ class ExpStructType extends solc_typed_ast_1.TypeNode {
15
+ constructor(name, fields, rawType = undefined) {
16
+ super();
17
+ this.name = name;
18
+ this.fields = fields;
19
+ this.rawType = rawType;
20
+ }
21
+ pp() {
22
+ return `struct ${this.name}{\n${this.fields.map(([name, type]) => `${name}: ${type.pp()}`).join("\n")}\n}`;
23
+ }
24
+ }
25
+ exports.ExpStructType = ExpStructType;
26
+ function isTypeUnknownContract(t) {
27
+ return (t instanceof solc_typed_ast_1.UserDefinedTypeName &&
28
+ t.referencedDeclaration < 0 &&
29
+ (t.typeString.startsWith("contract ") ||
30
+ t.typeString.startsWith("interface ") ||
31
+ t.typeString.startsWith("library ")));
32
+ }
33
+ /**
34
+ * Helper for converting `TypeName`s to `TypeNode`s. In some cases when solc-typed-ast conversion fails,
35
+ * it can try and guess the correct simplified type from the typeString
36
+ *
37
+ * - unknown contracts - retun address
38
+ */
39
+ function typeNameToTypeNode(t, infer, loc) {
40
+ try {
41
+ return loc ? infer.typeNameToSpecializedTypeNode(t, loc) : infer.typeNameToTypeNode(t);
42
+ }
43
+ catch (e) {
44
+ if (isTypeUnknownContract(t)) {
45
+ return utils_1.address;
46
+ }
47
+ throw e;
48
+ }
49
+ }
50
+ /**
51
+ * Helper for converting `VariableDeclartaion`s to `TypeNode`s. In some cases when solc-typed-ast conversion fails,
52
+ * it can try and guess the correct simplified type from the typeString
53
+ *
54
+ * - unknown contracts - retun address
55
+ */
56
+ function variableDeclarationToTypeNode(v, infer) {
57
+ try {
58
+ return infer.variableDeclarationToTypeNode(v);
59
+ }
60
+ catch (e) {
61
+ if (v.vType && isTypeUnknownContract(v.vType)) {
62
+ return utils_1.address;
63
+ }
64
+ throw e;
65
+ }
66
+ }
67
+ /**
68
+ * Simplify the given solc-typed-ast types for use in encoding. This does the following conversions:
69
+ *
70
+ * - Convert `UserDefinedType(StructDefinition)` to `ExpStructType`
71
+ * - Convert `UserDefinedType(UserDefinedValueTypeDefinition)` to the underlying type
72
+ * - Convert `UserDefinedType(ContractDefinition)` to address
73
+ *
74
+ * in the given rawT
75
+ * @param rawT
76
+ */
77
+ function simplifyType(rawT, infer, loc) {
78
+ if (rawT instanceof solc_typed_ast_1.ArrayType) {
79
+ const expElT = simplifyType(rawT.elementT, infer, loc);
80
+ return expElT === rawT.elementT ? rawT : new solc_typed_ast_1.ArrayType(expElT, rawT.size, rawT.src);
81
+ }
82
+ if (rawT instanceof solc_typed_ast_1.MappingType) {
83
+ const keyT = simplifyType(rawT.keyType, infer, loc);
84
+ const valueT = simplifyType(rawT.valueType, infer, loc);
85
+ return keyT === rawT.keyType && valueT === rawT.valueType
86
+ ? rawT
87
+ : new solc_typed_ast_1.MappingType(keyT, valueT, rawT.src);
88
+ }
89
+ if (rawT instanceof solc_typed_ast_1.TupleType) {
90
+ return new solc_typed_ast_1.TupleType(rawT.elements.map((elT) => (elT === null ? elT : simplifyType(elT, infer, loc))));
91
+ }
92
+ if (rawT instanceof solc_typed_ast_1.PointerType) {
93
+ const toT = simplifyType(rawT.to, infer, rawT.location);
94
+ return toT === rawT.to ? rawT : new solc_typed_ast_1.PointerType(toT, rawT.location, rawT.kind, rawT.src);
95
+ }
96
+ if (rawT instanceof solc_typed_ast_1.UserDefinedType) {
97
+ if (rawT.definition === undefined) {
98
+ return new MissingType(undefined);
99
+ }
100
+ if (rawT.definition instanceof solc_typed_ast_1.StructDefinition) {
101
+ (0, solc_typed_ast_1.assert)(loc !== undefined, `Missing location in struct expansion {0}`, rawT);
102
+ const fields = rawT.definition.vMembers.map((decl) => {
103
+ let fieldT;
104
+ try {
105
+ fieldT = typeNameToTypeNode(decl.vType, infer, loc);
106
+ }
107
+ catch (e) {
108
+ fieldT = new MissingType(decl.vType);
109
+ }
110
+ return [decl.name, simplifyType(fieldT, infer, loc)];
111
+ });
112
+ return new ExpStructType(rawT.name, fields, rawT);
113
+ }
114
+ if (rawT.definition instanceof solc_typed_ast_1.UserDefinedValueTypeDefinition) {
115
+ let underlyingType;
116
+ try {
117
+ underlyingType = typeNameToTypeNode(rawT.definition.underlyingType, infer);
118
+ }
119
+ catch (e) {
120
+ underlyingType = new MissingType(rawT.definition.underlyingType);
121
+ }
122
+ return simplifyType(underlyingType, infer, loc);
123
+ }
124
+ if (rawT.definition instanceof solc_typed_ast_1.ContractDefinition) {
125
+ return utils_1.address;
126
+ }
127
+ if (rawT.definition instanceof solc_typed_ast_1.EnumDefinition) {
128
+ return (0, solc_typed_ast_1.enumToIntType)(rawT.definition);
129
+ }
130
+ }
131
+ if (rawT instanceof MissingType) {
132
+ return rawT;
133
+ }
134
+ return rawT;
135
+ }
136
+ class MissingType extends solc_typed_ast_1.TypeNode {
137
+ constructor(rawTypeName) {
138
+ super();
139
+ this.rawTypeName = rawTypeName;
140
+ }
141
+ pp() {
142
+ return `<missing type info for ${this.rawTypeName?.print()}>`;
143
+ }
144
+ }
145
+ exports.MissingType = MissingType;
146
+ /**
147
+ * Given a `ContractDefinition` try and compute an `ExpStructType` struct that
148
+ * describes the layout of the class. This takes into account all base classes,
149
+ * and simplifies types using `simplifyType`.
150
+ *
151
+ * Since we may be missing AST information for some user-defined types, or even
152
+ * entire bases, the layout may be partial. It may be only up to a given base,
153
+ * and it may be missing exact type information for certain fields.
154
+ *
155
+ * We return a tuple with the resulting layout, and a boolean specifying whether
156
+ * the layout is complete.
157
+ *
158
+ * @param def
159
+ * @param infer
160
+ */
161
+ function getContractLayoutType(contract, infer) {
162
+ const stateVars = [];
163
+ let complete = true;
164
+ for (const base of [...contract.vLinearizedBaseContracts].reverse()) {
165
+ if (base === null || base === undefined) {
166
+ complete = false;
167
+ break;
168
+ }
169
+ for (const varDecl of base.vStateVariables) {
170
+ // Not part of layout
171
+ if (varDecl.mutability === solc_typed_ast_1.Mutability.Constant ||
172
+ varDecl.mutability === solc_typed_ast_1.Mutability.Immutable ||
173
+ varDecl.storageLocation === solc_typed_ast_1.DataLocation.Transient) {
174
+ continue;
175
+ }
176
+ let typeNode;
177
+ try {
178
+ typeNode = variableDeclarationToTypeNode(varDecl, infer);
179
+ }
180
+ catch (e) {
181
+ /**
182
+ * Missing type info. If this is a:
183
+ * - map type
184
+ * - array type
185
+ *
186
+ * then we can continue decoding as it takes exactly 32 bytes
187
+ * statically in the layout. Otherwise we have to abort decoding
188
+ */
189
+ complete = false;
190
+ if ((0, utils_2.isTypeStringStatic32BytesInStorage)(varDecl.typeString)) {
191
+ typeNode = new MissingType(varDecl.vType);
192
+ }
193
+ else {
194
+ break;
195
+ }
196
+ }
197
+ stateVars.push([varDecl.name, simplifyType(typeNode, infer, solc_typed_ast_1.DataLocation.Storage)]);
198
+ }
199
+ }
200
+ return [new ExpStructType(contract.name, stateVars), complete];
201
+ }
202
+ //# sourceMappingURL=exp_types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exp_types.js","sourceRoot":"","sources":["../../../src/debug/decoding/exp_types.ts"],"names":[],"mappings":"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"}