{"_id":"@1delta/smart-router","name":"@1delta/smart-router","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.2":{"name":"@1delta/smart-router","version":"0.0.2","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/sdk":"0.0.2","@1delta/tokens":"0.0.1","@1delta/swap-sdk-core":"0.0.2","@1delta/v3-sdk":"0.0.2"},"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/sdk":"0.0.2","@1delta/token-lists":"0.0.2","@1delta/tokens":"0.0.1","@1delta/tsconfig":"0.0.0","@1delta/v3-sdk":"0.0.2","@1delta/utils":"0.0.2"},"exports":{"./package.json":"./package.json","./evm":{"types":"./dist/evm/index.d.ts","import":"./dist/evm.mjs","require":"./dist/evm.js"},"./legacy-router":{"types":"./dist/legacy-router/index.d.ts","import":"./dist/legacy-router.mjs","require":"./dist/legacy-router.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest --run","clean":"rm -rf .turbo && rm -rf node_modules && rm -rf dist"},"_id":"@1delta/smart-router@0.0.2","_integrity":"sha512-xO+5JDU2mL0m5zdQeKUmA1BpVRrmWzjk4rN3EU9ZYlhlOMdlU5t+amu1PDoD4X+soj19mmJT8t+LKrgUw6KeLg==","_resolved":"/tmp/19b9d60637a625cc124e89d3a52928f6/1delta-smart-router-0.0.2.tgz","_from":"file:1delta-smart-router-0.0.2.tgz","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-xO+5JDU2mL0m5zdQeKUmA1BpVRrmWzjk4rN3EU9ZYlhlOMdlU5t+amu1PDoD4X+soj19mmJT8t+LKrgUw6KeLg==","shasum":"404164c2c9560cc64d12c1226d98bf6a6aec605c","tarball":"https://registry.npmjs.org/@1delta/smart-router/-/smart-router-0.0.2.tgz","fileCount":384,"unpackedSize":1427825,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDns00r03zgxN7fNY2VEXYnArNT+g+hUgFkKsd9nVov4wIgW3T6ti3Fuixvi3wS4FbE7wowKuCG2y7TfRpltcYJRF4="}]},"_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/smart-router_0.0.2_1692450468478_0.9028961895009187"},"_hasShrinkwrap":false}},"time":{"created":"2023-08-19T13:07:48.374Z","0.0.2":"2023-08-19T13:07:48.713Z","modified":"2023-08-19T13:07:49.022Z"},"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"}