{"_id":"@donaswap/smart-router","_rev":"4-70680b10b5fc478675a481bca2c82617","name":"@donaswap/smart-router","dist-tags":{"latest":"1.0.4-beta"},"versions":{"1.0.0-beta":{"name":"@donaswap/smart-router","description":"🎚 Peripheral smart contracts for interacting with Donaswap","version":"1.0.0-beta","license":"GPL-2.0-or-later","publishConfig":{"access":"public"},"scripts":{"compile":"npx hardhat compile","deploy:testnet":"npx hardhat run --network testnet scripts/deploy.ts","deploy:mainnet":"npx hardhat run --network mainnet scripts/deploy.ts","test":"echo 'skip'","test:coverage":"npx hardhat coverage","test:size-contracts":"npx hardhat size-contracts"},"devDependencies":{"@commitlint/cli":"^12.1.4","@commitlint/config-conventional":"^12.1.4","@nomiclabs/hardhat-ethers":"^2.0.2","@nomiclabs/hardhat-truffle5":"^2.0.0","@nomiclabs/hardhat-waffle":"^2.0.3","@nomiclabs/hardhat-web3":"^2.0.0","@nomiclabs/hardhat-etherscan":"^3.1.5","@openzeppelin/contracts":"3.4.2-solc-0.7","@openzeppelin/test-helpers":"^0.5.11","@donaswap/eslint-config-donaswap":"^1.0.0","@donaswap/donaswap-lib":"0.0.1-beta","@types/chai":"^4.2.21","@types/mocha":"^8.2.2","@types/node":"^14.14.35","chai":"^4.2.0","dotenv":"^8.2.0","eslint":"^7.22.0","ethers":"^5.0.23","hardhat":"^2.4.1","hardhat-abi-exporter":"2.0.6","hardhat-contract-sizer":"^2.0.2","hardhat-typechain":"^0.3.5","hardhat-watcher":"^2.1.1","prettier":"^2.3.2","prettier-plugin-solidity":"^1.0.0-beta.17","solidity-coverage":"^0.7.13","ts-node":"^9.1.1","typescript":"^4.2.3","web3":"^1.3.6","hardhat-tracer":"^2.1.0","@uniswap/v2-core":"1.0.1","@donaswap/v3-core":"*","@donaswap/v3-periphery":"*"},"dependencies":{},"gitHead":"e9f434bedfb2aa52ced94b26eb1cb56c1d182178","_id":"@donaswap/smart-router@1.0.0-beta","_nodeVersion":"18.16.0","_npmVersion":"9.7.1","dist":{"integrity":"sha512-M+mFZ4ogc/kTtaj5/7+P3JnZV5KCzWkf67PF5iM0Mq6RvGV+1CXshhuSzkq/05vODPuikR35U0qgipvIlGdisA==","shasum":"56e11135753f635659ca1ae19c1ba62d4d0dbd7d","tarball":"https://registry.npmjs.org/@donaswap/smart-router/-/smart-router-1.0.0-beta.tgz","fileCount":29,"unpackedSize":67671,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEWXqn49p/7X7EurpSRXg05lTQRHQS41yFSdrtgmlWo+AiEAy3WU5n39ko6kvvWKalKHH1IruFxb9NtSSLkNiQc5SjU="}]},"_npmUser":{"name":"donaswap","email":"info@donaswap.com"},"directories":{},"maintainers":[{"name":"donaswap","email":"info@donaswap.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/smart-router_1.0.0-beta_1690753015599_0.9248418246521233"},"_hasShrinkwrap":false},"1.0.1-beta":{"name":"@donaswap/smart-router","version":"1.0.1-beta","description":"📶 A SDK for getting best routes from AMM","repository":{"type":"git","url":"git+https://gitlab.com/donaswap/interface.git","directory":"packages/smart-router"},"sideEffects":false,"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest --run","prepublishOnly":"pnpm run build","clean":"rm -rf .turbo && rm -rf node_modules && rm -rf dist"},"dependencies":{"@donaswap/sdk":"workspace:*","@donaswap/swap-sdk-core":"workspace:*","@donaswap/tokens":"workspace:*","@donaswap/v3-sdk":"workspace:*","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.1.7","zod":"^3.21.4"},"devDependencies":{"@donaswap/sdk":"workspace:*","@donaswap/token-lists":"workspace:*","@donaswap/tokens":"workspace:*","@donaswap/tsconfig":"workspace:*","@donaswap/utils":"workspace:*","@donaswap/v3-sdk":"workspace:*","@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"},"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"}},"gitHead":"042dff8ccffa2ea5463ec15b58e57b89537ff7c8","bugs":{"url":"https://gitlab.com/donaswap/interface/issues"},"homepage":"https://gitlab.com/donaswap/interface#readme","_id":"@donaswap/smart-router@1.0.1-beta","_nodeVersion":"18.16.0","_npmVersion":"9.7.1","dist":{"integrity":"sha512-5ixm522tIYPlw27G7GsMOcirZeUiHVnn6T0eCsdZzsLMYcCvJIYUil/mqnu4SOiBWrbb1ZjmhRV0ofrB3HpGfQ==","shasum":"af8c0204243fe466c0a3da19feb9b7e27b41e67c","tarball":"https://registry.npmjs.org/@donaswap/smart-router/-/smart-router-1.0.1-beta.tgz","fileCount":263,"unpackedSize":662239,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzH9QjSj8wPJoiqlb5Fat2V5wTlOS9+e1GlpROt52nVAIhAPbuFzytCA3jzWVpN6sExyxtMmRwQV9jynbNM316SuDV"}]},"_npmUser":{"name":"donaswap","email":"info@donaswap.com"},"directories":{},"maintainers":[{"name":"donaswap","email":"info@donaswap.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/smart-router_1.0.1-beta_1690930615043_0.39172387001482556"},"_hasShrinkwrap":false},"1.0.2-beta":{"name":"@donaswap/smart-router","version":"1.0.2-beta","description":"📶 A SDK for getting best routes from AMM","repository":{"type":"git","url":"git+https://gitlab.com/donaswap/interface.git","directory":"packages/smart-router"},"sideEffects":false,"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest --run","prepublishOnly":"pnpm run build","clean":"rm -rf .turbo && rm -rf node_modules && rm -rf dist"},"dependencies":{"@donaswap/sdk":"workspace:*","@donaswap/swap-sdk-core":"workspace:*","@donaswap/tokens":"workspace:*","@donaswap/v3-sdk":"workspace:*","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.1.7","zod":"^3.21.4"},"devDependencies":{"@donaswap/sdk":"workspace:*","@donaswap/token-lists":"workspace:*","@donaswap/tokens":"workspace:*","@donaswap/tsconfig":"workspace:*","@donaswap/utils":"workspace:*","@donaswap/v3-sdk":"workspace:*","@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"},"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"}},"gitHead":"aeb06f84a449693328d85865e236bb02cde80a88","bugs":{"url":"https://gitlab.com/donaswap/interface/issues"},"homepage":"https://gitlab.com/donaswap/interface#readme","_id":"@donaswap/smart-router@1.0.2-beta","_nodeVersion":"18.16.0","_npmVersion":"9.7.1","dist":{"integrity":"sha512-tTj6NhHZGvFRFKgCLJlF4Fs5MpRtYTqrQLF71p+6heO2O8dMOOT7k8WY/5aZI38+oSID51XtUC29cb0Z2Ky/sw==","shasum":"02a7c5d973258394b90c9029c70c81454023cd7e","tarball":"https://registry.npmjs.org/@donaswap/smart-router/-/smart-router-1.0.2-beta.tgz","fileCount":263,"unpackedSize":662257,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmM6CATZaJZ1EiN7Vdzhh/C6QDxDgQ4CExrU2rJVGb3AIgD76BIk3jkQ0LybzTm6AkcinZXfTRjZ+nYRn5rpCB/YU="}]},"_npmUser":{"name":"donaswap","email":"info@donaswap.com"},"directories":{},"maintainers":[{"name":"donaswap","email":"info@donaswap.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/smart-router_1.0.2-beta_1691170850994_0.32859804859678454"},"_hasShrinkwrap":false},"1.0.3-beta":{"name":"@donaswap/smart-router","description":"🎚 Peripheral smart contracts for interacting with Donaswap","version":"1.0.3-beta","license":"GPL-2.0-or-later","publishConfig":{"access":"public"},"scripts":{"compile":"npx hardhat compile","deploy:testnet":"npx hardhat run --network testnet scripts/deploy.ts","deploy:mainnet":"npx hardhat run --network mainnet scripts/deploy.ts","test":"echo 'skip'","test:coverage":"npx hardhat coverage","test:size-contracts":"npx hardhat size-contracts"},"devDependencies":{"@commitlint/cli":"^12.1.4","@commitlint/config-conventional":"^12.1.4","@nomiclabs/hardhat-ethers":"^2.0.2","@nomiclabs/hardhat-truffle5":"^2.0.0","@nomiclabs/hardhat-waffle":"^2.0.3","@nomiclabs/hardhat-web3":"^2.0.0","@nomiclabs/hardhat-etherscan":"^3.1.5","@openzeppelin/contracts":"3.4.2-solc-0.7","@openzeppelin/test-helpers":"^0.5.11","@donaswap/eslint-config-donaswap":"^1.0.1","@donaswap/donaswap-lib":"0.0.1-beta","@types/chai":"^4.2.21","@types/mocha":"^8.2.2","@types/node":"^14.14.35","chai":"^4.2.0","dotenv":"^8.2.0","eslint":"^7.22.0","ethers":"^5.0.23","hardhat":"^2.4.1","hardhat-abi-exporter":"2.0.6","hardhat-contract-sizer":"^2.0.2","hardhat-typechain":"^0.3.5","hardhat-watcher":"^2.1.1","prettier":"^2.3.2","prettier-plugin-solidity":"^1.0.0-beta.17","solidity-coverage":"^0.7.13","ts-node":"^9.1.1","typescript":"^4.2.3","web3":"^1.3.6","hardhat-tracer":"^2.1.0","@uniswap/v2-core":"1.0.1","@donaswap/v3-core":"*","@donaswap/v3-periphery":"*"},"dependencies":{},"gitHead":"364a1024bf78d0f8914d149cfdaf3e683da75795","_id":"@donaswap/smart-router@1.0.3-beta","_nodeVersion":"18.16.0","_npmVersion":"9.7.1","dist":{"integrity":"sha512-ArSP0MSM+I22bYTIUoRZ6PA+4J8JeKlOJFMh2roVkByGCPpYuGguCsI+kv1oG/fswk7aZGwu575jcwKrMEtNCg==","shasum":"c371b6dfcaadb540e8915ca0170d4609bd8a7b21","tarball":"https://registry.npmjs.org/@donaswap/smart-router/-/smart-router-1.0.3-beta.tgz","fileCount":29,"unpackedSize":67671,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBwflvIcC+adPhJEodprJX7Hkqu9knmPfNQ402Iye06gAiAr2pBDtT+dVk7v3RR2aeFqj7TcATDOkmhnRJD0mRnxKw=="}]},"_npmUser":{"name":"donaswap","email":"info@donaswap.com"},"directories":{},"maintainers":[{"name":"donaswap","email":"info@donaswap.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/smart-router_1.0.3-beta_1691237439319_0.8899839637174827"},"_hasShrinkwrap":false},"1.0.4-beta":{"name":"@donaswap/smart-router","version":"1.0.4-beta","description":"📶 A SDK for getting best routes from AMM","repository":{"type":"git","url":"git+https://gitlab.com/donaswap/interface.git","directory":"packages/smart-router"},"sideEffects":false,"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest --run","prepublishOnly":"pnpm run build","clean":"rm -rf .turbo && rm -rf node_modules && rm -rf dist"},"dependencies":{"@donaswap/sdk":"workspace:*","@donaswap/swap-sdk-core":"workspace:*","@donaswap/tokens":"workspace:*","@donaswap/v3-sdk":"workspace:*","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.1.7","zod":"^3.21.4"},"devDependencies":{"@donaswap/sdk":"workspace:*","@donaswap/token-lists":"workspace:*","@donaswap/tokens":"workspace:*","@donaswap/tsconfig":"workspace:*","@donaswap/utils":"workspace:*","@donaswap/v3-sdk":"workspace:*","@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"},"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"}},"gitHead":"db5c03d84e6c33c528c1461e4190ce861ec13719","bugs":{"url":"https://gitlab.com/donaswap/interface/issues"},"homepage":"https://gitlab.com/donaswap/interface#readme","_id":"@donaswap/smart-router@1.0.4-beta","_nodeVersion":"18.16.0","_npmVersion":"9.7.1","dist":{"integrity":"sha512-oX9aOw1rs7y4+rjWQ11D9w8nEQf94OfQFyg+C5kT9BNKEEQzLEVD4U5lc7eg94oiWleHz9S+GpyLF5ZVW22/dA==","shasum":"f98538350afc7e6703ba3e1056f8382d8c434847","tarball":"https://registry.npmjs.org/@donaswap/smart-router/-/smart-router-1.0.4-beta.tgz","fileCount":263,"unpackedSize":662257,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTFKg5rH2NTs4kNjIHHJJpU2dQnmjJ1dQzErTCfsZrdQIhAMYEm2r0YzTHMjK0AhN8NKbXbKQTtRtaFa8RX8H09r9M"}]},"_npmUser":{"name":"donaswap","email":"info@donaswap.com"},"directories":{},"maintainers":[{"name":"donaswap","email":"info@donaswap.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/smart-router_1.0.4-beta_1691237678341_0.09155942081246349"},"_hasShrinkwrap":false}},"time":{"created":"2023-07-30T21:36:55.509Z","1.0.0-beta":"2023-07-30T21:36:55.766Z","modified":"2023-08-05T12:14:38.592Z","1.0.1-beta":"2023-08-01T22:56:55.234Z","1.0.2-beta":"2023-08-04T17:40:51.223Z","1.0.3-beta":"2023-08-05T12:10:39.497Z","1.0.4-beta":"2023-08-05T12:14:38.489Z"},"maintainers":[{"name":"donaswap","email":"info@donaswap.com"}],"description":"📶 A SDK for getting best routes from AMM","readme":"# Donaswap Smart Router\r\n\r\n`@donaswap/smart-router` is a SDK for getting best trade routes from Donaswap AMM.\r\n\r\n## Install\r\n\r\n```bash\r\n$ pnpm add @donaswap/smart-router\r\n```\r\n\r\n## Usage\r\n\r\nUse Firechain as an example. Here's how we use smart router sdk to find the best trade route swapping from FIRE to DONA and construct a valid swap transaction from the trade route we got.\r\n\r\nFor working code example, please refer to [smart-router-example](https://github.com/donaswap/smart-router-example).\r\n\r\n0. Install other dependencies\r\n\r\n```bash\r\n$ pnpm add viem graphql-request @donaswap/sdk @donaswap/tokens\r\n```\r\n\r\n1. Prepare on-chain rpc provider and subgraph providers\r\n\r\n```typescript\r\nimport { createPublicClient, http } from 'viem'\r\nimport { GraphQLClient } from 'graphql-request'\r\nimport { SmartRouter } from '@donaswap/smart-router/evm'\r\n\r\nconst publicClient = createPublicClient({\r\n  chain: mainnet,\r\n  transport: http('https://bsc-dataseed1.binance.org'),\r\n  batch: {\r\n    multicall: {\r\n      batchSize: 1024 * 200,\r\n    },\r\n  },\r\n})\r\n\r\nconst v3SubgraphClient = new GraphQLClient('https://api.thegraph.com/subgraphs/name/donaswap/exchange-v3-bsc')\r\nconst v2SubgraphClient = new GraphQLClient('https://proxy-worker-api.donaswap.com/bsc-exchange')\r\n\r\nconst quoteProvider = SmartRouter.createQuoteProvider({ onChainProvider: () => publicClient })\r\n```\r\n\r\n2. Get candidate pools\r\n\r\n```typescript\r\nimport { Native } from '@donaswap/sdk'\r\nimport { SmartRouter } from '@donaswap/smart-router/evm'\r\nimport { firechainTokens } from '@donaswap/tokens'\r\n\r\nconst swapFrom = Native.onChain(chainId)\r\nconst swapTo = firechainTokens.dona\r\n\r\nconst [v2Pools, v3Pools] = await Promise.all([\r\n  SmartRouter.getV2CandidatePools({\r\n    onChainProvider: () => publicClient,\r\n    v2SubgraphProvider: () => v2SubgraphClient,\r\n    v3SubgraphProvider: () => v3SubgraphClient,\r\n    currencyA: swapFrom,\r\n    currencyB: swapTo,\r\n  }),\r\n  SmartRouter.getV3CandidatePools({\r\n    onChainProvider: () => publicClient,\r\n    subgraphProvider: () => v3SubgraphClient,\r\n    currencyA: swapFrom,\r\n    currencyB: swapTo,\r\n  }),\r\n])\r\n```\r\n\r\n3. Find the best swap trade route\r\n\r\n```typescript\r\nimport { CurrencyAmount, TradeType } from '@donaswap/sdk'\r\n\r\n// 0.01 BNB in our example\r\nconst amount = CurrencyAmount.fromRawAmount(swapFrom, 10 ** 16)\r\n\r\nconst trade = await SmartRouter.getBestTrade(amount, swapTo, TradeType.EXACT_INPUT, {\r\n  gasPriceWei: () => publicClient.getGasPrice(),\r\n  maxHops: 2,\r\n  maxSplits: 2,\r\n  poolProvider: SmartRouter.createStaticPoolProvider(pools),\r\n  quoteProvider,\r\n  quoterOptimization: true,\r\n})\r\n```\r\n\r\n4. Build the swap transaction from trade\r\n\r\n```typescript\r\nimport { ChainId } from '@donaswap/sdk'\r\nimport { SmartRouter, SmartRouterTrade, SMART_ROUTER_ADDRESSES, SwapRouter } from '@donaswap/smart-router/evm'\r\nimport { hexToBigInt } from 'viem'\r\n\r\nconst routerAddress = SMART_ROUTER_ADDRESSES[ChainId.BSC]\r\n// Swap recipient address\r\nconst address = '0x'\r\n\r\nconst { value, calldata } = SwapRouter.swapCallParameters(trade, {\r\n  recipient: address,\r\n  slippageTolerance: new Percent(1),\r\n})\r\n\r\nconst tx = {\r\n  account: address,\r\n  to: routerAddress,\r\n  data: calldata,\r\n  value: hexToBigInt(value),\r\n}\r\nconst gasEstimate = await publicClient.estimateGas(tx)\r\n```","readmeFilename":"README.md","homepage":"https://gitlab.com/donaswap/interface#readme","repository":{"type":"git","url":"git+https://gitlab.com/donaswap/interface.git","directory":"packages/smart-router"},"bugs":{"url":"https://gitlab.com/donaswap/interface/issues"}}