ETH Price: $2,388.91 (+0.48%)
Gas: 3.73 Gwei

Contract

0x45d0cc9Eb94dd696559B6b83612885A826eEC873
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Redeem188107552023-12-18 5:19:47436 days ago1702876787IN
0x45d0cc9E...826eEC873
0 ETH0.0093776438.15650083
Redeem187398252023-12-08 6:42:47446 days ago1702017767IN
0x45d0cc9E...826eEC873
0 ETH0.0099333341.68696262
Redeem187398032023-12-08 6:38:23446 days ago1702017503IN
0x45d0cc9E...826eEC873
0 ETH0.0112333943.17480441
Mint With ETH184858372023-11-02 17:20:11481 days ago1698945611IN
0x45d0cc9E...826eEC873
0.78 ETH0.0078222224.08275103
Mint With ETH184858092023-11-02 17:14:35481 days ago1698945275IN
0x45d0cc9E...826eEC873
0.33 ETH0.0078815624.26546026
Mint With ETH184824172023-11-02 5:47:59482 days ago1698904079IN
0x45d0cc9E...826eEC873
0.1 ETH0.0050960618.05884373
Mint With ETH184823332023-11-02 5:31:11482 days ago1698903071IN
0x45d0cc9E...826eEC873
0.2 ETH0.0057527417.97317265
Mint With ETH184823292023-11-02 5:30:11482 days ago1698903011IN
0x45d0cc9E...826eEC873
0.29 ETH0.0054761117.10891601
Mint With ETH184823192023-11-02 5:28:11482 days ago1698902891IN
0x45d0cc9E...826eEC873
0.1 ETH0.0052175717.221181
Mint With ETH184823082023-11-02 5:25:59482 days ago1698902759IN
0x45d0cc9E...826eEC873
0.3 ETH0.0057652317.09870468
Mint With ETH184251972023-10-25 5:32:23490 days ago1698211943IN
0x45d0cc9E...826eEC873
1 ETH0.0040030314.96097973
Mint With ETH184122162023-10-23 9:56:47492 days ago1698055007IN
0x45d0cc9E...826eEC873
5 ETH0.0037063513.85216789
Withdraw STETH R...184106022023-10-23 4:28:35492 days ago1698035315IN
0x45d0cc9E...826eEC873
0 ETH0.0011369712.68205105
Mint183140542023-10-09 16:17:59505 days ago1696868279IN
0x45d0cc9E...826eEC873
0 ETH0.0058209317.83827546
Mint With ETH183140482023-10-09 16:16:47505 days ago1696868207IN
0x45d0cc9E...826eEC873
0.01 ETH0.0061673418
Mint183117732023-10-09 8:38:35506 days ago1696840715IN
0x45d0cc9E...826eEC873
0 ETH0.0043186113.23440724
Mint183117642023-10-09 8:36:47506 days ago1696840607IN
0x45d0cc9E...826eEC873
0 ETH0.00303312.779797
Mint With ETH183117532023-10-09 8:34:35506 days ago1696840475IN
0x45d0cc9E...826eEC873
0.01 ETH0.0056128212.60656661

Latest 12 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
184858372023-11-02 17:20:11481 days ago1698945611
0x45d0cc9E...826eEC873
0.78 ETH
184858092023-11-02 17:14:35481 days ago1698945275
0x45d0cc9E...826eEC873
0.33 ETH
184824172023-11-02 5:47:59482 days ago1698904079
0x45d0cc9E...826eEC873
0.1 ETH
184823332023-11-02 5:31:11482 days ago1698903071
0x45d0cc9E...826eEC873
0.2 ETH
184823292023-11-02 5:30:11482 days ago1698903011
0x45d0cc9E...826eEC873
0.29 ETH
184823192023-11-02 5:28:11482 days ago1698902891
0x45d0cc9E...826eEC873
0.1 ETH
184823082023-11-02 5:25:59482 days ago1698902759
0x45d0cc9E...826eEC873
0.3 ETH
184251972023-10-25 5:32:23490 days ago1698211943
0x45d0cc9E...826eEC873
1 ETH
184122162023-10-23 9:56:47492 days ago1698055007
0x45d0cc9E...826eEC873
5 ETH
183140482023-10-09 16:16:47505 days ago1696868207
0x45d0cc9E...826eEC873
0.01 ETH
183117532023-10-09 8:34:35506 days ago1696840475
0x45d0cc9E...826eEC873
0.01 ETH
183116332023-10-09 8:10:11506 days ago1696839011  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AdscendoPool

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
File 1 of 7 : AdscendoPool.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "./interfaces/IERC20.sol";
import "./interfaces/ILido.sol";
import "./interfaces/IPriceFeed.sol";
import "./utils/Context.sol";
import "./utils/math/SafeMath.sol";
import "./utils/ReentrancyGuard.sol";

/**
 * @title AdscendoPool
 * @author
 * @notice Leveraged staking pool for ETH
 * @dev Implements minting and redeeming of LSTETH tokens
 */
contract AdscendoPool is Context, ReentrancyGuard {
    // Libraries

    using SafeMath for uint256; // Prevent overflows

    // State variables

    uint private _liquidationPrice; // Liquidation price threshold

    uint private _safePrice; // Safe price threshold

    uint private _mintFee;

    uint private _redeemFee;

    uint private immutable MAX_MINT_FEE = 50; // 5% max mint fee

    uint private immutable MAX_REDEEM_FEE = 50; // 5% max redeem fee

    uint256 private _totalFee;

    // Total amount of staked STETH
    uint256 private _stakedAmount;

    // Address to receive insurance fees
    address private _insurance;

    // Address to receive team fees
    address private _team;

    // Admin address
    address private _admin;

    // Factory contract that created this pool
    address private _factory;

    mapping(address => bool) _stakingPool;

    uint private _teamShare = 30;

    uint private _insuranceShare = 70;

    // AUSD stablecoin token contract
    IERC20 private _AUSD;

    // LSTETH token contract
    IERC20 private _lstETH;

    // STETH token contract
    IERC20 private _stETH;

    ILido private _lido;

    // Price feed contract
    IPriceFeed internal _priceFeed;

    // Flag for liquidation state
    bool internal _liquidated = false;

    /**
     * @notice Emitted when STETH is deposited
     * @param user User address
     * @param amount Amount deposited
     */
    event Mint(address user, uint256 amount);

    /**
     * @notice Emitted when LSTETH is redeemed
     * @param user User address
     * @param amount Amount redeemed
     */
    event Redeem(address user, uint256 amount);

    event EmergencyRedeem(address user, uint256 amount);

    event Liquidation(uint price);

    /**
     * @dev Reverts if pool is liquidated
     */
    modifier onlyNotLiquidated() {
        require(_liquidated == false, "Must be not liquidate");
        _;
    }

    // Modifier to check liquidated
    modifier onlyLiquidated() {
        require(_liquidated == true, "Must be liquidated");
        _;
    }

    // Modifier to check caller is admin
    modifier onlyAdmin() {
        require(_admin == _msgSender(), "Only admin");
        _;
    }

    modifier onlyStakingPool() {
        require(_stakingPool[_msgSender()] == true, "Only staking pool");
        _;
    }

    /**
     * @dev Sets initial state variables
     * @param liquidationPrice_ Liquidation price threshold
     * @param safePrice_ Safe price threshold
     * @param ausdAddress_ AUSD token address
     * @param lstethAddress_ LSTETH token address
     * @param stethAddress_ STETH token address
     * @param priceFeedAddress_ Price feed address
     * @param insurance_ Insurance fee address
     * @param team_ Team fee address
     * @param admin_ Admin address
     * @param mintFee_ Initial minting fee percentage
     * @param redeemFee_ Initial redeem fee percentage
     */
    constructor(
        uint liquidationPrice_,
        uint safePrice_,
        address ausdAddress_,
        address lstethAddress_,
        address stethAddress_,
        address priceFeedAddress_,
        address insurance_,
        address team_,
        address admin_,
        uint mintFee_,
        uint redeemFee_
    ) {
        // Set liquidation and safe price thresholds
        // 18-digit precision uint
        _liquidationPrice = liquidationPrice_;
        _safePrice = safePrice_;

        // Set token contract addresses
        _AUSD = IERC20(ausdAddress_);
        _stETH = IERC20(stethAddress_);
        _lstETH = IERC20(lstethAddress_);
        _lido = ILido(stethAddress_);

        // Set price feed and admin addresses
        _priceFeed = IPriceFeed(priceFeedAddress_);
        _insurance = insurance_;
        _team = team_;
        _admin = admin_;

        // Set factory and starting round
        _factory = _msgSender();

        // Set initial fee percentages
        _mintFee = mintFee_;
        _redeemFee = redeemFee_;
    }

    function lstETH() public view returns (address) {
        return address(_lstETH);
    }

    function stETH() public view returns (address) {
        return address(_stETH);
    }

    function AUSD() public view returns (address) {
        return address(_AUSD);
    }

    function admin() public view returns (address) {
        return _admin;
    }

    function factory() public view returns (address) {
        return _factory;
    }

    function team() public view returns (address) {
        return _team;
    }

    function insurance() public view returns (address) {
        return _insurance;
    }

    function mintFee() public view returns (uint) {
        return _mintFee;
    }

    function redeemFee() public view returns (uint) {
        return _redeemFee;
    }

    function liquidationPrice() public view returns (uint) {
        return _liquidationPrice;
    }

    function safePrice() public view returns (uint) {
        return _safePrice;
    }

    function priceFeed() public view returns (address) {
        return address(_priceFeed);
    }

    function stakedAmount() public view returns (uint256) {
        return _stakedAmount;
    }

    function totalFee() public view returns (uint256) {
        return _totalFee;
    }

    function liquidated() public view returns (bool) {
        return _liquidated;
    }

    function isFeeWhitelist(address account) public view returns (bool) {
        return _stakingPool[account];
    }

    /**
     * @notice Deposits STETH and mints LSTETH + AUSD
     * @dev Only allowed if unliquidated
     * @param stAmount Amount of STETH to deposit
     */
    function mint(uint256 stAmount) external onlyNotLiquidated nonReentrant {
        uint _price = _priceFeed.fetchPrice();
        require(_price > _safePrice, "Current price must above threshold");

        _stETH.transferFrom(_msgSender(), address(this), stAmount);
        _mint(stAmount, _mintFee);
    }

    function mintWithETH(
        address _ref
    ) external payable onlyNotLiquidated nonReentrant {
        uint _price = _priceFeed.fetchPrice();
        require(_price > _safePrice, "Current price must above threshold");

        uint256 stAmount = _depositETHForSTETH(_ref);

        _mint(stAmount, _mintFee);
    }

    function mintNoFee(
        uint256 stAmount
    ) external onlyNotLiquidated onlyStakingPool nonReentrant {
        uint _price = _priceFeed.fetchPrice();
        require(_price > _safePrice, "Current price must above threshold");

        _stETH.transferFrom(_msgSender(), address(this), stAmount);
        _mint(stAmount, 0);
    }

    function mintWithETHNoFee(
        address _ref
    )
        external
        payable
        onlyNotLiquidated
        onlyStakingPool
        nonReentrant
        returns (uint256)
    {
        uint _price = _priceFeed.fetchPrice();
        require(_price > _safePrice, "Current price must above threshold");

        uint256 stAmount = _depositETHForSTETH(_ref);

        _mint(stAmount, 0);

        return stAmount;
    }

    function _depositETHForSTETH(address _ref) internal returns (uint256) {
        uint256 _sharesAmount = _lido.submit{value: msg.value}(_ref);
        uint256 stAmount = _lido.getPooledEthByShares(_sharesAmount);

        return stAmount;
    }

    function _mint(uint256 stAmount, uint mintFee_) internal {
        uint256 _fee = stAmount.mul(mintFee_).div(1000);
        uint256 _amount = stAmount.sub(_fee);

        _AUSD.mint(_msgSender(), _amount.mul(_liquidationPrice).div(10 ** 18));
        _lstETH.mint(_msgSender(), _amount);

        _stakedAmount = _stakedAmount.add(_amount);
        // fees
        _totalFee = _totalFee.add(_fee);

        emit Mint(_msgSender(), stAmount);
    }

    /**
     * @notice Redeems LSTETH for STETH and burns AUSD
     * @dev Only allowed if unliquidated
     * @param stAmount Amount of LSTETH to redeem
     */
    function redeem(uint256 stAmount) external onlyNotLiquidated nonReentrant {
        _redeem(stAmount, _redeemFee);
    }

    function redeemNoFee(
        uint256 stAmount
    ) external onlyNotLiquidated onlyStakingPool nonReentrant {
        _redeem(stAmount, 0);
    }

    function _redeem(uint256 stAmount, uint redeemFee_) internal {
        uint _price = _priceFeed.fetchPrice();
        require(
            _price > _liquidationPrice,
            "Current price must above threshold"
        );

        // Calculate fee
        uint256 _fee = stAmount.mul(redeemFee_).div(1000);
        uint256 _amount = stAmount.sub(_fee);

        // Burn AUSD and LSTETH
        _AUSD.burn(_msgSender(), stAmount.mul(_liquidationPrice).div(10 ** 18));
        _lstETH.burn(_msgSender(), stAmount);

        // Transfer STETH minus fee
        _stETH.transfer(_msgSender(), _amount);

        // Update staked amount
        _stakedAmount = _stakedAmount.sub(stAmount);

        // fees
        _totalFee = _totalFee.add(_fee);

        emit Redeem(_msgSender(), stAmount);
    }

    /**
     * @notice Liquidates the pool
     * @dev Changes liquidated state to true
     */
    function liquidation() external {
        uint _price = _priceFeed.fetchPrice();

        require(
            _price < _liquidationPrice,
            "Current price must below threshold"
        );

        // Set liquidated flag
        _liquidated = true;

        emit Liquidation(_price);
    }

    /**
     * @notice Emergency redeem post liquidation
     * @dev Allows redeem if price > safe
     * @param ausdAmount Amount of AUSD to redeem
     * @return stETHAmount Amount of STETH withdrawn
     */
    function emergencyRedeem(
        uint256 ausdAmount
    ) external onlyLiquidated nonReentrant returns (uint256) {
        uint _price = _priceFeed.fetchPrice();

        require(_price > _safePrice, "Current price must above threshold");

        return _emergencyRedeem(ausdAmount, _price, _redeemFee);
    }

    /**
     * @notice Maintenance redeem post liquidation
     * @dev Allows admin to redeem LSTETH if liquidated
     * @param ausdAmount Amount of AUSD to redeem
     * @return stETHAmount Amount of STETH withdrawn
     */
    function mantenceRedeem(
        uint256 ausdAmount
    ) external onlyAdmin onlyLiquidated nonReentrant returns (uint256) {
        uint _price = _priceFeed.fetchPrice();

        return _emergencyRedeem(ausdAmount, _price, _redeemFee);
    }

    function emergencyRedeemNoFee(
        uint ausdAmount
    ) external onlyStakingPool onlyLiquidated nonReentrant returns (uint256) {
        uint _price = _priceFeed.fetchPrice();

        return _emergencyRedeem(ausdAmount, _price, 0);
    }

    /**
     * @dev Internal logic for emergency redeem
     * @param ausdAmount AUSD amount to redeem
     * @param price Current price of ETH
     * @return stETHAmount Amount of STETH withdrawn
     */
    function _emergencyRedeem(
        uint256 ausdAmount,
        uint price,
        uint redeemFee_
    ) internal returns (uint256) {
        require(_stakedAmount > 0, "Nothing left");

        uint256 stAmount = ausdAmount.mul(10 ** 18).div(price);
        uint256 fee = stAmount.mul(redeemFee_).div(1000);
        uint256 redeemAmount = stAmount.sub(fee);

        _AUSD.burn(_msgSender(), ausdAmount);

        if (stAmount > _stakedAmount) {
            _stETH.transfer(_msgSender(), _stakedAmount.sub(fee));
            _stakedAmount = 0;
        } else {
            _stETH.transfer(_msgSender(), redeemAmount);
            _stakedAmount = _stakedAmount.sub(stAmount);
        }

        _totalFee = _totalFee.add(fee);

        emit EmergencyRedeem(_msgSender(), stAmount);

        return redeemAmount;
    }

    /**
     * @notice Set minting fee percentage
     * @dev Only callable by admin
     * @param value_ New minting fee percentage
     */
    function setMintFee(uint value_) external onlyAdmin {
        require(value_ <= MAX_MINT_FEE, "Can not greater than max mint fee");
        _mintFee = value_;
    }

    /**
     * @notice Set redeeming fee percentage
     * @dev Only callable by admin
     * @param value_ New redeeming fee percentage
     */
    function setRedeemFee(uint value_) external onlyAdmin {
        require(
            value_ <= MAX_REDEEM_FEE,
            "Can not greater than max redeem fee"
        );
        _redeemFee = value_;
    }

    function withdrawSTETHReward() external onlyAdmin {
        uint256 _balance = _stETH.balanceOf(address(this));
        uint256 _reward = _balance.sub(_stakedAmount).sub(_totalFee);

        if (_reward <= 0) {
            revert();
        }

        _stETH.transfer(_admin, _reward);
    }

    function distributeCollectedFees() external onlyAdmin {
        require(_totalFee > 0, "No fee collected yet");

        _stETH.transfer(_team, _totalFee.mul(_teamShare).div(100));
        _stETH.transfer(_insurance, _totalFee.mul(_insuranceShare).div(100));

        _totalFee = 0;
    }

    function setTeamShare(uint value) external onlyAdmin {
        require(value < 100, "Value should less than 100");

        _teamShare = value;
        _insuranceShare = 100 - value;
    }

    function setStakingPool(address account, bool value) external onlyAdmin {
        require(account != address(0), "No Zero address");

        _stakingPool[account] = value;
    }
}

File 2 of 7 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    event Mint(address indexed account, uint256 value);

    event Burn(address indexed account, uint256 value);

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the value of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 value) external returns (bool);

    function mint(address account, uint256 value) external;

    function burn(address account, uint256 value) external;
}

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

pragma solidity 0.8.20;

interface ILido {
    function getPooledEthByShares(uint256 _sharesAmount) external view returns (uint256);

    function submit(address _referral) external payable returns (uint256);
}

File 4 of 7 : IPriceFeed.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.20;

interface IPriceFeed {

    // --- Events ---
    event LastGoodPriceUpdated(uint _lastGoodPrice);
   
    // --- Function ---
    function fetchPrice() external returns (uint);
}

File 5 of 7 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 6 of 7 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.20;

/**
 * Based on OpenZeppelin's SafeMath:
 * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol
 *
 * @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, 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) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message 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.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 7 of 7 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.20;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied 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.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    /**
     * @dev Unauthorized reentrant call.
     */
    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @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 making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        if (_status == _ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"liquidationPrice_","type":"uint256"},{"internalType":"uint256","name":"safePrice_","type":"uint256"},{"internalType":"address","name":"ausdAddress_","type":"address"},{"internalType":"address","name":"lstethAddress_","type":"address"},{"internalType":"address","name":"stethAddress_","type":"address"},{"internalType":"address","name":"priceFeedAddress_","type":"address"},{"internalType":"address","name":"insurance_","type":"address"},{"internalType":"address","name":"team_","type":"address"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"uint256","name":"mintFee_","type":"uint256"},{"internalType":"uint256","name":"redeemFee_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyRedeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"Liquidation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Redeem","type":"event"},{"inputs":[],"name":"AUSD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributeCollectedFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ausdAmount","type":"uint256"}],"name":"emergencyRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ausdAmount","type":"uint256"}],"name":"emergencyRedeemNoFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"insurance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isFeeWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidationPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lstETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ausdAmount","type":"uint256"}],"name":"mantenceRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stAmount","type":"uint256"}],"name":"mintNoFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ref","type":"address"}],"name":"mintWithETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_ref","type":"address"}],"name":"mintWithETHNoFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"priceFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stAmount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redeemFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stAmount","type":"uint256"}],"name":"redeemNoFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value_","type":"uint256"}],"name":"setMintFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value_","type":"uint256"}],"name":"setRedeemFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setStakingPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setTeamShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"team","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawSTETHReward","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526032608081905260a052601e600c556046600d556012805460ff60a01b1916905534801562000031575f80fd5b50604051620026a5380380620026a583398101604081905262000054916200013b565b60015f8190558b905560028a9055600e80546001600160a01b03199081166001600160a01b038c8116919091179092556010805482168a8416908117909155600f805483168c8516179055601180548316909117905560128054821689841617905560078054821688841617905560088054821687841617905560098054909116918516919091179055620000e63390565b600a80546001600160a01b0319166001600160a01b039290921691909117905560039190915560045550620001f3975050505050505050565b80516001600160a01b038116811462000136575f80fd5b919050565b5f805f805f805f805f805f6101608c8e03121562000157575f80fd5b8b519a5060208c015199506200017060408d016200011f565b98506200018060608d016200011f565b97506200019060808d016200011f565b9650620001a060a08d016200011f565b9550620001b060c08d016200011f565b9450620001c060e08d016200011f565b9350620001d16101008d016200011f565b92506101208c015191506101408c015190509295989b509295989b9093969950565b60805160a051612490620002155f395f610c4f01525f61162b01526124905ff3fe6080604052600436106101db575f3560e01c8063888b2ad4116100fd578063c1fe3e4811610092578063eddd0d9c11610062578063eddd0d9c1461050d578063f2dfbf661461052c578063f851a44014610540578063fa514e771461055d575f80fd5b8063c1fe3e48146104a1578063c45a0155146104be578063d7f1a654146104db578063db006a75146104ee575f80fd5b8063a062e276116100cd578063a062e27614610430578063a0712d681461044f578063b566a68d1461046e578063b6fc2d5f1461048d575f80fd5b8063888b2ad4146103c157806389cf3204146103e057806393217125146103fd578063965fa21e1461041c575f80fd5b80633d61b286116101735780636ae12baf116101435780636ae12baf1461033c578063741bef1a146103735780637c07e1261461039057806385f2aef2146103a4575f80fd5b80633d61b286146102d75780635afcb497146102f65780635d841af514610309578063655ee64a14610328575f80fd5b80631df4ccfc116101ae5780631df4ccfc1461026857806323b98cde1461027c5780632fd7d1fd146102a6578063373d6132146102c3575f80fd5b806302c32f9f146101df578063090d4dd8146102155780630b8478f31461023657806313966db51461024a575b5f80fd5b3480156101ea575f80fd5b50600f546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b348015610220575f80fd5b5061023461022f3660046122e5565b61057c565b005b348015610241575f80fd5b5061023461079a565b348015610255575f80fd5b506003545b60405190815260200161020c565b348015610273575f80fd5b5060055461025a565b348015610287575f80fd5b50601254600160a01b900460ff165b604051901515815260200161020c565b3480156102b1575f80fd5b50600e546001600160a01b03166101f8565b3480156102ce575f80fd5b5060065461025a565b3480156102e2575f80fd5b5061025a6102f13660046122e5565b61097a565b610234610304366004612312565b610abf565b348015610314575f80fd5b506102346103233660046122e5565b610c06565b348015610333575f80fd5b5060025461025a565b348015610347575f80fd5b50610296610356366004612312565b6001600160a01b03165f908152600b602052604090205460ff1690565b34801561037e575f80fd5b506012546001600160a01b03166101f8565b34801561039b575f80fd5b50610234610ce8565b3480156103af575f80fd5b506008546001600160a01b03166101f8565b3480156103cc575f80fd5b506102346103db3660046122e5565b610e77565b3480156103eb575f80fd5b506007546001600160a01b03166101f8565b348015610408575f80fd5b5061025a6104173660046122e5565b610f3b565b348015610427575f80fd5b5060045461025a565b34801561043b575f80fd5b5061023461044a3660046122e5565b611066565b34801561045a575f80fd5b506102346104693660046122e5565b611113565b348015610479575f80fd5b5061025a6104883660046122e5565b6112ca565b348015610498575f80fd5b5060015461025a565b3480156104ac575f80fd5b506010546001600160a01b03166101f8565b3480156104c9575f80fd5b50600a546001600160a01b03166101f8565b61025a6104e9366004612312565b6113e9565b3480156104f9575f80fd5b506102346105083660046122e5565b61157c565b348015610518575f80fd5b506102346105273660046122e5565b6115e2565b348015610537575f80fd5b506102346116c4565b34801561054b575f80fd5b506009546001600160a01b03166101f8565b348015610568575f80fd5b50610234610577366004612338565b6117f9565b601254600160a01b900460ff16156105d35760405162461bcd60e51b81526020600482015260156024820152744d757374206265206e6f74206c697175696461746560581b60448201526064015b60405180910390fd5b335f908152600b602052604090205460ff16151560011461062a5760405162461bcd60e51b815260206004820152601160248201527013db9b1e481cdd185ada5b99c81c1bdbdb607a1b60448201526064016105ca565b6106326118c0565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af115801561067a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069e919061236d565b905060025481116106fc5760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207072696365206d7573742061626f7665207468726573686f6044820152611b1960f21b60648201526084016105ca565b6010546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018590526064016020604051808303815f875af115801561075e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107829190612384565b5061078d825f611901565b5061079760015f55565b50565b6009546001600160a01b031633146107e15760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b60448201526064016105ca565b5f600554116108325760405162461bcd60e51b815260206004820152601460248201527f4e6f2066656520636f6c6c65637465642079657400000000000000000000000060448201526064016105ca565b601054600854600c546005546001600160a01b039384169363a9059cbb931691610869916064916108639190611a87565b90611b2a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156108b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d59190612384565b50601054600754600d546005546001600160a01b039384169363a9059cbb931691610907916064916108639190611a87565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af115801561094f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109739190612384565b505f600555565b6012545f90600160a01b900460ff1615156001146109cf5760405162461bcd60e51b8152602060048201526012602482015271135d5cdd081899481b1a5c5d5a59185d195960721b60448201526064016105ca565b6109d76118c0565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af1158015610a1f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a43919061236d565b90506002548111610aa15760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207072696365206d7573742061626f7665207468726573686f6044820152611b1960f21b60648201526084016105ca565b610aae8382600454611b6b565b915050610aba60015f55565b919050565b601254600160a01b900460ff1615610b115760405162461bcd60e51b81526020600482015260156024820152744d757374206265206e6f74206c697175696461746560581b60448201526064016105ca565b610b196118c0565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af1158015610b61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b85919061236d565b90506002548111610be35760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207072696365206d7573742061626f7665207468726573686f6044820152611b1960f21b60648201526084016105ca565b5f610bed83611df2565b9050610bfb81600354611901565b505061079760015f55565b6009546001600160a01b03163314610c4d5760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b60448201526064016105ca565b7f0000000000000000000000000000000000000000000000000000000000000000811115610ce35760405162461bcd60e51b815260206004820152602360248201527f43616e206e6f742067726561746572207468616e206d61782072656465656d2060448201527f666565000000000000000000000000000000000000000000000000000000000060648201526084016105ca565b600455565b6009546001600160a01b03163314610d2f5760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b60448201526064016105ca565b6010546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610d8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db2919061236d565b90505f610dd6600554610dd060065485611f0f90919063ffffffff16565b90611f0f565b90505f8111610de3575f80fd5b6010546009546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303815f875af1158015610e4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e729190612384565b505050565b601254600160a01b900460ff1615610ec95760405162461bcd60e51b81526020600482015260156024820152744d757374206265206e6f74206c697175696461746560581b60448201526064016105ca565b335f908152600b602052604090205460ff161515600114610f205760405162461bcd60e51b815260206004820152601160248201527013db9b1e481cdd185ada5b99c81c1bdbdb607a1b60448201526064016105ca565b610f286118c0565b610f32815f611f50565b61079760015f55565b335f908152600b602052604081205460ff161515600114610f925760405162461bcd60e51b815260206004820152601160248201527013db9b1e481cdd185ada5b99c81c1bdbdb607a1b60448201526064016105ca565b601254600160a01b900460ff161515600114610fe55760405162461bcd60e51b8152602060048201526012602482015271135d5cdd081899481b1a5c5d5a59185d195960721b60448201526064016105ca565b610fed6118c0565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af1158015611035573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611059919061236d565b9050610aae83825f611b6b565b6009546001600160a01b031633146110ad5760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b60448201526064016105ca565b606481106110fd5760405162461bcd60e51b815260206004820152601a60248201527f56616c75652073686f756c64206c657373207468616e2031303000000000000060448201526064016105ca565b600c81905561110d8160646123b3565b600d5550565b601254600160a01b900460ff16156111655760405162461bcd60e51b81526020600482015260156024820152744d757374206265206e6f74206c697175696461746560581b60448201526064016105ca565b61116d6118c0565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af11580156111b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d9919061236d565b905060025481116112375760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207072696365206d7573742061626f7665207468726573686f6044820152611b1960f21b60648201526084016105ca565b6010546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018590526064016020604051808303815f875af1158015611299573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bd9190612384565b5061078d82600354611901565b6009545f906001600160a01b031633146113135760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b60448201526064016105ca565b601254600160a01b900460ff1615156001146113665760405162461bcd60e51b8152602060048201526012602482015271135d5cdd081899481b1a5c5d5a59185d195960721b60448201526064016105ca565b61136e6118c0565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af11580156113b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113da919061236d565b9050610aae8382600454611b6b565b6012545f90600160a01b900460ff161561143d5760405162461bcd60e51b81526020600482015260156024820152744d757374206265206e6f74206c697175696461746560581b60448201526064016105ca565b335f908152600b602052604090205460ff1615156001146114945760405162461bcd60e51b815260206004820152601160248201527013db9b1e481cdd185ada5b99c81c1bdbdb607a1b60448201526064016105ca565b61149c6118c0565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af11580156114e4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611508919061236d565b905060025481116115665760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207072696365206d7573742061626f7665207468726573686f6044820152611b1960f21b60648201526084016105ca565b5f61157084611df2565b9050610aae815f611901565b601254600160a01b900460ff16156115ce5760405162461bcd60e51b81526020600482015260156024820152744d757374206265206e6f74206c697175696461746560581b60448201526064016105ca565b6115d66118c0565b610f3281600454611f50565b6009546001600160a01b031633146116295760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b60448201526064016105ca565b7f00000000000000000000000000000000000000000000000000000000000000008111156116bf5760405162461bcd60e51b815260206004820152602160248201527f43616e206e6f742067726561746572207468616e206d6178206d696e7420666560448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016105ca565b600355565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af115801561170c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611730919061236d565b9050600154811061178e5760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207072696365206d7573742062656c6f77207468726573686f6044820152611b1960f21b60648201526084016105ca565b601280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517fb2d60c1853f534186f98500209005bfe1303c83a5b211d7be5b93d61be1ca99e906117ee9083815260200190565b60405180910390a150565b6009546001600160a01b031633146118405760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b60448201526064016105ca565b6001600160a01b0382166118965760405162461bcd60e51b815260206004820152600f60248201527f4e6f205a65726f2061646472657373000000000000000000000000000000000060448201526064016105ca565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b60025f54036118fb576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b5f6119126103e86108638585611a87565b90505f61191f8483611f0f565b600e549091506001600160a01b03166340c10f1933611955670de0b6b3a764000061086360015487611a8790919063ffffffff16565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015611998575f80fd5b505af11580156119aa573d5f803e3d5ffd5b5050600f546001600160a01b031691506340c10f199050336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044015f604051808303815f87803b158015611a07575f80fd5b505af1158015611a19573d5f803e3d5ffd5b5050600654611a2b9250905082612223565b600655600554611a3b9083612223565b6005557f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688533604080516001600160a01b039092168252602082018790520160405180910390a150505050565b5f825f03611a9657505f611b24565b5f611aa183856123c6565b905082611aae85836123dd565b14611b215760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f770000000000000000000000000000000000000000000000000000000000000060648201526084016105ca565b90505b92915050565b5f611b2183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612281565b5f8060065411611bbd5760405162461bcd60e51b815260206004820152600c60248201527f4e6f7468696e67206c656674000000000000000000000000000000000000000060448201526064016105ca565b5f611bd48461086387670de0b6b3a7640000611a87565b90505f611be76103e86108638487611a87565b90505f611bf48383611f0f565b600e549091506001600160a01b0316639dc29fac336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018a90526044015f604051808303815f87803b158015611c4e575f80fd5b505af1158015611c60573d5f803e3d5ffd5b50505050600654831115611d03576010546001600160a01b031663a9059cbb33600654611c8d9086611f0f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611cd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf99190612384565b505f600655611d95565b6010546001600160a01b031663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015611d5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d839190612384565b50600654611d919084611f0f565b6006555b600554611da29083612223565b6005557f578e836b6519d4638099b55b59ad6b3a69bdd378f904d656e686a7144fb63e0433604080516001600160a01b039092168252602082018690520160405180910390a19695505050505050565b6011546040517fa1903eab0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301525f92839291169063a1903eab90349060240160206040518083038185885af1158015611e59573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e7e919061236d565b6011546040517f7a28fb88000000000000000000000000000000000000000000000000000000008152600481018390529192505f916001600160a01b0390911690637a28fb8890602401602060405180830381865afa158015611ee3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f07919061236d565b949350505050565b5f611b2183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122b6565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af1158015611f98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fbc919061236d565b9050600154811161201a5760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207072696365206d7573742061626f7665207468726573686f6044820152611b1960f21b60648201526084016105ca565b5f61202b6103e86108638686611a87565b90505f6120388583611f0f565b600e549091506001600160a01b0316639dc29fac3361206e670de0b6b3a76400006108636001548b611a8790919063ffffffff16565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b1580156120b1575f80fd5b505af11580156120c3573d5f803e3d5ffd5b5050600f546001600160a01b03169150639dc29fac9050336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018890526044015f604051808303815f87803b158015612120575f80fd5b505af1158015612132573d5f803e3d5ffd5b50506010546001600160a01b0316915063a9059cbb9050336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015612194573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b89190612384565b506006546121c69086611f0f565b6006556005546121d69083612223565b6005557f222838db2794d11532d940e8dec38ae307ed0b63cd97c233322e221f998767a633604080516001600160a01b039092168252602082018890520160405180910390a15050505050565b5f8061222f83856123fc565b905083811015611b215760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016105ca565b5f81836122a15760405162461bcd60e51b81526004016105ca919061240f565b505f6122ad84866123dd565b95945050505050565b5f81848411156122d95760405162461bcd60e51b81526004016105ca919061240f565b505f6122ad84866123b3565b5f602082840312156122f5575f80fd5b5035919050565b80356001600160a01b0381168114610aba575f80fd5b5f60208284031215612322575f80fd5b611b21826122fc565b8015158114610797575f80fd5b5f8060408385031215612349575f80fd5b612352836122fc565b915060208301356123628161232b565b809150509250929050565b5f6020828403121561237d575f80fd5b5051919050565b5f60208284031215612394575f80fd5b8151611b218161232b565b634e487b7160e01b5f52601160045260245ffd5b81810381811115611b2457611b2461239f565b8082028115828204841417611b2457611b2461239f565b5f826123f757634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115611b2457611b2461239f565b5f6020808352835180828501525f5b8181101561243a5785810183015185820160400152820161241e565b505f604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220f7ceb1a1542ec975d47777686e23839f0da4c5415cce7e1625e83357d80d7e4564736f6c63430008140033000000000000000000000000000000000000000000000046791fc84e07d0000000000000000000000000000000000000000000000000004d853c8f8908980000000000000000000000000000258bb9e4b6ab36feca231f95ac7632b8470726f5000000000000000000000000230ef92660f46b50d9da3ad104a1206920f50a95000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe840000000000000000000000004c517d4e2c851ca76d7ec94b805269df0f2201de00000000000000000000000053c494128ecdea1d48cf7233e6a02aaec0c1e2350000000000000000000000009fee24bde6229dfd03b7169ff2bffc09b9c4c05a0000000000000000000000009fee24bde6229dfd03b7169ff2bffc09b9c4c05a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005

Deployed Bytecode

0x6080604052600436106101db575f3560e01c8063888b2ad4116100fd578063c1fe3e4811610092578063eddd0d9c11610062578063eddd0d9c1461050d578063f2dfbf661461052c578063f851a44014610540578063fa514e771461055d575f80fd5b8063c1fe3e48146104a1578063c45a0155146104be578063d7f1a654146104db578063db006a75146104ee575f80fd5b8063a062e276116100cd578063a062e27614610430578063a0712d681461044f578063b566a68d1461046e578063b6fc2d5f1461048d575f80fd5b8063888b2ad4146103c157806389cf3204146103e057806393217125146103fd578063965fa21e1461041c575f80fd5b80633d61b286116101735780636ae12baf116101435780636ae12baf1461033c578063741bef1a146103735780637c07e1261461039057806385f2aef2146103a4575f80fd5b80633d61b286146102d75780635afcb497146102f65780635d841af514610309578063655ee64a14610328575f80fd5b80631df4ccfc116101ae5780631df4ccfc1461026857806323b98cde1461027c5780632fd7d1fd146102a6578063373d6132146102c3575f80fd5b806302c32f9f146101df578063090d4dd8146102155780630b8478f31461023657806313966db51461024a575b5f80fd5b3480156101ea575f80fd5b50600f546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b348015610220575f80fd5b5061023461022f3660046122e5565b61057c565b005b348015610241575f80fd5b5061023461079a565b348015610255575f80fd5b506003545b60405190815260200161020c565b348015610273575f80fd5b5060055461025a565b348015610287575f80fd5b50601254600160a01b900460ff165b604051901515815260200161020c565b3480156102b1575f80fd5b50600e546001600160a01b03166101f8565b3480156102ce575f80fd5b5060065461025a565b3480156102e2575f80fd5b5061025a6102f13660046122e5565b61097a565b610234610304366004612312565b610abf565b348015610314575f80fd5b506102346103233660046122e5565b610c06565b348015610333575f80fd5b5060025461025a565b348015610347575f80fd5b50610296610356366004612312565b6001600160a01b03165f908152600b602052604090205460ff1690565b34801561037e575f80fd5b506012546001600160a01b03166101f8565b34801561039b575f80fd5b50610234610ce8565b3480156103af575f80fd5b506008546001600160a01b03166101f8565b3480156103cc575f80fd5b506102346103db3660046122e5565b610e77565b3480156103eb575f80fd5b506007546001600160a01b03166101f8565b348015610408575f80fd5b5061025a6104173660046122e5565b610f3b565b348015610427575f80fd5b5060045461025a565b34801561043b575f80fd5b5061023461044a3660046122e5565b611066565b34801561045a575f80fd5b506102346104693660046122e5565b611113565b348015610479575f80fd5b5061025a6104883660046122e5565b6112ca565b348015610498575f80fd5b5060015461025a565b3480156104ac575f80fd5b506010546001600160a01b03166101f8565b3480156104c9575f80fd5b50600a546001600160a01b03166101f8565b61025a6104e9366004612312565b6113e9565b3480156104f9575f80fd5b506102346105083660046122e5565b61157c565b348015610518575f80fd5b506102346105273660046122e5565b6115e2565b348015610537575f80fd5b506102346116c4565b34801561054b575f80fd5b506009546001600160a01b03166101f8565b348015610568575f80fd5b50610234610577366004612338565b6117f9565b601254600160a01b900460ff16156105d35760405162461bcd60e51b81526020600482015260156024820152744d757374206265206e6f74206c697175696461746560581b60448201526064015b60405180910390fd5b335f908152600b602052604090205460ff16151560011461062a5760405162461bcd60e51b815260206004820152601160248201527013db9b1e481cdd185ada5b99c81c1bdbdb607a1b60448201526064016105ca565b6106326118c0565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af115801561067a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069e919061236d565b905060025481116106fc5760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207072696365206d7573742061626f7665207468726573686f6044820152611b1960f21b60648201526084016105ca565b6010546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018590526064016020604051808303815f875af115801561075e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107829190612384565b5061078d825f611901565b5061079760015f55565b50565b6009546001600160a01b031633146107e15760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b60448201526064016105ca565b5f600554116108325760405162461bcd60e51b815260206004820152601460248201527f4e6f2066656520636f6c6c65637465642079657400000000000000000000000060448201526064016105ca565b601054600854600c546005546001600160a01b039384169363a9059cbb931691610869916064916108639190611a87565b90611b2a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156108b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d59190612384565b50601054600754600d546005546001600160a01b039384169363a9059cbb931691610907916064916108639190611a87565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af115801561094f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109739190612384565b505f600555565b6012545f90600160a01b900460ff1615156001146109cf5760405162461bcd60e51b8152602060048201526012602482015271135d5cdd081899481b1a5c5d5a59185d195960721b60448201526064016105ca565b6109d76118c0565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af1158015610a1f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a43919061236d565b90506002548111610aa15760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207072696365206d7573742061626f7665207468726573686f6044820152611b1960f21b60648201526084016105ca565b610aae8382600454611b6b565b915050610aba60015f55565b919050565b601254600160a01b900460ff1615610b115760405162461bcd60e51b81526020600482015260156024820152744d757374206265206e6f74206c697175696461746560581b60448201526064016105ca565b610b196118c0565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af1158015610b61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b85919061236d565b90506002548111610be35760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207072696365206d7573742061626f7665207468726573686f6044820152611b1960f21b60648201526084016105ca565b5f610bed83611df2565b9050610bfb81600354611901565b505061079760015f55565b6009546001600160a01b03163314610c4d5760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b60448201526064016105ca565b7f0000000000000000000000000000000000000000000000000000000000000032811115610ce35760405162461bcd60e51b815260206004820152602360248201527f43616e206e6f742067726561746572207468616e206d61782072656465656d2060448201527f666565000000000000000000000000000000000000000000000000000000000060648201526084016105ca565b600455565b6009546001600160a01b03163314610d2f5760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b60448201526064016105ca565b6010546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610d8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db2919061236d565b90505f610dd6600554610dd060065485611f0f90919063ffffffff16565b90611f0f565b90505f8111610de3575f80fd5b6010546009546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303815f875af1158015610e4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e729190612384565b505050565b601254600160a01b900460ff1615610ec95760405162461bcd60e51b81526020600482015260156024820152744d757374206265206e6f74206c697175696461746560581b60448201526064016105ca565b335f908152600b602052604090205460ff161515600114610f205760405162461bcd60e51b815260206004820152601160248201527013db9b1e481cdd185ada5b99c81c1bdbdb607a1b60448201526064016105ca565b610f286118c0565b610f32815f611f50565b61079760015f55565b335f908152600b602052604081205460ff161515600114610f925760405162461bcd60e51b815260206004820152601160248201527013db9b1e481cdd185ada5b99c81c1bdbdb607a1b60448201526064016105ca565b601254600160a01b900460ff161515600114610fe55760405162461bcd60e51b8152602060048201526012602482015271135d5cdd081899481b1a5c5d5a59185d195960721b60448201526064016105ca565b610fed6118c0565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af1158015611035573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611059919061236d565b9050610aae83825f611b6b565b6009546001600160a01b031633146110ad5760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b60448201526064016105ca565b606481106110fd5760405162461bcd60e51b815260206004820152601a60248201527f56616c75652073686f756c64206c657373207468616e2031303000000000000060448201526064016105ca565b600c81905561110d8160646123b3565b600d5550565b601254600160a01b900460ff16156111655760405162461bcd60e51b81526020600482015260156024820152744d757374206265206e6f74206c697175696461746560581b60448201526064016105ca565b61116d6118c0565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af11580156111b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d9919061236d565b905060025481116112375760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207072696365206d7573742061626f7665207468726573686f6044820152611b1960f21b60648201526084016105ca565b6010546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018590526064016020604051808303815f875af1158015611299573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bd9190612384565b5061078d82600354611901565b6009545f906001600160a01b031633146113135760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b60448201526064016105ca565b601254600160a01b900460ff1615156001146113665760405162461bcd60e51b8152602060048201526012602482015271135d5cdd081899481b1a5c5d5a59185d195960721b60448201526064016105ca565b61136e6118c0565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af11580156113b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113da919061236d565b9050610aae8382600454611b6b565b6012545f90600160a01b900460ff161561143d5760405162461bcd60e51b81526020600482015260156024820152744d757374206265206e6f74206c697175696461746560581b60448201526064016105ca565b335f908152600b602052604090205460ff1615156001146114945760405162461bcd60e51b815260206004820152601160248201527013db9b1e481cdd185ada5b99c81c1bdbdb607a1b60448201526064016105ca565b61149c6118c0565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af11580156114e4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611508919061236d565b905060025481116115665760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207072696365206d7573742061626f7665207468726573686f6044820152611b1960f21b60648201526084016105ca565b5f61157084611df2565b9050610aae815f611901565b601254600160a01b900460ff16156115ce5760405162461bcd60e51b81526020600482015260156024820152744d757374206265206e6f74206c697175696461746560581b60448201526064016105ca565b6115d66118c0565b610f3281600454611f50565b6009546001600160a01b031633146116295760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b60448201526064016105ca565b7f00000000000000000000000000000000000000000000000000000000000000328111156116bf5760405162461bcd60e51b815260206004820152602160248201527f43616e206e6f742067726561746572207468616e206d6178206d696e7420666560448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016105ca565b600355565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af115801561170c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611730919061236d565b9050600154811061178e5760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207072696365206d7573742062656c6f77207468726573686f6044820152611b1960f21b60648201526084016105ca565b601280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790556040517fb2d60c1853f534186f98500209005bfe1303c83a5b211d7be5b93d61be1ca99e906117ee9083815260200190565b60405180910390a150565b6009546001600160a01b031633146118405760405162461bcd60e51b815260206004820152600a60248201526927b7363c9030b236b4b760b11b60448201526064016105ca565b6001600160a01b0382166118965760405162461bcd60e51b815260206004820152600f60248201527f4e6f205a65726f2061646472657373000000000000000000000000000000000060448201526064016105ca565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b60025f54036118fb576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f55565b5f6119126103e86108638585611a87565b90505f61191f8483611f0f565b600e549091506001600160a01b03166340c10f1933611955670de0b6b3a764000061086360015487611a8790919063ffffffff16565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015611998575f80fd5b505af11580156119aa573d5f803e3d5ffd5b5050600f546001600160a01b031691506340c10f199050336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044015f604051808303815f87803b158015611a07575f80fd5b505af1158015611a19573d5f803e3d5ffd5b5050600654611a2b9250905082612223565b600655600554611a3b9083612223565b6005557f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688533604080516001600160a01b039092168252602082018790520160405180910390a150505050565b5f825f03611a9657505f611b24565b5f611aa183856123c6565b905082611aae85836123dd565b14611b215760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f770000000000000000000000000000000000000000000000000000000000000060648201526084016105ca565b90505b92915050565b5f611b2183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612281565b5f8060065411611bbd5760405162461bcd60e51b815260206004820152600c60248201527f4e6f7468696e67206c656674000000000000000000000000000000000000000060448201526064016105ca565b5f611bd48461086387670de0b6b3a7640000611a87565b90505f611be76103e86108638487611a87565b90505f611bf48383611f0f565b600e549091506001600160a01b0316639dc29fac336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018a90526044015f604051808303815f87803b158015611c4e575f80fd5b505af1158015611c60573d5f803e3d5ffd5b50505050600654831115611d03576010546001600160a01b031663a9059cbb33600654611c8d9086611f0f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611cd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf99190612384565b505f600655611d95565b6010546001600160a01b031663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015611d5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d839190612384565b50600654611d919084611f0f565b6006555b600554611da29083612223565b6005557f578e836b6519d4638099b55b59ad6b3a69bdd378f904d656e686a7144fb63e0433604080516001600160a01b039092168252602082018690520160405180910390a19695505050505050565b6011546040517fa1903eab0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301525f92839291169063a1903eab90349060240160206040518083038185885af1158015611e59573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611e7e919061236d565b6011546040517f7a28fb88000000000000000000000000000000000000000000000000000000008152600481018390529192505f916001600160a01b0390911690637a28fb8890602401602060405180830381865afa158015611ee3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f07919061236d565b949350505050565b5f611b2183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122b6565b60125460408051630fdb11cf60e01b815290515f926001600160a01b031691630fdb11cf916004808301926020929190829003018187875af1158015611f98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fbc919061236d565b9050600154811161201a5760405162461bcd60e51b815260206004820152602260248201527f43757272656e74207072696365206d7573742061626f7665207468726573686f6044820152611b1960f21b60648201526084016105ca565b5f61202b6103e86108638686611a87565b90505f6120388583611f0f565b600e549091506001600160a01b0316639dc29fac3361206e670de0b6b3a76400006108636001548b611a8790919063ffffffff16565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b1580156120b1575f80fd5b505af11580156120c3573d5f803e3d5ffd5b5050600f546001600160a01b03169150639dc29fac9050336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018890526044015f604051808303815f87803b158015612120575f80fd5b505af1158015612132573d5f803e3d5ffd5b50506010546001600160a01b0316915063a9059cbb9050336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303815f875af1158015612194573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b89190612384565b506006546121c69086611f0f565b6006556005546121d69083612223565b6005557f222838db2794d11532d940e8dec38ae307ed0b63cd97c233322e221f998767a633604080516001600160a01b039092168252602082018890520160405180910390a15050505050565b5f8061222f83856123fc565b905083811015611b215760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016105ca565b5f81836122a15760405162461bcd60e51b81526004016105ca919061240f565b505f6122ad84866123dd565b95945050505050565b5f81848411156122d95760405162461bcd60e51b81526004016105ca919061240f565b505f6122ad84866123b3565b5f602082840312156122f5575f80fd5b5035919050565b80356001600160a01b0381168114610aba575f80fd5b5f60208284031215612322575f80fd5b611b21826122fc565b8015158114610797575f80fd5b5f8060408385031215612349575f80fd5b612352836122fc565b915060208301356123628161232b565b809150509250929050565b5f6020828403121561237d575f80fd5b5051919050565b5f60208284031215612394575f80fd5b8151611b218161232b565b634e487b7160e01b5f52601160045260245ffd5b81810381811115611b2457611b2461239f565b8082028115828204841417611b2457611b2461239f565b5f826123f757634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115611b2457611b2461239f565b5f6020808352835180828501525f5b8181101561243a5785810183015185820160400152820161241e565b505f604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220f7ceb1a1542ec975d47777686e23839f0da4c5415cce7e1625e83357d80d7e4564736f6c63430008140033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000046791fc84e07d0000000000000000000000000000000000000000000000000004d853c8f8908980000000000000000000000000000258bb9e4b6ab36feca231f95ac7632b8470726f5000000000000000000000000230ef92660f46b50d9da3ad104a1206920f50a95000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe840000000000000000000000004c517d4e2c851ca76d7ec94b805269df0f2201de00000000000000000000000053c494128ecdea1d48cf7233e6a02aaec0c1e2350000000000000000000000009fee24bde6229dfd03b7169ff2bffc09b9c4c05a0000000000000000000000009fee24bde6229dfd03b7169ff2bffc09b9c4c05a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005

-----Decoded View---------------
Arg [0] : liquidationPrice_ (uint256): 1300000000000000000000
Arg [1] : safePrice_ (uint256): 1430000000000000000000
Arg [2] : ausdAddress_ (address): 0x258bB9E4b6AB36FeCa231f95aC7632B8470726f5
Arg [3] : lstethAddress_ (address): 0x230Ef92660F46b50D9DA3AD104A1206920F50a95
Arg [4] : stethAddress_ (address): 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84
Arg [5] : priceFeedAddress_ (address): 0x4c517D4e2C851CA76d7eC94B805269Df0f2201De
Arg [6] : insurance_ (address): 0x53c494128ecDeA1D48Cf7233E6A02aAec0C1E235
Arg [7] : team_ (address): 0x9FEe24BDe6229DFD03B7169Ff2BFfC09b9c4c05a
Arg [8] : admin_ (address): 0x9FEe24BDe6229DFD03B7169Ff2BFfC09b9c4c05a
Arg [9] : mintFee_ (uint256): 0
Arg [10] : redeemFee_ (uint256): 5

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000046791fc84e07d00000
Arg [1] : 00000000000000000000000000000000000000000000004d853c8f8908980000
Arg [2] : 000000000000000000000000258bb9e4b6ab36feca231f95ac7632b8470726f5
Arg [3] : 000000000000000000000000230ef92660f46b50d9da3ad104a1206920f50a95
Arg [4] : 000000000000000000000000ae7ab96520de3a18e5e111b5eaab095312d7fe84
Arg [5] : 0000000000000000000000004c517d4e2c851ca76d7ec94b805269df0f2201de
Arg [6] : 00000000000000000000000053c494128ecdea1d48cf7233e6a02aaec0c1e235
Arg [7] : 0000000000000000000000009fee24bde6229dfd03b7169ff2bffc09b9c4c05a
Arg [8] : 0000000000000000000000009fee24bde6229dfd03b7169ff2bffc09b9c4c05a
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000005


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.