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/UniV2ExpectedOutCalculator.sol": {
"content": "// SPDX-License-Identifier: LGPL-3.0-or-later
pragma solidity 0.8.28;
import { IExpectedOutCalculator } from "src/interfaces/deps/milkman/IExpectedOutCalculator.sol";
import { IUniV2 } from "src/interfaces/deps/milkman/IUniV2.sol";
/// @notice Expected output calculator that routes through a Uniswap V2 style router (SushiSwap).
/// @dev Mirrors Milkman's implementation with updated pragma and without SafeMath.
contract UniV2ExpectedOutCalculator is IExpectedOutCalculator {
address internal constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
string public NAME;
address public immutable UNIV2_ROUTER;
constructor(string memory name_, address univ2Router) {
NAME = name_;
UNIV2_ROUTER = univ2Router;
}
function getExpectedOut(uint256 amountIn, address fromToken, address toToken, bytes calldata)
external
view
override
returns (uint256)
{
address[] memory path;
if (fromToken == WETH || toToken == WETH) {
path = new address[](2);
path[0] = fromToken;
path[1] = toToken;
} else {
path = new address[](3);
path[0] = fromToken;
path[1] = WETH;
path[2] = toToken;
}
uint256[] memory amounts = IUniV2(UNIV2_ROUTER).getAmountsOut(amountIn, path);
return amounts[amounts.length - 1];
}
}
"
},
"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);
}
"
},
"src/interfaces/deps/milkman/IUniV2.sol": {
"content": "// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.28;
interface IUniV2 {
function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);
}
"
}
},
"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
}
}}
Submitted on: 2025-11-01 12:10:32
Comments
Log in to comment.
No comments yet.