@kumbaya_xyz/smart-order-router 4.22.38
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/CHANGELOG.md +255 -0
- package/LICENSE +674 -0
- package/README.md +315 -0
- package/build/main/index.d.ts +3 -0
- package/build/main/index.js +20 -0
- package/build/main/providers/cache-node.d.ts +10 -0
- package/build/main/providers/cache-node.js +33 -0
- package/build/main/providers/cache.d.ts +14 -0
- package/build/main/providers/cache.js +3 -0
- package/build/main/providers/caching/route/index.d.ts +2 -0
- package/build/main/providers/caching/route/index.js +19 -0
- package/build/main/providers/caching/route/model/cache-mode.d.ts +16 -0
- package/build/main/providers/caching/route/model/cache-mode.js +21 -0
- package/build/main/providers/caching/route/model/cached-route.d.ts +29 -0
- package/build/main/providers/caching/route/model/cached-route.js +77 -0
- package/build/main/providers/caching/route/model/cached-routes.d.ts +67 -0
- package/build/main/providers/caching/route/model/cached-routes.js +81 -0
- package/build/main/providers/caching/route/model/index.d.ts +3 -0
- package/build/main/providers/caching/route/model/index.js +20 -0
- package/build/main/providers/caching/route/route-caching-provider.d.ts +111 -0
- package/build/main/providers/caching/route/route-caching-provider.js +86 -0
- package/build/main/providers/caching-gas-provider.d.ts +23 -0
- package/build/main/providers/caching-gas-provider.js +41 -0
- package/build/main/providers/caching-subgraph-provider.d.ts +33 -0
- package/build/main/providers/caching-subgraph-provider.js +170 -0
- package/build/main/providers/caching-token-list-provider.d.ts +52 -0
- package/build/main/providers/caching-token-list-provider.js +147 -0
- package/build/main/providers/caching-token-provider.d.ts +24 -0
- package/build/main/providers/caching-token-provider.js +242 -0
- package/build/main/providers/eip-1559-gas-price-provider.d.ts +31 -0
- package/build/main/providers/eip-1559-gas-price-provider.js +71 -0
- package/build/main/providers/eth-estimate-gas-provider.d.ts +21 -0
- package/build/main/providers/eth-estimate-gas-provider.js +91 -0
- package/build/main/providers/eth-gas-station-info-gas-price-provider.d.ts +19 -0
- package/build/main/providers/eth-gas-station-info-gas-price-provider.js +36 -0
- package/build/main/providers/gas-price-provider.d.ts +10 -0
- package/build/main/providers/gas-price-provider.js +10 -0
- package/build/main/providers/index.d.ts +47 -0
- package/build/main/providers/index.js +64 -0
- package/build/main/providers/legacy-gas-price-provider.d.ts +7 -0
- package/build/main/providers/legacy-gas-price-provider.js +18 -0
- package/build/main/providers/multicall-provider.d.ts +83 -0
- package/build/main/providers/multicall-provider.js +15 -0
- package/build/main/providers/multicall-uniswap-provider.d.ts +37 -0
- package/build/main/providers/multicall-uniswap-provider.js +164 -0
- package/build/main/providers/on-chain-gas-price-provider.d.ts +19 -0
- package/build/main/providers/on-chain-gas-price-provider.js +37 -0
- package/build/main/providers/on-chain-quote-provider.d.ts +258 -0
- package/build/main/providers/on-chain-quote-provider.js +713 -0
- package/build/main/providers/pool-provider.d.ts +45 -0
- package/build/main/providers/pool-provider.js +73 -0
- package/build/main/providers/portion-provider.d.ts +86 -0
- package/build/main/providers/portion-provider.js +118 -0
- package/build/main/providers/provider.d.ts +38 -0
- package/build/main/providers/provider.js +3 -0
- package/build/main/providers/simulation-provider.d.ts +46 -0
- package/build/main/providers/simulation-provider.js +138 -0
- package/build/main/providers/static-gas-price-provider.d.ts +7 -0
- package/build/main/providers/static-gas-price-provider.js +13 -0
- package/build/main/providers/subgraph-provider-with-fallback.d.ts +11 -0
- package/build/main/providers/subgraph-provider-with-fallback.js +25 -0
- package/build/main/providers/subgraph-provider.d.ts +56 -0
- package/build/main/providers/subgraph-provider.js +287 -0
- package/build/main/providers/swap-router-provider.d.ts +30 -0
- package/build/main/providers/swap-router-provider.js +42 -0
- package/build/main/providers/tenderly-simulation-provider.d.ts +69 -0
- package/build/main/providers/tenderly-simulation-provider.js +458 -0
- package/build/main/providers/token-fee-fetcher.d.ts +31 -0
- package/build/main/providers/token-fee-fetcher.js +165 -0
- package/build/main/providers/token-properties-provider.d.ts +31 -0
- package/build/main/providers/token-properties-provider.js +118 -0
- package/build/main/providers/token-provider.d.ts +141 -0
- package/build/main/providers/token-provider.js +394 -0
- package/build/main/providers/token-validator-provider.d.ts +42 -0
- package/build/main/providers/token-validator-provider.js +99 -0
- package/build/main/providers/uri-subgraph-provider.d.ts +20 -0
- package/build/main/providers/uri-subgraph-provider.js +65 -0
- package/build/main/providers/v2/caching-pool-provider.d.ts +33 -0
- package/build/main/providers/v2/caching-pool-provider.js +89 -0
- package/build/main/providers/v2/caching-subgraph-provider.d.ts +19 -0
- package/build/main/providers/v2/caching-subgraph-provider.js +24 -0
- package/build/main/providers/v2/pool-provider.d.ts +63 -0
- package/build/main/providers/v2/pool-provider.js +148 -0
- package/build/main/providers/v2/quote-provider.d.ts +34 -0
- package/build/main/providers/v2/quote-provider.js +90 -0
- package/build/main/providers/v2/static-subgraph-provider.d.ts +19 -0
- package/build/main/providers/v2/static-subgraph-provider.js +171 -0
- package/build/main/providers/v2/subgraph-provider-with-fallback.d.ts +16 -0
- package/build/main/providers/v2/subgraph-provider-with-fallback.js +23 -0
- package/build/main/providers/v2/subgraph-provider.d.ts +53 -0
- package/build/main/providers/v2/subgraph-provider.js +344 -0
- package/build/main/providers/v2/uri-subgraph-provider.d.ts +4 -0
- package/build/main/providers/v2/uri-subgraph-provider.js +8 -0
- package/build/main/providers/v3/caching-pool-provider.d.ts +32 -0
- package/build/main/providers/v3/caching-pool-provider.js +84 -0
- package/build/main/providers/v3/caching-subgraph-provider.d.ts +19 -0
- package/build/main/providers/v3/caching-subgraph-provider.js +24 -0
- package/build/main/providers/v3/gas-data-provider.d.ts +39 -0
- package/build/main/providers/v3/gas-data-provider.js +26 -0
- package/build/main/providers/v3/pool-provider.d.ts +77 -0
- package/build/main/providers/v3/pool-provider.js +108 -0
- package/build/main/providers/v3/static-subgraph-provider.d.ts +21 -0
- package/build/main/providers/v3/static-subgraph-provider.js +217 -0
- package/build/main/providers/v3/subgraph-provider-with-fallback.d.ts +12 -0
- package/build/main/providers/v3/subgraph-provider-with-fallback.js +19 -0
- package/build/main/providers/v3/subgraph-provider.d.ts +45 -0
- package/build/main/providers/v3/subgraph-provider.js +46 -0
- package/build/main/providers/v3/uri-subgraph-provider.d.ts +4 -0
- package/build/main/providers/v3/uri-subgraph-provider.js +8 -0
- package/build/main/providers/v4/caching-pool-provider.d.ts +24 -0
- package/build/main/providers/v4/caching-pool-provider.js +81 -0
- package/build/main/providers/v4/caching-subgraph-provider.d.ts +19 -0
- package/build/main/providers/v4/caching-subgraph-provider.js +24 -0
- package/build/main/providers/v4/euler-swap-hooks-subgraph-provider.d.ts +25 -0
- package/build/main/providers/v4/euler-swap-hooks-subgraph-provider.js +160 -0
- package/build/main/providers/v4/pool-provider.d.ts +58 -0
- package/build/main/providers/v4/pool-provider.js +115 -0
- package/build/main/providers/v4/static-subgraph-provider.d.ts +15 -0
- package/build/main/providers/v4/static-subgraph-provider.js +78 -0
- package/build/main/providers/v4/subgraph-provider-with-fallback.d.ts +5 -0
- package/build/main/providers/v4/subgraph-provider-with-fallback.js +12 -0
- package/build/main/providers/v4/subgraph-provider.d.ts +63 -0
- package/build/main/providers/v4/subgraph-provider.js +63 -0
- package/build/main/providers/v4/uri-subgraph-provider.d.ts +4 -0
- package/build/main/providers/v4/uri-subgraph-provider.js +8 -0
- package/build/main/routers/alpha-router/alpha-router.d.ts +483 -0
- package/build/main/routers/alpha-router/alpha-router.js +1678 -0
- package/build/main/routers/alpha-router/config.d.ts +4 -0
- package/build/main/routers/alpha-router/config.js +131 -0
- package/build/main/routers/alpha-router/entities/index.d.ts +1 -0
- package/build/main/routers/alpha-router/entities/index.js +18 -0
- package/build/main/routers/alpha-router/entities/route-with-valid-quote.d.ts +208 -0
- package/build/main/routers/alpha-router/entities/route-with-valid-quote.js +194 -0
- package/build/main/routers/alpha-router/functions/best-swap-route.d.ts +24 -0
- package/build/main/routers/alpha-router/functions/best-swap-route.js +538 -0
- package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +3 -0
- package/build/main/routers/alpha-router/functions/calculate-ratio-amount-in.js +18 -0
- package/build/main/routers/alpha-router/functions/compute-all-routes.d.ts +12 -0
- package/build/main/routers/alpha-router/functions/compute-all-routes.js +133 -0
- package/build/main/routers/alpha-router/functions/get-candidate-pools.d.ts +126 -0
- package/build/main/routers/alpha-router/functions/get-candidate-pools.js +1527 -0
- package/build/main/routers/alpha-router/gas-models/gas-costs.d.ts +12 -0
- package/build/main/routers/alpha-router/gas-models/gas-costs.js +200 -0
- package/build/main/routers/alpha-router/gas-models/gas-model.d.ts +107 -0
- package/build/main/routers/alpha-router/gas-models/gas-model.js +117 -0
- package/build/main/routers/alpha-router/gas-models/index.d.ts +2 -0
- package/build/main/routers/alpha-router/gas-models/index.js +19 -0
- package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts +24 -0
- package/build/main/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +161 -0
- package/build/main/routers/alpha-router/gas-models/tick-based-heuristic-gas-model.d.ts +15 -0
- package/build/main/routers/alpha-router/gas-models/tick-based-heuristic-gas-model.js +191 -0
- package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +31 -0
- package/build/main/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +169 -0
- package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +26 -0
- package/build/main/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +41 -0
- package/build/main/routers/alpha-router/gas-models/v4/v4-heuristic-gas-model.d.ts +15 -0
- package/build/main/routers/alpha-router/gas-models/v4/v4-heuristic-gas-model.js +40 -0
- package/build/main/routers/alpha-router/index.d.ts +4 -0
- package/build/main/routers/alpha-router/index.js +21 -0
- package/build/main/routers/alpha-router/quoters/base-quoter.d.ts +77 -0
- package/build/main/routers/alpha-router/quoters/base-quoter.js +76 -0
- package/build/main/routers/alpha-router/quoters/index.d.ts +5 -0
- package/build/main/routers/alpha-router/quoters/index.js +22 -0
- package/build/main/routers/alpha-router/quoters/mixed-quoter.d.ts +32 -0
- package/build/main/routers/alpha-router/quoters/mixed-quoter.js +154 -0
- package/build/main/routers/alpha-router/quoters/model/index.d.ts +1 -0
- package/build/main/routers/alpha-router/quoters/model/index.js +18 -0
- package/build/main/routers/alpha-router/quoters/model/results/get-quotes-result.d.ts +6 -0
- package/build/main/routers/alpha-router/quoters/model/results/get-quotes-result.js +3 -0
- package/build/main/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +6 -0
- package/build/main/routers/alpha-router/quoters/model/results/get-routes-result.js +3 -0
- package/build/main/routers/alpha-router/quoters/model/results/index.d.ts +2 -0
- package/build/main/routers/alpha-router/quoters/model/results/index.js +19 -0
- package/build/main/routers/alpha-router/quoters/v2-quoter.d.ts +24 -0
- package/build/main/routers/alpha-router/quoters/v2-quoter.js +141 -0
- package/build/main/routers/alpha-router/quoters/v3-quoter.d.ts +19 -0
- package/build/main/routers/alpha-router/quoters/v3-quoter.js +125 -0
- package/build/main/routers/alpha-router/quoters/v4-quoter.d.ts +18 -0
- package/build/main/routers/alpha-router/quoters/v4-quoter.js +122 -0
- package/build/main/routers/index.d.ts +4 -0
- package/build/main/routers/index.js +21 -0
- package/build/main/routers/legacy-router/bases.d.ts +213 -0
- package/build/main/routers/legacy-router/bases.js +124 -0
- package/build/main/routers/legacy-router/index.d.ts +1 -0
- package/build/main/routers/legacy-router/index.js +18 -0
- package/build/main/routers/legacy-router/legacy-router.d.ts +41 -0
- package/build/main/routers/legacy-router/legacy-router.js +291 -0
- package/build/main/routers/router.d.ts +195 -0
- package/build/main/routers/router.js +92 -0
- package/build/main/tsconfig.tsbuildinfo +1 -0
- package/build/main/types/other/factories/Erc20__factory.d.ts +45 -0
- package/build/main/types/other/factories/Erc20__factory.js +240 -0
- package/build/main/types/other/factories/GasDataArbitrum__factory.d.ts +18 -0
- package/build/main/types/other/factories/GasDataArbitrum__factory.js +58 -0
- package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +41 -0
- package/build/main/types/other/factories/IMixedRouteQuoterV1__factory.js +156 -0
- package/build/main/types/other/factories/ITokenValidator__factory.d.ts +22 -0
- package/build/main/types/other/factories/ITokenValidator__factory.js +78 -0
- package/build/main/types/other/factories/MixedRouteQuoterV2__factory.d.ts +86 -0
- package/build/main/types/other/factories/MixedRouteQuoterV2__factory.js +477 -0
- package/build/main/types/other/factories/Permit2__factory.d.ts +87 -0
- package/build/main/types/other/factories/Permit2__factory.js +941 -0
- package/build/main/types/other/factories/StateView__factory.d.ts +32 -0
- package/build/main/types/other/factories/StateView__factory.js +383 -0
- package/build/main/types/other/factories/SwapRouter02__factory.d.ts +67 -0
- package/build/main/types/other/factories/SwapRouter02__factory.js +1103 -0
- package/build/main/types/other/factories/TokenFeeDetector__factory.d.ts +47 -0
- package/build/main/types/other/factories/TokenFeeDetector__factory.js +243 -0
- package/build/main/types/other/factories/V4Quoter__factory.d.ts +37 -0
- package/build/main/types/other/factories/V4Quoter__factory.js +312 -0
- package/build/main/types/v2/factories/IUniswapV2Pair__factory.d.ts +35 -0
- package/build/main/types/v2/factories/IUniswapV2Pair__factory.js +671 -0
- package/build/main/types/v3/factories/IERC20Metadata__factory.d.ts +35 -0
- package/build/main/types/v3/factories/IERC20Metadata__factory.js +242 -0
- package/build/main/types/v3/factories/IQuoterV2__factory.d.ts +41 -0
- package/build/main/types/v3/factories/IQuoterV2__factory.js +220 -0
- package/build/main/types/v3/factories/IUniswapV3PoolState__factory.d.ts +22 -0
- package/build/main/types/v3/factories/IUniswapV3PoolState__factory.js +266 -0
- package/build/main/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts +61 -0
- package/build/main/types/v3/factories/UniswapInterfaceMulticall__factory.js +132 -0
- package/build/main/util/addresses.d.ts +32 -0
- package/build/main/util/addresses.js +113 -0
- package/build/main/util/amounts.d.ts +10 -0
- package/build/main/util/amounts.js +94 -0
- package/build/main/util/callData.d.ts +1 -0
- package/build/main/util/callData.js +6 -0
- package/build/main/util/chains.d.ts +69 -0
- package/build/main/util/chains.js +740 -0
- package/build/main/util/defaultBlocksToLive.d.ts +4 -0
- package/build/main/util/defaultBlocksToLive.js +58 -0
- package/build/main/util/gas-factory-helpers.d.ts +34 -0
- package/build/main/util/gas-factory-helpers.js +439 -0
- package/build/main/util/hooksOptions.d.ts +5 -0
- package/build/main/util/hooksOptions.js +10 -0
- package/build/main/util/index.d.ts +10 -0
- package/build/main/util/index.js +27 -0
- package/build/main/util/intent.d.ts +6 -0
- package/build/main/util/intent.js +13 -0
- package/build/main/util/l2FeeChains.d.ts +2 -0
- package/build/main/util/l2FeeChains.js +18 -0
- package/build/main/util/log.d.ts +3 -0
- package/build/main/util/log.js +97 -0
- package/build/main/util/methodParameters.d.ts +5 -0
- package/build/main/util/methodParameters.js +147 -0
- package/build/main/util/metric.d.ts +48 -0
- package/build/main/util/metric.js +59 -0
- package/build/main/util/mixedRouteFilterOutV4Pools.d.ts +3 -0
- package/build/main/util/mixedRouteFilterOutV4Pools.js +17 -0
- package/build/main/util/onchainQuoteProviderConfigs.d.ts +42 -0
- package/build/main/util/onchainQuoteProviderConfigs.js +72 -0
- package/build/main/util/pool.d.ts +5 -0
- package/build/main/util/pool.js +44 -0
- package/build/main/util/protocols.d.ts +2 -0
- package/build/main/util/protocols.js +20 -0
- package/build/main/util/routes.d.ts +11 -0
- package/build/main/util/routes.js +148 -0
- package/build/main/util/serializeRouteIds.d.ts +2 -0
- package/build/main/util/serializeRouteIds.js +12 -0
- package/build/main/util/tenderlySimulationErrorBreakDown.d.ts +3 -0
- package/build/main/util/tenderlySimulationErrorBreakDown.js +33 -0
- package/build/main/util/unsupported-tokens.d.ts +37 -0
- package/build/main/util/unsupported-tokens.js +1119 -0
- package/build/module/index.d.ts +3 -0
- package/build/module/index.js +4 -0
- package/build/module/providers/cache-node.d.ts +10 -0
- package/build/module/providers/cache-node.js +29 -0
- package/build/module/providers/cache.d.ts +14 -0
- package/build/module/providers/cache.js +2 -0
- package/build/module/providers/caching/route/index.d.ts +2 -0
- package/build/module/providers/caching/route/index.js +3 -0
- package/build/module/providers/caching/route/model/cache-mode.d.ts +16 -0
- package/build/module/providers/caching/route/model/cache-mode.js +18 -0
- package/build/module/providers/caching/route/model/cached-route.d.ts +29 -0
- package/build/module/providers/caching/route/model/cached-route.js +73 -0
- package/build/module/providers/caching/route/model/cached-routes.d.ts +67 -0
- package/build/module/providers/caching/route/model/cached-routes.js +74 -0
- package/build/module/providers/caching/route/model/index.d.ts +3 -0
- package/build/module/providers/caching/route/model/index.js +4 -0
- package/build/module/providers/caching/route/route-caching-provider.d.ts +111 -0
- package/build/module/providers/caching/route/route-caching-provider.js +82 -0
- package/build/module/providers/caching-gas-provider.d.ts +23 -0
- package/build/module/providers/caching-gas-provider.js +37 -0
- package/build/module/providers/caching-subgraph-provider.d.ts +33 -0
- package/build/module/providers/caching-subgraph-provider.js +166 -0
- package/build/module/providers/caching-token-list-provider.d.ts +52 -0
- package/build/module/providers/caching-token-list-provider.js +140 -0
- package/build/module/providers/caching-token-provider.d.ts +24 -0
- package/build/module/providers/caching-token-provider.js +235 -0
- package/build/module/providers/eip-1559-gas-price-provider.d.ts +31 -0
- package/build/module/providers/eip-1559-gas-price-provider.js +64 -0
- package/build/module/providers/eth-estimate-gas-provider.d.ts +21 -0
- package/build/module/providers/eth-estimate-gas-provider.js +99 -0
- package/build/module/providers/eth-gas-station-info-gas-price-provider.d.ts +19 -0
- package/build/module/providers/eth-gas-station-info-gas-price-provider.js +29 -0
- package/build/module/providers/gas-price-provider.d.ts +10 -0
- package/build/module/providers/gas-price-provider.js +6 -0
- package/build/module/providers/index.d.ts +47 -0
- package/build/module/providers/index.js +48 -0
- package/build/module/providers/legacy-gas-price-provider.d.ts +7 -0
- package/build/module/providers/legacy-gas-price-provider.js +14 -0
- package/build/module/providers/multicall-provider.d.ts +83 -0
- package/build/module/providers/multicall-provider.js +11 -0
- package/build/module/providers/multicall-uniswap-provider.d.ts +37 -0
- package/build/module/providers/multicall-uniswap-provider.js +157 -0
- package/build/module/providers/on-chain-gas-price-provider.d.ts +19 -0
- package/build/module/providers/on-chain-gas-price-provider.js +33 -0
- package/build/module/providers/on-chain-quote-provider.d.ts +258 -0
- package/build/module/providers/on-chain-quote-provider.js +707 -0
- package/build/module/providers/pool-provider.d.ts +45 -0
- package/build/module/providers/pool-provider.js +66 -0
- package/build/module/providers/portion-provider.d.ts +86 -0
- package/build/module/providers/portion-provider.js +114 -0
- package/build/module/providers/provider.d.ts +38 -0
- package/build/module/providers/provider.js +2 -0
- package/build/module/providers/simulation-provider.d.ts +46 -0
- package/build/module/providers/simulation-provider.js +140 -0
- package/build/module/providers/static-gas-price-provider.d.ts +7 -0
- package/build/module/providers/static-gas-price-provider.js +9 -0
- package/build/module/providers/subgraph-provider-with-fallback.d.ts +11 -0
- package/build/module/providers/subgraph-provider-with-fallback.js +21 -0
- package/build/module/providers/subgraph-provider.d.ts +56 -0
- package/build/module/providers/subgraph-provider.js +284 -0
- package/build/module/providers/swap-router-provider.d.ts +30 -0
- package/build/module/providers/swap-router-provider.js +38 -0
- package/build/module/providers/tenderly-simulation-provider.d.ts +69 -0
- package/build/module/providers/tenderly-simulation-provider.js +456 -0
- package/build/module/providers/token-fee-fetcher.d.ts +31 -0
- package/build/module/providers/token-fee-fetcher.js +161 -0
- package/build/module/providers/token-properties-provider.d.ts +31 -0
- package/build/module/providers/token-properties-provider.js +114 -0
- package/build/module/providers/token-provider.d.ts +141 -0
- package/build/module/providers/token-provider.js +381 -0
- package/build/module/providers/token-validator-provider.d.ts +42 -0
- package/build/module/providers/token-validator-provider.js +92 -0
- package/build/module/providers/uri-subgraph-provider.d.ts +20 -0
- package/build/module/providers/uri-subgraph-provider.js +58 -0
- package/build/module/providers/v2/caching-pool-provider.d.ts +33 -0
- package/build/module/providers/v2/caching-pool-provider.js +85 -0
- package/build/module/providers/v2/caching-subgraph-provider.d.ts +19 -0
- package/build/module/providers/v2/caching-subgraph-provider.js +20 -0
- package/build/module/providers/v2/pool-provider.d.ts +63 -0
- package/build/module/providers/v2/pool-provider.js +141 -0
- package/build/module/providers/v2/quote-provider.d.ts +34 -0
- package/build/module/providers/v2/quote-provider.js +86 -0
- package/build/module/providers/v2/static-subgraph-provider.d.ts +19 -0
- package/build/module/providers/v2/static-subgraph-provider.js +164 -0
- package/build/module/providers/v2/subgraph-provider-with-fallback.d.ts +16 -0
- package/build/module/providers/v2/subgraph-provider-with-fallback.js +19 -0
- package/build/module/providers/v2/subgraph-provider.d.ts +53 -0
- package/build/module/providers/v2/subgraph-provider.js +341 -0
- package/build/module/providers/v2/uri-subgraph-provider.d.ts +4 -0
- package/build/module/providers/v2/uri-subgraph-provider.js +4 -0
- package/build/module/providers/v3/caching-pool-provider.d.ts +32 -0
- package/build/module/providers/v3/caching-pool-provider.js +77 -0
- package/build/module/providers/v3/caching-subgraph-provider.d.ts +19 -0
- package/build/module/providers/v3/caching-subgraph-provider.js +20 -0
- package/build/module/providers/v3/gas-data-provider.d.ts +39 -0
- package/build/module/providers/v3/gas-data-provider.js +22 -0
- package/build/module/providers/v3/pool-provider.d.ts +77 -0
- package/build/module/providers/v3/pool-provider.js +101 -0
- package/build/module/providers/v3/static-subgraph-provider.d.ts +21 -0
- package/build/module/providers/v3/static-subgraph-provider.js +210 -0
- package/build/module/providers/v3/subgraph-provider-with-fallback.d.ts +12 -0
- package/build/module/providers/v3/subgraph-provider-with-fallback.js +15 -0
- package/build/module/providers/v3/subgraph-provider.d.ts +45 -0
- package/build/module/providers/v3/subgraph-provider.js +42 -0
- package/build/module/providers/v3/uri-subgraph-provider.d.ts +4 -0
- package/build/module/providers/v3/uri-subgraph-provider.js +4 -0
- package/build/module/providers/v4/caching-pool-provider.d.ts +24 -0
- package/build/module/providers/v4/caching-pool-provider.js +74 -0
- package/build/module/providers/v4/caching-subgraph-provider.d.ts +19 -0
- package/build/module/providers/v4/caching-subgraph-provider.js +20 -0
- package/build/module/providers/v4/euler-swap-hooks-subgraph-provider.d.ts +25 -0
- package/build/module/providers/v4/euler-swap-hooks-subgraph-provider.js +153 -0
- package/build/module/providers/v4/pool-provider.d.ts +58 -0
- package/build/module/providers/v4/pool-provider.js +106 -0
- package/build/module/providers/v4/static-subgraph-provider.d.ts +15 -0
- package/build/module/providers/v4/static-subgraph-provider.js +71 -0
- package/build/module/providers/v4/subgraph-provider-with-fallback.d.ts +5 -0
- package/build/module/providers/v4/subgraph-provider-with-fallback.js +8 -0
- package/build/module/providers/v4/subgraph-provider.d.ts +63 -0
- package/build/module/providers/v4/subgraph-provider.js +59 -0
- package/build/module/providers/v4/uri-subgraph-provider.d.ts +4 -0
- package/build/module/providers/v4/uri-subgraph-provider.js +4 -0
- package/build/module/routers/alpha-router/alpha-router.d.ts +483 -0
- package/build/module/routers/alpha-router/alpha-router.js +1680 -0
- package/build/module/routers/alpha-router/config.d.ts +4 -0
- package/build/module/routers/alpha-router/config.js +127 -0
- package/build/module/routers/alpha-router/entities/index.d.ts +1 -0
- package/build/module/routers/alpha-router/entities/index.js +2 -0
- package/build/module/routers/alpha-router/entities/route-with-valid-quote.d.ts +208 -0
- package/build/module/routers/alpha-router/entities/route-with-valid-quote.js +184 -0
- package/build/module/routers/alpha-router/functions/best-swap-route.d.ts +24 -0
- package/build/module/routers/alpha-router/functions/best-swap-route.js +528 -0
- package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.d.ts +3 -0
- package/build/module/routers/alpha-router/functions/calculate-ratio-amount-in.js +14 -0
- package/build/module/routers/alpha-router/functions/compute-all-routes.d.ts +12 -0
- package/build/module/routers/alpha-router/functions/compute-all-routes.js +125 -0
- package/build/module/routers/alpha-router/functions/get-candidate-pools.d.ts +126 -0
- package/build/module/routers/alpha-router/functions/get-candidate-pools.js +1516 -0
- package/build/module/routers/alpha-router/gas-models/gas-costs.d.ts +12 -0
- package/build/module/routers/alpha-router/gas-models/gas-costs.js +189 -0
- package/build/module/routers/alpha-router/gas-models/gas-model.d.ts +107 -0
- package/build/module/routers/alpha-router/gas-models/gas-model.js +111 -0
- package/build/module/routers/alpha-router/gas-models/index.d.ts +2 -0
- package/build/module/routers/alpha-router/gas-models/index.js +3 -0
- package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.d.ts +24 -0
- package/build/module/routers/alpha-router/gas-models/mixedRoute/mixed-route-heuristic-gas-model.js +154 -0
- package/build/module/routers/alpha-router/gas-models/tick-based-heuristic-gas-model.d.ts +15 -0
- package/build/module/routers/alpha-router/gas-models/tick-based-heuristic-gas-model.js +187 -0
- package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.d.ts +31 -0
- package/build/module/routers/alpha-router/gas-models/v2/v2-heuristic-gas-model.js +162 -0
- package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.d.ts +26 -0
- package/build/module/routers/alpha-router/gas-models/v3/v3-heuristic-gas-model.js +37 -0
- package/build/module/routers/alpha-router/gas-models/v4/v4-heuristic-gas-model.d.ts +15 -0
- package/build/module/routers/alpha-router/gas-models/v4/v4-heuristic-gas-model.js +36 -0
- package/build/module/routers/alpha-router/index.d.ts +4 -0
- package/build/module/routers/alpha-router/index.js +5 -0
- package/build/module/routers/alpha-router/quoters/base-quoter.d.ts +77 -0
- package/build/module/routers/alpha-router/quoters/base-quoter.js +69 -0
- package/build/module/routers/alpha-router/quoters/index.d.ts +5 -0
- package/build/module/routers/alpha-router/quoters/index.js +6 -0
- package/build/module/routers/alpha-router/quoters/mixed-quoter.d.ts +32 -0
- package/build/module/routers/alpha-router/quoters/mixed-quoter.js +147 -0
- package/build/module/routers/alpha-router/quoters/model/index.d.ts +1 -0
- package/build/module/routers/alpha-router/quoters/model/index.js +2 -0
- package/build/module/routers/alpha-router/quoters/model/results/get-quotes-result.d.ts +6 -0
- package/build/module/routers/alpha-router/quoters/model/results/get-quotes-result.js +2 -0
- package/build/module/routers/alpha-router/quoters/model/results/get-routes-result.d.ts +6 -0
- package/build/module/routers/alpha-router/quoters/model/results/get-routes-result.js +2 -0
- package/build/module/routers/alpha-router/quoters/model/results/index.d.ts +2 -0
- package/build/module/routers/alpha-router/quoters/model/results/index.js +3 -0
- package/build/module/routers/alpha-router/quoters/v2-quoter.d.ts +24 -0
- package/build/module/routers/alpha-router/quoters/v2-quoter.js +138 -0
- package/build/module/routers/alpha-router/quoters/v3-quoter.d.ts +19 -0
- package/build/module/routers/alpha-router/quoters/v3-quoter.js +118 -0
- package/build/module/routers/alpha-router/quoters/v4-quoter.d.ts +18 -0
- package/build/module/routers/alpha-router/quoters/v4-quoter.js +115 -0
- package/build/module/routers/index.d.ts +4 -0
- package/build/module/routers/index.js +5 -0
- package/build/module/routers/legacy-router/bases.d.ts +213 -0
- package/build/module/routers/legacy-router/bases.js +130 -0
- package/build/module/routers/legacy-router/index.d.ts +1 -0
- package/build/module/routers/legacy-router/index.js +2 -0
- package/build/module/routers/legacy-router/legacy-router.d.ts +41 -0
- package/build/module/routers/legacy-router/legacy-router.js +292 -0
- package/build/module/routers/router.d.ts +195 -0
- package/build/module/routers/router.js +79 -0
- package/build/module/tsconfig.module.tsbuildinfo +1 -0
- package/build/module/types/other/factories/Erc20__factory.d.ts +45 -0
- package/build/module/types/other/factories/Erc20__factory.js +236 -0
- package/build/module/types/other/factories/GasDataArbitrum__factory.d.ts +18 -0
- package/build/module/types/other/factories/GasDataArbitrum__factory.js +54 -0
- package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.d.ts +41 -0
- package/build/module/types/other/factories/IMixedRouteQuoterV1__factory.js +152 -0
- package/build/module/types/other/factories/ITokenValidator__factory.d.ts +22 -0
- package/build/module/types/other/factories/ITokenValidator__factory.js +74 -0
- package/build/module/types/other/factories/MixedRouteQuoterV2__factory.d.ts +86 -0
- package/build/module/types/other/factories/MixedRouteQuoterV2__factory.js +473 -0
- package/build/module/types/other/factories/Permit2__factory.d.ts +87 -0
- package/build/module/types/other/factories/Permit2__factory.js +937 -0
- package/build/module/types/other/factories/StateView__factory.d.ts +32 -0
- package/build/module/types/other/factories/StateView__factory.js +379 -0
- package/build/module/types/other/factories/SwapRouter02__factory.d.ts +67 -0
- package/build/module/types/other/factories/SwapRouter02__factory.js +1099 -0
- package/build/module/types/other/factories/TokenFeeDetector__factory.d.ts +47 -0
- package/build/module/types/other/factories/TokenFeeDetector__factory.js +239 -0
- package/build/module/types/other/factories/V4Quoter__factory.d.ts +37 -0
- package/build/module/types/other/factories/V4Quoter__factory.js +308 -0
- package/build/module/types/v2/factories/IUniswapV2Pair__factory.d.ts +35 -0
- package/build/module/types/v2/factories/IUniswapV2Pair__factory.js +667 -0
- package/build/module/types/v3/factories/IERC20Metadata__factory.d.ts +35 -0
- package/build/module/types/v3/factories/IERC20Metadata__factory.js +238 -0
- package/build/module/types/v3/factories/IQuoterV2__factory.d.ts +41 -0
- package/build/module/types/v3/factories/IQuoterV2__factory.js +216 -0
- package/build/module/types/v3/factories/IUniswapV3PoolState__factory.d.ts +22 -0
- package/build/module/types/v3/factories/IUniswapV3PoolState__factory.js +262 -0
- package/build/module/types/v3/factories/UniswapInterfaceMulticall__factory.d.ts +61 -0
- package/build/module/types/v3/factories/UniswapInterfaceMulticall__factory.js +128 -0
- package/build/module/util/addresses.d.ts +32 -0
- package/build/module/util/addresses.js +233 -0
- package/build/module/util/amounts.d.ts +10 -0
- package/build/module/util/amounts.js +82 -0
- package/build/module/util/callData.d.ts +1 -0
- package/build/module/util/callData.js +3 -0
- package/build/module/util/chains.d.ts +69 -0
- package/build/module/util/chains.js +732 -0
- package/build/module/util/defaultBlocksToLive.d.ts +4 -0
- package/build/module/util/defaultBlocksToLive.js +55 -0
- package/build/module/util/gas-factory-helpers.d.ts +34 -0
- package/build/module/util/gas-factory-helpers.js +421 -0
- package/build/module/util/hooksOptions.d.ts +5 -0
- package/build/module/util/hooksOptions.js +7 -0
- package/build/module/util/index.d.ts +10 -0
- package/build/module/util/index.js +11 -0
- package/build/module/util/intent.d.ts +6 -0
- package/build/module/util/intent.js +10 -0
- package/build/module/util/l2FeeChains.d.ts +2 -0
- package/build/module/util/l2FeeChains.js +15 -0
- package/build/module/util/log.d.ts +3 -0
- package/build/module/util/log.js +93 -0
- package/build/module/util/methodParameters.d.ts +5 -0
- package/build/module/util/methodParameters.js +145 -0
- package/build/module/util/metric.d.ts +48 -0
- package/build/module/util/metric.js +53 -0
- package/build/module/util/mixedRouteFilterOutV4Pools.d.ts +3 -0
- package/build/module/util/mixedRouteFilterOutV4Pools.js +12 -0
- package/build/module/util/onchainQuoteProviderConfigs.d.ts +42 -0
- package/build/module/util/onchainQuoteProviderConfigs.js +74 -0
- package/build/module/util/pool.d.ts +5 -0
- package/build/module/util/pool.js +41 -0
- package/build/module/util/protocols.d.ts +2 -0
- package/build/module/util/protocols.js +16 -0
- package/build/module/util/routes.d.ts +11 -0
- package/build/module/util/routes.js +136 -0
- package/build/module/util/serializeRouteIds.d.ts +2 -0
- package/build/module/util/serializeRouteIds.js +7 -0
- package/build/module/util/tenderlySimulationErrorBreakDown.d.ts +3 -0
- package/build/module/util/tenderlySimulationErrorBreakDown.js +29 -0
- package/build/module/util/unsupported-tokens.d.ts +37 -0
- package/build/module/util/unsupported-tokens.js +1116 -0
- package/package.json +129 -0
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.WMATIC_POLYGON_MUMBAI = exports.DAI_BASE_SEPOLIA = exports.DAI_POLYGON = exports.USDC_NATIVE_POLYGON = exports.USDC_POLYGON = exports.WETH_POLYGON = exports.WMATIC_POLYGON = exports.USDC_ARBITRUM_SEPOLIA = exports.USDC_ARBITRUM_GOERLI = exports.DAI_ARBITRUM_SEPOLIA = exports.DAI_ARBITRUM_GOERLI = exports.ARB_ARBITRUM = exports.DAI_ARBITRUM = exports.WBTC_ARBITRUM = exports.USDT_ARBITRUM = exports.USDC_NATIVE_ARBITRUM = exports.USDC_ARBITRUM = exports.DAI_OPTIMISM_SEPOLIA = exports.WBTC_OPTIMISM_SEPOLIA = exports.USDT_OPTIMISM_SEPOLIA = exports.USDC_OPTIMISM_SEPOLIA = exports.DAI_OPTIMISM_GOERLI = exports.WBTC_OPTIMISM_GOERLI = exports.USDT_OPTIMISM_GOERLI = exports.USDC_OPTIMISM_GOERLI = exports.OP_OPTIMISM = exports.DAI_OPTIMISM = exports.WBTC_OPTIMISM = exports.USDT_OPTIMISM = exports.USDC_NATIVE_OPTIMISM = exports.USDC_OPTIMISM = exports.UNI_GOERLI = exports.DAI_GOERLI = exports.WBTC_GOERLI = exports.USDT_GOERLI = exports.USDC_GOERLI = exports.DAI_SEPOLIA = exports.USDC_NATIVE_SEPOLIA = exports.USDC_SEPOLIA = exports.WSTETH_MAINNET = exports.LIDO_MAINNET = exports.AAVE_MAINNET = exports.UNI_MAINNET = exports.FEI_MAINNET = exports.AMPL_MAINNET = exports.EGGS_MAINNET = exports.DAI_MAINNET = exports.WBTC_MAINNET = exports.USDT_MAINNET = exports.USDC_MAINNET = void 0;
|
|
7
|
+
exports.USDC_SONEIUM = exports.DAI_UNICHAIN = exports.USDC_UNICHAIN = exports.USDC_BASE_SEPOLIA = exports.USDC_UNICHAIN_SEPOLIA = exports.WBTC_WORLDCHAIN = exports.WLD_WORLDCHAIN = exports.USDC_MONAD = exports.USDT_MONAD_TESTNET = exports.USDC_WORLDCHAIN = exports.DAI_ZKSYNC = exports.USDCE_ZKSYNC = exports.USDC_ZKSYNC = exports.USDC_ZORA = exports.USDB_BLAST = exports.WBTC_MOONBEAM = exports.DAI_MOONBEAM = exports.WGLMR_MOONBEAM = exports.USDC_MOONBEAM = exports.WBTC_GNOSIS = exports.WXDAI_GNOSIS = exports.USDC_ETHEREUM_GNOSIS = exports.USDC_BASE_GOERLI = exports.VIRTUAL_BASE = exports.USDC_NATIVE_BASE = exports.USDC_BASE = exports.USDC_NATIVE_AVAX = exports.USDC_BRIDGED_AVAX = exports.USDC_AVAX = exports.DAI_AVAX = exports.CEUR_CELO_ALFAJORES = exports.CUSD_CELO_ALFAJORES = exports.DAI_CELO_ALFAJORES = exports.CELO_ALFAJORES = exports.CEUR_CELO = exports.USDC_NATIVE_CELO = exports.USDC_WORMHOLE_CELO = exports.USDC_CELO = exports.CUSD_CELO = exports.DAI_CELO = exports.CELO = exports.USDT_BNB = exports.USDC_BNB = exports.ETH_BNB = exports.DAI_BNB = exports.BUSD_BNB = exports.BTC_BNB = exports.WETH_POLYGON_MUMBAI = exports.DAI_POLYGON_MUMBAI = exports.USDC_POLYGON_MUMBAI = void 0;
|
|
8
|
+
exports.V4_SEPOLIA_TEST_B = exports.V4_SEPOLIA_TEST_A = exports.WNATIVE_ON = exports.USDC_ON = exports.USDT_ON = exports.DAI_ON = exports.TokenProvider = exports.WBTC_MEGAETH_TESTNET = exports.USDT_MEGAETH_TESTNET = exports.USDC_MEGAETH_TESTNET = void 0;
|
|
9
|
+
const abi_1 = require("@ethersproject/abi");
|
|
10
|
+
const strings_1 = require("@ethersproject/strings");
|
|
11
|
+
const sdk_core_1 = require("@uniswap/sdk-core");
|
|
12
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
13
|
+
const IERC20Metadata__factory_1 = require("../types/v3/factories/IERC20Metadata__factory");
|
|
14
|
+
const util_1 = require("../util");
|
|
15
|
+
// Some well known tokens on each chain for seeding cache / testing.
|
|
16
|
+
exports.USDC_MAINNET = new sdk_core_1.Token(sdk_core_1.ChainId.MAINNET, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 6, 'USDC', 'USD//C');
|
|
17
|
+
exports.USDT_MAINNET = new sdk_core_1.Token(sdk_core_1.ChainId.MAINNET, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 6, 'USDT', 'Tether USD');
|
|
18
|
+
exports.WBTC_MAINNET = new sdk_core_1.Token(sdk_core_1.ChainId.MAINNET, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 8, 'WBTC', 'Wrapped BTC');
|
|
19
|
+
exports.DAI_MAINNET = new sdk_core_1.Token(sdk_core_1.ChainId.MAINNET, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 18, 'DAI', 'Dai Stablecoin');
|
|
20
|
+
exports.EGGS_MAINNET = new sdk_core_1.Token(sdk_core_1.ChainId.MAINNET, '0x2e516BA5Bf3b7eE47fb99B09eaDb60BDE80a82e0', 18, 'EGGS', 'EGGS');
|
|
21
|
+
exports.AMPL_MAINNET = new sdk_core_1.Token(sdk_core_1.ChainId.MAINNET, '0xD46bA6D942050d489DBd938a2C909A5d5039A161', 9, 'AMPL', 'AMPL');
|
|
22
|
+
exports.FEI_MAINNET = new sdk_core_1.Token(sdk_core_1.ChainId.MAINNET, '0x956F47F50A910163D8BF957Cf5846D573E7f87CA', 18, 'FEI', 'Fei USD');
|
|
23
|
+
exports.UNI_MAINNET = new sdk_core_1.Token(sdk_core_1.ChainId.MAINNET, '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984', 18, 'UNI', 'Uniswap');
|
|
24
|
+
exports.AAVE_MAINNET = new sdk_core_1.Token(sdk_core_1.ChainId.MAINNET, '0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9', 18, 'AAVE', 'Aave Token');
|
|
25
|
+
exports.LIDO_MAINNET = new sdk_core_1.Token(sdk_core_1.ChainId.MAINNET, '0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32', 18, 'LDO', 'Lido DAO Token');
|
|
26
|
+
exports.WSTETH_MAINNET = new sdk_core_1.Token(sdk_core_1.ChainId.MAINNET, '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', 18, 'wstETH', 'Wrapped liquid staked Ether');
|
|
27
|
+
exports.USDC_SEPOLIA = new sdk_core_1.Token(sdk_core_1.ChainId.SEPOLIA, '0x6f14C02Fc1F78322cFd7d707aB90f18baD3B54f5', 18, 'USDC', 'USDC Token');
|
|
28
|
+
exports.USDC_NATIVE_SEPOLIA = new sdk_core_1.Token(sdk_core_1.ChainId.SEPOLIA, '0x1c7d4b196cb0c7b01d743fbc6116a902379c7238', 6, 'USDC', 'USDC Token');
|
|
29
|
+
exports.DAI_SEPOLIA = new sdk_core_1.Token(sdk_core_1.ChainId.SEPOLIA, '0x7AF17A48a6336F7dc1beF9D485139f7B6f4FB5C8', 18, 'DAI', 'DAI Token');
|
|
30
|
+
exports.USDC_GOERLI = new sdk_core_1.Token(sdk_core_1.ChainId.GOERLI, '0x07865c6e87b9f70255377e024ace6630c1eaa37f', 6, 'USDC', 'USD//C');
|
|
31
|
+
exports.USDT_GOERLI = new sdk_core_1.Token(sdk_core_1.ChainId.GOERLI, '0xe583769738b6dd4e7caf8451050d1948be717679', 18, 'USDT', 'Tether USD');
|
|
32
|
+
exports.WBTC_GOERLI = new sdk_core_1.Token(sdk_core_1.ChainId.GOERLI, '0xa0a5ad2296b38bd3e3eb59aaeaf1589e8d9a29a9', 8, 'WBTC', 'Wrapped BTC');
|
|
33
|
+
exports.DAI_GOERLI = new sdk_core_1.Token(sdk_core_1.ChainId.GOERLI, '0x11fe4b6ae13d2a6055c8d9cf65c55bac32b5d844', 18, 'DAI', 'Dai Stablecoin');
|
|
34
|
+
exports.UNI_GOERLI = new sdk_core_1.Token(sdk_core_1.ChainId.GOERLI, '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984', 18, 'UNI', 'Uni token');
|
|
35
|
+
exports.USDC_OPTIMISM = new sdk_core_1.Token(sdk_core_1.ChainId.OPTIMISM, '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', 6, 'USDC', 'USD//C.e');
|
|
36
|
+
exports.USDC_NATIVE_OPTIMISM = new sdk_core_1.Token(sdk_core_1.ChainId.OPTIMISM, '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85', 6, 'USDC', 'USD//C');
|
|
37
|
+
exports.USDT_OPTIMISM = new sdk_core_1.Token(sdk_core_1.ChainId.OPTIMISM, '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', 6, 'USDT', 'Tether USD');
|
|
38
|
+
exports.WBTC_OPTIMISM = new sdk_core_1.Token(sdk_core_1.ChainId.OPTIMISM, '0x68f180fcCe6836688e9084f035309E29Bf0A2095', 8, 'WBTC', 'Wrapped BTC');
|
|
39
|
+
exports.DAI_OPTIMISM = new sdk_core_1.Token(sdk_core_1.ChainId.OPTIMISM, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai Stablecoin');
|
|
40
|
+
exports.OP_OPTIMISM = new sdk_core_1.Token(sdk_core_1.ChainId.OPTIMISM, '0x4200000000000000000000000000000000000042', 18, 'OP', 'Optimism');
|
|
41
|
+
exports.USDC_OPTIMISM_GOERLI = new sdk_core_1.Token(sdk_core_1.ChainId.OPTIMISM_GOERLI, '0x7E07E15D2a87A24492740D16f5bdF58c16db0c4E', 6, 'USDC', 'USD//C');
|
|
42
|
+
exports.USDT_OPTIMISM_GOERLI = new sdk_core_1.Token(sdk_core_1.ChainId.OPTIMISM_GOERLI, '0x853eb4bA5D0Ba2B77a0A5329Fd2110d5CE149ECE', 6, 'USDT', 'Tether USD');
|
|
43
|
+
exports.WBTC_OPTIMISM_GOERLI = new sdk_core_1.Token(sdk_core_1.ChainId.OPTIMISM_GOERLI, '0xe0a592353e81a94Db6E3226fD4A99F881751776a', 8, 'WBTC', 'Wrapped BTC');
|
|
44
|
+
exports.DAI_OPTIMISM_GOERLI = new sdk_core_1.Token(sdk_core_1.ChainId.OPTIMISM_GOERLI, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai Stablecoin');
|
|
45
|
+
exports.USDC_OPTIMISM_SEPOLIA = new sdk_core_1.Token(sdk_core_1.ChainId.OPTIMISM_SEPOLIA, '0x7E07E15D2a87A24492740D16f5bdF58c16db0c4E', 6, 'USDC', 'USD//C');
|
|
46
|
+
exports.USDT_OPTIMISM_SEPOLIA = new sdk_core_1.Token(sdk_core_1.ChainId.OPTIMISM_SEPOLIA, '0x853eb4bA5D0Ba2B77a0A5329Fd2110d5CE149ECE', 6, 'USDT', 'Tether USD');
|
|
47
|
+
exports.WBTC_OPTIMISM_SEPOLIA = new sdk_core_1.Token(sdk_core_1.ChainId.OPTIMISM_SEPOLIA, '0xe0a592353e81a94Db6E3226fD4A99F881751776a', 8, 'WBTC', 'Wrapped BTC');
|
|
48
|
+
exports.DAI_OPTIMISM_SEPOLIA = new sdk_core_1.Token(sdk_core_1.ChainId.OPTIMISM_SEPOLIA, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai Stablecoin');
|
|
49
|
+
exports.USDC_ARBITRUM = new sdk_core_1.Token(sdk_core_1.ChainId.ARBITRUM_ONE, '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', 6, 'USDC', 'USD//C.e');
|
|
50
|
+
exports.USDC_NATIVE_ARBITRUM = new sdk_core_1.Token(sdk_core_1.ChainId.ARBITRUM_ONE, '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', 6, 'USDC', 'USD//C');
|
|
51
|
+
exports.USDT_ARBITRUM = new sdk_core_1.Token(sdk_core_1.ChainId.ARBITRUM_ONE, '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', 6, 'USDT', 'Tether USD');
|
|
52
|
+
exports.WBTC_ARBITRUM = new sdk_core_1.Token(sdk_core_1.ChainId.ARBITRUM_ONE, '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', 8, 'WBTC', 'Wrapped BTC');
|
|
53
|
+
exports.DAI_ARBITRUM = new sdk_core_1.Token(sdk_core_1.ChainId.ARBITRUM_ONE, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 18, 'DAI', 'Dai Stablecoin');
|
|
54
|
+
exports.ARB_ARBITRUM = new sdk_core_1.Token(sdk_core_1.ChainId.ARBITRUM_ONE, '0x912CE59144191C1204E64559FE8253a0e49E6548', 18, 'ARB', 'Arbitrum');
|
|
55
|
+
exports.DAI_ARBITRUM_GOERLI = new sdk_core_1.Token(sdk_core_1.ChainId.ARBITRUM_GOERLI, '0x0000000000000000000000000000000000000000', // TODO: add address
|
|
56
|
+
18, 'DAI', 'Dai Stablecoin');
|
|
57
|
+
exports.DAI_ARBITRUM_SEPOLIA = new sdk_core_1.Token(sdk_core_1.ChainId.ARBITRUM_SEPOLIA, '0xc3826E277485c33F3D99C9e0CBbf8449513210EE', 18, 'DAI', 'Dai Stablecoin');
|
|
58
|
+
// Bridged version of official Goerli USDC
|
|
59
|
+
exports.USDC_ARBITRUM_GOERLI = new sdk_core_1.Token(sdk_core_1.ChainId.ARBITRUM_GOERLI, '0x8FB1E3fC51F3b789dED7557E680551d93Ea9d892', 6, 'USDC', 'USD//C');
|
|
60
|
+
// Bridged version of official Sepolia USDC
|
|
61
|
+
exports.USDC_ARBITRUM_SEPOLIA = new sdk_core_1.Token(sdk_core_1.ChainId.ARBITRUM_SEPOLIA, '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d', 6, 'USDC', 'USD//C');
|
|
62
|
+
//polygon tokens
|
|
63
|
+
exports.WMATIC_POLYGON = new sdk_core_1.Token(sdk_core_1.ChainId.POLYGON, '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', 18, 'WMATIC', 'Wrapped MATIC');
|
|
64
|
+
exports.WETH_POLYGON = new sdk_core_1.Token(sdk_core_1.ChainId.POLYGON, '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619', 18, 'WETH', 'Wrapped Ether');
|
|
65
|
+
exports.USDC_POLYGON = new sdk_core_1.Token(sdk_core_1.ChainId.POLYGON, '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', 6, 'USDC', 'USD//C.e');
|
|
66
|
+
exports.USDC_NATIVE_POLYGON = new sdk_core_1.Token(sdk_core_1.ChainId.POLYGON, '0x3c499c542cef5e3811e1192ce70d8cc03d5c3359', 6, 'USDC', 'USD//C');
|
|
67
|
+
exports.DAI_POLYGON = new sdk_core_1.Token(sdk_core_1.ChainId.POLYGON, '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', 18, 'DAI', 'Dai Stablecoin');
|
|
68
|
+
exports.DAI_BASE_SEPOLIA = new sdk_core_1.Token(sdk_core_1.ChainId.SEPOLIA, '0xE6F6e27c0BF1a4841E3F09d03D7D31Da8eAd0a27', 18, 'DAI', 'Dai Stablecoin');
|
|
69
|
+
//polygon mumbai tokens
|
|
70
|
+
exports.WMATIC_POLYGON_MUMBAI = new sdk_core_1.Token(sdk_core_1.ChainId.POLYGON_MUMBAI, '0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889', 18, 'WMATIC', 'Wrapped MATIC');
|
|
71
|
+
exports.USDC_POLYGON_MUMBAI = new sdk_core_1.Token(sdk_core_1.ChainId.POLYGON_MUMBAI, '0xe11a86849d99f524cac3e7a0ec1241828e332c62', 6, 'USDC', 'USD//C');
|
|
72
|
+
exports.DAI_POLYGON_MUMBAI = new sdk_core_1.Token(sdk_core_1.ChainId.POLYGON_MUMBAI, '0x001b3b4d0f3714ca98ba10f6042daebf0b1b7b6f', 18, 'DAI', 'Dai Stablecoin');
|
|
73
|
+
exports.WETH_POLYGON_MUMBAI = new sdk_core_1.Token(sdk_core_1.ChainId.POLYGON_MUMBAI, '0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa', 18, 'WETH', 'Wrapped Ether');
|
|
74
|
+
// BNB chain Tokens
|
|
75
|
+
exports.BTC_BNB = new sdk_core_1.Token(sdk_core_1.ChainId.BNB, '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c', 18, 'BTCB', 'Binance BTC');
|
|
76
|
+
exports.BUSD_BNB = new sdk_core_1.Token(sdk_core_1.ChainId.BNB, '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', 18, 'BUSD', 'BUSD');
|
|
77
|
+
exports.DAI_BNB = new sdk_core_1.Token(sdk_core_1.ChainId.BNB, '0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3', 18, 'DAI', 'DAI');
|
|
78
|
+
exports.ETH_BNB = new sdk_core_1.Token(sdk_core_1.ChainId.BNB, '0x2170Ed0880ac9A755fd29B2688956BD959F933F8', 18, 'ETH', 'ETH');
|
|
79
|
+
exports.USDC_BNB = new sdk_core_1.Token(sdk_core_1.ChainId.BNB, '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', 18, 'USDC', 'USDC');
|
|
80
|
+
exports.USDT_BNB = new sdk_core_1.Token(sdk_core_1.ChainId.BNB, '0x55d398326f99059fF775485246999027B3197955', 18, 'USDT', 'USDT');
|
|
81
|
+
// Celo Tokens
|
|
82
|
+
exports.CELO = new sdk_core_1.Token(sdk_core_1.ChainId.CELO, '0x471EcE3750Da237f93B8E339c536989b8978a438', 18, 'CELO', 'Celo native asset');
|
|
83
|
+
exports.DAI_CELO = new sdk_core_1.Token(sdk_core_1.ChainId.CELO, '0xE4fE50cdD716522A56204352f00AA110F731932d', 18, 'DAI', 'Dai Stablecoin');
|
|
84
|
+
exports.CUSD_CELO = new sdk_core_1.Token(sdk_core_1.ChainId.CELO, '0x765DE816845861e75A25fCA122bb6898B8B1282a', 18, 'CUSD', 'Celo Dollar Stablecoin');
|
|
85
|
+
exports.USDC_CELO = new sdk_core_1.Token(sdk_core_1.ChainId.CELO, '0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664', 18, 'USDC', 'USD//C.e');
|
|
86
|
+
exports.USDC_WORMHOLE_CELO = new sdk_core_1.Token(sdk_core_1.ChainId.CELO, '0x37f750B7cC259A2f741AF45294f6a16572CF5cAd', 18, 'USDC', 'USD//C.e');
|
|
87
|
+
exports.USDC_NATIVE_CELO = new sdk_core_1.Token(sdk_core_1.ChainId.CELO, '0x765DE816845861e75A25fCA122bb6898B8B1282a', 18, 'USDC', 'USD//C');
|
|
88
|
+
exports.CEUR_CELO = new sdk_core_1.Token(sdk_core_1.ChainId.CELO, '0xD8763CBa276a3738E6DE85b4b3bF5FDed6D6cA73', 18, 'CEUR', 'Celo Euro Stablecoin');
|
|
89
|
+
// Celo Alfajores Tokens
|
|
90
|
+
exports.CELO_ALFAJORES = new sdk_core_1.Token(sdk_core_1.ChainId.CELO_ALFAJORES, '0xF194afDf50B03e69Bd7D057c1Aa9e10c9954E4C9', 18, 'CELO', 'Celo native asset');
|
|
91
|
+
exports.DAI_CELO_ALFAJORES = new sdk_core_1.Token(sdk_core_1.ChainId.CELO_ALFAJORES, '0x7d91E51C8F218f7140188A155f5C75388630B6a8', 18, 'DAI', 'Dai Stablecoin');
|
|
92
|
+
exports.CUSD_CELO_ALFAJORES = new sdk_core_1.Token(sdk_core_1.ChainId.CELO_ALFAJORES, '0x874069Fa1Eb16D44d622F2e0Ca25eeA172369bC1', 18, 'CUSD', 'Celo Dollar Stablecoin');
|
|
93
|
+
exports.CEUR_CELO_ALFAJORES = new sdk_core_1.Token(sdk_core_1.ChainId.CELO_ALFAJORES, '0x10c892A6EC43a53E45D0B916B4b7D383B1b78C0F', 18, 'CEUR', 'Celo Euro Stablecoin');
|
|
94
|
+
// Avalanche Tokens
|
|
95
|
+
exports.DAI_AVAX = new sdk_core_1.Token(sdk_core_1.ChainId.AVALANCHE, '0xd586E7F844cEa2F87f50152665BCbc2C279D8d70', 18, 'DAI.e', 'DAI.e Token');
|
|
96
|
+
exports.USDC_AVAX = new sdk_core_1.Token(sdk_core_1.ChainId.AVALANCHE, '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E', 6, 'USDC', 'USDC Token');
|
|
97
|
+
exports.USDC_BRIDGED_AVAX = new sdk_core_1.Token(sdk_core_1.ChainId.AVALANCHE, '0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664', 6, 'USDC', 'USDC Token');
|
|
98
|
+
exports.USDC_NATIVE_AVAX = new sdk_core_1.Token(sdk_core_1.ChainId.AVALANCHE, '0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e', 6, 'USDC', 'USDC Token');
|
|
99
|
+
// Base Tokens
|
|
100
|
+
exports.USDC_BASE = new sdk_core_1.Token(sdk_core_1.ChainId.BASE, '0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA', 6, 'USDbC', 'USD Base Coin');
|
|
101
|
+
exports.USDC_NATIVE_BASE = new sdk_core_1.Token(sdk_core_1.ChainId.BASE, '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', 6, 'USDbC', 'USD Base Coin');
|
|
102
|
+
exports.VIRTUAL_BASE = new sdk_core_1.Token(sdk_core_1.ChainId.BASE, '0x0b3e328455c4059EEb9e3f84b5543F74E24e7E1b', 18, 'VIRTUAL', 'Virtual Protocol');
|
|
103
|
+
// Base Goerli Tokens
|
|
104
|
+
exports.USDC_BASE_GOERLI = new sdk_core_1.Token(sdk_core_1.ChainId.BASE_GOERLI, '0x853154e2A5604E5C74a2546E2871Ad44932eB92C', 6, 'USDbC', 'USD Base Coin');
|
|
105
|
+
// Gnosis Tokens
|
|
106
|
+
exports.USDC_ETHEREUM_GNOSIS = new sdk_core_1.Token(sdk_core_1.ChainId.GNOSIS, '0xddafbb505ad214d7b80b1f830fccc89b60fb7a83', 6, 'USDC', 'USDC from Ethereum on Gnosis');
|
|
107
|
+
exports.WXDAI_GNOSIS = new sdk_core_1.Token(sdk_core_1.ChainId.GNOSIS, '0xe91d153e0b41518a2ce8dd3d7944fa863463a97d', 18, 'WXDAI', 'Wrapped XDAI on Gnosis');
|
|
108
|
+
exports.WBTC_GNOSIS = new sdk_core_1.Token(sdk_core_1.ChainId.GNOSIS, '0x8e5bbbb09ed1ebde8674cda39a0c169401db4252', 8, 'WBTC', 'Wrapped BTC from Ethereum on Gnosis');
|
|
109
|
+
// Moonbeam Tokens
|
|
110
|
+
exports.USDC_MOONBEAM = new sdk_core_1.Token(sdk_core_1.ChainId.MOONBEAM, '0x818ec0A7Fe18Ff94269904fCED6AE3DaE6d6dC0b', 6, 'USDC', 'USD Coin bridged using Multichain');
|
|
111
|
+
exports.WGLMR_MOONBEAM = new sdk_core_1.Token(sdk_core_1.ChainId.MOONBEAM, '0xAcc15dC74880C9944775448304B263D191c6077F', 18, 'WGLMR', 'Wrapped GLMR');
|
|
112
|
+
exports.DAI_MOONBEAM = new sdk_core_1.Token(sdk_core_1.ChainId.MOONBEAM, '0x818ec0A7Fe18Ff94269904fCED6AE3DaE6d6dC0b', 6, 'DAI', 'Dai on moonbeam bridged using Multichain');
|
|
113
|
+
exports.WBTC_MOONBEAM = new sdk_core_1.Token(sdk_core_1.ChainId.MOONBEAM, '0x922D641a426DcFFaeF11680e5358F34d97d112E1', 8, 'WBTC', 'Wrapped BTC bridged using Multichain');
|
|
114
|
+
// Blast Tokens
|
|
115
|
+
exports.USDB_BLAST = new sdk_core_1.Token(sdk_core_1.ChainId.BLAST, '0x4300000000000000000000000000000000000003', 18, 'USDB', 'USD Blast');
|
|
116
|
+
exports.USDC_ZORA = new sdk_core_1.Token(sdk_core_1.ChainId.ZORA, '0xCccCCccc7021b32EBb4e8C08314bD62F7c653EC4', 6, 'USDzC', 'USD Coin (Bridged from Ethereum)');
|
|
117
|
+
exports.USDC_ZKSYNC = new sdk_core_1.Token(sdk_core_1.ChainId.ZKSYNC, '0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4', 6, 'USDC', 'USDC');
|
|
118
|
+
exports.USDCE_ZKSYNC = new sdk_core_1.Token(sdk_core_1.ChainId.ZKSYNC, '0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4', 6, 'USDC.e', 'Bridged USDC (zkSync)');
|
|
119
|
+
exports.DAI_ZKSYNC = new sdk_core_1.Token(sdk_core_1.ChainId.ZKSYNC, '0x4B9eb6c0b6ea15176BBF62841C6B2A8a398cb656', 18, 'DAI', 'Dai Stablecoin');
|
|
120
|
+
exports.USDC_WORLDCHAIN = new sdk_core_1.Token(sdk_core_1.ChainId.WORLDCHAIN, '0x79A02482A880bCE3F13e09Da970dC34db4CD24d1', 6, 'USDC.e', 'Bridged USDC (world-chain-mainnet)');
|
|
121
|
+
exports.USDT_MONAD_TESTNET = new sdk_core_1.Token(sdk_core_1.ChainId.MONAD_TESTNET, '0xfBC2D240A5eD44231AcA3A9e9066bc4b33f01149', 6, 'USDT', 'USDT');
|
|
122
|
+
exports.USDC_MONAD = new sdk_core_1.Token(sdk_core_1.ChainId.MONAD, '0x754704Bc059F8C67012fEd69BC8A327a5aafb603', 6, 'USDC', 'USDC');
|
|
123
|
+
exports.WLD_WORLDCHAIN = new sdk_core_1.Token(sdk_core_1.ChainId.WORLDCHAIN, '0x2cFc85d8E48F8EAB294be644d9E25C3030863003', 18, 'WLD', 'Worldcoin');
|
|
124
|
+
exports.WBTC_WORLDCHAIN = new sdk_core_1.Token(sdk_core_1.ChainId.WORLDCHAIN, '0x03C7054BCB39f7b2e5B2c7AcB37583e32D70Cfa3', 8, 'WBTC', 'Wrapped BTC');
|
|
125
|
+
exports.USDC_UNICHAIN_SEPOLIA = new sdk_core_1.Token(sdk_core_1.ChainId.UNICHAIN_SEPOLIA, '0x31d0220469e10c4E71834a79b1f276d740d3768F', 6, 'USDC', 'USDC Token');
|
|
126
|
+
exports.USDC_BASE_SEPOLIA = new sdk_core_1.Token(sdk_core_1.ChainId.BASE_SEPOLIA, '0x036CbD53842c5426634e7929541eC2318f3dCF7e', 6, 'USDC', 'USDC Token');
|
|
127
|
+
exports.USDC_UNICHAIN = new sdk_core_1.Token(sdk_core_1.ChainId.UNICHAIN,
|
|
128
|
+
// TODO: validate USDC address is final / validated
|
|
129
|
+
'0x078D782b760474a361dDA0AF3839290b0EF57AD6', 6, 'USDC', 'USD Token');
|
|
130
|
+
exports.DAI_UNICHAIN = new sdk_core_1.Token(sdk_core_1.ChainId.UNICHAIN, '0x20CAb320A855b39F724131C69424240519573f81', 18, 'DAI', 'Dai Stablecoin');
|
|
131
|
+
exports.USDC_SONEIUM = new sdk_core_1.Token(sdk_core_1.ChainId.SONEIUM, '0xbA9986D2381edf1DA03B0B9c1f8b00dc4AacC369', 6, 'USDCE', 'Soneium Bridged USDC Soneium');
|
|
132
|
+
// MegaETH Testnet Tokens
|
|
133
|
+
exports.USDC_MEGAETH_TESTNET = new sdk_core_1.Token(sdk_core_1.ChainId.MEGAETH_TESTNET, '0x75139A9559c9CD1aD69B7E239C216151D2c81e6f', 6, 'USDC', 'USD Coin');
|
|
134
|
+
exports.USDT_MEGAETH_TESTNET = new sdk_core_1.Token(sdk_core_1.ChainId.MEGAETH_TESTNET, '0x8E1eb0b74A0aC37abaa0f75C598A681975896900', 6, 'USDT', 'Tether USD');
|
|
135
|
+
exports.WBTC_MEGAETH_TESTNET = new sdk_core_1.Token(sdk_core_1.ChainId.MEGAETH_TESTNET, '0x59cB6631689f6627D8b7ef6B3412F7F8d12fB86e', 8, 'WBTC', 'Wrapped BTC');
|
|
136
|
+
class TokenProvider {
|
|
137
|
+
constructor(chainId, multicall2Provider) {
|
|
138
|
+
this.chainId = chainId;
|
|
139
|
+
this.multicall2Provider = multicall2Provider;
|
|
140
|
+
}
|
|
141
|
+
async getTokenSymbol(addresses, providerConfig) {
|
|
142
|
+
let result;
|
|
143
|
+
let isBytes32 = false;
|
|
144
|
+
try {
|
|
145
|
+
result =
|
|
146
|
+
await this.multicall2Provider.callSameFunctionOnMultipleContracts({
|
|
147
|
+
addresses,
|
|
148
|
+
contractInterface: IERC20Metadata__factory_1.IERC20Metadata__factory.createInterface(),
|
|
149
|
+
functionName: 'symbol',
|
|
150
|
+
providerConfig,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
util_1.log.error({ addresses }, `TokenProvider.getTokenSymbol[string] failed with error ${error}. Trying with bytes32.`);
|
|
155
|
+
const bytes32Interface = new abi_1.Interface([
|
|
156
|
+
{
|
|
157
|
+
inputs: [],
|
|
158
|
+
name: 'symbol',
|
|
159
|
+
outputs: [
|
|
160
|
+
{
|
|
161
|
+
internalType: 'bytes32',
|
|
162
|
+
name: '',
|
|
163
|
+
type: 'bytes32',
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
stateMutability: 'view',
|
|
167
|
+
type: 'function',
|
|
168
|
+
},
|
|
169
|
+
]);
|
|
170
|
+
try {
|
|
171
|
+
result =
|
|
172
|
+
await this.multicall2Provider.callSameFunctionOnMultipleContracts({
|
|
173
|
+
addresses,
|
|
174
|
+
contractInterface: bytes32Interface,
|
|
175
|
+
functionName: 'symbol',
|
|
176
|
+
providerConfig,
|
|
177
|
+
});
|
|
178
|
+
isBytes32 = true;
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
util_1.log.fatal({ addresses }, `TokenProvider.getTokenSymbol[bytes32] failed with error ${error}.`);
|
|
182
|
+
throw new Error('[TokenProvider.getTokenSymbol] Impossible to fetch token symbol.');
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return { result, isBytes32 };
|
|
186
|
+
}
|
|
187
|
+
async getTokenDecimals(addresses, providerConfig) {
|
|
188
|
+
return this.multicall2Provider.callSameFunctionOnMultipleContracts({
|
|
189
|
+
addresses,
|
|
190
|
+
contractInterface: IERC20Metadata__factory_1.IERC20Metadata__factory.createInterface(),
|
|
191
|
+
functionName: 'decimals',
|
|
192
|
+
providerConfig,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
async getTokens(_addresses, providerConfig) {
|
|
196
|
+
const addressToToken = {};
|
|
197
|
+
const symbolToToken = {};
|
|
198
|
+
const addresses = (0, lodash_1.default)(_addresses)
|
|
199
|
+
.map((address) => address.toLowerCase())
|
|
200
|
+
.uniq()
|
|
201
|
+
.value();
|
|
202
|
+
if (addresses.length > 0) {
|
|
203
|
+
const [symbolsResult, decimalsResult] = await Promise.all([
|
|
204
|
+
this.getTokenSymbol(addresses, providerConfig),
|
|
205
|
+
this.getTokenDecimals(addresses, providerConfig),
|
|
206
|
+
]);
|
|
207
|
+
const isBytes32 = symbolsResult.isBytes32;
|
|
208
|
+
const { results: symbols } = symbolsResult.result;
|
|
209
|
+
const { results: decimals } = decimalsResult;
|
|
210
|
+
for (let i = 0; i < addresses.length; i++) {
|
|
211
|
+
const address = addresses[i];
|
|
212
|
+
const symbolResult = symbols[i];
|
|
213
|
+
const decimalResult = decimals[i];
|
|
214
|
+
if (!(symbolResult === null || symbolResult === void 0 ? void 0 : symbolResult.success) || !(decimalResult === null || decimalResult === void 0 ? void 0 : decimalResult.success)) {
|
|
215
|
+
util_1.log.info({
|
|
216
|
+
symbolResult,
|
|
217
|
+
decimalResult,
|
|
218
|
+
}, `Dropping token with address ${address} as symbol or decimal are invalid`);
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
let symbol;
|
|
222
|
+
try {
|
|
223
|
+
symbol = isBytes32
|
|
224
|
+
? (0, strings_1.parseBytes32String)(symbolResult.result[0])
|
|
225
|
+
: symbolResult.result[0];
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
if (error instanceof Error &&
|
|
229
|
+
error.message.includes('invalid bytes32 string - no null terminator')) {
|
|
230
|
+
util_1.log.error({
|
|
231
|
+
symbolResult,
|
|
232
|
+
error,
|
|
233
|
+
address,
|
|
234
|
+
}, `invalid bytes32 string - no null terminator`);
|
|
235
|
+
}
|
|
236
|
+
throw error;
|
|
237
|
+
}
|
|
238
|
+
const decimal = decimalResult.result[0];
|
|
239
|
+
addressToToken[address.toLowerCase()] = new sdk_core_1.Token(this.chainId, address, decimal, symbol);
|
|
240
|
+
symbolToToken[symbol.toLowerCase()] =
|
|
241
|
+
addressToToken[address.toLowerCase()];
|
|
242
|
+
}
|
|
243
|
+
util_1.log.info(`Got token symbol and decimals for ${Object.values(addressToToken).length} out of ${addresses.length} tokens on-chain ${providerConfig ? `as of: ${providerConfig === null || providerConfig === void 0 ? void 0 : providerConfig.blockNumber}` : ''}`);
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
getTokenByAddress: (address) => {
|
|
247
|
+
return addressToToken[address.toLowerCase()];
|
|
248
|
+
},
|
|
249
|
+
getTokenBySymbol: (symbol) => {
|
|
250
|
+
return symbolToToken[symbol.toLowerCase()];
|
|
251
|
+
},
|
|
252
|
+
getAllTokens: () => {
|
|
253
|
+
return Object.values(addressToToken);
|
|
254
|
+
},
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
exports.TokenProvider = TokenProvider;
|
|
259
|
+
const DAI_ON = (chainId) => {
|
|
260
|
+
switch (chainId) {
|
|
261
|
+
case sdk_core_1.ChainId.MAINNET:
|
|
262
|
+
return exports.DAI_MAINNET;
|
|
263
|
+
case sdk_core_1.ChainId.GOERLI:
|
|
264
|
+
return exports.DAI_GOERLI;
|
|
265
|
+
case sdk_core_1.ChainId.SEPOLIA:
|
|
266
|
+
return exports.DAI_SEPOLIA;
|
|
267
|
+
case sdk_core_1.ChainId.OPTIMISM:
|
|
268
|
+
return exports.DAI_OPTIMISM;
|
|
269
|
+
case sdk_core_1.ChainId.OPTIMISM_GOERLI:
|
|
270
|
+
return exports.DAI_OPTIMISM_GOERLI;
|
|
271
|
+
case sdk_core_1.ChainId.OPTIMISM_SEPOLIA:
|
|
272
|
+
return exports.DAI_OPTIMISM_SEPOLIA;
|
|
273
|
+
case sdk_core_1.ChainId.ARBITRUM_ONE:
|
|
274
|
+
return exports.DAI_ARBITRUM;
|
|
275
|
+
case sdk_core_1.ChainId.ARBITRUM_GOERLI:
|
|
276
|
+
return exports.DAI_ARBITRUM_GOERLI;
|
|
277
|
+
case sdk_core_1.ChainId.ARBITRUM_SEPOLIA:
|
|
278
|
+
return exports.DAI_ARBITRUM_SEPOLIA;
|
|
279
|
+
case sdk_core_1.ChainId.POLYGON:
|
|
280
|
+
return exports.DAI_POLYGON;
|
|
281
|
+
case sdk_core_1.ChainId.POLYGON_MUMBAI:
|
|
282
|
+
return exports.DAI_POLYGON_MUMBAI;
|
|
283
|
+
case sdk_core_1.ChainId.CELO:
|
|
284
|
+
return exports.DAI_CELO;
|
|
285
|
+
case sdk_core_1.ChainId.CELO_ALFAJORES:
|
|
286
|
+
return exports.DAI_CELO_ALFAJORES;
|
|
287
|
+
case sdk_core_1.ChainId.MOONBEAM:
|
|
288
|
+
return exports.DAI_MOONBEAM;
|
|
289
|
+
case sdk_core_1.ChainId.BNB:
|
|
290
|
+
return exports.DAI_BNB;
|
|
291
|
+
case sdk_core_1.ChainId.AVALANCHE:
|
|
292
|
+
return exports.DAI_AVAX;
|
|
293
|
+
case sdk_core_1.ChainId.ZKSYNC:
|
|
294
|
+
return exports.DAI_ZKSYNC;
|
|
295
|
+
case sdk_core_1.ChainId.UNICHAIN:
|
|
296
|
+
return exports.DAI_UNICHAIN;
|
|
297
|
+
case sdk_core_1.ChainId.BASE_SEPOLIA:
|
|
298
|
+
return exports.DAI_BASE_SEPOLIA;
|
|
299
|
+
default:
|
|
300
|
+
throw new Error(`Chain id: ${chainId} not supported`);
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
exports.DAI_ON = DAI_ON;
|
|
304
|
+
const USDT_ON = (chainId) => {
|
|
305
|
+
switch (chainId) {
|
|
306
|
+
case sdk_core_1.ChainId.MAINNET:
|
|
307
|
+
return exports.USDT_MAINNET;
|
|
308
|
+
case sdk_core_1.ChainId.GOERLI:
|
|
309
|
+
return exports.USDT_GOERLI;
|
|
310
|
+
case sdk_core_1.ChainId.OPTIMISM:
|
|
311
|
+
return exports.USDT_OPTIMISM;
|
|
312
|
+
case sdk_core_1.ChainId.OPTIMISM_GOERLI:
|
|
313
|
+
return exports.USDT_OPTIMISM_GOERLI;
|
|
314
|
+
case sdk_core_1.ChainId.OPTIMISM_SEPOLIA:
|
|
315
|
+
return exports.USDT_OPTIMISM_SEPOLIA;
|
|
316
|
+
case sdk_core_1.ChainId.ARBITRUM_ONE:
|
|
317
|
+
return exports.USDT_ARBITRUM;
|
|
318
|
+
case sdk_core_1.ChainId.BNB:
|
|
319
|
+
return exports.USDT_BNB;
|
|
320
|
+
case sdk_core_1.ChainId.MONAD_TESTNET:
|
|
321
|
+
return exports.USDT_MONAD_TESTNET;
|
|
322
|
+
case sdk_core_1.ChainId.MEGAETH_TESTNET:
|
|
323
|
+
return exports.USDT_MEGAETH_TESTNET;
|
|
324
|
+
default:
|
|
325
|
+
throw new Error(`Chain id: ${chainId} not supported`);
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
exports.USDT_ON = USDT_ON;
|
|
329
|
+
const USDC_ON = (chainId) => {
|
|
330
|
+
switch (chainId) {
|
|
331
|
+
case sdk_core_1.ChainId.MAINNET:
|
|
332
|
+
return exports.USDC_MAINNET;
|
|
333
|
+
case sdk_core_1.ChainId.GOERLI:
|
|
334
|
+
return exports.USDC_GOERLI;
|
|
335
|
+
case sdk_core_1.ChainId.SEPOLIA:
|
|
336
|
+
return exports.USDC_SEPOLIA;
|
|
337
|
+
case sdk_core_1.ChainId.OPTIMISM:
|
|
338
|
+
return exports.USDC_OPTIMISM;
|
|
339
|
+
case sdk_core_1.ChainId.OPTIMISM_GOERLI:
|
|
340
|
+
return exports.USDC_OPTIMISM_GOERLI;
|
|
341
|
+
case sdk_core_1.ChainId.OPTIMISM_SEPOLIA:
|
|
342
|
+
return exports.USDC_OPTIMISM_SEPOLIA;
|
|
343
|
+
case sdk_core_1.ChainId.ARBITRUM_ONE:
|
|
344
|
+
return exports.USDC_ARBITRUM;
|
|
345
|
+
case sdk_core_1.ChainId.ARBITRUM_GOERLI:
|
|
346
|
+
return exports.USDC_ARBITRUM_GOERLI;
|
|
347
|
+
case sdk_core_1.ChainId.ARBITRUM_SEPOLIA:
|
|
348
|
+
return exports.USDC_ARBITRUM_SEPOLIA;
|
|
349
|
+
case sdk_core_1.ChainId.POLYGON:
|
|
350
|
+
return exports.USDC_POLYGON;
|
|
351
|
+
case sdk_core_1.ChainId.POLYGON_MUMBAI:
|
|
352
|
+
return exports.USDC_POLYGON_MUMBAI;
|
|
353
|
+
case sdk_core_1.ChainId.GNOSIS:
|
|
354
|
+
return exports.USDC_ETHEREUM_GNOSIS;
|
|
355
|
+
case sdk_core_1.ChainId.MOONBEAM:
|
|
356
|
+
return exports.USDC_MOONBEAM;
|
|
357
|
+
case sdk_core_1.ChainId.BNB:
|
|
358
|
+
return exports.USDC_BNB;
|
|
359
|
+
case sdk_core_1.ChainId.AVALANCHE:
|
|
360
|
+
return exports.USDC_AVAX;
|
|
361
|
+
case sdk_core_1.ChainId.BASE:
|
|
362
|
+
return exports.USDC_BASE;
|
|
363
|
+
case sdk_core_1.ChainId.BASE_GOERLI:
|
|
364
|
+
return exports.USDC_BASE_GOERLI;
|
|
365
|
+
case sdk_core_1.ChainId.ZORA:
|
|
366
|
+
return exports.USDC_ZORA;
|
|
367
|
+
case sdk_core_1.ChainId.ZKSYNC:
|
|
368
|
+
return exports.USDCE_ZKSYNC;
|
|
369
|
+
case sdk_core_1.ChainId.WORLDCHAIN:
|
|
370
|
+
return exports.USDC_WORLDCHAIN;
|
|
371
|
+
case sdk_core_1.ChainId.UNICHAIN_SEPOLIA:
|
|
372
|
+
return exports.USDC_UNICHAIN_SEPOLIA;
|
|
373
|
+
case sdk_core_1.ChainId.BASE_SEPOLIA:
|
|
374
|
+
return exports.USDC_BASE_SEPOLIA;
|
|
375
|
+
case sdk_core_1.ChainId.UNICHAIN:
|
|
376
|
+
return exports.USDC_UNICHAIN;
|
|
377
|
+
case sdk_core_1.ChainId.SONEIUM:
|
|
378
|
+
return exports.USDC_SONEIUM;
|
|
379
|
+
case sdk_core_1.ChainId.MONAD:
|
|
380
|
+
return exports.USDC_MONAD;
|
|
381
|
+
case sdk_core_1.ChainId.MEGAETH_TESTNET:
|
|
382
|
+
return exports.USDC_MEGAETH_TESTNET;
|
|
383
|
+
default:
|
|
384
|
+
throw new Error(`Chain id: ${chainId} not supported`);
|
|
385
|
+
}
|
|
386
|
+
};
|
|
387
|
+
exports.USDC_ON = USDC_ON;
|
|
388
|
+
const WNATIVE_ON = (chainId) => {
|
|
389
|
+
return util_1.WRAPPED_NATIVE_CURRENCY[chainId];
|
|
390
|
+
};
|
|
391
|
+
exports.WNATIVE_ON = WNATIVE_ON;
|
|
392
|
+
exports.V4_SEPOLIA_TEST_A = new sdk_core_1.Token(sdk_core_1.ChainId.SEPOLIA, '0x0275C79896215a790dD57F436E1103D4179213be', 18, 'A', 'MockA');
|
|
393
|
+
exports.V4_SEPOLIA_TEST_B = new sdk_core_1.Token(sdk_core_1.ChainId.SEPOLIA, '0x1a6990c77cfbba398beb230dd918e28aab71eec2', 18, 'B', 'MockB');
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3Rva2VuLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsNENBQStDO0FBRS9DLG9EQUE0RDtBQUM1RCxnREFBbUQ7QUFDbkQsb0RBQXVCO0FBRXZCLDJGQUF3RjtBQUN4RixrQ0FBdUQ7QUErQnZELG9FQUFvRTtBQUN2RCxRQUFBLFlBQVksR0FBRyxJQUFJLGdCQUFLLENBQ25DLGtCQUFPLENBQUMsT0FBTyxFQUNmLDRDQUE0QyxFQUM1QyxDQUFDLEVBQ0QsTUFBTSxFQUNOLFFBQVEsQ0FDVCxDQUFDO0FBQ1csUUFBQSxZQUFZLEdBQUcsSUFBSSxnQkFBSyxDQUNuQyxrQkFBTyxDQUFDLE9BQU8sRUFDZiw0Q0FBNEMsRUFDNUMsQ0FBQyxFQUNELE1BQU0sRUFDTixZQUFZLENBQ2IsQ0FBQztBQUNXLFFBQUEsWUFBWSxHQUFHLElBQUksZ0JBQUssQ0FDbkMsa0JBQU8sQ0FBQyxPQUFPLEVBQ2YsNENBQTRDLEVBQzVDLENBQUMsRUFDRCxNQUFNLEVBQ04sYUFBYSxDQUNkLENBQUM7QUFDVyxRQUFBLFdBQVcsR0FBRyxJQUFJLGdCQUFLLENBQ2xDLGtCQUFPLENBQUMsT0FBTyxFQUNmLDRDQUE0QyxFQUM1QyxFQUFFLEVBQ0YsS0FBSyxFQUNMLGdCQUFnQixDQUNqQixDQUFDO0FBQ1csUUFBQSxZQUFZLEdBQUcsSUFBSSxnQkFBSyxDQUNuQyxrQkFBTyxDQUFDLE9BQU8sRUFDZiw0Q0FBNEMsRUFDNUMsRUFBRSxFQUNGLE1BQU0sRUFDTixNQUFNLENBQ1AsQ0FBQztBQUNXLFFBQUEsWUFBWSxHQUFHLElBQUksZ0JBQUssQ0FDbkMsa0JBQU8sQ0FBQyxPQUFPLEVBQ2YsNENBQTRDLEVBQzVDLENBQUMsRUFDRCxNQUFNLEVBQ04sTUFBTSxDQUNQLENBQUM7QUFDVyxRQUFBLFdBQVcsR0FBRyxJQUFJLGdC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
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ChainId, Token } from '@uniswap/sdk-core';
|
|
2
|
+
import { ICache } from './cache';
|
|
3
|
+
import { IMulticallProvider } from './multicall-provider';
|
|
4
|
+
import { ProviderConfig } from './provider';
|
|
5
|
+
export declare const DEFAULT_ALLOWLIST: Set<string>;
|
|
6
|
+
export declare enum TokenValidationResult {
|
|
7
|
+
UNKN = 0,
|
|
8
|
+
FOT = 1,
|
|
9
|
+
STF = 2
|
|
10
|
+
}
|
|
11
|
+
export interface TokenValidationResults {
|
|
12
|
+
getValidationByToken(token: Token): TokenValidationResult | undefined;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Provider for getting token data.
|
|
16
|
+
*
|
|
17
|
+
* @export
|
|
18
|
+
* @interface ITokenValidatorProvider
|
|
19
|
+
*/
|
|
20
|
+
export interface ITokenValidatorProvider {
|
|
21
|
+
/**
|
|
22
|
+
* Gets the token at each address. Any addresses that are not valid ERC-20 are ignored.
|
|
23
|
+
*
|
|
24
|
+
* @param addresses The token addresses to get.
|
|
25
|
+
* @param [providerConfig] The provider config.
|
|
26
|
+
* @returns A token accessor with methods for accessing the tokens.
|
|
27
|
+
*/
|
|
28
|
+
validateTokens(tokens: Token[], providerConfig?: ProviderConfig): Promise<TokenValidationResults>;
|
|
29
|
+
}
|
|
30
|
+
export declare class TokenValidatorProvider implements ITokenValidatorProvider {
|
|
31
|
+
protected chainId: ChainId;
|
|
32
|
+
protected multicall2Provider: IMulticallProvider;
|
|
33
|
+
private tokenValidationCache;
|
|
34
|
+
private tokenValidatorAddress;
|
|
35
|
+
private gasLimitPerCall;
|
|
36
|
+
private amountToFlashBorrow;
|
|
37
|
+
private allowList;
|
|
38
|
+
private CACHE_KEY;
|
|
39
|
+
private BASES;
|
|
40
|
+
constructor(chainId: ChainId, multicall2Provider: IMulticallProvider, tokenValidationCache: ICache<TokenValidationResult>, tokenValidatorAddress?: string, gasLimitPerCall?: number, amountToFlashBorrow?: string, allowList?: Set<string>);
|
|
41
|
+
validateTokens(tokens: Token[], providerConfig?: ProviderConfig): Promise<TokenValidationResults>;
|
|
42
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TokenValidatorProvider = exports.TokenValidationResult = exports.DEFAULT_ALLOWLIST = void 0;
|
|
7
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
+
const ITokenValidator__factory_1 = require("../types/other/factories/ITokenValidator__factory");
|
|
9
|
+
const util_1 = require("../util");
|
|
10
|
+
exports.DEFAULT_ALLOWLIST = new Set([
|
|
11
|
+
// RYOSHI. Does not allow transfers between contracts so fails validation.
|
|
12
|
+
'0x777E2ae845272a2F540ebf6a3D03734A5a8f618e'.toLowerCase(),
|
|
13
|
+
]);
|
|
14
|
+
var TokenValidationResult;
|
|
15
|
+
(function (TokenValidationResult) {
|
|
16
|
+
TokenValidationResult[TokenValidationResult["UNKN"] = 0] = "UNKN";
|
|
17
|
+
TokenValidationResult[TokenValidationResult["FOT"] = 1] = "FOT";
|
|
18
|
+
TokenValidationResult[TokenValidationResult["STF"] = 2] = "STF";
|
|
19
|
+
})(TokenValidationResult = exports.TokenValidationResult || (exports.TokenValidationResult = {}));
|
|
20
|
+
const TOKEN_VALIDATOR_ADDRESS = '0xb5ee1690b7dcc7859771148d0889be838fe108e0';
|
|
21
|
+
const AMOUNT_TO_FLASH_BORROW = '1000';
|
|
22
|
+
const GAS_LIMIT_PER_VALIDATE = 1000000;
|
|
23
|
+
class TokenValidatorProvider {
|
|
24
|
+
constructor(chainId, multicall2Provider, tokenValidationCache, tokenValidatorAddress = TOKEN_VALIDATOR_ADDRESS, gasLimitPerCall = GAS_LIMIT_PER_VALIDATE, amountToFlashBorrow = AMOUNT_TO_FLASH_BORROW, allowList = exports.DEFAULT_ALLOWLIST) {
|
|
25
|
+
this.chainId = chainId;
|
|
26
|
+
this.multicall2Provider = multicall2Provider;
|
|
27
|
+
this.tokenValidationCache = tokenValidationCache;
|
|
28
|
+
this.tokenValidatorAddress = tokenValidatorAddress;
|
|
29
|
+
this.gasLimitPerCall = gasLimitPerCall;
|
|
30
|
+
this.amountToFlashBorrow = amountToFlashBorrow;
|
|
31
|
+
this.allowList = allowList;
|
|
32
|
+
this.CACHE_KEY = (chainId, address) => `token-${chainId}-${address}`;
|
|
33
|
+
this.BASES = [util_1.WRAPPED_NATIVE_CURRENCY[this.chainId].address];
|
|
34
|
+
}
|
|
35
|
+
async validateTokens(tokens, providerConfig) {
|
|
36
|
+
const tokenAddressToToken = lodash_1.default.keyBy(tokens, 'address');
|
|
37
|
+
const addressesRaw = (0, lodash_1.default)(tokens)
|
|
38
|
+
.map((token) => token.address)
|
|
39
|
+
.uniq()
|
|
40
|
+
.value();
|
|
41
|
+
const addresses = [];
|
|
42
|
+
const tokenToResult = {};
|
|
43
|
+
// Check if we have cached token validation results for any tokens.
|
|
44
|
+
for (const address of addressesRaw) {
|
|
45
|
+
if (await this.tokenValidationCache.has(this.CACHE_KEY(this.chainId, address))) {
|
|
46
|
+
tokenToResult[address.toLowerCase()] =
|
|
47
|
+
(await this.tokenValidationCache.get(this.CACHE_KEY(this.chainId, address)));
|
|
48
|
+
util_1.metric.putMetric(`TokenValidatorProviderValidateCacheHitResult${tokenToResult[address.toLowerCase()]}`, 1, util_1.MetricLoggerUnit.Count);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
addresses.push(address);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
util_1.log.info(`Got token validation results for ${addressesRaw.length - addresses.length} tokens from cache. Getting ${addresses.length} on-chain.`);
|
|
55
|
+
const functionParams = (0, lodash_1.default)(addresses)
|
|
56
|
+
.map((address) => [address, this.BASES, this.amountToFlashBorrow])
|
|
57
|
+
.value();
|
|
58
|
+
// We use the validate function instead of batchValidate to avoid poison pill problem.
|
|
59
|
+
// One token that consumes too much gas could cause the entire batch to fail.
|
|
60
|
+
const multicallResult = await this.multicall2Provider.callSameFunctionOnContractWithMultipleParams({
|
|
61
|
+
address: this.tokenValidatorAddress,
|
|
62
|
+
contractInterface: ITokenValidator__factory_1.ITokenValidator__factory.createInterface(),
|
|
63
|
+
functionName: 'validate',
|
|
64
|
+
functionParams: functionParams,
|
|
65
|
+
providerConfig,
|
|
66
|
+
additionalConfig: {
|
|
67
|
+
gasLimitPerCallOverride: this.gasLimitPerCall,
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
for (let i = 0; i < multicallResult.results.length; i++) {
|
|
71
|
+
const resultWrapper = multicallResult.results[i];
|
|
72
|
+
const tokenAddress = addresses[i];
|
|
73
|
+
const token = tokenAddressToToken[tokenAddress];
|
|
74
|
+
if (this.allowList.has(token.address.toLowerCase())) {
|
|
75
|
+
tokenToResult[token.address.toLowerCase()] = TokenValidationResult.UNKN;
|
|
76
|
+
await this.tokenValidationCache.set(this.CACHE_KEY(this.chainId, token.address.toLowerCase()), tokenToResult[token.address.toLowerCase()]);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
// Could happen if the tokens transfer consumes too much gas so we revert. Just
|
|
80
|
+
// drop the token in that case.
|
|
81
|
+
if (!resultWrapper.success) {
|
|
82
|
+
util_1.metric.putMetric('TokenValidatorProviderValidateFailed', 1, util_1.MetricLoggerUnit.Count);
|
|
83
|
+
util_1.log.error({ result: resultWrapper }, `Failed to validate token ${token.symbol}`);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
util_1.metric.putMetric('TokenValidatorProviderValidateSuccess', 1, util_1.MetricLoggerUnit.Count);
|
|
87
|
+
const validationResult = resultWrapper.result[0];
|
|
88
|
+
tokenToResult[token.address.toLowerCase()] =
|
|
89
|
+
validationResult;
|
|
90
|
+
await this.tokenValidationCache.set(this.CACHE_KEY(this.chainId, token.address.toLowerCase()), tokenToResult[token.address.toLowerCase()]);
|
|
91
|
+
util_1.metric.putMetric(`TokenValidatorProviderValidateCacheMissResult${validationResult}`, 1, util_1.MetricLoggerUnit.Count);
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
getValidationByToken: (token) => tokenToResult[token.address.toLowerCase()],
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.TokenValidatorProvider = TokenValidatorProvider;
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tdmFsaWRhdG9yLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy90b2tlbi12YWxpZGF0b3ItcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0Esb0RBQXVCO0FBRXZCLGdHQUE2RjtBQUM3RixrQ0FLaUI7QUFNSixRQUFBLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFTO0lBQy9DLDBFQUEwRTtJQUMxRSw0Q0FBNEMsQ0FBQyxXQUFXLEVBQUU7Q0FDM0QsQ0FBQyxDQUFDO0FBRUgsSUFBWSxxQkFJWDtBQUpELFdBQVkscUJBQXFCO0lBQy9CLGlFQUFRLENBQUE7SUFDUiwrREFBTyxDQUFBO0lBQ1AsK0RBQU8sQ0FBQTtBQUNULENBQUMsRUFKVyxxQkFBcUIsR0FBckIsNkJBQXFCLEtBQXJCLDZCQUFxQixRQUloQztBQU1ELE1BQU0sdUJBQXVCLEdBQUcsNENBQTRDLENBQUM7QUFDN0UsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUM7QUFDdEMsTUFBTSxzQkFBc0IsR0FBRyxPQUFTLENBQUM7QUFzQnpDLE1BQWEsc0JBQXNCO0lBTWpDLFlBQ1ksT0FBZ0IsRUFDaEIsa0JBQXNDLEVBQ3hDLG9CQUFtRCxFQUNuRCx3QkFBd0IsdUJBQXVCLEVBQy9DLGtCQUFrQixzQkFBc0IsRUFDeEMsc0JBQXNCLHNCQUFzQixFQUM1QyxZQUFZLHlCQUFpQjtRQU4zQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDeEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUErQjtRQUNuRCwwQkFBcUIsR0FBckIscUJBQXFCLENBQTBCO1FBQy9DLG9CQUFlLEdBQWYsZUFBZSxDQUF5QjtRQUN4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXlCO1FBQzVDLGNBQVMsR0FBVCxTQUFTLENBQW9CO1FBWi9CLGNBQVMsR0FBRyxDQUFDLE9BQWdCLEVBQUUsT0FBZSxFQUFFLEVBQUUsQ0FDeEQsU0FBUyxPQUFPLElBQUksT0FBTyxFQUFFLENBQUM7UUFhOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLDhCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FDekIsTUFBZSxFQUNmLGNBQStCO1FBRS9CLE1BQU0sbUJBQW1CLEdBQUcsZ0JBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sWUFBWSxHQUFHLElBQUEsZ0JBQUMsRUFBQyxNQUFNLENBQUM7YUFDM0IsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQzdCLElBQUksRUFBRTthQUNOLEtBQUssRUFBRSxDQUFDO1FBRVgsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sYUFBYSxHQUFzRCxFQUFFLENBQUM7UUFFNUUsbUVBQW1FO1FBQ25FLEtBQUssTUFBTSxPQUFPLElBQUksWUFBWSxFQUFFO1lBQ2xDLElBQ0UsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQ3RDLEVBQ0Q7Z0JBQ0EsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDbEMsQ0FBQyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FDdEMsQ0FBRSxDQUFDO2dCQUVOLGFBQU0sQ0FBQyxTQUFTLENBQ2QsK0NBQ0UsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FDckMsRUFBRSxFQUNGLENBQUMsRUFDRCx1QkFBZ0IsQ0FBQyxLQUFLLENBQ3ZCLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3pCO1NBQ0Y7UUFFRCxVQUFHLENBQUMsSUFBSSxDQUNOLG9DQUNFLFlBQVksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQ2xDLCtCQUErQixTQUFTLENBQUMsTUFBTSxZQUFZLENBQzVELENBQUM7UUFFRixNQUFNLGNBQWMsR0FBRyxJQUFBLGdCQUFDLEVBQUMsU0FBUyxDQUFDO2FBQ2hDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQzthQUNqRSxLQUFLLEVBQWtDLENBQUM7UUFFM0Msc0ZBQXNGO1FBQ3RGLDZFQUE2RTtRQUM3RSxNQUFNLGVBQWUsR0FDbkIsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsNENBQTRDLENBR3hFO1lBQ0EsT0FBTyxFQUFFLElBQUksQ0FBQyxxQkFBcUI7WUFDbkMsaUJBQWlCLEVBQUUsbURBQXdCLENBQUMsZUFBZSxFQUFFO1lBQzdELFlBQVksRUFBRSxVQUFVO1lBQ3hCLGNBQWMsRUFBRSxjQUFjO1lBQzlCLGNBQWM7WUFDZCxnQkFBZ0IsRUFBRTtnQkFDaEIsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLGVBQWU7YUFDOUM7U0FDRixDQUFDLENBQUM7UUFFTCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkQsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUUsQ0FBQztZQUNsRCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFFLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFFLENBQUM7WUFFakQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7Z0JBQ25ELGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDO2dCQUV4RSxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQ3pELGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFFLENBQzVDLENBQUM7Z0JBRUYsU0FBUzthQUNWO1lBRUQsK0VBQStFO1lBQy9FLCtCQUErQjtZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRTtnQkFDMUIsYUFBTSxDQUFDLFNBQVMsQ0FDZCxzQ0FBc0MsRUFDdEMsQ0FBQyxFQUNELHVCQUFnQixDQUFDLEtBQUssQ0FDdkIsQ0FBQztnQkFFRixVQUFHLENBQUMsS0FBSyxDQUNQLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxFQUN6Qiw0QkFBNEIsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUMzQyxDQUFDO2dCQUVGLFNBQVM7YUFDVjtZQUVELGFBQU0sQ0FBQyxTQUFTLENBQ2QsdUNBQXVDLEVBQ3ZDLENBQUMsRUFDRCx1QkFBZ0IsQ0FBQyxLQUFLLENBQ3ZCLENBQUM7WUFFRixNQUFNLGdCQUFnQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFFLENBQUM7WUFFbEQsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3hDLGdCQUF5QyxDQUFDO1lBRTVDLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsRUFDekQsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUUsQ0FDNUMsQ0FBQztZQUVGLGFBQU0sQ0FBQyxTQUFTLENBQ2QsZ0RBQWdELGdCQUFnQixFQUFFLEVBQ2xFLENBQUMsRUFDRCx1QkFBZ0IsQ0FBQyxLQUFLLENBQ3ZCLENBQUM7U0FDSDtRQUVELE9BQU87WUFDTCxvQkFBb0IsRUFBRSxDQUFDLEtBQVksRUFBRSxFQUFFLENBQ3JDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzdDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUEvSUQsd0RBK0lDIn0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ChainId } from '@uniswap/sdk-core';
|
|
2
|
+
import { V2SubgraphPool } from './v2/subgraph-provider';
|
|
3
|
+
import { V3SubgraphPool } from './v3/subgraph-provider';
|
|
4
|
+
/**
|
|
5
|
+
* Gets subgraph pools from a URI. The URI shoudl contain a JSON
|
|
6
|
+
* stringified array of V2SubgraphPool objects or V3SubgraphPool
|
|
7
|
+
* objects.
|
|
8
|
+
*
|
|
9
|
+
* @export
|
|
10
|
+
* @class URISubgraphProvider
|
|
11
|
+
* @template TSubgraphPool
|
|
12
|
+
*/
|
|
13
|
+
export declare class URISubgraphProvider<TSubgraphPool extends V2SubgraphPool | V3SubgraphPool> {
|
|
14
|
+
private chainId;
|
|
15
|
+
private uri;
|
|
16
|
+
private timeout;
|
|
17
|
+
private retries;
|
|
18
|
+
constructor(chainId: ChainId, uri: string, timeout?: number, retries?: number);
|
|
19
|
+
getPools(): Promise<TSubgraphPool[]>;
|
|
20
|
+
}
|