{"_id":"@butternetwork/router","_rev":"7-407e5424d5c721e7b8faaf14084ec635","name":"@butternetwork/router","dist-tags":{"latest":"1.3.0"},"versions":{"1.0.0":{"name":"@butternetwork/router","version":"1.0.0","keywords":["butternetwork","butter","swap","mapprotocol","mapo","omnichain","cross-chain","solidity"],"author":{"name":"Butter Network"},"license":"ISC","_id":"@butternetwork/router@1.0.0","maintainers":[{"name":"philllau","email":"philllllau@gmail.com"}],"homepage":"https://butternetwork.io","bugs":{"url":"https://github.com/butternetwork/butter-router-contracts/issues"},"dist":{"shasum":"ab7fa32d4e22bd0b03c81a6bab6733278fb38008","tarball":"https://registry.npmjs.org/@butternetwork/router/-/router-1.0.0.tgz","fileCount":26,"integrity":"sha512-ptUI30ZJ/ZzZeLb8EW0y5Az03HK+D24fcKfi+gVvNHdEqOVgwR9E4eaZxEf45ja6TBGia1BMgE76HLn4Iofx3Q==","signatures":[{"sig":"MEYCIQD8tpOCVLUs9qbNtq//dk3GGR/tJTuC897hG4nqVLDiGgIhAJZs/JIdXeIpSq0LiC+bJqvdCn54TksoVPJGPUaUrY9+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":191432,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkRSjJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpnAg//QT8MAfvQKSJiVHmtTW5Q93b6iYuK3iidJDNiVS/Xlrqt8QB4\r\nDHmjHgXaStBtYXwpvmLzzKn32QsfYYr5ifSyCK/CVN+0Hy1yta0xa7dHCeJ3\r\ns0+vY3gw7VXbRSaP5W+jK2B59oge+pr8kJU6mV5bLLwU+JJdNqpU2lam0HT/\r\nXQi+7cItBcQFVqgU1U5wvIDGOVvE2QV0b3IGGqm0CDY+wx7rZddjh7XW4TN8\r\nhrU3zoHZux5Vrkok06/X3GZDVDQ9da8nq2GnPpK6DNIeHws9Fj+00U5btksK\r\nDcz5uR+pomjz7ZGD2J8c/VvHo5nTmDsf334lfapOPtRWlIXKMyCP22RvTuKL\r\nu765WdEyGEOyrfHkOj+73wCrV5tVqKIfrmJMlGzuV9HR+M4wvlvkPSdgdvFq\r\nU85mutaLstzDqPv1mjE/xXgqY6qZjvtLthiCs+reAwuhlSwaJncvWbdNQOXb\r\ndb6nZ/v4VWbcfAJ8YyKY9ewAZ4hCi8+eWC7zN17i1V1pkVHlb/B9A9P1mGFQ\r\nfZBfeVyxtRJ25lRRS1mDS6+toOSf8gjg2ri3BsOz97bM037FbCxDCqRBhbnb\r\nAooZguT0t3rc3RFNCFWc0t7x04zrnsiVQDicp5H2cYZBwyjmwa/FZrJd03no\r\nW3Uy6N9HS43qixSHegI5yP07m2Jgp3nW/Ug=\r\n=77Em\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"17ded22b90abbfbae3b2817d1aa7cd891a717fcd","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"philllau","email":"philllllau@gmail.com"},"repository":{"url":"git+https://github.com/butternetwork/butter-router-contracts.git","type":"git"},"_npmVersion":"9.5.0","description":"Butter omnichain aggregate swap contracts based on MAP Protocol","directories":{},"_nodeVersion":"18.11.0","dependencies":{"dotenv":"^16.0.3","hardhat-deploy":"^0.11.25","@openzeppelin/contracts":"^4.8.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.2.0","ethers":"^5.4.7","hardhat":"^2.14.0","ts-node":"^10.9.1","typechain":"^8.1.0","typescript":"^4.9.5","@types/chai":"^4.2.0","@types/mocha":"^9.1.0","solidity-coverage":"^0.8.1","@typechain/hardhat":"^6.1.2","@typechain/ethers-v5":"^10.1.0","hardhat-gas-reporter":"^1.0.8","@butternetwork/bridge":"^1.0.1","@ethersproject/providers":"^5.7.2","@nomiclabs/hardhat-ethers":"^2.0.0","@nomiclabs/hardhat-etherscan":"^3.0.0","@nomicfoundation/hardhat-toolbox":"^2.0.0","@nomicfoundation/hardhat-chai-matchers":"^1.0.0","@nomicfoundation/hardhat-network-helpers":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_1.0.0_1682254025135_0.5118335564155452","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@butternetwork/router","version":"1.0.1","keywords":["butternetwork","butter","swap","mapprotocol","mapo","omnichain","cross-chain","solidity"],"author":{"name":"Butter Network"},"license":"ISC","_id":"@butternetwork/router@1.0.1","maintainers":[{"name":"philllau","email":"philllllau@gmail.com"}],"homepage":"https://butternetwork.io","bugs":{"url":"https://github.com/butternetwork/butter-router-contracts/issues"},"dist":{"shasum":"8dc3279735880379b3524cf46c87bc07f2e5c326","tarball":"https://registry.npmjs.org/@butternetwork/router/-/router-1.0.1.tgz","fileCount":26,"integrity":"sha512-OtmP5Q3TxMbQUaB0oohir6R7vaQOe8R1bwpF4Ph+U8ICfGdAnS6X4tNZPdlARtGQhHaWEczt+jfHZaE87nrM5w==","signatures":[{"sig":"MEUCIQD/pLHXngra2AOgmk4xcPS9OSL/hYvH3HgmSjGvzmhEdwIgEoYorhmMbeL4eFFACjJTziDkECHgZzeeM82FJwwqCko=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":191432,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkRSkuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq0mBAAoAVdks5Fr8WNNul7K5ZNVZXMkF/frupRs1kB4aqLheyJ7I4E\r\nY5UFyM5EIURsyWCTd2AhwQWe8ae0n9efHYO5WodZLmIkMGSImcqkg1I66tx/\r\nFXmOaOVmUvO8p0HnqVQJafNfsczSbjFpHpYIArXnHmoVbKZEQf+NgmWqigci\r\nYoTGaYG9DBKPU4WmuxpaTIutPp9C6Xuy2pJh4um3IRo2jcK9j6CQRmbmkgbu\r\nlwS1kP77vmaF186V8yxFzpKHelWp7K5lVLXdttPi2XVee57vaVqG2govMuHc\r\n+7fn3a8ke8t5Gaj6L6WB9LTTcrvNRyNkxphBPt4FEKzS48vxv99jryM7SgG0\r\n0/nNn2wvDu7qmHIeMkALXHP9OUqexwVt0akOmZ+HI3wM31vaGt81D3HnWfl7\r\nw9SH5mt6QD2ERBqExvTJCjf/qF2ybdSnKhvkxCPSJwI3mnydDzix8aIU8zGo\r\nFglI3iF2XNQ5y0Sgn2mMuLYeBv3OE8KQCMcztjaeOJwYQ2dLuqlJnVq2hDRJ\r\n2NSplIVI0VQbbftgXmV8i4OCFMMnUX2k1Bl1GwHI2bjso0/wwT3xcXzoJlHZ\r\nbgy5svoxfDNEdiltM4ltwDPx48pYMM2UPtuglASIzrjdoND6vWjkAf5EnIjW\r\n3ALkrPKgV+xJ/BW5ZtQUQj0KwBFhVLCdTbc=\r\n=KHZ6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"ba6b6db9dca356b634efe0a0f3ad0c082c6ca9bf","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"philllau","email":"philllllau@gmail.com"},"repository":{"url":"git+https://github.com/butternetwork/butter-router-contracts.git","type":"git"},"_npmVersion":"9.5.0","description":"Butter omnichain aggregate swap contracts based on MAP Protocol","directories":{},"_nodeVersion":"18.11.0","dependencies":{"dotenv":"^16.0.3","hardhat-deploy":"^0.11.25","@openzeppelin/contracts":"^4.8.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.2.0","ethers":"^5.4.7","hardhat":"^2.14.0","ts-node":"^10.9.1","typechain":"^8.1.0","typescript":"^4.9.5","@types/chai":"^4.2.0","@types/mocha":"^9.1.0","solidity-coverage":"^0.8.1","@typechain/hardhat":"^6.1.2","@typechain/ethers-v5":"^10.1.0","hardhat-gas-reporter":"^1.0.8","@butternetwork/bridge":"^1.0.1","@ethersproject/providers":"^5.7.2","@nomiclabs/hardhat-ethers":"^2.0.0","@nomiclabs/hardhat-etherscan":"^3.0.0","@nomicfoundation/hardhat-toolbox":"^2.0.0","@nomicfoundation/hardhat-chai-matchers":"^1.0.0","@nomicfoundation/hardhat-network-helpers":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_1.0.1_1682254126298_0.7147233397407229","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@butternetwork/router","version":"1.1.0","keywords":["butternetwork","butter","swap","mapprotocol","mapo","omnichain","cross-chain","solidity"],"author":{"name":"Butter Network"},"license":"ISC","_id":"@butternetwork/router@1.1.0","maintainers":[{"name":"philllau","email":"philllllau@gmail.com"}],"homepage":"https://butternetwork.io","bugs":{"url":"https://github.com/butternetwork/butter-router-contracts/issues"},"dist":{"shasum":"344ba9043841afd2ef24567d3615b99ae6ae5a80","tarball":"https://registry.npmjs.org/@butternetwork/router/-/router-1.1.0.tgz","fileCount":27,"integrity":"sha512-BDhiNyoVf8x3Kyo4UoALZiTeUChUG78tkNqWB02tzQp5YO3E9MSBUrlsyd0WZQ+IBEl3F7wywBMTYgSosnEntA==","signatures":[{"sig":"MEQCIA0pzEYOaAApFEyEf99xUKC+IMpU5FlBFdDMIHt+Ae8IAiB3otaC+Nojn5fyE8lCQsl79GW+nbGZ8Si2mHqzv338Lw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":289669},"main":"index.js","gitHead":"811500c3ddf373ccaceb840709ba992eb67f62eb","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"philllau","email":"philllllau@gmail.com"},"repository":{"url":"git+https://github.com/butternetwork/butter-router-contracts.git","type":"git"},"_npmVersion":"9.6.7","description":"Butter omnichain aggregate swap contracts based on MAP Protocol","directories":{},"_nodeVersion":"20.3.0","dependencies":{"dotenv":"^16.0.3","hardhat-deploy":"^0.11.25","@openzeppelin/contracts":"^4.8.2"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.2.0","ethers":"^5.4.7","hardhat":"^2.14.0","ts-node":"^10.9.1","typechain":"^8.1.0","typescript":"^4.9.5","@types/chai":"^4.2.0","@types/mocha":"^9.1.0","solidity-coverage":"^0.8.1","@typechain/hardhat":"^6.1.2","@typechain/ethers-v5":"^10.1.0","hardhat-gas-reporter":"^1.0.8","@butternetwork/bridge":"^1.0.1","@ethersproject/providers":"^5.7.2","@nomiclabs/hardhat-ethers":"^2.0.0","@nomiclabs/hardhat-etherscan":"^3.0.0","@nomicfoundation/hardhat-toolbox":"^2.0.0","@nomicfoundation/hardhat-chai-matchers":"^1.0.0","@nomicfoundation/hardhat-network-helpers":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_1.1.0_1688947540001_0.814250668845532","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"@butternetwork/router","version":"1.3.0","keywords":["butternetwork","butter","swap","mapprotocol","mapo","omnichain","cross-chain","solidity"],"author":{"name":"Butter Network"},"license":"MIT","_id":"@butternetwork/router@1.3.0","maintainers":[{"name":"philllau","email":"philllllau@gmail.com"}],"homepage":"https://butternetwork.io","bugs":{"url":"https://github.com/butternetwork/butter-router-contracts/issues"},"dist":{"shasum":"b77ca42a21754518285139e5a501c63582a98d94","tarball":"https://registry.npmjs.org/@butternetwork/router/-/router-1.3.0.tgz","fileCount":18,"integrity":"sha512-HuEjODW0E0Y2fCUuZZl8OYdMNwqcI5nRs70PtpV2iDXjPIGCTK5G/5X1SmBx5zIBwQyjfFYTa8TaNeS7303jcg==","signatures":[{"sig":"MEQCIH/8cGit25Crin+mVAz8AdO6N7s+7WjuzQcDcGG83CExAiB4QJCEoEkO87DBSdTd+3ejNLAUsclJePwBaqmDeVWtBQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":242295},"main":"index.js","gitHead":"129b4ecdaf780bef862892f322f5fd6954e276d4","scripts":{"test":"echo \"Error: no test specified\" && exit 1","format":"prettier --print-width 120 --tab-width 4 --write ./contracts ./scripts ./tasks ./test ./utils ./configs"},"_npmUser":{"name":"philllau","email":"philllllau@gmail.com"},"repository":{"url":"git+https://github.com/butternetwork/butter-router-contracts.git","type":"git"},"_npmVersion":"10.2.0","description":"Butter omni-chain aggregate swap contracts based on MAP Protocol","directories":{},"_nodeVersion":"21.1.0","dependencies":{"@butternetwork/bridge":"^1.2.0","@openzeppelin/contracts":"^4.9.3"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.2.0","dotenv":"^16.0.3","ethers":"^5.4.7","hardhat":"^2.14.0","tronweb":"^5.3.0","ts-node":"^10.9.1","prettier":"^2.8.8","typechain":"^8.1.0","typescript":"^4.9.5","@types/chai":"^4.2.0","zksync-web3":"^0.14.3","@types/mocha":"^9.1.0","hardhat-deploy":"^0.11.25","solidity-coverage":"^0.8.1","@typechain/hardhat":"^6.1.2","@typechain/ethers-v5":"^10.1.0","hardhat-gas-reporter":"^1.0.8","@ethersproject/providers":"^5.7.2","prettier-plugin-solidity":"^1.1.0","@nomiclabs/hardhat-ethers":"^2.0.0","@nomiclabs/hardhat-etherscan":"^3.0.0","@matterlabs/hardhat-zksync-solc":"^0.3.17","@nomicfoundation/hardhat-toolbox":"^2.0.0","@matterlabs/hardhat-zksync-deploy":"^0.6.3","@matterlabs/hardhat-zksync-verify":"^0.1.6","@nomicfoundation/hardhat-chai-matchers":"^1.0.0","@nomicfoundation/hardhat-network-helpers":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router_1.3.0_1706855334299_0.49276368275567384","host":"s3://npm-registry-packages"}}},"time":{"created":"2023-04-23T12:47:05.074Z","modified":"2026-08-04T10:47:04.434Z","1.0.0":"2023-04-23T12:47:05.295Z","1.0.1":"2023-04-23T12:48:46.484Z","1.1.0":"2023-07-10T00:05:40.203Z","1.3.0":"2024-02-02T06:28:54.506Z"},"bugs":{"url":"https://github.com/butternetwork/butter-router-contracts/issues"},"author":{"name":"Butter Network"},"license":"MIT","homepage":"https://butternetwork.io","keywords":["butternetwork","butter","swap","mapprotocol","mapo","omnichain","cross-chain","solidity"],"repository":{"url":"git+https://github.com/butternetwork/butter-router-contracts.git","type":"git"},"description":"Butter omni-chain aggregate swap contracts based on MAP Protocol","maintainers":[{"email":"philllllau@gmail.com","name":"philllau"},{"email":"evan.anderson.sun@gmail.com","name":"evan.ad"},{"email":"panda007.2021@gmail.com","name":"pandarr"}],"readme":"# Brief Description\n\nThis project is the entry contract for [butterSwap](https://butterswap.io).\n\nButterRouter V2 consists of two main contracts.\n\n- ButterRouterV2.sol is new version contract.\n- SwapAdapter.sol is the swap aggregation adapter contract of the new version contract ,called by ButterRouterV2 to complete swap.\n\n## Main interfaces explanation(v2)\n\n1. `swapAndCall` swap tokens and execute a callback method\n\n```solidity\n    // 1. swap: _swapData.length > 0 and _bridgeData.length == 0\n    // 2. swap and call: _swapData.length > 0 and _callbackData.length > 0\n    function swapAndCall(\n        bytes32 _transferId,\n        address _srcToken,\n        uint256 _amount,\n        FeeType _feeType,\n        bytes calldata _swapData,\n        bytes calldata _callbackData,\n        bytes calldata _permitData\n    ) external payable;\n```\n\n2. `swapAndBridge` swap tokens and bridge outToken to other chain.\n\n```solidity\n    // 1. bridge:  _swapData.length == 0 and _bridgeData.length > 0\n    // 2. swap and bridge: _swapData.length > 0 and _bridgeData.length > 0\n    function swapAndBridge(\n        address _srcToken,\n        uint256 _amount,\n        bytes calldata _swapData,\n        bytes calldata _bridgeData,\n        bytes calldata _permitData\n    ) external payable;\n```\n\n3. `remoteSwapAndCall` called by butter mos after bridge, to swap tokens and execute a callback on target chain.\n\n```solidity\n    // At remote chain call after bridge\n    // mos transfer token to router first\n    //  1. swap: _swapData.length > 0 and _callbackData.length == 0\n    //  2. call: _swapData.length == 0 and _callbackData.length > 0\n    //  3. swap and call: _swapData.length > 0 and _callbackData.length > 0\n    function remoteSwapAndCall(\n        bytes32 _orderId,\n        address _srcToken,\n        uint256 _amount,\n        uint256 _fromChain,\n        bytes calldata _from,\n        bytes calldata _swapAndCall\n    ) external payable;\n```\n\n## Installation\n\n```shell\nnpm install --save-dev @butternetwork/router\n# or\nyarn add --dev @butternetwork/router\n```\n\n## Contract Deployment and SetUp Workflow\n\n### Pre-requirement\n\nSince all of the contracts are developed in Hardhat development environment, developers need to install Hardhat before working through our contracts. The hardhat installation tutorial can be found here[hardhat](https://hardhat.org/hardhat-runner/docs/getting-started#installation)\n\n### install\n\n```shell\nnpm install\n```\n\n### create an .env file and fill following in the contents\n\n```\nPRIVATE_KEY =\nTRON_PRIVATE_KEY =\nALCHEMY_KEY =\nROUTER_DEPLOY_SALT =\nSWAP_ADAPTER_DEPLOY_SALT =\nFEE_RECEIVER_SAlT =\n```\n\n### Compiling contracts\n\nSimply useing hardhat built-in compile task to compile contracts.\n\n```\n$ npx hardhat compile\nCompiling...\nCompiled 1 contract successfully\n```\n\nThe compiled artifacts will be saved in the `artifacts/` directory by default\n\n### Testing\n\n```\nCompiled 6 Solidity files successfully\n  ButterRouterV2\n    ✔ setFee only owner (1442ms)\n    ✔ setMosAddress only owner (147ms)\n    ✔ setAuthorization only owner (129ms)\n    ✔ setDexExecutor only owner (122ms)\n    ✔ rescueFunds correct (130ms)\n    ✔ rescueFunds only owner (129ms)\n    ✔ setFee feeReceiver zero address (126ms)\n    ✔ setFee feeRate less than 1000000 (124ms)\n    ✔ setFee correct  (137ms)\n    ✔ setMosAddress _mosAddress must be contract (100ms)\n    ✔ setDexExecutor dexExecutor must be contract (111ms)\n    ✔ setMosAddress correct (120ms)\n    ✔ setDexExecutor correct (132ms)\n    ✔ setAuthorization only owner (110ms)\n    ✔ setAuthorization correct (135ms)\n    ✔ swapAndCall (2920ms)\n    ✔ swapAndCall (2826ms)\n    ✔ swapAndBridge (2870ms)\n    ✔ swapAndCall (2931ms)\n    ✔ remoteSwapAndCall (2808ms)\n    ✔ remoteSwapAndCall _makeUniV3Swap -> native (2764ms)\n    ✔ remoteSwapAndCall _makeUniV3Swap -> tokens (2735ms)\n    ✔ remoteSwapAndCall _makeUniV2Swap -> swapExactTokensForETH (2740ms)\n    ✔ remoteSwapAndCall _makeUniV2Swap -> swapExactTokensForTokens (2911ms)\n    ✔ remoteSwapAndCall _makeUniV2Swap -> swapExactETHForTokens (2813ms)\n    ✔ remoteSwapAndCall _makeCurveSwap (2932ms)\n    ✔ remoteSwapAndCall buy nft seaport (2799ms)\n\n\n  27 passing (37s)\n```\n\n### Deploy and setup\n\nThe deploy script is located in tasks folder . We can run the following command to deploy.\n\nNOTE\n\nif deploy chain is zksync or zksyncTestnet,please compile this contract use\n\n```\nnpx hardhat compile --network  `<zkSync or zkSyncTest>`\n```\n\n#### v2\n\n1.deploy and set up before run this task, set task/config.js\n\n```\nnpx hardhat routerV2 --network <network>\n```\n\nsubtasks\n\n1.routerV2:deploy\n\n```\nnpx hardhat routerV2:deploy --mos <mos address> --wtoken <wtoken address> --network <network>\n```\n\n2.routerV2:deploySwapAdapter\n\n```\nnpx hardhat routerV2:deploySwapAdapter --network <network>\n```\n\n3.routerV2:setAuthorization\n\n```\nnpx hardhat routerV2:setAuthorization --router <router address> --executors <excutor1,excutor2,..> --flag <flag> --network <network>\n```\n\n4.routerV2:setFee\n\n```\nnpx hardhat routerV2:setFee --router <router address> --feereceiver <receiver address> --feerate <rate> --fixedfee <fixedfee> --network <network>\n```\n","readmeFilename":"README.md"}