{"_id":"@emag3m/smart-order-router","name":"@emag3m/smart-order-router","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@emag3m/smart-order-router","version":"1.0.0","description":"Uniswap Smart Order Router","main":"build/main/index.js","typings":"build/main/index.d.ts","module":"build/module/index.js","repository":{"type":"git","url":"git+https://github.com/Uniswap/smart-order-router.git"},"license":"GPL","keywords":[],"scripts":{"compile-v3-types":"npx typechain --target ethers-v5 --out-dir src/types/v3 './node_modules/@uniswap/?(v3-core|v3-periphery)/artifacts/contracts/**/*.json'","compile-v2-types":"npx typechain --target ethers-v5 --out-dir src/types/v2 './node_modules/@uniswap/?(v2-core|v2-periphery)/build/*UniswapV2*.json'","compile-router":"npx typechain --target ethers-v5 --out-dir src/types/other './node_modules/@uniswap/swap-router-contracts/artifacts/contracts/**/*.json'","compile-external-types":"npx typechain --target ethers-v5 --out-dir src/types/other 'src/abis/**/*.json'","build":"run-p compile-v3-types compile-v2-types compile-router compile-external-types && run-p build:*","build:main":"tsc -p tsconfig.json","build:module":"tsc -p tsconfig.module.json","fix":"run-s fix:*","fix:prettier":"prettier \"src/**/*.ts\" --write","fix:lint":"eslint src --ext .ts --fix","version":"standard-version","prepare-release":"run-s cov:check doc:html version doc:publish","test":"jest test/unit","integ-test":"TS_NODE=true jest test/integ"},"engines":{"node":">=10"},"dependencies":{"@nomiclabs/hardhat-ethers":"^2.0.6","@types/async-retry":"^1.4.2","@types/await-timeout":"^0.3.1","@types/bunyan":"^1.8.6","@types/bunyan-blackhole":"^0.2.2","@types/lodash":"^4.14.168","@types/stats-lite":"^2.2.0","@uniswap/default-token-list":"^2.0.0","@emag3m/router-sdk":"^1.0.2","@uniswap/swap-router-contracts":"^1.2.0","@uniswap/token-lists":"^1.0.0-beta.25","@uniswap/v2-sdk":"^3.0.1","@uniswap/v3-sdk":"^3.7.0","async-retry":"^1.3.1","await-timeout":"^1.1.1","axios":"^0.21.1","bunyan":"^1.8.15","bunyan-blackhole":"^1.1.1","bunyan-debug-stream":"^2.0.0","ethers":"^5.6.1","graphql":"^15.5.0","graphql-request":"^3.4.0","hardhat":"^2.9.6","lodash":"^4.17.21","mnemonist":"^0.38.3","node-cache":"^5.1.2","stats-lite":"^2.2.0"},"devDependencies":{"@ethersproject/providers":"^5.4.0","@istanbuljs/nyc-config-typescript":"^1.0.1","@oclif/command":"^1.8.0","@oclif/errors":"^1.3.5","@typechain/ethers-v5":"^7.0.1","@types/jest":"^27.0.0","@types/jest-sinon":"^1.0.2","@types/node":"^15.0.2","@types/sinon":"^10.0.2","@typescript-eslint/eslint-plugin":"^4.0.1","@typescript-eslint/parser":"^4.0.1","@uniswap/v2-core":"^1.0.1","@uniswap/v2-periphery":"^1.1.0-beta.0","@uniswap/v3-core":"^1.0.0","@uniswap/v3-periphery":"^1.1.1","dotenv":"^10.0.0","eslint":"^7.8.0","eslint-config-prettier":"^6.11.0","eslint-plugin-eslint-comments":"^3.2.0","eslint-plugin-import":"^2.22.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","npm-run-all":"^4.1.5","open-cli":"^6.0.1","prettier":"^2.1.1","prettier-plugin-organize-imports":"^2.1.0","sinon":"^11.1.2","standard-version":"^9.0.0","ts-jest":"^27.0.4","ts-node":"^10.8.1","typechain":"^5.0.0","typescript":"^4.2.2"},"prettier":{"singleQuote":true},"oclif":{"commands":"./cli/commands"},"gitHead":"a0e1e9e260a521ab7508c522d39de57ac00d9833","bugs":{"url":"https://github.com/Uniswap/smart-order-router/issues"},"homepage":"https://github.com/Uniswap/smart-order-router#readme","_id":"@emag3m/smart-order-router@1.0.0","_nodeVersion":"16.14.2","_npmVersion":"8.5.0","dist":{"integrity":"sha512-zbaaUDi698mGYAernA5kosbIVfSx08MBRqXJYoOcxg9+hdPedHVdBFAdrK6cAhISatT9oSvC1cW1BFBi8D6/ew==","shasum":"d9d741bb112e4d18610c45b88f38de299b01acf0","tarball":"https://registry.npmjs.org/@emag3m/smart-order-router/-/smart-order-router-1.0.0.tgz","fileCount":302,"unpackedSize":2262432,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDuQvlHucA2vIQSGIgx0wwJ2JsoZiM9xeXQnRwx1tRApwIgfxdqxnaz4ecof8aQa0Ri5AESSzpujER8LyconZNPYdY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi6FjZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqt7RAAg17l6eHJCZFIfL//+uTCtcmgmIXDMsghDE60a8ypBWVqCsIL\r\npvZ5vKfocSE4Qkysvzpg2rwRkF2NBRNGNkB1lBKwdp/NVtju7tl4y7dF+Fbv\r\n9UPQQ8wSX3HybdgPKDDknpdd/GhXZHqYtpcri0+HqELW6oR/Zj390W7JVa5y\r\nun+HX2d0Xx/Lm/5WDrBVZwy1pKoUS2sD4pCl7+AfdD/bzl/5bxxVnkQohVeT\r\n71XOWTMUgdf5q3jbubJcOihmcWVytML1K65QI/gByCHl9AOuitPJFm7X3fuK\r\nOlpEUKcY+KW19cHthDDlQKI3gJA5YfreU7Bn7L8lguRwAsvvCZWjEWVS/ieF\r\nh36yaVLnrl+tzKEdoPTFlM/sTYeXQbTmagoU248S+eG0K8ldzwAUrk5sJS5f\r\nIrMHqbx+7p32w66ofHm1igZ7TbbOfwl6oQA+qqJfugod14iGKPE1o+ducDIF\r\nIgwhW9B3BZmjimebH+f9DlHp5bKUc5AbcwtBjqZumqkVIYtuxwPfh0ivLtdc\r\nftn6+UrdabLp9lAy7OC1X/kdLmG3GfHkS7VTCr90JSW84XtGrvKX0nIZ06TI\r\nStvBSgHV5O9ILIZVXmMaJ4LBF/lGFO+ZN6Y3mFXV+DgRYC9wxz/6L0YK0kCu\r\nGbYSDLaB5JNKP5rglO/mssHimWAfYmeFOm4=\r\n=Z4Ou\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"emag3m","email":"ecwilliams66@gmail.com"},"directories":{},"maintainers":[{"name":"emag3m","email":"ecwilliams66@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/smart-order-router_1.0.0_1659394265677_0.45784110713618564"},"_hasShrinkwrap":false}},"time":{"created":"2022-08-01T22:51:05.613Z","1.0.0":"2022-08-01T22:51:05.922Z","modified":"2022-08-01T22:51:06.055Z"},"maintainers":[{"name":"emag3m","email":"ecwilliams66@gmail.com"}],"description":"Uniswap Smart Order Router","homepage":"https://github.com/Uniswap/smart-order-router#readme","keywords":[],"repository":{"type":"git","url":"git+https://github.com/Uniswap/smart-order-router.git"},"bugs":{"url":"https://github.com/Uniswap/smart-order-router/issues"},"license":"GPL","readme":"# Uniswap Smart Order Router\n\nThis repository contains routing logic for the Uniswap V3 protocol.\n\nIt searches for the most efficient way to swap token A for token B, considering splitting swaps across multiple routes and gas costs.\n\n## Testing\n\n### Unit Tests\n\nFirst make sure you have run `npm install` and `npm run build`.\n\n```\nnpm run test\n```\n\n### Integration Tests\n\nMake sure the `.env` file is configured to connect to mainnet and other chains. See the [CLI](#cli) section below for more details.\n\n```\nnpm run integ-test\n```\n\n### CLI\n\nThe package can be run as a CLI for testing purposes.\n\nFirst create a `.env` file in the root of the project and configure:\n\n```\nJSON_RPC_PROVIDER = '<JSON_RPC_PROVIDER>'\n```\n\nTo run on chains other than mainnet set up a connection by specifying the environment variable\n\n```\nJSON_RPC_PROVIDER_{CHAIN} = '<JSON_RPC_PROVIDER>'\n```\n\nFor example, specifying a provider for Optimism :\n\n```\nJSON_RPC_PROVIDER_OPTIMISM = '<JSON_RPC_PROVIDER>'\n```\n\nThen from the root directory you can execute the CLI.\n\n## Examples\n\nSome examples to use for manual CLI testing.\n\n### Mainnet\n\n```\n./bin/cli quote --tokenIn 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 --tokenOut 0x1f9840a85d5af5bf1d1762f925bdaddc4201f984 --amount 1000 --exactIn --recipient 0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B --protocols v2,v3\n\nBest Route:\n100.00% = USDC -- 0.3% --> UNI\n\tRaw Quote Out:\n\t\t35.72\n\tGas Adjusted Quote Out:\n\t\t34.03\n\nGas Used Quote Token: 1.691772\nGas Used USD: 47.592951\nCalldata: 0x414bf389000000000000...\nValue: 0x00\n\n  blockNumber: \"13088815\"\n  estimatedGasUsed: \"113000\"\n  gasPriceWei: \"130000000000\"\n\n\n./bin/cli quote-to-ratio --token0 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 --token1 0xdac17f958d2ee523a2206206994597c13d831ec7 --feeAmount 3000 --recipient 0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B  --token0Balance 1000 --token1Balance 2000 --tickLower -120 --tickUpper 120\n\nBest Route:\n100.00% = USDT -- 0.05% --> USDC\nRaw Quote Exact In:\n\t392.68\nGas Adjusted Quote In}:\n\t346.13\n\nGas Used Quote Token: 46.550010\nGas Used USD: 46.342899\nCalldata: 0x414bf389000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000ab5801a7d398351b8be11c439e05c5b3259aec9b000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000176a736c000000000000000000000000000000000000000000000000000000001764f8650000000000000000000000000000000000000000000000000000000000000000\n\tValue: 0x00\n\n\tblockNumber: \"13239188\"\n\testimatedGasUsed: \"113000\"\n\tgasPriceWei: \"116690684398\"\n```\n\n## Rinkeby\n\n```\n./bin/cli quote --tokenIn 0x5592ec0cfb4dbc12d3ab100b257153436a1f0fea --tokenOut 0x4DBCdF9B62e891a7cec5A2568C3F4FAF9E8Abe2b --amount 200000 --exactIn --minSplits 1 --router alpha --chainId 4\n```\n\n## Kovan\n\n```\n./bin/cli quote --tokenIn 0x4f96fe3b7a6cf9725f59d353f723c1bdb64ca6aa --tokenOut 0xd0a1e359811322d97991e03f863a0c30c2cf029c --amount 10 --exactIn --minSplits 1 --router alpha --chainId 42\n```\n\n## Ropsten\n\n```\n./bin/cli quote --tokenIn 0x07865c6e87b9f70255377e024ace6630c1eaa37f --tokenOut 0xc778417e063141139fce010982780140aa0cd5ab --amount 200000 --exactIn --minSplits 1 --router alpha --chainId 3\n```\n\n## Optimism\n\n```\n./bin/cli quote --tokenIn 0x7F5c764cBc14f9669B88837ca1490cCa17c31607 --tokenOut 0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1 --amount 200000 --exactIn --minSplits 1 --router alpha --chainId 10\n\n```\n\n## Optimistic-Kovan\n\n```\n./bin/cli quote --tokenIn 0x7F5c764cBc14f9669B88837ca1490cCa17c31607 --tokenOut 0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1 --amount 200 --exactIn --minSplits 1 --router alpha --chainId 69\n```\n\n## Arbitrum\n\n```\n./bin/cli quote --tokenIn 0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9 --tokenOut 0x82af49447d8a07e3bd95bd0d56f35241523fbab1 --amount 20000 --exactIn --minSplits 1 --router alpha --chainId 42161 --debug\n```\n\n## Arbitrum-Rinkeby\n\n```\n./bin/cli quote --tokenIn 0x09b98f8b2395d076514037ff7d39a091a536206c --tokenOut 0xb47e6a5f8b33b3f17603c83a0535a9dcd7e32681 --amount 200 --exactIn --minSplits 1 --router alpha --chainId 421611\n```\n\n## Polygon Mumbai\n\n```\n./bin/cli quote --tokenIn 0x001b3b4d0f3714ca98ba10f6042daebf0b1b7b6f --tokenOut 0x9c3c9283d3e44854697cd22d3faa240cfb032889 --amount 1 --exactIn --protocols v3 --recipient 0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B --minSplits 1 --router alpha --chainId 80001\n```\n\n## Polygon Mainnet\n\n```\n./bin/cli quote --tokenIn 0x2791bca1f2de4661ed88a30c99a7a9449aa84174 --tokenOut 0x7ceb23fd6bc0add59e62ac25578270cff1b9f619 --amount 5 --exactIn --minSplits 1 --protocols v3 --router alpha --chainId 137\n```\n\n## Celo Mainnet\n\n```\n./bin/cli quote --tokenIn CELO --tokenOut 0x765DE816845861e75A25fCA122bb6898B8B1282a --amount 5 --exactIn --minSplits 1 --protocols v3 --router alpha --chainId 42220\n```\n\n## Adding a new Chain\n\nThe main components to complete are:\n\n- Deploy contracts on chain, add the pools to subgraph\n- Populate v3 providers in `src/providers/v3/subgraph-provider` and `src/providers/v3/static-subgraph-provider`\n- Populate chainId and addresses in `src/util/chains.ts` and `src/util/addresses.ts`\n- Populate token providers in `src/providers/caching-token-provider` and `src/providers/token-provider.ts`\n- Populate gas constants in `src/routers/alpha-router/gas-models/*`\n- Populate bases in `src/routers/legacy-router/bases.ts`\n- Populate `test/integ/routers/alpha-router/alpha-router.integration.test.ts` and `src/providers/v2/static-subgraph-provider.ts`\n- Populate `src/routers/alpha-router/*`\n- Add a log to `/CHANGELOG.md`\n- Run `npm run integ-test` successfully\n\n# Troubleshooting\n\n## ProviderGasLimit errors\n\nThe package sends many large multicall requests to nodes. You must ensure that your node provider's `eth_call` gas limit is high enough to succesfully process the RPC calls.\n\nBy default each `eth_call` will consume up to:\n\n- 132,000,000 gas on Optimism\n- 120,000,000 gas on Arbitrum\n- 50,000,000 gas on Celo\n- 150,000,000 gas on every other network (Mainnet, Goerli, etc.)\n\nIf you are using a node provider with a lower gas limit per `eth_call` you will need to override the default `V3QuoteProvider` with an instance that lowers the `multicallChunk` and `gasLimitPerCall` parameters. Lowering these values will cause each multicall to consume less gas. See [here](https://github.com/Uniswap/smart-order-router/blob/main/src/routers/alpha-router/alpha-router.ts#L379) for examples of how to set these values.\n\nIf you are running your own node, we recommend you configure start your node with a higher gas limit per call. For example, on Geth you can use the command line argument `--rpc.gascap 150000000` to raise the limit to 150m, which is enough to run the default configuration of this package.\n\nIf you are using Hardhat mainnet forking, you should add `blockGasLimit: 150_000_000` to your Hardhat config to use the default package configuration.\n","readmeFilename":"README.md"}