@paraswap/dex-lib 4.8.26 → 4.8.27
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/build/dex/balancer-v2/balancer-v2.d.ts +0 -1
- package/build/dex/balancer-v2/balancer-v2.js +0 -4
- package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
- package/build/dex/bebop/bebop.d.ts +0 -1
- package/build/dex/bebop/bebop.js +0 -8
- package/build/dex/bebop/bebop.js.map +1 -1
- package/build/dex/cables/cables.d.ts +0 -1
- package/build/dex/cables/cables.js +0 -3
- package/build/dex/cables/cables.js.map +1 -1
- package/build/dex/curve-v1/curve-v1.d.ts +0 -1
- package/build/dex/curve-v1/curve-v1.js +0 -4
- package/build/dex/curve-v1/curve-v1.js.map +1 -1
- package/build/dex/curve-v1-factory/curve-v1-factory.d.ts +0 -1
- package/build/dex/curve-v1-factory/curve-v1-factory.js +0 -4
- package/build/dex/curve-v1-factory/curve-v1-factory.js.map +1 -1
- package/build/dex/curve-v2/curve-v2.d.ts +0 -1
- package/build/dex/curve-v2/curve-v2.js +0 -4
- package/build/dex/curve-v2/curve-v2.js.map +1 -1
- package/build/dex/hashflow/hashflow.d.ts +0 -1
- package/build/dex/hashflow/hashflow.js +0 -5
- package/build/dex/hashflow/hashflow.js.map +1 -1
- package/build/dex/idex.d.ts +0 -1
- package/build/dex/lite-psm/lite-psm.d.ts +0 -1
- package/build/dex/lite-psm/lite-psm.js +0 -3
- package/build/dex/lite-psm/lite-psm.js.map +1 -1
- package/build/dex/native/native.d.ts +0 -1
- package/build/dex/native/native.js +0 -6
- package/build/dex/native/native.js.map +1 -1
- package/build/dex/paraswap-limit-orders/paraswap-limit-orders.d.ts +0 -1
- package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js +0 -5
- package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js.map +1 -1
- package/build/dex/solidly-v3/solidly-v3.d.ts +0 -1
- package/build/dex/solidly-v3/solidly-v3.js +0 -4
- package/build/dex/solidly-v3/solidly-v3.js.map +1 -1
- package/build/dex/uniswap-v3/uniswap-v3.d.ts +0 -1
- package/build/dex/uniswap-v3/uniswap-v3.js +0 -4
- package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
- package/build/dex/uniswap-v4/api-go/compare-pricing.d.ts +1 -0
- package/build/dex/uniswap-v4/api-go/compare-pricing.js +187 -0
- package/build/dex/uniswap-v4/api-go/compare-pricing.js.map +1 -0
- package/build/dex/uniswap-v4/api-go/compare-states.d.ts +1 -0
- package/build/dex/uniswap-v4/api-go/compare-states.js +149 -0
- package/build/dex/uniswap-v4/api-go/compare-states.js.map +1 -0
- package/build/dex/uniswap-v4/api-go/fetch-pool-key.d.ts +0 -0
- package/build/dex/uniswap-v4/api-go/fetch-pool-key.js +140 -0
- package/build/dex/uniswap-v4/api-go/fetch-pool-key.js.map +1 -0
- package/build/implementations/local-paraswap-sdk.js +9 -4
- package/build/implementations/local-paraswap-sdk.js.map +1 -1
- package/build/tenderly-simulation.d.ts +221 -0
- package/build/tenderly-simulation.js +517 -0
- package/build/tenderly-simulation.js.map +1 -0
- package/package.json +1 -1
- package/build/abi/BProtocol.json +0 -1155
- package/build/abi/Jarvis.json +0 -1172
- package/build/abi/MStableAsset.json +0 -1545
- package/build/abi/OneInchLp.json +0 -1304
- package/build/abi/Onebit.json +0 -736
- package/build/abi/Shell.json +0 -1294
- package/build/abi/TraderJoeV2Router.json +0 -50
- package/build/abi/idle-dao/idle-cdo-factory.json +0 -38
- package/build/abi/idle-dao/idle-cdo.json +0 -1245
- package/build/abi/infusion/InfusionFactory.json +0 -147
- package/build/abi/infusion/InfusionPair.json +0 -658
- package/build/abi/infusion/InfusionRouter.json +0 -442
- package/build/abi/maker-psm/pot.json +0 -322
- package/build/abi/maker-psm/psm.json +0 -243
- package/build/abi/maker-psm/vat.json +0 -363
- package/build/abi/nomiswap-v2/nomiswap-v2-pool.json +0 -773
- package/build/abi/quick-perps/fast-price-events.json +0 -70
- package/build/abi/quick-perps/fast-price-feed.json +0 -741
- package/build/abi/quick-perps/reader.json +0 -313
- package/build/abi/quick-perps/vault-price-feed.json +0 -323
- package/build/abi/quick-perps/vault.json +0 -1953
- package/build/abi/uniswap-v2/excalibur-pool.json +0 -881
- package/build/abi/uniswap-v2/mdex-factory.json +0 -759
- package/build/abi/wUSDM.json +0 -757
- package/build/abi/zrx.v2.json +0 -1967
- package/build/abi/zrx.v3.json +0 -3454
- package/build/abi/zrx.v4.json +0 -2193
- package/build/dex/OneInchLp.d.ts +0 -24
- package/build/dex/OneInchLp.js +0 -43
- package/build/dex/OneInchLp.js.map +0 -1
- package/build/dex/bProtocol/bProtocol.d.ts +0 -15
- package/build/dex/bProtocol/bProtocol.js +0 -56
- package/build/dex/bProtocol/bProtocol.js.map +0 -1
- package/build/dex/bProtocol/types.d.ts +0 -11
- package/build/dex/bProtocol/types.js +0 -8
- package/build/dex/bProtocol/types.js.map +0 -1
- package/build/dex/ekubo/pools/base-pool.d.ts +0 -47
- package/build/dex/ekubo/pools/base-pool.js +0 -184
- package/build/dex/ekubo/pools/base-pool.js.map +0 -1
- package/build/dex/ekubo/pools/iface.d.ts +0 -46
- package/build/dex/ekubo/pools/iface.js +0 -75
- package/build/dex/ekubo/pools/iface.js.map +0 -1
- package/build/dex/ekubo/pools/math/price.d.ts +0 -7
- package/build/dex/ekubo/pools/math/price.js +0 -112
- package/build/dex/ekubo/pools/math/price.js.map +0 -1
- package/build/dex/ekubo/pools/oracle-pool.d.ts +0 -10
- package/build/dex/ekubo/pools/oracle-pool.js +0 -19
- package/build/dex/ekubo/pools/oracle-pool.js.map +0 -1
- package/build/dex/ekubo/pools/pool-utils.d.ts +0 -44
- package/build/dex/ekubo/pools/pool-utils.js +0 -240
- package/build/dex/ekubo/pools/pool-utils.js.map +0 -1
- package/build/dex/idle-dao/config.d.ts +0 -5
- package/build/dex/idle-dao/config.js +0 -24
- package/build/dex/idle-dao/config.js.map +0 -1
- package/build/dex/idle-dao/idle-dao.d.ts +0 -42
- package/build/dex/idle-dao/idle-dao.js +0 -279
- package/build/dex/idle-dao/idle-dao.js.map +0 -1
- package/build/dex/idle-dao/token_list.d.ts +0 -4
- package/build/dex/idle-dao/token_list.js +0 -289
- package/build/dex/idle-dao/token_list.js.map +0 -1
- package/build/dex/idle-dao/tokens.d.ts +0 -9
- package/build/dex/idle-dao/tokens.js +0 -68
- package/build/dex/idle-dao/tokens.js.map +0 -1
- package/build/dex/idle-dao/types.d.ts +0 -35
- package/build/dex/idle-dao/types.js +0 -11
- package/build/dex/idle-dao/types.js.map +0 -1
- package/build/dex/idle-dao/utils.d.ts +0 -8
- package/build/dex/idle-dao/utils.js +0 -149
- package/build/dex/idle-dao/utils.js.map +0 -1
- package/build/dex/infusion/config.d.ts +0 -3
- package/build/dex/infusion/config.js +0 -20
- package/build/dex/infusion/config.js.map +0 -1
- package/build/dex/infusion/infusion-stable-pool.d.ts +0 -4
- package/build/dex/infusion/infusion-stable-pool.js +0 -74
- package/build/dex/infusion/infusion-stable-pool.js.map +0 -1
- package/build/dex/infusion/infusion.d.ts +0 -51
- package/build/dex/infusion/infusion.js +0 -500
- package/build/dex/infusion/infusion.js.map +0 -1
- package/build/dex/infusion/types.d.ts +0 -45
- package/build/dex/infusion/types.js +0 -3
- package/build/dex/infusion/types.js.map +0 -1
- package/build/dex/infusion/utils/isStablePair.d.ts +0 -2
- package/build/dex/infusion/utils/isStablePair.js +0 -18
- package/build/dex/infusion/utils/isStablePair.js.map +0 -1
- package/build/dex/jarvis.d.ts +0 -56
- package/build/dex/jarvis.js +0 -163
- package/build/dex/jarvis.js.map +0 -1
- package/build/dex/mStable.d.ts +0 -44
- package/build/dex/mStable.js +0 -75
- package/build/dex/mStable.js.map +0 -1
- package/build/dex/maker-psm/config.d.ts +0 -11
- package/build/dex/maker-psm/config.js +0 -53
- package/build/dex/maker-psm/config.js.map +0 -1
- package/build/dex/maker-psm/maker-psm.d.ts +0 -103
- package/build/dex/maker-psm/maker-psm.js +0 -493
- package/build/dex/maker-psm/maker-psm.js.map +0 -1
- package/build/dex/maker-psm/types.d.ts +0 -39
- package/build/dex/maker-psm/types.js +0 -3
- package/build/dex/maker-psm/types.js.map +0 -1
- package/build/dex/onebit/onebit.d.ts +0 -16
- package/build/dex/onebit/onebit.js +0 -61
- package/build/dex/onebit/onebit.js.map +0 -1
- package/build/dex/onebit/types.d.ts +0 -14
- package/build/dex/onebit/types.js +0 -8
- package/build/dex/onebit/types.js.map +0 -1
- package/build/dex/quick-perps/config.d.ts +0 -11
- package/build/dex/quick-perps/config.js +0 -27
- package/build/dex/quick-perps/config.js.map +0 -1
- package/build/dex/quick-perps/fast-price-feed.d.ts +0 -26
- package/build/dex/quick-perps/fast-price-feed.js +0 -184
- package/build/dex/quick-perps/fast-price-feed.js.map +0 -1
- package/build/dex/quick-perps/pool.d.ts +0 -21
- package/build/dex/quick-perps/pool.js +0 -229
- package/build/dex/quick-perps/pool.js.map +0 -1
- package/build/dex/quick-perps/quick-perps.d.ts +0 -53
- package/build/dex/quick-perps/quick-perps.js +0 -247
- package/build/dex/quick-perps/quick-perps.js.map +0 -1
- package/build/dex/quick-perps/types.d.ts +0 -98
- package/build/dex/quick-perps/types.js +0 -3
- package/build/dex/quick-perps/types.js.map +0 -1
- package/build/dex/quick-perps/usdq.d.ts +0 -15
- package/build/dex/quick-perps/usdq.js +0 -62
- package/build/dex/quick-perps/usdq.js.map +0 -1
- package/build/dex/quick-perps/vault-price-feed.d.ts +0 -43
- package/build/dex/quick-perps/vault-price-feed.js +0 -203
- package/build/dex/quick-perps/vault-price-feed.js.map +0 -1
- package/build/dex/quick-perps/vault-utils.d.ts +0 -8
- package/build/dex/quick-perps/vault-utils.js +0 -42
- package/build/dex/quick-perps/vault-utils.js.map +0 -1
- package/build/dex/quick-perps/vault.d.ts +0 -46
- package/build/dex/quick-perps/vault.js +0 -182
- package/build/dex/quick-perps/vault.js.map +0 -1
- package/build/dex/se-vlr/config.d.ts +0 -3
- package/build/dex/se-vlr/config.js +0 -24
- package/build/dex/se-vlr/config.js.map +0 -1
- package/build/dex/se-vlr/se-vlr-pool.d.ts +0 -39
- package/build/dex/se-vlr/se-vlr-pool.js +0 -70
- package/build/dex/se-vlr/se-vlr-pool.js.map +0 -1
- package/build/dex/se-vlr/se-vlr.d.ts +0 -35
- package/build/dex/se-vlr/se-vlr.js +0 -131
- package/build/dex/se-vlr/se-vlr.js.map +0 -1
- package/build/dex/se-vlr/types.d.ts +0 -6
- package/build/dex/se-vlr/types.js +0 -3
- package/build/dex/se-vlr/types.js.map +0 -1
- package/build/dex/shell.d.ts +0 -25
- package/build/dex/shell.js +0 -41
- package/build/dex/shell.js.map +0 -1
- package/build/dex/solidly/forks-override/aerodrome.d.ts +0 -14
- package/build/dex/solidly/forks-override/aerodrome.js +0 -46
- package/build/dex/solidly/forks-override/aerodrome.js.map +0 -1
- package/build/dex/solidly/forks-override/chronos.d.ts +0 -23
- package/build/dex/solidly/forks-override/chronos.js +0 -141
- package/build/dex/solidly/forks-override/chronos.js.map +0 -1
- package/build/dex/solidly/forks-override/usdfi.d.ts +0 -8
- package/build/dex/solidly/forks-override/usdfi.js +0 -15
- package/build/dex/solidly/forks-override/usdfi.js.map +0 -1
- package/build/dex/solidly/forks-override/velocimeter.d.ts +0 -23
- package/build/dex/solidly/forks-override/velocimeter.js +0 -77
- package/build/dex/solidly/forks-override/velocimeter.js.map +0 -1
- package/build/dex/trader-joe-v2.d.ts +0 -40
- package/build/dex/trader-joe-v2.js +0 -74
- package/build/dex/trader-joe-v2.js.map +0 -1
- package/build/dex/uniswap-v2/dfyn.d.ts +0 -19
- package/build/dex/uniswap-v2/dfyn.js +0 -61
- package/build/dex/uniswap-v2/dfyn.js.map +0 -1
- package/build/dex/uniswap-v2/excalibur.d.ts +0 -24
- package/build/dex/uniswap-v2/excalibur.js +0 -47
- package/build/dex/uniswap-v2/excalibur.js.map +0 -1
- package/build/dex/uniswap-v2/mdex.d.ts +0 -24
- package/build/dex/uniswap-v2/mdex.js +0 -50
- package/build/dex/uniswap-v2/mdex.js.map +0 -1
- package/build/dex/uniswap-v2/nomiswap-v2.d.ts +0 -24
- package/build/dex/uniswap-v2/nomiswap-v2.js +0 -57
- package/build/dex/uniswap-v2/nomiswap-v2.js.map +0 -1
- package/build/dex/uniswap-v3/uniswap-v3-new.d.ts +0 -94
- package/build/dex/uniswap-v3/uniswap-v3-new.js +0 -923
- package/build/dex/uniswap-v3/uniswap-v3-new.js.map +0 -1
- package/build/dex/uniswap-v4/contract-math/Position.d.ts +0 -3
- package/build/dex/uniswap-v4/contract-math/Position.js +0 -10
- package/build/dex/uniswap-v4/contract-math/Position.js.map +0 -1
- package/build/dex/usual-bond/config.d.ts +0 -3
- package/build/dex/usual-bond/config.js +0 -13
- package/build/dex/usual-bond/config.js.map +0 -1
- package/build/dex/usual-bond/types.d.ts +0 -7
- package/build/dex/usual-bond/types.js +0 -3
- package/build/dex/usual-bond/types.js.map +0 -1
- package/build/dex/usual-bond/usual-bond.d.ts +0 -35
- package/build/dex/usual-bond/usual-bond.js +0 -176
- package/build/dex/usual-bond/usual-bond.js.map +0 -1
- package/build/dex/wusdm/config.d.ts +0 -3
- package/build/dex/wusdm/config.js +0 -43
- package/build/dex/wusdm/config.js.map +0 -1
- package/build/dex/wusdm/constants.d.ts +0 -2
- package/build/dex/wusdm/constants.js +0 -6
- package/build/dex/wusdm/constants.js.map +0 -1
- package/build/dex/wusdm/types.d.ts +0 -18
- package/build/dex/wusdm/types.js +0 -11
- package/build/dex/wusdm/types.js.map +0 -1
- package/build/dex/wusdm/wusdm-pool.d.ts +0 -21
- package/build/dex/wusdm/wusdm-pool.js +0 -74
- package/build/dex/wusdm/wusdm-pool.js.map +0 -1
- package/build/dex/wusdm/wusdm.d.ts +0 -46
- package/build/dex/wusdm/wusdm.js +0 -243
- package/build/dex/wusdm/wusdm.js.map +0 -1
- package/build/dex/zerox/config.d.ts +0 -2
- package/build/dex/zerox/config.js +0 -33
- package/build/dex/zerox/config.js.map +0 -1
- package/build/dex/zerox/index.d.ts +0 -22
- package/build/dex/zerox/index.js +0 -225
- package/build/dex/zerox/index.js.map +0 -1
- package/build/dex/zerox/order.d.ts +0 -88
- package/build/dex/zerox/order.js +0 -53
- package/build/dex/zerox/order.js.map +0 -1
- package/build/dex/zerox/types.d.ts +0 -73
- package/build/dex/zerox/types.js +0 -21
- package/build/dex/zerox/types.js.map +0 -1
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.TenderlySimulator = void 0;
|
|
40
|
+
/* eslint-disable no-console */
|
|
41
|
+
require("dotenv/config");
|
|
42
|
+
const axios_1 = __importDefault(require("axios"));
|
|
43
|
+
const ethers_1 = require("ethers");
|
|
44
|
+
const fs = __importStar(require("fs/promises"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const constants_1 = require("./constants");
|
|
47
|
+
const lodash_1 = require("lodash");
|
|
48
|
+
let TENDERLY_TOKEN = process.env.TENDERLY_TOKEN;
|
|
49
|
+
let TENDERLY_ACCOUNT_ID = process.env.TENDERLY_ACCOUNT_ID;
|
|
50
|
+
let TENDERLY_PROJECT = process.env.TENDERLY_PROJECT;
|
|
51
|
+
let TENDERLY_VNET_ID = process.env.TENDERLY_VNET_ID;
|
|
52
|
+
class TokenStorageSlotsCache {
|
|
53
|
+
static cache = null;
|
|
54
|
+
static TOKEN_FILE_STORAGE_SLOTS = null;
|
|
55
|
+
static TOKEN_STORAGE_SLOTS_FILEPATH = path.join(__dirname, '../tests/token-storage-slots.json');
|
|
56
|
+
static setRedisCache(cache) {
|
|
57
|
+
TokenStorageSlotsCache.cache = cache ?? null;
|
|
58
|
+
}
|
|
59
|
+
static redisKey(chainId) {
|
|
60
|
+
return `token_storage_slots_${chainId}`;
|
|
61
|
+
}
|
|
62
|
+
static async loadTokenFileStorageSlots() {
|
|
63
|
+
return JSON.parse(await fs.readFile(TokenStorageSlotsCache.TOKEN_STORAGE_SLOTS_FILEPATH, {
|
|
64
|
+
encoding: 'utf-8',
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
static async saveTokenFileStorageSlots() {
|
|
68
|
+
await fs.writeFile(TokenStorageSlotsCache.TOKEN_STORAGE_SLOTS_FILEPATH, JSON.stringify(TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS, null, 2) +
|
|
69
|
+
'\n', { encoding: 'utf-8' });
|
|
70
|
+
}
|
|
71
|
+
static async getTokenStorageSlots(chainId, token) {
|
|
72
|
+
const normalizedToken = token.toLowerCase();
|
|
73
|
+
if (TokenStorageSlotsCache.cache) {
|
|
74
|
+
try {
|
|
75
|
+
const cached = await TokenStorageSlotsCache.cache.hget(TokenStorageSlotsCache.redisKey(chainId), normalizedToken);
|
|
76
|
+
if (cached) {
|
|
77
|
+
return JSON.parse(cached);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
// Redis error — fall through to return null
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
if (!TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS) {
|
|
86
|
+
TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS =
|
|
87
|
+
await TokenStorageSlotsCache.loadTokenFileStorageSlots();
|
|
88
|
+
}
|
|
89
|
+
return (TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS[chainId]?.[normalizedToken] ?? null);
|
|
90
|
+
}
|
|
91
|
+
static async setTokenStorageSlots(chainId, token, slots) {
|
|
92
|
+
const normalizedToken = token.toLowerCase();
|
|
93
|
+
if (TokenStorageSlotsCache.cache) {
|
|
94
|
+
void TokenStorageSlotsCache.cache.hset(TokenStorageSlotsCache.redisKey(chainId), normalizedToken, JSON.stringify(slots));
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (!TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS) {
|
|
98
|
+
TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS =
|
|
99
|
+
await TokenStorageSlotsCache.loadTokenFileStorageSlots();
|
|
100
|
+
}
|
|
101
|
+
TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS ||= {};
|
|
102
|
+
TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS[chainId] ||= {};
|
|
103
|
+
TokenStorageSlotsCache.TOKEN_FILE_STORAGE_SLOTS[chainId][normalizedToken] =
|
|
104
|
+
slots;
|
|
105
|
+
void TokenStorageSlotsCache.saveTokenFileStorageSlots();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
class TenderlySimulator {
|
|
109
|
+
// public constants
|
|
110
|
+
static DEFAULT_OWNER = '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
|
|
111
|
+
static DEFAULT_SPENDER = '0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb';
|
|
112
|
+
// singleton
|
|
113
|
+
static instance;
|
|
114
|
+
constructor() { }
|
|
115
|
+
static getInstance(cache, tenderlyToken, tenderlyProject, tenderlyAccountId) {
|
|
116
|
+
if (!TenderlySimulator.instance) {
|
|
117
|
+
TenderlySimulator.instance = new TenderlySimulator();
|
|
118
|
+
}
|
|
119
|
+
if (cache) {
|
|
120
|
+
TokenStorageSlotsCache.setRedisCache(cache);
|
|
121
|
+
}
|
|
122
|
+
if (tenderlyToken) {
|
|
123
|
+
TENDERLY_TOKEN = tenderlyToken;
|
|
124
|
+
}
|
|
125
|
+
if (tenderlyProject) {
|
|
126
|
+
TENDERLY_PROJECT = tenderlyProject;
|
|
127
|
+
}
|
|
128
|
+
if (tenderlyAccountId) {
|
|
129
|
+
TENDERLY_ACCOUNT_ID = tenderlyAccountId;
|
|
130
|
+
}
|
|
131
|
+
return TenderlySimulator.instance;
|
|
132
|
+
}
|
|
133
|
+
async simulateTransaction(request, forceSimulationAPI = false) {
|
|
134
|
+
if (TENDERLY_VNET_ID && !forceSimulationAPI) {
|
|
135
|
+
return this.simulateWithTenderlyVNet(request);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
return this.simulateWithTenderlySimulationAPI(request);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async simulateWithTenderlySimulationAPI(request) {
|
|
142
|
+
const data = {
|
|
143
|
+
network_id: request.chainId,
|
|
144
|
+
from: request.from,
|
|
145
|
+
to: request.to,
|
|
146
|
+
input: request.data,
|
|
147
|
+
value: request.value,
|
|
148
|
+
save: true,
|
|
149
|
+
save_if_fails: true,
|
|
150
|
+
state_objects: request.stateOverride,
|
|
151
|
+
block_number: request.blockNumber,
|
|
152
|
+
};
|
|
153
|
+
console.log('Sending transaction simulation with params:');
|
|
154
|
+
console.log(JSON.stringify(data, null, 2));
|
|
155
|
+
const { data: { transaction, simulation }, } = await axios_1.default.post(`https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_ID}/project/${TENDERLY_PROJECT}/simulate`, data, {
|
|
156
|
+
headers: {
|
|
157
|
+
'X-Access-Key': TENDERLY_TOKEN,
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
const url = `https://dashboard.tenderly.co/${TENDERLY_ACCOUNT_ID}/${TENDERLY_PROJECT}/simulator/${simulation.id}`;
|
|
161
|
+
console.log('Successfully simulated a transaction:');
|
|
162
|
+
console.log(`Simulation URL - ${url}`);
|
|
163
|
+
return { transaction, simulation };
|
|
164
|
+
}
|
|
165
|
+
async simulateWithTenderlyVNet(request) {
|
|
166
|
+
const data = {
|
|
167
|
+
network_id: request.chainId,
|
|
168
|
+
from: request.from,
|
|
169
|
+
to: request.to,
|
|
170
|
+
input: request.data,
|
|
171
|
+
value: request.value,
|
|
172
|
+
save: true,
|
|
173
|
+
save_if_fails: true,
|
|
174
|
+
state_objects: request.stateOverride,
|
|
175
|
+
block_number: request.blockNumber,
|
|
176
|
+
};
|
|
177
|
+
console.log('Sending transaction simulation with params:');
|
|
178
|
+
console.log(JSON.stringify(data, null, 2));
|
|
179
|
+
const { data: { transaction, simulation }, } = await axios_1.default.post(`https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_ID}/project/${TENDERLY_PROJECT}/testnet/${TENDERLY_VNET_ID}/simulate`, data, {
|
|
180
|
+
headers: {
|
|
181
|
+
'X-Access-Key': TENDERLY_TOKEN,
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
const url = `https://dashboard.tenderly.co/${TENDERLY_ACCOUNT_ID}/${TENDERLY_PROJECT}/testnet/${TENDERLY_VNET_ID}/simulator/${simulation.id}`;
|
|
185
|
+
console.log('Successfully simulated a transaction:');
|
|
186
|
+
console.log(`Simulation URL - ${url}`);
|
|
187
|
+
return { transaction, simulation };
|
|
188
|
+
}
|
|
189
|
+
async getSimulatedTransactionDetails(id) {
|
|
190
|
+
try {
|
|
191
|
+
const { data } = await axios_1.default.post(`https://api.tenderly.co/api/v1/account/${TENDERLY_ACCOUNT_ID}/project/${TENDERLY_PROJECT}/simulations/${id}`, {}, { headers: { 'X-Access-Key': TENDERLY_TOKEN } });
|
|
192
|
+
return data;
|
|
193
|
+
}
|
|
194
|
+
catch (e) {
|
|
195
|
+
console.error(e);
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
getSLOADCalls = (callTrace, parentCall = null) => {
|
|
200
|
+
const results = [];
|
|
201
|
+
if (callTrace.call_type === 'SLOAD') {
|
|
202
|
+
results.push({ ...callTrace, parentCall });
|
|
203
|
+
}
|
|
204
|
+
if (callTrace.calls) {
|
|
205
|
+
for (const call of callTrace.calls) {
|
|
206
|
+
results.push(...this.getSLOADCalls(call, callTrace));
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return results;
|
|
210
|
+
};
|
|
211
|
+
/**
|
|
212
|
+
*
|
|
213
|
+
* @param balanceOfSlot storage slot of `balanceOf` mapping
|
|
214
|
+
* @param owner account's address
|
|
215
|
+
* @param isVyper `true` if contract is written in Vyper
|
|
216
|
+
*/
|
|
217
|
+
calculateAddressBalanceSlot(balanceOfSlot, owner, isVyper = false) {
|
|
218
|
+
return isVyper
|
|
219
|
+
? this.calculateVyperAddressBalanceSlot(balanceOfSlot, owner)
|
|
220
|
+
: this.calculateSolidityAddressBalanceSlot(balanceOfSlot, owner);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
*
|
|
224
|
+
* @param balanceOfSlot storage slot of `balanceOf` mapping
|
|
225
|
+
* @param owner account's address
|
|
226
|
+
*/
|
|
227
|
+
calculateSolidityAddressBalanceSlot(balanceOfSlot, owner) {
|
|
228
|
+
return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([ethers_1.ethers.utils.hexZeroPad(owner, 32), balanceOfSlot]));
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
*
|
|
232
|
+
* @param balanceOfSlot storage slot of `balanceOf` mapping
|
|
233
|
+
* @param owner account's address
|
|
234
|
+
*/
|
|
235
|
+
calculateVyperAddressBalanceSlot(balanceOfSlot, owner) {
|
|
236
|
+
return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([balanceOfSlot, ethers_1.ethers.utils.hexZeroPad(owner, 32)]));
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
*
|
|
240
|
+
* @param allowanceSlot storage slot of `allowance` mapping
|
|
241
|
+
* @param owner account's address
|
|
242
|
+
* @param spender spender's address
|
|
243
|
+
* @param isVyper `true` if contract is written in Vyper
|
|
244
|
+
*/
|
|
245
|
+
calculateAddressAllowanceSlot(allowanceSlot, owner, spender, isVyper = false) {
|
|
246
|
+
return isVyper
|
|
247
|
+
? this.calculateVyperAddressAllowanceSlot(allowanceSlot, owner, spender)
|
|
248
|
+
: this.calculateSolidityAddressAllowanceSlot(allowanceSlot, owner, spender);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
*
|
|
252
|
+
* @param allowanceSlot storage slot of `allowance` mapping
|
|
253
|
+
* @param owner account's address
|
|
254
|
+
* @param spender spender's address
|
|
255
|
+
*/
|
|
256
|
+
calculateSolidityAddressAllowanceSlot(allowanceSlot, owner, spender) {
|
|
257
|
+
const slotHash = ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([
|
|
258
|
+
ethers_1.ethers.utils.hexZeroPad(owner, 32),
|
|
259
|
+
ethers_1.ethers.utils.hexZeroPad(allowanceSlot, 32),
|
|
260
|
+
]));
|
|
261
|
+
return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([ethers_1.ethers.utils.hexZeroPad(spender, 32), slotHash]));
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
*
|
|
265
|
+
* @param allowanceSlot storage slot of `allowance` mapping
|
|
266
|
+
* @param owner account's address
|
|
267
|
+
* @param spender spender's address
|
|
268
|
+
*/
|
|
269
|
+
calculateVyperAddressAllowanceSlot(allowanceSlot, owner, spender) {
|
|
270
|
+
const slotHash = ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([
|
|
271
|
+
ethers_1.ethers.utils.hexZeroPad(allowanceSlot, 32),
|
|
272
|
+
ethers_1.ethers.utils.hexZeroPad(owner, 32),
|
|
273
|
+
]));
|
|
274
|
+
return ethers_1.ethers.utils.keccak256(ethers_1.ethers.utils.concat([slotHash, ethers_1.ethers.utils.hexZeroPad(spender, 32)]));
|
|
275
|
+
}
|
|
276
|
+
buildBalanceOfSimulationRequest(chainId, token, owner) {
|
|
277
|
+
const iface = new ethers_1.ethers.utils.Interface([
|
|
278
|
+
'function balanceOf(address owner) view returns (uint)',
|
|
279
|
+
]);
|
|
280
|
+
return {
|
|
281
|
+
from: ethers_1.ethers.constants.AddressZero,
|
|
282
|
+
to: token,
|
|
283
|
+
data: iface.encodeFunctionData('balanceOf', [owner]),
|
|
284
|
+
chainId,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
buildAllowanceSimulationRequest(chainId, token, owner, spender) {
|
|
288
|
+
const iface = new ethers_1.ethers.utils.Interface([
|
|
289
|
+
'function allowance(address owner, address spender) view returns (uint)',
|
|
290
|
+
]);
|
|
291
|
+
return {
|
|
292
|
+
from: ethers_1.ethers.constants.AddressZero,
|
|
293
|
+
to: token,
|
|
294
|
+
data: iface.encodeFunctionData('allowance', [owner, spender]),
|
|
295
|
+
chainId,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Finds the slot of the `balanceOf` mapping in given token contract's storage.
|
|
300
|
+
* Supports `Solidity` and `Vyper` contracts
|
|
301
|
+
* @param chainId token chain id
|
|
302
|
+
* @param token token address
|
|
303
|
+
*/
|
|
304
|
+
async findTokenBalanceOfSlot(chainId, token) {
|
|
305
|
+
const account = TenderlySimulator.DEFAULT_OWNER;
|
|
306
|
+
const balanceOfSimulationRequest = this.buildBalanceOfSimulationRequest(chainId, token, account);
|
|
307
|
+
const { simulation: { id: simulationId }, } = await this.simulateTransaction(balanceOfSimulationRequest, true);
|
|
308
|
+
const simulationDetails = await this.getSimulatedTransactionDetails(simulationId);
|
|
309
|
+
if (!simulationDetails) {
|
|
310
|
+
throw `No simulation with id ${simulationId} details found`;
|
|
311
|
+
}
|
|
312
|
+
const callTrace = simulationDetails.transaction.transaction_info.call_trace;
|
|
313
|
+
const sloadCalls = this.getSLOADCalls(callTrace);
|
|
314
|
+
// token's storage slots that were read during the `balanceOf` call
|
|
315
|
+
const readSlots = sloadCalls
|
|
316
|
+
.map(call => ({
|
|
317
|
+
slot: call.storage_slot?.[0],
|
|
318
|
+
address: call.storage_address,
|
|
319
|
+
parentCallType: call.parentCall ? call.parentCall.call_type : null,
|
|
320
|
+
}))
|
|
321
|
+
.filter(({ slot }) => !!slot);
|
|
322
|
+
const startingPoints = [
|
|
323
|
+
// regular contract
|
|
324
|
+
0n,
|
|
325
|
+
// ERC20Upgradeable
|
|
326
|
+
BigInt('0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00'),
|
|
327
|
+
];
|
|
328
|
+
for (const startingPoint of startingPoints) {
|
|
329
|
+
for (let i = startingPoint; i < startingPoint + 1000n; i += 1n) {
|
|
330
|
+
const candidateSlot = ethers_1.ethers.utils.defaultAbiCoder.encode(['uint'], [i]);
|
|
331
|
+
// try solidity slot
|
|
332
|
+
const solitidyBalanceOfSlot = this.calculateSolidityAddressBalanceSlot(candidateSlot, account);
|
|
333
|
+
const foundSoliditySlot = readSlots.find(({ slot }) => slot === solitidyBalanceOfSlot);
|
|
334
|
+
if (foundSoliditySlot) {
|
|
335
|
+
return foundSoliditySlot.address !== token.toLowerCase() &&
|
|
336
|
+
foundSoliditySlot.parentCallType !== 'DELEGATECALL'
|
|
337
|
+
? { slot: candidateSlot, stateProxy: foundSoliditySlot.address }
|
|
338
|
+
: { slot: candidateSlot };
|
|
339
|
+
}
|
|
340
|
+
// try vyper slot
|
|
341
|
+
const vyperBalanceOfSlot = this.calculateVyperAddressBalanceSlot(candidateSlot, account);
|
|
342
|
+
const foundVyperSlot = readSlots.find(({ slot }) => slot === vyperBalanceOfSlot);
|
|
343
|
+
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 };
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
throw new Error(`Could not find a 'balanceOf' mapping slot for token ${token} on chain ${chainId}`);
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Finds the slot of the `allowance` mapping in given token contract's storage
|
|
359
|
+
* Supports `Solidity` and `Vyper` contracts
|
|
360
|
+
* @param chainId token chain id
|
|
361
|
+
* @param token token address
|
|
362
|
+
*/
|
|
363
|
+
async findTokenAllowanceSlot(chainId, token) {
|
|
364
|
+
const account = TenderlySimulator.DEFAULT_OWNER;
|
|
365
|
+
const spender = TenderlySimulator.DEFAULT_SPENDER;
|
|
366
|
+
const allowanceSimulationRequest = this.buildAllowanceSimulationRequest(chainId, token, account, spender);
|
|
367
|
+
const { simulation: { id: simulationId }, } = await this.simulateTransaction(allowanceSimulationRequest, true);
|
|
368
|
+
const simulationDetails = await this.getSimulatedTransactionDetails(simulationId);
|
|
369
|
+
if (!simulationDetails) {
|
|
370
|
+
throw `No simulation with id ${simulationId} details found`;
|
|
371
|
+
}
|
|
372
|
+
const callTrace = simulationDetails.transaction.transaction_info.call_trace;
|
|
373
|
+
// console.log(callTrace);
|
|
374
|
+
const sloadCalls = this.getSLOADCalls(callTrace);
|
|
375
|
+
// token's storage slots that were read during the `allowance` call
|
|
376
|
+
const readSlots = sloadCalls
|
|
377
|
+
.map(call => ({
|
|
378
|
+
slot: call.storage_slot?.[0],
|
|
379
|
+
address: call.storage_address,
|
|
380
|
+
parentCallType: call.parentCall ? call.parentCall.call_type : null,
|
|
381
|
+
}))
|
|
382
|
+
.filter(({ slot }) => !!slot);
|
|
383
|
+
console.log(readSlots);
|
|
384
|
+
const startingPoints = [
|
|
385
|
+
// regular contract
|
|
386
|
+
0n,
|
|
387
|
+
// ERC20Upgradeable
|
|
388
|
+
BigInt('0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00'),
|
|
389
|
+
];
|
|
390
|
+
for (const init of startingPoints) {
|
|
391
|
+
for (let i = init; i < init + 1000n; i += 1n) {
|
|
392
|
+
const candidateSlot = ethers_1.ethers.utils.defaultAbiCoder.encode(['uint'], [i]);
|
|
393
|
+
// try solidity
|
|
394
|
+
const solidityAllowanceSlot = this.calculateSolidityAddressAllowanceSlot(candidateSlot, account, spender);
|
|
395
|
+
const foundSoliditySlot = readSlots.find(({ slot }) => solidityAllowanceSlot === slot);
|
|
396
|
+
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
|
+
};
|
|
406
|
+
}
|
|
407
|
+
// try vyper
|
|
408
|
+
const vyperAllowanceSlot = this.calculateVyperAddressAllowanceSlot(candidateSlot, account, spender);
|
|
409
|
+
const foundVyperSlot = readSlots.find(({ slot }) => vyperAllowanceSlot === slot);
|
|
410
|
+
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
|
+
};
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
throw new Error(`Could not find a 'allowance' mapping slot for token ${token} on chain ${chainId}`);
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Returns storage slots for the given token contract.
|
|
427
|
+
* @param chainId Token chain ID
|
|
428
|
+
* @param token Token address. Doesn't have to be normalized
|
|
429
|
+
*/
|
|
430
|
+
async getTokenStorageSlots(chainId, token) {
|
|
431
|
+
const normalizedToken = token.toLowerCase();
|
|
432
|
+
if (normalizedToken === constants_1.ETHER_ADDRESS) {
|
|
433
|
+
throw new Error('Cannot provide storage slots for native token');
|
|
434
|
+
}
|
|
435
|
+
// check cache
|
|
436
|
+
const cachedSlots = await TokenStorageSlotsCache.getTokenStorageSlots(chainId, normalizedToken);
|
|
437
|
+
// return if cached
|
|
438
|
+
if (cachedSlots) {
|
|
439
|
+
return cachedSlots;
|
|
440
|
+
}
|
|
441
|
+
// find the slots
|
|
442
|
+
const [balanceSlot, allowanceSlot] = await Promise.all([
|
|
443
|
+
this.findTokenBalanceOfSlot(chainId, token),
|
|
444
|
+
this.findTokenAllowanceSlot(chainId, token),
|
|
445
|
+
]);
|
|
446
|
+
// save the slots and return
|
|
447
|
+
const slots = {
|
|
448
|
+
balanceSlot: balanceSlot.slot,
|
|
449
|
+
allowanceSlot: allowanceSlot.slot,
|
|
450
|
+
isVyper: balanceSlot.isVyper,
|
|
451
|
+
stateProxy: balanceSlot.stateProxy,
|
|
452
|
+
};
|
|
453
|
+
// no need to await
|
|
454
|
+
void TokenStorageSlotsCache.setTokenStorageSlots(chainId, token, slots);
|
|
455
|
+
return slots;
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Adds native balance override to an existing `StateOverride` object
|
|
459
|
+
* @param stateOverride object to add the override to
|
|
460
|
+
* @param account address to be given the balance
|
|
461
|
+
* @param amount token amount in wei
|
|
462
|
+
*/
|
|
463
|
+
addBalanceOverride(stateOverride, account, amount) {
|
|
464
|
+
// add the balance override
|
|
465
|
+
stateOverride[account] ||= {};
|
|
466
|
+
stateOverride[account].balance = amount.toString();
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Adds token balance override to an existing `StateOverride` object
|
|
470
|
+
* @param stateOverride object to add the override to
|
|
471
|
+
* @param chainId token chain ID
|
|
472
|
+
* @param token token address
|
|
473
|
+
* @param account address to be given the balance
|
|
474
|
+
* @param amount token amount in wei
|
|
475
|
+
*/
|
|
476
|
+
async addTokenBalanceOverride(stateOverride, chainId, token, account, amount) {
|
|
477
|
+
// get mapping slots
|
|
478
|
+
const tokenSlots = await this.getTokenStorageSlots(chainId, token);
|
|
479
|
+
// calculate balance slot
|
|
480
|
+
const slotToOverride = this.calculateAddressBalanceSlot(tokenSlots.balanceSlot, account, tokenSlots.isVyper);
|
|
481
|
+
// add the balance override
|
|
482
|
+
const address = tokenSlots.stateProxy ? tokenSlots.stateProxy : token;
|
|
483
|
+
stateOverride[address] ||= {};
|
|
484
|
+
stateOverride[address].storage ||= {};
|
|
485
|
+
stateOverride[address].storage[slotToOverride] =
|
|
486
|
+
ethers_1.ethers.utils.defaultAbiCoder.encode(['uint'], [amount]);
|
|
487
|
+
if (tokenSlots.additionalOverrides) {
|
|
488
|
+
(0, lodash_1.merge)(stateOverride, tokenSlots.additionalOverrides);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Adds token allowance override to an existing `StateOverride` object
|
|
493
|
+
* @param stateOverride object to add the override to
|
|
494
|
+
* @param chainId token chain ID
|
|
495
|
+
* @param token token address
|
|
496
|
+
* @param account owner address
|
|
497
|
+
* @param spender spender address
|
|
498
|
+
* @param amount token amount in wei
|
|
499
|
+
*/
|
|
500
|
+
async addAllowanceOverride(stateOverride, chainId, token, account, spender, amount) {
|
|
501
|
+
// get mapping slots
|
|
502
|
+
const tokenSlots = await this.getTokenStorageSlots(chainId, token);
|
|
503
|
+
// calculate allowance slot
|
|
504
|
+
const slotToOverride = this.calculateAddressAllowanceSlot(tokenSlots.allowanceSlot, account, spender, tokenSlots.isVyper);
|
|
505
|
+
// add the allowance override
|
|
506
|
+
const address = tokenSlots.stateProxy ? tokenSlots.stateProxy : token;
|
|
507
|
+
stateOverride[address] ||= {};
|
|
508
|
+
stateOverride[address].storage ||= {};
|
|
509
|
+
stateOverride[address].storage[slotToOverride] =
|
|
510
|
+
ethers_1.ethers.utils.defaultAbiCoder.encode(['uint'], [amount]);
|
|
511
|
+
if (tokenSlots.additionalOverrides) {
|
|
512
|
+
(0, lodash_1.merge)(stateOverride, tokenSlots.additionalOverrides);
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
exports.TenderlySimulator = TenderlySimulator;
|
|
517
|
+
//# sourceMappingURL=tenderly-simulation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenderly-simulation.js","sourceRoot":"","sources":["../src/tenderly-simulation.ts"],"names":[],"mappings":"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"}
|