@paraswap/dex-lib 5.0.9 → 5.0.11
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.
|
@@ -11,9 +11,18 @@ interface TokenStorageSlots {
|
|
|
11
11
|
balanceSlot: string;
|
|
12
12
|
allowanceSlot: string;
|
|
13
13
|
isVyper?: boolean;
|
|
14
|
+
isSolady?: boolean;
|
|
15
|
+
partition?: string;
|
|
14
16
|
stateProxy?: string;
|
|
15
17
|
additionalOverrides?: StateOverride;
|
|
16
18
|
}
|
|
19
|
+
interface FoundSlot {
|
|
20
|
+
slot: string;
|
|
21
|
+
isVyper?: boolean;
|
|
22
|
+
isSolady?: boolean;
|
|
23
|
+
partition?: string;
|
|
24
|
+
stateProxy?: string;
|
|
25
|
+
}
|
|
17
26
|
interface SimulateTransactionRequest {
|
|
18
27
|
from: string | null;
|
|
19
28
|
to: string | null;
|
|
@@ -112,6 +121,11 @@ export type SimulationResult = {
|
|
|
112
121
|
export declare class TenderlySimulator {
|
|
113
122
|
static readonly DEFAULT_OWNER = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
|
114
123
|
static readonly DEFAULT_SPENDER = "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";
|
|
124
|
+
static readonly SLOT_VERIFICATION_AMOUNT = 123456789012345678901234567n;
|
|
125
|
+
static readonly SOLADY_BALANCE_SLOT_SEED = "0x87a211a2";
|
|
126
|
+
static readonly SOLADY_ALLOWANCE_SLOT_SEED = "0x7f5e9f20";
|
|
127
|
+
static readonly B20_BALANCES_SLOT = "0xc78b71fee795ddd74aff64ea9b2474194c938c3196430e10bb5f01ed48434004";
|
|
128
|
+
static readonly B20_ALLOWANCES_SLOT = "0xc78b71fee795ddd74aff64ea9b2474194c938c3196430e10bb5f01ed48434005";
|
|
115
129
|
private static instance;
|
|
116
130
|
private constructor();
|
|
117
131
|
static getInstance(cache?: ICache, tenderlyToken?: string, tenderlyProject?: string, tenderlyAccountId?: string): TenderlySimulator;
|
|
@@ -122,11 +136,13 @@ export declare class TenderlySimulator {
|
|
|
122
136
|
getSLOADCalls: (callTrace: SimulatedTransactionCall, parentCall?: SimulatedTransactionCall | null) => SimulatedTransactionCallWithParent[];
|
|
123
137
|
/**
|
|
124
138
|
*
|
|
125
|
-
* @param balanceOfSlot storage slot of `balanceOf` mapping
|
|
139
|
+
* @param balanceOfSlot storage slot of `balanceOf` mapping (Solady slot seed if `isSolady`)
|
|
126
140
|
* @param owner account's address
|
|
127
141
|
* @param isVyper `true` if contract is written in Vyper
|
|
142
|
+
* @param isSolady `true` if contract uses Solady ERC20 storage layout
|
|
143
|
+
* @param partition partition key if contract uses partitioned storage layout
|
|
128
144
|
*/
|
|
129
|
-
calculateAddressBalanceSlot(balanceOfSlot: string, owner: string, isVyper?: boolean): string;
|
|
145
|
+
calculateAddressBalanceSlot(balanceOfSlot: string, owner: string, isVyper?: boolean, isSolady?: boolean, partition?: string): string;
|
|
130
146
|
/**
|
|
131
147
|
*
|
|
132
148
|
* @param balanceOfSlot storage slot of `balanceOf` mapping
|
|
@@ -139,14 +155,31 @@ export declare class TenderlySimulator {
|
|
|
139
155
|
* @param owner account's address
|
|
140
156
|
*/
|
|
141
157
|
calculateVyperAddressBalanceSlot(balanceOfSlot: string, owner: string): string;
|
|
158
|
+
/**
|
|
159
|
+
* Solady ERC20 stores balances at `keccak256(owner ++ seed)` where the seed
|
|
160
|
+
* is the 12-byte-padded `_BALANCE_SLOT_SEED` library constant
|
|
161
|
+
* @param balanceSlotSeed Solady balance slot seed
|
|
162
|
+
* @param owner account's address
|
|
163
|
+
*/
|
|
164
|
+
calculateSoladyAddressBalanceSlot(balanceSlotSeed: string, owner: string): string;
|
|
165
|
+
/**
|
|
166
|
+
* Partitioned layout (e.g. ViciERC20's `balances[partition][owner]`):
|
|
167
|
+
* balance is stored at `keccak256(owner ++ keccak256(partition ++ slot))`
|
|
168
|
+
* @param balanceOfSlot storage slot of the partitioned balances mapping
|
|
169
|
+
* @param owner account's address
|
|
170
|
+
* @param partition partition key (item/token id) as a 32-byte value
|
|
171
|
+
*/
|
|
172
|
+
calculatePartitionedAddressBalanceSlot(balanceOfSlot: string, owner: string, partition: string): string;
|
|
142
173
|
/**
|
|
143
174
|
*
|
|
144
|
-
* @param allowanceSlot storage slot of `allowance` mapping
|
|
175
|
+
* @param allowanceSlot storage slot of `allowance` mapping (Solady slot seed if `isSolady`)
|
|
145
176
|
* @param owner account's address
|
|
146
177
|
* @param spender spender's address
|
|
147
178
|
* @param isVyper `true` if contract is written in Vyper
|
|
179
|
+
* @param isSolady `true` if contract uses Solady ERC20 storage layout
|
|
180
|
+
* @param partition partition key if contract uses partitioned storage layout
|
|
148
181
|
*/
|
|
149
|
-
calculateAddressAllowanceSlot(allowanceSlot: string, owner: string, spender: string, isVyper?: boolean): string;
|
|
182
|
+
calculateAddressAllowanceSlot(allowanceSlot: string, owner: string, spender: string, isVyper?: boolean, isSolady?: boolean, partition?: string): string;
|
|
150
183
|
/**
|
|
151
184
|
*
|
|
152
185
|
* @param allowanceSlot storage slot of `allowance` mapping
|
|
@@ -161,30 +194,76 @@ export declare class TenderlySimulator {
|
|
|
161
194
|
* @param spender spender's address
|
|
162
195
|
*/
|
|
163
196
|
calculateVyperAddressAllowanceSlot(allowanceSlot: string, owner: string, spender: string): string;
|
|
197
|
+
/**
|
|
198
|
+
* Solady ERC20 stores allowances at `keccak256(owner ++ seed ++ spender)`
|
|
199
|
+
* where the seed is the 12-byte-padded `_ALLOWANCE_SLOT_SEED` library constant
|
|
200
|
+
* @param allowanceSlotSeed Solady allowance slot seed
|
|
201
|
+
* @param owner account's address
|
|
202
|
+
* @param spender spender's address
|
|
203
|
+
*/
|
|
204
|
+
calculateSoladyAddressAllowanceSlot(allowanceSlotSeed: string, owner: string, spender: string): string;
|
|
205
|
+
/**
|
|
206
|
+
* Partitioned layout (e.g. ViciERC20's `allowances[owner][partition][spender]`):
|
|
207
|
+
* allowance is stored at
|
|
208
|
+
* `keccak256(spender ++ keccak256(partition ++ keccak256(owner ++ slot)))`
|
|
209
|
+
* @param allowanceSlot storage slot of the partitioned allowances mapping
|
|
210
|
+
* @param owner account's address
|
|
211
|
+
* @param spender spender's address
|
|
212
|
+
* @param partition partition key (item/token id) as a 32-byte value
|
|
213
|
+
*/
|
|
214
|
+
calculatePartitionedAddressAllowanceSlot(allowanceSlot: string, owner: string, spender: string, partition: string): string;
|
|
164
215
|
buildBalanceOfSimulationRequest(chainId: number, token: string, owner: string): SimulateTransactionRequest;
|
|
165
216
|
buildAllowanceSimulationRequest(chainId: number, token: string, owner: string, spender: string): SimulateTransactionRequest;
|
|
217
|
+
private decodeUintOutput;
|
|
218
|
+
/**
|
|
219
|
+
* Simulates the given read call with the state override applied and checks
|
|
220
|
+
* that the override actually controls the returned value: the call must
|
|
221
|
+
* succeed and return a non-zero value different from the baseline.
|
|
222
|
+
* With `allowScaled` an exact match with `writtenValue` is not required —
|
|
223
|
+
* tokens with derived balances (e.g. stETH shares, aToken scaled balances)
|
|
224
|
+
* return a scaled value. Without it, only an exact match passes
|
|
225
|
+
*/
|
|
226
|
+
private simulateAndCheckOutput;
|
|
227
|
+
/**
|
|
228
|
+
* Verifies a candidate `balanceOf` mapping slot by overriding the derived
|
|
229
|
+
* slot with a distinctive value and checking that `balanceOf` reflects it
|
|
230
|
+
* @param chainId token chain id
|
|
231
|
+
* @param token token address
|
|
232
|
+
* @param foundSlot candidate slot to verify
|
|
233
|
+
* @param baselineValue `balanceOf` result without the override applied
|
|
234
|
+
*/
|
|
235
|
+
verifyTokenBalanceSlot(chainId: number, token: string, foundSlot: FoundSlot, baselineValue?: bigint): Promise<boolean>;
|
|
236
|
+
/**
|
|
237
|
+
* Verifies a candidate `allowance` mapping slot by overriding the derived
|
|
238
|
+
* slot with a distinctive value and checking that `allowance` reflects it
|
|
239
|
+
* @param chainId token chain id
|
|
240
|
+
* @param token token address
|
|
241
|
+
* @param foundSlot candidate slot to verify
|
|
242
|
+
* @param baselineValue `allowance` result without the override applied
|
|
243
|
+
*/
|
|
244
|
+
verifyTokenAllowanceSlot(chainId: number, token: string, foundSlot: FoundSlot, baselineValue?: bigint): Promise<boolean>;
|
|
245
|
+
/**
|
|
246
|
+
* Builds a `FoundSlot` from a matched SLOAD. `storage_address` is where the
|
|
247
|
+
* read actually happened: if it differs from the token, the state lives on
|
|
248
|
+
* an external contract (state proxy) and overrides must target it
|
|
249
|
+
*/
|
|
250
|
+
private buildFoundSlot;
|
|
166
251
|
/**
|
|
167
252
|
* Finds the slot of the `balanceOf` mapping in given token contract's storage.
|
|
168
|
-
* Supports `Solidity` and `Vyper` contracts
|
|
253
|
+
* Supports `Solidity` and `Vyper` contracts.
|
|
254
|
+
* Found slots are verified with an additional simulation before being returned
|
|
169
255
|
* @param chainId token chain id
|
|
170
256
|
* @param token token address
|
|
171
257
|
*/
|
|
172
|
-
findTokenBalanceOfSlot(chainId: number, token: string): Promise<
|
|
173
|
-
slot: string;
|
|
174
|
-
isVyper?: boolean;
|
|
175
|
-
stateProxy?: string;
|
|
176
|
-
}>;
|
|
258
|
+
findTokenBalanceOfSlot(chainId: number, token: string): Promise<FoundSlot>;
|
|
177
259
|
/**
|
|
178
|
-
* Finds the slot of the `allowance` mapping in given token contract's storage
|
|
179
|
-
* Supports `Solidity` and `Vyper` contracts
|
|
260
|
+
* Finds the slot of the `allowance` mapping in given token contract's storage.
|
|
261
|
+
* Supports `Solidity` and `Vyper` contracts.
|
|
262
|
+
* Found slots are verified with an additional simulation before being returned
|
|
180
263
|
* @param chainId token chain id
|
|
181
264
|
* @param token token address
|
|
182
265
|
*/
|
|
183
|
-
findTokenAllowanceSlot(chainId: number, token: string): Promise<
|
|
184
|
-
slot: string;
|
|
185
|
-
isVyper?: boolean;
|
|
186
|
-
stateProxy?: string;
|
|
187
|
-
}>;
|
|
266
|
+
findTokenAllowanceSlot(chainId: number, token: string): Promise<FoundSlot>;
|
|
188
267
|
/**
|
|
189
268
|
* Returns storage slots for the given token contract.
|
|
190
269
|
* @param chainId Token chain ID
|
|
@@ -109,6 +109,20 @@ class TenderlySimulator {
|
|
|
109
109
|
// public constants
|
|
110
110
|
static DEFAULT_OWNER = '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
|
|
111
111
|
static DEFAULT_SPENDER = '0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb';
|
|
112
|
+
// distinctive value written into a candidate slot during verification,
|
|
113
|
+
// unlikely to collide with any pre-existing balance/allowance
|
|
114
|
+
static SLOT_VERIFICATION_AMOUNT = 123456789012345678901234567n;
|
|
115
|
+
// Solady ERC20 doesn't use Solidity mappings — balances/allowances live at
|
|
116
|
+
// slots derived from these fixed library constants
|
|
117
|
+
// https://github.com/Vectorized/solady/blob/main/src/tokens/ERC20.sol
|
|
118
|
+
static SOLADY_BALANCE_SLOT_SEED = '0x87a211a2';
|
|
119
|
+
static SOLADY_ALLOWANCE_SLOT_SEED = '0x7f5e9f20';
|
|
120
|
+
// B20 native tokens (Base Beryl upgrade) are Rust precompiles reading
|
|
121
|
+
// regular Solidity mappings under the ERC-7201 `base.b20` namespace
|
|
122
|
+
// (root 0x…434000): balances at offset 4, allowances at offset 5
|
|
123
|
+
// https://github.com/base/base crates/common/precompiles/src/common/core_storage.rs
|
|
124
|
+
static B20_BALANCES_SLOT = '0xc78b71fee795ddd74aff64ea9b2474194c938c3196430e10bb5f01ed48434004';
|
|
125
|
+
static B20_ALLOWANCES_SLOT = '0xc78b71fee795ddd74aff64ea9b2474194c938c3196430e10bb5f01ed48434005';
|
|
112
126
|
// singleton
|
|
113
127
|
static instance;
|
|
114
128
|
constructor() { }
|
|
@@ -210,11 +224,19 @@ class TenderlySimulator {
|
|
|
210
224
|
};
|
|
211
225
|
/**
|
|
212
226
|
*
|
|
213
|
-
* @param balanceOfSlot storage slot of `balanceOf` mapping
|
|
227
|
+
* @param balanceOfSlot storage slot of `balanceOf` mapping (Solady slot seed if `isSolady`)
|
|
214
228
|
* @param owner account's address
|
|
215
229
|
* @param isVyper `true` if contract is written in Vyper
|
|
230
|
+
* @param isSolady `true` if contract uses Solady ERC20 storage layout
|
|
231
|
+
* @param partition partition key if contract uses partitioned storage layout
|
|
216
232
|
*/
|
|
217
|
-
calculateAddressBalanceSlot(balanceOfSlot, owner, isVyper = false) {
|
|
233
|
+
calculateAddressBalanceSlot(balanceOfSlot, owner, isVyper = false, isSolady = false, partition) {
|
|
234
|
+
if (partition) {
|
|
235
|
+
return this.calculatePartitionedAddressBalanceSlot(balanceOfSlot, owner, partition);
|
|
236
|
+
}
|
|
237
|
+
if (isSolady) {
|
|
238
|
+
return this.calculateSoladyAddressBalanceSlot(balanceOfSlot, owner);
|
|
239
|
+
}
|
|
218
240
|
return isVyper
|
|
219
241
|
? this.calculateVyperAddressBalanceSlot(balanceOfSlot, owner)
|
|
220
242
|
: this.calculateSolidityAddressBalanceSlot(balanceOfSlot, owner);
|
|
@@ -235,14 +257,47 @@ class TenderlySimulator {
|
|
|
235
257
|
calculateVyperAddressBalanceSlot(balanceOfSlot, owner) {
|
|
236
258
|
return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([balanceOfSlot, ethers_1.ethers.utils.hexZeroPad(owner, 32)]));
|
|
237
259
|
}
|
|
260
|
+
/**
|
|
261
|
+
* Solady ERC20 stores balances at `keccak256(owner ++ seed)` where the seed
|
|
262
|
+
* is the 12-byte-padded `_BALANCE_SLOT_SEED` library constant
|
|
263
|
+
* @param balanceSlotSeed Solady balance slot seed
|
|
264
|
+
* @param owner account's address
|
|
265
|
+
*/
|
|
266
|
+
calculateSoladyAddressBalanceSlot(balanceSlotSeed, owner) {
|
|
267
|
+
return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([
|
|
268
|
+
ethers_1.ethers.utils.hexZeroPad(owner, 20),
|
|
269
|
+
ethers_1.ethers.utils.hexZeroPad(balanceSlotSeed, 12),
|
|
270
|
+
]));
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Partitioned layout (e.g. ViciERC20's `balances[partition][owner]`):
|
|
274
|
+
* balance is stored at `keccak256(owner ++ keccak256(partition ++ slot))`
|
|
275
|
+
* @param balanceOfSlot storage slot of the partitioned balances mapping
|
|
276
|
+
* @param owner account's address
|
|
277
|
+
* @param partition partition key (item/token id) as a 32-byte value
|
|
278
|
+
*/
|
|
279
|
+
calculatePartitionedAddressBalanceSlot(balanceOfSlot, owner, partition) {
|
|
280
|
+
return this.calculateSolidityAddressBalanceSlot(ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([
|
|
281
|
+
ethers_1.ethers.utils.hexZeroPad(partition, 32),
|
|
282
|
+
balanceOfSlot,
|
|
283
|
+
])), owner);
|
|
284
|
+
}
|
|
238
285
|
/**
|
|
239
286
|
*
|
|
240
|
-
* @param allowanceSlot storage slot of `allowance` mapping
|
|
287
|
+
* @param allowanceSlot storage slot of `allowance` mapping (Solady slot seed if `isSolady`)
|
|
241
288
|
* @param owner account's address
|
|
242
289
|
* @param spender spender's address
|
|
243
290
|
* @param isVyper `true` if contract is written in Vyper
|
|
291
|
+
* @param isSolady `true` if contract uses Solady ERC20 storage layout
|
|
292
|
+
* @param partition partition key if contract uses partitioned storage layout
|
|
244
293
|
*/
|
|
245
|
-
calculateAddressAllowanceSlot(allowanceSlot, owner, spender, isVyper = false) {
|
|
294
|
+
calculateAddressAllowanceSlot(allowanceSlot, owner, spender, isVyper = false, isSolady = false, partition) {
|
|
295
|
+
if (partition) {
|
|
296
|
+
return this.calculatePartitionedAddressAllowanceSlot(allowanceSlot, owner, spender, partition);
|
|
297
|
+
}
|
|
298
|
+
if (isSolady) {
|
|
299
|
+
return this.calculateSoladyAddressAllowanceSlot(allowanceSlot, owner, spender);
|
|
300
|
+
}
|
|
246
301
|
return isVyper
|
|
247
302
|
? this.calculateVyperAddressAllowanceSlot(allowanceSlot, owner, spender)
|
|
248
303
|
: this.calculateSolidityAddressAllowanceSlot(allowanceSlot, owner, spender);
|
|
@@ -273,6 +328,37 @@ class TenderlySimulator {
|
|
|
273
328
|
]));
|
|
274
329
|
return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([slotHash, ethers_1.ethers.utils.hexZeroPad(spender, 32)]));
|
|
275
330
|
}
|
|
331
|
+
/**
|
|
332
|
+
* Solady ERC20 stores allowances at `keccak256(owner ++ seed ++ spender)`
|
|
333
|
+
* where the seed is the 12-byte-padded `_ALLOWANCE_SLOT_SEED` library constant
|
|
334
|
+
* @param allowanceSlotSeed Solady allowance slot seed
|
|
335
|
+
* @param owner account's address
|
|
336
|
+
* @param spender spender's address
|
|
337
|
+
*/
|
|
338
|
+
calculateSoladyAddressAllowanceSlot(allowanceSlotSeed, owner, spender) {
|
|
339
|
+
return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([
|
|
340
|
+
ethers_1.ethers.utils.hexZeroPad(owner, 20),
|
|
341
|
+
ethers_1.ethers.utils.hexZeroPad(allowanceSlotSeed, 12),
|
|
342
|
+
ethers_1.ethers.utils.hexZeroPad(spender, 20),
|
|
343
|
+
]));
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Partitioned layout (e.g. ViciERC20's `allowances[owner][partition][spender]`):
|
|
347
|
+
* allowance is stored at
|
|
348
|
+
* `keccak256(spender ++ keccak256(partition ++ keccak256(owner ++ slot)))`
|
|
349
|
+
* @param allowanceSlot storage slot of the partitioned allowances mapping
|
|
350
|
+
* @param owner account's address
|
|
351
|
+
* @param spender spender's address
|
|
352
|
+
* @param partition partition key (item/token id) as a 32-byte value
|
|
353
|
+
*/
|
|
354
|
+
calculatePartitionedAddressAllowanceSlot(allowanceSlot, owner, spender, partition) {
|
|
355
|
+
const ownerHash = ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([ethers_1.ethers.utils.hexZeroPad(owner, 32), allowanceSlot]));
|
|
356
|
+
const partitionHash = ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([ethers_1.ethers.utils.hexZeroPad(partition, 32), ownerHash]));
|
|
357
|
+
return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([
|
|
358
|
+
ethers_1.ethers.utils.hexZeroPad(spender, 32),
|
|
359
|
+
partitionHash,
|
|
360
|
+
]));
|
|
361
|
+
}
|
|
276
362
|
buildBalanceOfSimulationRequest(chainId, token, owner) {
|
|
277
363
|
const iface = new ethers_1.ethers.utils.Interface([
|
|
278
364
|
'function balanceOf(address owner) view returns (uint)',
|
|
@@ -295,9 +381,113 @@ class TenderlySimulator {
|
|
|
295
381
|
chainId,
|
|
296
382
|
};
|
|
297
383
|
}
|
|
384
|
+
decodeUintOutput(output) {
|
|
385
|
+
if (!output || output === '0x') {
|
|
386
|
+
return null;
|
|
387
|
+
}
|
|
388
|
+
try {
|
|
389
|
+
const [decoded] = ethers_1.ethers.utils.defaultAbiCoder.decode(['uint256'], output);
|
|
390
|
+
return decoded.toBigInt();
|
|
391
|
+
}
|
|
392
|
+
catch (e) {
|
|
393
|
+
return null;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Simulates the given read call with the state override applied and checks
|
|
398
|
+
* that the override actually controls the returned value: the call must
|
|
399
|
+
* succeed and return a non-zero value different from the baseline.
|
|
400
|
+
* With `allowScaled` an exact match with `writtenValue` is not required —
|
|
401
|
+
* tokens with derived balances (e.g. stETH shares, aToken scaled balances)
|
|
402
|
+
* return a scaled value. Without it, only an exact match passes
|
|
403
|
+
*/
|
|
404
|
+
async simulateAndCheckOutput(request, writtenValue, baselineValue, allowScaled) {
|
|
405
|
+
try {
|
|
406
|
+
const { transaction, simulation } = await this.simulateTransaction(request, true);
|
|
407
|
+
if (!simulation.status) {
|
|
408
|
+
return false;
|
|
409
|
+
}
|
|
410
|
+
const decoded = this.decodeUintOutput(transaction.transaction_info.call_trace.output);
|
|
411
|
+
if (decoded === null || decoded === 0n || decoded === baselineValue) {
|
|
412
|
+
return false;
|
|
413
|
+
}
|
|
414
|
+
if (decoded !== writtenValue) {
|
|
415
|
+
if (!allowScaled) {
|
|
416
|
+
return false;
|
|
417
|
+
}
|
|
418
|
+
console.warn(`Slot override verification for token ${request.to}: written value ${writtenValue} but call returned ${decoded} (derived/scaled value), accepting slot`);
|
|
419
|
+
}
|
|
420
|
+
return true;
|
|
421
|
+
}
|
|
422
|
+
catch (e) {
|
|
423
|
+
return false;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Verifies a candidate `balanceOf` mapping slot by overriding the derived
|
|
428
|
+
* slot with a distinctive value and checking that `balanceOf` reflects it
|
|
429
|
+
* @param chainId token chain id
|
|
430
|
+
* @param token token address
|
|
431
|
+
* @param foundSlot candidate slot to verify
|
|
432
|
+
* @param baselineValue `balanceOf` result without the override applied
|
|
433
|
+
*/
|
|
434
|
+
async verifyTokenBalanceSlot(chainId, token, foundSlot, baselineValue = 0n) {
|
|
435
|
+
const owner = TenderlySimulator.DEFAULT_OWNER;
|
|
436
|
+
const amount = TenderlySimulator.SLOT_VERIFICATION_AMOUNT;
|
|
437
|
+
const slotToOverride = this.calculateAddressBalanceSlot(foundSlot.slot, owner, foundSlot.isVyper, foundSlot.isSolady, foundSlot.partition);
|
|
438
|
+
const address = foundSlot.stateProxy ?? token;
|
|
439
|
+
const stateOverride = {
|
|
440
|
+
[address]: {
|
|
441
|
+
storage: {
|
|
442
|
+
[slotToOverride]: ethers_1.ethers.utils.defaultAbiCoder.encode(['uint'], [amount]),
|
|
443
|
+
},
|
|
444
|
+
},
|
|
445
|
+
};
|
|
446
|
+
return this.simulateAndCheckOutput({
|
|
447
|
+
...this.buildBalanceOfSimulationRequest(chainId, token, owner),
|
|
448
|
+
stateOverride,
|
|
449
|
+
}, amount, baselineValue, true);
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Verifies a candidate `allowance` mapping slot by overriding the derived
|
|
453
|
+
* slot with a distinctive value and checking that `allowance` reflects it
|
|
454
|
+
* @param chainId token chain id
|
|
455
|
+
* @param token token address
|
|
456
|
+
* @param foundSlot candidate slot to verify
|
|
457
|
+
* @param baselineValue `allowance` result without the override applied
|
|
458
|
+
*/
|
|
459
|
+
async verifyTokenAllowanceSlot(chainId, token, foundSlot, baselineValue = 0n) {
|
|
460
|
+
const owner = TenderlySimulator.DEFAULT_OWNER;
|
|
461
|
+
const spender = TenderlySimulator.DEFAULT_SPENDER;
|
|
462
|
+
const amount = TenderlySimulator.SLOT_VERIFICATION_AMOUNT;
|
|
463
|
+
const slotToOverride = this.calculateAddressAllowanceSlot(foundSlot.slot, owner, spender, foundSlot.isVyper, foundSlot.isSolady, foundSlot.partition);
|
|
464
|
+
const address = foundSlot.stateProxy ?? token;
|
|
465
|
+
const stateOverride = {
|
|
466
|
+
[address]: {
|
|
467
|
+
storage: {
|
|
468
|
+
[slotToOverride]: ethers_1.ethers.utils.defaultAbiCoder.encode(['uint'], [amount]),
|
|
469
|
+
},
|
|
470
|
+
},
|
|
471
|
+
};
|
|
472
|
+
return this.simulateAndCheckOutput({
|
|
473
|
+
...this.buildAllowanceSimulationRequest(chainId, token, owner, spender),
|
|
474
|
+
stateOverride,
|
|
475
|
+
}, amount, baselineValue, false);
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Builds a `FoundSlot` from a matched SLOAD. `storage_address` is where the
|
|
479
|
+
* read actually happened: if it differs from the token, the state lives on
|
|
480
|
+
* an external contract (state proxy) and overrides must target it
|
|
481
|
+
*/
|
|
482
|
+
buildFoundSlot(token, readSlotAddress, base) {
|
|
483
|
+
return readSlotAddress !== token.toLowerCase()
|
|
484
|
+
? { ...base, stateProxy: readSlotAddress }
|
|
485
|
+
: { ...base };
|
|
486
|
+
}
|
|
298
487
|
/**
|
|
299
488
|
* Finds the slot of the `balanceOf` mapping in given token contract's storage.
|
|
300
|
-
* Supports `Solidity` and `Vyper` contracts
|
|
489
|
+
* Supports `Solidity` and `Vyper` contracts.
|
|
490
|
+
* Found slots are verified with an additional simulation before being returned
|
|
301
491
|
* @param chainId token chain id
|
|
302
492
|
* @param token token address
|
|
303
493
|
*/
|
|
@@ -310,15 +500,29 @@ class TenderlySimulator {
|
|
|
310
500
|
throw `No simulation with id ${simulationId} details found`;
|
|
311
501
|
}
|
|
312
502
|
const callTrace = simulationDetails.transaction.transaction_info.call_trace;
|
|
503
|
+
// `balanceOf` result without any overrides, used as verification baseline
|
|
504
|
+
const baselineValue = this.decodeUintOutput(callTrace.output) ?? 0n;
|
|
313
505
|
const sloadCalls = this.getSLOADCalls(callTrace);
|
|
314
506
|
// token's storage slots that were read during the `balanceOf` call
|
|
315
507
|
const readSlots = sloadCalls
|
|
316
508
|
.map(call => ({
|
|
317
509
|
slot: call.storage_slot?.[0],
|
|
318
510
|
address: call.storage_address,
|
|
319
|
-
parentCallType: call.parentCall ? call.parentCall.call_type : null,
|
|
320
511
|
}))
|
|
321
512
|
.filter(({ slot }) => !!slot);
|
|
513
|
+
// try Solady layout: balance slot is derived from a fixed seed, not a mapping
|
|
514
|
+
const soladyBalanceOfSlot = this.calculateSoladyAddressBalanceSlot(TenderlySimulator.SOLADY_BALANCE_SLOT_SEED, account);
|
|
515
|
+
const foundSoladySlot = readSlots.find(({ slot }) => slot === soladyBalanceOfSlot);
|
|
516
|
+
if (foundSoladySlot) {
|
|
517
|
+
const candidate = this.buildFoundSlot(token, foundSoladySlot.address, {
|
|
518
|
+
slot: TenderlySimulator.SOLADY_BALANCE_SLOT_SEED,
|
|
519
|
+
isSolady: true,
|
|
520
|
+
});
|
|
521
|
+
if (await this.verifyTokenBalanceSlot(chainId, token, candidate, baselineValue)) {
|
|
522
|
+
return candidate;
|
|
523
|
+
}
|
|
524
|
+
console.warn(`Candidate 'balanceOf' slot seed (solady) for token ${token} on chain ${chainId} failed verification, continuing search`);
|
|
525
|
+
}
|
|
322
526
|
const startingPoints = [
|
|
323
527
|
// regular contract
|
|
324
528
|
0n,
|
|
@@ -332,31 +536,59 @@ class TenderlySimulator {
|
|
|
332
536
|
const solitidyBalanceOfSlot = this.calculateSolidityAddressBalanceSlot(candidateSlot, account);
|
|
333
537
|
const foundSoliditySlot = readSlots.find(({ slot }) => slot === solitidyBalanceOfSlot);
|
|
334
538
|
if (foundSoliditySlot) {
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
539
|
+
const candidate = this.buildFoundSlot(token, foundSoliditySlot.address, { slot: candidateSlot });
|
|
540
|
+
if (await this.verifyTokenBalanceSlot(chainId, token, candidate, baselineValue)) {
|
|
541
|
+
return candidate;
|
|
542
|
+
}
|
|
543
|
+
console.warn(`Candidate 'balanceOf' slot ${candidateSlot} for token ${token} on chain ${chainId} failed verification, continuing search`);
|
|
339
544
|
}
|
|
340
545
|
// try vyper slot
|
|
341
546
|
const vyperBalanceOfSlot = this.calculateVyperAddressBalanceSlot(candidateSlot, account);
|
|
342
547
|
const foundVyperSlot = readSlots.find(({ slot }) => slot === vyperBalanceOfSlot);
|
|
343
548
|
if (foundVyperSlot) {
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
549
|
+
const candidate = this.buildFoundSlot(token, foundVyperSlot.address, {
|
|
550
|
+
slot: candidateSlot,
|
|
551
|
+
isVyper: true,
|
|
552
|
+
});
|
|
553
|
+
if (await this.verifyTokenBalanceSlot(chainId, token, candidate, baselineValue)) {
|
|
554
|
+
return candidate;
|
|
555
|
+
}
|
|
556
|
+
console.warn(`Candidate 'balanceOf' slot ${candidateSlot} (vyper) for token ${token} on chain ${chainId} failed verification, continuing search`);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
// try partitioned layout (e.g. ViciERC20's `balances[partition][owner]`),
|
|
561
|
+
// often held on an external state contract
|
|
562
|
+
for (let p = 0n; p < 4n; p += 1n) {
|
|
563
|
+
const partition = ethers_1.ethers.utils.defaultAbiCoder.encode(['uint'], [p]);
|
|
564
|
+
for (let i = 0n; i < 1000n; i += 1n) {
|
|
565
|
+
const candidateSlot = ethers_1.ethers.utils.defaultAbiCoder.encode(['uint'], [i]);
|
|
566
|
+
const partitionedBalanceOfSlot = this.calculatePartitionedAddressBalanceSlot(candidateSlot, account, partition);
|
|
567
|
+
const foundPartitionedSlot = readSlots.find(({ slot }) => slot === partitionedBalanceOfSlot);
|
|
568
|
+
if (!foundPartitionedSlot)
|
|
569
|
+
continue;
|
|
570
|
+
const candidate = this.buildFoundSlot(token, foundPartitionedSlot.address, { slot: candidateSlot, partition });
|
|
571
|
+
if (await this.verifyTokenBalanceSlot(chainId, token, candidate, baselineValue)) {
|
|
572
|
+
return candidate;
|
|
352
573
|
}
|
|
574
|
+
console.warn(`Candidate 'balanceOf' slot ${candidateSlot} (partition ${p}) for token ${token} on chain ${chainId} failed verification, continuing search`);
|
|
353
575
|
}
|
|
354
576
|
}
|
|
355
|
-
|
|
577
|
+
// B20 native tokens serve `balanceOf` from a Rust precompile that reads
|
|
578
|
+
// the token's storage directly, so no SLOADs appear in the trace — try
|
|
579
|
+
// the known B20 layout blindly and let verification decide
|
|
580
|
+
const b20Candidate = {
|
|
581
|
+
slot: TenderlySimulator.B20_BALANCES_SLOT,
|
|
582
|
+
};
|
|
583
|
+
if (await this.verifyTokenBalanceSlot(chainId, token, b20Candidate, baselineValue)) {
|
|
584
|
+
return b20Candidate;
|
|
585
|
+
}
|
|
586
|
+
throw new Error(`Could not find a verified 'balanceOf' mapping slot for token ${token} on chain ${chainId}`);
|
|
356
587
|
}
|
|
357
588
|
/**
|
|
358
|
-
* Finds the slot of the `allowance` mapping in given token contract's storage
|
|
359
|
-
* Supports `Solidity` and `Vyper` contracts
|
|
589
|
+
* Finds the slot of the `allowance` mapping in given token contract's storage.
|
|
590
|
+
* Supports `Solidity` and `Vyper` contracts.
|
|
591
|
+
* Found slots are verified with an additional simulation before being returned
|
|
360
592
|
* @param chainId token chain id
|
|
361
593
|
* @param token token address
|
|
362
594
|
*/
|
|
@@ -370,17 +602,29 @@ class TenderlySimulator {
|
|
|
370
602
|
throw `No simulation with id ${simulationId} details found`;
|
|
371
603
|
}
|
|
372
604
|
const callTrace = simulationDetails.transaction.transaction_info.call_trace;
|
|
373
|
-
//
|
|
605
|
+
// `allowance` result without any overrides, used as verification baseline
|
|
606
|
+
const baselineValue = this.decodeUintOutput(callTrace.output) ?? 0n;
|
|
374
607
|
const sloadCalls = this.getSLOADCalls(callTrace);
|
|
375
608
|
// token's storage slots that were read during the `allowance` call
|
|
376
609
|
const readSlots = sloadCalls
|
|
377
610
|
.map(call => ({
|
|
378
611
|
slot: call.storage_slot?.[0],
|
|
379
612
|
address: call.storage_address,
|
|
380
|
-
parentCallType: call.parentCall ? call.parentCall.call_type : null,
|
|
381
613
|
}))
|
|
382
614
|
.filter(({ slot }) => !!slot);
|
|
383
|
-
|
|
615
|
+
// try Solady layout: allowance slot is derived from a fixed seed, not a mapping
|
|
616
|
+
const soladyAllowanceSlot = this.calculateSoladyAddressAllowanceSlot(TenderlySimulator.SOLADY_ALLOWANCE_SLOT_SEED, account, spender);
|
|
617
|
+
const foundSoladySlot = readSlots.find(({ slot }) => slot === soladyAllowanceSlot);
|
|
618
|
+
if (foundSoladySlot) {
|
|
619
|
+
const candidate = this.buildFoundSlot(token, foundSoladySlot.address, {
|
|
620
|
+
slot: TenderlySimulator.SOLADY_ALLOWANCE_SLOT_SEED,
|
|
621
|
+
isSolady: true,
|
|
622
|
+
});
|
|
623
|
+
if (await this.verifyTokenAllowanceSlot(chainId, token, candidate, baselineValue)) {
|
|
624
|
+
return candidate;
|
|
625
|
+
}
|
|
626
|
+
console.warn(`Candidate 'allowance' slot seed (solady) for token ${token} on chain ${chainId} failed verification, continuing search`);
|
|
627
|
+
}
|
|
384
628
|
const startingPoints = [
|
|
385
629
|
// regular contract
|
|
386
630
|
0n,
|
|
@@ -394,33 +638,54 @@ class TenderlySimulator {
|
|
|
394
638
|
const solidityAllowanceSlot = this.calculateSolidityAddressAllowanceSlot(candidateSlot, account, spender);
|
|
395
639
|
const foundSoliditySlot = readSlots.find(({ slot }) => solidityAllowanceSlot === slot);
|
|
396
640
|
if (foundSoliditySlot) {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
}
|
|
403
|
-
: {
|
|
404
|
-
slot: candidateSlot,
|
|
405
|
-
};
|
|
641
|
+
const candidate = this.buildFoundSlot(token, foundSoliditySlot.address, { slot: candidateSlot });
|
|
642
|
+
if (await this.verifyTokenAllowanceSlot(chainId, token, candidate, baselineValue)) {
|
|
643
|
+
return candidate;
|
|
644
|
+
}
|
|
645
|
+
console.warn(`Candidate 'allowance' slot ${candidateSlot} for token ${token} on chain ${chainId} failed verification, continuing search`);
|
|
406
646
|
}
|
|
407
647
|
// try vyper
|
|
408
648
|
const vyperAllowanceSlot = this.calculateVyperAddressAllowanceSlot(candidateSlot, account, spender);
|
|
409
649
|
const foundVyperSlot = readSlots.find(({ slot }) => vyperAllowanceSlot === slot);
|
|
410
650
|
if (foundVyperSlot) {
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
651
|
+
const candidate = this.buildFoundSlot(token, foundVyperSlot.address, {
|
|
652
|
+
slot: candidateSlot,
|
|
653
|
+
isVyper: true,
|
|
654
|
+
});
|
|
655
|
+
if (await this.verifyTokenAllowanceSlot(chainId, token, candidate, baselineValue)) {
|
|
656
|
+
return candidate;
|
|
657
|
+
}
|
|
658
|
+
console.warn(`Candidate 'allowance' slot ${candidateSlot} (vyper) for token ${token} on chain ${chainId} failed verification, continuing search`);
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
// try partitioned layout (e.g. ViciERC20's `allowances[owner][partition][spender]`),
|
|
663
|
+
// often held on an external state contract
|
|
664
|
+
for (let p = 0n; p < 4n; p += 1n) {
|
|
665
|
+
const partition = ethers_1.ethers.utils.defaultAbiCoder.encode(['uint'], [p]);
|
|
666
|
+
for (let i = 0n; i < 1000n; i += 1n) {
|
|
667
|
+
const candidateSlot = ethers_1.ethers.utils.defaultAbiCoder.encode(['uint'], [i]);
|
|
668
|
+
const partitionedAllowanceSlot = this.calculatePartitionedAddressAllowanceSlot(candidateSlot, account, spender, partition);
|
|
669
|
+
const foundPartitionedSlot = readSlots.find(({ slot }) => slot === partitionedAllowanceSlot);
|
|
670
|
+
if (!foundPartitionedSlot)
|
|
671
|
+
continue;
|
|
672
|
+
const candidate = this.buildFoundSlot(token, foundPartitionedSlot.address, { slot: candidateSlot, partition });
|
|
673
|
+
if (await this.verifyTokenAllowanceSlot(chainId, token, candidate, baselineValue)) {
|
|
674
|
+
return candidate;
|
|
420
675
|
}
|
|
676
|
+
console.warn(`Candidate 'allowance' slot ${candidateSlot} (partition ${p}) for token ${token} on chain ${chainId} failed verification, continuing search`);
|
|
421
677
|
}
|
|
422
678
|
}
|
|
423
|
-
|
|
679
|
+
// B20 native tokens serve `allowance` from a Rust precompile that reads
|
|
680
|
+
// the token's storage directly, so no SLOADs appear in the trace — try
|
|
681
|
+
// the known B20 layout blindly and let verification decide
|
|
682
|
+
const b20Candidate = {
|
|
683
|
+
slot: TenderlySimulator.B20_ALLOWANCES_SLOT,
|
|
684
|
+
};
|
|
685
|
+
if (await this.verifyTokenAllowanceSlot(chainId, token, b20Candidate, baselineValue)) {
|
|
686
|
+
return b20Candidate;
|
|
687
|
+
}
|
|
688
|
+
throw new Error(`Could not find a verified 'allowance' mapping slot for token ${token} on chain ${chainId}`);
|
|
424
689
|
}
|
|
425
690
|
/**
|
|
426
691
|
* Returns storage slots for the given token contract.
|
|
@@ -448,6 +713,8 @@ class TenderlySimulator {
|
|
|
448
713
|
balanceSlot: balanceSlot.slot,
|
|
449
714
|
allowanceSlot: allowanceSlot.slot,
|
|
450
715
|
isVyper: balanceSlot.isVyper,
|
|
716
|
+
isSolady: balanceSlot.isSolady,
|
|
717
|
+
partition: balanceSlot.partition,
|
|
451
718
|
stateProxy: balanceSlot.stateProxy,
|
|
452
719
|
};
|
|
453
720
|
// no need to await
|
|
@@ -477,7 +744,7 @@ class TenderlySimulator {
|
|
|
477
744
|
// get mapping slots
|
|
478
745
|
const tokenSlots = await this.getTokenStorageSlots(chainId, token);
|
|
479
746
|
// calculate balance slot
|
|
480
|
-
const slotToOverride = this.calculateAddressBalanceSlot(tokenSlots.balanceSlot, account, tokenSlots.isVyper);
|
|
747
|
+
const slotToOverride = this.calculateAddressBalanceSlot(tokenSlots.balanceSlot, account, tokenSlots.isVyper, tokenSlots.isSolady, tokenSlots.partition);
|
|
481
748
|
// add the balance override
|
|
482
749
|
const address = tokenSlots.stateProxy ? tokenSlots.stateProxy : token;
|
|
483
750
|
stateOverride[address] ||= {};
|
|
@@ -501,7 +768,7 @@ class TenderlySimulator {
|
|
|
501
768
|
// get mapping slots
|
|
502
769
|
const tokenSlots = await this.getTokenStorageSlots(chainId, token);
|
|
503
770
|
// calculate allowance slot
|
|
504
|
-
const slotToOverride = this.calculateAddressAllowanceSlot(tokenSlots.allowanceSlot, account, spender, tokenSlots.isVyper);
|
|
771
|
+
const slotToOverride = this.calculateAddressAllowanceSlot(tokenSlots.allowanceSlot, account, spender, tokenSlots.isVyper, tokenSlots.isSolady, tokenSlots.partition);
|
|
505
772
|
// add the allowance override
|
|
506
773
|
const address = tokenSlots.stateProxy ? tokenSlots.stateProxy : token;
|
|
507
774
|
stateOverride[address] ||= {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenderly-simulation.js","sourceRoot":"","sources":["../src/tenderly-simulation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tenderly-simulation.js","sourceRoot":"","sources":["../src/tenderly-simulation.ts"],"names":[],"mappings":"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"}
|