UNPKG

@maxosllc/smart-order-router

Version:
191 lines 16.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NATIVE_OVERHEAD = exports.NATIVE_UNWRAP_OVERHEAD = exports.NATIVE_WRAP_OVERHEAD = exports.TOKEN_OVERHEAD = exports.SINGLE_HOP_OVERHEAD = exports.COST_PER_HOP = exports.COST_PER_INIT_TICK = exports.BASE_SWAP_COST = exports.COST_PER_UNINIT_TICK = void 0; const bignumber_1 = require("@ethersproject/bignumber"); const router_sdk_1 = require("@uniswap/router-sdk"); const chains_1 = require("../../../../src/util/chains"); const providers_1 = require("../../../providers"); // Cost for crossing an uninitialized tick. exports.COST_PER_UNINIT_TICK = bignumber_1.BigNumber.from(0); //l2 execution fee on optimism is roughly the same as mainnet const BASE_SWAP_COST = (id) => { switch (id) { case chains_1.ChainId.MAINNET: case chains_1.ChainId.GOERLI: case chains_1.ChainId.SEPOLIA: case chains_1.ChainId.OPTIMISM: case chains_1.ChainId.OPTIMISM_GOERLI: case chains_1.ChainId.OPTIMISM_SEPOLIA: case chains_1.ChainId.BNB: case chains_1.ChainId.AVALANCHE: case chains_1.ChainId.BASE: case chains_1.ChainId.BASE_GOERLI: case chains_1.ChainId.ZORA: case chains_1.ChainId.ZORA_SEPOLIA: case chains_1.ChainId.ROOTSTOCK: case chains_1.ChainId.BLAST: case chains_1.ChainId.ZKSYNC: case chains_1.ChainId.WORLDCHAIN: case chains_1.ChainId.UNICHAIN_SEPOLIA: case chains_1.ChainId.UNICHAIN: case chains_1.ChainId.BASE_SEPOLIA: case chains_1.ChainId.MONAD_TESTNET: // TODO: double check on monad gas case chains_1.ChainId.SONEIUM: return bignumber_1.BigNumber.from(2000); case chains_1.ChainId.ARBITRUM_ONE: case chains_1.ChainId.ARBITRUM_GOERLI: case chains_1.ChainId.ARBITRUM_SEPOLIA: return bignumber_1.BigNumber.from(5000); case chains_1.ChainId.POLYGON: case chains_1.ChainId.POLYGON_MUMBAI: return bignumber_1.BigNumber.from(2000); case chains_1.ChainId.CELO: case chains_1.ChainId.CELO_ALFAJORES: return bignumber_1.BigNumber.from(2000); //TODO determine if sufficient case chains_1.ChainId.GNOSIS: return bignumber_1.BigNumber.from(2000); case chains_1.ChainId.MOONBEAM: return bignumber_1.BigNumber.from(2000); case chains_1.ChainId.BLOCKDAG_TESTNET: return bignumber_1.BigNumber.from(2000); } }; exports.BASE_SWAP_COST = BASE_SWAP_COST; const COST_PER_INIT_TICK = (id) => { switch (id) { case chains_1.ChainId.MAINNET: case chains_1.ChainId.GOERLI: case chains_1.ChainId.SEPOLIA: case chains_1.ChainId.BNB: case chains_1.ChainId.AVALANCHE: return bignumber_1.BigNumber.from(31000); case chains_1.ChainId.OPTIMISM: case chains_1.ChainId.OPTIMISM_GOERLI: case chains_1.ChainId.OPTIMISM_SEPOLIA: case chains_1.ChainId.BASE: case chains_1.ChainId.BASE_GOERLI: case chains_1.ChainId.ZORA: case chains_1.ChainId.ZORA_SEPOLIA: case chains_1.ChainId.ROOTSTOCK: case chains_1.ChainId.BLAST: case chains_1.ChainId.ZKSYNC: case chains_1.ChainId.WORLDCHAIN: case chains_1.ChainId.UNICHAIN_SEPOLIA: case chains_1.ChainId.UNICHAIN: case chains_1.ChainId.BASE_SEPOLIA: case chains_1.ChainId.MONAD_TESTNET: // TODO: double check on monad gas case chains_1.ChainId.SONEIUM: return bignumber_1.BigNumber.from(31000); case chains_1.ChainId.ARBITRUM_ONE: case chains_1.ChainId.ARBITRUM_GOERLI: case chains_1.ChainId.ARBITRUM_SEPOLIA: return bignumber_1.BigNumber.from(31000); case chains_1.ChainId.POLYGON: case chains_1.ChainId.POLYGON_MUMBAI: return bignumber_1.BigNumber.from(31000); case chains_1.ChainId.CELO: case chains_1.ChainId.CELO_ALFAJORES: return bignumber_1.BigNumber.from(31000); case chains_1.ChainId.GNOSIS: return bignumber_1.BigNumber.from(31000); case chains_1.ChainId.MOONBEAM: return bignumber_1.BigNumber.from(31000); case chains_1.ChainId.BLOCKDAG_TESTNET: return bignumber_1.BigNumber.from(31000); } }; exports.COST_PER_INIT_TICK = COST_PER_INIT_TICK; const COST_PER_HOP = (id) => { switch (id) { case chains_1.ChainId.MAINNET: case chains_1.ChainId.GOERLI: case chains_1.ChainId.SEPOLIA: case chains_1.ChainId.BNB: case chains_1.ChainId.OPTIMISM: case chains_1.ChainId.OPTIMISM_GOERLI: case chains_1.ChainId.OPTIMISM_SEPOLIA: case chains_1.ChainId.AVALANCHE: case chains_1.ChainId.BASE: case chains_1.ChainId.BASE_GOERLI: case chains_1.ChainId.ZORA: case chains_1.ChainId.ZORA_SEPOLIA: case chains_1.ChainId.ROOTSTOCK: case chains_1.ChainId.BLAST: case chains_1.ChainId.ZKSYNC: case chains_1.ChainId.WORLDCHAIN: case chains_1.ChainId.UNICHAIN_SEPOLIA: case chains_1.ChainId.UNICHAIN: case chains_1.ChainId.BASE_SEPOLIA: case chains_1.ChainId.MONAD_TESTNET: // TODO: double check on monad gas case chains_1.ChainId.SONEIUM: return bignumber_1.BigNumber.from(80000); case chains_1.ChainId.ARBITRUM_ONE: case chains_1.ChainId.ARBITRUM_GOERLI: case chains_1.ChainId.ARBITRUM_SEPOLIA: return bignumber_1.BigNumber.from(80000); case chains_1.ChainId.POLYGON: case chains_1.ChainId.POLYGON_MUMBAI: return bignumber_1.BigNumber.from(80000); case chains_1.ChainId.CELO: case chains_1.ChainId.CELO_ALFAJORES: return bignumber_1.BigNumber.from(80000); case chains_1.ChainId.GNOSIS: return bignumber_1.BigNumber.from(80000); case chains_1.ChainId.MOONBEAM: return bignumber_1.BigNumber.from(80000); case chains_1.ChainId.BLOCKDAG_TESTNET: return bignumber_1.BigNumber.from(80000); } }; exports.COST_PER_HOP = COST_PER_HOP; const SINGLE_HOP_OVERHEAD = (_id) => { return bignumber_1.BigNumber.from(15000); }; exports.SINGLE_HOP_OVERHEAD = SINGLE_HOP_OVERHEAD; const TOKEN_OVERHEAD = (id, route) => { const currencies = route.protocol === router_sdk_1.Protocol.V4 ? route.currencyPath : route.tokenPath; let overhead = bignumber_1.BigNumber.from(0); if (id == chains_1.ChainId.MAINNET) { // AAVE's transfer contains expensive governance snapshotting logic. We estimate // it at around 150k. if (currencies.some((t) => t.equals(providers_1.AAVE_MAINNET))) { overhead = overhead.add(150000); } // LDO's reaches out to an external token controller which adds a large overhead // of around 150k. if (currencies.some((t) => t.equals(providers_1.LIDO_MAINNET))) { overhead = overhead.add(150000); } } return overhead; }; exports.TOKEN_OVERHEAD = TOKEN_OVERHEAD; // TODO: change per chain const NATIVE_WRAP_OVERHEAD = (id) => { switch (id) { default: return bignumber_1.BigNumber.from(27938); } }; exports.NATIVE_WRAP_OVERHEAD = NATIVE_WRAP_OVERHEAD; const NATIVE_UNWRAP_OVERHEAD = (id) => { switch (id) { default: return bignumber_1.BigNumber.from(36000); } }; exports.NATIVE_UNWRAP_OVERHEAD = NATIVE_UNWRAP_OVERHEAD; const NATIVE_OVERHEAD = (chainId, amount, quote) => { if (amount.isNative) { // need to wrap eth in return (0, exports.NATIVE_WRAP_OVERHEAD)(chainId); } if (quote.isNative) { // need to unwrap eth out return (0, exports.NATIVE_UNWRAP_OVERHEAD)(chainId); } return bignumber_1.BigNumber.from(0); }; exports.NATIVE_OVERHEAD = NATIVE_OVERHEAD; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzLWNvc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3JvdXRlcnMvYWxwaGEtcm91dGVyL2dhcy1tb2RlbHMvZ2FzLWNvc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHdEQUFxRDtBQUVyRCxvREFBK0M7QUFDL0Msd0RBQXNEO0FBRXRELGtEQUFnRTtBQUdoRSwyQ0FBMkM7QUFDOUIsUUFBQSxvQkFBb0IsR0FBRyxxQkFBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV0RCw2REFBNkQ7QUFDdEQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxFQUFXLEVBQWEsRUFBRTtJQUN2RCxRQUFRLEVBQUUsRUFBRTtRQUNWLEtBQUssZ0JBQU8sQ0FBQyxPQUFPLENBQUM7UUFDckIsS0FBSyxnQkFBTyxDQUFDLE1BQU0sQ0FBQztRQUNwQixLQUFLLGdCQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3JCLEtBQUssZ0JBQU8sQ0FBQyxRQUFRLENBQUM7UUFDdEIsS0FBSyxnQkFBTyxDQUFDLGVBQWUsQ0FBQztRQUM3QixLQUFLLGdCQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDOUIsS0FBSyxnQkFBTyxDQUFDLEdBQUcsQ0FBQztRQUNqQixLQUFLLGdCQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3ZCLEtBQUssZ0JBQU8sQ0FBQyxJQUFJLENBQUM7UUFDbEIsS0FBSyxnQkFBTyxDQUFDLFdBQVcsQ0FBQztRQUN6QixLQUFLLGdCQUFPLENBQUMsSUFBSSxDQUFDO1FBQ2xCLEtBQUssZ0JBQU8sQ0FBQyxZQUFZLENBQUM7UUFDMUIsS0FBSyxnQkFBTyxDQUFDLFNBQVMsQ0FBQztRQUN2QixLQUFLLGdCQUFPLENBQUMsS0FBSyxDQUFDO1FBQ25CLEtBQUssZ0JBQU8sQ0FBQyxNQUFNLENBQUM7UUFDcEIsS0FBSyxnQkFBTyxDQUFDLFVBQVUsQ0FBQztRQUN4QixLQUFLLGdCQUFPLENBQUMsZ0JBQWdCLENBQUM7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