{"_id":"@coffee-beans/sor","_rev":"2-073d47a1ba1e5e755324311f1191dc12","name":"@coffee-beans/sor","dist-tags":{"latest":"4.0.0"},"versions":{"4.0.0-beta.0":{"name":"@coffee-beans/sor","version":"4.0.0-beta.0","license":"GPL-3.0-only","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","scripts":{"test":"TS_NODE_PROJECT='tsconfig.testing.json' nyc mocha -r ts-node/register test/*.spec.ts","coverage":"nyc report --reporter=text-lcov | coveralls","lint":"eslint ./src ./test --ext .ts --max-warnings 0"},"publishConfig":{"registry":"https://registry.npmjs.org/","access":"public"},"devDependencies":{"@ethersproject/abi":"^5.4.1","@ethersproject/address":"^5.4.0","@ethersproject/bignumber":"^5.4.2","@ethersproject/constants":"^5.4.0","@ethersproject/contracts":"^5.4.1","@ethersproject/providers":"^5.4.4","@ethersproject/wallet":"^5.4.0","@georgeroman/balancer-v2-pools":"0.0.7","@rollup/plugin-commonjs":"^20.0.0","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^13.0.4","@rollup/plugin-typescript":"^8.2.5","@types/chai":"^4.2.10","@types/lodash.clonedeep":"^4.5.6","@types/mocha":"^7.0.2","@types/node":"^14.0.20","@typescript-eslint/eslint-plugin":"^4.29.2","@typescript-eslint/parser":"^4.29.2","bignumber.js":"^9.0.1","chai":"^4.2.0","coveralls":"^3.0.9","dotenv":"^8.2.0","eslint":"^7.32.0","eslint-plugin-mocha-no-only":"^1.1.1","eslint-plugin-prettier":"^3.4.1","husky":"^4.2.1","lodash.clonedeep":"^4.5.0","lodash.set":"^4.3.2","mocha":"8.2.1","nyc":"^15.0.0","perf_hooks":"^0.0.1","prettier":"^2.3.2","pretty-quick":"^2.0.1","rollup":"^2.56.3","rollup-plugin-dts":"^4.0.0","ts-node":"^10.0.0","typescript":"^4.3.5"},"dependencies":{"isomorphic-fetch":"^2.2.1"},"peerDependencies":{"@ethersproject/abi":"^5.4.1","@ethersproject/address":"^5.4.0","@ethersproject/bignumber":"^5.4.2","@ethersproject/constants":"^5.4.0","@ethersproject/contracts":"^5.4.1","@ethersproject/providers":"^5.4.4"},"description":"<p align=\"center\">   <a href=\"https://circleci.com/gh/balancer-labs/balancer-sor\">     <img src=\"https://circleci.com/gh/balancer-labs/balancer-sor.svg?style=svg&circle-token=33636208d3161f79ff283b29c8dba9841bda8931\" />   </a>   <a href=\"https://coveralls","_id":"@coffee-beans/sor@4.0.0-beta.0","_nodeVersion":"16.14.0","_npmVersion":"8.3.0","dist":{"integrity":"sha512-zv05iyIpYwXJ8jgX4Hv5V//dfYPS70l6YMD5UzJQXQIaDwOELjWM4URaKPkHAsD3DRuJBrCM5vHvHs/yBGtdbA==","shasum":"904c9812877c5feeac99b63ebd3b3a8a54189f38","tarball":"https://registry.npmjs.org/@coffee-beans/sor/-/sor-4.0.0-beta.0.tgz","fileCount":2,"unpackedSize":4980,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDkBeD5v8gF0fzPBVVBwrHtnYxPD9Scgk0xqAbN6qjUEAiAPtaJunBzjHq5hHpunc0oL4WaiXVYrb3gyv53I1xHN8w=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiRIOqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr7qg//YSTyPTbvABfUB4DXtM9VXFeoZafQ7ecpAPDRH9+aBcjI2o/r\r\nlzCvJJW7gLtXW4RzgJJxg2xFdcekoS6U3viES9ASbtaSngHML5/xZYI8EYH2\r\nAuKlsxXF93EXWl0/qwR5J7qfzT90+JOjgczmIwIBdII1rkJ7EQ7SA0c9YKjJ\r\n5gZmfH99idx26LJiWM3y7wo4PYdOQhAuDLCGF1qNyRja1wDlOXYyvFunmTXY\r\nrJrdQR4Wvfx5qcOfwMhFdouQWoXBnMsiCZcLkdoewgI9Ck5+XdYsCrxChIsL\r\nsxz6FM9kA7HntbZE1UcfbkLF/KwZowciHdOjP3pvxgsfX+Khdr7c3UtVhkH0\r\n5VQKEMLft3UidTo9XsUJURQQzNLo4c0Ix4dfcdr7v5h10RxwS0XES3eXHHsd\r\nMKvD56MEepT2f8nSYVPkblJuXm25P45mrEIpat/UNf7GWB2bmHXcd9ifvxvV\r\nJoOL+pskvVOXWxTAhFGQ5YVm7UtYwRvPt5B0XZdmm/+0eVBvO21KxTPpp6S6\r\n36wNolbqp7zSXvEaO1wshZe2PYie/pLx7Xg67JgAAKyd1KEGYe7/EMCG2R5V\r\nylos75XmQYQqugP0aZed98Y5dIm8eByusAOPaVPntQMhQ3HILq2dgTf2prL3\r\nEnmxN7SIR0JHLzDuwhg1QH4b5hB/6McpZqE=\r\n=D48t\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"coffee-arabica","email":"arabicaa.dev@gmail.com"},"directories":{},"maintainers":[{"name":"coffee-arabica","email":"arabicaa.dev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sor_4.0.0-beta.0_1648657321855_0.9588577640776352"},"_hasShrinkwrap":false},"4.0.0-beta.1":{"name":"@coffee-beans/sor","version":"4.0.0-beta.1","license":"GPL-3.0-only","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","scripts":{"build":"rollup -c","test":"TS_NODE_PROJECT='tsconfig.testing.json' nyc mocha -r ts-node/register test/*.spec.ts","coverage":"nyc report --reporter=text-lcov | coveralls","lint":"eslint ./src ./test --ext .ts --max-warnings 0"},"publishConfig":{"registry":"https://registry.npmjs.org/","access":"public"},"devDependencies":{"@ethersproject/abi":"^5.4.1","@ethersproject/address":"^5.4.0","@ethersproject/bignumber":"^5.4.2","@ethersproject/constants":"^5.4.0","@ethersproject/contracts":"^5.4.1","@ethersproject/providers":"^5.4.4","@ethersproject/wallet":"^5.4.0","@georgeroman/balancer-v2-pools":"0.0.7","@rollup/plugin-commonjs":"^20.0.0","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^13.0.4","@rollup/plugin-typescript":"^8.2.5","@types/chai":"^4.2.10","@types/lodash.clonedeep":"^4.5.6","@types/mocha":"^7.0.2","@types/node":"^14.0.20","@typescript-eslint/eslint-plugin":"^4.29.2","@typescript-eslint/parser":"^4.29.2","bignumber.js":"^9.0.1","chai":"^4.2.0","coveralls":"^3.0.9","dotenv":"^8.2.0","eslint":"^7.32.0","eslint-plugin-mocha-no-only":"^1.1.1","eslint-plugin-prettier":"^3.4.1","husky":"^4.2.1","lodash.clonedeep":"^4.5.0","lodash.set":"^4.3.2","mocha":"8.2.1","nyc":"^15.0.0","perf_hooks":"^0.0.1","prettier":"^2.3.2","pretty-quick":"^2.0.1","rollup":"^2.56.3","rollup-plugin-dts":"^4.0.0","ts-node":"^10.0.0","typescript":"^4.3.5"},"dependencies":{"isomorphic-fetch":"^2.2.1"},"peerDependencies":{"@ethersproject/abi":"^5.4.1","@ethersproject/address":"^5.4.0","@ethersproject/bignumber":"^5.4.2","@ethersproject/constants":"^5.4.0","@ethersproject/contracts":"^5.4.1","@ethersproject/providers":"^5.4.4"},"description":"<p align=\"center\">   <a href=\"https://circleci.com/gh/balancer-labs/balancer-sor\">     <img src=\"https://circleci.com/gh/balancer-labs/balancer-sor.svg?style=svg&circle-token=33636208d3161f79ff283b29c8dba9841bda8931\" />   </a>   <a href=\"https://coveralls","_id":"@coffee-beans/sor@4.0.0-beta.1","_nodeVersion":"16.14.0","_npmVersion":"8.3.0","dist":{"integrity":"sha512-3M5upncNMTVe8tL20fspnRHRlvj7+Hm6SNCFAnwowFaZCY3BfCsHGCNiFClKjNJrJUDdewIwinMeJQuvSMH2tQ==","shasum":"db8c60c60ca66347d9f4e8dfb7890c50613e275e","tarball":"https://registry.npmjs.org/@coffee-beans/sor/-/sor-4.0.0-beta.1.tgz","fileCount":2,"unpackedSize":5010,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIClhYeDMaxJ1L+BejVy7bGcISkUTbo5k/0LC+5g2vfOuAiBJxib4NhFDLrWC5598jNpFK7Dtfaz0+/VyE9V2gvZ29A=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiRIQaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr0wg//Rvs2aw0LkQnYYG2G5AiAUkjAJhkaX7u6dz57qw3KI9ILOnFZ\r\n8d+eg36e7WCeoR3WuhER+Lv4XISmd2kdLGF5vcFjmWEOuLM/9xQkCHivxBDx\r\nHsBcf9rzYwWtCSbgXOUgjbSXTxV+Y6+U6dUsJk4gARIrJTTmZKabMEuUwc62\r\n03Ko4cW2MevfkzF3mVLASZLwug9cqnTYz6iXw41nk/xQvZgbdYolhnFSGeBH\r\nbVjrf7P6CrOjO3y3SfmWscWRv58hO/QWy153CX5kKNJBWQr6XXHYzoueeY/j\r\nu1Ijah7L1VlolkSF6O0HKC0brFv3DXH4rfCsQ4YMpAB0+TY9TsKeZgNaIUKA\r\n1zdq4GwZvbOc/1gAg4ZpEoZAFegMbf26V+HpOctg7vAFntU9by6vT25VU7AK\r\nvlwph5SjyRjCq88zPHpPeZMEl71wwTY57tmd34vrsiFDpmBpSTeawjfqNTaP\r\n2pbatqHypkQ1wUWS1UFJ3df3/rI+bp/h70e1EztyJT7Bm+91Loy/hO19prCN\r\nRYZMqNJorri60w8HW48J8htvYa5hO0DaABBP/geqlqqlM7HJCugcH3EBseRO\r\neNCTSMipIuMtK3kmLPh3pl3N50a049uVpRoy9EPG8kaL9AuyqxSljOnW5TnX\r\n0XFcEag7GtFHQNE3r7i2KlkYuJwx6D9EMU0=\r\n=/gul\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"coffee-arabica","email":"arabicaa.dev@gmail.com"},"directories":{},"maintainers":[{"name":"coffee-arabica","email":"arabicaa.dev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sor_4.0.0-beta.1_1648657434619_0.5016700957544644"},"_hasShrinkwrap":false},"4.0.0":{"name":"@coffee-beans/sor","version":"4.0.0","license":"GPL-3.0-only","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","scripts":{"build":"","prepack":"","test":"TS_NODE_PROJECT='tsconfig.testing.json' nyc mocha -r ts-node/register test/*.spec.ts","coverage":"nyc report --reporter=text-lcov | coveralls","lint":"eslint ./src ./test --ext .ts --max-warnings 0"},"publishConfig":{"registry":"https://registry.npmjs.org/","access":"public"},"devDependencies":{"@ethersproject/abi":"^5.4.1","@ethersproject/address":"^5.4.0","@ethersproject/bignumber":"^5.4.2","@ethersproject/constants":"^5.4.0","@ethersproject/contracts":"^5.4.1","@ethersproject/providers":"^5.4.4","@ethersproject/wallet":"^5.4.0","@georgeroman/balancer-v2-pools":"0.0.7","@rollup/plugin-commonjs":"^20.0.0","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^13.0.4","@rollup/plugin-typescript":"^8.2.5","@types/chai":"^4.2.10","@types/lodash.clonedeep":"^4.5.6","@types/mocha":"^7.0.2","@types/node":"^14.0.20","@typescript-eslint/eslint-plugin":"^4.29.2","@typescript-eslint/parser":"^4.29.2","bignumber.js":"^9.0.1","chai":"^4.2.0","coveralls":"^3.0.9","dotenv":"^8.2.0","eslint":"^7.32.0","eslint-plugin-mocha-no-only":"^1.1.1","eslint-plugin-prettier":"^3.4.1","husky":"^4.2.1","lodash.clonedeep":"^4.5.0","lodash.set":"^4.3.2","mocha":"8.2.1","nyc":"^15.0.0","perf_hooks":"^0.0.1","prettier":"^2.3.2","pretty-quick":"^2.0.1","rollup":"^2.56.3","rollup-plugin-dts":"^4.0.0","ts-node":"^10.0.0","typescript":"^4.3.5"},"dependencies":{"isomorphic-fetch":"^2.2.1"},"peerDependencies":{"@ethersproject/abi":"^5.4.1","@ethersproject/address":"^5.4.0","@ethersproject/bignumber":"^5.4.2","@ethersproject/constants":"^5.4.0","@ethersproject/contracts":"^5.4.1","@ethersproject/providers":"^5.4.4"},"description":"<p align=\"center\">   <a href=\"https://circleci.com/gh/balancer-labs/balancer-sor\">     <img src=\"https://circleci.com/gh/balancer-labs/balancer-sor.svg?style=svg&circle-token=33636208d3161f79ff283b29c8dba9841bda8931\" />   </a>   <a href=\"https://coveralls","_id":"@coffee-beans/sor@4.0.0","_nodeVersion":"16.14.0","_npmVersion":"8.3.0","dist":{"integrity":"sha512-B33nbTyUa/3I3+duEwSzqjmoqDvTSkxocBPQB7kXndcrhXbmcr8C0LpjBoYvYgfmkhNfnLE0aREnZQMI3QnD5A==","shasum":"9f4d1d91d370fb878dc323aaf32f18064cfcdea5","tarball":"https://registry.npmjs.org/@coffee-beans/sor/-/sor-4.0.0.tgz","fileCount":2,"unpackedSize":5015,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgu9/W6gReabYHd+NedV27YFz4nL3AiASldt0+3xolmwIgXDvyzUZLj8Wr1Yzl7QJZaJ7/hLcmGjQj5aqqYq+kXJ4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiTCBBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp0og/+P7m0eBPIuwawQl+sVggA0743R5lpfAsYIbxGXcEoVC3x6jla\r\nedVeHdZL1oCqiqt8HNAYUVar5It7xCJRSkq7HBtiNPe/N9DRYS1I0NLDhvPw\r\nXNkoSifQjxV2ltRPopTkYLw41z/wE7Aea3SUiJueDKys2KoqO+TL8rmwIIKz\r\nJlxlS/E5k24javhvOqtulj3siuj1tnwUk0M+WbUpKmpWP5rpdQdsUwIw09tW\r\njyOdhkY+Df/rRcGhNmxWajdoRpXIjad0oUfQhmNPSx2N4wnV0M18v6IlRg4F\r\nE19P4StYZ8Vf+1vmLBTc/lWxWZu7E6h9py6c/sQHL/8vEU0xmSYr6GomauI7\r\nuWeUZ7GQeqb3zZ9mdQ27Fif38CyqxAZApl+L9i4OdfY4bmKDAZcKUsLx2qY1\r\nFHNvw5PxXg4KKDIrP9h1HYNgfBNeq0A3dKKcVSnWT69rcznh1rLu+1+Th6jS\r\nHHYR6x2FCMszpEFxn398wXqrenqJuESzi8ht0jftw9w0UphlS09rMyUPsqGq\r\nqXjo2tPFBeTUJCms4M9GSuzxPwGU589qIRmxVDPZ93tAjG6LHEnxLY9JrRzt\r\nd3tcUzTn70G7ult7wCLfgSlGJMhrRIb5ZKmX3bl+BPAbfEa/VoDJR1ypNgEx\r\nK54ExfHRcTlAHE/vk+uqzw7Cd3MQKQhhGSo=\r\n=D5/8\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"coffee-arabica","email":"arabicaa.dev@gmail.com"},"directories":{},"maintainers":[{"name":"coffee-arabica","email":"arabicaa.dev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sor_4.0.0_1649156161065_0.3019664218002238"},"_hasShrinkwrap":false}},"time":{"created":"2022-03-30T16:22:01.796Z","4.0.0-beta.0":"2022-03-30T16:22:02.037Z","modified":"2022-04-05T10:56:01.869Z","4.0.0-beta.1":"2022-03-30T16:23:54.775Z","4.0.0":"2022-04-05T10:56:01.255Z"},"maintainers":[{"name":"coffee-arabica","email":"arabicaa.dev@gmail.com"}],"description":"<p align=\"center\">   <a href=\"https://circleci.com/gh/balancer-labs/balancer-sor\">     <img src=\"https://circleci.com/gh/balancer-labs/balancer-sor.svg?style=svg&circle-token=33636208d3161f79ff283b29c8dba9841bda8931\" />   </a>   <a href=\"https://coveralls","license":"GPL-3.0-only","readme":"<p align=\"center\">\n  <a href=\"https://circleci.com/gh/balancer-labs/balancer-sor\">\n    <img src=\"https://circleci.com/gh/balancer-labs/balancer-sor.svg?style=svg&circle-token=33636208d3161f79ff283b29c8dba9841bda8931\" />\n  </a>\n  <a href=\"https://coveralls.io/github/balancer-labs/balancer-sor\">\n    <img src=\"https://coveralls.io/repos/github/balancer-labs/balancer-sor/badge.svg?t=7avwwt\" />\n  </a>\n  <a href=\"https://www.gnu.org/licenses/gpl-3.0\">\n    <img src=\"https://img.shields.io/badge/License-GPLv3-green.svg\" />\n  </a>\n  <a href=\"https://www.npmjs.com/package/@balancer-labs/sor\">\n    <img src=\"https://img.shields.io/badge/npm-v0.2.4-blue.svg?style=flat-square\" />\n  </a>\n</p>\n\n<h1 align=center><code>Smart Order Router (SOR)</code></h1>\n\nSmart Order Router, or SOR, is an off-chain linear optimization of routing orders across pools for best price execution.\n\nSOR exists in the Bronze release as a way to aggregate liquidity across all Balancer pools. Future releases of Balancer will accomplish this on-chain and allow aggregate contract fillable liquidity.\n\nLiquidity aggregators are free to use the SOR npm package or create their own order routing across pools.\n\n[Read More](https://docs.balancer.fi/developers/smart-order-router)\n\n## Overview Of Use And Example\n\nThere are two types of swap available:\n\n**swapExactIn** - i.e. You want to swap exactly 1 ETH as input and SOR will calculate X amount of BAL you receive in return.  \nor  \n**swapExactOut** - i.e. You want to receive exactly 1 BAL and SOR will calculate X amount of ETH you must input.\n\nThe SOR will return totalReturn/totalInput as well as a list swaps to achieve the total. Swaps can be through direct pools, i.e. A > POOL1 > B, or via a multihop pool, i.e. A > POOL1 > C > POOL2 > B. The swaps are returned in a format that can be directly to the Vault to execute the trade.\n\nThe example file `swapExample.ts` in: [./testScripts](test/testScripts/), demonstrates full examples with comments.\n\nTo Run:\n\nCreate a .env file in root dir with your infura provider key: `INFURA=your_key`\n\nInstall dependencies: `$ yarn install`\n\nRun example: `$ ts-node ./test/testScripts/swapExample.ts`\n\n## Environment Variables\n\nOptional config values can be set in the .env file:\n\nPRICE_ERROR_TOLERANCE - how close we expect prices after swap to be in SOR suggested paths. Defaults 0.00001.\n\nINFINITESIMAL - Infinitesimal is an amount that's used to initialize swap amounts so they are not zero or the path's limit. Defaults 0.000001.\n\nExample:\n\n```\nPRICE_ERROR_TOLERANCE=0.00001\nINFINITESIMAL=0.000001\n```\n","readmeFilename":"README.md"}