Contract 0x15EB0c763581329C921C8398556EcFf85Cc48275 2

 
 
Txn Hash
Method
Block
From
To
Value
0x249170b4014eacb6cee3f7d8419aa65bf8220cb23212c1ac97963adc1ed347f4Stake(pending)2023-01-29 2:19:3919 hrs 54 mins ago0x00b1925458827da178ba970589bf3f21ce170a32 IN 0x15eb0c763581329c921c8398556ecff85cc482750 Ether(Pending)(Pending)
0x8ca2a5223f1db7ce507a18ede057f21809b8bf96df1e0ddb95b08ae709a10d78Unstake Early154164202022-08-26 16:29:02156 days 5 hrs ago0xdbf04c4744954ba4058134daabd80c73895185d1 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00293251 36.13427545
0x1b6ee79dfad7cf82373687625cd03100d3344dd114612d3140a81ba47e75dbe7Unstake Early152882382022-08-06 10:42:52176 days 11 hrs agoENS Name wolas.eth IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00032454 4
0x3afbbddf598be0411cac7374c1a6bccbec4eb8fbf82583248cd4f81822c3eeefStake151060752022-07-09 3:59:49204 days 18 hrs ago0x4bf4e3a59add035c479cde89d98103cb65dca941 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00393359 18.7415742
0xa032f94a82833ff62f48e331662d92a44f95e8fff0d5fec15d905133a5a9fe98Unstake Early151060282022-07-09 3:47:00204 days 18 hrs ago0x4bf4e3a59add035c479cde89d98103cb65dca941 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00104126 12.83046904
0x4b139e70aaae1358fa018da879cc83fb12c14c5ab5e6ecec1541bb826a5b5db6Stake151047342022-07-08 22:42:47204 days 23 hrs ago0x6d90ab69ad831ee4cdd11be8e185b7843d1bd385 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00536934 17.63069929
0x10034bf5d886d91447f46145b8c7e91920fd1be7b8a31458227535cef732336cUnstake Early151047232022-07-08 22:40:39204 days 23 hrs ago0x6d90ab69ad831ee4cdd11be8e185b7843d1bd385 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00162836 24.13253228
0x6ab8fcfbd5297187758e5c9544c70e4cd36a201f6a808b55cb0d16495e646beeUnstake Early151047202022-07-08 22:40:02204 days 23 hrs ago0x6d90ab69ad831ee4cdd11be8e185b7843d1bd385 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00151869 22.50716309
0x1cca148519b26bc7b7791285eb6705af16e2e626bb53daf42bbcbc5c1f22f468Stake151046052022-07-08 22:11:27205 days 2 mins ago0x71ca1834b42cc6f8783fc0b461cf5a0f8b568a50 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00421596 12.9073512
0x2c16b1cd09b6991f6bf53425b78394e76df712b1adc6311791934687eb497537Unstake Early144925662022-03-31 7:24:45304 days 14 hrs agoENS Name 0xgyration.eth IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00287292 35.40006092
0x5dee8cf1b3f84c892aa831a39eeb8029fe20b96a33ebeff311d2bb3bef421332Unstake Early143426872022-03-07 23:26:28327 days 22 hrs ago0x831b30b83ec283adcdb8148462cbff7e18e42f7c IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00269571 39.95071374
0x9ff7393d649f79e11b03c00c0a5cb3906e84b36d73f0a3a4801829d65a048b97Unstake Early143426822022-03-07 23:25:54327 days 22 hrs ago0x831b30b83ec283adcdb8148462cbff7e18e42f7c IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00280145 41.51779611
0x63e7ff594a644f4da694180d36b3076c2e0b698c1a38909158aaa8e8ad04d6d2Unstake Early143426742022-03-07 23:24:11327 days 22 hrs ago0x831b30b83ec283adcdb8148462cbff7e18e42f7c IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00370698 45.67726553
0x4dfa8a0fff6fc22171cd3cca08cfb10e5f14d2cebc99017996e592c238ec48daUnstake Early141281452022-02-02 18:07:20361 days 4 hrs ago0xf3e11d89b07e738f31de12e8d8cfa0eac7867a37 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.01237573 183.40940002
0x87e5dfa94af65e626a92f9c18dfa43ae0b95ad81aaf427e2696b2ec6ba524b35Unstake Early139736542022-01-09 21:04:20385 days 1 hr ago0xaecaa11cfd3a8e3a2ef84184e74a71b87dd0b047 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.0190932 235.2915925
0xcf3cc56ff81de7c2effbd60fc134bddf9ea6ee7cd6c9fc201a34ee6d3cf5d6dfUnstake Early135493002021-11-04 8:59:45451 days 13 hrs ago0x9c6824e4b87a92e7a667696a8e804cb286fcf455 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00627172 92.94754077
0x01205febf4e530341f893add2b048aced57b45735c8b55e671fd6276d6142dbaUnstake Early135492752021-11-04 8:55:40451 days 13 hrs ago0x9c6824e4b87a92e7a667696a8e804cb286fcf455 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00808982 99.68246105
0x499d591c7d0d0ab7ced2e4b59365f2df0cde8c429f5203a46701b2b895e74c8fUnstake Early135478262021-11-04 3:22:02451 days 18 hrs ago0xab47e1ce605580c42a1b1eca12831b17a18ea282 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00905207 111.53913829
0xbfdd1f3c1269f023cd9aa9f8270ae24fd5a6188c79f84624246d4eadaf4aa81aUnstake Early134856692021-10-25 8:59:22461 days 13 hrs ago0x3d73c4cbb4e2d62dcf37b610c3fb718ca83fe628 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.0032462440
0xc1039e14240532ea4a9ea289b9afad51ce9da93ff5c45af5e8c175e631bc546fUnstake Early134329812021-10-17 3:13:10469 days 19 hrs ago0x99878c105d7cee8465fbe23b105a0c2e1c29d688 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00302495 44.83016082
0x1a47fb55931b8fb4b5aa2bddc6ba80c9f5641795b7f3156df781f4f9a843abfeUnstake Early134329812021-10-17 3:13:10469 days 19 hrs ago0x99878c105d7cee8465fbe23b105a0c2e1c29d688 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.00363823 44.83016082
0xcac4198aa28bd44abd1e129cd813df40d13eca04a78854e52df721a034909b2eStake133906352021-10-10 11:31:08476 days 10 hrs ago0x140499693eccd89382dbf0a758f2b118a6def30d IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.01806402 58.83876001
0xfefcd63640895281cd3977b35611dc57180586df6b8f150dce45f79bac2582ceStake133895122021-10-10 7:16:41476 days 14 hrs ago0xf3e11d89b07e738f31de12e8d8cfa0eac7867a37 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.0239195 59.42247417
0x02ebf5122386fc0f64c4e2cf44c096fe77d85d9a05c9776afe933452bba7e6aaStake133894402021-10-10 6:57:59476 days 15 hrs ago0xf3e11d89b07e738f31de12e8d8cfa0eac7867a37 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.02246086 53.52041996
0x5823254296394ed8f253caf156164bb820aaa88e10bcac9ef7b66913d47f2200Stake133390972021-10-02 9:35:24484 days 12 hrs ago0xd406c013b7419158ca68617ecf7d3e3f40800c13 IN  0x15eb0c763581329c921c8398556ecff85cc482750 Ether0.0108514537.42901221
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FlashProtocol

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-03-31
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;

interface IFlashToken {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    function mint(address to, uint256 value) external returns (bool);

    function burn(uint256 value) external returns (bool);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
}

interface IFlashReceiver {
    function receiveFlash(
        bytes32 id,
        uint256 amountIn,
        uint256 expireAfter,
        uint256 mintedAmount,
        address staker,
        bytes calldata data
    ) external returns (uint256);
}

interface IFlashProtocol {
    enum LockedFunctions { SET_MATCH_RATIO, SET_MATCH_RECEIVER }

    function TIMELOCK() external view returns (uint256);

    function FLASH_TOKEN() external view returns (address);

    function matchRatio() external view returns (uint256);

    function matchReceiver() external view returns (address);

    function stakes(bytes32 _id)
        external
        view
        returns (
            uint256 amountIn,
            uint256 expiry,
            uint256 expireAfter,
            uint256 mintedAmount,
            address staker,
            address receiver
        );

    function stake(
        uint256 _amountIn,
        uint256 _days,
        address _receiver,
        bytes calldata _data
    )
        external
        returns (
            uint256 mintedAmount,
            uint256 matchedAmount,
            bytes32 id
        );

    function lockFunction(LockedFunctions _lockedFunction) external;

    function unlockFunction(LockedFunctions _lockedFunction) external;

    function timelock(LockedFunctions _lockedFunction) external view returns (uint256);

    function balances(address _staker) external view returns (uint256);

    function unstake(bytes32 _id) external returns (uint256 withdrawAmount);

    function unstakeEarly(bytes32 _id) external returns (uint256 withdrawAmount);

    function getFPY(uint256 _amountIn) external view returns (uint256);

    function setMatchReceiver(address _newMatchReceiver) external;

    function setMatchRatio(uint256 _newMatchRatio) external;

    function getMatchedAmount(uint256 mintedAmount) external view returns (uint256);

    function getMintAmount(uint256 _amountIn, uint256 _expiry) external view returns (uint256);

    function getPercentageStaked(uint256 _amountIn) external view returns (uint256 percentage);

    function calculateMaxStakePeriod(uint256 _amountIn) external view returns (uint256);

    function stakeWithPermit(
        address _receiver,
        uint256 _amountIn,
        uint256 _expiry,
        uint256 _deadline,
        uint8 _v,
        bytes32 _r,
        bytes32 _s,
        bytes calldata _data
    )
        external
        returns (
            uint256 mintedAmount,
            uint256 matchedAmount,
            bytes32 id
        );
}

library SafeMath {
    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x + y) >= x, "MATH:: ADD_OVERFLOW");
    }

    function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x - y) <= x, "MATH:: SUB_UNDERFLOW");
    }

    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, "MATH:: MUL_OVERFLOW");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "MATH:: DIVISION_BY_ZERO");
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
}


contract FlashProtocol is IFlashProtocol {
    using SafeMath for uint256;
    using Address for address;

    struct Stake {
        uint256 amountIn;
        uint256 expiry;
        uint256 expireAfter;
        uint256 mintedAmount;
        address staker;
        address receiver;
    }

    uint256 public constant override TIMELOCK = 3 days;
    address public constant override FLASH_TOKEN = 0x20398aD62bb2D930646d45a6D4292baa0b860C1f;

    uint256 internal constant PRECISION = 1e18;
    uint256 internal constant MAX_FPY_FOR_1_YEAR = 5e17;
    uint256 internal constant SECONDS_IN_1_YEAR = 365 * 86400;

    uint256 public override matchRatio;
    address public override matchReceiver;

    mapping(bytes32 => Stake) public override stakes;
    mapping(LockedFunctions => uint256) public override timelock;
    mapping(address => uint256) public override balances;

    event Staked(
        bytes32 _id,
        uint256 _amountIn,
        uint256 _expiry,
        uint256 _expireAfter,
        uint256 _mintedAmount,
        address indexed _staker,
        address indexed _receiver
    );

    event Unstaked(bytes32 _id, uint256 _amountIn, address indexed _staker);

    modifier onlyMatchReceiver {
        require(msg.sender == matchReceiver, "FlashProtocol:: NOT_MATCH_RECEIVER");
        _;
    }

    modifier notLocked(LockedFunctions _lockedFunction) {
        require(
            timelock[_lockedFunction] != 0 && timelock[_lockedFunction] <= block.timestamp,
            "FlashProtocol:: FUNCTION_TIMELOCKED"
        );
        _;
    }

    constructor(address _initialMatchReceiver, uint256 _initialMatchRatio) {
        _setMatchRatio(_initialMatchRatio);
        _setMatchReceiver(_initialMatchReceiver);
    }

    function lockFunction(LockedFunctions _lockedFunction) external override onlyMatchReceiver {
        timelock[_lockedFunction] = type(uint256).max;
    }

    function unlockFunction(LockedFunctions _lockedFunction) external override onlyMatchReceiver {
        timelock[_lockedFunction] = block.timestamp + TIMELOCK;
    }

    function setMatchReceiver(address _newMatchReceiver)
        external
        override
        onlyMatchReceiver
        notLocked(LockedFunctions.SET_MATCH_RECEIVER)
    {
        _setMatchReceiver(_newMatchReceiver);
        timelock[LockedFunctions.SET_MATCH_RECEIVER] = 0;
    }

    function _setMatchReceiver(address _newMatchReceiver) internal {
        matchReceiver = _newMatchReceiver;
    }

    function setMatchRatio(uint256 _newMatchRatio)
        external
        override
        onlyMatchReceiver
        notLocked(LockedFunctions.SET_MATCH_RATIO)
    {
        _setMatchRatio(_newMatchRatio);
        timelock[LockedFunctions.SET_MATCH_RATIO] = 0;
    }

    function _setMatchRatio(uint256 _newMatchRatio) internal {
        require(_newMatchRatio >= 0 && _newMatchRatio <= 2000, "FlashProtocol:: INVALID_MATCH_RATIO");
        // can be 0 and cannot be above 20%
        require(_newMatchRatio <= 2000, "FlashProtocol:: INVALID_MATCH_RATIO");
        matchRatio = _newMatchRatio;
    }

    function stake(
        uint256 _amountIn,
        uint256 _expiry,
        address _receiver,
        bytes calldata _data
    )
        external
        override
        returns (
            uint256,
            uint256,
            bytes32
        )
    {
        return _stake(_amountIn, _expiry, _receiver, _data);
    }

    function stakeWithPermit(
        address _receiver,
        uint256 _amountIn,
        uint256 _expiry,
        uint256 _deadline,
        uint8 _v,
        bytes32 _r,
        bytes32 _s,
        bytes calldata _data
    )
        external
        override
        returns (
            uint256,
            uint256,
            bytes32
        )
    {
        IFlashToken(FLASH_TOKEN).permit(msg.sender, address(this), type(uint256).max, _deadline, _v, _r, _s);
        return _stake(_amountIn, _expiry, _receiver, _data);
    }

    function _stake(
        uint256 _amountIn,
        uint256 _expiry,
        address _receiver,
        bytes calldata _data
    )
        internal
        returns (
            uint256 mintedAmount,
            uint256 matchedAmount,
            bytes32 id
        )
    {
        require(_amountIn > 0, "FlashProtocol:: INVALID_AMOUNT");
        require(_receiver != address(this), "FlashProtocol:: INVALID_ADDRESS");
        require(_expiry <= calculateMaxStakePeriod(_amountIn), "FlashProtocol:: MAX_STAKE_PERIOD_EXCEEDS");

        address staker = msg.sender;

        uint256 expiration = block.timestamp.add(_expiry);
        balances[staker] = balances[staker].add(_amountIn);

        id = keccak256(abi.encodePacked(_amountIn, _expiry, _receiver, staker, block.timestamp));

        require(stakes[id].staker == address(0), "FlashProtocol:: STAKE_EXISTS");

        mintedAmount = getMintAmount(_amountIn, _expiry);
        matchedAmount = getMatchedAmount(mintedAmount);

        IFlashToken(FLASH_TOKEN).transferFrom(staker, address(this), _amountIn);

        IFlashToken(FLASH_TOKEN).mint(_receiver, mintedAmount);
        IFlashToken(FLASH_TOKEN).mint(matchReceiver, matchedAmount);

        stakes[id] = Stake(_amountIn, _expiry, expiration, mintedAmount, staker, _receiver);

        if (_receiver.isContract()) {
            IFlashReceiver(_receiver).receiveFlash(id, _amountIn, expiration, mintedAmount, staker, _data);
        }

        emit Staked(id, _amountIn, _expiry, expiration, mintedAmount, staker, _receiver);
    }

    function unstake(bytes32 _id) external override returns (uint256 withdrawAmount) {
        Stake memory s = stakes[_id];
        require(block.timestamp >= s.expireAfter, "FlashProtol:: STAKE_NOT_EXPIRED");
        balances[s.staker] = balances[s.staker].sub(s.amountIn);
        withdrawAmount = s.amountIn;
        delete stakes[_id];
        IFlashToken(FLASH_TOKEN).transfer(s.staker, withdrawAmount);
        emit Unstaked(_id, s.amountIn, s.staker);
    }

    function unstakeEarly(bytes32 _id) external override returns (uint256 withdrawAmount) {
        Stake memory s = stakes[_id];
        address staker = msg.sender;
        require(s.staker == staker, "FlashProtocol:: INVALID_STAKER");
        uint256 remainingTime = (s.expireAfter.sub(block.timestamp));
        require(s.expiry > remainingTime, "Flash Protocol:: INVALID_UNSTAKE_TIME");
        uint256 burnAmount = _calculateBurn(s.amountIn, remainingTime, s.expiry);
        assert(burnAmount <= s.amountIn);
        balances[staker] = balances[staker].sub(s.amountIn);
        withdrawAmount = s.amountIn.sub(burnAmount);
        delete stakes[_id];
        IFlashToken(FLASH_TOKEN).burn(burnAmount);
        IFlashToken(FLASH_TOKEN).transfer(staker, withdrawAmount);
        emit Unstaked(_id, withdrawAmount, staker);
    }

    function getMatchedAmount(uint256 _mintedAmount) public view override returns (uint256) {
        return _mintedAmount.mul(matchRatio).div(10000);
    }

    function getMintAmount(uint256 _amountIn, uint256 _expiry) public view override returns (uint256) {
        return _amountIn.mul(_expiry).mul(getFPY(_amountIn)).div(PRECISION * SECONDS_IN_1_YEAR);
    }

    function getFPY(uint256 _amountIn) public view override returns (uint256) {
        return (PRECISION.sub(getPercentageStaked(_amountIn))).div(2);
    }

    function getPercentageStaked(uint256 _amountIn) public view override returns (uint256) {
        uint256 locked = IFlashToken(FLASH_TOKEN).balanceOf(address(this)).add(_amountIn);
        return locked.mul(PRECISION).div(IFlashToken(FLASH_TOKEN).totalSupply());
    }

    function calculateMaxStakePeriod(uint256 _amountIn) public view override returns (uint256) {
        return MAX_FPY_FOR_1_YEAR.mul(SECONDS_IN_1_YEAR).div(getFPY(_amountIn));
    }

    function _calculateBurn(
        uint256 _amount,
        uint256 _remainingTime,
        uint256 _totalTime
    ) private pure returns (uint256) {
        return _amount.mul(_remainingTime).div(_totalTime);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_initialMatchReceiver","type":"address"},{"internalType":"uint256","name":"_initialMatchRatio","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"_id","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"_amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_expiry","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_expireAfter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_mintedAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"_staker","type":"address"},{"indexed":true,"internalType":"address","name":"_receiver","type":"address"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"_id","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"_amountIn","type":"uint256"},{"indexed":true,"internalType":"address","name":"_staker","type":"address"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"FLASH_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIMELOCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"calculateMaxStakePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"getFPY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintedAmount","type":"uint256"}],"name":"getMatchedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"uint256","name":"_expiry","type":"uint256"}],"name":"getMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"getPercentageStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IFlashProtocol.LockedFunctions","name":"_lockedFunction","type":"uint8"}],"name":"lockFunction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"matchRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"matchReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMatchRatio","type":"uint256"}],"name":"setMatchRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newMatchReceiver","type":"address"}],"name":"setMatchReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"uint256","name":"_expiry","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"stake","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"uint256","name":"_expiry","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"stakeWithPermit","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"stakes","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint256","name":"expireAfter","type":"uint256"},{"internalType":"uint256","name":"mintedAmount","type":"uint256"},{"internalType":"address","name":"staker","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IFlashProtocol.LockedFunctions","name":"","type":"uint8"}],"name":"timelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum IFlashProtocol.LockedFunctions","name":"_lockedFunction","type":"uint8"}],"name":"unlockFunction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"unstake","outputs":[{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"unstakeEarly","outputs":[{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162001af738038062001af7833981810160405260408110156200003757600080fd5b5080516020909101516200004b816200005e565b6200005682620000e9565b50506200010b565b6107d0811115620000a15760405162461bcd60e51b815260040180806020018281038252602381526020018062001ad46023913960400191505060405180910390fd5b6107d0811115620000e45760405162461bcd60e51b815260040180806020018281038252602381526020018062001ad46023913960400191505060405180910390fd5b600055565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6119b9806200011b6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637aadef8b116100ad578063b4fa3b9811610071578063b4fa3b9814610448578063c17bae2a14610468578063cc704d5414610488578063d08c9702146104a5578063e345a380146104ad5761012c565b80637aadef8b146103155780638fee64071461031d578063a066983d14610379578063aa53099d14610405578063b3e1f050146104255761012c565b806332a3fcb8116100f457806332a3fcb8146101ef5780635b49129e146102b657806368220664146102be57806371ed5d1a146102db57806376f5cf28146102f85761012c565b80631051f696146101315780631f75caac1461016057806323c6e14c1461017d57806327212b5b146101a157806327e235e3146101c9575b600080fd5b61014e6004803603602081101561014757600080fd5b50356104ca565b60408051918252519081900360200190f35b61014e6004803603602081101561017657600080fd5b50356104f3565b610185610517565b604080516001600160a01b039092168252519081900360200190f35b6101c7600480360360208110156101b757600080fd5b50356001600160a01b031661052f565b005b61014e600480360360208110156101df57600080fd5b50356001600160a01b0316610649565b610298600480360361010081101561020657600080fd5b6001600160a01b038235169160208101359160408201359160608101359160ff6080830135169160a08101359160c08201359190810190610100810160e082013564010000000081111561025957600080fd5b82018360208201111561026b57600080fd5b8035906020019184600183028401116401000000008311171561028d57600080fd5b50909250905061065b565b60408051938452602084019290925282820152519081900360600190f35b61014e61071a565b61014e600480360360208110156102d457600080fd5b5035610720565b61014e600480360360208110156102f157600080fd5b5035610851565b6101c76004803603602081101561030e57600080fd5b5035610a83565b61014e610b7e565b61033a6004803603602081101561033357600080fd5b5035610b85565b6040805196875260208701959095528585019390935260608501919091526001600160a01b0390811660808501521660a0830152519081900360c00190f35b6102986004803603608081101561038f57600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156103c657600080fd5b8201836020820111156103d857600080fd5b803590602001918460018302840111640100000000831117156103fa57600080fd5b509092509050610bc8565b6101c76004803603602081101561041b57600080fd5b503560ff16610beb565b61014e6004803603604081101561043b57600080fd5b5080359060200135610c69565b6101c76004803603602081101561045e57600080fd5b503560ff16610c96565b61014e6004803603602081101561047e57600080fd5b503560ff16610cf2565b61014e6004803603602081101561049e57600080fd5b5035610d04565b610185610d26565b61014e600480360360208110156104c357600080fd5b5035610d35565b60006104ed6127106104e76000548561105990919063ffffffff16565b906110be565b92915050565b60006104ed61050183610d04565b6104e76706f05b59d3b200006301e13380611059565b7320398ad62bb2d930646d45a6d4292baa0b860c1f81565b6001546001600160a01b031633146105785760405162461bcd60e51b81526004018080602001828103825260228152602001806119626022913960400191505060405180910390fd5b6001600081905260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c54158015906105dd575042600360008360018111156105c057fe5b60018111156105cb57fe5b81526020019081526020016000205411155b6106185760405162461bcd60e51b81526004018080602001828103825260238152602001806119176023913960400191505060405180910390fd5b61062182611128565b600060038160015b600181111561063457fe5b81526020810191909152604001600020555050565b60046020526000908152604090205481565b6040805163d505accf60e01b815233600482015230602482015260001960448201526064810188905260ff8716608482015260a4810186905260c481018590529051600091829182917320398ad62bb2d930646d45a6d4292baa0b860c1f9163d505accf9160e480820192869290919082900301818387803b1580156106e057600080fd5b505af11580156106f4573d6000803e3d6000fd5b505050506107058b8b8e888861114a565b92509250925099509950999650505050505050565b60005481565b6000806107ba837320398ad62bb2d930646d45a6d4292baa0b860c1f6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561078857600080fd5b505afa15801561079c573d6000803e3d6000fd5b505050506040513d60208110156107b257600080fd5b505190611744565b905061084a7320398ad62bb2d930646d45a6d4292baa0b860c1f6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561080c57600080fd5b505afa158015610820573d6000803e3d6000fd5b505050506040513d602081101561083657600080fd5b50516104e783670de0b6b3a7640000611059565b9392505050565b600061085b611886565b50600082815260026020818152604092839020835160c08101855281548152600182015492810192909252918201549281018390526003820154606082015260048201546001600160a01b03908116608083015260059092015490911660a082015290421015610912576040805162461bcd60e51b815260206004820152601f60248201527f466c61736850726f746f6c3a3a205354414b455f4e4f545f4558504952454400604482015290519081900360640190fd5b805160808201516001600160a01b031660009081526004602052604090205461093a91611792565b6080820180516001600160a01b0390811660009081526004602081815260408084209690965586518984526002808352878520858155600181018690559081018590556003810185905580840180546001600160a01b03199081169091556005909101805490911690559451865163a9059cbb60e01b81529416918401919091526024830184905293519295507320398ad62bb2d930646d45a6d4292baa0b860c1f9363a9059cbb93604480850194929391928390030190829087803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b505050506040513d6020811015610a2d57600080fd5b50506080810151815160408051868152602081019290925280516001600160a01b03909316927f2ce17f91452598d1f926f6cfe29a9d42a67ff82b45d1eb94e0634c27555c14da9281900390910190a250919050565b6001546001600160a01b03163314610acc5760405162461bcd60e51b81526004018080602001828103825260228152602001806119626022913960400191505060405180910390fd5b600080805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5415801590610b2f57504260036000836001811115610b1257fe5b6001811115610b1d57fe5b81526020019081526020016000205411155b610b6a5760405162461bcd60e51b81526004018080602001828103825260238152602001806119176023913960400191505060405180910390fd5b610b73826117e1565b600060038180610629565b6203f48081565b6002602081905260009182526040909120805460018201549282015460038301546004840154600590940154929493919290916001600160a01b03908116911686565b6000806000610bda888888888861114a565b925092509250955095509592505050565b6001546001600160a01b03163314610c345760405162461bcd60e51b81526004018080602001828103825260228152602001806119626022913960400191505060405180910390fd5b6203f480420160036000836001811115610c4a57fe5b6001811115610c5557fe5b815260208101919091526040016000205550565b600061084a6a1a1601fc4ea7109e0000006104e7610c8686610d04565b610c908787611059565b90611059565b6001546001600160a01b03163314610cdf5760405162461bcd60e51b81526004018080602001828103825260228152602001806119626022913960400191505060405180910390fd5b60001960036000836001811115610c4a57fe5b60036020526000908152604090205481565b60006104ed60026104e7610d1785610720565b670de0b6b3a764000090611792565b6001546001600160a01b031681565b6000610d3f611886565b50600082815260026020818152604092839020835160c0810185528154815260018201549281019290925291820154928101929092526003810154606083015260048101546001600160a01b03908116608084018190526005909201541660a083015233908114610df7576040805162461bcd60e51b815260206004820152601e60248201527f466c61736850726f746f636f6c3a3a20494e56414c49445f5354414b45520000604482015290519081900360640190fd5b6040820151600090610e099042611792565b905080836020015111610e4d5760405162461bcd60e51b81526004018080602001828103825260258152602001806118cf6025913960400191505060405180910390fd5b6000610e628460000151838660200151611868565b8451909150811115610e7057fe5b83516001600160a01b038416600090815260046020526040902054610e9491611792565b6001600160a01b0384166000908152600460205260409020558351610eb99082611792565b60008781526002602081815260408084208481556001810185905592830184905560038301849055600480840180546001600160a01b0319908116909155600590940180549094169093558051630852cd8d60e31b8152928301869052519398507320398ad62bb2d930646d45a6d4292baa0b860c1f936342966c68936024808501948390030190829087803b158015610f5257600080fd5b505af1158015610f66573d6000803e3d6000fd5b505050506040513d6020811015610f7c57600080fd5b50506040805163a9059cbb60e01b81526001600160a01b03851660048201526024810187905290517320398ad62bb2d930646d45a6d4292baa0b860c1f9163a9059cbb9160448083019260209291908290030181600087803b158015610fe157600080fd5b505af1158015610ff5573d6000803e3d6000fd5b505050506040513d602081101561100b57600080fd5b5050604080518781526020810187905281516001600160a01b038616927f2ce17f91452598d1f926f6cfe29a9d42a67ff82b45d1eb94e0634c27555c14da928290030190a250505050919050565b600082611068575060006104ed565b8282028284828161107557fe5b041461084a576040805162461bcd60e51b81526020600482015260136024820152724d4154483a3a204d554c5f4f564552464c4f5760681b604482015290519081900360640190fd5b6000808211611114576040805162461bcd60e51b815260206004820152601760248201527f4d4154483a3a204449564953494f4e5f42595f5a45524f000000000000000000604482015290519081900360640190fd5b600082848161111f57fe5b04949350505050565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008060008088116111a3576040805162461bcd60e51b815260206004820152601e60248201527f466c61736850726f746f636f6c3a3a20494e56414c49445f414d4f554e540000604482015290519081900360640190fd5b6001600160a01b038616301415611201576040805162461bcd60e51b815260206004820152601f60248201527f466c61736850726f746f636f6c3a3a20494e56414c49445f4144445245535300604482015290519081900360640190fd5b61120a886104f3565b8711156112485760405162461bcd60e51b815260040180806020018281038252602881526020018061193a6028913960400191505060405180910390fd5b336000611255428a611744565b6001600160a01b03831660009081526004602052604090205490915061127b908b611744565b60046000846001600160a01b03166001600160a01b0316815260200190815260200160002081905550898989844260405160200180868152602001858152602001846001600160a01b031660601b8152601401836001600160a01b031660601b81526014018281526020019550505050505060405160208183030381529060405280519060200120925060006001600160a01b03166002600085815260200190815260200160002060040160009054906101000a90046001600160a01b03166001600160a01b031614611395576040805162461bcd60e51b815260206004820152601c60248201527f466c61736850726f746f636f6c3a3a205354414b455f45584953545300000000604482015290519081900360640190fd5b61139f8a8a610c69565b94506113aa856104ca565b604080516323b872dd60e01b81526001600160a01b0385166004820152306024820152604481018d905290519195507320398ad62bb2d930646d45a6d4292baa0b860c1f916323b872dd916064808201926020929091908290030181600087803b15801561141757600080fd5b505af115801561142b573d6000803e3d6000fd5b505050506040513d602081101561144157600080fd5b5050604080516340c10f1960e01b81526001600160a01b038a1660048201526024810187905290517320398ad62bb2d930646d45a6d4292baa0b860c1f916340c10f199160448083019260209291908290030181600087803b1580156114a657600080fd5b505af11580156114ba573d6000803e3d6000fd5b505050506040513d60208110156114d057600080fd5b5050600154604080516340c10f1960e01b81526001600160a01b03909216600483015260248201869052517320398ad62bb2d930646d45a6d4292baa0b860c1f916340c10f199160448083019260209291908290030181600087803b15801561153857600080fd5b505af115801561154c573d6000803e3d6000fd5b505050506040513d602081101561156257600080fd5b50506040805160c0810182528b815260208181018c8152828401858152606084018a81526001600160a01b03808916608087019081528f821660a0880181815260008d8152600298899052999099209751885594516001880155925194860194909455516003850155516004840180549184166001600160a01b0319928316179055935160059093018054939092169290931691909117905561160490611880565b156116d957876001600160a01b0316632cbff446848c8489878d8d6040518863ffffffff1660e01b815260040180888152602001878152602001868152602001858152602001846001600160a01b03168152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505098505050505050505050602060405180830381600087803b1580156116ac57600080fd5b505af11580156116c0573d6000803e3d6000fd5b505050506040513d60208110156116d657600080fd5b50505b60408051848152602081018c90528082018b9052606081018390526080810187905290516001600160a01b03808b1692908516917f8872a0bfe035dd55f2341f67aa0f9a8196bb3f97e132b6d3cb2f53f91aaa93f99181900360a00190a35050955095509592505050565b808201828110156104ed576040805162461bcd60e51b81526020600482015260136024820152724d4154483a3a204144445f4f564552464c4f5760681b604482015290519081900360640190fd5b808203828111156104ed576040805162461bcd60e51b81526020600482015260146024820152734d4154483a3a205355425f554e444552464c4f5760601b604482015290519081900360640190fd5b6107d08111156118225760405162461bcd60e51b81526004018080602001828103825260238152602001806118f46023913960400191505060405180910390fd5b6107d08111156118635760405162461bcd60e51b81526004018080602001828103825260238152602001806118f46023913960400191505060405180910390fd5b600055565b6000611878826104e78686611059565b949350505050565b3b151590565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152509056fe466c6173682050726f746f636f6c3a3a20494e56414c49445f554e5354414b455f54494d45466c61736850726f746f636f6c3a3a20494e56414c49445f4d415443485f524154494f466c61736850726f746f636f6c3a3a2046554e4354494f4e5f54494d454c4f434b4544466c61736850726f746f636f6c3a3a204d41585f5354414b455f504552494f445f45584345454453466c61736850726f746f636f6c3a3a204e4f545f4d415443485f5245434549564552a26469706673582212206dc5d6153199f30c9e7dfd6cff75014faddcff6959bde4c24a51e128a2010df564736f6c63430007040033466c61736850726f746f636f6c3a3a20494e56414c49445f4d415443485f524154494f000000000000000000000000842f8f6fb524996d0b660621da895166e1cea69100000000000000000000000000000000000000000000000000000000000005dc

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

000000000000000000000000842f8f6fb524996d0b660621da895166e1cea69100000000000000000000000000000000000000000000000000000000000005dc

-----Decoded View---------------
Arg [0] : _initialMatchReceiver (address): 0x842f8f6fB524996d0b660621DA895166E1ceA691
Arg [1] : _initialMatchRatio (uint256): 1500

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000842f8f6fb524996d0b660621da895166e1cea691
Arg [1] : 00000000000000000000000000000000000000000000000000000000000005dc


Deployed ByteCode Sourcemap

5695:8236:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12706:154;;;;;;;;;;;;;;;;-1:-1:-1;12706:154:0;;:::i;:::-;;;;;;;;;;;;;;;;13520:181;;;;;;;;;;;;;;;;-1:-1:-1;13520:181:0;;:::i;6061:89::-;;;:::i;:::-;;;;-1:-1:-1;;;;;6061:89:0;;;;;;;;;;;;;;7833:290;;;;;;;;;;;;;;;;-1:-1:-1;7833:290:0;-1:-1:-1;;;;;7833:290:0;;:::i;:::-;;6541:52;;;;;;;;;;;;;;;;-1:-1:-1;6541:52:0;-1:-1:-1;;;;;6541:52:0;;:::i;9224:551::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9224:551:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9224:551:0;;-1:-1:-1;9224:551:0;-1:-1:-1;9224:551:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;6332:34;;;:::i;13242:270::-;;;;;;;;;;;;;;;;-1:-1:-1;13242:270:0;;:::i;11378:469::-;;;;;;;;;;;;;;;;-1:-1:-1;11378:469:0;;:::i;8254:272::-;;;;;;;;;;;;;;;;-1:-1:-1;8254:272:0;;:::i;6004:50::-;;;:::i;6419:48::-;;;;;;;;;;;;;;;;-1:-1:-1;6419:48:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6419:48:0;;;;;;;;;;;;;;;;;;;;;8875:341;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8875:341:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8875:341:0;;-1:-1:-1;8875:341:0;-1:-1:-1;8875:341:0;:::i;7659:166::-;;;;;;;;;;;;;;;;-1:-1:-1;7659:166:0;;;;:::i;12868:204::-;;;;;;;;;;;;;;;;-1:-1:-1;12868:204:0;;;;;;;:::i;7496:155::-;;;;;;;;;;;;;;;;-1:-1:-1;7496:155:0;;;;:::i;6474:60::-;;;;;;;;;;;;;;;;-1:-1:-1;6474:60:0;;;;:::i;13080:154::-;;;;;;;;;;;;;;;;-1:-1:-1;13080:154:0;;:::i;6373:37::-;;;:::i;11855:843::-;;;;;;;;;;;;;;;;-1:-1:-1;11855:843:0;;:::i;12706:154::-;12785:7;12812:40;12846:5;12812:29;12830:10;;12812:13;:17;;:29;;;;:::i;:::-;:33;;:40::i;:::-;12805:47;12706:154;-1:-1:-1;;12706:154:0:o;13520:181::-;13602:7;13629:64;13675:17;13682:9;13675:6;:17::i;:::-;13629:41;6255:4;6312:11;13629:22;:41::i;6061:89::-;6108:42;6061:89;:::o;7833:290::-;6979:13;;-1:-1:-1;;;;;6979:13:0;6965:10;:27;6957:74;;;;-1:-1:-1;;;6957:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7968:34:::1;7144:25;::::0;;;:8:::1;:25;::::0;;;:30;;::::1;::::0;:78:::1;;;7207:15;7178:8;:25;7187:15;7178:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;7144:78;7122:163;;;;-1:-1:-1::0;;;7122:163:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8020:36:::2;8038:17;8020;:36::i;:::-;8114:1;8067:8;8114:1:::0;8076:34:::2;8067:44;;;;;;;;;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;8067:44:0;:48;-1:-1:-1;;7833:290:0:o;6541:52::-;;;;;;;;;;;;;:::o;9224:551::-;9605:100;;;-1:-1:-1;;;9605:100:0;;9637:10;9605:100;;;;9657:4;9605:100;;;;-1:-1:-1;;9605:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9526:7;;;;;;6108:42;;9605:31;;:100;;;;;9526:7;;9605:100;;;;;;;;9526:7;6108:42;9605:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9723:44;9730:9;9741:7;9750:9;9761:5;;9723:6;:44::i;:::-;9716:51;;;;;;9224:551;;;;;;;;;;;;;:::o;6332:34::-;;;;:::o;13242:270::-;13320:7;13340:14;13357:64;13411:9;6108:42;-1:-1:-1;;;;;13357:34:0;;13400:4;13357:49;;;;;;;;;;;;;-1:-1:-1;;;;;13357:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13357:49:0;;:53;:64::i;:::-;13340:81;;13439:65;6108:42;-1:-1:-1;;;;;13465:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13465:38:0;13439:21;:6;6197:4;13439:10;:21::i;:65::-;13432:72;13242:270;-1:-1:-1;;;13242:270:0:o;11378:469::-;11435:22;11470:14;;:::i;:::-;-1:-1:-1;11487:11:0;;;;:6;:11;;;;;;;;;11470:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11470:28:0;;;;;;;;;;;;;;;;;;;;11517:15;:32;;11509:76;;;;;-1:-1:-1;;;11509:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11640:10;;11626:8;;;;-1:-1:-1;;;;;11617:18:0;11640:10;11617:18;;;:8;:18;;;;;;:34;;:22;:34::i;:::-;11605:8;;;;;-1:-1:-1;;;;;11596:18:0;;;;;;;:8;:18;;;;;;;;:55;;;;11679:10;;11707:11;;;:6;:11;;;;;;11700:18;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11700:18:0;;;;;;;;;;;;;;;;;11763:8;;11729:59;;-1:-1:-1;;;11729:59:0;;;;;;;;;;;;;;;;;;;11679:10;;-1:-1:-1;6108:42:0;;11729:33;;:59;;;;;11596:18;;11729:59;;;;;;;;;6108:42;11729:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11830:8:0;;;;11818:10;;11804:35;;;;;;11729:59;11804:35;;;;;;;;-1:-1:-1;;;;;11804:35:0;;;;;;;;;;;;;;11378:469;;;;:::o;8254:272::-;6979:13;;-1:-1:-1;;;;;6979:13:0;6965:10;:27;6957:74;;;;-1:-1:-1;;;6957:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8383:31:::1;7144:25:::0;;;:8:::1;:25;::::0;;;:30;;::::1;::::0;:78:::1;;;7207:15;7178:8;:25;7187:15;7178:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;7144:78;7122:163;;;;-1:-1:-1::0;;;7122:163:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8432:30:::2;8447:14;8432;:30::i;:::-;8517:1;8473:8;8517:1:::0;;8473:41:::2;::::0;6004:50;6048:6;6004:50;:::o;6419:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6419:48:0;;;;;;:::o;8875:341::-;9078:7;9100;9122;9164:44;9171:9;9182:7;9191:9;9202:5;;9164:6;:44::i;:::-;9157:51;;;;;;8875:341;;;;;;;;;:::o;7659:166::-;6979:13;;-1:-1:-1;;;;;6979:13:0;6965:10;:27;6957:74;;;;-1:-1:-1;;;6957:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6048:6:::1;7791:15;:26;7763:8;:25;7772:15;7763:25;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;7763:25:0;:54;-1:-1:-1;7659:166:0:o;12868:204::-;12957:7;12984:80;13034:29;12984:45;13011:17;13018:9;13011:6;:17::i;:::-;12984:22;:9;12998:7;12984:13;:22::i;:::-;:26;;:45::i;7496:155::-;6979:13;;-1:-1:-1;;;;;6979:13:0;6965:10;:27;6957:74;;;;-1:-1:-1;;;6957:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7598:8:0::1;:25;7607:15;7598:25;;;;;;;6474:60:::0;;;;;;;;;;;;;:::o;13080:154::-;13145:7;13172:54;13224:1;13173:45;13187:30;13207:9;13187:19;:30::i;:::-;6197:4;;13173:13;:45::i;6373:37::-;;;-1:-1:-1;;;;;6373:37:0;;:::o;11855:843::-;11917:22;11952:14;;:::i;:::-;-1:-1:-1;11969:11:0;;;;:6;:11;;;;;;;;;11952:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11952:28:0;;;;;;;;;;;;;;;;;;;12008:10;;12037:18;;12029:61;;;;;-1:-1:-1;;;12029:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12126:13;;;;12101:21;;12126:34;;12144:15;12126:17;:34::i;:::-;12101:60;;12191:13;12180:1;:8;;;:24;12172:74;;;;-1:-1:-1;;;12172:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12257:18;12278:51;12293:1;:10;;;12305:13;12320:1;:8;;;12278:14;:51::i;:::-;12361:10;;12257:72;;-1:-1:-1;12347:24:0;;;12340:32;;;;12423:10;;-1:-1:-1;;;;;12402:16:0;;12423:10;12402:16;;;:8;:16;;;;;;:32;;:20;:32::i;:::-;-1:-1:-1;;;;;12383:16:0;;;;;;:8;:16;;;;;:51;12462:10;;:26;;12477:10;12462:14;:26::i;:::-;12506:11;;;;:6;:11;;;;;;;;12499:18;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12499:18:0;;;;;;;;;;;;;;;;;;12528:41;;-1:-1:-1;;;12528:41:0;;;;;;;;;12445:43;;-1:-1:-1;6108:42:0;;12528:29;;:41;;;;;;;;;;;;6108:42;12528:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12580:57:0;;;-1:-1:-1;;;12580:57:0;;-1:-1:-1;;;;;12580:57:0;;;;;;;;;;;;;;6108:42;;12580:33;;:57;;;;;12528:41;;12580:57;;;;;;;-1:-1:-1;6108:42:0;12580:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12653:37:0;;;;;;12580:57;12653:37;;;;;;;-1:-1:-1;;;;;12653:37:0;;;;;;;;;;;11855:843;;;;;;;:::o;3897:457::-;3955:7;4200:6;4196:47;;-1:-1:-1;4230:1:0;4223:8;;4196:47;4267:5;;;4271:1;4267;:5;:1;4291:5;;;;;:10;4283:42;;;;;-1:-1:-1;;;4283:42:0;;;;;;;;;;;;-1:-1:-1;;;4283:42:0;;;;;;;;;;;;;;4362:263;4420:7;4452:1;4448;:5;4440:41;;;;;-1:-1:-1;;;4440:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4492:9;4508:1;4504;:5;;;;;;;4362:263;-1:-1:-1;;;;4362:263:0:o;8131:115::-;8205:13;:33;;-1:-1:-1;;;;;;8205:33:0;-1:-1:-1;;;;;8205:33:0;;;;;;;;;;8131:115::o;9783:1587::-;9969:20;10004:21;10040:10;10098:1;10086:9;:13;10078:56;;;;;-1:-1:-1;;;10078:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10153:26:0;;10174:4;10153:26;;10145:70;;;;;-1:-1:-1;;;10145:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10245:34;10269:9;10245:23;:34::i;:::-;10234:7;:45;;10226:98;;;;-1:-1:-1;;;10226:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10354:10;10337:14;10398:28;:15;10418:7;10398:19;:28::i;:::-;-1:-1:-1;;;;;10456:16:0;;;;;;:8;:16;;;;;;10377:49;;-1:-1:-1;10456:31:0;;10477:9;10456:20;:31::i;:::-;10437:8;:16;10446:6;-1:-1:-1;;;;;10437:16:0;-1:-1:-1;;;;;10437:16:0;;;;;;;;;;;;:50;;;;10532:9;10543:7;10552:9;10563:6;10571:15;10515:72;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10515:72:0;;;;;;;;-1:-1:-1;;;;;10515:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10505:83;;;;;;10500:88;;10638:1;-1:-1:-1;;;;;10609:31:0;:6;:10;10616:2;10609:10;;;;;;;;;;;:17;;;;;;;;;;-1:-1:-1;;;;;10609:17:0;-1:-1:-1;;;;;10609:31:0;;10601:72;;;;;-1:-1:-1;;;10601:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10701:33;10715:9;10726:7;10701:13;:33::i;:::-;10686:48;;10761:30;10778:12;10761:16;:30::i;:::-;10804:71;;;-1:-1:-1;;;10804:71:0;;-1:-1:-1;;;;;10804:71:0;;;;;;10858:4;10804:71;;;;;;;;;;;;10745:46;;-1:-1:-1;6108:42:0;;10804:37;;:71;;;;;;;;;;;;;;;-1:-1:-1;6108:42:0;10804:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10888:54:0;;;-1:-1:-1;;;10888:54:0;;-1:-1:-1;;;;;10888:54:0;;;;;;;;;;;;;;6108:42;;10888:29;;:54;;;;;10804:71;;10888:54;;;;;;;-1:-1:-1;6108:42:0;10888:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10983:13:0;;10953:59;;;-1:-1:-1;;;10953:59:0;;-1:-1:-1;;;;;10983:13:0;;;10953:59;;;;;;;;;;;6108:42;;10953:29;;:59;;;;;10888:54;;10953:59;;;;;;;-1:-1:-1;6108:42:0;10953:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11038:70:0;;;;;;;;;;;10953:59;11038:70;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11038:70:0;;;;;;;;;;;;;;;;;;-1:-1:-1;11025:10:0;;;:6;:10;;;;;;;;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11025:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11125:22;;:20;:22::i;:::-;11121:149;;;11179:9;-1:-1:-1;;;;;11164:38:0;;11203:2;11207:9;11218:10;11230:12;11244:6;11252:5;;11164:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11164:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11121:149:0;11287:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11287:75:0;;;;;;;;;;;;;;;;;9783:1587;;;;;;;;;;;:::o;3608:136::-;3701:5;;;3696:16;;;;3688:48;;;;;-1:-1:-1;;;3688:48:0;;;;;;;;;;;;-1:-1:-1;;;3688:48:0;;;;;;;;;;;;;;3752:137;3845:5;;;3840:16;;;;3832:49;;;;;-1:-1:-1;;;3832:49:0;;;;;;;;;;;;-1:-1:-1;;;3832:49:0;;;;;;;;;;;;;;8534:333;8651:4;8633:14;:22;;8602:93;;;;-1:-1:-1;;;8602:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8777:4;8759:14;:22;;8751:70;;;;-1:-1:-1;;;8751:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8832:10;:27;8534:333::o;13709:219::-;13850:7;13877:43;13909:10;13877:27;:7;13889:14;13877:11;:27::i;:43::-;13870:50;13709:219;-1:-1:-1;;;;13709:219:0:o;5242:444::-;5622:20;5670:8;;;5242:444::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://6dc5d6153199f30c9e7dfd6cff75014faddcff6959bde4c24a51e128a2010df5
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.