Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Fee Pool | 12366759 | 1375 days ago | IN | 0 ETH | 0.00160811 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
DextokenFactoryCollateral
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: LGPL-3.0-or-later pragma solidity 0.5.17; import "./Math.sol"; import "./SafeMath.sol"; import "./DextokenPoolCollateral.sol"; contract DextokenFactoryCollateral { using SafeMath for uint; event PoolCreated(address indexed token0, address indexed pair, address indexed creator, uint); address public owner; address public feePool; address public collateral; mapping(address => mapping(address => address)) private _allPools; address [] public allPoolsAddress; constructor(address token1) public { owner = msg.sender; feePool = address(0); collateral = token1; } function createPool(address token0, uint Ct, uint Pt) external returns (address pool) { require(token0 != address(0), 'createPool: zero address'); require(feePool != address(0), 'createPool: feePool not set'); require(_allPools[token0][msg.sender] == address(0), 'createPool: user pool exists'); bytes memory bytecode = type(DextokenPoolCollateral).creationCode; bytes32 salt = keccak256(abi.encodePacked(token0, collateral, msg.sender)); /// precompute the address where a contract will be deployed assembly { pool := create2(0, add(bytecode, 32), mload(bytecode), salt) } IDextokenPool(pool).initialize(token0, collateral, Ct, Pt); _allPools[token0][msg.sender] = pool; allPoolsAddress.push(pool); emit PoolCreated(token0, pool, msg.sender, allPoolsAddress.length); return pool; } function getFeePool() external view returns (address) { return feePool; } function setFeePool(address _feePool) external { require(msg.sender == owner, "setFeePool: Forbidden"); feePool = _feePool; } function getAllPools() external view returns (address [] memory) { return allPoolsAddress; } }
pragma solidity 0.5.17; /** * @title Address * @dev Check if the address is a contract using eip-1052 */ library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } }
pragma solidity 0.5.17; contract Context { constructor () internal { } function _msgSender() internal view returns (address payable) { return msg.sender; } }
// SPDX-License-Identifier: LGPL-3.0-or-later pragma solidity 0.5.17; import "./Math.sol"; import "./SafeMath.sol"; import "./SafeERC20.sol"; import "./ReentrancyGuard.sol"; import "./IDextokenPool.sol"; import "./IDextokenFactory.sol"; import "./LPToken.sol"; contract DextokenPoolCollateral is LPToken, IDextokenPool, ReentrancyGuard { using SafeERC20 for IERC20; using SafeMath for uint; /// AMM fee uint public constant FEE_BASE = 100; // 1% uint public constant FEE_FACTOR = 3; IDextokenFactory public factory; /// The collateral token IERC20 public COLLATERAL; /// Pooling uint public totalLiquidity; IERC20 public token0; /// Speculative AMM struct AMM { uint Ct; uint Pt; uint Nt; uint lastUpdateTime; } /// AMM states AMM private _AMM; modifier updatePriceTick() { _; /// step the price tick (t+1) _AMM.lastUpdateTime = _lastPriceTickApplicable(); } constructor() public { factory = IDextokenFactory(msg.sender); _AMM.lastUpdateTime = 0; totalLiquidity = 0; } function initialize(address _token0, address _token1, uint _Ct, uint _Pt) external { require(msg.sender == address(factory), 'initialize: Forbidden'); token0 = IERC20(_token0); require(_Ct <= token0.totalSupply(), "initialize: Invalid _Ct"); /// snapshot of the pooled token _AMM.Ct = _Ct; _AMM.Pt = _Pt; _AMM.Nt = _AMM.Pt.mul(_AMM.Ct).div(1e18); /// The collateral token COLLATERAL = IERC20(_token1); } function deposit(uint amount) external nonReentrant updatePriceTick() { require(amount > 0, "deposit: invalid amount"); uint _totalBalance = getPoolBalance(); address _token0 = address(token0); uint _Ct = _AMM.Ct.add(amount); uint _Nt = _AMM.Nt; // liquidity at price tick (t) uint spotPrice = getSpotPrice(_Ct, _Nt); uint liquidity = spotPrice.mul(amount); require(liquidity > 0, "deposit: invalid user liquidity"); _totalBalance = _totalBalance.add(amount); uint _totalLiquidity = totalLiquidity.add(liquidity); // mint liquidity tokens uint mintedTokens = _calcLiquidityToken(_totalLiquidity, _totalBalance, liquidity); /// calculate the virtual collateral tokens at price tick (t) uint _Mb = COLLATERAL.balanceOf(address(this)).mul(mintedTokens).div(totalSupply().add(mintedTokens)); // move price tick to (t+1) _AMM.Ct = _Ct; _AMM.Nt = _Nt.add(_Mb); totalLiquidity = _totalLiquidity; // mint liquidity token at price tick (t+1) _mintLiquidityToken(msg.sender, mintedTokens); _tokenSafeTransferFrom(_token0, msg.sender, address(this), amount); emit TokenDeposit(_token0, msg.sender, amount, spotPrice); } function withdraw(uint tokens) external nonReentrant updatePriceTick() { require(tokens > 0, "withdraw: invalid tokens"); require(totalSupply() > 0, "withdraw: insufficient liquidity"); require(balanceOf(msg.sender) >= tokens, "withdraw: insufficient tokens"); address _token0 = address(token0); // liquidity at price tick (t) uint amount = liquidityTokenToAmount(tokens); /// calculate the collateral token shares uint balance = COLLATERAL.balanceOf(address(this)); uint amountOut = balance.mul(tokens).div(totalSupply()); /// Ensure the amountOut is not more than the balance in the contract. /// Preventing underflow due to very low values of the balance. require(amountOut <= balance, "withdraw: insufficient ETH balance"); // prepare for price tick (t+1) uint _Ct = _AMM.Ct; uint _Nt = _AMM.Nt; _Ct = _Ct.sub(amount); _Nt = _Nt.sub(amountOut); // liquidity at price tick (t+1) uint spotPrice = getSpotPrice(_Ct, _Nt); totalLiquidity = spotPrice.mul(getPoolBalance().sub(amount)); _AMM.Ct = _Ct; _AMM.Nt = _Nt; _tokenSafeTransfer(_token0, msg.sender, amount); _tokenSafeTransfer(address(COLLATERAL), msg.sender, amountOut); _burnLiquidityToken(msg.sender, tokens); emit TokenWithdraw(_token0, msg.sender, amount, spotPrice); } function swapExactETHForTokens( uint amountIn, uint minAmountOut, uint maxPrice, uint deadline ) external nonReentrant returns (uint) { require(COLLATERAL.balanceOf(msg.sender) >= amountIn, "swapExactETHForTokens: Insufficient collateral balance"); require(deadline > _lastPriceTickApplicable(), "swapExactETHForTokens: Invalid transaction"); require(amountIn > 0, "swapExactETHForTokens: Invalid amountIn"); uint spotPrice; IERC20 _COLLATERAL = COLLATERAL; /// the price tick at (t) /// increase the collateral token supply including interests rate { spotPrice = getSpotPrice(_AMM.Ct, _AMM.Nt.add(amountIn)); require(spotPrice <= maxPrice, "swapExactETHForTokens: Invalid price slippage"); } /// check amount out without fees uint amountOut = amountIn.mul(1e18).div(spotPrice); require(amountOut >= minAmountOut, "swapExactETHForTokens: Invalid amountOut"); /// split fees and check exact amount out uint feeAmountIn = _calcFees(amountIn); uint exactAmountIn = amountIn.sub(feeAmountIn); uint exactAmountOut = exactAmountIn.mul(1e18).div(spotPrice); /// increase the collateral token supply _AMM.Nt = _AMM.Nt.add(exactAmountIn); spotPrice = getSpotPrice(_AMM.Ct.sub(exactAmountOut), _AMM.Nt); totalLiquidity = spotPrice.mul(getPoolBalance().sub(exactAmountOut)); /// transfer the collateral tokens in _tokenSafeTransferFrom(address(_COLLATERAL), msg.sender, address(this), amountIn); /// transfer fees _tokenSafeTransfer(address(_COLLATERAL), factory.getFeePool(), feeAmountIn); /// move to the next price tick (t+1) _withdrawAndTransfer(msg.sender, exactAmountOut); emit SwapExactETHForTokens(address(this), exactAmountOut, amountIn, spotPrice, msg.sender); return exactAmountOut; } function swapExactTokensForETH( uint amountIn, uint minAmountOut, uint minPrice, uint deadline ) external nonReentrant returns (uint) { require(token0.balanceOf(msg.sender) >= amountIn, "swapExactTokensForETH: Insufficient user balance"); require(deadline > _lastPriceTickApplicable(), "swapExactTokensForETH: Invalid order"); require(amountIn > 0, "swapExactTokensForETH: Invalid amountIn"); uint _Nt = _AMM.Nt; IERC20 _COLLATERAL = COLLATERAL; /// add liquidity at the price tick (t) uint spotPrice = getSpotPrice(_AMM.Ct.add(amountIn), _Nt); require(spotPrice >= minPrice, "swapExactTokensForETH: Invalid price slippage"); /// user receives uint amountOut = spotPrice.mul(amountIn).div(1e18); require(_COLLATERAL.balanceOf(address(this)) >= amountOut, "swapExactTokensForETH: Insufficient collateral liquidity"); require(amountOut >= minAmountOut, "swapExactTokensForETH: Invalid amountOut"); /// split fees uint feeAmountOut = _calcFees(amountOut); uint exactAmountOut = amountOut.sub(feeAmountOut); /// decrease the collateral token, and add liquidity /// providers' fee shares back to the pool _AMM.Nt = _Nt.sub(exactAmountOut); totalLiquidity = spotPrice.mul(getPoolBalance().add(amountIn)); /// move the next price tick (t+1) _depositAndTransfer(msg.sender, amountIn); /// transfer the collateral token out _tokenSafeTransfer(address(_COLLATERAL), msg.sender, exactAmountOut); emit SwapExactTokensForETH(address(this), exactAmountOut, amountIn, spotPrice, msg.sender); return exactAmountOut; } function getLastUpdateTime() external view returns (uint) { return _AMM.lastUpdateTime; } function getCirculatingSupply() external view returns (uint) { return _AMM.Ct; } function getUserbase() external view returns (uint) { return _AMM.Nt; } function getToken() external view returns (address) { return address(token0); } function getTotalLiquidity() external view returns (uint) { return totalLiquidity.div(1e18); } function liquidityOf(address account) external view returns (uint) { return balanceOf(account); } function liquiditySharesOf(address account) external view returns (uint) { uint userTokens = balanceOf(account); if (userTokens == 0) { return 0; } return totalSupply() .mul(1e18) .div(userTokens); } function mean() public view returns (uint) { return _AMM.Nt .mul(_AMM.Pt); } function getPoolBalance() public view returns (uint) { return token0.balanceOf(address(this)); } function getPrice() public view returns (uint) { return _AMM.Nt.mul(1e18).div(_AMM.Ct); } function getSpotPrice(uint _Ct, uint _Nt) public pure returns (uint) { return _Nt.mul(1e18).div(_Ct); } function liquidityTokenToAmount(uint token) public view returns (uint) { if (totalSupply() == 0) { return 0; } return getPoolBalance() .mul(token) .div(totalSupply()); } function liquidityFromAmount(uint amount) public view returns (uint) { return getPrice().mul(amount); } function _depositAndTransfer(address account, uint amount) internal updatePriceTick() { _AMM.Ct = _AMM.Ct.add(amount); _tokenSafeTransferFrom(address(token0), account, address(this), amount); } function _withdrawAndTransfer(address account, uint amount) internal updatePriceTick() { _AMM.Ct = _AMM.Ct.sub(amount); _tokenSafeTransfer(address(token0), account, amount); } function _lastPriceTickApplicable() internal view returns (uint) { return Math.max(block.timestamp, _AMM.lastUpdateTime); } function _mintLiquidityToken(address to, uint amount) internal { _mint(address(this), amount); _transfer(address(this), to, amount); } function _burnLiquidityToken(address from, uint amount) internal { _transfer(from, address(this), amount); _burn(address(this), amount); } function _calcFees(uint amount) internal pure returns (uint) { return amount.mul(FEE_FACTOR).div(FEE_BASE); } function _calcLiquidityToken( uint _totalLiquidity, uint _totalBalance, uint _liquidity ) internal pure returns (uint) { if (_totalLiquidity == 0) { return 0; } return _totalBalance .mul(_liquidity) .div(_totalLiquidity); } function _tokenSafeTransfer( address token, address to, uint amount ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "_tokenSafeTransfer failed"); } function _tokenSafeTransferFrom( address token, address from, address to, uint amount ) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "_tokenSafeTransferFrom failed"); } }
pragma solidity 0.5.17; import "./Context.sol"; import "./IERC20.sol"; import "./SafeMath.sol"; /** * @dev The ERC20 standard implementation. */ contract ERC20 is Context, IERC20 { using SafeMath for uint; mapping (address => uint) private _balances; mapping (address => mapping (address => uint)) private _allowances; uint private _totalSupply; function totalSupply() public view returns (uint) { return _totalSupply; } function balanceOf(address account) public view returns (uint) { return _balances[account]; } function transfer(address recipient, uint amount) public returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view returns (uint) { return _allowances[owner][spender]; } function approve(address spender, uint amount) public returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint amount) public returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint addedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint subtractedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer(address sender, address recipient, uint amount) internal { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint amount) internal { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint amount) internal { require(account != address(0), "ERC20: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve(address owner, address spender, uint amount) internal { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } }
pragma solidity 0.5.17; import "./IERC20.sol"; contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; constructor (string memory name, string memory symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } }
pragma solidity 0.5.17; interface IDextokenExchange { event SwapExactAmountOut( address indexed poolIn, uint amountSwapIn, address indexed poolOut, uint exactAmountOut, address indexed to ); event SwapExactAmountIn( address indexed poolIn, uint amountSwapIn, address indexed poolOut, uint exactAmountOut, address indexed to ); function swapMaxAmountOut( address poolIn, address poolOut, uint maxAmountOut, uint deadline ) external; function swapExactAmountIn( address poolIn, address poolOut, uint exactAmountIn, uint deadline ) external; }
pragma solidity 0.5.17; interface IDextokenFactory { function getFeePool() external view returns (address); }
pragma solidity 0.5.17; interface IDextokenPool { event TokenDeposit( address indexed token, address indexed account, uint amount, uint spotPrice ); event TokenWithdraw( address indexed token, address indexed account, uint amount, uint spotPrice ); event SwapExactETHForTokens( address indexed poolOut, uint amountOut, uint amountIn, uint spotPrice, address indexed account ); event SwapExactTokensForETH( address indexed poolOut, uint amountOut, uint amountIn, uint spotPrice, address indexed account ); /// Speculative AMM function initialize(address _token0, address _token1, uint _Ct, uint _Pt) external; function mean() external view returns (uint); function getLastUpdateTime() external view returns (uint); function getCirculatingSupply() external view returns (uint); function getUserbase() external view returns (uint); function getPrice() external view returns (uint); function getSpotPrice(uint _Ct, uint _Nt) external pure returns (uint); function getToken() external view returns (address); /// Pool Management function getPoolBalance() external view returns (uint); function getTotalLiquidity() external view returns (uint); function liquidityOf(address account) external view returns (uint); function liquiditySharesOf(address account) external view returns (uint); function liquidityTokenToAmount(uint token) external view returns (uint); function liquidityFromAmount(uint amount) external view returns (uint); function deposit(uint amount) external; function withdraw(uint tokens) external; /// Trading function swapExactETHForTokens( uint amountIn, uint minAmountOut, uint maxPrice, uint deadline ) external returns (uint); function swapExactTokensForETH( uint amountIn, uint minAmountOut, uint minPrice, uint deadline ) external returns (uint); }
pragma solidity 0.5.17; interface IERC20 { function totalSupply() external view returns (uint); function balanceOf(address account) external view returns (uint); function transfer(address recipient, uint amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint amount) external returns (bool); function transferFrom(address sender, address recipient, uint amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); }
pragma solidity 0.5.17; interface IWETH { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function balanceOf(address) external view returns (uint); function allowance(address, address) external view returns (uint); function deposit() external payable; function withdraw(uint wad) external; function totalSupply() external view returns (uint); function approve(address guy, uint wad) external returns (bool); function transfer(address dst, uint wad) external returns (bool); function transferFrom(address src, address dst, uint wad) external returns (bool); }
// SPDX-License-Identifier: LGPL-3.0-or-later pragma solidity 0.5.17; import "./ERC20.sol"; contract LPToken is ERC20 { string public constant name = "DEXG Liquidity Pool"; string public constant symbol = "DEXG-LP"; uint8 public constant decimals = 18; }
pragma solidity ^0.5.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } }
pragma solidity 0.5.17; contract Migrations { address public owner; uint public last_completed_migration; constructor() public { owner = msg.sender; } modifier restricted() { if (msg.sender == owner) _; } function setCompleted(uint completed) public restricted { last_completed_migration = completed; } }
pragma solidity ^0.5.17; contract Ownable { address public owner; address public newOwner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() public { owner = msg.sender; newOwner = address(0); } modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyNewOwner() { require(msg.sender != address(0)); require(msg.sender == newOwner); _; } function isOwner(address account) public view returns (bool) { if(account == owner) { return true; } else { return false; } } function transferOwnership(address _newOwner) public onlyOwner { require(_newOwner != address(0)); newOwner = _newOwner; } function acceptOwnership() public onlyNewOwner { emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } }
pragma solidity ^0.5.17; import "./Owned.sol"; contract Pausable is Ownable { event Paused(address account); event Unpaused(address account); bool private _paused; constructor () public { _paused = false; } modifier whenNotPaused() { require(!_paused); _; } modifier whenPaused() { require(_paused); _; } function paused() public view returns (bool) { return _paused; } function pause() public onlyOwner whenNotPaused { _paused = true; emit Paused(msg.sender); } function unpause() public onlyOwner whenPaused { _paused = false; emit Unpaused(msg.sender); } }
pragma solidity ^0.5.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the `nonReentrant` modifier * available, which can be aplied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. */ contract ReentrancyGuard { /// @dev counter to allow mutex lock with only one SSTORE operation uint256 private _guardCounter; constructor () internal { // The counter starts at one to prevent changing it from zero to a non-zero // value, which is a more expensive operation. _guardCounter = 1; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { _guardCounter += 1; uint256 localCounter = _guardCounter; _; require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call"); } }
pragma solidity ^0.5.0; import "./IERC20.sol"; import "./SafeMath.sol"; import "./Address.sol"; library SafeERC20 { using SafeMath for uint; using Address for address; function safeTransfer(IERC20 token, address to, uint value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint value) internal { require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function callOptionalReturn(IERC20 token, bytes memory data) private { require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
pragma solidity 0.5.17; library SafeMath { function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint a, uint b) internal pure returns (uint) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint a, uint b, string memory errorMessage) internal pure returns (uint) { require(b <= a, errorMessage); uint c = a - b; return c; } function mul(uint a, uint b) internal pure returns (uint) { if (a == 0) { return 0; } uint c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint a, uint b) internal pure returns (uint) { return div(a, b, "SafeMath: division by zero"); } function div(uint a, uint b, string memory errorMessage) internal pure returns (uint) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint c = a / b; return c; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"token1","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PoolCreated","type":"event"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPoolsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"collateral","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"uint256","name":"Ct","type":"uint256"},{"internalType":"uint256","name":"Pt","type":"uint256"}],"name":"createPool","outputs":[{"internalType":"address","name":"pool","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feePool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAllPools","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getFeePool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feePool","type":"address"}],"name":"setFeePool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051612df7380380612df78339818101604052602081101561003357600080fd5b5051600080546001600160a01b031990811633179091556001805482169055600280546001600160a01b0390931692909116919091179055612d7d8061007a6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063ae2e933b1161005b578063ae2e933b146100fe578063b039ddf614610106578063d88ff1f414610138578063d8dfeb451461019057610088565b806319db22281461008d57806338516064146100b55780638da5cb5b146100d9578063ad6048d8146100e1575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610198565b005b6100bd610211565b604080516001600160a01b039092168252519081900360200190f35b6100bd610220565b6100bd600480360360208110156100f757600080fd5b503561022f565b6100bd610256565b6100bd6004803603606081101561011c57600080fd5b506001600160a01b038135169060208101359060400135610265565b610140610550565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561017c578181015183820152602001610164565b505050509050019250505060405180910390f35b6100bd6105b2565b6000546001600160a01b031633146101ef576040805162461bcd60e51b815260206004820152601560248201527439b2ba2332b2a837b7b61d102337b93134b23232b760591b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031690565b6000546001600160a01b031681565b6004818154811061023c57fe5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b031681565b60006001600160a01b0384166102c2576040805162461bcd60e51b815260206004820152601860248201527f637265617465506f6f6c3a207a65726f20616464726573730000000000000000604482015290519081900360640190fd5b6001546001600160a01b031661031f576040805162461bcd60e51b815260206004820152601b60248201527f637265617465506f6f6c3a20666565506f6f6c206e6f74207365740000000000604482015290519081900360640190fd5b6001600160a01b0384811660009081526003602090815260408083203384529091529020541615610397576040805162461bcd60e51b815260206004820152601c60248201527f637265617465506f6f6c3a207573657220706f6f6c2065786973747300000000604482015290519081900360640190fd5b6060604051806020016103a9906105c1565b601f1982820381018352601f9091011660408181526002546bffffffffffffffffffffffff1960608a811b821660208681019190915292811b909116603485015233901b60488401528151603c818503018152605c909301909152815191810191909120825192935091829184016000f56002546040805163eb990c5960e01b81526001600160a01b038a811660048301529283166024820152604481018990526064810188905290519295509085169163eb990c599160848082019260009290919082900301818387803b15801561048157600080fd5b505af1158015610495573d6000803e3d6000fd5b5050506001600160a01b038088166000818152600360209081526040808320338085529083528184208054968b166001600160a01b0319978816811790915560048054600181018255958190527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909501805490971681179096559254815190815290519295507febbbe9dc3a19d2f959ac76ac0372b4983cdfb945f5d6aef4873c36fabb2ba8aa929081900390910190a450509392505050565b606060048054806020026020016040519081016040528092919081815260200182805480156105a857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161058a575b5050505050905090565b6002546001600160a01b031681565b61277a806105cf8339019056fe608060405234801561001057600080fd5b506001600355600480546001600160a01b031916331790556000600b819055600655612739806100416000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80634dfe0b1b11610125578063b6b55f25116100ad578063cc3644f11161007c578063cc3644f114610595578063dd62ed3e146105b2578063eb990c59146105e0578063ecefc7051461061c578063fd5c63b21461062457610211565b8063b6b55f2514610560578063b7f883201461057d578063c45a015514610585578063cbf950bd1461058d57610211565b806395d89b41116100f457806395d89b41146104f057806398d5fdca146104f8578063a457c2d714610500578063a9059cbb1461052c578063abd70aa21461055857610211565b80634dfe0b1b1461047f5780635556350d146104a55780635afbc4a8146104c257806370a08231146104ca57610211565b806324bbab8b116101a857806335c7e9251161017757806335c7e925146103d3578063376c4642146103db578063395093511461040a5780633c4750df146104365780633f8128821461045c57610211565b806324bbab8b146103865780632b112e491461038e5780632e1a7d4d14610396578063313ce567146103b557610211565b806318160ddd116101e457806318160ddd146103115780631d98cf401461031957806321df0da71461034857806323b872dd1461035057610211565b806306fdde0314610216578063095ea7b3146102935780630dfe1681146102d357806315770f92146102f7575b600080fd5b61021e61062c565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610258578181015183820152602001610240565b50505050905090810190601f1680156102855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102bf600480360360408110156102a957600080fd5b506001600160a01b03813516906020013561065b565b604080519115158252519081900360200190f35b6102db610679565b604080516001600160a01b039092168252519081900360200190f35b6102ff610688565b60408051918252519081900360200190f35b6102ff61068e565b6102ff6004803603608081101561032f57600080fd5b5080359060208101359060408101359060600135610694565b6102db610a8b565b6102bf6004803603606081101561036657600080fd5b506001600160a01b03813581169160208101359091169060400135610a9a565b6102db610b28565b6102ff610b37565b6103b3600480360360208110156103ac57600080fd5b5035610b3d565b005b6103bd610e94565b6040805160ff9092168252519081900360200190f35b6102ff610e99565b6102ff600480360360808110156103f157600080fd5b5080359060208101359060408101359060600135610ebc565b6102bf6004803603604081101561042057600080fd5b506001600160a01b03813516906020013561129a565b6102ff6004803603602081101561044c57600080fd5b50356001600160a01b03166112ee565b6102ff6004803603604081101561047257600080fd5b5080359060200135611301565b6102ff6004803603602081101561049557600080fd5b50356001600160a01b031661131f565b6102ff600480360360208110156104bb57600080fd5b5035611360565b6102ff61138d565b6102ff600480360360208110156104e057600080fd5b50356001600160a01b0316611392565b61021e6113ad565b6102ff6113d0565b6102bf6004803603604081101561051657600080fd5b506001600160a01b0381351690602001356113f5565b6102bf6004803603604081101561054257600080fd5b506001600160a01b038135169060200135611463565b6102ff611477565b6103b36004803603602081101561057657600080fd5b50356114f3565b6102ff61175f565b6102db611765565b6102ff611774565b6102ff600480360360208110156105ab57600080fd5b503561178d565b6102ff600480360360408110156105c857600080fd5b506001600160a01b038135811691602001351661179b565b6103b3600480360360808110156105f657600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356117c6565b6102ff611947565b6102ff61194c565b6040518060400160405280601381526020017211115611c8131a5c5d5a591a5d1e48141bdbdb606a1b81525081565b600061066f610668611952565b8484611956565b5060015b92915050565b6007546001600160a01b031681565b60065481565b60025490565b6003805460010190819055600754604080516370a0823160e01b815233600482015290516000939288926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b1580156106f057600080fd5b505afa158015610704573d6000803e3d6000fd5b505050506040513d602081101561071a57600080fd5b505110156107595760405162461bcd60e51b81526004018080602001828103825260308152602001806126296030913960400191505060405180910390fd5b610761611a42565b831161079e5760405162461bcd60e51b81526004018080602001828103825260248152602001806126e16024913960400191505060405180910390fd5b600086116107dd5760405162461bcd60e51b81526004018080602001828103825260278152602001806124a56027913960400191505060405180910390fd5b600a546005546008546001600160a01b039091169060009061080f90610809908b63ffffffff611a5316565b84611301565b9050868110156108505760405162461bcd60e51b815260040180806020018281038252602d8152602001806123e7602d913960400191505060405180910390fd5b600061087a670de0b6b3a764000061086e848d63ffffffff611aad16565b9063ffffffff611b0616565b604080516370a0823160e01b8152306004820152905191925082916001600160a01b038616916370a08231916024808301926020929190829003018186803b1580156108c557600080fd5b505afa1580156108d9573d6000803e3d6000fd5b505050506040513d60208110156108ef57600080fd5b5051101561092e5760405162461bcd60e51b81526004018080602001828103825260388152602001806125866038913960400191505060405180910390fd5b8881101561096d5760405162461bcd60e51b81526004018080602001828103825260288152602001806124cc6028913960400191505060405180910390fd5b600061097882611b48565b9050600061098c838363ffffffff611b6016565b905061099e868263ffffffff611b6016565b600a556109c96109bc8d6109b0611477565b9063ffffffff611a5316565b859063ffffffff611aad16565b6006556109d6338d611ba2565b6109e1853383611bdf565b60408051828152602081018e90528082018690529051339130917fa93b604be85dee08c402c756f5ca54b63c7fd292be0dd25ff4350debc9633fef9181900360600190a3965050505050506003548114610a82576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b50949350505050565b6007546001600160a01b031690565b6000610aa7848484611d49565b610b1d84610ab3611952565b610b188560405180606001604052806028815260200161253d602891396001600160a01b038a16600090815260016020526040812090610af1611952565b6001600160a01b03168152602081019190915260400160002054919063ffffffff611ea516565b611956565b5060015b9392505050565b6005546001600160a01b031681565b60085490565b600380546001019081905581610b9a576040805162461bcd60e51b815260206004820152601860248201527f77697468647261773a20696e76616c696420746f6b656e730000000000000000604482015290519081900360640190fd5b6000610ba461068e565b11610bf6576040805162461bcd60e51b815260206004820181905260248201527f77697468647261773a20696e73756666696369656e74206c6971756964697479604482015290519081900360640190fd5b81610c0033611392565b1015610c53576040805162461bcd60e51b815260206004820152601d60248201527f77697468647261773a20696e73756666696369656e7420746f6b656e73000000604482015290519081900360640190fd5b6007546001600160a01b03166000610c6a84611360565b600554604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610cbb57600080fd5b505afa158015610ccf573d6000803e3d6000fd5b505050506040513d6020811015610ce557600080fd5b505190506000610d06610cf661068e565b61086e848963ffffffff611aad16565b905081811115610d475760405162461bcd60e51b81526004018080602001828103825260228152602001806125e36022913960400191505060405180910390fd5b600854600a54610d5d828663ffffffff611b6016565b9150610d6f818463ffffffff611b6016565b90506000610d7d8383611301565b9050610da7610d9a87610d8e611477565b9063ffffffff611b6016565b829063ffffffff611aad16565b6006556008839055600a829055610dbf873388611bdf565b600554610dd6906001600160a01b03163386611bdf565b610de0338a611f3c565b6040805187815260208101839052815133926001600160a01b038b16927ff6a7e66150be6cb9298dfde86d270dad2bb6cf1550db4bc04fabc754e002e10c929081900390910190a350505050505050610e37611a42565b600b556003548114610e90576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b5050565b601281565b600654600090610eb790670de0b6b3a764000063ffffffff611b0616565b905090565b6003805460010190819055600554604080516370a0823160e01b815233600482015290516000939288926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b158015610f1857600080fd5b505afa158015610f2c573d6000803e3d6000fd5b505050506040513d6020811015610f4257600080fd5b50511015610f815760405162461bcd60e51b81526004018080602001828103825260368152602001806126596036913960400191505060405180910390fd5b610f89611a42565b8311610fc65760405162461bcd60e51b815260040180806020018281038252602a81526020018061239a602a913960400191505060405180910390fd5b600086116110055760405162461bcd60e51b815260040180806020018281038252602781526020018061247e6027913960400191505060405180910390fd5b600554600854600a546000926001600160a01b0316916110349161102f908b63ffffffff611a5316565b611301565b9150858211156110755760405162461bcd60e51b815260040180806020018281038252602d81526020018061268f602d913960400191505060405180910390fd5b60006110938361086e8b670de0b6b3a764000063ffffffff611aad16565b9050878110156110d45760405162461bcd60e51b81526004018080602001828103825260288152602001806124f46028913960400191505060405180910390fd5b60006110df8a611b48565b905060006110f38b8363ffffffff611b6016565b905060006111138661086e84670de0b6b3a764000063ffffffff611aad16565b600a54909150611129908363ffffffff611a5316565b600a5560085461114b90611143908363ffffffff611b6016565b600a54611301565b955061116961115c82610d8e611477565b879063ffffffff611aad16565b6006556111788533308f611f51565b6004805460408051630e14581960e21b815290516111ef9389936001600160a01b03169263385160649281830192602092829003018186803b1580156111bd57600080fd5b505afa1580156111d1573d6000803e3d6000fd5b505050506040513d60208110156111e757600080fd5b505185611bdf565b6111f933826120c4565b60408051828152602081018e90528082018890529051339130917f5e9c0189949f283ec504519f5615f4f190d66083cf363875683035cfbaac9a5a9181900360600190a3965050505050506003548114610a82576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600061066f6112a7611952565b84610b1885600160006112b8611952565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611a5316565b60006112f982611392565b90505b919050565b6000610b218361086e84670de0b6b3a764000063ffffffff611aad16565b60008061132b83611392565b90508061133c5760009150506112fc565b610b218161086e670de0b6b3a764000061135461068e565b9063ffffffff611aad16565b600061136a61068e565b611376575060006112fc565b6112f961138161068e565b61086e84611354611477565b600381565b6001600160a01b031660009081526020819052604090205490565b604051806040016040528060078152602001660444558472d4c560cc1b81525081565b600854600a54600091610eb79161086e90670de0b6b3a764000063ffffffff611aad16565b600061066f611402611952565b84610b18856040518060600160405280602581526020016126bc602591396001600061142c611952565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff611ea516565b600061066f611470611952565b8484611d49565b600754604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156114c257600080fd5b505afa1580156114d6573d6000803e3d6000fd5b505050506040513d60208110156114ec57600080fd5b5051905090565b600380546001019081905581611550576040805162461bcd60e51b815260206004820152601760248201527f6465706f7369743a20696e76616c696420616d6f756e74000000000000000000604482015290519081900360640190fd5b600061155a611477565b6007546008549192506001600160a01b031690600090611580908663ffffffff611a5316565b600a5490915060006115928383611301565b905060006115a6828963ffffffff611aad16565b9050600081116115fd576040805162461bcd60e51b815260206004820152601f60248201527f6465706f7369743a20696e76616c69642075736572206c697175696469747900604482015290519081900360640190fd5b61160d868963ffffffff611a5316565b9550600061162682600654611a5390919063ffffffff16565b905060006116358289856120f1565b905060006116d1611648836109b061068e565b600554604080516370a0823160e01b8152306004820152905161086e9287926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561169957600080fd5b505afa1580156116ad573d6000803e3d6000fd5b505050506040513d60208110156116c357600080fd5b50519063ffffffff611aad16565b600888905590506116e8868263ffffffff611a5316565b600a5560068390556116fa338361211c565b6117068833308e611f51565b604080518c815260208101879052815133926001600160a01b038c16927f4466433a9d9e9d68780a1f6286a07c1c7a0e597fe1af747b4ea79d013628fc9e929081900390910190a3505050505050505050610e37611a42565b600b5490565b6004546001600160a01b031681565b600954600a54600091610eb7919063ffffffff611aad16565b60006112f9826113546113d0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6004546001600160a01b0316331461181d576040805162461bcd60e51b815260206004820152601560248201527434b734ba34b0b634bd329d102337b93134b23232b760591b604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b038681169190911791829055604080516318160ddd60e01b8152905192909116916318160ddd91600480820192602092909190829003018186803b15801561187957600080fd5b505afa15801561188d573d6000803e3d6000fd5b505050506040513d60208110156118a357600080fd5b50518211156118f9576040805162461bcd60e51b815260206004820152601760248201527f696e697469616c697a653a20496e76616c6964205f4374000000000000000000604482015290519081900360640190fd5b6008829055600981905561191f670de0b6b3a764000061086e838563ffffffff611aad16565b600a555050600580546001600160a01b0319166001600160a01b039290921691909117905550565b606481565b600a5490565b3390565b6001600160a01b03831661199b5760405162461bcd60e51b81526004018080602001828103825260248152602001806126056024913960400191505060405180910390fd5b6001600160a01b0382166119e05760405162461bcd60e51b81526004018080602001828103825260228152602001806124366022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000610eb742600860030154612131565b600082820183811015610b21576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082611abc57506000610673565b82820282848281611ac957fe5b0414610b215760405162461bcd60e51b815260040180806020018281038252602181526020018061251c6021913960400191505060405180910390fd5b6000610b2183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612148565b60006112f9606461086e84600363ffffffff611aad16565b6000610b2183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ea5565b600854611bb5908263ffffffff611a5316565b600855600754611bd0906001600160a01b0316833084611f51565b611bd8611a42565b600b555050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310611c5c5780518252601f199092019160209182019101611c3d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611cbe576040519150601f19603f3d011682016040523d82523d6000602084013e611cc3565b606091505b5091509150818015611cf1575080511580611cf15750808060200190516020811015611cee57600080fd5b50515b611d42576040805162461bcd60e51b815260206004820152601960248201527f5f746f6b656e536166655472616e73666572206661696c656400000000000000604482015290519081900360640190fd5b5050505050565b6001600160a01b038316611d8e5760405162461bcd60e51b81526004018080602001828103825260258152602001806125be6025913960400191505060405180910390fd5b6001600160a01b038216611dd35760405162461bcd60e51b81526004018080602001828103825260238152602001806123c46023913960400191505060405180910390fd5b611e1681604051806060016040528060268152602001612458602691396001600160a01b038616600090815260208190526040902054919063ffffffff611ea516565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611e4b908263ffffffff611a5316565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611f345760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ef9578181015183820152602001611ee1565b50505050905090810190601f168015611f265780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b611f47823083611d49565b610e9030826121ad565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310611fd65780518252601f199092019160209182019101611fb7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612038576040519150601f19603f3d011682016040523d82523d6000602084013e61203d565b606091505b509150915081801561206b57508051158061206b575080806020019051602081101561206857600080fd5b50515b6120bc576040805162461bcd60e51b815260206004820152601d60248201527f5f746f6b656e536166655472616e7366657246726f6d206661696c6564000000604482015290519081900360640190fd5b505050505050565b6008546120d7908263ffffffff611b6016565b600855600754611bd0906001600160a01b03168383611bdf565b60008361210057506000610b21565b6121148461086e858563ffffffff611aad16565b949350505050565b61212630826122a9565b610e90308383611d49565b6000818310156121415781610b21565b5090919050565b600081836121975760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611ef9578181015183820152602001611ee1565b5060008385816121a357fe5b0495945050505050565b6001600160a01b0382166121f25760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b61223581604051806060016040528060228152602001612414602291396001600160a01b038516600090815260208190526040902054919063ffffffff611ea516565b6001600160a01b038316600090815260208190526040902055600254612261908263ffffffff611b6016565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038216612304576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254612317908263ffffffff611a5316565b6002556001600160a01b038216600090815260208190526040902054612343908263ffffffff611a5316565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3505056fe737761704578616374455448466f72546f6b656e733a20496e76616c6964207472616e73616374696f6e45524332303a207472616e7366657220746f20746865207a65726f2061646472657373737761704578616374546f6b656e73466f724554483a20496e76616c696420707269636520736c69707061676545524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365737761704578616374455448466f72546f6b656e733a20496e76616c696420616d6f756e74496e737761704578616374546f6b656e73466f724554483a20496e76616c696420616d6f756e74496e737761704578616374546f6b656e73466f724554483a20496e76616c696420616d6f756e744f7574737761704578616374455448466f72546f6b656e733a20496e76616c696420616d6f756e744f7574536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f2061646472657373737761704578616374546f6b656e73466f724554483a20496e73756666696369656e7420636f6c6c61746572616c206c697175696469747945524332303a207472616e736665722066726f6d20746865207a65726f206164647265737377697468647261773a20696e73756666696369656e74204554482062616c616e636545524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373737761704578616374546f6b656e73466f724554483a20496e73756666696369656e7420757365722062616c616e6365737761704578616374455448466f72546f6b656e733a20496e73756666696369656e7420636f6c6c61746572616c2062616c616e6365737761704578616374455448466f72546f6b656e733a20496e76616c696420707269636520736c69707061676545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f737761704578616374546f6b656e73466f724554483a20496e76616c6964206f72646572a265627a7a72315820e60b5c0b1deef7ab66eab4a0009e41ac5f8aa414488887bb722f3ba47eee133b64736f6c63430005110032a265627a7a72315820bd01ccd67dfdd9e4db0d9219bd6b2192d8304a88916bdd8d0d38a03d4161251564736f6c63430005110032000000000000000000000000b81d70802a816b5dacba06d708b5acf19dcd436d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063ae2e933b1161005b578063ae2e933b146100fe578063b039ddf614610106578063d88ff1f414610138578063d8dfeb451461019057610088565b806319db22281461008d57806338516064146100b55780638da5cb5b146100d9578063ad6048d8146100e1575b600080fd5b6100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610198565b005b6100bd610211565b604080516001600160a01b039092168252519081900360200190f35b6100bd610220565b6100bd600480360360208110156100f757600080fd5b503561022f565b6100bd610256565b6100bd6004803603606081101561011c57600080fd5b506001600160a01b038135169060208101359060400135610265565b610140610550565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561017c578181015183820152602001610164565b505050509050019250505060405180910390f35b6100bd6105b2565b6000546001600160a01b031633146101ef576040805162461bcd60e51b815260206004820152601560248201527439b2ba2332b2a837b7b61d102337b93134b23232b760591b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031690565b6000546001600160a01b031681565b6004818154811061023c57fe5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b031681565b60006001600160a01b0384166102c2576040805162461bcd60e51b815260206004820152601860248201527f637265617465506f6f6c3a207a65726f20616464726573730000000000000000604482015290519081900360640190fd5b6001546001600160a01b031661031f576040805162461bcd60e51b815260206004820152601b60248201527f637265617465506f6f6c3a20666565506f6f6c206e6f74207365740000000000604482015290519081900360640190fd5b6001600160a01b0384811660009081526003602090815260408083203384529091529020541615610397576040805162461bcd60e51b815260206004820152601c60248201527f637265617465506f6f6c3a207573657220706f6f6c2065786973747300000000604482015290519081900360640190fd5b6060604051806020016103a9906105c1565b601f1982820381018352601f9091011660408181526002546bffffffffffffffffffffffff1960608a811b821660208681019190915292811b909116603485015233901b60488401528151603c818503018152605c909301909152815191810191909120825192935091829184016000f56002546040805163eb990c5960e01b81526001600160a01b038a811660048301529283166024820152604481018990526064810188905290519295509085169163eb990c599160848082019260009290919082900301818387803b15801561048157600080fd5b505af1158015610495573d6000803e3d6000fd5b5050506001600160a01b038088166000818152600360209081526040808320338085529083528184208054968b166001600160a01b0319978816811790915560048054600181018255958190527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909501805490971681179096559254815190815290519295507febbbe9dc3a19d2f959ac76ac0372b4983cdfb945f5d6aef4873c36fabb2ba8aa929081900390910190a450509392505050565b606060048054806020026020016040519081016040528092919081815260200182805480156105a857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161058a575b5050505050905090565b6002546001600160a01b031681565b61277a806105cf8339019056fe608060405234801561001057600080fd5b506001600355600480546001600160a01b031916331790556000600b819055600655612739806100416000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80634dfe0b1b11610125578063b6b55f25116100ad578063cc3644f11161007c578063cc3644f114610595578063dd62ed3e146105b2578063eb990c59146105e0578063ecefc7051461061c578063fd5c63b21461062457610211565b8063b6b55f2514610560578063b7f883201461057d578063c45a015514610585578063cbf950bd1461058d57610211565b806395d89b41116100f457806395d89b41146104f057806398d5fdca146104f8578063a457c2d714610500578063a9059cbb1461052c578063abd70aa21461055857610211565b80634dfe0b1b1461047f5780635556350d146104a55780635afbc4a8146104c257806370a08231146104ca57610211565b806324bbab8b116101a857806335c7e9251161017757806335c7e925146103d3578063376c4642146103db578063395093511461040a5780633c4750df146104365780633f8128821461045c57610211565b806324bbab8b146103865780632b112e491461038e5780632e1a7d4d14610396578063313ce567146103b557610211565b806318160ddd116101e457806318160ddd146103115780631d98cf401461031957806321df0da71461034857806323b872dd1461035057610211565b806306fdde0314610216578063095ea7b3146102935780630dfe1681146102d357806315770f92146102f7575b600080fd5b61021e61062c565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610258578181015183820152602001610240565b50505050905090810190601f1680156102855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102bf600480360360408110156102a957600080fd5b506001600160a01b03813516906020013561065b565b604080519115158252519081900360200190f35b6102db610679565b604080516001600160a01b039092168252519081900360200190f35b6102ff610688565b60408051918252519081900360200190f35b6102ff61068e565b6102ff6004803603608081101561032f57600080fd5b5080359060208101359060408101359060600135610694565b6102db610a8b565b6102bf6004803603606081101561036657600080fd5b506001600160a01b03813581169160208101359091169060400135610a9a565b6102db610b28565b6102ff610b37565b6103b3600480360360208110156103ac57600080fd5b5035610b3d565b005b6103bd610e94565b6040805160ff9092168252519081900360200190f35b6102ff610e99565b6102ff600480360360808110156103f157600080fd5b5080359060208101359060408101359060600135610ebc565b6102bf6004803603604081101561042057600080fd5b506001600160a01b03813516906020013561129a565b6102ff6004803603602081101561044c57600080fd5b50356001600160a01b03166112ee565b6102ff6004803603604081101561047257600080fd5b5080359060200135611301565b6102ff6004803603602081101561049557600080fd5b50356001600160a01b031661131f565b6102ff600480360360208110156104bb57600080fd5b5035611360565b6102ff61138d565b6102ff600480360360208110156104e057600080fd5b50356001600160a01b0316611392565b61021e6113ad565b6102ff6113d0565b6102bf6004803603604081101561051657600080fd5b506001600160a01b0381351690602001356113f5565b6102bf6004803603604081101561054257600080fd5b506001600160a01b038135169060200135611463565b6102ff611477565b6103b36004803603602081101561057657600080fd5b50356114f3565b6102ff61175f565b6102db611765565b6102ff611774565b6102ff600480360360208110156105ab57600080fd5b503561178d565b6102ff600480360360408110156105c857600080fd5b506001600160a01b038135811691602001351661179b565b6103b3600480360360808110156105f657600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356117c6565b6102ff611947565b6102ff61194c565b6040518060400160405280601381526020017211115611c8131a5c5d5a591a5d1e48141bdbdb606a1b81525081565b600061066f610668611952565b8484611956565b5060015b92915050565b6007546001600160a01b031681565b60065481565b60025490565b6003805460010190819055600754604080516370a0823160e01b815233600482015290516000939288926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b1580156106f057600080fd5b505afa158015610704573d6000803e3d6000fd5b505050506040513d602081101561071a57600080fd5b505110156107595760405162461bcd60e51b81526004018080602001828103825260308152602001806126296030913960400191505060405180910390fd5b610761611a42565b831161079e5760405162461bcd60e51b81526004018080602001828103825260248152602001806126e16024913960400191505060405180910390fd5b600086116107dd5760405162461bcd60e51b81526004018080602001828103825260278152602001806124a56027913960400191505060405180910390fd5b600a546005546008546001600160a01b039091169060009061080f90610809908b63ffffffff611a5316565b84611301565b9050868110156108505760405162461bcd60e51b815260040180806020018281038252602d8152602001806123e7602d913960400191505060405180910390fd5b600061087a670de0b6b3a764000061086e848d63ffffffff611aad16565b9063ffffffff611b0616565b604080516370a0823160e01b8152306004820152905191925082916001600160a01b038616916370a08231916024808301926020929190829003018186803b1580156108c557600080fd5b505afa1580156108d9573d6000803e3d6000fd5b505050506040513d60208110156108ef57600080fd5b5051101561092e5760405162461bcd60e51b81526004018080602001828103825260388152602001806125866038913960400191505060405180910390fd5b8881101561096d5760405162461bcd60e51b81526004018080602001828103825260288152602001806124cc6028913960400191505060405180910390fd5b600061097882611b48565b9050600061098c838363ffffffff611b6016565b905061099e868263ffffffff611b6016565b600a556109c96109bc8d6109b0611477565b9063ffffffff611a5316565b859063ffffffff611aad16565b6006556109d6338d611ba2565b6109e1853383611bdf565b60408051828152602081018e90528082018690529051339130917fa93b604be85dee08c402c756f5ca54b63c7fd292be0dd25ff4350debc9633fef9181900360600190a3965050505050506003548114610a82576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b50949350505050565b6007546001600160a01b031690565b6000610aa7848484611d49565b610b1d84610ab3611952565b610b188560405180606001604052806028815260200161253d602891396001600160a01b038a16600090815260016020526040812090610af1611952565b6001600160a01b03168152602081019190915260400160002054919063ffffffff611ea516565b611956565b5060015b9392505050565b6005546001600160a01b031681565b60085490565b600380546001019081905581610b9a576040805162461bcd60e51b815260206004820152601860248201527f77697468647261773a20696e76616c696420746f6b656e730000000000000000604482015290519081900360640190fd5b6000610ba461068e565b11610bf6576040805162461bcd60e51b815260206004820181905260248201527f77697468647261773a20696e73756666696369656e74206c6971756964697479604482015290519081900360640190fd5b81610c0033611392565b1015610c53576040805162461bcd60e51b815260206004820152601d60248201527f77697468647261773a20696e73756666696369656e7420746f6b656e73000000604482015290519081900360640190fd5b6007546001600160a01b03166000610c6a84611360565b600554604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610cbb57600080fd5b505afa158015610ccf573d6000803e3d6000fd5b505050506040513d6020811015610ce557600080fd5b505190506000610d06610cf661068e565b61086e848963ffffffff611aad16565b905081811115610d475760405162461bcd60e51b81526004018080602001828103825260228152602001806125e36022913960400191505060405180910390fd5b600854600a54610d5d828663ffffffff611b6016565b9150610d6f818463ffffffff611b6016565b90506000610d7d8383611301565b9050610da7610d9a87610d8e611477565b9063ffffffff611b6016565b829063ffffffff611aad16565b6006556008839055600a829055610dbf873388611bdf565b600554610dd6906001600160a01b03163386611bdf565b610de0338a611f3c565b6040805187815260208101839052815133926001600160a01b038b16927ff6a7e66150be6cb9298dfde86d270dad2bb6cf1550db4bc04fabc754e002e10c929081900390910190a350505050505050610e37611a42565b600b556003548114610e90576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b5050565b601281565b600654600090610eb790670de0b6b3a764000063ffffffff611b0616565b905090565b6003805460010190819055600554604080516370a0823160e01b815233600482015290516000939288926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b158015610f1857600080fd5b505afa158015610f2c573d6000803e3d6000fd5b505050506040513d6020811015610f4257600080fd5b50511015610f815760405162461bcd60e51b81526004018080602001828103825260368152602001806126596036913960400191505060405180910390fd5b610f89611a42565b8311610fc65760405162461bcd60e51b815260040180806020018281038252602a81526020018061239a602a913960400191505060405180910390fd5b600086116110055760405162461bcd60e51b815260040180806020018281038252602781526020018061247e6027913960400191505060405180910390fd5b600554600854600a546000926001600160a01b0316916110349161102f908b63ffffffff611a5316565b611301565b9150858211156110755760405162461bcd60e51b815260040180806020018281038252602d81526020018061268f602d913960400191505060405180910390fd5b60006110938361086e8b670de0b6b3a764000063ffffffff611aad16565b9050878110156110d45760405162461bcd60e51b81526004018080602001828103825260288152602001806124f46028913960400191505060405180910390fd5b60006110df8a611b48565b905060006110f38b8363ffffffff611b6016565b905060006111138661086e84670de0b6b3a764000063ffffffff611aad16565b600a54909150611129908363ffffffff611a5316565b600a5560085461114b90611143908363ffffffff611b6016565b600a54611301565b955061116961115c82610d8e611477565b879063ffffffff611aad16565b6006556111788533308f611f51565b6004805460408051630e14581960e21b815290516111ef9389936001600160a01b03169263385160649281830192602092829003018186803b1580156111bd57600080fd5b505afa1580156111d1573d6000803e3d6000fd5b505050506040513d60208110156111e757600080fd5b505185611bdf565b6111f933826120c4565b60408051828152602081018e90528082018890529051339130917f5e9c0189949f283ec504519f5615f4f190d66083cf363875683035cfbaac9a5a9181900360600190a3965050505050506003548114610a82576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600061066f6112a7611952565b84610b1885600160006112b8611952565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611a5316565b60006112f982611392565b90505b919050565b6000610b218361086e84670de0b6b3a764000063ffffffff611aad16565b60008061132b83611392565b90508061133c5760009150506112fc565b610b218161086e670de0b6b3a764000061135461068e565b9063ffffffff611aad16565b600061136a61068e565b611376575060006112fc565b6112f961138161068e565b61086e84611354611477565b600381565b6001600160a01b031660009081526020819052604090205490565b604051806040016040528060078152602001660444558472d4c560cc1b81525081565b600854600a54600091610eb79161086e90670de0b6b3a764000063ffffffff611aad16565b600061066f611402611952565b84610b18856040518060600160405280602581526020016126bc602591396001600061142c611952565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff611ea516565b600061066f611470611952565b8484611d49565b600754604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156114c257600080fd5b505afa1580156114d6573d6000803e3d6000fd5b505050506040513d60208110156114ec57600080fd5b5051905090565b600380546001019081905581611550576040805162461bcd60e51b815260206004820152601760248201527f6465706f7369743a20696e76616c696420616d6f756e74000000000000000000604482015290519081900360640190fd5b600061155a611477565b6007546008549192506001600160a01b031690600090611580908663ffffffff611a5316565b600a5490915060006115928383611301565b905060006115a6828963ffffffff611aad16565b9050600081116115fd576040805162461bcd60e51b815260206004820152601f60248201527f6465706f7369743a20696e76616c69642075736572206c697175696469747900604482015290519081900360640190fd5b61160d868963ffffffff611a5316565b9550600061162682600654611a5390919063ffffffff16565b905060006116358289856120f1565b905060006116d1611648836109b061068e565b600554604080516370a0823160e01b8152306004820152905161086e9287926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561169957600080fd5b505afa1580156116ad573d6000803e3d6000fd5b505050506040513d60208110156116c357600080fd5b50519063ffffffff611aad16565b600888905590506116e8868263ffffffff611a5316565b600a5560068390556116fa338361211c565b6117068833308e611f51565b604080518c815260208101879052815133926001600160a01b038c16927f4466433a9d9e9d68780a1f6286a07c1c7a0e597fe1af747b4ea79d013628fc9e929081900390910190a3505050505050505050610e37611a42565b600b5490565b6004546001600160a01b031681565b600954600a54600091610eb7919063ffffffff611aad16565b60006112f9826113546113d0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6004546001600160a01b0316331461181d576040805162461bcd60e51b815260206004820152601560248201527434b734ba34b0b634bd329d102337b93134b23232b760591b604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b038681169190911791829055604080516318160ddd60e01b8152905192909116916318160ddd91600480820192602092909190829003018186803b15801561187957600080fd5b505afa15801561188d573d6000803e3d6000fd5b505050506040513d60208110156118a357600080fd5b50518211156118f9576040805162461bcd60e51b815260206004820152601760248201527f696e697469616c697a653a20496e76616c6964205f4374000000000000000000604482015290519081900360640190fd5b6008829055600981905561191f670de0b6b3a764000061086e838563ffffffff611aad16565b600a555050600580546001600160a01b0319166001600160a01b039290921691909117905550565b606481565b600a5490565b3390565b6001600160a01b03831661199b5760405162461bcd60e51b81526004018080602001828103825260248152602001806126056024913960400191505060405180910390fd5b6001600160a01b0382166119e05760405162461bcd60e51b81526004018080602001828103825260228152602001806124366022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000610eb742600860030154612131565b600082820183811015610b21576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082611abc57506000610673565b82820282848281611ac957fe5b0414610b215760405162461bcd60e51b815260040180806020018281038252602181526020018061251c6021913960400191505060405180910390fd5b6000610b2183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612148565b60006112f9606461086e84600363ffffffff611aad16565b6000610b2183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ea5565b600854611bb5908263ffffffff611a5316565b600855600754611bd0906001600160a01b0316833084611f51565b611bd8611a42565b600b555050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310611c5c5780518252601f199092019160209182019101611c3d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611cbe576040519150601f19603f3d011682016040523d82523d6000602084013e611cc3565b606091505b5091509150818015611cf1575080511580611cf15750808060200190516020811015611cee57600080fd5b50515b611d42576040805162461bcd60e51b815260206004820152601960248201527f5f746f6b656e536166655472616e73666572206661696c656400000000000000604482015290519081900360640190fd5b5050505050565b6001600160a01b038316611d8e5760405162461bcd60e51b81526004018080602001828103825260258152602001806125be6025913960400191505060405180910390fd5b6001600160a01b038216611dd35760405162461bcd60e51b81526004018080602001828103825260238152602001806123c46023913960400191505060405180910390fd5b611e1681604051806060016040528060268152602001612458602691396001600160a01b038616600090815260208190526040902054919063ffffffff611ea516565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611e4b908263ffffffff611a5316565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611f345760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ef9578181015183820152602001611ee1565b50505050905090810190601f168015611f265780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b611f47823083611d49565b610e9030826121ad565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310611fd65780518252601f199092019160209182019101611fb7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612038576040519150601f19603f3d011682016040523d82523d6000602084013e61203d565b606091505b509150915081801561206b57508051158061206b575080806020019051602081101561206857600080fd5b50515b6120bc576040805162461bcd60e51b815260206004820152601d60248201527f5f746f6b656e536166655472616e7366657246726f6d206661696c6564000000604482015290519081900360640190fd5b505050505050565b6008546120d7908263ffffffff611b6016565b600855600754611bd0906001600160a01b03168383611bdf565b60008361210057506000610b21565b6121148461086e858563ffffffff611aad16565b949350505050565b61212630826122a9565b610e90308383611d49565b6000818310156121415781610b21565b5090919050565b600081836121975760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611ef9578181015183820152602001611ee1565b5060008385816121a357fe5b0495945050505050565b6001600160a01b0382166121f25760405162461bcd60e51b81526004018080602001828103825260218152602001806125656021913960400191505060405180910390fd5b61223581604051806060016040528060228152602001612414602291396001600160a01b038516600090815260208190526040902054919063ffffffff611ea516565b6001600160a01b038316600090815260208190526040902055600254612261908263ffffffff611b6016565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038216612304576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254612317908263ffffffff611a5316565b6002556001600160a01b038216600090815260208190526040902054612343908263ffffffff611a5316565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3505056fe737761704578616374455448466f72546f6b656e733a20496e76616c6964207472616e73616374696f6e45524332303a207472616e7366657220746f20746865207a65726f2061646472657373737761704578616374546f6b656e73466f724554483a20496e76616c696420707269636520736c69707061676545524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365737761704578616374455448466f72546f6b656e733a20496e76616c696420616d6f756e74496e737761704578616374546f6b656e73466f724554483a20496e76616c696420616d6f756e74496e737761704578616374546f6b656e73466f724554483a20496e76616c696420616d6f756e744f7574737761704578616374455448466f72546f6b656e733a20496e76616c696420616d6f756e744f7574536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f2061646472657373737761704578616374546f6b656e73466f724554483a20496e73756666696369656e7420636f6c6c61746572616c206c697175696469747945524332303a207472616e736665722066726f6d20746865207a65726f206164647265737377697468647261773a20696e73756666696369656e74204554482062616c616e636545524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373737761704578616374546f6b656e73466f724554483a20496e73756666696369656e7420757365722062616c616e6365737761704578616374455448466f72546f6b656e733a20496e73756666696369656e7420636f6c6c61746572616c2062616c616e6365737761704578616374455448466f72546f6b656e733a20496e76616c696420707269636520736c69707061676545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f737761704578616374546f6b656e73466f724554483a20496e76616c6964206f72646572a265627a7a72315820e60b5c0b1deef7ab66eab4a0009e41ac5f8aa414488887bb722f3ba47eee133b64736f6c63430005110032a265627a7a72315820bd01ccd67dfdd9e4db0d9219bd6b2192d8304a88916bdd8d0d38a03d4161251564736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b81d70802a816b5dacba06d708b5acf19dcd436d
-----Decoded View---------------
Arg [0] : token1 (address): 0xB81D70802a816B5DacBA06D708B5acF19DcD436D
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b81d70802a816b5dacba06d708b5acf19dcd436d
Deployed Bytecode Sourcemap
158:1763:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;158:1763:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1661:145;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1661:145:2;-1:-1:-1;;;;;1661:145:2;;:::i;:::-;;1570:85;;;:::i;:::-;;;;-1:-1:-1;;;;;1570:85:2;;;;;;;;;;;;;;330:20;;;:::i;487:33::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;487:33:2;;:::i;356:22::-;;;:::i;662:902::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;662:902:2;;;;;;;;;;;;;:::i;1812:104::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1812:104:2;;;;;;;;;;;;;;;;;384:25;;;:::i;1661:145::-;1740:5;;-1:-1:-1;;;;;1740:5:2;1726:10;:19;1718:53;;;;;-1:-1:-1;;;1718:53:2;;;;;;;;;;;;-1:-1:-1;;;1718:53:2;;;;;;;;;;;;;;;1781:7;:18;;-1:-1:-1;;;;;;1781:18:2;-1:-1:-1;;;;;1781:18:2;;;;;;;;;;1661:145::o;1570:85::-;1641:7;;-1:-1:-1;;;;;1641:7:2;1570:85;:::o;330:20::-;;;-1:-1:-1;;;;;330:20:2;;:::o;487:33::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;487:33:2;;-1:-1:-1;487:33:2;:::o;356:22::-;;;-1:-1:-1;;;;;356:22:2;;:::o;662:902::-;734:12;-1:-1:-1;;;;;766:20:2;;758:57;;;;;-1:-1:-1;;;758:57:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;833:7;;-1:-1:-1;;;;;833:7:2;825:61;;;;;-1:-1:-1;;;825:61:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;904:17:2;;;945:1;904:17;;;:9;:17;;;;;;;;922:10;904:29;;;;;;;;;:43;896:84;;;;;-1:-1:-1;;;896:84:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;990:21;1014:41;;;;;;;;:::i;:::-;-1:-1:-1;;21:26;;;;;7:41;;87:2;69:12;;;65:26;61:2;54:38;;;1115:10:2;;-1:-1:-1;;1090:48:2;;;;;;41:4:-1;1090:48:2;;;;;;;;;;;;;;;;;1127:10;1090:48;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;1090:48:2;;;;;;;1080:59;;;;;;;;;1279:15;;34:5:-1;;-1:-1;1080:59:2;;;30:16:-1;;1065:12:2;1249:52;1359:10;;1320:58;;;-1:-1:-1;;;1320:58:2;;-1:-1:-1;;;;;1320:58:2;;;;;;;1359:10;;;1320:58;;;;;;;;;;;;;;;;;;1241:60;;-1:-1:-1;1320:30:2;;;;;;:58;;;;;1359:10;;1320:58;;;;;;;;1359:10;1320:30;:58;;;5:2:-1;;;;30:1;27;20:12;5:2;1320:58:2;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;;;1388:17:2;;;;;;;:9;:17;;;;;;;;1406:10;1388:29;;;;;;;;;:36;;;;;-1:-1:-1;;;;;;1388:36:2;;;;;;;;1434:15;27:10:-1;;1388:36:2;23:18:-1;;45:23;;1434:26:2;;;;;;;;;;;;;;;;;;1513:22;;1475:61;;;;;;;1406:10;;-1:-1:-1;1475:61:2;;;;;;;;;;;-1:-1:-1;;662:902:2;;;;;:::o;1812:104::-;1858:17;1894:15;1887:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1887:22:2;;;;;;;;;;;;;;;;;;;;;;;1812:104;:::o;384:25::-;;;-1:-1:-1;;;;;384:25:2;;:::o;158:1763::-;;;;;;;;:::o
Swarm Source
bzzr://bd01ccd67dfdd9e4db0d9219bd6b2192d8304a88916bdd8d0d38a03d41612515
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.