DynamicSlippageChecker

Description:

Proxy contract enabling upgradeable smart contract patterns. Delegates calls to an implementation contract.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

{{
  "language": "Solidity",
  "sources": {
    "src/deps/milkman/pricecheckers/DynamicSlippageChecker.sol": {
      "content": "// SPDX-License-Identifier: LGPL-3.0-or-later
pragma solidity 0.8.28;

import { IPriceChecker } from "src/interfaces/deps/milkman/IPriceChecker.sol";
import { IExpectedOutCalculator } from "src/interfaces/deps/milkman/IExpectedOutCalculator.sol";

/// @notice Dynamic slippage checker that evaluates solver quotes against an expected output.
/// @dev Ported from Milkman with Solidity 0.8 semantics and Cove-specific layout.
contract DynamicSlippageChecker is IPriceChecker {
    string public NAME;
    IExpectedOutCalculator public immutable EXPECTED_OUT_CALCULATOR;

    uint256 internal constant MAX_BPS = 10_000;

    constructor(string memory name_, address expectedOutCalculator) {
        NAME = name_;
        EXPECTED_OUT_CALCULATOR = IExpectedOutCalculator(expectedOutCalculator);
    }

    function checkPrice(
        uint256 amountIn,
        address fromToken,
        address toToken,
        uint256,
        uint256 minOut,
        bytes calldata data
    )
        external
        view
        override
        returns (bool)
    {
        (uint256 allowedSlippageBps, bytes memory extraData) = abi.decode(data, (uint256, bytes));

        uint256 expectedOut = EXPECTED_OUT_CALCULATOR.getExpectedOut(amountIn, fromToken, toToken, extraData);

        return minOut > (expectedOut * (MAX_BPS - allowedSlippageBps)) / MAX_BPS;
    }
}
"
    },
    "src/interfaces/deps/milkman/IPriceChecker.sol": {
      "content": "// SPDX-License-Identifier: LGPL-3.0-or-later
pragma solidity 0.8.28;

/// @title IPriceChecker
/// @notice Interface for price checker contracts used by Milkman to validate swaps
interface IPriceChecker {
    /// @notice Check if a swap price is acceptable
    /// @param amountIn The amount of input tokens (including fee)
    /// @param fromToken The input token address
    /// @param toToken The output token address
    /// @param feeAmount The fee amount in input tokens
    /// @param minOut The minimum output amount from the solver
    /// @param data Additional data for price checking
    /// @return True if the price is acceptable
    function checkPrice(
        uint256 amountIn,
        address fromToken,
        address toToken,
        uint256 feeAmount,
        uint256 minOut,
        bytes calldata data
    ) external view returns (bool);
}"
    },
    "src/interfaces/deps/milkman/IExpectedOutCalculator.sol": {
      "content": "// SPDX-License-Identifier: LGPL-3.0-or-later
pragma solidity 0.8.28;

interface IExpectedOutCalculator {
    function getExpectedOut(uint256 amountIn, address fromToken, address toToken, bytes calldata data)
        external
        view
        returns (uint256);
}
"
    }
  },
  "settings": {
    "remappings": [
      "@openzeppelin/contracts/=dependencies/@openzeppelin-contracts-5.1.0/",
      "@openzeppelin-upgradeable/contracts/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/",
      "@openzeppelin/contracts-upgradeable/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/",
      "clones-with-immutable-args/=dependencies/clones-with-immutable-args-1.1.1/src/",
      "create3-factory/=dependencies/lifinance-create3-factory-0/",
      "euler-price-oracle/=dependencies/euler-price-oracle-1/",
      "forge-std/=dependencies/forge-std-1.9.6/src/",
      "milkman/=dependencies/milkman-1/",
      "token-plugins-upgradeable/=dependencies/token-plugins-upgradeable-1/",
      "@1inch/solidity-utils/=dependencies/solidity-utils-5.3.0/",
      "@1inch/farming/=dependencies/farming-3.2.0/",
      "@1inch/token-plugins/=dependencies/token-plugins-upgradeable-1/",
      "forge-deploy/=dependencies/forge-deploy-1/contracts/",
      "forge-safe/=dependencies/forge-safe-1/src/",
      "@solady/=dependencies/solady-0.1.17/src/",
      "dependencies/tokenized-strategy-3.0.4/:@openzeppelin/=dependencies/tokenized-strategy-3.0.4/lib/openzeppelin-contracts/",
      "@openzeppelin-contracts-5.1.0/=dependencies/@openzeppelin-contracts-5.1.0/",
      "@openzeppelin-contracts-upgradeable-5.1.0/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/",
      "clones-with-immutable-args-1.1.1/=dependencies/clones-with-immutable-args-1.1.1/",
      "euler-price-oracle-1/=dependencies/euler-price-oracle-1/",
      "farming-3.2.0/=dependencies/farming-3.2.0/",
      "forge-deploy-1/=dependencies/forge-deploy-1/",
      "forge-safe-1/=dependencies/forge-safe-1/",
      "forge-std-1.9.6/=dependencies/forge-std-1.9.6/",
      "lifinance/create3-factory-0/=dependencies/lifinance-create3-factory-0/",
      "milkman-1/=dependencies/milkman-1/",
      "solady-0.1.17/=dependencies/solady-0.1.17/",
      "solidity-utils-5.3.0/=dependencies/solidity-utils-5.3.0/",
      "token-plugins-upgradeable-1/=dependencies/token-plugins-upgradeable-1/",
      "tokenized-strategy-3.0.4/=dependencies/tokenized-strategy-3.0.4/",
      "@balancer/=dependencies/milkman-1/lib/balancer-v2-monorepo/contracts/",
      "@cow-protocol/=dependencies/milkman-1/lib/contracts/src/",
      "@pendle/core-v2/=dependencies/euler-price-oracle-1/dependencies/pendle-core-v2-public-1.0.0/contracts/",
      "@pyth/=dependencies/euler-price-oracle-1/dependencies/@pythnetwork-pyth-sdk-solidity-4.1.0/",
      "@pythnetwork-pyth-sdk-solidity-4.1.0/=dependencies/euler-price-oracle-1/dependencies/@pythnetwork-pyth-sdk-solidity-4.1.0/",
      "@redstone-finance-evm-connector-0.8.0/=dependencies/euler-price-oracle-1/dependencies/@redstone-finance-evm-connector-0.8.0/contracts/",
      "@redstone/evm-connector/=dependencies/euler-price-oracle-1/dependencies/@redstone-finance-evm-connector-0.8.0/contracts/",
      "@uniswap/v3-core/=dependencies/euler-price-oracle-1/dependencies/@v3-core-1.0.1-solc-0.8/",
      "@uniswap/v3-periphery/=dependencies/euler-price-oracle-1/dependencies/@v3-periphery-1.4.2-solc-0.8/",
      "@v3-core-1.0.1-solc-0.8/=dependencies/euler-price-oracle-1/dependencies/@v3-core-1.0.1-solc-0.8/contracts/",
      "@v3-periphery-1.4.2-solc-0.8/=dependencies/euler-price-oracle-1/dependencies/@v3-periphery-1.4.2-solc-0.8/contracts/",
      "ds-test/=dependencies/clones-with-immutable-args-1.1.1/lib/ds-test/src/",
      "erc4626-tests/=dependencies/tokenized-strategy-3.0.4/lib/erc4626-tests/",
      "ethereum-vault-connector-1.0.1/=dependencies/euler-price-oracle-1/dependencies/ethereum-vault-connector-1.0.1/",
      "ethereum-vault-connector/=dependencies/euler-price-oracle-1/dependencies/ethereum-vault-connector-1.0.1/src/",
      "forge-deploy-proxy/=dependencies/forge-deploy-1/examples/basic/lib/forge-deploy-proxy/src/",
      "forge-std-1.9.2/=dependencies/euler-price-oracle-1/dependencies/forge-std-1.9.2/src/",
      "lifinance-create3-factory-0/=dependencies/lifinance-create3-factory-0/",
      "openzeppelin-contracts-4.9.6/=dependencies/euler-price-oracle-1/dependencies/openzeppelin-contracts-4.9.6/",
      "openzeppelin-contracts/=dependencies/tokenized-strategy-3.0.4/lib/openzeppelin-contracts/",
      "openzeppelin/=dependencies/tokenized-strategy-3.0.4/lib/openzeppelin-contracts/contracts/",
      "pendle-core-v2-public-1.0.0/=dependencies/euler-price-oracle-1/dependencies/pendle-core-v2-public-1.0.0/contracts/",
      "solady-0.0.178/=dependencies/euler-price-oracle-1/dependencies/solady-0.0.178/src/",
      "solidity-stringutils/=dependencies/forge-safe-1/lib/surl/lib/solidity-stringutils/",
      "solmate/=dependencies/lifinance-create3-factory-0/lib/solmate/src/",
      "surl/=dependencies/forge-safe-1/lib/surl/"
    ],
    "optimizer": {
      "enabled": true,
      "runs": 400
    },
    "metadata": {
      "useLiteralContent": false,
      "bytecodeHash": "ipfs",
      "appendCBOR": true
    },
    "outputSelection": {
      "*": {
        "*": [
          "evm.bytecode",
          "evm.deployedBytecode",
          "devdoc",
          "userdoc",
          "metadata",
          "abi"
        ]
      }
    },
    "evmVersion": "prague",
    "viaIR": true
  }
}}

Tags:
Proxy, Swap, Upgradeable, Factory, Oracle|addr:0xd2dfc619906c5ec477c9a96221a43baeaed256ed|verified:true|block:23701902|tx:0x9eeed69c810acb787d1eeb6ea720c2f45fc6a65b2e760277fc1cfaed12891872|first_check:1761995456

Submitted on: 2025-11-01 12:10:57

Comments

Log in to comment.

No comments yet.