FTM Price: $1.01 (-0.36%)
Gas: 124 GWei

Contract

0x00fB622c2e3663Fa5D3364f2Ce6011720B3bc145
 

Overview

FTM Balance

Fantom LogoFantom LogoFantom Logo0 FTM

FTM Value

$0.00

Sponsored

Transaction Hash
Method
Block
From
To
Value
0x60806040329169052022-03-09 0:08:39750 days ago1646784519IN
 Create: UniswapV2DexHandler
0 FTM0.08560891312.6958

Latest 1 internal transaction

Parent Txn Hash Block From To Value
329169052022-03-09 0:08:39750 days ago1646784519  Contract Creation0 FTM
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniswapV2DexHandler

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 3 : UniswapV2DexHandler.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import "./interfaces/IDexHandler.sol";
import "./interfaces/IUniswapV2Pair.sol";

interface IUniswapV2Router {
    function factory() external view returns (address);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);
}

interface IUniswapV2Factory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

contract UniswapV2DexHandler is IDexHandler {
    constructor() {}

    function getAmountOut(
        address _dex,
        uint256 _amountIn,
        address _tokenIn,
        address _tokenOut
    ) external view override returns (address pair, uint256 amountOut) {
        address factory = IUniswapV2Router(_dex).factory();
        pair = IUniswapV2Factory(factory).getPair(_tokenIn, _tokenOut);
        if (pair != address(0)) {
            (uint256 reserveIn, uint256 reserveOut, ) = IUniswapV2Pair(pair).getReserves();
            if (_tokenIn > _tokenOut) {
                (reserveIn, reserveOut) = (reserveOut, reserveIn);
            }
            amountOut = IUniswapV2Router(_dex).getAmountOut(_amountIn, reserveIn, reserveOut);
            if (amountOut == 0) {
                pair = address(0);
            }
        }
    }
}

File 2 of 3 : IDexHandler.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;

interface IDexHandler {
    function getAmountOut(
        address _dex,
        uint256 _amountIn,
        address _tokenIn,
        address _tokenOut
    ) external view returns (address pair, uint256 amountOut);
}

File 3 of 3 : IUniswapV2Pair.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_dex","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b506103fd806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631ad0cdb514610030575b600080fd5b61004361003e3660046102f7565b610066565b604080516001600160a01b03909316835260208301919091520160405180910390f35b6000806000866001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156100a457600080fd5b505afa1580156100b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100dc91906102d4565b60405163e6a4390560e01b81526001600160a01b03878116600483015286811660248301529192509082169063e6a439059060440160206040518083038186803b15801561012957600080fd5b505afa15801561013d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061016191906102d4565b92506001600160a01b038316156102ae57600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156101ae57600080fd5b505afa1580156101c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e69190610349565b506001600160701b031691506001600160701b03169150856001600160a01b0316876001600160a01b0316111561021957905b604051630153543560e21b81526004810189905260248101839052604481018290526001600160a01b038a169063054d50d49060640160206040518083038186803b15801561026757600080fd5b505afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190610397565b9350836102ab57600094505b50505b5094509492505050565b80516001600160701b03811681146102cf57600080fd5b919050565b6000602082840312156102e5578081fd5b81516102f0816103af565b9392505050565b6000806000806080858703121561030c578283fd5b8435610317816103af565b935060208501359250604085013561032e816103af565b9150606085013561033e816103af565b939692955090935050565b60008060006060848603121561035d578283fd5b610366846102b8565b9250610374602085016102b8565b9150604084015163ffffffff8116811461038c578182fd5b809150509250925092565b6000602082840312156103a8578081fd5b5051919050565b6001600160a01b03811681146103c457600080fd5b5056fea26469706673582212206d5a3704df1ceb3750f35db69c33173b38709b44b1155b827ba3204575cbf02f64736f6c63430008040033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80631ad0cdb514610030575b600080fd5b61004361003e3660046102f7565b610066565b604080516001600160a01b03909316835260208301919091520160405180910390f35b6000806000866001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156100a457600080fd5b505afa1580156100b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100dc91906102d4565b60405163e6a4390560e01b81526001600160a01b03878116600483015286811660248301529192509082169063e6a439059060440160206040518083038186803b15801561012957600080fd5b505afa15801561013d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061016191906102d4565b92506001600160a01b038316156102ae57600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156101ae57600080fd5b505afa1580156101c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e69190610349565b506001600160701b031691506001600160701b03169150856001600160a01b0316876001600160a01b0316111561021957905b604051630153543560e21b81526004810189905260248101839052604481018290526001600160a01b038a169063054d50d49060640160206040518083038186803b15801561026757600080fd5b505afa15801561027b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029f9190610397565b9350836102ab57600094505b50505b5094509492505050565b80516001600160701b03811681146102cf57600080fd5b919050565b6000602082840312156102e5578081fd5b81516102f0816103af565b9392505050565b6000806000806080858703121561030c578283fd5b8435610317816103af565b935060208501359250604085013561032e816103af565b9150606085013561033e816103af565b939692955090935050565b60008060006060848603121561035d578283fd5b610366846102b8565b9250610374602085016102b8565b9150604084015163ffffffff8116811461038c578182fd5b809150509250925092565b6000602082840312156103a8578081fd5b5051919050565b6001600160a01b03811681146103c457600080fd5b5056fea26469706673582212206d5a3704df1ceb3750f35db69c33173b38709b44b1155b827ba3204575cbf02f64736f6c63430008040033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.