sol-dbg 0.6.15 → 0.7.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.
- package/dist/artifacts/helpers.d.ts +3 -3
- package/dist/artifacts/helpers.d.ts.map +1 -1
- package/dist/artifacts/helpers.js +17 -53
- package/dist/artifacts/helpers.js.map +1 -1
- package/dist/artifacts/solc.d.ts +1 -8
- package/dist/artifacts/solc.d.ts.map +1 -1
- package/dist/debug/abi.d.ts +11 -41
- package/dist/debug/abi.d.ts.map +1 -1
- package/dist/debug/abi.js +60 -294
- package/dist/debug/abi.js.map +1 -1
- package/dist/debug/artifact_manager/artifact_manager.d.ts +17 -42
- package/dist/debug/artifact_manager/artifact_manager.d.ts.map +1 -1
- package/dist/debug/artifact_manager/artifact_manager.js +82 -22
- package/dist/debug/artifact_manager/artifact_manager.js.map +1 -1
- package/dist/debug/artifact_manager/bytecode_templates.d.ts +1 -1
- package/dist/debug/artifact_manager/bytecode_templates.d.ts.map +1 -1
- package/dist/debug/artifact_manager/bytecode_templates.js +4 -3
- package/dist/debug/artifact_manager/bytecode_templates.js.map +1 -1
- package/dist/debug/artifact_manager/index.d.ts +1 -0
- package/dist/debug/artifact_manager/index.d.ts.map +1 -1
- package/dist/debug/artifact_manager/index.js +1 -0
- package/dist/debug/artifact_manager/index.js.map +1 -1
- package/dist/debug/artifact_manager/types.d.ts +129 -0
- package/dist/debug/artifact_manager/types.d.ts.map +1 -0
- package/dist/debug/artifact_manager/types.js +12 -0
- package/dist/debug/artifact_manager/types.js.map +1 -0
- package/dist/debug/decoding/calldata/index.d.ts +2 -0
- package/dist/debug/decoding/calldata/index.d.ts.map +1 -0
- package/dist/debug/decoding/calldata/index.js +6 -0
- package/dist/debug/decoding/calldata/index.js.map +1 -0
- package/dist/debug/decoding/calldata/view.d.ts +75 -0
- package/dist/debug/decoding/calldata/view.d.ts.map +1 -0
- package/dist/debug/decoding/calldata/view.js +400 -0
- package/dist/debug/decoding/calldata/view.js.map +1 -0
- package/dist/debug/decoding/exp_types.d.ts +46 -0
- package/dist/debug/decoding/exp_types.d.ts.map +1 -0
- package/dist/debug/decoding/exp_types.js +202 -0
- package/dist/debug/decoding/exp_types.js.map +1 -0
- package/dist/debug/decoding/general.d.ts +5 -9
- package/dist/debug/decoding/general.d.ts.map +1 -1
- package/dist/debug/decoding/general.js +25 -103
- package/dist/debug/decoding/general.js.map +1 -1
- package/dist/debug/decoding/index.d.ts +1 -0
- package/dist/debug/decoding/index.d.ts.map +1 -1
- package/dist/debug/decoding/index.js +1 -0
- package/dist/debug/decoding/index.js.map +1 -1
- package/dist/debug/decoding/memory/allocator.d.ts +22 -0
- package/dist/debug/decoding/memory/allocator.d.ts.map +1 -0
- package/dist/debug/decoding/memory/allocator.js +47 -0
- package/dist/debug/decoding/memory/allocator.js.map +1 -0
- package/dist/debug/decoding/memory/index.d.ts +2 -0
- package/dist/debug/decoding/memory/index.d.ts.map +1 -0
- package/dist/debug/decoding/memory/index.js +6 -0
- package/dist/debug/decoding/memory/index.js.map +1 -0
- package/dist/debug/decoding/memory/view.d.ts +66 -0
- package/dist/debug/decoding/memory/view.d.ts.map +1 -0
- package/dist/debug/decoding/memory/view.js +283 -0
- package/dist/debug/decoding/memory/view.js.map +1 -0
- package/dist/debug/decoding/stack/index.d.ts +2 -0
- package/dist/debug/decoding/stack/index.d.ts.map +1 -0
- package/dist/debug/decoding/stack/index.js +6 -0
- package/dist/debug/decoding/stack/index.js.map +1 -0
- package/dist/debug/decoding/stack/view.d.ts +36 -0
- package/dist/debug/decoding/stack/view.d.ts.map +1 -0
- package/dist/debug/decoding/stack/view.js +156 -0
- package/dist/debug/decoding/stack/view.js.map +1 -0
- package/dist/debug/decoding/storage/index.d.ts +2 -0
- package/dist/debug/decoding/storage/index.d.ts.map +1 -0
- package/dist/debug/decoding/storage/index.js +6 -0
- package/dist/debug/decoding/storage/index.js.map +1 -0
- package/dist/debug/decoding/storage/view.d.ts +105 -0
- package/dist/debug/decoding/storage/view.d.ts.map +1 -0
- package/dist/debug/decoding/storage/view.js +603 -0
- package/dist/debug/decoding/storage/view.js.map +1 -0
- package/dist/debug/decoding/utils.d.ts +17 -0
- package/dist/debug/decoding/utils.d.ts.map +1 -0
- package/dist/debug/decoding/utils.js +43 -0
- package/dist/debug/decoding/utils.js.map +1 -0
- package/dist/debug/decoding/value.d.ts +50 -0
- package/dist/debug/decoding/value.d.ts.map +1 -0
- package/dist/debug/decoding/value.js +106 -0
- package/dist/debug/decoding/value.js.map +1 -0
- package/dist/debug/decoding/view.d.ts +24 -0
- package/dist/debug/decoding/view.d.ts.map +1 -0
- package/dist/debug/decoding/view.js +22 -0
- package/dist/debug/decoding/view.js.map +1 -0
- package/dist/debug/foundry_cheatcodes.d.ts +15 -15
- package/dist/debug/foundry_cheatcodes.d.ts.map +1 -1
- package/dist/debug/foundry_cheatcodes.js +17 -16
- package/dist/debug/foundry_cheatcodes.js.map +1 -1
- package/dist/debug/layout.d.ts +6 -8
- package/dist/debug/layout.d.ts.map +1 -1
- package/dist/debug/layout.js +14 -78
- package/dist/debug/layout.js.map +1 -1
- package/dist/debug/opcode_interposing.js +5 -5
- package/dist/debug/opcode_interposing.js.map +1 -1
- package/dist/debug/tracers/base_tracer.d.ts +4 -4
- package/dist/debug/tracers/base_tracer.d.ts.map +1 -1
- package/dist/debug/tracers/base_tracer.js +7 -7
- package/dist/debug/tracers/base_tracer.js.map +1 -1
- package/dist/debug/tracers/sol_debugger.d.ts.map +1 -1
- package/dist/debug/tracers/sol_debugger.js +2 -1
- package/dist/debug/tracers/sol_debugger.js.map +1 -1
- package/dist/debug/tracers/storage_decode_tracer.js +1 -1
- package/dist/debug/tracers/storage_decode_tracer.js.map +1 -1
- package/dist/debug/tracers/transformers/basic_info.d.ts +2 -2
- package/dist/debug/tracers/transformers/basic_info.d.ts.map +1 -1
- package/dist/debug/tracers/transformers/basic_info.js +4 -3
- package/dist/debug/tracers/transformers/basic_info.js.map +1 -1
- package/dist/debug/tracers/transformers/events.js +2 -2
- package/dist/debug/tracers/transformers/events.js.map +1 -1
- package/dist/debug/tracers/transformers/exc_info.d.ts +15 -0
- package/dist/debug/tracers/transformers/exc_info.d.ts.map +1 -0
- package/dist/debug/tracers/transformers/exc_info.js +39 -0
- package/dist/debug/tracers/transformers/exc_info.js.map +1 -0
- package/dist/debug/tracers/transformers/ext_stack.d.ts.map +1 -1
- package/dist/debug/tracers/transformers/ext_stack.js +13 -30
- package/dist/debug/tracers/transformers/ext_stack.js.map +1 -1
- package/dist/debug/tracers/transformers/index.d.ts +1 -0
- package/dist/debug/tracers/transformers/index.d.ts.map +1 -1
- package/dist/debug/tracers/transformers/index.js +1 -0
- package/dist/debug/tracers/transformers/index.js.map +1 -1
- package/dist/debug/tracers/transformers/int_stack.d.ts.map +1 -1
- package/dist/debug/tracers/transformers/int_stack.js +5 -13
- package/dist/debug/tracers/transformers/int_stack.js.map +1 -1
- package/dist/debug/tracers/transformers/keccak256_invert.js +4 -4
- package/dist/debug/tracers/transformers/keccak256_invert.js.map +1 -1
- package/dist/debug/tracers/transformers/ret_info.d.ts +1 -1
- package/dist/debug/tracers/transformers/ret_info.d.ts.map +1 -1
- package/dist/debug/tracers/transformers/ret_info.js +22 -46
- package/dist/debug/tracers/transformers/ret_info.js.map +1 -1
- package/dist/debug/types.d.ts +64 -23
- package/dist/debug/types.d.ts.map +1 -1
- package/dist/debug/types.js.map +1 -1
- package/dist/utils/ethereumjs_internal/exceptions.d.ts +2 -2
- package/dist/utils/ethereumjs_internal/opcodes.js +1 -1
- package/dist/utils/immutable_map.d.ts +2 -0
- package/dist/utils/immutable_map.d.ts.map +1 -1
- package/dist/utils/immutable_map.js +21 -0
- package/dist/utils/immutable_map.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/misc.d.ts +19 -11
- package/dist/utils/misc.d.ts.map +1 -1
- package/dist/utils/misc.js +61 -53
- package/dist/utils/misc.js.map +1 -1
- package/dist/utils/pp.d.ts +3 -1
- package/dist/utils/pp.d.ts.map +1 -1
- package/dist/utils/pp.js +10 -27
- package/dist/utils/pp.js.map +1 -1
- package/dist/utils/solidity.d.ts +11 -0
- package/dist/utils/solidity.d.ts.map +1 -0
- package/dist/utils/solidity.js +85 -0
- package/dist/utils/solidity.js.map +1 -0
- package/dist/utils/test_runner.d.ts +9 -6
- package/dist/utils/test_runner.d.ts.map +1 -1
- package/dist/utils/test_runner.js +26 -21
- package/dist/utils/test_runner.js.map +1 -1
- package/dist/utils/trace.d.ts +5 -1
- package/dist/utils/trace.d.ts.map +1 -1
- package/dist/utils/trace.js +16 -0
- package/dist/utils/trace.js.map +1 -1
- package/package.json +19 -14
- package/dist/debug/decoding/calldata.d.ts +0 -6
- package/dist/debug/decoding/calldata.d.ts.map +0 -1
- package/dist/debug/decoding/calldata.js +0 -244
- package/dist/debug/decoding/calldata.js.map +0 -1
- package/dist/debug/decoding/memory.d.ts +0 -4
- package/dist/debug/decoding/memory.d.ts.map +0 -1
- package/dist/debug/decoding/memory.js +0 -216
- package/dist/debug/decoding/memory.js.map +0 -1
- package/dist/debug/decoding/stack.d.ts +0 -9
- package/dist/debug/decoding/stack.d.ts.map +0 -1
- package/dist/debug/decoding/stack.js +0 -84
- package/dist/debug/decoding/stack.js.map +0 -1
- package/dist/debug/decoding/storage.d.ts +0 -7
- package/dist/debug/decoding/storage.d.ts.map +0 -1
- package/dist/debug/decoding/storage.js +0 -393
- package/dist/debug/decoding/storage.js.map +0 -1
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MissingMemView = exports.PointerMemView = exports.StructMemView = exports.ArrayMemView = exports.StringMemView = exports.BytesMemView = exports.PackedArrayMemView = exports.FixedBytesMemView = exports.BoolMemView = exports.AddressMemView = exports.IntMemView = exports.BaseMemoryView = void 0;
|
|
4
|
+
exports.makeMemoryView = makeMemoryView;
|
|
5
|
+
const solc_typed_ast_1 = require("solc-typed-ast");
|
|
6
|
+
const view_1 = require("../view");
|
|
7
|
+
const value_1 = require("../value");
|
|
8
|
+
const utils_1 = require("../../../utils");
|
|
9
|
+
const util_1 = require("@ethereumjs/util");
|
|
10
|
+
const exp_types_1 = require("../exp_types");
|
|
11
|
+
const utils_2 = require("../utils");
|
|
12
|
+
const utils_3 = require("ethereum-cryptography/utils");
|
|
13
|
+
class BaseMemoryView extends view_1.View {
|
|
14
|
+
writeMemAt(value, off, mem) {
|
|
15
|
+
if (off < 0n || off + BigInt(value.length) > BigInt(mem.length)) {
|
|
16
|
+
console.error(`OoB writing mem at ${off} of length ${value.length} in memory of size ${mem.length}`);
|
|
17
|
+
throw new view_1.EncodingError(`OoB writing mem at ${off} of length ${value.length} in memory of size ${mem.length}`);
|
|
18
|
+
}
|
|
19
|
+
mem.set(value, Number(off));
|
|
20
|
+
}
|
|
21
|
+
readMemAt(off, calldata, len) {
|
|
22
|
+
const res = (0, utils_1.readMem)(off, len, calldata);
|
|
23
|
+
if (!res) {
|
|
24
|
+
// OoB access
|
|
25
|
+
return new value_1.DecodingFailure(`OoB access at ${off}:${off + BigInt(len)} in memory of size ${calldata.length}`);
|
|
26
|
+
}
|
|
27
|
+
return res;
|
|
28
|
+
}
|
|
29
|
+
decodeIntAt(off, type, state) {
|
|
30
|
+
const bytes = this.readMemAt(off, state, 32);
|
|
31
|
+
if ((0, utils_2.isFailure)(bytes)) {
|
|
32
|
+
return bytes;
|
|
33
|
+
}
|
|
34
|
+
let res = (0, utils_1.bigEndianBufToBigint)(bytes);
|
|
35
|
+
// Convert signed negative 2's complement values
|
|
36
|
+
if (type.signed && (res & (BigInt(1) << BigInt(type.nBits - 1))) !== BigInt(0)) {
|
|
37
|
+
// Mask out any 1's above the number's size
|
|
38
|
+
res = res & ((BigInt(1) << BigInt(type.nBits)) - BigInt(1));
|
|
39
|
+
res = -((BigInt(1) << BigInt(type.nBits)) - res);
|
|
40
|
+
}
|
|
41
|
+
if (!(0, utils_1.fits)(res, type)) {
|
|
42
|
+
return new value_1.DecodingFailure(`Decoded value ${res} doesn't fit in expected type ${type.pp()}`);
|
|
43
|
+
}
|
|
44
|
+
return res;
|
|
45
|
+
}
|
|
46
|
+
pp() {
|
|
47
|
+
return `<${this.type.pp()}@${this.loc} in memory>`;
|
|
48
|
+
}
|
|
49
|
+
get offset() {
|
|
50
|
+
return this.loc;
|
|
51
|
+
}
|
|
52
|
+
encodeIntAt(value, off, state) {
|
|
53
|
+
const word = new Uint8Array(32);
|
|
54
|
+
// Note nBytes is always 32 - an int always takes up the full word
|
|
55
|
+
(0, utils_1.encodeBigintInBigEndianBuf)(value, word, 32, 32);
|
|
56
|
+
this.writeMemAt(word, off, state);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.BaseMemoryView = BaseMemoryView;
|
|
60
|
+
class IntMemView extends BaseMemoryView {
|
|
61
|
+
decode(state) {
|
|
62
|
+
return this.decodeIntAt(this.loc, this.type, state);
|
|
63
|
+
}
|
|
64
|
+
encode(value, state) {
|
|
65
|
+
this.encodeIntAt(value, this.loc, state);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.IntMemView = IntMemView;
|
|
69
|
+
class AddressMemView extends BaseMemoryView {
|
|
70
|
+
decode(state) {
|
|
71
|
+
const m = this.readMemAt(this.loc + 12n, state, 20);
|
|
72
|
+
return (0, utils_2.isFailure)(m) ? m : new util_1.Address(m);
|
|
73
|
+
}
|
|
74
|
+
encode(value, state) {
|
|
75
|
+
// We write a full word to make sure the lower bytes are 0-ed out
|
|
76
|
+
const w = new Uint8Array(32);
|
|
77
|
+
w.set(value.bytes, 12);
|
|
78
|
+
this.writeMemAt(w, this.loc, state);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.AddressMemView = AddressMemView;
|
|
82
|
+
const ONE_BYTES32 = new Uint8Array(32);
|
|
83
|
+
ONE_BYTES32[31] = 1;
|
|
84
|
+
class BoolMemView extends BaseMemoryView {
|
|
85
|
+
decode(state) {
|
|
86
|
+
const m = this.readMemAt(this.loc, state, 32);
|
|
87
|
+
return (0, utils_2.isFailure)(m) ? m : (0, utils_1.bigEndianBufToBigint)(m) !== 0n;
|
|
88
|
+
}
|
|
89
|
+
encode(value, state) {
|
|
90
|
+
this.writeMemAt(value ? ONE_BYTES32 : utils_1.ZERO_BYTES32, this.loc, state);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.BoolMemView = BoolMemView;
|
|
94
|
+
class FixedBytesMemView extends BaseMemoryView {
|
|
95
|
+
decode(state) {
|
|
96
|
+
return this.readMemAt(this.loc, state, this.type.size);
|
|
97
|
+
}
|
|
98
|
+
encode(value, state) {
|
|
99
|
+
const w = new Uint8Array(32);
|
|
100
|
+
w.set(value);
|
|
101
|
+
this.writeMemAt(w, this.loc, state);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.FixedBytesMemView = FixedBytesMemView;
|
|
105
|
+
class PackedArrayMemView extends BaseMemoryView {
|
|
106
|
+
decodeBytesAt(loc, state) {
|
|
107
|
+
const len = this.decodeIntAt(loc, utils_1.uint256, state);
|
|
108
|
+
if ((0, utils_2.isFailure)(len)) {
|
|
109
|
+
return len;
|
|
110
|
+
}
|
|
111
|
+
if (len >= utils_1.MAX_ARR_DECODE_LIMIT) {
|
|
112
|
+
return new value_1.DecodingFailure(`Bytes to decode too large - ${len}`);
|
|
113
|
+
}
|
|
114
|
+
return this.readMemAt(loc + 32n, state, len);
|
|
115
|
+
}
|
|
116
|
+
encodeBytesAt(value, off, state) {
|
|
117
|
+
this.encodeIntAt(BigInt(value.length), off, state);
|
|
118
|
+
this.writeMemAt(value, off + 32n, state);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
exports.PackedArrayMemView = PackedArrayMemView;
|
|
122
|
+
class BytesMemView extends PackedArrayMemView {
|
|
123
|
+
decode(state) {
|
|
124
|
+
return this.decodeBytesAt(this.loc, state);
|
|
125
|
+
}
|
|
126
|
+
encode(value, state) {
|
|
127
|
+
this.encodeBytesAt(value, this.loc, state);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.BytesMemView = BytesMemView;
|
|
131
|
+
class StringMemView extends PackedArrayMemView {
|
|
132
|
+
decode(state) {
|
|
133
|
+
const bytes = this.decodeBytesAt(this.loc, state);
|
|
134
|
+
return (0, utils_2.isFailure)(bytes) ? bytes : (0, util_1.bytesToUtf8)(bytes);
|
|
135
|
+
}
|
|
136
|
+
encode(value, state) {
|
|
137
|
+
this.encodeBytesAt((0, utils_3.utf8ToBytes)(value), this.loc, state);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.StringMemView = StringMemView;
|
|
141
|
+
class ArrayMemView extends BaseMemoryView {
|
|
142
|
+
decode(state) {
|
|
143
|
+
let sizeBigint;
|
|
144
|
+
let addr = this.loc;
|
|
145
|
+
if (this.type.size === undefined) {
|
|
146
|
+
sizeBigint = this.decodeIntAt(addr, utils_1.uint256, state);
|
|
147
|
+
if ((0, utils_2.isFailure)(sizeBigint)) {
|
|
148
|
+
return sizeBigint;
|
|
149
|
+
}
|
|
150
|
+
addr += 32n;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
sizeBigint = this.type.size;
|
|
154
|
+
}
|
|
155
|
+
if (sizeBigint >= utils_1.MAX_ARR_DECODE_LIMIT) {
|
|
156
|
+
return new value_1.DecodingFailure(`Array too large to decode: ${sizeBigint}`);
|
|
157
|
+
}
|
|
158
|
+
const size = Number(sizeBigint);
|
|
159
|
+
const res = [];
|
|
160
|
+
for (let i = 0; i < size; i++) {
|
|
161
|
+
const view = makeMemoryView(this.type.elementT, addr);
|
|
162
|
+
res.push(view.decode(state));
|
|
163
|
+
addr += 32n;
|
|
164
|
+
}
|
|
165
|
+
return res;
|
|
166
|
+
}
|
|
167
|
+
encode(value, state, alloc) {
|
|
168
|
+
let off = this.loc;
|
|
169
|
+
if (this.type.size === undefined) {
|
|
170
|
+
this.encodeIntAt(BigInt(value.length), off, state);
|
|
171
|
+
off += 32n;
|
|
172
|
+
}
|
|
173
|
+
for (const v of value) {
|
|
174
|
+
const view = makeMemoryView(this.type.elementT, off);
|
|
175
|
+
view.encode(v, state, alloc);
|
|
176
|
+
off += 32n;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.ArrayMemView = ArrayMemView;
|
|
181
|
+
class StructMemView extends BaseMemoryView {
|
|
182
|
+
decode(state) {
|
|
183
|
+
const entries = [];
|
|
184
|
+
let offset = this.loc;
|
|
185
|
+
for (const [name, type] of this.type.fields) {
|
|
186
|
+
const view = makeMemoryView(type, offset);
|
|
187
|
+
entries.push([name, view.decode(state)]);
|
|
188
|
+
offset += 32n;
|
|
189
|
+
}
|
|
190
|
+
return new value_1.Struct(entries);
|
|
191
|
+
}
|
|
192
|
+
encode(value, state, alloc) {
|
|
193
|
+
let offset = this.loc;
|
|
194
|
+
(0, solc_typed_ast_1.assert)(value.entries.length === this.type.fields.length, `Mismatch in encoding struct`);
|
|
195
|
+
for (let i = 0; i < this.type.fields.length; i++) {
|
|
196
|
+
const [, type] = this.type.fields[i];
|
|
197
|
+
const view = makeMemoryView(type, offset);
|
|
198
|
+
view.encode(value.entries[i][1], state, alloc);
|
|
199
|
+
offset += 32n;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
exports.StructMemView = StructMemView;
|
|
204
|
+
class PointerMemView extends BaseMemoryView {
|
|
205
|
+
decode(state) {
|
|
206
|
+
const offset = this.decodeIntAt(this.loc, utils_1.uint256, state);
|
|
207
|
+
if ((0, utils_2.isFailure)(offset)) {
|
|
208
|
+
return offset;
|
|
209
|
+
}
|
|
210
|
+
const view = makeMemoryView(this.type.to, offset);
|
|
211
|
+
return view.decode(state);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Helper to compute how much memory we need to allocate for a pointed-to value of type t
|
|
215
|
+
*/
|
|
216
|
+
static allocSize(v, t) {
|
|
217
|
+
if (t instanceof solc_typed_ast_1.ArrayType) {
|
|
218
|
+
return (v.length * PointerMemView.allocSize(undefined, t.elementT) +
|
|
219
|
+
(t.size !== undefined ? 0 : 32));
|
|
220
|
+
}
|
|
221
|
+
if (t instanceof exp_types_1.ExpStructType) {
|
|
222
|
+
let size = 0;
|
|
223
|
+
for (let i = 0; i < t.fields.length; i++) {
|
|
224
|
+
size += PointerMemView.allocSize(v.entries[i][1], t.fields[i][1]);
|
|
225
|
+
}
|
|
226
|
+
return size;
|
|
227
|
+
}
|
|
228
|
+
if (t instanceof solc_typed_ast_1.PackedArrayType) {
|
|
229
|
+
return Buffer.from(v).length + 32;
|
|
230
|
+
}
|
|
231
|
+
return 32;
|
|
232
|
+
}
|
|
233
|
+
encode(value, state, alloc) {
|
|
234
|
+
const ptr = alloc.alloc(PointerMemView.allocSize(value, this.type.to));
|
|
235
|
+
this.encodeIntAt(ptr, this.loc, state);
|
|
236
|
+
const view = makeMemoryView(this.type.to, ptr);
|
|
237
|
+
view.encode(value, state, alloc);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
exports.PointerMemView = PointerMemView;
|
|
241
|
+
class MissingMemView extends BaseMemoryView {
|
|
242
|
+
decode() {
|
|
243
|
+
return new value_1.DecodingFailure(`${this.type.rawTypeName ? this.type.rawTypeName.type : "<unknown>"}`);
|
|
244
|
+
}
|
|
245
|
+
encode() {
|
|
246
|
+
throw new view_1.EncodingError(`Cannot encode missing type ${this.type.pp()}`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
exports.MissingMemView = MissingMemView;
|
|
250
|
+
function makeMemoryView(type, loc) {
|
|
251
|
+
if (type instanceof solc_typed_ast_1.IntType) {
|
|
252
|
+
return new IntMemView(type, loc);
|
|
253
|
+
}
|
|
254
|
+
if (type instanceof solc_typed_ast_1.BoolType) {
|
|
255
|
+
return new BoolMemView(type, loc);
|
|
256
|
+
}
|
|
257
|
+
if (type instanceof solc_typed_ast_1.AddressType) {
|
|
258
|
+
return new AddressMemView(type, loc);
|
|
259
|
+
}
|
|
260
|
+
if (type instanceof solc_typed_ast_1.FixedBytesType) {
|
|
261
|
+
return new FixedBytesMemView(type, loc);
|
|
262
|
+
}
|
|
263
|
+
if (type instanceof exp_types_1.ExpStructType) {
|
|
264
|
+
return new StructMemView(type, loc);
|
|
265
|
+
}
|
|
266
|
+
if (type instanceof solc_typed_ast_1.BytesType) {
|
|
267
|
+
return new BytesMemView(type, loc);
|
|
268
|
+
}
|
|
269
|
+
if (type instanceof solc_typed_ast_1.StringType) {
|
|
270
|
+
return new StringMemView(type, loc);
|
|
271
|
+
}
|
|
272
|
+
if (type instanceof solc_typed_ast_1.ArrayType) {
|
|
273
|
+
return new ArrayMemView(type, loc);
|
|
274
|
+
}
|
|
275
|
+
if (type instanceof solc_typed_ast_1.PointerType) {
|
|
276
|
+
return new PointerMemView(type, loc);
|
|
277
|
+
}
|
|
278
|
+
if (type instanceof exp_types_1.MissingType) {
|
|
279
|
+
return new MissingMemView(type, loc);
|
|
280
|
+
}
|
|
281
|
+
(0, utils_1.nyi)(`makeMemoryView(${type.pp()})`);
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../../src/debug/decoding/memory/view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/debug/decoding/stack/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeStackView = void 0;
|
|
4
|
+
var view_1 = require("./view");
|
|
5
|
+
Object.defineProperty(exports, "makeStackView", { enumerable: true, get: function () { return view_1.makeStackView; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/debug/decoding/stack/index.ts"],"names":[],"mappings":";;;AAAA,+BAAuC;AAA9B,qGAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { AddressType, BoolType, FixedBytesType, IntType, PointerType, TypeNode } from "solc-typed-ast";
|
|
2
|
+
import { Stack } from "../../types";
|
|
3
|
+
import { DecodingFailure, Value } from "../value";
|
|
4
|
+
import { View } from "../view";
|
|
5
|
+
import { Address } from "@ethereumjs/util";
|
|
6
|
+
export declare abstract class BaseStackView<Val extends Value, Type extends TypeNode> extends View<Stack, Val, number, Type> {
|
|
7
|
+
fetchStackWord(offsetFromTop: number, state: Stack): Uint8Array | DecodingFailure;
|
|
8
|
+
decodeIntAt(offsetFromTop: number, typ: IntType, state: Stack): bigint | DecodingFailure;
|
|
9
|
+
pp(): string;
|
|
10
|
+
abstract encode(value: Val, state: Stack): void;
|
|
11
|
+
encodeIntAt(value: bigint, type: IntType, offsetFromTop: number, state: Stack): void;
|
|
12
|
+
}
|
|
13
|
+
export declare class IntStackView extends BaseStackView<bigint, IntType> {
|
|
14
|
+
decode(state: Stack): bigint | DecodingFailure;
|
|
15
|
+
encode(value: bigint, state: Stack): void;
|
|
16
|
+
}
|
|
17
|
+
export declare class BoolStackView extends BaseStackView<boolean, BoolType> {
|
|
18
|
+
decode(state: Stack): boolean | DecodingFailure;
|
|
19
|
+
encode(value: boolean, state: Stack): void;
|
|
20
|
+
}
|
|
21
|
+
export declare class AddressStackView extends BaseStackView<Address, AddressType> {
|
|
22
|
+
decode(state: Stack): Address | DecodingFailure;
|
|
23
|
+
encode(value: Address, state: Stack): void;
|
|
24
|
+
}
|
|
25
|
+
export declare class FixedBytesStackView extends BaseStackView<Uint8Array, FixedBytesType> {
|
|
26
|
+
decode(state: Stack): Uint8Array | DecodingFailure;
|
|
27
|
+
encode(value: Uint8Array, state: Stack): void;
|
|
28
|
+
}
|
|
29
|
+
type PointerValue = View<any, Value, any, TypeNode>;
|
|
30
|
+
export declare class PointerStackView extends BaseStackView<PointerValue, PointerType> {
|
|
31
|
+
decode(state: Stack): PointerValue | DecodingFailure;
|
|
32
|
+
encode(value: PointerValue, state: Stack): void;
|
|
33
|
+
}
|
|
34
|
+
export declare function makeStackView(type: TypeNode, loc: number): BaseStackView<Value, TypeNode>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../../src/debug/decoding/stack/view.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,WAAW,EAEX,QAAQ,EAER,cAAc,EACd,OAAO,EACP,WAAW,EACX,QAAQ,EACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAiB,IAAI,EAAE,MAAM,SAAS,CAAC;AAU9C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAQ3C,8BAAsB,aAAa,CAAC,GAAG,SAAS,KAAK,EAAE,IAAI,SAAS,QAAQ,CAAE,SAAQ,IAAI,CACtF,KAAK,EACL,GAAG,EACH,MAAM,EACN,IAAI,CACP;IACG,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,UAAU,GAAG,eAAe;IAUjF,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,eAAe;IAsBxF,EAAE,IAAI,MAAM;IAIZ,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAE/C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAOvF;AAED,qBAAa,YAAa,SAAQ,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC;IAC5D,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,eAAe;IAI9C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAG5C;AAED,qBAAa,aAAc,SAAQ,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC/D,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,eAAe;IAK/C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAG7C;AAED,qBAAa,gBAAiB,SAAQ,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC;IACrE,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,eAAe;IAK/C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAS7C;AAED,qBAAa,mBAAoB,SAAQ,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC;IAC9E,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,GAAG,eAAe;IAKlD,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAQhD;AAED,KAAK,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;AAEpD,qBAAa,gBAAiB,SAAQ,aAAa,CAAC,YAAY,EAAE,WAAW,CAAC;IAC1E,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,YAAY,GAAG,eAAe;IAoCpD,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAelD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAsBzF"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PointerStackView = exports.FixedBytesStackView = exports.AddressStackView = exports.BoolStackView = exports.IntStackView = exports.BaseStackView = void 0;
|
|
4
|
+
exports.makeStackView = makeStackView;
|
|
5
|
+
const solc_typed_ast_1 = require("solc-typed-ast");
|
|
6
|
+
const value_1 = require("../value");
|
|
7
|
+
const view_1 = require("../view");
|
|
8
|
+
const utils_1 = require("../../../utils");
|
|
9
|
+
const storage_1 = require("../storage");
|
|
10
|
+
const utils_2 = require("../utils");
|
|
11
|
+
const view_2 = require("../calldata/view");
|
|
12
|
+
const memory_1 = require("../memory");
|
|
13
|
+
const view_3 = require("../storage/view");
|
|
14
|
+
const view_4 = require("../memory/view");
|
|
15
|
+
class BaseStackView extends view_1.View {
|
|
16
|
+
fetchStackWord(offsetFromTop, state) {
|
|
17
|
+
const len = state.length;
|
|
18
|
+
if (len <= offsetFromTop) {
|
|
19
|
+
return new value_1.DecodingFailure(`${offsetFromTop} OoB in stack of length ${len}`);
|
|
20
|
+
}
|
|
21
|
+
return state[len - offsetFromTop - 1];
|
|
22
|
+
}
|
|
23
|
+
decodeIntAt(offsetFromTop, typ, state) {
|
|
24
|
+
const word = this.fetchStackWord(offsetFromTop, state);
|
|
25
|
+
if ((0, utils_2.isFailure)(word)) {
|
|
26
|
+
return word;
|
|
27
|
+
}
|
|
28
|
+
let res = (0, utils_1.bigEndianBufToBigint)(word);
|
|
29
|
+
// Convert signed negative 2's complement values
|
|
30
|
+
if (typ.signed && (res & (BigInt(1) << BigInt(typ.nBits - 1))) !== BigInt(0)) {
|
|
31
|
+
// Mask out any 1's above the number's size
|
|
32
|
+
res = res & ((BigInt(1) << BigInt(typ.nBits)) - BigInt(1));
|
|
33
|
+
res = -((BigInt(1) << BigInt(typ.nBits)) - res);
|
|
34
|
+
}
|
|
35
|
+
if (!(0, utils_1.fits)(res, typ)) {
|
|
36
|
+
return new value_1.DecodingFailure(`${res} doesnt fit in type ${typ.pp()}`);
|
|
37
|
+
}
|
|
38
|
+
return res;
|
|
39
|
+
}
|
|
40
|
+
pp() {
|
|
41
|
+
return `<${this.type.pp()}@${this.loc} in stack>`;
|
|
42
|
+
}
|
|
43
|
+
encodeIntAt(value, type, offsetFromTop, state) {
|
|
44
|
+
if (state.length <= offsetFromTop) {
|
|
45
|
+
throw new view_1.EncodingError(`OoB access at ${offsetFromTop} in stack`);
|
|
46
|
+
}
|
|
47
|
+
(0, utils_1.encodeBigintInBigEndianBuf)(value, state[offsetFromTop], type.nBits / 8);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.BaseStackView = BaseStackView;
|
|
51
|
+
class IntStackView extends BaseStackView {
|
|
52
|
+
decode(state) {
|
|
53
|
+
return this.decodeIntAt(this.loc, this.type, state);
|
|
54
|
+
}
|
|
55
|
+
encode(value, state) {
|
|
56
|
+
this.encodeIntAt(value, this.type, this.loc, state);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.IntStackView = IntStackView;
|
|
60
|
+
class BoolStackView extends BaseStackView {
|
|
61
|
+
decode(state) {
|
|
62
|
+
const res = this.decodeIntAt(this.loc, utils_1.uint256, state);
|
|
63
|
+
return (0, utils_2.isFailure)(res) ? res : res === 1n;
|
|
64
|
+
}
|
|
65
|
+
encode(value, state) {
|
|
66
|
+
this.encodeIntAt(value ? 1n : 0n, utils_1.uint8, this.loc, state);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.BoolStackView = BoolStackView;
|
|
70
|
+
class AddressStackView extends BaseStackView {
|
|
71
|
+
decode(state) {
|
|
72
|
+
const w = this.fetchStackWord(this.loc, state);
|
|
73
|
+
return (0, utils_2.isFailure)(w) ? w : (0, utils_1.wordToAddress)(w);
|
|
74
|
+
}
|
|
75
|
+
encode(value, state) {
|
|
76
|
+
const w = this.fetchStackWord(this.loc, state);
|
|
77
|
+
if ((0, utils_2.isFailure)(w)) {
|
|
78
|
+
throw new view_1.EncodingError(w.reason);
|
|
79
|
+
}
|
|
80
|
+
w.set(value.bytes, 12);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.AddressStackView = AddressStackView;
|
|
84
|
+
class FixedBytesStackView extends BaseStackView {
|
|
85
|
+
decode(state) {
|
|
86
|
+
const w = this.fetchStackWord(this.loc, state);
|
|
87
|
+
return (0, utils_2.isFailure)(w) ? w : w.slice(0, this.type.size);
|
|
88
|
+
}
|
|
89
|
+
encode(value, state) {
|
|
90
|
+
const w = this.fetchStackWord(this.loc, state);
|
|
91
|
+
if ((0, utils_2.isFailure)(w)) {
|
|
92
|
+
throw new view_1.EncodingError(w.reason);
|
|
93
|
+
}
|
|
94
|
+
w.set(value);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.FixedBytesStackView = FixedBytesStackView;
|
|
98
|
+
class PointerStackView extends BaseStackView {
|
|
99
|
+
decode(state) {
|
|
100
|
+
const off = this.decodeIntAt(this.loc, utils_1.uint256, state);
|
|
101
|
+
if ((0, utils_2.isFailure)(off)) {
|
|
102
|
+
return off;
|
|
103
|
+
}
|
|
104
|
+
if ((0, utils_2.isCalldataArrayType)(this.type)) {
|
|
105
|
+
// Calldata Array slice - fetch 2 words from stack
|
|
106
|
+
const len = this.decodeIntAt(this.loc - 1, utils_1.uint256, state);
|
|
107
|
+
if ((0, utils_2.isFailure)(len)) {
|
|
108
|
+
return len;
|
|
109
|
+
}
|
|
110
|
+
return new view_2.ArraySliceCalldataView(this.type.to, off, len);
|
|
111
|
+
}
|
|
112
|
+
if (this.type.location === solc_typed_ast_1.DataLocation.CallData) {
|
|
113
|
+
return (0, view_2.makeCalldataView)(this.type.to, off, 0n);
|
|
114
|
+
}
|
|
115
|
+
if (this.type.location === solc_typed_ast_1.DataLocation.Memory) {
|
|
116
|
+
return (0, memory_1.makeMemoryView)(this.type.to, off);
|
|
117
|
+
}
|
|
118
|
+
if (this.type.location === solc_typed_ast_1.DataLocation.Storage ||
|
|
119
|
+
this.type.location === solc_typed_ast_1.DataLocation.Transient) {
|
|
120
|
+
return (0, storage_1.makeStorageView)(this.type.to, [off, 32]);
|
|
121
|
+
}
|
|
122
|
+
(0, utils_1.nyi)(`Stack pointer to ${this.type.location}`);
|
|
123
|
+
}
|
|
124
|
+
encode(value, state) {
|
|
125
|
+
if (value instanceof view_3.BaseStorageView) {
|
|
126
|
+
if (value.endOffsetInWord !== 32) {
|
|
127
|
+
throw new view_1.EncodingError(`Unexpected non-word-aligned storage pointer in stack encoding`);
|
|
128
|
+
}
|
|
129
|
+
this.encodeIntAt(value.key, utils_1.uint256, this.loc, state);
|
|
130
|
+
}
|
|
131
|
+
else if (value instanceof view_4.BaseMemoryView || value instanceof view_2.BaseCalldataView) {
|
|
132
|
+
this.encodeIntAt(value.offset, utils_1.uint256, this.loc, state);
|
|
133
|
+
}
|
|
134
|
+
(0, utils_1.nyi)(`Unexpected pointer ${value.pp()}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.PointerStackView = PointerStackView;
|
|
138
|
+
function makeStackView(type, loc) {
|
|
139
|
+
if (type instanceof solc_typed_ast_1.IntType) {
|
|
140
|
+
return new IntStackView(type, loc);
|
|
141
|
+
}
|
|
142
|
+
if (type instanceof solc_typed_ast_1.AddressType) {
|
|
143
|
+
return new AddressStackView(type, loc);
|
|
144
|
+
}
|
|
145
|
+
if (type instanceof solc_typed_ast_1.FixedBytesType) {
|
|
146
|
+
return new FixedBytesStackView(type, loc);
|
|
147
|
+
}
|
|
148
|
+
if (type instanceof solc_typed_ast_1.BoolType) {
|
|
149
|
+
return new BoolStackView(type, loc);
|
|
150
|
+
}
|
|
151
|
+
if (type instanceof solc_typed_ast_1.PointerType) {
|
|
152
|
+
return new PointerStackView(type, loc);
|
|
153
|
+
}
|
|
154
|
+
(0, utils_1.nyi)(`makeStackView(${type.pp()}, ${loc})`);
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../../src/debug/decoding/stack/view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/debug/decoding/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeStorageView = void 0;
|
|
4
|
+
var view_1 = require("./view");
|
|
5
|
+
Object.defineProperty(exports, "makeStorageView", { enumerable: true, get: function () { return view_1.makeStorageView; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/debug/decoding/storage/index.ts"],"names":[],"mappings":";;;AAAA,+BAAyC;AAAhC,uGAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { AddressType, ArrayType, BoolType, BytesType, FixedBytesType, IntType, MappingType, PointerType, StringType, TypeNode } from "solc-typed-ast";
|
|
2
|
+
import { DecodingFailure, Struct, Value } from "../value";
|
|
3
|
+
import { View } from "../view";
|
|
4
|
+
import { Storage } from "../../types";
|
|
5
|
+
import { Address } from "@ethereumjs/util";
|
|
6
|
+
import { ExpStructType, MissingType } from "../exp_types";
|
|
7
|
+
import { MapKeys } from "../../tracers";
|
|
8
|
+
type StorageLocation = [bigint, number];
|
|
9
|
+
export declare abstract class BaseStorageView<Val extends Value, Type extends TypeNode = TypeNode> extends View<Storage, Val, [bigint, number], Type> {
|
|
10
|
+
key: bigint;
|
|
11
|
+
endOffsetInWord: number;
|
|
12
|
+
constructor(type: Type, loc: [bigint, number]);
|
|
13
|
+
/**
|
|
14
|
+
* Helper to fetch the word residing at key `key` from `storage`. If the key is missing return an all-0 value.
|
|
15
|
+
*/
|
|
16
|
+
protected fetchWord(key: bigint, storage: Storage): Uint8Array;
|
|
17
|
+
protected setWord(key: bigint, value: Uint8Array, storage: Storage): Storage;
|
|
18
|
+
/**
|
|
19
|
+
* Helper to fetch `numBytes` bytes from `storage` starting at offset `off`.
|
|
20
|
+
*/
|
|
21
|
+
protected fetchBytes(wordOff: bigint, offInWord: number, numBytes: number, state: Storage): Uint8Array;
|
|
22
|
+
/**
|
|
23
|
+
* Helper to decode an int type at a given location in storage.
|
|
24
|
+
*/
|
|
25
|
+
protected decodeIntAt(key: bigint, endOffsetInWord: number, type: IntType, state: Storage): bigint | DecodingFailure;
|
|
26
|
+
protected encodeIntAt(val: bigint, key: bigint, endOffsetInWord: number, type: IntType, state: Storage): Storage;
|
|
27
|
+
pp(): string;
|
|
28
|
+
/**
|
|
29
|
+
* The first location after the end of this view
|
|
30
|
+
*/
|
|
31
|
+
abstract nextLoc(): StorageLocation | undefined;
|
|
32
|
+
abstract decode(state: Storage, mapKeys?: MapKeys): Val | DecodingFailure;
|
|
33
|
+
abstract encode(value: Val, state: Storage): Storage;
|
|
34
|
+
}
|
|
35
|
+
export declare class IntStorageView extends BaseStorageView<bigint, IntType> {
|
|
36
|
+
decode(state: Storage): bigint | DecodingFailure;
|
|
37
|
+
nextLoc(): StorageLocation;
|
|
38
|
+
encode(value: bigint, state: Storage): Storage;
|
|
39
|
+
}
|
|
40
|
+
export declare class BoolStorageView extends BaseStorageView<boolean, BoolType> {
|
|
41
|
+
decode(state: Storage): boolean | DecodingFailure;
|
|
42
|
+
encode(value: boolean, state: Storage): Storage;
|
|
43
|
+
nextLoc(): StorageLocation;
|
|
44
|
+
}
|
|
45
|
+
export declare class AddressStorageView extends BaseStorageView<Address, AddressType> {
|
|
46
|
+
decode(state: Storage): Address | DecodingFailure;
|
|
47
|
+
encode(value: Address, state: Storage): Storage;
|
|
48
|
+
nextLoc(): StorageLocation;
|
|
49
|
+
}
|
|
50
|
+
export declare class FixedBytesStorageView extends BaseStorageView<Uint8Array, FixedBytesType> {
|
|
51
|
+
decode(state: Storage): Uint8Array | DecodingFailure;
|
|
52
|
+
encode(value: Uint8Array, state: Storage): Storage;
|
|
53
|
+
nextLoc(): StorageLocation;
|
|
54
|
+
}
|
|
55
|
+
export declare class PointerStorageView extends BaseStorageView<Value, PointerType> {
|
|
56
|
+
innerView: BaseStorageView<Value, TypeNode>;
|
|
57
|
+
constructor(type: PointerType, loc: [bigint, number]);
|
|
58
|
+
decode(state: Storage, mapKeys?: MapKeys): Value;
|
|
59
|
+
encode(value: Value, state: Storage): Storage;
|
|
60
|
+
nextLoc(): StorageLocation | undefined;
|
|
61
|
+
}
|
|
62
|
+
export declare class ArrayStorageView extends BaseStorageView<Value[], ArrayType> {
|
|
63
|
+
private _nextLoc;
|
|
64
|
+
constructor(type: ArrayType, loc: [bigint, number]);
|
|
65
|
+
nextLoc(): StorageLocation | undefined;
|
|
66
|
+
decode(state: Storage, mapKeys?: MapKeys): Value[] | DecodingFailure;
|
|
67
|
+
encode(value: Value[], state: Storage): Storage;
|
|
68
|
+
}
|
|
69
|
+
export declare class StructStorageView extends BaseStorageView<Struct, ExpStructType> {
|
|
70
|
+
fieldViews: Array<[string, BaseStorageView<Value, TypeNode>]>;
|
|
71
|
+
private _nextLoc;
|
|
72
|
+
constructor(type: ExpStructType, loc: StorageLocation);
|
|
73
|
+
nextLoc(): StorageLocation | undefined;
|
|
74
|
+
decode(state: Storage, mapKeys?: MapKeys): Struct;
|
|
75
|
+
encode(value: Struct, state: Storage): Storage;
|
|
76
|
+
}
|
|
77
|
+
export declare class MapStorageView extends BaseStorageView<Map<Value, Value>, MappingType> {
|
|
78
|
+
constructor(type: MappingType, loc: StorageLocation);
|
|
79
|
+
nextLoc(): StorageLocation;
|
|
80
|
+
decode(state: Storage, mapKeys?: MapKeys): Map<Value, Value>;
|
|
81
|
+
encode(value: Map<Value, Value>, state: Storage): Storage;
|
|
82
|
+
}
|
|
83
|
+
export declare abstract class PackedArrayStorageView<V extends Value, T extends TypeNode> extends BaseStorageView<V, T> {
|
|
84
|
+
nextLoc(): StorageLocation;
|
|
85
|
+
decodeBytes(state: Storage): Uint8Array | DecodingFailure;
|
|
86
|
+
encodeBytesAt(bytes: Uint8Array, slot: bigint, state: Storage): Storage;
|
|
87
|
+
}
|
|
88
|
+
export declare class BytesStorageView extends PackedArrayStorageView<Uint8Array, BytesType> {
|
|
89
|
+
decode(state: Storage): Uint8Array | DecodingFailure;
|
|
90
|
+
encode(value: Uint8Array, state: Storage): Storage;
|
|
91
|
+
}
|
|
92
|
+
export declare class StringStorageView extends PackedArrayStorageView<string, StringType> {
|
|
93
|
+
decode(state: Storage): string | DecodingFailure;
|
|
94
|
+
encode(value: string, state: Storage): Storage;
|
|
95
|
+
}
|
|
96
|
+
export declare class MissingStorageView extends BaseStorageView<DecodingFailure, MissingType> {
|
|
97
|
+
constructor(type: MissingType, loc: StorageLocation);
|
|
98
|
+
decode(): DecodingFailure;
|
|
99
|
+
encode(): Storage;
|
|
100
|
+
nextLoc(): StorageLocation | undefined;
|
|
101
|
+
}
|
|
102
|
+
export declare function nextWord(loc: StorageLocation): StorageLocation;
|
|
103
|
+
export declare function makeStorageView(type: TypeNode, loc: StorageLocation): BaseStorageView<Value, TypeNode>;
|
|
104
|
+
export {};
|
|
105
|
+
//# sourceMappingURL=view.d.ts.map
|