{"_id":"@1delta/universal-router","_rev":"1-0157f50f6e7c47c072dd602669a46ee6","name":"@1delta/universal-router","dist-tags":{"latest":"0.0.4"},"versions":{"0.0.3":{"name":"@1delta/universal-router","version":"0.0.3","description":"A SDK for getting best routes from AMM","sideEffects":false,"dependencies":{"async-retry":"^1.3.1","debug":"^4.3.4","graphql":"^16.6.0","graphql-request":"^5.0.0","lodash":"^4.17.21","mnemonist":"^0.38.3","stats-lite":"^2.2.0","tiny-invariant":"^1.1.0","viem":"^1.2.9","zod":"^3.21.4","@1delta/tokens":"0.0.1","@1delta/pool-sdk":"0.0.4","@1delta/base-sdk":"0.0.5"},"devDependencies":{"@types/async-retry":"^1.4.4","@types/debug":"^4.1.7","@types/lodash":"^4.14.178","@types/stats-lite":"^2.2.0","tsup":"^6.7.0","typescript":"^5.1.3","@1delta/token-lists":"0.0.2","@1delta/tokens":"0.0.1","@1delta/tsconfig":"0.0.0"},"exports":{"./package.json":"./package.json","./evm":{"types":"./dist/evm/index.d.ts","import":"./dist/evm.mjs","require":"./dist/evm.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest --run","clean":"rm -rf .turbo && rm -rf node_modules && rm -rf dist"},"_id":"@1delta/universal-router@0.0.3","_integrity":"sha512-0kHp+qPtukolG95mKgcSPrAkl9gsh9q2RCmPyGpQnWkZdNX1hwWxDMspCQveiIMn8f+fO6yB7Iep+fGi01ZyOw==","_resolved":"/tmp/3338b71ebb3916f13190224a77aa0351/1delta-universal-router-0.0.3.tgz","_from":"file:1delta-universal-router-0.0.3.tgz","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-0kHp+qPtukolG95mKgcSPrAkl9gsh9q2RCmPyGpQnWkZdNX1hwWxDMspCQveiIMn8f+fO6yB7Iep+fGi01ZyOw==","shasum":"f0fe122ed58270620b46d848e8a8c626323e823f","tarball":"https://registry.npmjs.org/@1delta/universal-router/-/universal-router-0.0.3.tgz","fileCount":300,"unpackedSize":1462046,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD614RgDxeO/jeOsNqRoT19ELhaOhQ6REWwuaEZbz39bQIhAP4Do47k2e/4gIvadpOt1d6LrES8UDD+gh0sovryVvlk"}]},"_npmUser":{"name":"delta-achthar","email":"achim@1delta.io"},"directories":{},"maintainers":[{"name":"delta-achthar","email":"achim@1delta.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/universal-router_0.0.3_1696421667757_0.10558655142175355"},"_hasShrinkwrap":false},"0.0.4":{"name":"@1delta/universal-router","version":"0.0.4","description":"A SDK for getting best routes from AMM","sideEffects":false,"dependencies":{"@ethersproject/abi":"^5.5.0","@uniswap/default-token-list":"^11.2.0","@uniswap/token-lists":"^1.0.0-beta.31","async-retry":"^1.3.1","await-timeout":"^1.1.1","axios":"^0.21.1","bunyan":"^1.8.15","bunyan-blackhole":"^1.1.1","debug":"^4.3.4","ethers":"^5.7.2","graphql":"^16.6.0","graphql-request":"^5.0.0","lodash":"^4.17.21","mnemonist":"^0.38.3","node-cache":"^5.1.2","stats-lite":"^2.2.0","tiny-invariant":"^1.1.0","viem":"^1.2.9","zod":"^3.21.4","@1delta/base-sdk":"0.0.5","@1delta/pool-sdk":"0.0.4","@1delta/tokens":"0.0.1"},"devDependencies":{"@ethersproject/bignumber":"^5.7.0","@ethersproject/experimental":"^5.4.0","@ethersproject/providers":"^5.4.0","@ethersproject/strings":"^5.7.0","@ethersproject/units":"5.7.0","@nomiclabs/hardhat-ethers":"^2.0.6","@types/async-retry":"^1.4.4","@types/await-timeout":"^0.3.1","@types/bunyan":"^1.8.6","@types/bunyan-blackhole":"^0.2.2","@types/debug":"^4.1.7","@types/jest":"^27.0.0","@types/jest-sinon":"^1.0.2","@types/lodash":"^4.14.178","@types/stats-lite":"^2.2.0","dotenv":"^10.0.0","jest":"^27.0.6","jest-environment-hardhat":"^1.1.8","jest-expect-message":"^1.0.2","jest-mock":"^27.0.6","jest-sinon":"^1.0.4","ts-jest":"^27.0.4","tsup":"^6.7.0","typescript":"^5.2.2","@1delta/token-lists":"0.0.2","@1delta/tokens":"0.0.1","@1delta/tsconfig":"0.0.0"},"exports":{"./package.json":"./package.json","./evm":{"types":"./dist/evm/index.d.ts","import":"./dist/evm.mjs","require":"./dist/evm.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest --run","clean":"rm -rf .turbo && rm -rf node_modules && rm -rf dist","integ-test":"TS_NODE=true jest evm/v4-router/test/integ"},"_id":"@1delta/universal-router@0.0.4","_integrity":"sha512-XvUumH7X7A17PTypUXELf2r7h6ANNmk412SCnFK5r3vUNXSZ0nLohSObAMtFtHr6Q0KVjRGOoOyBliSYdkFCog==","_resolved":"/tmp/74f8d13d07a8b9d6f61fa569de297110/1delta-universal-router-0.0.4.tgz","_from":"file:1delta-universal-router-0.0.4.tgz","_nodeVersion":"18.13.0","_npmVersion":"9.2.0","dist":{"integrity":"sha512-XvUumH7X7A17PTypUXELf2r7h6ANNmk412SCnFK5r3vUNXSZ0nLohSObAMtFtHr6Q0KVjRGOoOyBliSYdkFCog==","shasum":"47750e487b88b849f304c62c21b42ce5a149a95f","tarball":"https://registry.npmjs.org/@1delta/universal-router/-/universal-router-0.0.4.tgz","fileCount":938,"unpackedSize":5730875,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG2Ktw+gAYjGbadt63y0NB9RGwc4empi5gkEgoWLDcSBAiEA5KmLZK2Bl9Wv0avQs3Q4TNvAexO/yYdbhsi7RDcbiLM="}]},"_npmUser":{"name":"delta-achthar","email":"achim@1delta.io"},"directories":{},"maintainers":[{"name":"delta-achthar","email":"achim@1delta.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/universal-router_0.0.4_1697471912522_0.5410253181523168"},"_hasShrinkwrap":false}},"time":{"created":"2023-10-04T12:14:27.680Z","0.0.3":"2023-10-04T12:14:28.143Z","modified":"2023-10-16T15:58:33.143Z","0.0.4":"2023-10-16T15:58:32.934Z"},"maintainers":[{"name":"delta-achthar","email":"achim@1delta.io"}],"description":"A SDK for getting best routes from AMM","readme":"# Pancakeswap Smart Router\n\n`@1delta/smart-router` is a SDK for getting best trade routes from Pancakeswap AMM.\n\n## Install\n\n```bash\n$ pnpm add @1delta/smart-router\n```\n\n## Usage\n\nUse BSC as an example. Here's how we use smart router sdk to find the best trade route swapping from BNB to CAKE and construct a valid swap transaction from the trade route we got.\n\nFor working code example, please refer to [smart-router-example](https://github.com/pancakeswap/smart-router-example).\n\n0. Install other dependencies\n\n```bash\n$ pnpm add viem graphql-request @1delta/sdk @1delta/tokens\n```\n\n1. Prepare on-chain rpc provider and subgraph providers\n\n```typescript\nimport { createPublicClient, http } from 'viem'\nimport { GraphQLClient } from 'graphql-request'\nimport { SmartRouter } from '@1delta/smart-router/evm'\n\nconst publicClient = createPublicClient({\n  chain: mainnet,\n  transport: http('https://bsc-dataseed1.binance.org'),\n  batch: {\n    multicall: {\n      batchSize: 1024 * 200,\n    },\n  },\n})\n\nconst v3SubgraphClient = new GraphQLClient('https://api.thegraph.com/subgraphs/name/pancakeswap/exchange-v3-bsc')\nconst v2SubgraphClient = new GraphQLClient('https://proxy-worker-api.pancakeswap.com/bsc-exchange')\n\nconst quoteProvider = SmartRouter.createQuoteProvider({ onChainProvider: () => publicClient })\n```\n\n2. Get candidate pools\n\n```typescript\nimport { Native } from '@1delta/sdk'\nimport { SmartRouter } from '@1delta/smart-router/evm'\nimport { bscTokens } from '@1delta/tokens'\n\nconst swapFrom = Native.onChain(chainId)\nconst swapTo = bscTokens.cake\n\nconst [v2Pools, v3Pools] = await Promise.all([\n  SmartRouter.getV2CandidatePools({\n    onChainProvider: () => publicClient,\n    v2SubgraphProvider: () => v2SubgraphClient,\n    v3SubgraphProvider: () => v3SubgraphClient,\n    currencyA: swapFrom,\n    currencyB: swapTo,\n  }),\n  SmartRouter.getV3CandidatePools({\n    onChainProvider: () => publicClient,\n    subgraphProvider: () => v3SubgraphClient,\n    currencyA: swapFrom,\n    currencyB: swapTo,\n  }),\n])\n```\n\n3. Find the best swap trade route\n\n```typescript\nimport { CurrencyAmount, TradeType } from '@1delta/sdk'\n\n// 0.01 BNB in our example\nconst amount = CurrencyAmount.fromRawAmount(swapFrom, 10 ** 16)\n\nconst trade = await SmartRouter.getBestTrade(amount, swapTo, TradeType.EXACT_INPUT, {\n  gasPriceWei: () => publicClient.getGasPrice(),\n  maxHops: 2,\n  maxSplits: 2,\n  poolProvider: SmartRouter.createStaticPoolProvider(pools),\n  quoteProvider,\n  quoterOptimization: true,\n})\n```\n\n4. Build the swap transaction from trade\n\n```typescript\nimport { ChainId } from '@1delta/sdk'\nimport { SmartRouter, SmartRouterTrade, SMART_ROUTER_ADDRESSES, SwapRouter } from '@1delta/smart-router/evm'\nimport { hexToBigInt } from 'viem'\n\nconst routerAddress = SMART_ROUTER_ADDRESSES[ChainId.BSC]\n// Swap recipient address\nconst address = '0x'\n\nconst { value, calldata } = SwapRouter.swapCallParameters(trade, {\n  recipient: address,\n  slippageTolerance: new Percent(1),\n})\n\nconst tx = {\n  account: address,\n  to: routerAddress,\n  data: calldata,\n  value: hexToBigInt(value),\n}\nconst gasEstimate = await publicClient.estimateGas(tx)\n```\n","readmeFilename":"README.md"}