@paraswap/dex-lib 5.0.8 → 5.0.11-force-rfq-revert.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/build/config.js +15 -14
  2. package/build/config.js.map +1 -1
  3. package/build/dex/balancer-v1/balancer-v1.d.ts +1 -1
  4. package/build/dex/balancer-v1/balancer-v1.js +14 -1
  5. package/build/dex/balancer-v1/balancer-v1.js.map +1 -1
  6. package/build/dex/bebop/bebop.d.ts +2 -2
  7. package/build/dex/bebop/bebop.js +15 -2
  8. package/build/dex/bebop/bebop.js.map +1 -1
  9. package/build/dex/cables/cables.d.ts +2 -2
  10. package/build/dex/cables/cables.js +6 -2
  11. package/build/dex/cables/cables.js.map +1 -1
  12. package/build/dex/dexalot/dexalot.d.ts +2 -2
  13. package/build/dex/dexalot/dexalot.js +6 -2
  14. package/build/dex/dexalot/dexalot.js.map +1 -1
  15. package/build/dex/generic-rfq/generic-rfq.d.ts +2 -2
  16. package/build/dex/generic-rfq/generic-rfq.js +11 -2
  17. package/build/dex/generic-rfq/generic-rfq.js.map +1 -1
  18. package/build/dex/hashflow/hashflow.d.ts +2 -2
  19. package/build/dex/hashflow/hashflow.js +6 -2
  20. package/build/dex/hashflow/hashflow.js.map +1 -1
  21. package/build/dex/index.js +8 -0
  22. package/build/dex/index.js.map +1 -1
  23. package/build/dex/metric/metric.js +5 -1
  24. package/build/dex/metric/metric.js.map +1 -1
  25. package/build/dex/native/native.d.ts +2 -2
  26. package/build/dex/native/native.js +8 -2
  27. package/build/dex/native/native.js.map +1 -1
  28. package/build/dex/paraswap-limit-orders/config.js +6 -0
  29. package/build/dex/paraswap-limit-orders/config.js.map +1 -1
  30. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.d.ts +2 -2
  31. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js +11 -2
  32. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js.map +1 -1
  33. package/build/dex/swaap-v2/swaap-v2.d.ts +2 -2
  34. package/build/dex/swaap-v2/swaap-v2.js +10 -2
  35. package/build/dex/swaap-v2/swaap-v2.js.map +1 -1
  36. package/build/dex/uniswap-v3/config.js +28 -0
  37. package/build/dex/uniswap-v3/config.js.map +1 -1
  38. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js +1 -0
  39. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js.map +1 -1
  40. package/build/dex/woo-fi-v2/config.js +1 -1
  41. package/build/dex/woo-fi-v2/config.js.map +1 -1
  42. package/build/dex/woo-fi-v2/woo-fi-v2-math.js +19 -4
  43. package/build/dex/woo-fi-v2/woo-fi-v2-math.js.map +1 -1
  44. package/build/executor/Executor01BytecodeBuilder.d.ts +8 -0
  45. package/build/executor/Executor01BytecodeBuilder.js +124 -12
  46. package/build/executor/Executor01BytecodeBuilder.js.map +1 -1
  47. package/build/executor/Executor02BytecodeBuilder.d.ts +22 -0
  48. package/build/executor/Executor02BytecodeBuilder.js +208 -1
  49. package/build/executor/Executor02BytecodeBuilder.js.map +1 -1
  50. package/build/executor/ExecutorDetector.d.ts +1 -0
  51. package/build/executor/ExecutorDetector.js +14 -0
  52. package/build/executor/ExecutorDetector.js.map +1 -1
  53. package/build/executor/types.d.ts +2 -1
  54. package/build/executor/types.js +4 -0
  55. package/build/executor/types.js.map +1 -1
  56. package/build/generic-swap-transaction-builder.d.ts +5 -1
  57. package/build/generic-swap-transaction-builder.js +142 -51
  58. package/build/generic-swap-transaction-builder.js.map +1 -1
  59. package/build/implementations/local-paraswap-sdk.d.ts +1 -0
  60. package/build/implementations/local-paraswap-sdk.js +7 -1
  61. package/build/implementations/local-paraswap-sdk.js.map +1 -1
  62. package/build/tenderly-simulation.d.ts +96 -17
  63. package/build/tenderly-simulation.js +312 -45
  64. package/build/tenderly-simulation.js.map +1 -1
  65. package/build/types.d.ts +3 -0
  66. package/build/utils.d.ts +1 -0
  67. package/build/utils.js +15 -1
  68. package/build/utils.js.map +1 -1
  69. package/package.json +2 -2
@@ -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
- return foundSoliditySlot.address !== token.toLowerCase() &&
336
- foundSoliditySlot.parentCallType !== 'DELEGATECALL'
337
- ? { slot: candidateSlot, stateProxy: foundSoliditySlot.address }
338
- : { slot: candidateSlot };
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
- return foundVyperSlot.address === token.toLowerCase() &&
345
- foundVyperSlot.parentCallType !== 'DELEGATECALL'
346
- ? {
347
- slot: candidateSlot,
348
- isVyper: true,
349
- stateProxy: foundVyperSlot.address,
350
- }
351
- : { slot: candidateSlot, isVyper: true };
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
- throw new Error(`Could not find a 'balanceOf' mapping slot for token ${token} on chain ${chainId}`);
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
- // console.log(callTrace);
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
- console.log(readSlots);
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
- return token.toLowerCase() !== foundSoliditySlot.address &&
398
- foundSoliditySlot.parentCallType !== 'DELEGATECALL'
399
- ? {
400
- slot: candidateSlot,
401
- stateProxy: foundSoliditySlot.address,
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
- return token.toLowerCase() !== foundVyperSlot.address &&
412
- foundVyperSlot.parentCallType !== 'DELEGATECALL'
413
- ? {
414
- slot: candidateSlot,
415
- stateProxy: foundVyperSlot.address,
416
- }
417
- : {
418
- slot: candidateSlot,
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
- throw new Error(`Could not find a 'allowance' mapping slot for token ${token} on chain ${chainId}`);
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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"}
package/build/types.d.ts CHANGED
@@ -135,6 +135,7 @@ export type AdapterExchangeParam = {
135
135
  };
136
136
  export type GetDexParamOptions = {
137
137
  nowTimestampMs?: number;
138
+ forceRfqRevert?: boolean;
138
139
  };
139
140
  export type DexExchangeParam = {
140
141
  needWrapNative: boolean | NeedWrapNativeFunc;
@@ -154,6 +155,7 @@ export type DexExchangeParam = {
154
155
  insertFromAmountPos?: number;
155
156
  amountsPacked128?: boolean;
156
157
  permit2Approval?: boolean;
158
+ deliversToExecutor?: boolean;
157
159
  };
158
160
  export type DexExchangeParamWithBooleanNeedWrapNative = DexExchangeParam & {
159
161
  needWrapNative: boolean;
@@ -163,6 +165,7 @@ export type DexExchangeBuildParam = DexExchangeParamWithBooleanNeedWrapNative &
163
165
  target: Address;
164
166
  token: Address;
165
167
  };
168
+ fallbackParam?: DexExchangeBuildParam;
166
169
  };
167
170
  export type AdapterMappings = {
168
171
  [side: string]: {
package/build/utils.d.ts CHANGED
@@ -10,6 +10,7 @@ export declare const isAxiosError: (e: any) => e is AxiosError;
10
10
  export declare const isETHAddress: (address: string) => boolean;
11
11
  export declare const prependWithOx: (str: string) => string;
12
12
  export declare const uuidToBytes16: (uuid: string) => string;
13
+ export declare const corruptHexTail: (hex: string, offsetFromEnd?: number) => string;
13
14
  export declare function toUnixTimestamp(date: Date | number): number;
14
15
  export declare function convertToBasisPoints(dist: number[]): number[];
15
16
  export declare function getDexKeysWithNetwork<T>(dexConfig: DexConfigMap<T>): {
package/build/utils.js CHANGED
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.uint256 = exports.uint128 = exports.uint64 = exports.uint32 = exports.uint16 = exports.int256 = exports.int128 = exports.int64 = exports.int32 = exports.int16 = exports.isContractAddress = exports.blockAndTryAggregate = exports.isTruthy = exports.isDestTokenTransferFeeToBeExchanged = exports.normalizeAddress = exports.isSrcTokenTransferFeeToBeExchanged = exports.Utils = exports.isSampled = exports.catchParseLogError = exports.stringify = exports.bigNumberify = exports.bigIntify = exports.uuidToBytes16 = exports.prependWithOx = exports.isETHAddress = exports.isAxiosError = void 0;
6
+ exports.uint256 = exports.uint128 = exports.uint64 = exports.uint32 = exports.uint16 = exports.int256 = exports.int128 = exports.int64 = exports.int32 = exports.int16 = exports.isContractAddress = exports.blockAndTryAggregate = exports.isTruthy = exports.isDestTokenTransferFeeToBeExchanged = exports.normalizeAddress = exports.isSrcTokenTransferFeeToBeExchanged = exports.Utils = exports.isSampled = exports.catchParseLogError = exports.stringify = exports.bigNumberify = exports.bigIntify = exports.corruptHexTail = exports.uuidToBytes16 = exports.prependWithOx = exports.isETHAddress = exports.isAxiosError = void 0;
7
7
  exports.toUnixTimestamp = toUnixTimestamp;
8
8
  exports.convertToBasisPoints = convertToBasisPoints;
9
9
  exports.getDexKeysWithNetwork = getDexKeysWithNetwork;
@@ -30,6 +30,20 @@ const prependWithOx = (str) => str.startsWith('0x') ? str : '0x' + str;
30
30
  exports.prependWithOx = prependWithOx;
31
31
  const uuidToBytes16 = (uuid) => '0x' + uuid.replace(/-/g, '');
32
32
  exports.uuidToBytes16 = uuidToBytes16;
33
+ // TEST-ONLY (staging fallback campaign, see GetDexParamOptions.forceRfqRevert):
34
+ // corrupt a hex blob in place — same length, 32 bytes at `offset` from the END
35
+ // inverted — so a maker signature (or any signed region) fails verification
36
+ // on-chain while every calldata offset stays where the builder computed it.
37
+ const corruptHexTail = (hex, offsetFromEnd = 0) => {
38
+ const raw = hex.replace(/^0x/, '');
39
+ const end = raw.length - offsetFromEnd * 2;
40
+ const start = Math.max(0, end - 64);
41
+ const flipped = raw
42
+ .slice(start, end)
43
+ .replace(/[0-9a-fA-F]/g, c => (15 - parseInt(c, 16)).toString(16));
44
+ return '0x' + raw.slice(0, start) + flipped + raw.slice(end);
45
+ };
46
+ exports.corruptHexTail = corruptHexTail;
33
47
  function toUnixTimestamp(date) {
34
48
  const timestamp = date instanceof Date ? date.getTime() : date;
35
49
  return Math.floor(timestamp / 1000);