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
|
@@ -1,393 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.nextWord = nextWord;
|
|
4
|
-
exports.roundLocToType = roundLocToType;
|
|
5
|
-
exports.stor_decodeMap = stor_decodeMap;
|
|
6
|
-
exports.stor_decodeValue = stor_decodeValue;
|
|
7
|
-
const util_1 = require("@ethereumjs/util");
|
|
8
|
-
const keccak_js_1 = require("ethereum-cryptography/keccak.js");
|
|
9
|
-
const solc_typed_ast_1 = require("solc-typed-ast");
|
|
10
|
-
const __1 = require("..");
|
|
11
|
-
const __2 = require("../..");
|
|
12
|
-
/**
|
|
13
|
-
* Helper to fetch the word residing at key `key` from `storage`. Note that
|
|
14
|
-
* this always succeeds as all uninitialized values in storage are defined to
|
|
15
|
-
* contain 0.
|
|
16
|
-
*/
|
|
17
|
-
function fetchWord(key, storage) {
|
|
18
|
-
const keyHash = (0, __2.bigEndianBufToBigint)((0, keccak_js_1.keccak256)((0, __2.bigIntToBuf)(key, 32, "big")));
|
|
19
|
-
const res = storage.get(keyHash);
|
|
20
|
-
if (res === undefined) {
|
|
21
|
-
return new Uint8Array(32);
|
|
22
|
-
}
|
|
23
|
-
return res;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Helper to fetch `numBytes` bytes from `storage` starting at offset `off`.
|
|
27
|
-
* Note that this always succeeds as all uninitialized values in storage are
|
|
28
|
-
* defined to contain 0.
|
|
29
|
-
*/
|
|
30
|
-
function fetchBytes(wordOff, offInWord, numBytes, storage) {
|
|
31
|
-
let curBuf = fetchWord(wordOff, storage);
|
|
32
|
-
const res = new Uint8Array(numBytes);
|
|
33
|
-
for (let i = 0; i < numBytes; i++) {
|
|
34
|
-
res[i] = curBuf[offInWord];
|
|
35
|
-
offInWord = (offInWord + 1) % 32;
|
|
36
|
-
if (offInWord === 0 && i < numBytes - 1) {
|
|
37
|
-
wordOff++;
|
|
38
|
-
curBuf = fetchWord(wordOff, storage);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return res;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Decode a single integer of type `typ` from location `loc` in `storage`.
|
|
45
|
-
* Returns pair `[bigint, number]` containing the decoded number and its size
|
|
46
|
-
* in bytes in storage. Note: Always succeed as we can decode a valid integer
|
|
47
|
-
* in any location in storage.
|
|
48
|
-
*/
|
|
49
|
-
function stor_decodeInt(typ, loc, storage) {
|
|
50
|
-
const size = typ.nBits / 8;
|
|
51
|
-
(0, solc_typed_ast_1.assert)(loc.endOffsetInWord >= size, `Internal Error: Can't decode {0} starting at offset {1} in word {2}`, typ, loc.endOffsetInWord, loc.address);
|
|
52
|
-
const rawBytes = fetchBytes(loc.address, loc.endOffsetInWord - size, size, storage);
|
|
53
|
-
let res = (0, __2.bigEndianBufToBigint)(rawBytes);
|
|
54
|
-
//console.error(`stor_decodeInt rawBytes=${rawBytes.toString(`hex`)} res=${res}`);
|
|
55
|
-
// Convert signed negative 2's complement values
|
|
56
|
-
if (typ.signed && (res & (BigInt(1) << BigInt(typ.nBits - 1))) !== BigInt(0)) {
|
|
57
|
-
// Mask out any 1's above the number's size
|
|
58
|
-
res = res & ((BigInt(1) << BigInt(typ.nBits)) - BigInt(1));
|
|
59
|
-
res = -((BigInt(1) << BigInt(typ.nBits)) - res);
|
|
60
|
-
}
|
|
61
|
-
(0, solc_typed_ast_1.assert)((0, __2.fits)(res, typ), `Decoded value ${res} from ${loc} doesn't fit in expected type ${typ.pp()}`);
|
|
62
|
-
const nextEndOff = loc.endOffsetInWord - size;
|
|
63
|
-
const nextLoc = {
|
|
64
|
-
kind: loc.kind,
|
|
65
|
-
endOffsetInWord: nextEndOff === 0 ? 32 : nextEndOff,
|
|
66
|
-
address: nextEndOff === 0 ? loc.address + BigInt(1) : loc.address
|
|
67
|
-
};
|
|
68
|
-
return [res, nextLoc];
|
|
69
|
-
}
|
|
70
|
-
const byte1 = new solc_typed_ast_1.IntType(8, false);
|
|
71
|
-
/**
|
|
72
|
-
* Decode a boolean from the given location in storage
|
|
73
|
-
*/
|
|
74
|
-
function stor_decodeBool(loc, storage) {
|
|
75
|
-
const [val, nextLoc] = stor_decodeInt(byte1, loc, storage);
|
|
76
|
-
return [val !== BigInt(0), nextLoc];
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Decode an enum value from storage
|
|
80
|
-
*/
|
|
81
|
-
function stor_decodeEnum(def, loc, storage) {
|
|
82
|
-
const typ = (0, solc_typed_ast_1.enumToIntType)(def);
|
|
83
|
-
return stor_decodeInt(typ, loc, storage);
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Decode a boolean from the given location in storage
|
|
87
|
-
*/
|
|
88
|
-
function stor_decodeFixedBytes(typ, loc, storage) {
|
|
89
|
-
(0, solc_typed_ast_1.assert)(loc.endOffsetInWord >= typ.size, `Internal Error: Can't decode {0} starting at offset {1} in word {2}`, typ, loc.endOffsetInWord, loc.address);
|
|
90
|
-
const bytes = fetchBytes(loc.address, loc.endOffsetInWord - typ.size, typ.size, storage);
|
|
91
|
-
const nextEndOff = loc.endOffsetInWord - typ.size;
|
|
92
|
-
const nextLoc = {
|
|
93
|
-
kind: loc.kind,
|
|
94
|
-
endOffsetInWord: nextEndOff === 0 ? 32 : nextEndOff,
|
|
95
|
-
address: nextEndOff === 0 ? loc.address + BigInt(1) : loc.address
|
|
96
|
-
};
|
|
97
|
-
return [bytes, nextLoc];
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Decode a boolean from the given location in storage
|
|
101
|
-
*/
|
|
102
|
-
function stor_decodeAddress(loc, storage) {
|
|
103
|
-
(0, solc_typed_ast_1.assert)(loc.endOffsetInWord >= 20, `Internal Error: Can't decode address starting at offset {0} in word {1}`, loc.endOffsetInWord, loc.address);
|
|
104
|
-
const bytes = fetchBytes(loc.address, loc.endOffsetInWord - 20, 20, storage);
|
|
105
|
-
const nextEndOff = loc.endOffsetInWord - 20;
|
|
106
|
-
const nextLoc = {
|
|
107
|
-
kind: loc.kind,
|
|
108
|
-
endOffsetInWord: nextEndOff === 0 ? 32 : nextEndOff,
|
|
109
|
-
address: nextEndOff === 0 ? loc.address + BigInt(1) : loc.address
|
|
110
|
-
};
|
|
111
|
-
return [new util_1.Address(bytes), nextLoc];
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Compute the 'static' size that a variable of type `typ` would take up in storage
|
|
115
|
-
*/
|
|
116
|
-
function typeStaticStorSize(typ, infer) {
|
|
117
|
-
if (typ instanceof solc_typed_ast_1.IntType) {
|
|
118
|
-
return typ.nBits / 8;
|
|
119
|
-
}
|
|
120
|
-
if (typ instanceof solc_typed_ast_1.FixedBytesType) {
|
|
121
|
-
return typ.size;
|
|
122
|
-
}
|
|
123
|
-
if (typ instanceof solc_typed_ast_1.BoolType) {
|
|
124
|
-
return 1;
|
|
125
|
-
}
|
|
126
|
-
if (typ instanceof solc_typed_ast_1.AddressType) {
|
|
127
|
-
return 20;
|
|
128
|
-
}
|
|
129
|
-
if (typ instanceof solc_typed_ast_1.UserDefinedType) {
|
|
130
|
-
if (typ.definition instanceof solc_typed_ast_1.EnumDefinition) {
|
|
131
|
-
return (0, solc_typed_ast_1.enumToIntType)(typ.definition).nBits / 8;
|
|
132
|
-
}
|
|
133
|
-
if (typ.definition instanceof solc_typed_ast_1.UserDefinedValueTypeDefinition) {
|
|
134
|
-
return typeStaticStorSize(infer.typeNameToTypeNode(typ.definition.underlyingType), infer);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
throw new Error(`NYI typStaticStorSize(${typ.pp()})`);
|
|
138
|
-
}
|
|
139
|
-
function typeFitsInLoc(typ, loc, infer) {
|
|
140
|
-
if (typ instanceof solc_typed_ast_1.PointerType) {
|
|
141
|
-
if (typ.to instanceof solc_typed_ast_1.ArrayType ||
|
|
142
|
-
typ.to instanceof solc_typed_ast_1.BytesType ||
|
|
143
|
-
typ.to instanceof solc_typed_ast_1.StringType ||
|
|
144
|
-
(typ.to instanceof solc_typed_ast_1.UserDefinedType && typ.to.definition instanceof solc_typed_ast_1.StructDefinition) ||
|
|
145
|
-
typ.to instanceof solc_typed_ast_1.MappingType) {
|
|
146
|
-
return loc.endOffsetInWord === 32;
|
|
147
|
-
}
|
|
148
|
-
throw new Error(`NYI typeFitsInLoc(${typ.pp()},...)`);
|
|
149
|
-
}
|
|
150
|
-
const size = typeStaticStorSize(typ, infer);
|
|
151
|
-
(0, solc_typed_ast_1.assert)(size <= 32, `Unexpected type ${typ.pp()} spanning more than a single word`);
|
|
152
|
-
return size <= loc.endOffsetInWord;
|
|
153
|
-
}
|
|
154
|
-
function nextWord(loc) {
|
|
155
|
-
return {
|
|
156
|
-
kind: loc.kind,
|
|
157
|
-
endOffsetInWord: 32,
|
|
158
|
-
address: loc.address + BigInt(1)
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
function roundLocToType(loc, typ, infer) {
|
|
162
|
-
if (typeFitsInLoc(typ, loc, infer)) {
|
|
163
|
-
return loc;
|
|
164
|
-
}
|
|
165
|
-
return nextWord(loc);
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Decode a struct of type `typ` from location `loc` in `storage`.
|
|
169
|
-
* Returns undefined when it fails decoding, otherwise a pair `[any, number]`
|
|
170
|
-
* containing an object with the decoded fields and its size in bytes in storage.
|
|
171
|
-
*/
|
|
172
|
-
function stor_decodeStruct(typ, loc, storage, infer, mapKeys) {
|
|
173
|
-
const def = typ.definition;
|
|
174
|
-
(0, solc_typed_ast_1.assert)(def instanceof solc_typed_ast_1.StructDefinition, `stor_decodeStruct expects a struct, not {0}`, typ);
|
|
175
|
-
(0, solc_typed_ast_1.assert)(loc.endOffsetInWord === 32, `Internal Error: Location of struct of type {0} doesn't start at the end of word {1} - instead at off {2}`, typ, loc.address, loc.endOffsetInWord);
|
|
176
|
-
const res = {};
|
|
177
|
-
for (const field of def.vMembers) {
|
|
178
|
-
let fieldGenT;
|
|
179
|
-
try {
|
|
180
|
-
fieldGenT = infer.variableDeclarationToTypeNode(field);
|
|
181
|
-
}
|
|
182
|
-
catch (e) {
|
|
183
|
-
return undefined;
|
|
184
|
-
}
|
|
185
|
-
const fieldT = (0, __1.changeToLocation)(fieldGenT, solc_typed_ast_1.DataLocation.Storage);
|
|
186
|
-
loc = roundLocToType(loc, fieldT, infer);
|
|
187
|
-
const fieldVal = stor_decodeValue(fieldT, loc, storage, infer, mapKeys);
|
|
188
|
-
if (fieldVal === undefined) {
|
|
189
|
-
return undefined;
|
|
190
|
-
}
|
|
191
|
-
[res[field.name], loc] = fieldVal;
|
|
192
|
-
}
|
|
193
|
-
return [res, loc];
|
|
194
|
-
}
|
|
195
|
-
function keccakOfAddr(addr) {
|
|
196
|
-
const addrBuf = (0, __2.bigIntToBuf)(addr, 32, "big");
|
|
197
|
-
const hashBuf = (0, keccak_js_1.keccak256)(addrBuf);
|
|
198
|
-
return (0, __2.bigEndianBufToBigint)(hashBuf);
|
|
199
|
-
}
|
|
200
|
-
function stor_decodeBytes(loc, storage) {
|
|
201
|
-
(0, solc_typed_ast_1.assert)(loc.endOffsetInWord === 32, `Internal Error: Decoding bytes in the middle (off {0}) of word {1}`, loc.endOffsetInWord, loc.address);
|
|
202
|
-
const word = fetchWord(loc.address, storage);
|
|
203
|
-
const lByte = word[31];
|
|
204
|
-
if (lByte % 2 === 0) {
|
|
205
|
-
/// Less than 31 bytes - length * 2 stored in lowest byte
|
|
206
|
-
const len = lByte / 2;
|
|
207
|
-
(0, solc_typed_ast_1.assert)(len <= 31, `Unexpected length of more than 31`);
|
|
208
|
-
return [word.slice(0, len), nextWord(loc)];
|
|
209
|
-
}
|
|
210
|
-
let [len] = stor_decodeInt(__2.uint256, loc, storage);
|
|
211
|
-
len = (len - BigInt(1)) / BigInt(2);
|
|
212
|
-
if (len > __2.MAX_ARR_DECODE_LIMIT) {
|
|
213
|
-
return undefined;
|
|
214
|
-
}
|
|
215
|
-
const numLen = Number(len);
|
|
216
|
-
const addr = keccakOfAddr(loc.address);
|
|
217
|
-
const res = fetchBytes(addr, 0, numLen, storage);
|
|
218
|
-
return [res, nextWord(loc)];
|
|
219
|
-
}
|
|
220
|
-
function stor_decodeString(loc, storage) {
|
|
221
|
-
const res = stor_decodeBytes(loc, storage);
|
|
222
|
-
if (res === undefined) {
|
|
223
|
-
return undefined;
|
|
224
|
-
}
|
|
225
|
-
const str = (0, util_1.bytesToUtf8)(res[0]);
|
|
226
|
-
return [str, res[1]];
|
|
227
|
-
}
|
|
228
|
-
function stor_decodeArray(typ, loc, storage, infer, mapKeys) {
|
|
229
|
-
let numLen;
|
|
230
|
-
let contentsLoc;
|
|
231
|
-
const res = [];
|
|
232
|
-
if (typ.size === undefined) {
|
|
233
|
-
const [len] = stor_decodeInt(__2.uint256, loc, storage);
|
|
234
|
-
//console.error(`stor_decodeArray: Decoded len ${len} at loc ${ppLoc(loc)}`);
|
|
235
|
-
if (len > __2.MAX_ARR_DECODE_LIMIT) {
|
|
236
|
-
return undefined;
|
|
237
|
-
}
|
|
238
|
-
numLen = Number(len);
|
|
239
|
-
contentsLoc = {
|
|
240
|
-
kind: loc.kind,
|
|
241
|
-
address: keccakOfAddr(loc.address),
|
|
242
|
-
endOffsetInWord: 32
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
if (typ.size > __2.MAX_ARR_DECODE_LIMIT) {
|
|
247
|
-
return undefined;
|
|
248
|
-
}
|
|
249
|
-
numLen = Number(typ.size);
|
|
250
|
-
contentsLoc = loc;
|
|
251
|
-
}
|
|
252
|
-
for (let i = 0; i < numLen; i++) {
|
|
253
|
-
const elRes = stor_decodeValue(typ.elementT, contentsLoc, storage, infer, mapKeys);
|
|
254
|
-
if (elRes === undefined) {
|
|
255
|
-
return undefined;
|
|
256
|
-
}
|
|
257
|
-
res.push(elRes[0]);
|
|
258
|
-
contentsLoc = roundLocToType(elRes[1], typ.elementT, infer);
|
|
259
|
-
}
|
|
260
|
-
return [res, nextWord(loc)];
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* Decode a pointer of type `typ` from location `loc` in `storage`.
|
|
264
|
-
* Returns undefined when it fails decoding, otherwise a pair `[any, number]`
|
|
265
|
-
* containing the decoded value and its size in bytes in storage.
|
|
266
|
-
*
|
|
267
|
-
* Pointers are a little tricky in storage, as you never really store pointers in storage.
|
|
268
|
-
* Instead the 'pointed to' location is computed depending on the type, and some data or empty values may live
|
|
269
|
-
* at the actual poitner location. Here are the possible cases:
|
|
270
|
-
*
|
|
271
|
-
* 1. Pointer to array - the length of the array is stored at the pointer location, the actual array lives at keccak256(loc.address)
|
|
272
|
-
* 2. Pointer to fixed sized array - TODO????
|
|
273
|
-
* 3. Pointer to bytes/string - if shorter than 32 bytes, 2*len is stored in the lowest byte of loc.address and the string/bytes in the upper 31 bytes
|
|
274
|
-
* Otherwise 2*len+1 is stored at loc.address (TODO little endian? big endian encoded?) and the contents are at keccak256(loc.address)
|
|
275
|
-
* 3. Pointer to struct - the struct fields themselves directly starts at the loc.address
|
|
276
|
-
*/
|
|
277
|
-
function stor_decodePointer(typ, loc, storage, infer, mapKeys) {
|
|
278
|
-
if (typ.to instanceof solc_typed_ast_1.BytesType) {
|
|
279
|
-
return stor_decodeBytes(loc, storage);
|
|
280
|
-
}
|
|
281
|
-
if (typ.to instanceof solc_typed_ast_1.StringType) {
|
|
282
|
-
return stor_decodeString(loc, storage);
|
|
283
|
-
}
|
|
284
|
-
if (typ.to instanceof solc_typed_ast_1.UserDefinedType) {
|
|
285
|
-
if (typ.to.definition instanceof solc_typed_ast_1.StructDefinition) {
|
|
286
|
-
return stor_decodeStruct(typ.to, loc, storage, infer, mapKeys);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
if (typ.to instanceof solc_typed_ast_1.ArrayType) {
|
|
290
|
-
return stor_decodeArray(typ.to, loc, storage, infer, mapKeys);
|
|
291
|
-
}
|
|
292
|
-
if (typ.to instanceof solc_typed_ast_1.MappingType) {
|
|
293
|
-
return stor_decodeMap(typ.to, loc, storage, infer, mapKeys);
|
|
294
|
-
}
|
|
295
|
-
throw new Error(`NYI stor_decodePointer(${typ.pp()},...)`);
|
|
296
|
-
}
|
|
297
|
-
function translateMapKey(key) {
|
|
298
|
-
if (typeof key === "bigint") {
|
|
299
|
-
return `${key}`;
|
|
300
|
-
}
|
|
301
|
-
if (typeof key === "number" || typeof key === "string") {
|
|
302
|
-
return key;
|
|
303
|
-
}
|
|
304
|
-
if (key instanceof util_1.Address) {
|
|
305
|
-
return key.toString();
|
|
306
|
-
}
|
|
307
|
-
throw new Error(`Unexpected decoded key value: ${key}`);
|
|
308
|
-
}
|
|
309
|
-
function decodeMapRefKey(type, data) {
|
|
310
|
-
if (!(type instanceof solc_typed_ast_1.StringType || type instanceof solc_typed_ast_1.BytesType)) {
|
|
311
|
-
throw new Error(`Invalid map reference key type ${type.pp()}`);
|
|
312
|
-
}
|
|
313
|
-
return type instanceof solc_typed_ast_1.StringType ? (0, util_1.bytesToUtf8)(data) : (0, util_1.bytesToHex)(data);
|
|
314
|
-
}
|
|
315
|
-
function stor_decodeMap(typ, loc, storage, infer, mapKeys) {
|
|
316
|
-
if (mapKeys === undefined) {
|
|
317
|
-
throw new Error(`Cannot decode map ${typ.pp()} without map keys given`);
|
|
318
|
-
}
|
|
319
|
-
const candidateKeys = mapKeys.get(loc.address);
|
|
320
|
-
const res = {};
|
|
321
|
-
// No keys
|
|
322
|
-
if (candidateKeys === undefined) {
|
|
323
|
-
return [res, nextWord(loc)];
|
|
324
|
-
}
|
|
325
|
-
for (const [candidateKey, candidateSlot] of candidateKeys) {
|
|
326
|
-
let decodedKey;
|
|
327
|
-
let decodedValue;
|
|
328
|
-
try {
|
|
329
|
-
if (typ.keyType instanceof solc_typed_ast_1.PointerType) {
|
|
330
|
-
decodedKey = [decodeMapRefKey(typ.keyType.to, candidateKey), null];
|
|
331
|
-
}
|
|
332
|
-
else {
|
|
333
|
-
decodedKey = (0, __1.mem_decodeValue)(typ.keyType, { kind: __1.DataLocationKind.Memory, address: BigInt(0) }, candidateKey, infer);
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
catch (e) {
|
|
337
|
-
continue;
|
|
338
|
-
}
|
|
339
|
-
try {
|
|
340
|
-
decodedValue = stor_decodeValue(typ.valueType, { kind: __1.DataLocationKind.Storage, address: candidateSlot, endOffsetInWord: 32 }, storage, infer, mapKeys);
|
|
341
|
-
}
|
|
342
|
-
catch (e) {
|
|
343
|
-
continue;
|
|
344
|
-
}
|
|
345
|
-
if (decodedKey !== undefined && decodedValue !== undefined) {
|
|
346
|
-
res[translateMapKey(decodedKey[0])] = decodedValue[0];
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
return [res, nextWord(loc)];
|
|
350
|
-
}
|
|
351
|
-
function stor_decodeValue(typ, loc, storage, infer, mapKeys) {
|
|
352
|
-
if (typ instanceof solc_typed_ast_1.IntType) {
|
|
353
|
-
return stor_decodeInt(typ, loc, storage);
|
|
354
|
-
}
|
|
355
|
-
if (typ instanceof solc_typed_ast_1.BoolType) {
|
|
356
|
-
return stor_decodeBool(loc, storage);
|
|
357
|
-
}
|
|
358
|
-
if (typ instanceof solc_typed_ast_1.FixedBytesType) {
|
|
359
|
-
return stor_decodeFixedBytes(typ, loc, storage);
|
|
360
|
-
}
|
|
361
|
-
if (typ instanceof solc_typed_ast_1.AddressType) {
|
|
362
|
-
return stor_decodeAddress(loc, storage);
|
|
363
|
-
}
|
|
364
|
-
if (typ instanceof solc_typed_ast_1.PointerType) {
|
|
365
|
-
return stor_decodePointer(typ, loc, storage, infer, mapKeys);
|
|
366
|
-
}
|
|
367
|
-
if (typ instanceof solc_typed_ast_1.BytesType) {
|
|
368
|
-
return stor_decodeBytes(loc, storage);
|
|
369
|
-
}
|
|
370
|
-
if (typ instanceof solc_typed_ast_1.StringType) {
|
|
371
|
-
return stor_decodeString(loc, storage);
|
|
372
|
-
}
|
|
373
|
-
if (typ instanceof solc_typed_ast_1.ArrayType) {
|
|
374
|
-
return stor_decodeArray(typ, loc, storage, infer, mapKeys);
|
|
375
|
-
}
|
|
376
|
-
if (typ instanceof solc_typed_ast_1.UserDefinedType) {
|
|
377
|
-
if (typ.definition instanceof solc_typed_ast_1.StructDefinition) {
|
|
378
|
-
return stor_decodeStruct(typ, loc, storage, infer, mapKeys);
|
|
379
|
-
}
|
|
380
|
-
if (typ.definition instanceof solc_typed_ast_1.ContractDefinition) {
|
|
381
|
-
return stor_decodeAddress(loc, storage);
|
|
382
|
-
}
|
|
383
|
-
if (typ.definition instanceof solc_typed_ast_1.EnumDefinition) {
|
|
384
|
-
return stor_decodeEnum(typ.definition, loc, storage);
|
|
385
|
-
}
|
|
386
|
-
if (typ.definition instanceof solc_typed_ast_1.UserDefinedValueTypeDefinition) {
|
|
387
|
-
const underlyingType = infer.typeNameToTypeNode(typ.definition.underlyingType);
|
|
388
|
-
return stor_decodeValue(underlyingType, loc, storage, infer, mapKeys);
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
throw new Error(`NYI storage decode for type ${typ.pp()}`);
|
|
392
|
-
}
|
|
393
|
-
//# sourceMappingURL=storage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/debug/decoding/storage.ts"],"names":[],"mappings":"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"}
|