Overview
BNB Balance
0 BNB
BNB Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Fee To | 11366689 | 1172 days ago | IN | 0 BNB | 0.00026073 |
Latest 25 internal transactions (View All)
Loading...
Loading
Contract Name:
SwapFactory
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity =0.6.12; import "@openzeppelin/contracts/math/SafeMath.sol"; import '../interfaces/ISwapFactory.sol'; import './SwapPair.sol'; contract SwapFactory is ISwapFactory { using SafeMath for uint256; address public override feeTo; address public override feeToSetter; uint256 public override feeToRate = 0; mapping(address => mapping(address => address)) public override getPair; address[] public override allPairs; event PairCreated(address indexed token0, address indexed token1, address pair, uint256); constructor() public { feeToSetter = msg.sender; } function allPairsLength() external view override returns (uint256) { return allPairs.length; } function pairCodeHash() external pure returns (bytes32) { return keccak256(type(SwapPair).creationCode); } function createPair(address tokenA, address tokenB) external override returns (address pair) { require(tokenA != tokenB, 'SwapFactory: IDENTICAL_ADDRESSES'); (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'SwapFactory: ZERO_ADDRESS'); require(getPair[token0][token1] == address(0), 'SwapFactory: PAIR_EXISTS'); // single check is sufficient bytes memory bytecode = type(SwapPair).creationCode; bytes32 salt = keccak256(abi.encodePacked(token0, token1)); assembly { pair := create2(0, add(bytecode, 32), mload(bytecode), salt) } SwapPair(pair).initialize(token0, token1); getPair[token0][token1] = pair; getPair[token1][token0] = pair; // populate mapping in the reverse direction allPairs.push(pair); emit PairCreated(token0, token1, pair, allPairs.length); } function setFeeTo(address _feeTo) external override { require(msg.sender == feeToSetter, 'SwapFactory: FORBIDDEN'); feeTo = _feeTo; } function setFeeToSetter(address _feeToSetter) external override { require(msg.sender == feeToSetter, 'SwapFactory: FORBIDDEN'); feeToSetter = _feeToSetter; } function setFeeToRate(uint256 _rate) external override { require(msg.sender == feeToSetter, 'SwapFactory: FORBIDDEN'); require(_rate > 0, 'SwapFactory: FEE_TO_RATE_OVERFLOW'); feeToRate = _rate.sub(1); } }
// SPDX-License-Identifier: MIT pragma solidity =0.6.12; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import './SwapERC20.sol'; import '../libraries/Math.sol'; import '../libraries/UQ112x112.sol'; import '../interfaces/ISwapFactory.sol'; import '../interfaces/ISwapCallee.sol'; contract SwapPair is SwapERC20 { using SafeMath for uint256; using UQ112x112 for uint224; uint256 public constant MINIMUM_LIQUIDITY = 10**3; bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)'))); address public factory; address public token0; address public token1; uint112 private reserve0; // uses single storage slot, accessible via getReserves uint112 private reserve1; // uses single storage slot, accessible via getReserves uint32 private blockTimestampLast; // uses single storage slot, accessible via getReserves uint256 public price0CumulativeLast; uint256 public price1CumulativeLast; uint256 public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event uint256 private unlocked = 1; modifier lock() { require(unlocked == 1, 'SwapPair: LOCKED'); unlocked = 0; _; unlocked = 1; } function getReserves() public view returns ( uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast ) { _reserve0 = reserve0; _reserve1 = reserve1; _blockTimestampLast = blockTimestampLast; } function _safeTransfer( address token, address to, uint256 value ) private { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'SwapPair: TRANSFER_FAILED'); } 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); constructor() public { factory = msg.sender; } // called once by the factory at time of deployment function initialize(address _token0, address _token1) external { require(msg.sender == factory, 'SwapPair: FORBIDDEN'); // sufficient check token0 = _token0; token1 = _token1; } // update reserves and, on the first call per block, price accumulators function _update( uint256 balance0, uint256 balance1, uint112 _reserve0, uint112 _reserve1 ) private { require(balance0 <= uint112(-1) && balance1 <= uint112(-1), 'SwapPair: OVERFLOW'); uint32 blockTimestamp = uint32(block.timestamp % 2**32); uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) { // * never overflows, and + overflow is desired price0CumulativeLast += uint256(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed; price1CumulativeLast += uint256(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed; } reserve0 = uint112(balance0); reserve1 = uint112(balance1); blockTimestampLast = blockTimestamp; emit Sync(reserve0, reserve1); } // if fee is on, mint liquidity equivalent to 1/6th of the growth in sqrt(k) function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) { address feeTo = ISwapFactory(factory).feeTo(); feeOn = feeTo != address(0); uint256 _kLast = kLast; // gas savings if (feeOn) { if (_kLast != 0) { uint256 rootK = Math.sqrt(uint256(_reserve0).mul(_reserve1)); uint256 rootKLast = Math.sqrt(_kLast); if (rootK > rootKLast) { uint256 numerator = totalSupply.mul(rootK.sub(rootKLast)); uint256 denominator = rootK.mul(ISwapFactory(factory).feeToRate()).add(rootKLast); uint256 liquidity = numerator / denominator; if (liquidity > 0) _mint(feeTo, liquidity); } } } else if (_kLast != 0) { kLast = 0; } } // this low-level function should be called from a contract which performs important safety checks function mint(address to) external lock returns (uint256 liquidity) { (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings uint256 balance0 = IERC20(token0).balanceOf(address(this)); uint256 balance1 = IERC20(token1).balanceOf(address(this)); uint256 amount0 = balance0.sub(_reserve0); uint256 amount1 = balance1.sub(_reserve1); bool feeOn = _mintFee(_reserve0, _reserve1); uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee if (_totalSupply == 0) { liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY); _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens } else { liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1); } require(liquidity > 0, 'SwapPair: INSUFFICIENT_LIQUIDITY_MINTED'); _mint(to, liquidity); _update(balance0, balance1, _reserve0, _reserve1); if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date emit Mint(msg.sender, amount0, amount1); } // this low-level function should be called from a contract which performs important safety checks function burn(address to) external lock returns (uint256 amount0, uint256 amount1) { (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings address _token0 = token0; // gas savings address _token1 = token1; // gas savings uint256 balance0 = IERC20(_token0).balanceOf(address(this)); uint256 balance1 = IERC20(_token1).balanceOf(address(this)); uint256 liquidity = balanceOf[address(this)]; bool feeOn = _mintFee(_reserve0, _reserve1); uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution require(amount0 > 0 && amount1 > 0, 'SwapPair: INSUFFICIENT_LIQUIDITY_BURNED'); _burn(address(this), liquidity); _safeTransfer(_token0, to, amount0); _safeTransfer(_token1, to, amount1); balance0 = IERC20(_token0).balanceOf(address(this)); balance1 = IERC20(_token1).balanceOf(address(this)); _update(balance0, balance1, _reserve0, _reserve1); if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date emit Burn(msg.sender, amount0, amount1, to); } // this low-level function should be called from a contract which performs important safety checks function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external lock { require(amount0Out > 0 || amount1Out > 0, 'SwapPair: INSUFFICIENT_OUTPUT_AMOUNT'); (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings require(amount0Out < _reserve0 && amount1Out < _reserve1, 'SwapPair: INSUFFICIENT_LIQUIDITY'); uint256 balance0; uint256 balance1; { // scope for _token{0,1}, avoids stack too deep errors address _token0 = token0; address _token1 = token1; require(to != _token0 && to != _token1, 'SwapPair: INVALID_TO'); if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens if (data.length > 0) ISwapCallee(to).SwapCall(msg.sender, amount0Out, amount1Out, data); balance0 = IERC20(_token0).balanceOf(address(this)); balance1 = IERC20(_token1).balanceOf(address(this)); } uint256 amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0; uint256 amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0; require(amount0In > 0 || amount1In > 0, 'SwapPair: INSUFFICIENT_INPUT_AMOUNT'); { // scope for reserve{0,1}Adjusted, avoids stack too deep errors uint256 balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(3)); uint256 balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3)); require( balance0Adjusted.mul(balance1Adjusted) >= uint256(_reserve0).mul(_reserve1).mul(1000**2), 'SwapPair: K' ); } _update(balance0, balance1, _reserve0, _reserve1); emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to); } // force balances to match reserves function skim(address to) external lock { address _token0 = token0; // gas savings address _token1 = token1; // gas savings _safeTransfer(_token0, to, IERC20(_token0).balanceOf(address(this)).sub(reserve0)); _safeTransfer(_token1, to, IERC20(_token1).balanceOf(address(this)).sub(reserve1)); } // force reserves to match balances function sync() external lock { _update( IERC20(token0).balanceOf(address(this)), IERC20(token1).balanceOf(address(this)), reserve0, reserve1 ); } function getPrice(address token, uint256 baseDecimal) public view returns (uint256) { if ((token0 != token && token1 != token) || 0 == reserve0 || 0 == reserve1) { return 0; } if (token0 == token) { return uint256(reserve1).mul(baseDecimal).div(uint256(reserve0)); } else { return uint256(reserve0).mul(baseDecimal).div(uint256(reserve1)); } } }
// SPDX-License-Identifier: MIT pragma solidity =0.6.12; import "@openzeppelin/contracts/math/SafeMath.sol"; contract SwapERC20 { using SafeMath for uint256; string public constant name = 'DSG LP Token'; string public constant symbol = 'DsgLP'; uint8 public constant decimals = 18; uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; bytes32 public DOMAIN_SEPARATOR; // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; mapping(address => uint256) public nonces; event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); constructor() public { uint256 chainId; assembly { chainId := chainid() } DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'), keccak256(bytes(name)), keccak256(bytes('1')), chainId, address(this) ) ); } function _mint(address to, uint256 value) internal { totalSupply = totalSupply.add(value); balanceOf[to] = balanceOf[to].add(value); emit Transfer(address(0), to, value); } function _burn(address from, uint256 value) internal { balanceOf[from] = balanceOf[from].sub(value); totalSupply = totalSupply.sub(value); emit Transfer(from, address(0), value); } function _approve( address owner, address spender, uint256 value ) private { allowance[owner][spender] = value; emit Approval(owner, spender, value); } function _transfer( address from, address to, uint256 value ) private { balanceOf[from] = balanceOf[from].sub(value); balanceOf[to] = balanceOf[to].add(value); emit Transfer(from, to, value); } function approve(address spender, uint256 value) external returns (bool) { _approve(msg.sender, spender, value); return true; } function transfer(address to, uint256 value) external returns (bool) { _transfer(msg.sender, to, value); return true; } function transferFrom( address from, address to, uint256 value ) external returns (bool) { if (allowance[from][msg.sender] != uint256(-1)) { allowance[from][msg.sender] = allowance[from][msg.sender].sub(value); } _transfer(from, to, value); return true; } function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external { require(deadline >= block.timestamp, 'SwapERC20: EXPIRED'); bytes32 digest = keccak256( abi.encodePacked( '\x19\x01', DOMAIN_SEPARATOR, keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)) ) ); address recoveredAddress = ecrecover(digest, v, r, s); require(recoveredAddress != address(0) && recoveredAddress == owner, 'SwapERC20: INVALID_SIGNATURE'); _approve(owner, spender, value); } }
// SPDX-License-Identifier: MIT pragma solidity =0.6.12; // a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format)) // range: [0, 2**112 - 1] // resolution: 1 / 2**112 library UQ112x112 { uint224 constant Q112 = 2**112; // encode a uint112 as a UQ112x112 function encode(uint112 y) internal pure returns (uint224 z) { z = uint224(y) * Q112; // never overflows } // divide a UQ112x112 by a uint112, returning a UQ112x112 function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) { z = x / uint224(y); } }
// SPDX-License-Identifier: MIT pragma solidity =0.6.12; // a library for performing various math operations library Math { function min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } else z = 0; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface ISwapFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function feeToRate() external view returns (uint256); 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 setFeeToRate(uint256) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface ISwapCallee { function SwapCall( address sender, uint256 amount0, uint256 amount1, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "istanbul", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PairCreated","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allPairsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"createPair","outputs":[{"internalType":"address","name":"pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeToRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeToSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairCodeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setFeeToRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"name":"setFeeToSetter","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600060025534801561001557600080fd5b50600180546001600160a01b03191633179055612d18806100376000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063a2e74af611610071578063a2e74af614610119578063b5e4aa7214610141578063c9c653961461015e578063deba86e31461018c578063e6a4390514610194578063f46901ed146101c2576100a9565b8063017e7e58146100ae578063094b7415146100d25780631e3dd18b146100da578063574f2ba3146100f75780639aab924814610111575b600080fd5b6100b66101e8565b604080516001600160a01b039092168252519081900360200190f35b6100b66101f7565b6100b6600480360360208110156100f057600080fd5b5035610206565b6100ff61022d565b60408051918252519081900360200190f35b6100ff610233565b61013f6004803603602081101561012f57600080fd5b50356001600160a01b0316610265565b005b61013f6004803603602081101561015757600080fd5b50356102df565b6100b66004803603604081101561017457600080fd5b506001600160a01b0381358116916020013516610387565b6100ff6106b9565b6100b6600480360360408110156101aa57600080fd5b506001600160a01b03813581169160200135166106bf565b61013f600480360360208110156101d857600080fd5b50356001600160a01b03166106e5565b6000546001600160a01b031681565b6001546001600160a01b031681565b6004818154811061021357fe5b6000918252602090912001546001600160a01b0316905081565b60045490565b600060405180602001610245906107bc565b6020820181038252601f19601f8201166040525080519060200120905090565b6001546001600160a01b031633146102bd576040805162461bcd60e51b815260206004820152601660248201527529bbb0b82330b1ba37b93c9d102327a92124a22222a760511b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610337576040805162461bcd60e51b815260206004820152601660248201527529bbb0b82330b1ba37b93c9d102327a92124a22222a760511b604482015290519081900360640190fd5b600081116103765760405162461bcd60e51b8152600401808060200182810382526021815260200180612cc26021913960400191505060405180910390fd5b61038181600161075f565b60025550565b6000816001600160a01b0316836001600160a01b031614156103f0576040805162461bcd60e51b815260206004820181905260248201527f53776170466163746f72793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b600080836001600160a01b0316856001600160a01b031610610413578385610416565b84845b90925090506001600160a01b038216610476576040805162461bcd60e51b815260206004820152601960248201527f53776170466163746f72793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b6001600160a01b038281166000908152600360209081526040808320858516845290915290205416156104f0576040805162461bcd60e51b815260206004820152601860248201527f53776170466163746f72793a20504149525f4558495354530000000000000000604482015290519081900360640190fd5b606060405180602001610502906107bc565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b031660601b8152601401826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f59450846001600160a01b031663485cc95585856040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050600060405180830381600087803b1580156105cf57600080fd5b505af11580156105e3573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526003602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560048054600181018255958190527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60025481565b60036020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b0316331461073d576040805162461bcd60e51b815260206004820152601660248201527529bbb0b82330b1ba37b93c9d102327a92124a22222a760511b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828211156107b6576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6124f8806107ca8339019056fe60806040526001600c5534801561001557600080fd5b50604080518082018252600c81526b2229a3902628102a37b5b2b760a11b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f7b8ee23b07477835ff3b9aa8a001930935b437bd20aeba3e8aaef719166f1a79818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b031916331790556123ee8061010a6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a71461057b578063d505accf14610583578063dd62ed3e146105d4578063fff6cae914610602576101c4565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573576101c4565b80637ecebe00116100d35780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101c4565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101c4565b806330adf81f11610166578063449e815d11610140578063449e815d146103ee578063485cc9551461041a5780635909c0d5146104485780635a3d549314610450576101c4565b806330adf81f146103c0578063313ce567146103c85780633644e515146103e6576101c4565b8063095ea7b3116101a2578063095ea7b31461030c5780630dfe16811461034c57806318160ddd1461037057806323b872dd1461038a576101c4565b8063022c0d9f146101c957806306fdde03146102575780630902f1ac146102d4575b600080fd5b610255600480360360808110156101df57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561021657600080fd5b82018360208201111561022857600080fd5b8035906020019184600183028401116401000000008311171561024a57600080fd5b50909250905061060a565b005b61025f610b25565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610299578181015183820152602001610281565b50505050905090810190601f1680156102c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102dc610b4d565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103386004803603604081101561032257600080fd5b506001600160a01b038135169060200135610b77565b604080519115158252519081900360200190f35b610354610b8e565b604080516001600160a01b039092168252519081900360200190f35b610378610b9d565b60408051918252519081900360200190f35b610338600480360360608110156103a057600080fd5b506001600160a01b03813581169160208101359091169060400135610ba3565b610378610c37565b6103d0610c5b565b6040805160ff9092168252519081900360200190f35b610378610c60565b6103786004803603604081101561040457600080fd5b506001600160a01b038135169060200135610c66565b6102556004803603604081101561043057600080fd5b506001600160a01b0381358116916020013516610d3e565b610378610dc1565b610378610dc7565b6103786004803603602081101561046e57600080fd5b50356001600160a01b0316610dcd565b6103786004803603602081101561049457600080fd5b50356001600160a01b03166110a8565b6103786110ba565b610378600480360360208110156104c257600080fd5b50356001600160a01b03166110c0565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b03166110d2565b6040805192835260208301919091528051918290030190f35b61025f611465565b6103386004803603604081101561052f57600080fd5b506001600160a01b038135169060200135611486565b610378611493565b6102556004803603602081101561056357600080fd5b50356001600160a01b0316611499565b61035461160a565b610354611619565b610255600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611628565b610378600480360360408110156105ea57600080fd5b506001600160a01b038135811691602001351661182a565b610255611847565b600c54600114610654576040805162461bcd60e51b815260206004820152601060248201526f14ddd85c14185a5c8e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c55841515806106675750600084115b6106a25760405162461bcd60e51b815260040180806020018281038252602481526020018061236e6024913960400191505060405180910390fd5b6000806106ad610b4d565b5091509150816001600160701b0316871080156106d25750806001600160701b031686105b610723576040805162461bcd60e51b815260206004820181905260248201527f53776170506169723a20494e53554646494349454e545f4c4951554944495459604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107615750806001600160a01b0316896001600160a01b031614155b6107a9576040805162461bcd60e51b815260206004820152601460248201527353776170506169723a20494e56414c49445f544f60601b604482015290519081900360640190fd5b8a156107ba576107ba828a8d6119a8565b89156107cb576107cb818a8c6119a8565b861561087d57886001600160a01b031663fdb610cd338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561086457600080fd5b505af1158015610878573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108c357600080fd5b505afa1580156108d7573d6000803e3d6000fd5b505050506040513d60208110156108ed57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561093957600080fd5b505afa15801561094d573d6000803e3d6000fd5b505050506040513d602081101561096357600080fd5b5051925060009150506001600160701b0385168a90038311610986576000610995565b89856001600160701b03160383035b9050600089856001600160701b03160383116109b25760006109c1565b89856001600160701b03160383035b905060008211806109d25750600081115b610a0d5760405162461bcd60e51b81526004018080602001828103825260238152602001806123036023913960400191505060405180910390fd5b6000610a2f610a1d846003611b42565b610a29876103e8611b42565b90611ba2565b90506000610a41610a1d846003611b42565b9050610a66620f4240610a606001600160701b038b8116908b16611b42565b90611b42565b610a708383611b42565b1015610ab1576040805162461bcd60e51b815260206004820152600b60248201526a53776170506169723a204b60a81b604482015290519081900360640190fd5b5050610abf84848888611bff565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600c81526020016b2229a3902628102a37b5b2b760a11b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b84338484611dbd565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c22576001600160a01b0384166000908152600260209081526040808320338452909152902054610bfd9083611ba2565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c2d848484611e1f565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6006546000906001600160a01b03848116911614801590610c9557506007546001600160a01b03848116911614155b80610ca957506008546001600160701b0316155b80610cc45750600854600160701b90046001600160701b0316155b15610cd157506000610b88565b6006546001600160a01b0384811691161415610d1a57600854610d13906001600160701b0380821691610d0d91600160701b9091041685611b42565b90611ecd565b9050610b88565b600854610d13906001600160701b03600160701b8204811691610d0d911685611b42565b6005546001600160a01b03163314610d93576040805162461bcd60e51b815260206004820152601360248201527229bbb0b82830b4b91d102327a92124a22222a760691b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610e19576040805162461bcd60e51b815260206004820152601060248201526f14ddd85c14185a5c8e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c81905580610e29610b4d565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e7d57600080fd5b505afa158015610e91573d6000803e3d6000fd5b505050506040513d6020811015610ea757600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610efa57600080fd5b505afa158015610f0e573d6000803e3d6000fd5b505050506040513d6020811015610f2457600080fd5b505190506000610f3d836001600160701b038716611ba2565b90506000610f54836001600160701b038716611ba2565b90506000610f628787611f34565b60005490915080610f9957610f856103e8610a29610f808787611b42565b6120ed565b9850610f9460006103e8612147565b610fdc565b610fd96001600160701b038916610fb08684611b42565b81610fb757fe5b046001600160701b038916610fcc8685611b42565b81610fd357fe5b046121d1565b98505b6000891161101b5760405162461bcd60e51b81526004018080602001828103825260278152602001806123266027913960400191505060405180910390fd5b6110258a8a612147565b61103186868a8a611bff565b811561105b57600854611057906001600160701b0380821691600160701b900416611b42565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461111f576040805162461bcd60e51b815260206004820152601060248201526f14ddd85c14185a5c8e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c8190558061112f610b4d565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561118b57600080fd5b505afa15801561119f573d6000803e3d6000fd5b505050506040513d60208110156111b557600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561120357600080fd5b505afa158015611217573d6000803e3d6000fd5b505050506040513d602081101561122d57600080fd5b50513060009081526001602052604081205491925061124c8888611f34565b6000549091508061125d8487611b42565b8161126457fe5b049a50806112728486611b42565b8161127957fe5b04995060008b11801561128c575060008a115b6112c75760405162461bcd60e51b81526004018080602001828103825260278152602001806123926027913960400191505060405180910390fd5b6112d130846121e7565b6112dc878d8d6119a8565b6112e7868d8c6119a8565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561132d57600080fd5b505afa158015611341573d6000803e3d6000fd5b505050506040513d602081101561135757600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156113a357600080fd5b505afa1580156113b7573d6000803e3d6000fd5b505050506040513d60208110156113cd57600080fd5b505193506113dd85858b8b611bff565b811561140757600854611403906001600160701b0380821691600160701b900416611b42565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600581526020016404473674c560dc1b81525081565b6000610b84338484611e1f565b6103e881565b600c546001146114e3576040805162461bcd60e51b815260206004820152601060248201526f14ddd85c14185a5c8e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261158c9285928792611587926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561155557600080fd5b505afa158015611569573d6000803e3d6000fd5b505050506040513d602081101561157f57600080fd5b505190611ba2565b6119a8565b61160081846115876008600e9054906101000a90046001600160701b03166001600160701b0316856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561155557600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611672576040805162461bcd60e51b815260206004820152601260248201527114ddd85c115490cc8c0e881156141254915160721b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa15801561178d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117c35750886001600160a01b0316816001600160a01b0316145b611814576040805162461bcd60e51b815260206004820152601c60248201527f5377617045524332303a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b61181f898989611dbd565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611891576040805162461bcd60e51b815260206004820152601060248201526f14ddd85c14185a5c8e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516119a1926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156118e257600080fd5b505afa1580156118f6573d6000803e3d6000fd5b505050506040513d602081101561190c57600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561195957600080fd5b505afa15801561196d573d6000803e3d6000fd5b505050506040513d602081101561198357600080fd5b50516008546001600160701b0380821691600160701b900416611bff565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611a555780518252601f199092019160209182019101611a36565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611ab7576040519150601f19603f3d011682016040523d82523d6000602084013e611abc565b606091505b5091509150818015611aea575080511580611aea5750808060200190516020811015611ae757600080fd5b50515b611b3b576040805162461bcd60e51b815260206004820152601960248201527f53776170506169723a205452414e534645525f4641494c454400000000000000604482015290519081900360640190fd5b5050505050565b600082611b5157506000610b88565b82820282848281611b5e57fe5b0414611b9b5760405162461bcd60e51b815260040180806020018281038252602181526020018061234d6021913960400191505060405180910390fd5b9392505050565b600082821115611bf9576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160701b038411801590611c1d57506001600160701b038311155b611c63576040805162461bcd60e51b815260206004820152601260248201527153776170506169723a204f564552464c4f5760701b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611c9357506001600160701b03841615155b8015611ca757506001600160701b03831615155b15611d12578063ffffffff16611ccf85611cc086612279565b6001600160e01b03169061228b565b600980546001600160e01b03929092169290920201905563ffffffff8116611cfa84611cc087612279565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611e429082611ba2565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611e7190826122a8565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000808211611f23576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611f2c57fe5b049392505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8557600080fd5b505afa158015611f99573d6000803e3d6000fd5b505050506040513d6020811015611faf57600080fd5b5051600b546001600160a01b0382161580159450919250906120d95780156120d4576000611fec610f806001600160701b03888116908816611b42565b90506000611ff9836120ed565b9050808211156120d157600061201b6120128484611ba2565b60005490611b42565b905060006120ad836120a7600560009054906101000a90046001600160a01b03166001600160a01b031663deba86e36040518163ffffffff1660e01b815260040160206040518083038186803b15801561207457600080fd5b505afa158015612088573d6000803e3d6000fd5b505050506040513d602081101561209e57600080fd5b50518790611b42565b906122a8565b905060008183816120ba57fe5b04905080156120cd576120cd8782612147565b5050505b50505b6120e5565b80156120e5576000600b555b505092915050565b60006003821115612130575080600160028204015b8181101561212a5780915060028182858161211957fe5b04018161212257fe5b049050612102565b50612142565b811561213e57506001612142565b5060005b919050565b60005461215490826122a8565b60009081556001600160a01b03831681526001602052604090205461217990826122a8565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106121e05781611b9b565b5090919050565b6001600160a01b03821660009081526001602052604090205461220a9082611ba2565b6001600160a01b038316600090815260016020526040812091909155546122319082611ba2565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b03841681611f2c57fe5b600082820183811015611b9b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fdfe53776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e5453776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e5453776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a26469706673582212200306a445894d23e26b621e5256580069cfec7ef3bc8fcc2de2bfd797f6b137df64736f6c634300060c003353776170466163746f72793a204645455f544f5f524154455f4f564552464c4f57a26469706673582212207d27df25f63bc6acd80520ec0c66103402e92d68d9d7a0e7031b8fe37343679564736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063a2e74af611610071578063a2e74af614610119578063b5e4aa7214610141578063c9c653961461015e578063deba86e31461018c578063e6a4390514610194578063f46901ed146101c2576100a9565b8063017e7e58146100ae578063094b7415146100d25780631e3dd18b146100da578063574f2ba3146100f75780639aab924814610111575b600080fd5b6100b66101e8565b604080516001600160a01b039092168252519081900360200190f35b6100b66101f7565b6100b6600480360360208110156100f057600080fd5b5035610206565b6100ff61022d565b60408051918252519081900360200190f35b6100ff610233565b61013f6004803603602081101561012f57600080fd5b50356001600160a01b0316610265565b005b61013f6004803603602081101561015757600080fd5b50356102df565b6100b66004803603604081101561017457600080fd5b506001600160a01b0381358116916020013516610387565b6100ff6106b9565b6100b6600480360360408110156101aa57600080fd5b506001600160a01b03813581169160200135166106bf565b61013f600480360360208110156101d857600080fd5b50356001600160a01b03166106e5565b6000546001600160a01b031681565b6001546001600160a01b031681565b6004818154811061021357fe5b6000918252602090912001546001600160a01b0316905081565b60045490565b600060405180602001610245906107bc565b6020820181038252601f19601f8201166040525080519060200120905090565b6001546001600160a01b031633146102bd576040805162461bcd60e51b815260206004820152601660248201527529bbb0b82330b1ba37b93c9d102327a92124a22222a760511b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610337576040805162461bcd60e51b815260206004820152601660248201527529bbb0b82330b1ba37b93c9d102327a92124a22222a760511b604482015290519081900360640190fd5b600081116103765760405162461bcd60e51b8152600401808060200182810382526021815260200180612cc26021913960400191505060405180910390fd5b61038181600161075f565b60025550565b6000816001600160a01b0316836001600160a01b031614156103f0576040805162461bcd60e51b815260206004820181905260248201527f53776170466163746f72793a204944454e544943414c5f414444524553534553604482015290519081900360640190fd5b600080836001600160a01b0316856001600160a01b031610610413578385610416565b84845b90925090506001600160a01b038216610476576040805162461bcd60e51b815260206004820152601960248201527f53776170466163746f72793a205a45524f5f4144445245535300000000000000604482015290519081900360640190fd5b6001600160a01b038281166000908152600360209081526040808320858516845290915290205416156104f0576040805162461bcd60e51b815260206004820152601860248201527f53776170466163746f72793a20504149525f4558495354530000000000000000604482015290519081900360640190fd5b606060405180602001610502906107bc565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b031660601b8152601401826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f59450846001600160a01b031663485cc95585856040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050600060405180830381600087803b1580156105cf57600080fd5b505af11580156105e3573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526003602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560048054600181018255958190527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60025481565b60036020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b0316331461073d576040805162461bcd60e51b815260206004820152601660248201527529bbb0b82330b1ba37b93c9d102327a92124a22222a760511b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000828211156107b6576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6124f8806107ca8339019056fe60806040526001600c5534801561001557600080fd5b50604080518082018252600c81526b2229a3902628102a37b5b2b760a11b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f7b8ee23b07477835ff3b9aa8a001930935b437bd20aeba3e8aaef719166f1a79818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b031916331790556123ee8061010a6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a71461057b578063d505accf14610583578063dd62ed3e146105d4578063fff6cae914610602576101c4565b8063ba9a7a5614610545578063bc25cf771461054d578063c45a015514610573576101c4565b80637ecebe00116100d35780637ecebe00146104ac57806389afcb44146104d257806395d89b4114610511578063a9059cbb14610519576101c4565b80636a6278421461045857806370a082311461047e5780637464fc3d146104a4576101c4565b806330adf81f11610166578063449e815d11610140578063449e815d146103ee578063485cc9551461041a5780635909c0d5146104485780635a3d549314610450576101c4565b806330adf81f146103c0578063313ce567146103c85780633644e515146103e6576101c4565b8063095ea7b3116101a2578063095ea7b31461030c5780630dfe16811461034c57806318160ddd1461037057806323b872dd1461038a576101c4565b8063022c0d9f146101c957806306fdde03146102575780630902f1ac146102d4575b600080fd5b610255600480360360808110156101df57600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561021657600080fd5b82018360208201111561022857600080fd5b8035906020019184600183028401116401000000008311171561024a57600080fd5b50909250905061060a565b005b61025f610b25565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610299578181015183820152602001610281565b50505050905090810190601f1680156102c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102dc610b4d565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103386004803603604081101561032257600080fd5b506001600160a01b038135169060200135610b77565b604080519115158252519081900360200190f35b610354610b8e565b604080516001600160a01b039092168252519081900360200190f35b610378610b9d565b60408051918252519081900360200190f35b610338600480360360608110156103a057600080fd5b506001600160a01b03813581169160208101359091169060400135610ba3565b610378610c37565b6103d0610c5b565b6040805160ff9092168252519081900360200190f35b610378610c60565b6103786004803603604081101561040457600080fd5b506001600160a01b038135169060200135610c66565b6102556004803603604081101561043057600080fd5b506001600160a01b0381358116916020013516610d3e565b610378610dc1565b610378610dc7565b6103786004803603602081101561046e57600080fd5b50356001600160a01b0316610dcd565b6103786004803603602081101561049457600080fd5b50356001600160a01b03166110a8565b6103786110ba565b610378600480360360208110156104c257600080fd5b50356001600160a01b03166110c0565b6104f8600480360360208110156104e857600080fd5b50356001600160a01b03166110d2565b6040805192835260208301919091528051918290030190f35b61025f611465565b6103386004803603604081101561052f57600080fd5b506001600160a01b038135169060200135611486565b610378611493565b6102556004803603602081101561056357600080fd5b50356001600160a01b0316611499565b61035461160a565b610354611619565b610255600480360360e081101561059957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611628565b610378600480360360408110156105ea57600080fd5b506001600160a01b038135811691602001351661182a565b610255611847565b600c54600114610654576040805162461bcd60e51b815260206004820152601060248201526f14ddd85c14185a5c8e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c55841515806106675750600084115b6106a25760405162461bcd60e51b815260040180806020018281038252602481526020018061236e6024913960400191505060405180910390fd5b6000806106ad610b4d565b5091509150816001600160701b0316871080156106d25750806001600160701b031686105b610723576040805162461bcd60e51b815260206004820181905260248201527f53776170506169723a20494e53554646494349454e545f4c4951554944495459604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107615750806001600160a01b0316896001600160a01b031614155b6107a9576040805162461bcd60e51b815260206004820152601460248201527353776170506169723a20494e56414c49445f544f60601b604482015290519081900360640190fd5b8a156107ba576107ba828a8d6119a8565b89156107cb576107cb818a8c6119a8565b861561087d57886001600160a01b031663fdb610cd338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561086457600080fd5b505af1158015610878573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108c357600080fd5b505afa1580156108d7573d6000803e3d6000fd5b505050506040513d60208110156108ed57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561093957600080fd5b505afa15801561094d573d6000803e3d6000fd5b505050506040513d602081101561096357600080fd5b5051925060009150506001600160701b0385168a90038311610986576000610995565b89856001600160701b03160383035b9050600089856001600160701b03160383116109b25760006109c1565b89856001600160701b03160383035b905060008211806109d25750600081115b610a0d5760405162461bcd60e51b81526004018080602001828103825260238152602001806123036023913960400191505060405180910390fd5b6000610a2f610a1d846003611b42565b610a29876103e8611b42565b90611ba2565b90506000610a41610a1d846003611b42565b9050610a66620f4240610a606001600160701b038b8116908b16611b42565b90611b42565b610a708383611b42565b1015610ab1576040805162461bcd60e51b815260206004820152600b60248201526a53776170506169723a204b60a81b604482015290519081900360640190fd5b5050610abf84848888611bff565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600c81526020016b2229a3902628102a37b5b2b760a11b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b84338484611dbd565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c22576001600160a01b0384166000908152600260209081526040808320338452909152902054610bfd9083611ba2565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c2d848484611e1f565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6006546000906001600160a01b03848116911614801590610c9557506007546001600160a01b03848116911614155b80610ca957506008546001600160701b0316155b80610cc45750600854600160701b90046001600160701b0316155b15610cd157506000610b88565b6006546001600160a01b0384811691161415610d1a57600854610d13906001600160701b0380821691610d0d91600160701b9091041685611b42565b90611ecd565b9050610b88565b600854610d13906001600160701b03600160701b8204811691610d0d911685611b42565b6005546001600160a01b03163314610d93576040805162461bcd60e51b815260206004820152601360248201527229bbb0b82830b4b91d102327a92124a22222a760691b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610e19576040805162461bcd60e51b815260206004820152601060248201526f14ddd85c14185a5c8e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c81905580610e29610b4d565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e7d57600080fd5b505afa158015610e91573d6000803e3d6000fd5b505050506040513d6020811015610ea757600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610efa57600080fd5b505afa158015610f0e573d6000803e3d6000fd5b505050506040513d6020811015610f2457600080fd5b505190506000610f3d836001600160701b038716611ba2565b90506000610f54836001600160701b038716611ba2565b90506000610f628787611f34565b60005490915080610f9957610f856103e8610a29610f808787611b42565b6120ed565b9850610f9460006103e8612147565b610fdc565b610fd96001600160701b038916610fb08684611b42565b81610fb757fe5b046001600160701b038916610fcc8685611b42565b81610fd357fe5b046121d1565b98505b6000891161101b5760405162461bcd60e51b81526004018080602001828103825260278152602001806123266027913960400191505060405180910390fd5b6110258a8a612147565b61103186868a8a611bff565b811561105b57600854611057906001600160701b0380821691600160701b900416611b42565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461111f576040805162461bcd60e51b815260206004820152601060248201526f14ddd85c14185a5c8e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c8190558061112f610b4d565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561118b57600080fd5b505afa15801561119f573d6000803e3d6000fd5b505050506040513d60208110156111b557600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561120357600080fd5b505afa158015611217573d6000803e3d6000fd5b505050506040513d602081101561122d57600080fd5b50513060009081526001602052604081205491925061124c8888611f34565b6000549091508061125d8487611b42565b8161126457fe5b049a50806112728486611b42565b8161127957fe5b04995060008b11801561128c575060008a115b6112c75760405162461bcd60e51b81526004018080602001828103825260278152602001806123926027913960400191505060405180910390fd5b6112d130846121e7565b6112dc878d8d6119a8565b6112e7868d8c6119a8565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561132d57600080fd5b505afa158015611341573d6000803e3d6000fd5b505050506040513d602081101561135757600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156113a357600080fd5b505afa1580156113b7573d6000803e3d6000fd5b505050506040513d60208110156113cd57600080fd5b505193506113dd85858b8b611bff565b811561140757600854611403906001600160701b0380821691600160701b900416611b42565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600581526020016404473674c560dc1b81525081565b6000610b84338484611e1f565b6103e881565b600c546001146114e3576040805162461bcd60e51b815260206004820152601060248201526f14ddd85c14185a5c8e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261158c9285928792611587926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561155557600080fd5b505afa158015611569573d6000803e3d6000fd5b505050506040513d602081101561157f57600080fd5b505190611ba2565b6119a8565b61160081846115876008600e9054906101000a90046001600160701b03166001600160701b0316856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561155557600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611672576040805162461bcd60e51b815260206004820152601260248201527114ddd85c115490cc8c0e881156141254915160721b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa15801561178d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117c35750886001600160a01b0316816001600160a01b0316145b611814576040805162461bcd60e51b815260206004820152601c60248201527f5377617045524332303a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b61181f898989611dbd565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611891576040805162461bcd60e51b815260206004820152601060248201526f14ddd85c14185a5c8e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516119a1926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156118e257600080fd5b505afa1580156118f6573d6000803e3d6000fd5b505050506040513d602081101561190c57600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561195957600080fd5b505afa15801561196d573d6000803e3d6000fd5b505050506040513d602081101561198357600080fd5b50516008546001600160701b0380821691600160701b900416611bff565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611a555780518252601f199092019160209182019101611a36565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611ab7576040519150601f19603f3d011682016040523d82523d6000602084013e611abc565b606091505b5091509150818015611aea575080511580611aea5750808060200190516020811015611ae757600080fd5b50515b611b3b576040805162461bcd60e51b815260206004820152601960248201527f53776170506169723a205452414e534645525f4641494c454400000000000000604482015290519081900360640190fd5b5050505050565b600082611b5157506000610b88565b82820282848281611b5e57fe5b0414611b9b5760405162461bcd60e51b815260040180806020018281038252602181526020018061234d6021913960400191505060405180910390fd5b9392505050565b600082821115611bf9576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160701b038411801590611c1d57506001600160701b038311155b611c63576040805162461bcd60e51b815260206004820152601260248201527153776170506169723a204f564552464c4f5760701b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611c9357506001600160701b03841615155b8015611ca757506001600160701b03831615155b15611d12578063ffffffff16611ccf85611cc086612279565b6001600160e01b03169061228b565b600980546001600160e01b03929092169290920201905563ffffffff8116611cfa84611cc087612279565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611e429082611ba2565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611e7190826122a8565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000808211611f23576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381611f2c57fe5b049392505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8557600080fd5b505afa158015611f99573d6000803e3d6000fd5b505050506040513d6020811015611faf57600080fd5b5051600b546001600160a01b0382161580159450919250906120d95780156120d4576000611fec610f806001600160701b03888116908816611b42565b90506000611ff9836120ed565b9050808211156120d157600061201b6120128484611ba2565b60005490611b42565b905060006120ad836120a7600560009054906101000a90046001600160a01b03166001600160a01b031663deba86e36040518163ffffffff1660e01b815260040160206040518083038186803b15801561207457600080fd5b505afa158015612088573d6000803e3d6000fd5b505050506040513d602081101561209e57600080fd5b50518790611b42565b906122a8565b905060008183816120ba57fe5b04905080156120cd576120cd8782612147565b5050505b50505b6120e5565b80156120e5576000600b555b505092915050565b60006003821115612130575080600160028204015b8181101561212a5780915060028182858161211957fe5b04018161212257fe5b049050612102565b50612142565b811561213e57506001612142565b5060005b919050565b60005461215490826122a8565b60009081556001600160a01b03831681526001602052604090205461217990826122a8565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106121e05781611b9b565b5090919050565b6001600160a01b03821660009081526001602052604090205461220a9082611ba2565b6001600160a01b038316600090815260016020526040812091909155546122319082611ba2565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b03841681611f2c57fe5b600082820183811015611b9b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fdfe53776170506169723a20494e53554646494349454e545f494e5055545f414d4f554e5453776170506169723a20494e53554646494349454e545f4c49515549444954595f4d494e544544536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753776170506169723a20494e53554646494349454e545f4f55545055545f414d4f554e5453776170506169723a20494e53554646494349454e545f4c49515549444954595f4255524e4544a26469706673582212200306a445894d23e26b621e5256580069cfec7ef3bc8fcc2de2bfd797f6b137df64736f6c634300060c003353776170466163746f72793a204645455f544f5f524154455f4f564552464c4f57a26469706673582212207d27df25f63bc6acd80520ec0c66103402e92d68d9d7a0e7031b8fe37343679564736f6c634300060c0033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.