ETH Price: $1,974.55 (-5.09%)

Contract

0x4539B08A1f2F9EfC8c3f66876Eb8D8c1920A4e7A
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
End170726302023-04-18 9:17:111053 days ago1681809431IN
0x4539B08A...1920A4e7A
0 ETH0.004912635.01799139
Launch Challenge170726272023-04-18 9:16:351053 days ago1681809395IN
0x4539B08A...1920A4e7A
0 ETH0.0076945635.65947838
Open Position170726232023-04-18 9:15:471053 days ago1681809347IN
0x4539B08A...1920A4e7A
0 ETH0.0660259135.53641506
Open Position168109502023-03-12 9:07:231090 days ago1678612043IN
0x4539B08A...1920A4e7A
0 ETH0.0350761619.39149464
Open Position168035592023-03-11 8:08:471091 days ago1678522127IN
0x4539B08A...1920A4e7A
0 ETH0.05511655305
Open Position167963922023-03-10 7:54:471092 days ago1678434887IN
0x4539B08A...1920A4e7A
0 ETH0.0381394221.08498269
Open Position167483482023-03-03 13:42:591099 days ago1677850979IN
0x4539B08A...1920A4e7A
0 ETH0.0406487621.05952732
Open Position167223442023-02-27 21:55:471102 days ago1677534947IN
0x4539B08A...1920A4e7A
0 ETH0.0553967429.85342959

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MintingHub

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IReserve.sol";
import "./IFrankencoin.sol";
import "./Ownable.sol";
import "./IPosition.sol";

/**
 * A hub for creating collateralized minting positions for a given collateral.
 */
contract MintingHub {

    uint256 public constant OPENING_FEE = 1000 * 10**18;

    uint32 public constant BASE = 1000_000;
    uint32 public constant CHALLENGER_REWARD = 20000; // 2%

    IPositionFactory private immutable POSITION_FACTORY; // position contract to clone

    IFrankencoin public immutable zchf; // currency
    Challenge[] public challenges;
    mapping (address => mapping (address => uint256)) public pendingReturns;

    struct Challenge {
        address challenger;
        IPosition position;
        uint256 size;
        uint256 end;
        address bidder;
        uint256 bid;
    }

    event ChallengeStarted(address indexed challenger, address indexed position, uint256 size, uint256 number);
    event ChallengeAverted(address indexed position, uint256 number);
    event ChallengeSucceeded(address indexed position, uint256 bid, uint256 number);
    event NewBid(uint256 challengedId, uint256 bidAmount, address bidder);

    constructor(address _zchf, address factory) {
        zchf = IFrankencoin(_zchf);
        POSITION_FACTORY = IPositionFactory(factory);
    }

    /**
     * @notice open a collateralized loan position
     * @param _collateralAddress        address of collateral token
     * @param _minCollateral     minimum collateral required to prevent dust amounts
     * @param _initialCollateral amount of initial collateral to be deposited
     * @param _mintingMaximum    maximal amount of ZCHF that can be minted by the position owner
     * @param _expirationSeconds position tenor in unit of timestamp (seconds) from 'now'
     * @param _challengeSeconds  challenge period. Longer for less liquid collateral.
     * @param _mintingFeePPM     percentage minting fee that will be added to reserve,
     *                           basis 1000_000
     * @param _liqPrice          Liquidation price with (36 - token decimals) decimals,
     *                           e.g. 18 decimals for an 18 decimal token, 36 decimals for a 0 decimal token.
     * @param _reservePPM        percentage reserve amount that is added as the
     *                           borrower's stake into reserve, basis 1000_000
     * @return address of resulting position
     */
    function openPosition(
        address _collateralAddress, uint256 _minCollateral, uint256 _initialCollateral,
        uint256 _mintingMaximum, uint256 _expirationSeconds, uint256 _challengeSeconds,
        uint32 _mintingFeePPM, uint256 _liqPrice, uint32 _reservePPM) public returns (address) {
        IPosition pos = IPosition(
            POSITION_FACTORY.createNewPosition(
                msg.sender,
                address(zchf),
                _collateralAddress,
                _minCollateral,
                _initialCollateral,
                _mintingMaximum,
                _expirationSeconds,
                _challengeSeconds,
                _mintingFeePPM,
                _liqPrice,
                _reservePPM
            )
        );
        zchf.registerPosition(address(pos));
        zchf.transferFrom(msg.sender, address(zchf.reserve()), OPENING_FEE);
        IERC20(_collateralAddress).transferFrom(msg.sender, address(pos), _initialCollateral);

        return address(pos);
    }

    modifier validPos(address position) {
        require(zchf.isPosition(position) == address(this), "not our pos");
        _;
    }


    function clonePosition(address position, uint256 _initialCollateral, uint256 _initialMint) public validPos(position) returns (address) {
        IPosition existing = IPosition(position);
        uint256 limit = existing.reduceLimitForClone(_initialMint);
        address pos = POSITION_FACTORY.clonePosition(position);
        zchf.registerPosition(pos);
        existing.collateral().transferFrom(msg.sender, address(pos), _initialCollateral);
        IPosition(pos).initializeClone(msg.sender, existing.price(), limit, _initialCollateral, _initialMint);
        return address(pos);
    }

    function reserve() external view returns (IReserve) {
        return IReserve(zchf.reserve());
    }

    /**
     * @notice Launch a challenge on a position
     * @param _positionAddr      address of the position we want to challenge
     * @param _collateralAmount  size of the collateral we want to challenge (dec 18)
     * @return index of the challenge in challenge-array
     */
    function launchChallenge(address _positionAddr, uint256 _collateralAmount) external validPos(_positionAddr) returns (uint256) {
        IPosition position = IPosition(_positionAddr);
        IERC20(position.collateral()).transferFrom(msg.sender, address(this), _collateralAmount);
        uint256 pos = challenges.length;
        /*
        struct Challenge {address challenger;IPosition position;uint256 size;uint256 end;address bidder;uint256 bid;
        */
        challenges.push(Challenge(msg.sender, position, _collateralAmount, block.timestamp + position.challengePeriod(), address(0x0), 0));
        position.notifyChallengeStarted(_collateralAmount);
        emit ChallengeStarted(msg.sender, address(position), _collateralAmount, pos);
        return pos;
    }

    function splitChallenge(uint256 _challengeNumber, uint256 splitOffAmount) external returns (uint256) {
        Challenge storage challenge = challenges[_challengeNumber];
        require(challenge.challenger != address(0x0));
        Challenge memory copy = Challenge(
            challenge.challenger,
            challenge.position,
            splitOffAmount,
            challenge.end,
            challenge.bidder,
            (challenge.bid * splitOffAmount) / challenge.size
        );
        challenge.bid -= copy.bid;
        challenge.size -= copy.size;

        uint256 min = IPosition(challenge.position).minimumCollateral();
        require(challenge.size >= min);
        require(copy.size >= min);

        uint256 pos = challenges.length;
        challenges.push(copy);
        emit ChallengeStarted(challenge.challenger, address(challenge.position), challenge.size, _challengeNumber);
        emit ChallengeStarted(copy.challenger, address(copy.position), copy.size, pos);
        return pos;
    }

    function minBid(uint256 challenge) public view returns (uint256) {
        return minBid(challenges[challenge]);
    }

    function minBid(Challenge storage challenge) internal view returns (uint256) {
        return (challenge.bid * 1005) / 1000; // should be at least 0.5% higher
    }

    /**
     * @notice Post a bid (ZCHF amount) for an existing challenge (given collateral amount)
     * @param _challengeNumber   index of the challenge in the challenges array
     * @param _bidAmountZCHF     how much to bid for the collateral of this challenge (dec 18)
     */
    function bid(uint256 _challengeNumber, uint256 _bidAmountZCHF, uint256 expectedSize) external {
        Challenge storage challenge = challenges[_challengeNumber];
        if (block.timestamp >= challenge.end) {
            // if bid is too late, the transaction ends the challenge
            end(_challengeNumber, false);
        } else {
            require(expectedSize == challenge.size, "s");
            if (challenge.bid > 0) {
                zchf.transfer(challenge.bidder, challenge.bid); // return old bid
            }
            emit NewBid(_challengeNumber, _bidAmountZCHF, msg.sender);
            if (challenge.position.tryAvertChallenge(challenge.size, _bidAmountZCHF)) {
                // bid above Z_B/C_C >= (1+h)Z_M/C_M, challenge averted, end immediately by selling challenger collateral to bidder
                zchf.transferFrom(msg.sender, challenge.challenger, _bidAmountZCHF);
                challenge.position.collateral().transfer(msg.sender, challenge.size);
                emit ChallengeAverted(address(challenge.position), _challengeNumber);
                delete challenges[_challengeNumber];
            } else {
                require(_bidAmountZCHF >= minBid(challenge), "below min bid");
                uint256 earliestEnd = block.timestamp + 30 minutes;
                if (earliestEnd >= challenge.end) {
                    // bump remaining time to 10 minutes if we are near the end of the challenge
                    challenge.end = earliestEnd;
                }
                require(challenge.size * challenge.position.price() > _bidAmountZCHF * 10**18, "whot");
                zchf.transferFrom(msg.sender, address(this), _bidAmountZCHF);
                challenge.bid = _bidAmountZCHF;
                challenge.bidder = msg.sender;
            }
        }
    }

    /**
     * @notice
     * Ends a challenge successfully after the auction period ended.
     *
     * Example: A challenged position had 1000 ABC tokens as collateral with a minting limit of 200,000 ZCHF, out
     * of which 60,000 have been minted and thereof 15,000 used to buy reserve tokens. The challenger auctioned off
     * 400 ABC tokens, challenging 40% of the position. The highest bid was 75,000 ZCHF, below the
     * 40% * 200,000 = 80,000 ZCHF needed to avert the challenge. The reserve ratio of the position is 25%.
     *
     * Now, the following happens when calling this method:
     * - 400 ABC from the position owner are transferred to the bidder
     * - The challenger's 400 ABC are returned to the challenger
     * - 40% of the reserve bought with the 15,000 ZCHF is sold off (approximately), yielding e.g. 5,600 ZCHF
     * - 40% * 60,000 = 24,000 ZCHF are burned
     * - 80,000 * 2% = 1600 ZCHF are given to the challenger as a reward
     * - 40% * (100%-25%) * (200,000 - 60,000) = 42,000 are given to the position owner for selling off unused collateral
     * - The remaining 75,000 + 5,600 - 1,600 - 24,000 - 42,000 = 13,000 ZCHF are sent to the reserve pool
     *
     * If the highest bid was only 60,000 ZCHF, then we would have had a shortfall of 2,000 ZCHF that would in the
     * first priority be covered by the reserve and in the second priority by minting unbacked ZCHF, triggering a
     * balance alert.
     * @param _challengeNumber  number of the challenge in challenge-array
     */
    function end(uint256 _challengeNumber) external {
        end(_challengeNumber, false);
    }

    function isChallengeOpen(uint256 _challengeNumber) external view returns (bool) {
        return challenges[_challengeNumber].end > block.timestamp;
    }

    /**
     * @dev internal end function
     * @param _challengeNumber  number of the challenge in challenge-array
     */
    function end(uint256 _challengeNumber, bool postponeCollateralReturn) public {
        Challenge storage challenge = challenges[_challengeNumber];
        require(block.timestamp >= challenge.end, "period has not ended");
        // challenge must have been successful, because otherwise it would have immediately ended on placing the winning bid
        returnCollateral(challenge, postponeCollateralReturn);
        // notify the position that will send the collateral to the bidder. If there is no bid, send the collateral to msg.sender
        address recipient = challenge.bidder == address(0x0) ? msg.sender : challenge.bidder;
        (address owner, uint256 effectiveBid, uint256 volume, uint256 repayment, uint32 reservePPM) = challenge.position.notifyChallengeSucceeded(recipient, challenge.bid, challenge.size);
        if (effectiveBid < challenge.bid) {
            // overbid, return excess amount
            IERC20(zchf).transfer(challenge.bidder, challenge.bid - effectiveBid);
        }
        uint256 reward = (volume * CHALLENGER_REWARD) / BASE;
        uint256 fundsNeeded = reward + repayment;
        if (effectiveBid > fundsNeeded){
            zchf.transfer(owner, effectiveBid - fundsNeeded);
        } else if (effectiveBid < fundsNeeded){
            zchf.notifyLoss(fundsNeeded - effectiveBid); // ensure we have enough to pay everything
        }
        zchf.transfer(challenge.challenger, reward); // pay out the challenger reward
        zchf.burn(repayment, reservePPM); // Repay the challenged part
        emit ChallengeSucceeded(address(challenge.position), challenge.bid, _challengeNumber);
        delete challenges[_challengeNumber];
    }

    function returnPostponedCollateral(address collateral, address target) external {
        uint256 amount = pendingReturns[collateral][msg.sender];
        delete pendingReturns[collateral][msg.sender];
        IERC20(collateral).transfer(target, amount);
    }

    function returnCollateral(Challenge storage challenge, bool postpone) internal {
        if (postpone){
            // Postponing helps in case the challenger was blacklisted on the collateral token or otherwise cannot receive it at the moment.
            pendingReturns[address(challenge.position.collateral())][challenge.challenger] += challenge.size;
        } else {
            challenge.position.collateral().transfer(challenge.challenger, challenge.size); // return the challenger's collateral
        }
    }
}

interface IPositionFactory {
    function createNewPosition(
        address _owner,
        address _zchf,
        address _collateral,
        uint256 _minCollateral,
        uint256 _initialCollateral,
        uint256 _initialLimit,
        uint256 _duration,
        uint256 _challengePeriod,
        uint32 _mintingFeePPM,
        uint256 _liqPrice,
        uint32 _reserve
    ) external returns (address);

    function clonePosition(address _existing) external returns (address);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IReserve.sol";
import "./IFrankencoin.sol";

interface IPosition {

    function collateral() external returns (IERC20);

    function minimumCollateral() external returns (uint256);

    function challengePeriod() external returns (uint256);

    function price() external returns (uint256);

    function reduceLimitForClone(uint256 amount) external returns (uint256);

    function initializeClone(address owner, uint256 _price, uint256 _limit, uint256 _coll, uint256 _mint) external;

    function deny(address[] calldata helpers, string calldata message) external;

    function notifyChallengeStarted(uint256 size) external;

    function tryAvertChallenge(uint256 size, uint256 bid) external returns (bool);

    function notifyChallengeSucceeded(address bidder, uint256 bid, uint256 size) external returns (address, uint256, uint256, uint256, uint32);

}

// SPDX-License-Identifier: MIT
//
// From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol
//
// Modifications:
// - Replaced Context._msgSender() with msg.sender
// - Made leaner
// - Extracted interface

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable {

    address public owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor (address initialOwner) {
        require(initialOwner != address(0), "0x0");
        owner = initialOwner;
        emit OwnershipTransferred(address(0), owner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) virtual public onlyOwner {
        require(newOwner != address(0), "0x0");
        owner = newOwner;
        emit OwnershipTransferred(owner, newOwner);
    }

    modifier onlyOwner() {
        require(owner == msg.sender || owner == address(0x0), "not owner");
        _;
    }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IReserve.sol";

interface IFrankencoin is IERC20 {

    function suggestMinter(address _minter, uint256 _applicationPeriod, 
      uint256 _applicationFee, string calldata _message) external;

    function registerPosition(address position) external;

    function denyMinter(address minter, address[] calldata helpers, string calldata message) external;

    function reserve() external view returns (IReserve);

    function isMinter(address minter) external view returns (bool);

    function isPosition(address position) external view returns (address);
    
    function mint(address target, uint256 amount) external;

    function mint(address target, uint256 amount, uint32 reservePPM, uint32 feePPM) external;

    function burn(uint256 amountIncludingReserve, uint32 reservePPM) external;

    function burnFrom(address payer, uint256 targetTotalBurnAmount, uint32 _reservePPM) external returns (uint256);

    function burnWithReserve(uint256 amountExcludingReserve, uint32 reservePPM) external returns (uint256);

    function burn(address target, uint256 amount) external;

    function notifyLoss(uint256 amount) external;

}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IReserve {
   function isQualified(address sender, address[] calldata helpers) external view returns (bool);
}

/**
* SPDX-License-Identifier: MIT
*
* Copyright (c) 2016-2019 zOS Global Limited
*
*/
pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */

interface IERC20 {

    // Optional functions
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

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

    function transferAndCall(address recipient, uint256 amount, bytes calldata data) 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.
     *
     * > 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);

}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_zchf","type":"address"},{"internalType":"address","name":"factory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"position","type":"address"},{"indexed":false,"internalType":"uint256","name":"number","type":"uint256"}],"name":"ChallengeAverted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"challenger","type":"address"},{"indexed":true,"internalType":"address","name":"position","type":"address"},{"indexed":false,"internalType":"uint256","name":"size","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"number","type":"uint256"}],"name":"ChallengeStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"position","type":"address"},{"indexed":false,"internalType":"uint256","name":"bid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"number","type":"uint256"}],"name":"ChallengeSucceeded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"challengedId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bidAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"bidder","type":"address"}],"name":"NewBid","type":"event"},{"inputs":[],"name":"BASE","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CHALLENGER_REWARD","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPENING_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_challengeNumber","type":"uint256"},{"internalType":"uint256","name":"_bidAmountZCHF","type":"uint256"},{"internalType":"uint256","name":"expectedSize","type":"uint256"}],"name":"bid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"challenges","outputs":[{"internalType":"address","name":"challenger","type":"address"},{"internalType":"contract IPosition","name":"position","type":"address"},{"internalType":"uint256","name":"size","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"},{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"bid","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"position","type":"address"},{"internalType":"uint256","name":"_initialCollateral","type":"uint256"},{"internalType":"uint256","name":"_initialMint","type":"uint256"}],"name":"clonePosition","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_challengeNumber","type":"uint256"}],"name":"end","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_challengeNumber","type":"uint256"},{"internalType":"bool","name":"postponeCollateralReturn","type":"bool"}],"name":"end","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_challengeNumber","type":"uint256"}],"name":"isChallengeOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_positionAddr","type":"address"},{"internalType":"uint256","name":"_collateralAmount","type":"uint256"}],"name":"launchChallenge","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"challenge","type":"uint256"}],"name":"minBid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_collateralAddress","type":"address"},{"internalType":"uint256","name":"_minCollateral","type":"uint256"},{"internalType":"uint256","name":"_initialCollateral","type":"uint256"},{"internalType":"uint256","name":"_mintingMaximum","type":"uint256"},{"internalType":"uint256","name":"_expirationSeconds","type":"uint256"},{"internalType":"uint256","name":"_challengeSeconds","type":"uint256"},{"internalType":"uint32","name":"_mintingFeePPM","type":"uint32"},{"internalType":"uint256","name":"_liqPrice","type":"uint256"},{"internalType":"uint32","name":"_reservePPM","type":"uint32"}],"name":"openPosition","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"pendingReturns","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserve","outputs":[{"internalType":"contract IReserve","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collateral","type":"address"},{"internalType":"address","name":"target","type":"address"}],"name":"returnPostponedCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_challengeNumber","type":"uint256"},{"internalType":"uint256","name":"splitOffAmount","type":"uint256"}],"name":"splitChallenge","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zchf","outputs":[{"internalType":"contract IFrankencoin","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60c06040523480156200001157600080fd5b506040516200250f3803806200250f833981016040819052620000349162000069565b6001600160a01b0391821660a05216608052620000a1565b80516001600160a01b03811681146200006457600080fd5b919050565b600080604083850312156200007d57600080fd5b62000088836200004c565b915062000098602084016200004c565b90509250929050565b60805160a0516123d16200013e60003960008181610295015281816103b3015281816105020152818161086b01528181610a7401528181610b5901528181610c1001528181610cb801528181610d4a01528181610e8001528181610f8601528181610fe601528181611016015281816111aa0152818161137f015281816115cd0152611d63015260008181610ef601526112f001526123d16000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638f1d3776116100a2578063c4d4803a11610071578063c4d4803a14610290578063c5360227146102b7578063cd3293de146102ca578063e85cde6f146102d2578063ec342ad0146102e557600080fd5b80638f1d3776146101ea578063af5806b61461023c578063be747fd51461025a578063c0dba9441461026d57600080fd5b80633611a3b7116100de5780633611a3b71461016e578063643745fb1461019957806374362a25146101c45780637b7da10e146101d757600080fd5b80630ad24528146101105780632ac9bf09146101255780632bf78dd814610138578063314142f21461015b575b600080fd5b61012361011e366004612059565b6102ef565b005b610123610133366004612072565b6102fd565b610148683635c9adc5dea0000081565b6040519081526020015b60405180910390f35b6101236101693660046120ac565b61090b565b61018161017c366004612103565b610e63565b6040516001600160a01b039091168152602001610152565b6101486101a7366004612189565b600160209081526000928352604080842090915290825290205481565b6101816101d23660046121b7565b611184565b6101486101e53660046121ec565b6115a7565b6101fd6101f8366004612059565b611939565b604080516001600160a01b03978816815295871660208701528501939093526060840191909152909216608082015260a081019190915260c001610152565b610245614e2081565b60405163ffffffff9091168152602001610152565b610148610268366004612218565b611990565b61028061027b366004612059565b611d04565b6040519015158152602001610152565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b6101486102c5366004612059565b611d34565b610181611d5f565b6101236102e0366004612189565b611de8565b610245620f424081565b6102fa81600061090b565b50565b60008084815481106103115761031161223a565b906000526020600020906006020190508060030154421061033c5761033784600061090b565b610905565b806002015482146103785760405162461bcd60e51b81526020600482015260016024820152607360f81b60448201526064015b60405180910390fd5b60058101541561042257600481810154600583015460405163a9059cbb60e01b81526001600160a01b039283169381019390935260248301527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156103fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104209190612250565b505b6040805185815260208101859052338183015290517f0b946a7d9cbd47da0dd592970ef1259349c40f44b231f11da4babeb56c07dd2d9181900360600190a160018101546002820154604051631f4a712160e11b81526001600160a01b0390921691633e94e242916104a1918790600401918252602082015260400190565b6020604051808303816000875af11580156104c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e49190612250565b156107175780546040516323b872dd60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116926323b872dd9261053c92339216908890600401612274565b6020604051808303816000875af115801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190612250565b508060010160009054906101000a90046001600160a01b03166001600160a01b031663d8dfeb456040518163ffffffff1660e01b81526004016020604051808303816000875af11580156105d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fb9190612298565b600282015460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b03919091169063a9059cbb906044016020604051808303816000875af1158015610650573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106749190612250565b5060018101546040518581526001600160a01b03909116907f77f5c683926510b182ace6fbf98ddedb0d8f79ddbcbd37b76472bd0428d328ca9060200160405180910390a2600084815481106106cc576106cc61223a565b60009182526020822060069091020180546001600160a01b03199081168255600182018054821690556002820183905560038201839055600482018054909116905560050155610905565b61072081611e79565b83101561075f5760405162461bcd60e51b815260206004820152600d60248201526c18995b1bddc81b5a5b88189a59609a1b604482015260640161036f565b600061076d426107086122cb565b90508160030154811061078257600382018190555b61079484670de0b6b3a76400006122de565b8260010160009054906101000a90046001600160a01b03166001600160a01b031663a035b1fe6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156107eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080f91906122f5565b836002015461081e91906122de565b116108545760405162461bcd60e51b815260040161036f906020808252600490820152631dda1bdd60e21b604082015260600190565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906108a490339030908990600401612274565b6020604051808303816000875af11580156108c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e79190612250565b5050600581018390556004810180546001600160a01b031916331790555b50505050565b600080838154811061091f5761091f61223a565b90600052602060002090600602019050806003015442101561097a5760405162461bcd60e51b81526020600482015260146024820152731c195c9a5bd9081a185cc81b9bdd08195b99195960621b604482015260640161036f565b6109848183611e9a565b60048101546000906001600160a01b0316156109ad5760048201546001600160a01b03166109af565b335b60018301546005840154600285015460405163707271b160e01b81526001600160a01b038086166004830152602482019390935260448101919091529293506000928392839283928392919091169063707271b19060640160a0604051808303816000875af1158015610a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4a919061230e565b945094509450945094508660050154841015610b1b57600487015460058801546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263a9059cbb92911690610aaa908890612366565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b199190612250565b505b6000620f4240610b2d614e20866122de565b610b379190612379565b90506000610b4584836122cb565b905080861115610bfe576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb88610b89848a612366565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610bd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf89190612250565b50610c90565b80861015610c90576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166361f3d110610c3f8884612366565b6040518263ffffffff1660e01b8152600401610c5d91815260200190565b600060405180830381600087803b158015610c7757600080fd5b505af1158015610c8b573d6000803e3d6000fd5b505050505b885460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af1158015610d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d279190612250565b506040516313980c6b60e31b81526004810185905263ffffffff841660248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639cc0635890604401600060405180830381600087803b158015610d9657600080fd5b505af1158015610daa573d6000803e3d6000fd5b50505050600189015460058a015460408051918252602082018e90526001600160a01b03909216917ff7bf51234e6ca827a69443267d342998768b8e753f1ec6e1fd72d70714443b16910160405180910390a260008b81548110610e1057610e1061223a565b60009182526020822060069091020180546001600160a01b031990811682556001820180548216905560028201839055600382018390556004820180549091169055600501555050505050505050505050565b6040516353af180760e01b81523360048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301528a81166044830152606482018a90526084820189905260a4820188905260c4820187905260e4820186905263ffffffff8581166101048401526101248301859052831661014483015260009182917f000000000000000000000000000000000000000000000000000000000000000016906353af180790610164016020604051808303816000875af1158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612298565b60405163b52c696d60e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063b52c696d90602401600060405180830381600087803b158015610fcc57600080fd5b505af1158015610fe0573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cd3293de6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611072573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110969190612298565b683635c9adc5dea000006040518463ffffffff1660e01b81526004016110be93929190612274565b6020604051808303816000875af11580156110dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111019190612250565b506040516323b872dd60e01b81526001600160a01b038c16906323b872dd9061113290339085908e90600401612274565b6020604051808303816000875af1158015611151573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111759190612250565b509a9950505050505050505050565b604051632748913b60e01b81526001600160a01b038481166004830152600091859130917f000000000000000000000000000000000000000000000000000000000000000090911690632748913b90602401602060405180830381865afa1580156111f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112179190612298565b6001600160a01b03161461125b5760405162461bcd60e51b815260206004820152600b60248201526a6e6f74206f757220706f7360a81b604482015260640161036f565b604051635861764160e11b81526004810184905285906000906001600160a01b0383169063b0c2ec82906024016020604051808303816000875af11580156112a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cb91906122f5565b604051630167d12360e71b81526001600160a01b0389811660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063b3e89180906024016020604051808303816000875af1158015611339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135d9190612298565b60405163b52c696d60e01b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063b52c696d90602401600060405180830381600087803b1580156113c557600080fd5b505af11580156113d9573d6000803e3d6000fd5b50505050826001600160a01b031663d8dfeb456040518163ffffffff1660e01b81526004016020604051808303816000875af115801561141d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114419190612298565b6001600160a01b03166323b872dd33838a6040518463ffffffff1660e01b815260040161147093929190612274565b6020604051808303816000875af115801561148f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b39190612250565b50806001600160a01b031663aee1a95933856001600160a01b031663a035b1fe6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611504573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152891906122f5565b6040516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482015260448101859052606481018a90526084810189905260a401600060405180830381600087803b15801561158357600080fd5b505af1158015611597573d6000803e3d6000fd5b50929a9950505050505050505050565b604051632748913b60e01b81526001600160a01b038381166004830152600091849130917f000000000000000000000000000000000000000000000000000000000000000090911690632748913b90602401602060405180830381865afa158015611616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163a9190612298565b6001600160a01b03161461167e5760405162461bcd60e51b815260206004820152600b60248201526a6e6f74206f757220706f7360a81b604482015260640161036f565b6000849050806001600160a01b031663d8dfeb456040518163ffffffff1660e01b81526004016020604051808303816000875af11580156116c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e79190612298565b6001600160a01b03166323b872dd3330876040518463ffffffff1660e01b815260040161171693929190612274565b6020604051808303816000875af1158015611735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117599190612250565b5060008080549050905060006040518060c00160405280336001600160a01b03168152602001846001600160a01b03168152602001878152602001846001600160a01b031663f3f480d96040518163ffffffff1660e01b81526004016020604051808303816000875af11580156117d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f891906122f5565b61180290426122cb565b815260006020808301829052604092830182905284546001808201875595835291819020845160069093020180546001600160a01b03199081166001600160a01b03948516178255918501519581018054831696841696909617909555838301516002860155606084015160038601556080840151600480870180549093169184169190911790915560a090930151600590940193909355516342d0204160e01b8152908101879052908316906342d0204190602401600060405180830381600087803b1580156118d257600080fd5b505af11580156118e6573d6000803e3d6000fd5b505060408051888152602081018590526001600160a01b03861693503392507fc4b384b2c5ca32c8e77081f4083be594a1ea9ba34f208a9f9a458f70608585f5910160405180910390a395945050505050565b6000818154811061194957600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b039485169650928416949193909291169086565b600080600084815481106119a6576119a661223a565b6000918252602090912060069091020180549091506001600160a01b03166119cd57600080fd5b6040805160c08101825282546001600160a01b0390811682526001840154811660208301529181018590526003830154606082015260048301549091166080820152600282015460058301546000929160a0830191611a2d9088906122de565b611a379190612379565b81525090508060a00151826005016000828254611a549190612366565b90915550506040810151600283018054600090611a72908490612366565b9091555050600182015460408051632eaf9f1d60e21b815290516000926001600160a01b03169163babe7c74916004808301926020929190829003018187875af1158015611ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae891906122f5565b90508083600201541015611afb57600080fd5b8082604001511015611b0c57600080fd5b600080546001808201835591805283517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5636006830290810180546001600160a01b03199081166001600160a01b03948516179091556020808801517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5648401805484169186169190911790556040808901517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56585015560608901517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56685015560808901517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e567850180549094169086161790925560a08801517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56890930192909255938701548754600289015486519081529283018c9052939490831693909216917fc4b384b2c5ca32c8e77081f4083be594a1ea9ba34f208a9f9a458f70608585f5910160405180910390a382602001516001600160a01b031683600001516001600160a01b03167fc4b384b2c5ca32c8e77081f4083be594a1ea9ba34f208a9f9a458f70608585f5856040015184604051611cf0929190918252602082015260400190565b60405180910390a393505050505b92915050565b60004260008381548110611d1a57611d1a61223a565b906000526020600020906006020160030154119050919050565b6000611cfe60008381548110611d4c57611d4c61223a565b9060005260206000209060060201611e79565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cd3293de6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de39190612298565b905090565b6001600160a01b03828116600081815260016020908152604080832033845290915280822080549290555163a9059cbb60e01b81529284166004840152602483018190529163a9059cbb906044016020604051808303816000875af1158015611e55573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109059190612250565b60006103e882600501546103ed611e9091906122de565b611cfe9190612379565b8015611f5d5760028201546001808401546040805163d8dfeb4560e01b815290516000926001600160a01b03169163d8dfeb45916004808301926020929190829003018187875af1158015611ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f179190612298565b6001600160a01b0390811682526020808301939093526040918201600090812087549092168152925281208054909190611f529084906122cb565b909155506120559050565b8160010160009054906101000a90046001600160a01b03166001600160a01b031663d8dfeb456040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611fb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd89190612298565b8254600284015460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af115801561202f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120539190612250565b505b5050565b60006020828403121561206b57600080fd5b5035919050565b60008060006060848603121561208757600080fd5b505081359360208301359350604090920135919050565b80151581146102fa57600080fd5b600080604083850312156120bf57600080fd5b8235915060208301356120d18161209e565b809150509250929050565b6001600160a01b03811681146102fa57600080fd5b63ffffffff811681146102fa57600080fd5b60008060008060008060008060006101208a8c03121561212257600080fd5b893561212d816120dc565b985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a0135612160816120f1565b925060e08a013591506101008a0135612178816120f1565b809150509295985092959850929598565b6000806040838503121561219c57600080fd5b82356121a7816120dc565b915060208301356120d1816120dc565b6000806000606084860312156121cc57600080fd5b83356121d7816120dc565b95602085013595506040909401359392505050565b600080604083850312156121ff57600080fd5b823561220a816120dc565b946020939093013593505050565b6000806040838503121561222b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561226257600080fd5b815161226d8161209e565b9392505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000602082840312156122aa57600080fd5b815161226d816120dc565b634e487b7160e01b600052601160045260246000fd5b80820180821115611cfe57611cfe6122b5565b8082028115828204841417611cfe57611cfe6122b5565b60006020828403121561230757600080fd5b5051919050565b600080600080600060a0868803121561232657600080fd5b8551612331816120dc565b809550506020860151935060408601519250606086015191506080860151612358816120f1565b809150509295509295909350565b81810381811115611cfe57611cfe6122b5565b60008261239657634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220871523be5da513dfa785367f9b964352cd177f987f7d4e570616b8cbdea15c0764736f6c63430008130033000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e000000000000000000000000cfa9b55ed2b0d97ac4f04f168b6670dd1bbe2080

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80638f1d3776116100a2578063c4d4803a11610071578063c4d4803a14610290578063c5360227146102b7578063cd3293de146102ca578063e85cde6f146102d2578063ec342ad0146102e557600080fd5b80638f1d3776146101ea578063af5806b61461023c578063be747fd51461025a578063c0dba9441461026d57600080fd5b80633611a3b7116100de5780633611a3b71461016e578063643745fb1461019957806374362a25146101c45780637b7da10e146101d757600080fd5b80630ad24528146101105780632ac9bf09146101255780632bf78dd814610138578063314142f21461015b575b600080fd5b61012361011e366004612059565b6102ef565b005b610123610133366004612072565b6102fd565b610148683635c9adc5dea0000081565b6040519081526020015b60405180910390f35b6101236101693660046120ac565b61090b565b61018161017c366004612103565b610e63565b6040516001600160a01b039091168152602001610152565b6101486101a7366004612189565b600160209081526000928352604080842090915290825290205481565b6101816101d23660046121b7565b611184565b6101486101e53660046121ec565b6115a7565b6101fd6101f8366004612059565b611939565b604080516001600160a01b03978816815295871660208701528501939093526060840191909152909216608082015260a081019190915260c001610152565b610245614e2081565b60405163ffffffff9091168152602001610152565b610148610268366004612218565b611990565b61028061027b366004612059565b611d04565b6040519015158152602001610152565b6101817f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e81565b6101486102c5366004612059565b611d34565b610181611d5f565b6101236102e0366004612189565b611de8565b610245620f424081565b6102fa81600061090b565b50565b60008084815481106103115761031161223a565b906000526020600020906006020190508060030154421061033c5761033784600061090b565b610905565b806002015482146103785760405162461bcd60e51b81526020600482015260016024820152607360f81b60448201526064015b60405180910390fd5b60058101541561042257600481810154600583015460405163a9059cbb60e01b81526001600160a01b039283169381019390935260248301527f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e169063a9059cbb906044016020604051808303816000875af11580156103fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104209190612250565b505b6040805185815260208101859052338183015290517f0b946a7d9cbd47da0dd592970ef1259349c40f44b231f11da4babeb56c07dd2d9181900360600190a160018101546002820154604051631f4a712160e11b81526001600160a01b0390921691633e94e242916104a1918790600401918252602082015260400190565b6020604051808303816000875af11580156104c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e49190612250565b156107175780546040516323b872dd60e01b81526001600160a01b037f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e8116926323b872dd9261053c92339216908890600401612274565b6020604051808303816000875af115801561055b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057f9190612250565b508060010160009054906101000a90046001600160a01b03166001600160a01b031663d8dfeb456040518163ffffffff1660e01b81526004016020604051808303816000875af11580156105d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fb9190612298565b600282015460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b03919091169063a9059cbb906044016020604051808303816000875af1158015610650573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106749190612250565b5060018101546040518581526001600160a01b03909116907f77f5c683926510b182ace6fbf98ddedb0d8f79ddbcbd37b76472bd0428d328ca9060200160405180910390a2600084815481106106cc576106cc61223a565b60009182526020822060069091020180546001600160a01b03199081168255600182018054821690556002820183905560038201839055600482018054909116905560050155610905565b61072081611e79565b83101561075f5760405162461bcd60e51b815260206004820152600d60248201526c18995b1bddc81b5a5b88189a59609a1b604482015260640161036f565b600061076d426107086122cb565b90508160030154811061078257600382018190555b61079484670de0b6b3a76400006122de565b8260010160009054906101000a90046001600160a01b03166001600160a01b031663a035b1fe6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156107eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080f91906122f5565b836002015461081e91906122de565b116108545760405162461bcd60e51b815260040161036f906020808252600490820152631dda1bdd60e21b604082015260600190565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e16906323b872dd906108a490339030908990600401612274565b6020604051808303816000875af11580156108c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e79190612250565b5050600581018390556004810180546001600160a01b031916331790555b50505050565b600080838154811061091f5761091f61223a565b90600052602060002090600602019050806003015442101561097a5760405162461bcd60e51b81526020600482015260146024820152731c195c9a5bd9081a185cc81b9bdd08195b99195960621b604482015260640161036f565b6109848183611e9a565b60048101546000906001600160a01b0316156109ad5760048201546001600160a01b03166109af565b335b60018301546005840154600285015460405163707271b160e01b81526001600160a01b038086166004830152602482019390935260448101919091529293506000928392839283928392919091169063707271b19060640160a0604051808303816000875af1158015610a26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4a919061230e565b945094509450945094508660050154841015610b1b57600487015460058801546001600160a01b037f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e81169263a9059cbb92911690610aaa908890612366565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b199190612250565b505b6000620f4240610b2d614e20866122de565b610b379190612379565b90506000610b4584836122cb565b905080861115610bfe576001600160a01b037f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e1663a9059cbb88610b89848a612366565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610bd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf89190612250565b50610c90565b80861015610c90576001600160a01b037f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e166361f3d110610c3f8884612366565b6040518263ffffffff1660e01b8152600401610c5d91815260200190565b600060405180830381600087803b158015610c7757600080fd5b505af1158015610c8b573d6000803e3d6000fd5b505050505b885460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490527f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e9091169063a9059cbb906044016020604051808303816000875af1158015610d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d279190612250565b506040516313980c6b60e31b81526004810185905263ffffffff841660248201527f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e6001600160a01b031690639cc0635890604401600060405180830381600087803b158015610d9657600080fd5b505af1158015610daa573d6000803e3d6000fd5b50505050600189015460058a015460408051918252602082018e90526001600160a01b03909216917ff7bf51234e6ca827a69443267d342998768b8e753f1ec6e1fd72d70714443b16910160405180910390a260008b81548110610e1057610e1061223a565b60009182526020822060069091020180546001600160a01b031990811682556001820180548216905560028201839055600382018390556004820180549091169055600501555050505050505050505050565b6040516353af180760e01b81523360048201526001600160a01b037f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e811660248301528a81166044830152606482018a90526084820189905260a4820188905260c4820187905260e4820186905263ffffffff8581166101048401526101248301859052831661014483015260009182917f000000000000000000000000cfa9b55ed2b0d97ac4f04f168b6670dd1bbe208016906353af180790610164016020604051808303816000875af1158015610f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f649190612298565b60405163b52c696d60e01b81526001600160a01b0380831660048301529192507f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e9091169063b52c696d90602401600060405180830381600087803b158015610fcc57600080fd5b505af1158015610fe0573d6000803e3d6000fd5b505050507f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e6001600160a01b03166323b872dd337f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e6001600160a01b031663cd3293de6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611072573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110969190612298565b683635c9adc5dea000006040518463ffffffff1660e01b81526004016110be93929190612274565b6020604051808303816000875af11580156110dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111019190612250565b506040516323b872dd60e01b81526001600160a01b038c16906323b872dd9061113290339085908e90600401612274565b6020604051808303816000875af1158015611151573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111759190612250565b509a9950505050505050505050565b604051632748913b60e01b81526001600160a01b038481166004830152600091859130917f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e90911690632748913b90602401602060405180830381865afa1580156111f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112179190612298565b6001600160a01b03161461125b5760405162461bcd60e51b815260206004820152600b60248201526a6e6f74206f757220706f7360a81b604482015260640161036f565b604051635861764160e11b81526004810184905285906000906001600160a01b0383169063b0c2ec82906024016020604051808303816000875af11580156112a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cb91906122f5565b604051630167d12360e71b81526001600160a01b0389811660048301529192506000917f000000000000000000000000cfa9b55ed2b0d97ac4f04f168b6670dd1bbe2080169063b3e89180906024016020604051808303816000875af1158015611339573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135d9190612298565b60405163b52c696d60e01b81526001600160a01b0380831660048301529192507f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e9091169063b52c696d90602401600060405180830381600087803b1580156113c557600080fd5b505af11580156113d9573d6000803e3d6000fd5b50505050826001600160a01b031663d8dfeb456040518163ffffffff1660e01b81526004016020604051808303816000875af115801561141d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114419190612298565b6001600160a01b03166323b872dd33838a6040518463ffffffff1660e01b815260040161147093929190612274565b6020604051808303816000875af115801561148f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b39190612250565b50806001600160a01b031663aee1a95933856001600160a01b031663a035b1fe6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611504573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152891906122f5565b6040516001600160e01b031960e085901b1681526001600160a01b039092166004830152602482015260448101859052606481018a90526084810189905260a401600060405180830381600087803b15801561158357600080fd5b505af1158015611597573d6000803e3d6000fd5b50929a9950505050505050505050565b604051632748913b60e01b81526001600160a01b038381166004830152600091849130917f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e90911690632748913b90602401602060405180830381865afa158015611616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163a9190612298565b6001600160a01b03161461167e5760405162461bcd60e51b815260206004820152600b60248201526a6e6f74206f757220706f7360a81b604482015260640161036f565b6000849050806001600160a01b031663d8dfeb456040518163ffffffff1660e01b81526004016020604051808303816000875af11580156116c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e79190612298565b6001600160a01b03166323b872dd3330876040518463ffffffff1660e01b815260040161171693929190612274565b6020604051808303816000875af1158015611735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117599190612250565b5060008080549050905060006040518060c00160405280336001600160a01b03168152602001846001600160a01b03168152602001878152602001846001600160a01b031663f3f480d96040518163ffffffff1660e01b81526004016020604051808303816000875af11580156117d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f891906122f5565b61180290426122cb565b815260006020808301829052604092830182905284546001808201875595835291819020845160069093020180546001600160a01b03199081166001600160a01b03948516178255918501519581018054831696841696909617909555838301516002860155606084015160038601556080840151600480870180549093169184169190911790915560a090930151600590940193909355516342d0204160e01b8152908101879052908316906342d0204190602401600060405180830381600087803b1580156118d257600080fd5b505af11580156118e6573d6000803e3d6000fd5b505060408051888152602081018590526001600160a01b03861693503392507fc4b384b2c5ca32c8e77081f4083be594a1ea9ba34f208a9f9a458f70608585f5910160405180910390a395945050505050565b6000818154811061194957600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b039485169650928416949193909291169086565b600080600084815481106119a6576119a661223a565b6000918252602090912060069091020180549091506001600160a01b03166119cd57600080fd5b6040805160c08101825282546001600160a01b0390811682526001840154811660208301529181018590526003830154606082015260048301549091166080820152600282015460058301546000929160a0830191611a2d9088906122de565b611a379190612379565b81525090508060a00151826005016000828254611a549190612366565b90915550506040810151600283018054600090611a72908490612366565b9091555050600182015460408051632eaf9f1d60e21b815290516000926001600160a01b03169163babe7c74916004808301926020929190829003018187875af1158015611ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae891906122f5565b90508083600201541015611afb57600080fd5b8082604001511015611b0c57600080fd5b600080546001808201835591805283517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5636006830290810180546001600160a01b03199081166001600160a01b03948516179091556020808801517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5648401805484169186169190911790556040808901517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56585015560608901517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56685015560808901517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e567850180549094169086161790925560a08801517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56890930192909255938701548754600289015486519081529283018c9052939490831693909216917fc4b384b2c5ca32c8e77081f4083be594a1ea9ba34f208a9f9a458f70608585f5910160405180910390a382602001516001600160a01b031683600001516001600160a01b03167fc4b384b2c5ca32c8e77081f4083be594a1ea9ba34f208a9f9a458f70608585f5856040015184604051611cf0929190918252602082015260400190565b60405180910390a393505050505b92915050565b60004260008381548110611d1a57611d1a61223a565b906000526020600020906006020160030154119050919050565b6000611cfe60008381548110611d4c57611d4c61223a565b9060005260206000209060060201611e79565b60007f000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e6001600160a01b031663cd3293de6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de39190612298565b905090565b6001600160a01b03828116600081815260016020908152604080832033845290915280822080549290555163a9059cbb60e01b81529284166004840152602483018190529163a9059cbb906044016020604051808303816000875af1158015611e55573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109059190612250565b60006103e882600501546103ed611e9091906122de565b611cfe9190612379565b8015611f5d5760028201546001808401546040805163d8dfeb4560e01b815290516000926001600160a01b03169163d8dfeb45916004808301926020929190829003018187875af1158015611ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f179190612298565b6001600160a01b0390811682526020808301939093526040918201600090812087549092168152925281208054909190611f529084906122cb565b909155506120559050565b8160010160009054906101000a90046001600160a01b03166001600160a01b031663d8dfeb456040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611fb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd89190612298565b8254600284015460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb906044016020604051808303816000875af115801561202f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120539190612250565b505b5050565b60006020828403121561206b57600080fd5b5035919050565b60008060006060848603121561208757600080fd5b505081359360208301359350604090920135919050565b80151581146102fa57600080fd5b600080604083850312156120bf57600080fd5b8235915060208301356120d18161209e565b809150509250929050565b6001600160a01b03811681146102fa57600080fd5b63ffffffff811681146102fa57600080fd5b60008060008060008060008060006101208a8c03121561212257600080fd5b893561212d816120dc565b985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a0135612160816120f1565b925060e08a013591506101008a0135612178816120f1565b809150509295985092959850929598565b6000806040838503121561219c57600080fd5b82356121a7816120dc565b915060208301356120d1816120dc565b6000806000606084860312156121cc57600080fd5b83356121d7816120dc565b95602085013595506040909401359392505050565b600080604083850312156121ff57600080fd5b823561220a816120dc565b946020939093013593505050565b6000806040838503121561222b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561226257600080fd5b815161226d8161209e565b9392505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000602082840312156122aa57600080fd5b815161226d816120dc565b634e487b7160e01b600052601160045260246000fd5b80820180821115611cfe57611cfe6122b5565b8082028115828204841417611cfe57611cfe6122b5565b60006020828403121561230757600080fd5b5051919050565b600080600080600060a0868803121561232657600080fd5b8551612331816120dc565b809550506020860151935060408601519250606086015191506080860151612358816120f1565b809150509295509295909350565b81810381811115611cfe57611cfe6122b5565b60008261239657634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220871523be5da513dfa785367f9b964352cd177f987f7d4e570616b8cbdea15c0764736f6c63430008130033

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

000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e000000000000000000000000cfa9b55ed2b0d97ac4f04f168b6670dd1bbe2080

-----Decoded View---------------
Arg [0] : _zchf (address): 0x422d17ccC1442501D039595ffcaAa71b4686Bf4E
Arg [1] : factory (address): 0xCFa9b55ed2B0d97AC4F04f168B6670dD1BBe2080

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000422d17ccc1442501d039595ffcaaa71b4686bf4e
Arg [1] : 000000000000000000000000cfa9b55ed2b0d97ac4f04f168b6670dd1bbe2080


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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