diff --git a/bin/app.ts b/bin/app.ts index d4066ebbef..b0bb7d2db2 100644 --- a/bin/app.ts +++ b/bin/app.ts @@ -234,6 +234,8 @@ export class RoutingAPIPipeline extends Stack { 'ALCHEMY_324', // WorldChain, 'QUICKNODE_480', + // Unichain + 'QUICKNODE_130', // Unichain Sepolia, 'QUICKNODE_1301', // unirpc - serves all chains @@ -410,6 +412,8 @@ const jsonRpcProviders = { ALCHEMY_324: process.env.ALCHEMY_324!, // WorldChain, QUICKNODE_480: process.env.QUICKNODE_480!, + // Unichain + QUICKNODE_130: process.env.QUICKNODE_130!, // Unichain Sepolia, QUICKNODE_1301: process.env.QUICKNODE_1301!, // unirpc - serves all chains diff --git a/bin/stacks/routing-lambda-stack.ts b/bin/stacks/routing-lambda-stack.ts index 2213898e93..7463ead9b4 100644 --- a/bin/stacks/routing-lambda-stack.ts +++ b/bin/stacks/routing-lambda-stack.ts @@ -122,7 +122,7 @@ export class RoutingLambdaStack extends cdk.NestedStack { description: 'Caching Routing Lambda', environment: { - VERSION: '1', + VERSION: '2', NODE_OPTIONS: '--enable-source-maps', POOL_CACHE_BUCKET: poolCacheBucket.bucketName, POOL_CACHE_BUCKET_3: poolCacheBucket3.bucketName, @@ -186,7 +186,7 @@ export class RoutingLambdaStack extends cdk.NestedStack { description: 'Routing Lambda', environment: { - VERSION: '28', + VERSION: '29', NODE_OPTIONS: '--enable-source-maps', POOL_CACHE_BUCKET: poolCacheBucket.bucketName, POOL_CACHE_BUCKET_3: poolCacheBucket3.bucketName, diff --git a/lib/config/rpcProviderProdConfig.json b/lib/config/rpcProviderProdConfig.json index d765c6cbcb..f72026bab5 100644 --- a/lib/config/rpcProviderProdConfig.json +++ b/lib/config/rpcProviderProdConfig.json @@ -122,8 +122,17 @@ "useMultiProviderProb": 1, "latencyEvaluationSampleProb": 0, "healthCheckSampleProb": 0, - "providerInitialWeights": [1], - "providerUrls": ["QUICKNODE_1301"], - "providerNames": ["QUICKNODE"] + "providerInitialWeights": [0, 1], + "providerUrls": ["QUICKNODE_1301", "UNIRPC_0"], + "providerNames": ["QUICKNODE", "UNIRPC"] + }, + { + "chainId": 130, + "useMultiProviderProb": 1, + "latencyEvaluationSampleProb": 0, + "healthCheckSampleProb": 0, + "providerInitialWeights": [0, 1], + "providerUrls": ["QUICKNODE_130", "UNIRPC_0"], + "providerNames": ["QUICKNODE", "UNIRPC"] } ] diff --git a/lib/cron/cache-config.ts b/lib/cron/cache-config.ts index 16cc3340ac..9087baaf08 100644 --- a/lib/cron/cache-config.ts +++ b/lib/cron/cache-config.ts @@ -39,6 +39,8 @@ export const v3SubgraphUrlOverride = (chainId: ChainId) => { return `https://subgraph.satsuma-prod.com/${process.env.ALCHEMY_QUERY_KEY}/uniswap/uniswap-v3-worldchain/api` case ChainId.UNICHAIN_SEPOLIA: return `https://subgraph.satsuma-prod.com/${process.env.ALCHEMY_QUERY_KEY}/uniswap/uniswap-v3-astrochain-sepolia/api` + case ChainId.UNICHAIN: + return `https://subgraph.satsuma-prod.com/${process.env.ALCHEMY_QUERY_KEY}/uniswap/uniswap-v3-unichain/api` default: return undefined } @@ -66,6 +68,8 @@ export const v2SubgraphUrlOverride = (chainId: ChainId) => { return `https://subgraph.satsuma-prod.com/${process.env.ALCHEMY_QUERY_KEY}/uniswap/uniswap-v2-worldchain/api` case ChainId.UNICHAIN_SEPOLIA: return `https://subgraph.satsuma-prod.com/${process.env.ALCHEMY_QUERY_KEY}/uniswap/uniswap-v2-astrochain-sepolia/api` + case ChainId.UNICHAIN: + return `https://subgraph.satsuma-prod.com/${process.env.ALCHEMY_QUERY_KEY}/uniswap/uniswap-v2-unichain/api` default: return undefined } diff --git a/lib/dashboards/rpc-providers-widgets-factory.ts b/lib/dashboards/rpc-providers-widgets-factory.ts index 5c6975b4a2..ee3d232e5d 100644 --- a/lib/dashboards/rpc-providers-widgets-factory.ts +++ b/lib/dashboards/rpc-providers-widgets-factory.ts @@ -21,6 +21,7 @@ const ID_TO_PROVIDER = (id: ChainId): string => { case ChainId.BNB: case ChainId.BASE: case ChainId.UNICHAIN_SEPOLIA: + case ChainId.UNICHAIN: return ProviderName.QUIKNODE case ChainId.CELO_ALFAJORES: return ProviderName.FORNO diff --git a/lib/graphql/graphql-provider.ts b/lib/graphql/graphql-provider.ts index 9a016073cd..a59fb55192 100644 --- a/lib/graphql/graphql-provider.ts +++ b/lib/graphql/graphql-provider.ts @@ -61,6 +61,8 @@ export class UniGraphQLProvider implements IUniGraphQLProvider { return 'WORLDCHAIN' case ChainId.UNICHAIN_SEPOLIA: return 'UNICHAIN_SEPOLIA' + case ChainId.UNICHAIN: + return 'UNICHAIN' default: throw new Error(`UniGraphQLProvider._chainIdToGraphQLChainName unsupported ChainId: ${chainId}`) } diff --git a/lib/handlers/injector-sor.ts b/lib/handlers/injector-sor.ts index 81c884de49..722f48bbb1 100644 --- a/lib/handlers/injector-sor.ts +++ b/lib/handlers/injector-sor.ts @@ -109,6 +109,7 @@ export const SUPPORTED_CHAINS: ChainId[] = [ ChainId.ZKSYNC, ChainId.WORLDCHAIN, ChainId.UNICHAIN_SEPOLIA, + ChainId.UNICHAIN, ] const DEFAULT_TOKEN_LIST = 'https://gateway.ipfs.io/ipns/tokens.uniswap.org' @@ -367,6 +368,7 @@ export abstract class InjectorSOR extends Injector< case ChainId.ZKSYNC: case ChainId.WORLDCHAIN: case ChainId.UNICHAIN_SEPOLIA: + case ChainId.UNICHAIN: const currentQuoteProvider = new OnChainQuoteProvider( chainId, provider, @@ -507,6 +509,7 @@ export abstract class InjectorSOR extends Injector< ChainId.AVALANCHE, ChainId.BLAST, ChainId.WORLDCHAIN, + //ChainId.UNICHAIN, // Supported? ] const v4Supported = [ChainId.SEPOLIA] diff --git a/lib/handlers/quote/util/quote-provider-traffic-switch-configuration.ts b/lib/handlers/quote/util/quote-provider-traffic-switch-configuration.ts index 7f640d4caf..48393c2a5f 100644 --- a/lib/handlers/quote/util/quote-provider-traffic-switch-configuration.ts +++ b/lib/handlers/quote/util/quote-provider-traffic-switch-configuration.ts @@ -230,6 +230,7 @@ export const QUOTE_PROVIDER_TRAFFIC_SWITCH_CONFIGURATION = ( // worldchain and unichain sepolia don't have the view-only quoter yet, so we can shadow sample 0.1% of traffic case ChainId.WORLDCHAIN: case ChainId.UNICHAIN_SEPOLIA: + case ChainId.UNICHAIN: switch (protocol) { case Protocol.MIXED: case Protocol.V4: diff --git a/lib/handlers/shared.ts b/lib/handlers/shared.ts index cb3ee4dd8d..a1a2eb0f15 100644 --- a/lib/handlers/shared.ts +++ b/lib/handlers/shared.ts @@ -83,6 +83,7 @@ export const DEFAULT_ROUTING_CONFIG_BY_CHAIN = (chainId: ChainId): AlphaRouterCo case ChainId.OPTIMISM: case ChainId.WORLDCHAIN: case ChainId.UNICHAIN_SEPOLIA: + case ChainId.UNICHAIN: return { v2PoolSelection: { topN: 3, diff --git a/lib/rpc/utils.ts b/lib/rpc/utils.ts index 833ef11d2e..a99d566fc3 100644 --- a/lib/rpc/utils.ts +++ b/lib/rpc/utils.ts @@ -22,6 +22,8 @@ export function chainIdToNetworkName(networkId: ChainId): string { return 'worldchain' case ChainId.UNICHAIN_SEPOLIA: return 'unichain-sepolia' + case ChainId.UNICHAIN: + return 'unichain' default: return 'ethereum' } @@ -102,6 +104,9 @@ export function generateProviderUrl(key: string, value: string, chainId: number) // URL contains unichain-sepolia.quiknode.pro, we had to not disclose prior to the unichain annouce return `${tokens[0]}` } + case 'QUICKNODE_130': { + return `https://${tokens[0]}.unichain-mainnet.quiknode.pro/${tokens[1]}` + } case 'QUICKNODE_480': { return `https://${tokens[0]}.worldchain-mainnet.quiknode.pro/${tokens[1]}` } diff --git a/lib/util/onChainQuoteProviderConfigs.ts b/lib/util/onChainQuoteProviderConfigs.ts index 3eef628482..4b1f0fef6f 100644 --- a/lib/util/onChainQuoteProviderConfigs.ts +++ b/lib/util/onChainQuoteProviderConfigs.ts @@ -52,6 +52,11 @@ export const RETRY_OPTIONS: { [chainId: number]: AsyncRetry.Options | undefined minTimeout: 100, maxTimeout: 1000, }, + [ChainId.UNICHAIN]: { + retries: 2, + minTimeout: 100, + maxTimeout: 1000, + }, } export const OPTIMISTIC_CACHED_ROUTES_BATCH_PARAMS: { [protocol in Protocol]: { [chainId: number]: BatchParams } } = { @@ -115,12 +120,18 @@ export const OPTIMISTIC_CACHED_ROUTES_BATCH_PARAMS: { [protocol in Protocol]: { gasLimitPerCall: 1_200_000, quoteMinSuccessRate: 0.1, }, - // TODO: once astrochain-sepolia has view-quoter, optimize muilcallChunk and gasLimitPerCall + // TODO: once unichain-sepolia has view-quoter, optimize muilcallChunk and gasLimitPerCall [ChainId.UNICHAIN_SEPOLIA]: { multicallChunk: 80, gasLimitPerCall: 1_200_000, quoteMinSuccessRate: 0.1, }, + // TODO: once unichain has view-quoter, optimize muilcallChunk and gasLimitPerCall + [ChainId.UNICHAIN]: { + multicallChunk: 80, + gasLimitPerCall: 1_200_000, + quoteMinSuccessRate: 0.1, + }, }, [Protocol.V3]: { ...constructSameBatchParamsMap(DEFAULT_BATCH_PARAMS), @@ -180,12 +191,18 @@ export const OPTIMISTIC_CACHED_ROUTES_BATCH_PARAMS: { [protocol in Protocol]: { gasLimitPerCall: 1_200_000, quoteMinSuccessRate: 0.1, }, - // TODO: once astrochain-sepolia has view-quoter, optimize muilcallChunk and gasLimitPerCall + // TODO: once unichain-sepolia has view-quoter, optimize muilcallChunk and gasLimitPerCall [ChainId.UNICHAIN_SEPOLIA]: { multicallChunk: 80, gasLimitPerCall: 1_200_000, quoteMinSuccessRate: 0.1, }, + // TODO: once unichain has view-quoter, optimize muilcallChunk and gasLimitPerCall + [ChainId.UNICHAIN]: { + multicallChunk: 80, + gasLimitPerCall: 1_200_000, + quoteMinSuccessRate: 0.1, + }, }, // V4 can be the same as V4 to begin. likely v4 is more gas efficient because of pool singleton for swaps by accounting mechanism [Protocol.V4]: { @@ -246,12 +263,18 @@ export const OPTIMISTIC_CACHED_ROUTES_BATCH_PARAMS: { [protocol in Protocol]: { gasLimitPerCall: 1_200_000, quoteMinSuccessRate: 0.1, }, - // TODO: once astrochain-sepolia has view-quoter, optimize muilcallChunk and gasLimitPerCall + // TODO: once unichain-sepolia has view-quoter, optimize muilcallChunk and gasLimitPerCall [ChainId.UNICHAIN_SEPOLIA]: { multicallChunk: 80, gasLimitPerCall: 1_200_000, quoteMinSuccessRate: 0.1, }, + // TODO: once unichain has view-quoter, optimize muilcallChunk and gasLimitPerCall + [ChainId.UNICHAIN]: { + multicallChunk: 80, + gasLimitPerCall: 1_200_000, + quoteMinSuccessRate: 0.1, + }, }, [Protocol.MIXED]: { ...constructSameBatchParamsMap(DEFAULT_BATCH_PARAMS), @@ -312,6 +335,12 @@ export const OPTIMISTIC_CACHED_ROUTES_BATCH_PARAMS: { [protocol in Protocol]: { gasLimitPerCall: 1_200_000, quoteMinSuccessRate: 0.1, }, + // TODO: once unichain has view-quoter, optimize muilcallChunk and gasLimitPerCall + [ChainId.UNICHAIN]: { + multicallChunk: 80, + gasLimitPerCall: 1_200_000, + quoteMinSuccessRate: 0.1, + }, }, } @@ -383,6 +412,12 @@ export const NON_OPTIMISTIC_CACHED_ROUTES_BATCH_PARAMS: { [protocol in Protocol] gasLimitPerCall: 1_200_000, quoteMinSuccessRate: 0.1, }, + // TODO: once unichain has view-quoter, optimize muilcallChunk and gasLimitPerCall + [ChainId.UNICHAIN]: { + multicallChunk: 80, + gasLimitPerCall: 1_200_000, + quoteMinSuccessRate: 0.1, + }, }, [Protocol.V3]: { ...constructSameBatchParamsMap(DEFAULT_BATCH_PARAMS), @@ -448,6 +483,12 @@ export const NON_OPTIMISTIC_CACHED_ROUTES_BATCH_PARAMS: { [protocol in Protocol] gasLimitPerCall: 1_200_000, quoteMinSuccessRate: 0.1, }, + // TODO: once unichain has view-quoter, optimize muilcallChunk and gasLimitPerCall + [ChainId.UNICHAIN]: { + multicallChunk: 80, + gasLimitPerCall: 1_200_000, + quoteMinSuccessRate: 0.1, + }, }, // V4 can be the same as V4 to begin. likely v4 is more gas efficient because of pool singleton for swaps by accounting mechanism [Protocol.V4]: { @@ -514,6 +555,12 @@ export const NON_OPTIMISTIC_CACHED_ROUTES_BATCH_PARAMS: { [protocol in Protocol] gasLimitPerCall: 1_200_000, quoteMinSuccessRate: 0.1, }, + // TODO: once unichain has view-quoter, optimize muilcallChunk and gasLimitPerCall + [ChainId.UNICHAIN]: { + multicallChunk: 80, + gasLimitPerCall: 1_200_000, + quoteMinSuccessRate: 0.1, + }, }, [Protocol.MIXED]: { ...constructSameBatchParamsMap(DEFAULT_BATCH_PARAMS), @@ -574,6 +621,12 @@ export const NON_OPTIMISTIC_CACHED_ROUTES_BATCH_PARAMS: { [protocol in Protocol] gasLimitPerCall: 1_200_000, quoteMinSuccessRate: 0.1, }, + // TODO: once unichain has view-quoter, optimize muilcallChunk and gasLimitPerCall + [ChainId.UNICHAIN]: { + multicallChunk: 80, + gasLimitPerCall: 1_200_000, + quoteMinSuccessRate: 0.1, + }, }, } @@ -611,6 +664,10 @@ export const GAS_ERROR_FAILURE_OVERRIDES: { [chainId: number]: FailureOverrides gasLimitOverride: 3_000_000, multicallChunk: 45, }, + [ChainId.UNICHAIN]: { + gasLimitOverride: 3_000_000, + multicallChunk: 45, + }, } export const SUCCESS_RATE_FAILURE_OVERRIDES: { [chainId: number]: FailureOverrides } = { @@ -647,6 +704,10 @@ export const SUCCESS_RATE_FAILURE_OVERRIDES: { [chainId: number]: FailureOverrid gasLimitOverride: 3_000_000, multicallChunk: 45, }, + [ChainId.UNICHAIN]: { + gasLimitOverride: 3_000_000, + multicallChunk: 45, + }, } export const BLOCK_NUMBER_CONFIGS: { [chainId: number]: BlockNumberConfig } = { @@ -699,6 +760,14 @@ export const BLOCK_NUMBER_CONFIGS: { [chainId: number]: BlockNumberConfig } = { rollbackBlockOffset: -20, }, }, + [ChainId.UNICHAIN]: { + baseBlockOffset: -25, + rollback: { + enabled: true, + attemptsBeforeRollback: 1, + rollbackBlockOffset: -20, + }, + }, } // block -1 means it's never deployed diff --git a/package-lock.json b/package-lock.json index cfacb39e30..5db56e5987 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,14 +27,14 @@ "@types/stats-lite": "^2.2.0", "@uniswap/default-token-list": "^11.13.0", "@uniswap/permit2-sdk": "^1.3.0", - "@uniswap/router-sdk": "^1.14.0", + "@uniswap/router-sdk": "^1.15.0", "@uniswap/sdk-core": "^6.1.1", - "@uniswap/smart-order-router": "4.10.1", + "@uniswap/smart-order-router": "file:/tmp/uniswap-smart-order-router-4.10.0.tgz", "@uniswap/token-lists": "^1.0.0-beta.33", "@uniswap/universal-router-sdk": "^4.8.0", - "@uniswap/v2-sdk": "^4.6.1", + "@uniswap/v2-sdk": "^4.7.0", "@uniswap/v3-periphery": "^1.4.4", - "@uniswap/v3-sdk": "^3.17.1", + "@uniswap/v3-sdk": "^3.19.0", "@uniswap/v4-sdk": "^1.12.3", "async-retry": "^1.3.1", "aws-cdk-lib": "^2.137.0", @@ -3230,9 +3230,9 @@ } }, "node_modules/@openzeppelin/contracts": { - "version": "3.4.1-solc-0.7-2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.1-solc-0.7-2.tgz", - "integrity": "sha512-tAG9LWg8+M2CMu7hIsqHPaTyG4uDzjr6mhvH96LvOpLZZj6tgzTluBt+LsCf1/QaYrlis6pITvpIaIhE+iZB+Q==" + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.0.tgz", + "integrity": "sha512-52Qb+A1DdOss8QvJrijYYPSf32GUg2pGaG/yCxtaA3cu4jduouTdg4XZSMLW9op54m1jH7J8hoajhHKOPsoJFw==" }, "node_modules/@pinata/sdk": { "version": "1.1.26", @@ -4508,22 +4508,23 @@ } }, "node_modules/@uniswap/smart-order-router": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@uniswap/smart-order-router/-/smart-order-router-4.10.1.tgz", - "integrity": "sha512-reDRrdCufABJzgy4o9SXFg2Hfn2IehQAjbXAk/vF2ZzrDOQ9vJEzOfR4bqlm3Xao4nZbSMvz6QQzOxtrkQd4QA==", + "version": "4.10.0", + "resolved": "file:../../../../../tmp/uniswap-smart-order-router-4.10.0.tgz", + "integrity": "sha512-DfbQqpTrHRf0W0uJ7FTY6bkO6c8Yi0Ehky8SmvBf/BJXE+6fdrf/dsW+GmxKkLJvg/TOeDwqS7WaJb9zZnILcg==", + "license": "GPL", "dependencies": { "@eth-optimism/sdk": "^3.2.2", "@types/brotli": "^1.3.4", "@uniswap/default-token-list": "^11.13.0", "@uniswap/permit2-sdk": "^1.3.0", - "@uniswap/router-sdk": "^1.14.0", + "@uniswap/router-sdk": "^1.15.0", "@uniswap/sdk-core": "^6.1.1", "@uniswap/swap-router-contracts": "^1.3.1", "@uniswap/token-lists": "^1.0.0-beta.31", "@uniswap/universal-router": "^1.6.0", "@uniswap/universal-router-sdk": "^4.8.0", - "@uniswap/v2-sdk": "^4.6.1", - "@uniswap/v3-sdk": "^3.17.1", + "@uniswap/v2-sdk": "^4.7.0", + "@uniswap/v3-sdk": "^3.19.0", "@uniswap/v4-sdk": "^1.12.3", "async-retry": "^1.3.1", "await-timeout": "^1.1.1", @@ -4626,11 +4627,6 @@ "node": ">=14" } }, - "node_modules/@uniswap/universal-router-sdk/node_modules/@openzeppelin/contracts": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.0.tgz", - "integrity": "sha512-52Qb+A1DdOss8QvJrijYYPSf32GUg2pGaG/yCxtaA3cu4jduouTdg4XZSMLW9op54m1jH7J8hoajhHKOPsoJFw==" - }, "node_modules/@uniswap/universal-router-sdk/node_modules/@uniswap/universal-router": { "version": "2.0.0-beta.2", "resolved": "https://registry.npmjs.org/@uniswap/universal-router/-/universal-router-2.0.0-beta.2.tgz", @@ -4649,11 +4645,6 @@ "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.0.2.tgz", "integrity": "sha512-ytPc6eLGcHHnapAZ9S+5qsdomhjo6QBHTDRRBFfTxXIpsicMhVPouPgmUPebZZZGX7vt9USA+Z+0M0dSVtSUEA==" }, - "node_modules/@uniswap/universal-router/node_modules/@openzeppelin/contracts": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.0.tgz", - "integrity": "sha512-52Qb+A1DdOss8QvJrijYYPSf32GUg2pGaG/yCxtaA3cu4jduouTdg4XZSMLW9op54m1jH7J8hoajhHKOPsoJFw==" - }, "node_modules/@uniswap/v2-core": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@uniswap/v2-core/-/v2-core-1.0.1.tgz", @@ -4737,6 +4728,11 @@ "node": ">=10" } }, + "node_modules/@uniswap/v3-staker/node_modules/@openzeppelin/contracts": { + "version": "3.4.1-solc-0.7-2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.1-solc-0.7-2.tgz", + "integrity": "sha512-tAG9LWg8+M2CMu7hIsqHPaTyG4uDzjr6mhvH96LvOpLZZj6tgzTluBt+LsCf1/QaYrlis6pITvpIaIhE+iZB+Q==" + }, "node_modules/@uniswap/v4-sdk": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/@uniswap/v4-sdk/-/v4-sdk-1.12.3.tgz", @@ -26914,9 +26910,9 @@ } }, "@openzeppelin/contracts": { - "version": "3.4.1-solc-0.7-2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.1-solc-0.7-2.tgz", - "integrity": "sha512-tAG9LWg8+M2CMu7hIsqHPaTyG4uDzjr6mhvH96LvOpLZZj6tgzTluBt+LsCf1/QaYrlis6pITvpIaIhE+iZB+Q==" + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.0.tgz", + "integrity": "sha512-52Qb+A1DdOss8QvJrijYYPSf32GUg2pGaG/yCxtaA3cu4jduouTdg4XZSMLW9op54m1jH7J8hoajhHKOPsoJFw==" }, "@pinata/sdk": { "version": "1.1.26", @@ -27941,22 +27937,21 @@ } }, "@uniswap/smart-order-router": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@uniswap/smart-order-router/-/smart-order-router-4.10.1.tgz", - "integrity": "sha512-reDRrdCufABJzgy4o9SXFg2Hfn2IehQAjbXAk/vF2ZzrDOQ9vJEzOfR4bqlm3Xao4nZbSMvz6QQzOxtrkQd4QA==", + "version": "file:/tmp/uniswap-smart-order-router-4.10.0.tgz", + "integrity": "sha512-DfbQqpTrHRf0W0uJ7FTY6bkO6c8Yi0Ehky8SmvBf/BJXE+6fdrf/dsW+GmxKkLJvg/TOeDwqS7WaJb9zZnILcg==", "requires": { "@eth-optimism/sdk": "^3.2.2", "@types/brotli": "^1.3.4", "@uniswap/default-token-list": "^11.13.0", "@uniswap/permit2-sdk": "^1.3.0", - "@uniswap/router-sdk": "^1.14.0", + "@uniswap/router-sdk": "^1.15.0", "@uniswap/sdk-core": "^6.1.1", "@uniswap/swap-router-contracts": "^1.3.1", "@uniswap/token-lists": "^1.0.0-beta.31", "@uniswap/universal-router": "^1.6.0", "@uniswap/universal-router-sdk": "^4.8.0", - "@uniswap/v2-sdk": "^4.6.1", - "@uniswap/v3-sdk": "^3.17.1", + "@uniswap/v2-sdk": "^4.7.0", + "@uniswap/v3-sdk": "^3.19.0", "@uniswap/v4-sdk": "^1.12.3", "async-retry": "^1.3.1", "await-timeout": "^1.1.1", @@ -28018,13 +28013,6 @@ "@openzeppelin/contracts": "4.7.0", "@uniswap/v2-core": "1.0.1", "@uniswap/v3-core": "1.0.0" - }, - "dependencies": { - "@openzeppelin/contracts": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.0.tgz", - "integrity": "sha512-52Qb+A1DdOss8QvJrijYYPSf32GUg2pGaG/yCxtaA3cu4jduouTdg4XZSMLW9op54m1jH7J8hoajhHKOPsoJFw==" - } } }, "@uniswap/universal-router-sdk": { @@ -28046,11 +28034,6 @@ "ethers": "^5.7.0" }, "dependencies": { - "@openzeppelin/contracts": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.0.tgz", - "integrity": "sha512-52Qb+A1DdOss8QvJrijYYPSf32GUg2pGaG/yCxtaA3cu4jduouTdg4XZSMLW9op54m1jH7J8hoajhHKOPsoJFw==" - }, "@uniswap/universal-router": { "version": "2.0.0-beta.2", "resolved": "https://registry.npmjs.org/@uniswap/universal-router/-/universal-router-2.0.0-beta.2.tgz", @@ -28134,6 +28117,13 @@ "@openzeppelin/contracts": "3.4.1-solc-0.7-2", "@uniswap/v3-core": "1.0.0", "@uniswap/v3-periphery": "^1.0.1" + }, + "dependencies": { + "@openzeppelin/contracts": { + "version": "3.4.1-solc-0.7-2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.1-solc-0.7-2.tgz", + "integrity": "sha512-tAG9LWg8+M2CMu7hIsqHPaTyG4uDzjr6mhvH96LvOpLZZj6tgzTluBt+LsCf1/QaYrlis6pITvpIaIhE+iZB+Q==" + } } }, "@uniswap/v4-sdk": { diff --git a/package.json b/package.json index 0c2af98fcc..f995dc18f1 100644 --- a/package.json +++ b/package.json @@ -86,14 +86,14 @@ "@types/stats-lite": "^2.2.0", "@uniswap/default-token-list": "^11.13.0", "@uniswap/permit2-sdk": "^1.3.0", - "@uniswap/router-sdk": "^1.14.0", + "@uniswap/router-sdk": "^1.15.0", "@uniswap/sdk-core": "^6.1.1", - "@uniswap/smart-order-router": "4.10.1", + "@uniswap/smart-order-router": "file:/tmp/uniswap-smart-order-router-4.10.0.tgz", "@uniswap/token-lists": "^1.0.0-beta.33", "@uniswap/universal-router-sdk": "^4.8.0", - "@uniswap/v2-sdk": "^4.6.1", + "@uniswap/v2-sdk": "^4.7.0", "@uniswap/v3-periphery": "^1.4.4", - "@uniswap/v3-sdk": "^3.17.1", + "@uniswap/v3-sdk": "^3.19.0", "@uniswap/v4-sdk": "^1.12.3", "async-retry": "^1.3.1", "aws-cdk-lib": "^2.137.0", diff --git a/test/utils/tokens.ts b/test/utils/tokens.ts index b8a606da88..c25ec00688 100644 --- a/test/utils/tokens.ts +++ b/test/utils/tokens.ts @@ -36,6 +36,7 @@ import { USDT_MAINNET, USDT_OPTIMISM, WRAPPED_NATIVE_CURRENCY, + USDC_UNICHAIN, } from '@uniswap/smart-order-router' import { ethers } from 'ethers' import NodeCache from 'node-cache' @@ -144,6 +145,8 @@ export const USDC_ON = (chainId: ChainId): Token => { return USDC_WORLDCHAIN case ChainId.UNICHAIN_SEPOLIA: return USDC_UNICHAIN_SEPOLIA + case ChainId.UNICHAIN: + return USDC_UNICHAIN default: throw new Error(`Chain id: ${chainId} not supported`) }