Contract Overview
Latest 25 from a total of 584634 transactions
Contract Name:
MimoV2Router02NoReferral
Compiler Version
v0.6.12+commit.27d51765
// Sources flattened with hardhat v2.3.0 https://hardhat.org // File contracts/swap/interfaces/IMimoPair.sol pragma solidity >=0.5.0; interface IMimoPair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); 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); event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); 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); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File contracts/swap/libraries/SafeMath.sol pragma solidity =0.6.12; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "division by zero"); uint256 c = a / b; return c; } } // File contracts/swap/libraries/MimoV2Library.sol pragma solidity >=0.5.0; library MimoV2Library { using SafeMath for uint256; // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, "MimoV2Library: IDENTICAL_ADDRESSES"); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), "MimoV2Library: ZERO_ADDRESS"); } // calculates the CREATE2 address for a pair without making any external calls function pairFor( address factory, address tokenA, address tokenB ) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address( uint256( keccak256( abi.encodePacked( hex"ff", factory, keccak256(abi.encodePacked(token0, token1)), hex"00d8258f07455ccf2a627e421c1b67a5235293aa73a2d17be60109e9200cb37f" // init code hash ) ) ) ); } // fetches and sorts the reserves for a pair function getReserves( address factory, address tokenA, address tokenB ) internal view returns (uint256 reserveA, uint256 reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); (uint256 reserve0, uint256 reserve1, ) = IMimoPair( pairFor(factory, tokenA, tokenB) ).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) internal pure returns (uint256 amountB) { require(amountA > 0, "MimoV2Library: INSUFFICIENT_AMOUNT"); require( reserveA > 0 && reserveB > 0, "MimoV2Library: INSUFFICIENT_LIQUIDITY" ); amountB = amountA.mul(reserveB) / reserveA; } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountOut) { require(amountIn > 0, "MimoV2Library: INSUFFICIENT_INPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "MimoV2Library: INSUFFICIENT_LIQUIDITY" ); uint256 amountInWithFee = amountIn.mul(997); uint256 numerator = amountInWithFee.mul(reserveOut); uint256 denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } // given an output amount of an asset and pair reserves, returns a required input amount of the other asset function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) internal pure returns (uint256 amountIn) { require(amountOut > 0, "MimoV2Library: INSUFFICIENT_OUTPUT_AMOUNT"); require( reserveIn > 0 && reserveOut > 0, "MimoV2Library: INSUFFICIENT_LIQUIDITY" ); uint256 numerator = reserveIn.mul(amountOut).mul(1000); uint256 denominator = reserveOut.sub(amountOut).mul(997); amountIn = (numerator / denominator).add(1); } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut( address factory, uint256 amountIn, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "MimoV2Library: INVALID_PATH"); amounts = new uint256[](path.length); amounts[0] = amountIn; for (uint256 i; i < path.length - 1; i++) { (uint256 reserveIn, uint256 reserveOut) = getReserves( factory, path[i], path[i + 1] ); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut); } } // performs chained getAmountIn calculations on any number of pairs function getAmountsIn( address factory, uint256 amountOut, address[] memory path ) internal view returns (uint256[] memory amounts) { require(path.length >= 2, "MimoV2Library: INVALID_PATH"); amounts = new uint256[](path.length); amounts[amounts.length - 1] = amountOut; for (uint256 i = path.length - 1; i > 0; i--) { (uint256 reserveIn, uint256 reserveOut) = getReserves( factory, path[i - 1], path[i] ); amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut); } } } // File contracts/swap/libraries/TransferHelper.sol pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0x095ea7b3, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: APPROVE_FAILED" ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0xa9059cbb, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FAILED" ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call( abi.encodeWithSelector(0x23b872dd, from, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper: TRANSFER_FROM_FAILED" ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, "TransferHelper: ETH_TRANSFER_FAILED"); } } // File contracts/swap/interfaces/IMimoFactory.sol pragma solidity >=0.5.0; interface IMimoFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function referral() external view returns (address); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setReferral(address) external; } // File contracts/swap/interfaces/IERC20.sol pragma solidity >=0.5.0; interface IERC20 { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); 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); } // File contracts/swap/interfaces/IWETH.sol pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } // File contracts/swap/MimoV2Router02NoReferral.sol pragma solidity =0.6.12; contract MimoV2Router02NoReferral { using SafeMath for uint256; address public immutable factory; address public immutable WETH; modifier ensure(uint256 deadline) { require(deadline >= block.timestamp, "MimoV2Router: EXPIRED"); _; } constructor(address _factory, address _WETH) public { factory = _factory; WETH = _WETH; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin ) internal virtual returns (uint256 amountA, uint256 amountB) { // create the pair if it doesn't exist yet if (IMimoFactory(factory).getPair(tokenA, tokenB) == address(0)) { IMimoFactory(factory).createPair(tokenA, tokenB); } (uint256 reserveA, uint256 reserveB) = MimoV2Library.getReserves( factory, tokenA, tokenB ); if (reserveA == 0 && reserveB == 0) { (amountA, amountB) = (amountADesired, amountBDesired); } else { uint256 amountBOptimal = MimoV2Library.quote( amountADesired, reserveA, reserveB ); if (amountBOptimal <= amountBDesired) { require( amountBOptimal >= amountBMin, "MimoV2Router: INSUFFICIENT_B_AMOUNT" ); (amountA, amountB) = (amountADesired, amountBOptimal); } else { uint256 amountAOptimal = MimoV2Library.quote( amountBDesired, reserveB, reserveA ); assert(amountAOptimal <= amountADesired); require( amountAOptimal >= amountAMin, "MimoV2Router: INSUFFICIENT_A_AMOUNT" ); (amountA, amountB) = (amountAOptimal, amountBDesired); } } } function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external virtual ensure(deadline) returns ( uint256 amountA, uint256 amountB, uint256 liquidity ) { (amountA, amountB) = _addLiquidity( tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin ); address pair = MimoV2Library.pairFor(factory, tokenA, tokenB); TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA); TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = IMimoPair(pair).mint(to); } function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable virtual ensure(deadline) returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ) { (amountToken, amountETH) = _addLiquidity( token, WETH, amountTokenDesired, msg.value, amountTokenMin, amountETHMin ); address pair = MimoV2Library.pairFor(factory, token, WETH); TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken); IWETH(WETH).deposit{value: amountETH}(); assert(IWETH(WETH).transfer(pair, amountETH)); liquidity = IMimoPair(pair).mint(to); // refund dust eth, if any if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) public virtual ensure(deadline) returns (uint256 amountA, uint256 amountB) { address pair = MimoV2Library.pairFor(factory, tokenA, tokenB); IMimoPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair (uint256 amount0, uint256 amount1) = IMimoPair(pair).burn(to); (address token0, ) = MimoV2Library.sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); require(amountA >= amountAMin, "MimoV2Router: INSUFFICIENT_A_AMOUNT"); require(amountB >= amountBMin, "MimoV2Router: INSUFFICIENT_B_AMOUNT"); } function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual ensure(deadline) returns (uint256 amountToken, uint256 amountETH) { (amountToken, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer(token, to, amountToken); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) **** function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) public virtual ensure(deadline) returns (uint256 amountETH) { (, amountETH) = removeLiquidity( token, WETH, liquidity, amountTokenMin, amountETHMin, address(this), deadline ); TransferHelper.safeTransfer( token, to, IERC20(token).balanceOf(address(this)) ); IWETH(WETH).withdraw(amountETH); TransferHelper.safeTransferETH(to, amountETH); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap( uint256[] memory amounts, address[] memory path, address _to ) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = MimoV2Library.sortTokens(input, output); uint256 amountOut = amounts[i + 1]; (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0)); address to = i < path.length - 2 ? MimoV2Library.pairFor(factory, output, path[i + 2]) : _to; IMimoPair(MimoV2Library.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual ensure(deadline) returns (uint256[] memory amounts) { amounts = MimoV2Library.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "MimoV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, MimoV2Library.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual ensure(deadline) returns (uint256[] memory amounts) { amounts = MimoV2Library.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "MimoV2Router: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, MimoV2Library.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable virtual ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, "MimoV2Router: INVALID_PATH"); amounts = MimoV2Library.getAmountsOut(factory, msg.value, path); require( amounts[amounts.length - 1] >= amountOutMin, "MimoV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).deposit{value: amounts[0]}(); assert( IWETH(WETH).transfer( MimoV2Library.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); } function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external virtual ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, "MimoV2Router: INVALID_PATH"); amounts = MimoV2Library.getAmountsIn(factory, amountOut, path); require( amounts[0] <= amountInMax, "MimoV2Router: EXCESSIVE_INPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, MimoV2Library.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual ensure(deadline) returns (uint256[] memory amounts) { require(path[path.length - 1] == WETH, "MimoV2Router: INVALID_PATH"); amounts = MimoV2Library.getAmountsOut(factory, amountIn, path); require( amounts[amounts.length - 1] >= amountOutMin, "MimoV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); TransferHelper.safeTransferFrom( path[0], msg.sender, MimoV2Library.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, address(this)); IWETH(WETH).withdraw(amounts[amounts.length - 1]); TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]); } function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable virtual ensure(deadline) returns (uint256[] memory amounts) { require(path[0] == WETH, "MimoV2Router: INVALID_PATH"); amounts = MimoV2Library.getAmountsIn(factory, amountOut, path); require( amounts[0] <= msg.value, "MimoV2Router: EXCESSIVE_INPUT_AMOUNT" ); IWETH(WETH).deposit{value: amounts[0]}(); assert( IWETH(WETH).transfer( MimoV2Library.pairFor(factory, path[0], path[1]), amounts[0] ) ); _swap(amounts, path, to); // refund dust eth, if any if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } // **** SWAP (supporting fee-on-transfer tokens) **** // requires the initial amount to have already been sent to the first pair function _swapSupportingFeeOnTransferTokens( address[] memory path, address _to ) internal virtual { for (uint256 i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = MimoV2Library.sortTokens(input, output); IMimoPair pair = IMimoPair( MimoV2Library.pairFor(factory, input, output) ); uint256 amountInput; uint256 amountOutput; { // scope to avoid stack too deep errors (uint256 reserve0, uint256 reserve1, ) = pair.getReserves(); (uint256 reserveInput, uint256 reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0); amountInput = IERC20(input).balanceOf(address(pair)).sub( reserveInput ); amountOutput = MimoV2Library.getAmountOut( amountInput, reserveInput, reserveOutput ); } (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(0)); address to = i < path.length - 2 ? MimoV2Library.pairFor(factory, output, path[i + 2]) : _to; pair.swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual ensure(deadline) { TransferHelper.safeTransferFrom( path[0], msg.sender, MimoV2Library.pairFor(factory, path[0], path[1]), amountIn ); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "MimoV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable virtual ensure(deadline) { require(path[0] == WETH, "MimoV2Router: INVALID_PATH"); uint256 amountIn = msg.value; IWETH(WETH).deposit{value: amountIn}(); assert( IWETH(WETH).transfer( MimoV2Library.pairFor(factory, path[0], path[1]), amountIn ) ); uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to); _swapSupportingFeeOnTransferTokens(path, to); require( IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin, "MimoV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external virtual ensure(deadline) { require(path[path.length - 1] == WETH, "MimoV2Router: INVALID_PATH"); TransferHelper.safeTransferFrom( path[0], msg.sender, MimoV2Library.pairFor(factory, path[0], path[1]), amountIn ); _swapSupportingFeeOnTransferTokens(path, address(this)); uint256 amountOut = IERC20(WETH).balanceOf(address(this)); require( amountOut >= amountOutMin, "MimoV2Router: INSUFFICIENT_OUTPUT_AMOUNT" ); IWETH(WETH).withdraw(amountOut); TransferHelper.safeTransferETH(to, amountOut); } // **** LIBRARY FUNCTIONS **** function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) public pure virtual returns (uint256 amountB) { return MimoV2Library.quote(amountA, reserveA, reserveB); } function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) public pure virtual returns (uint256 amountOut) { return MimoV2Library.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) public pure virtual returns (uint256 amountIn) { return MimoV2Library.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint256 amountIn, address[] memory path) public view virtual returns (uint256[] memory amounts) { return MimoV2Library.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint256 amountOut, address[] memory path) public view virtual returns (uint256[] memory amounts) { return MimoV2Library.getAmountsIn(factory, amountOut, path); } }
[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526004361061012e5760003560e01c80638803dbee116100ab578063baa2abde1161006f578063baa2abde146108a1578063c45a0155146108fe578063d06ca61f14610913578063e8e33700146109c8578063f305d71914610a48578063fb3bdb4114610a8e57610167565b80638803dbee146106cd578063ad5c464814610763578063ad615dec14610794578063af2979eb146107ca578063b6f9de951461081d57610167565b80634a25d94a116100f25780634a25d94a146104515780635c11d795146104e7578063791ac9471461057d5780637ff36ab51461061357806385f8c2591461069757610167565b806302751cec1461016c578063054d50d4146101d857806318cbafe5146102205780631f00ca741461030657806338ed1739146103bb57610167565b3661016757336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461016557fe5b005b600080fd5b34801561017857600080fd5b506101bf600480360360c081101561018f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610b12565b6040805192835260208301919091528051918290030190f35b3480156101e457600080fd5b5061020e600480360360608110156101fb57600080fd5b5080359060208101359060400135610c2c565b60408051918252519081900360200190f35b34801561022c57600080fd5b506102b6600480360360a081101561024357600080fd5b813591602081013591810190606081016040820135600160201b81111561026957600080fd5b82018360208201111561027b57600080fd5b803590602001918460208302840111600160201b8311171561029c57600080fd5b91935091506001600160a01b038135169060200135610c41565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102f25781810151838201526020016102da565b505050509050019250505060405180910390f35b34801561031257600080fd5b506102b66004803603604081101561032957600080fd5b81359190810190604081016020820135600160201b81111561034a57600080fd5b82018360208201111561035c57600080fd5b803590602001918460208302840111600160201b8311171561037d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610f6e945050505050565b3480156103c757600080fd5b506102b6600480360360a08110156103de57600080fd5b813591602081013591810190606081016040820135600160201b81111561040457600080fd5b82018360208201111561041657600080fd5b803590602001918460208302840111600160201b8311171561043757600080fd5b91935091506001600160a01b038135169060200135610fa4565b34801561045d57600080fd5b506102b6600480360360a081101561047457600080fd5b813591602081013591810190606081016040820135600160201b81111561049a57600080fd5b8201836020820111156104ac57600080fd5b803590602001918460208302840111600160201b831117156104cd57600080fd5b91935091506001600160a01b0381351690602001356110ef565b3480156104f357600080fd5b50610165600480360360a081101561050a57600080fd5b813591602081013591810190606081016040820135600160201b81111561053057600080fd5b82018360208201111561054257600080fd5b803590602001918460208302840111600160201b8311171561056357600080fd5b91935091506001600160a01b03813516906020013561127b565b34801561058957600080fd5b50610165600480360360a08110156105a057600080fd5b813591602081013591810190606081016040820135600160201b8111156105c657600080fd5b8201836020820111156105d857600080fd5b803590602001918460208302840111600160201b831117156105f957600080fd5b91935091506001600160a01b0381351690602001356114f8565b6102b66004803603608081101561062957600080fd5b81359190810190604081016020820135600160201b81111561064a57600080fd5b82018360208201111561065c57600080fd5b803590602001918460208302840111600160201b8311171561067d57600080fd5b91935091506001600160a01b038135169060200135611781565b3480156106a357600080fd5b5061020e600480360360608110156106ba57600080fd5b5080359060208101359060400135611acb565b3480156106d957600080fd5b506102b6600480360360a08110156106f057600080fd5b813591602081013591810190606081016040820135600160201b81111561071657600080fd5b82018360208201111561072857600080fd5b803590602001918460208302840111600160201b8311171561074957600080fd5b91935091506001600160a01b038135169060200135611ad8565b34801561076f57600080fd5b50610778611bd1565b604080516001600160a01b039092168252519081900360200190f35b3480156107a057600080fd5b5061020e600480360360608110156107b757600080fd5b5080359060208101359060400135611bf5565b3480156107d657600080fd5b5061020e600480360360c08110156107ed57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611c02565b6101656004803603608081101561083357600080fd5b81359190810190604081016020820135600160201b81111561085457600080fd5b82018360208201111561086657600080fd5b803590602001918460208302840111600160201b8311171561088757600080fd5b91935091506001600160a01b038135169060200135611d88565b3480156108ad57600080fd5b506101bf600480360360e08110156108c457600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356120f9565b34801561090a57600080fd5b5061077861233d565b34801561091f57600080fd5b506102b66004803603604081101561093657600080fd5b81359190810190604081016020820135600160201b81111561095757600080fd5b82018360208201111561096957600080fd5b803590602001918460208302840111600160201b8311171561098a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612361945050505050565b3480156109d457600080fd5b50610a2a60048036036101008110156109ec57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561238e565b60408051938452602084019290925282820152519081900360600190f35b610a2a600480360360c0811015610a5e57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356124c1565b6102b660048036036080811015610aa457600080fd5b81359190810190604081016020820135600160201b811115610ac557600080fd5b820183602082011115610ad757600080fd5b803590602001918460208302840111600160201b83111715610af857600080fd5b91935091506001600160a01b038135169060200135612754565b6000808242811015610b59576040805162461bcd60e51b81526020600482015260156024820152600080516020613e9d833981519152604482015290519081900360640190fd5b610b88897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6120f9565b9093509150610b98898685612acd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610bfe57600080fd5b505af1158015610c12573d6000803e3d6000fd5b50505050610c208583612c37565b50965096945050505050565b6000610c39848484612d2f565b949350505050565b60608142811015610c87576040805162461bcd60e51b81526020600482015260156024820152600080516020613e9d833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610cc157fe5b905060200201356001600160a01b03166001600160a01b031614610d1a576040805162461bcd60e51b815260206004820152601a6024820152600080516020613ee2833981519152604482015290519081900360640190fd5b610d787f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612e0792505050565b91508682600184510381518110610d8b57fe5b60200260200101511015610dd05760405162461bcd60e51b8152600401808060200182810382526028815260200180613fd86028913960400191505060405180910390fd5b610e6e86866000818110610de057fe5b905060200201356001600160a01b031633610e547f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610e2257fe5b905060200201356001600160a01b03168b8b6001818110610e3f57fe5b905060200201356001600160a01b0316612f53565b85600081518110610e6157fe5b6020026020010151613012565b610ead8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061316f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d83600185510381518110610eec57fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f2a57600080fd5b505af1158015610f3e573d6000803e3d6000fd5b50505050610f638483600185510381518110610f5657fe5b6020026020010151612c37565b509695505050505050565b6060610f9b7f000000000000000000000000000000000000000000000000000000000000000084846133ac565b90505b92915050565b60608142811015610fea576040805162461bcd60e51b81526020600482015260156024820152600080516020613e9d833981519152604482015290519081900360640190fd5b6110487f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612e0792505050565b9150868260018451038151811061105b57fe5b602002602001015110156110a05760405162461bcd60e51b8152600401808060200182810382526028815260200180613fd86028913960400191505060405180910390fd5b6110b086866000818110610de057fe5b610f638287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061316f915050565b60608142811015611135576040805162461bcd60e51b81526020600482015260156024820152600080516020613e9d833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061116f57fe5b905060200201356001600160a01b03166001600160a01b0316146111c8576040805162461bcd60e51b815260206004820152601a6024820152600080516020613ee2833981519152604482015290519081900360640190fd5b6112267f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133ac92505050565b9150868260008151811061123657fe5b60200260200101511115610dd05760405162461bcd60e51b8152600401808060200182810382526024815260200180613f6f6024913960400191505060405180910390fd5b80428110156112bf576040805162461bcd60e51b81526020600482015260156024820152600080516020613e9d833981519152604482015290519081900360640190fd5b611334858560008181106112cf57fe5b905060200201356001600160a01b03163361132e7f00000000000000000000000000000000000000000000000000000000000000008989600081811061131157fe5b905060200201356001600160a01b03168a8a6001818110610e3f57fe5b8a613012565b60008585600019810181811061134657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113a257600080fd5b505afa1580156113b6573d6000803e3d6000fd5b505050506040513d60208110156113cc57600080fd5b5051604080516020888102828101820190935288825292935061140e9290918991899182918501908490808284376000920191909152508892506134e4915050565b866114b1828888600019810181811061142357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561147f57600080fd5b505afa158015611493573d6000803e3d6000fd5b505050506040513d60208110156114a957600080fd5b5051906137e6565b10156114ee5760405162461bcd60e51b8152600401808060200182810382526028815260200180613fd86028913960400191505060405180910390fd5b5050505050505050565b804281101561153c576040805162461bcd60e51b81526020600482015260156024820152600080516020613e9d833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061157657fe5b905060200201356001600160a01b03166001600160a01b0316146115cf576040805162461bcd60e51b815260206004820152601a6024820152600080516020613ee2833981519152604482015290519081900360640190fd5b6115df858560008181106112cf57fe5b61161d8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506134e4915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561168c57600080fd5b505afa1580156116a0573d6000803e3d6000fd5b505050506040513d60208110156116b657600080fd5b50519050868110156116f95760405162461bcd60e51b8152600401808060200182810382526028815260200180613fd86028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561175f57600080fd5b505af1158015611773573d6000803e3d6000fd5b505050506114ee8482612c37565b606081428110156117c7576040805162461bcd60e51b81526020600482015260156024820152600080516020613e9d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106117fe57fe5b905060200201356001600160a01b03166001600160a01b031614611857576040805162461bcd60e51b815260206004820152601a6024820152600080516020613ee2833981519152604482015290519081900360640190fd5b6118b57f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612e0792505050565b915086826001845103815181106118c857fe5b6020026020010151101561190d5760405162461bcd60e51b8152600401808060200182810382526028815260200180613fd86028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061194957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561197c57600080fd5b505af1158015611990573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6119f57f00000000000000000000000000000000000000000000000000000000000000008989600081811061131157fe5b84600081518110611a0257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611a5057600080fd5b505af1158015611a64573d6000803e3d6000fd5b505050506040513d6020811015611a7a57600080fd5b5051611a8257fe5b611ac18287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061316f915050565b5095945050505050565b6000610c39848484613836565b60608142811015611b1e576040805162461bcd60e51b81526020600482015260156024820152600080516020613e9d833981519152604482015290519081900360640190fd5b611b7c7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133ac92505050565b91508682600081518110611b8c57fe5b602002602001015111156110a05760405162461bcd60e51b8152600401808060200182810382526024815260200180613f6f6024913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610c3984848461390e565b60008142811015611c48576040805162461bcd60e51b81526020600482015260156024820152600080516020613e9d833981519152604482015290519081900360640190fd5b611c77887f000000000000000000000000000000000000000000000000000000000000000089898930896120f9565b905080925050611d0088858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611ccf57600080fd5b505afa158015611ce3573d6000803e3d6000fd5b505050506040513d6020811015611cf957600080fd5b5051612acd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611d6657600080fd5b505af1158015611d7a573d6000803e3d6000fd5b50505050610f638483612c37565b8042811015611dcc576040805162461bcd60e51b81526020600482015260156024820152600080516020613e9d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031685856000818110611e0357fe5b905060200201356001600160a01b03166001600160a01b031614611e5c576040805162461bcd60e51b815260206004820152601a6024820152600080516020613ee2833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ebc57600080fd5b505af1158015611ed0573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611f357f00000000000000000000000000000000000000000000000000000000000000008989600081811061131157fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611f7c57600080fd5b505af1158015611f90573d6000803e3d6000fd5b505050506040513d6020811015611fa657600080fd5b5051611fae57fe5b600086866000198101818110611fc057fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561201c57600080fd5b505afa158015612030573d6000803e3d6000fd5b505050506040513d602081101561204657600080fd5b505160408051602089810282810182019093528982529293506120889290918a918a9182918501908490808284376000920191909152508992506134e4915050565b876114b1828989600019810181811061209d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561147f57600080fd5b6000808242811015612140576040805162461bcd60e51b81526020600482015260156024820152600080516020613e9d833981519152604482015290519081900360640190fd5b600061216d7f00000000000000000000000000000000000000000000000000000000000000008c8c612f53565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b1580156121c857600080fd5b505af11580156121dc573d6000803e3d6000fd5b505050506040513d60208110156121f257600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561223f57600080fd5b505af1158015612253573d6000803e3d6000fd5b505050506040513d604081101561226957600080fd5b508051602090910151909250905060006122838e8e6139b4565b509050806001600160a01b03168e6001600160a01b0316146122a65781836122a9565b82825b90975095508a8710156122ed5760405162461bcd60e51b81526004018080602001828103825260238152602001806140006023913960400191505060405180910390fd5b8986101561232c5760405162461bcd60e51b8152600401808060200182810382526023815260200180613f246023913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060610f9b7f00000000000000000000000000000000000000000000000000000000000000008484612e07565b600080600083428110156123d7576040805162461bcd60e51b81526020600482015260156024820152600080516020613e9d833981519152604482015290519081900360640190fd5b6123e58c8c8c8c8c8c613a92565b909450925060006124177f00000000000000000000000000000000000000000000000000000000000000008e8e612f53565b90506124258d338388613012565b6124318c338387613012565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561248057600080fd5b505af1158015612494573d6000803e3d6000fd5b505050506040513d60208110156124aa57600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561250a576040805162461bcd60e51b81526020600482015260156024820152600080516020613e9d833981519152604482015290519081900360640190fd5b6125388a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613a92565b9094509250600061258a7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000612f53565b90506125988b338388613012565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156125f357600080fd5b505af1158015612607573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561268357600080fd5b505af1158015612697573d6000803e3d6000fd5b505050506040513d60208110156126ad57600080fd5b50516126b557fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b15801561270457600080fd5b505af1158015612718573d6000803e3d6000fd5b505050506040513d602081101561272e57600080fd5b50519250348410156127465761274633853403612c37565b505096509650969350505050565b6060814281101561279a576040805162461bcd60e51b81526020600482015260156024820152600080516020613e9d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106127d157fe5b905060200201356001600160a01b03166001600160a01b03161461282a576040805162461bcd60e51b815260206004820152601a6024820152600080516020613ee2833981519152604482015290519081900360640190fd5b6128887f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506133ac92505050565b9150348260008151811061289857fe5b602002602001015111156128dd5760405162461bcd60e51b8152600401808060200182810382526024815260200180613f6f6024913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061291957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561294c57600080fd5b505af1158015612960573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6129c57f00000000000000000000000000000000000000000000000000000000000000008989600081811061131157fe5b846000815181106129d257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612a2057600080fd5b505af1158015612a34573d6000803e3d6000fd5b505050506040513d6020811015612a4a57600080fd5b5051612a5257fe5b612a918287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061316f915050565b81600081518110612a9e57fe5b6020026020010151341115611ac157611ac13383600081518110612abe57fe5b60200260200101513403612c37565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310612b4a5780518252601f199092019160209182019101612b2b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612bac576040519150601f19603f3d011682016040523d82523d6000602084013e612bb1565b606091505b5091509150818015612bdf575080511580612bdf5750808060200190516020811015612bdc57600080fd5b50515b612c30576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310612c835780518252601f199092019160209182019101612c64565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612ce5576040519150601f19603f3d011682016040523d82523d6000602084013e612cea565b606091505b5050905080612d2a5760405162461bcd60e51b8152600401808060200182810382526023815260200180613fb56023913960400191505060405180910390fd5b505050565b6000808411612d6f5760405162461bcd60e51b8152600401808060200182810382526028815260200180613f476028913960400191505060405180910390fd5b600083118015612d7f5750600082115b612dba5760405162461bcd60e51b8152600401808060200182810382526025815260200180613ebd6025913960400191505060405180910390fd5b6000612dc8856103e5613d23565b90506000612dd68285613d23565b90506000612df083612dea886103e8613d23565b90613d86565b9050808281612dfb57fe5b04979650505050505050565b6060600282511015612e60576040805162461bcd60e51b815260206004820152601b60248201527f4d696d6f56324c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015612e7857600080fd5b50604051908082528060200260200182016040528015612ea2578160200160208202803683370190505b5090508281600081518110612eb357fe5b60200260200101818152505060005b6001835103811015612f4b57600080612f0587868581518110612ee157fe5b6020026020010151878660010181518110612ef857fe5b6020026020010151613dd5565b91509150612f27848481518110612f1857fe5b60200260200101518383612d2f565b848460010181518110612f3657fe5b60209081029190910101525050600101612ec2565b509392505050565b6000806000612f6285856139b4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527ed8258f07455ccf2a627e421c1b67a5235293aa73a2d17be60109e9200cb37f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106130975780518252601f199092019160209182019101613078565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130f9576040519150601f19603f3d011682016040523d82523d6000602084013e6130fe565b606091505b509150915081801561312c57508051158061312c575080806020019051602081101561312957600080fd5b50515b6131675760405162461bcd60e51b81526004018080602001828103825260248152602001806140236024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156133a65760008084838151811061318d57fe5b60200260200101518584600101815181106131a457fe5b60200260200101519150915060006131bc83836139b4565b50905060008785600101815181106131d057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146131fe57826000613202565b6000835b91509150600060028a51038810613219578861325a565b61325a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061324d57fe5b6020026020010151612f53565b90506132877f00000000000000000000000000000000000000000000000000000000000000008888612f53565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156132c4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561332c578181015183820152602001613314565b50505050905090810190601f1680156133595780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561337b57600080fd5b505af115801561338f573d6000803e3d6000fd5b505060019099019850613172975050505050505050565b50505050565b6060600282511015613405576040805162461bcd60e51b815260206004820152601b60248201527f4d696d6f56324c6962726172793a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561341d57600080fd5b50604051908082528060200260200182016040528015613447578160200160208202803683370190505b509050828160018351038151811061345b57fe5b60209081029190910101528151600019015b8015612f4b5760008061349d8786600186038151811061348957fe5b6020026020010151878681518110612ef857fe5b915091506134bf8484815181106134b057fe5b60200260200101518383613836565b8460018503815181106134ce57fe5b602090810291909101015250506000190161346d565b60005b6001835103811015612d2a5760008084838151811061350257fe5b602002602001015185846001018151811061351957fe5b602002602001015191509150600061353183836139b4565b50905060006135617f00000000000000000000000000000000000000000000000000000000000000008585612f53565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156135a257600080fd5b505afa1580156135b6573d6000803e3d6000fd5b505050506040513d60608110156135cc57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613602578284613605565b83835b9150915061365a828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561147f57600080fd5b9550613667868383612d2f565b945050505050600080856001600160a01b0316886001600160a01b03161461369157826000613695565b6000835b91509150600060028c51038a106136ac578a6136e0565b6136e07f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061324d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b8381101561376a578181015183820152602001613752565b50505050905090810190601f1680156137975780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b50506001909b019a506134e79950505050505050505050565b80820382811115610f9e576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008084116138765760405162461bcd60e51b81526004018080602001828103825260298152602001806140476029913960400191505060405180910390fd5b6000831180156138865750600082115b6138c15760405162461bcd60e51b8152600401808060200182810382526025815260200180613ebd6025913960400191505060405180910390fd5b60006138d96103e86138d38688613d23565b90613d23565b905060006138ed6103e56138d386896137e6565b905061390460018284816138fd57fe5b0490613d86565b9695505050505050565b600080841161394e5760405162461bcd60e51b8152600401808060200182810382526022815260200180613f026022913960400191505060405180910390fd5b60008311801561395e5750600082115b6139995760405162461bcd60e51b8152600401808060200182810382526025815260200180613ebd6025913960400191505060405180910390fd5b826139a48584613d23565b816139ab57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613a085760405162461bcd60e51b8152600401808060200182810382526022815260200180613f936022913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613a28578284613a2b565b83835b90925090506001600160a01b038216613a8b576040805162461bcd60e51b815260206004820152601b60248201527f4d696d6f56324c6962726172793a205a45524f5f414444524553530000000000604482015290519081900360640190fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b158015613b1e57600080fd5b505afa158015613b32573d6000803e3d6000fd5b505050506040513d6020811015613b4857600080fd5b50516001600160a01b03161415613c06577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b158015613bd957600080fd5b505af1158015613bed573d6000803e3d6000fd5b505050506040513d6020811015613c0357600080fd5b50505b600080613c347f00000000000000000000000000000000000000000000000000000000000000008b8b613dd5565b91509150816000148015613c46575080155b15613c5657879350869250613d16565b6000613c6389848461390e565b9050878111613cb65785811015613cab5760405162461bcd60e51b8152600401808060200182810382526023815260200180613f246023913960400191505060405180910390fd5b889450925082613d14565b6000613cc389848661390e565b905089811115613ccf57fe5b87811015613d0e5760405162461bcd60e51b81526004018080602001828103825260238152602001806140006023913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580613d3e57505080820282828281613d3b57fe5b04145b610f9e576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610f9e576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000806000613de485856139b4565b509050600080613df5888888612f53565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613e2d57600080fd5b505afa158015613e41573d6000803e3d6000fd5b505050506040513d6060811015613e5757600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614613e8a578082613e8d565b81815b9099909850965050505050505056fe4d696d6f5632526f757465723a204558504952454400000000000000000000004d696d6f56324c6962726172793a20494e53554646494349454e545f4c49515549444954594d696d6f5632526f757465723a20494e56414c49445f504154480000000000004d696d6f56324c6962726172793a20494e53554646494349454e545f414d4f554e544d696d6f5632526f757465723a20494e53554646494349454e545f425f414d4f554e544d696d6f56324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544d696d6f5632526f757465723a204558434553534956455f494e5055545f414d4f554e544d696d6f56324c6962726172793a204944454e544943414c5f4144445245535345535472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444d696d6f5632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544d696d6f5632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c45444d696d6f56324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54a26469706673582212202d3dea9a32169db938068bfb246c15b23848360cc58747d272c74df8b12370f064736f6c634300060c0033
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for
interesting conversations.