Contract 0x3f52cb880b534d57f3c925f2bbb6b2750e2f415a

 
Ad
Crypto.com
Txn Hash Method
Block
From
To
Value
0x9c92bdb1b30e4838cb6ab7c244f715250defa643d7264be6c9fd70b68ca5e1f8Withdraw122216382021-04-11 23:10:1726 days 15 hrs ago0xef1899d129f2ddf103cd94475dfd87a1d433f284 IN  0x3f52cb880b534d57f3c925f2bbb6b2750e2f415a0 Ether0.0031213962
0x50aac9a1e33fdf4a10ea028486045698d3f9778726ee0f1dc3081ef24b8eaa9cWithdraw121921422021-04-07 10:34:3231 days 3 hrs ago0xb00b416186199cc607013f94a8ffc1503460c44b IN  0x3f52cb880b534d57f3c925f2bbb6b2750e2f415a0 Ether0.0060414120
0x3aa147199816bb7d0293140bfc21b4fef09a4adc196de681633599c0d22f61f5Withdraw121751872021-04-04 19:55:4433 days 18 hrs ago0xeb124cf478e4146a9cedeffdf8088cd90271010d IN  0x3f52cb880b534d57f3c925f2bbb6b2750e2f415a0 Ether0.0030396786
0xc460ae466574926f31c0043822a31aa6a37eabf41a22cf023519889ae885de11Withdraw121625352021-04-02 21:23:1535 days 17 hrs ago0xc0c07e9dde189ea41c49717edbe8ecfbbb821fe3 IN  0x3f52cb880b534d57f3c925f2bbb6b2750e2f415a0 Ether0.00530175150
0x3a9625ba244cddbea89c735004253eae17a65b3a62fa7111425a0dd06dfa38c7Withdraw121448942021-03-31 4:10:1838 days 10 hrs ago0x393a5853e9db00312c4d4d5a621ff0c84f7abe21 IN  0x3f52cb880b534d57f3c925f2bbb6b2750e2f415a0 Ether0.004347435051123.000001459
0x647b8015a2e4f60a6f444c55dbef50c3073af867e3cc3915530ff17d09927c54Withdraw121338322021-03-29 11:20:2040 days 3 hrs ago0xb4ca1c77518665e56b2c0c1ae7f1c56b9fc7db0a IN  0x3f52cb880b534d57f3c925f2bbb6b2750e2f415a0 Ether0.0031810590
0x1a61d97729412feaf23168f5fa4f32849005f4af7812e1707d0b38368100c503Init101985442020-06-04 9:48:06338 days 4 hrs ago0x640a8bac54f5e32414d4d60a98f01434ece2cf33 IN  0x3f52cb880b534d57f3c925f2bbb6b2750e2f415a0 Ether0.00406353636
0x5023c266c3aa827f0bc3795c3647f6a7de65bc5538a0c174988363882fabed260x60806040101985282020-06-04 9:43:36338 days 4 hrs ago0x640a8bac54f5e32414d4d60a98f01434ece2cf33 IN  Contract Creation0 Ether0.03393193234
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenDepositLocker

Compiler Version
v0.5.8+commit.23d335f2

Optimization Enabled:
Yes with 100 runs

Other Settings:
petersburg EvmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2020-06-04
*/

pragma solidity ^0.5.8;


/*
 * Ownable
 *
 * Base contract with an owner.
 * Provides onlyOwner modifier, which prevents function from running if it is called by anyone other than the owner.
 */

contract Ownable {
    address public owner;

    constructor() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(
            msg.sender == owner,
            "The function can only be called by the owner"
        );
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        if (newOwner != address(0)) {
            owner = newOwner;
        }
    }
}


/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

    function burn(uint256 amount) external;

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

/*
The MIT License (MIT)

Copyright (c) 2016-2019 zOS Global Limited

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/


contract DepositLockerInterface {
    function slash(address _depositorToBeSlashed) public;
}


/*
  The DepositLocker contract locks the deposits for all of the winning
  participants of the auction.

  When the auction is running, the auction contract registers participants that
  have successfully bid with the registerDepositor function. The DepositLocker
  contracts keeps track of the number of participants and also keeps track if a
  participant address can withdraw the deposit.

  All of the participants have to pay the same amount when the auction ends.
  The auction contract will deposit the sum of all amounts with a call to
  deposit.

  This is the base contract, how exactly the deposit can be received, withdrawn and burned
  is left to be implemented in the derived contracts.
*/

contract BaseDepositLocker is DepositLockerInterface, Ownable {
    bool public initialized = false;
    bool public deposited = false;

    /* We maintain two special addresses:
       - the slasher, that is allowed to call the slash function
       - the depositorsProxy that registers depositors and deposits a value for
         all of the registered depositors with the deposit function. In our case
         this will be the auction contract.
    */

    address public slasher;
    address public depositorsProxy;
    uint public releaseTimestamp;

    mapping(address => bool) public canWithdraw;
    uint numberOfDepositors = 0;
    uint valuePerDepositor;

    event DepositorRegistered(
        address depositorAddress,
        uint numberOfDepositors
    );
    event Deposit(
        uint totalValue,
        uint valuePerDepositor,
        uint numberOfDepositors
    );
    event Withdraw(address withdrawer, uint value);
    event Slash(address slashedDepositor, uint slashedValue);

    modifier isInitialised() {
        require(initialized, "The contract was not initialized.");
        _;
    }

    modifier isDeposited() {
        require(deposited, "no deposits yet");
        _;
    }

    modifier isNotDeposited() {
        require(!deposited, "already deposited");
        _;
    }

    modifier onlyDepositorsProxy() {
        require(
            msg.sender == depositorsProxy,
            "Only the depositorsProxy can call this function."
        );
        _;
    }

    function() external {}

    function registerDepositor(address _depositor)
        public
        isInitialised
        isNotDeposited
        onlyDepositorsProxy
    {
        require(
            canWithdraw[_depositor] == false,
            "can only register Depositor once"
        );
        canWithdraw[_depositor] = true;
        numberOfDepositors += 1;
        emit DepositorRegistered(_depositor, numberOfDepositors);
    }

    function deposit(uint _valuePerDepositor)
        public
        payable
        isInitialised
        isNotDeposited
        onlyDepositorsProxy
    {
        require(numberOfDepositors > 0, "no depositors");
        require(_valuePerDepositor > 0, "_valuePerDepositor must be positive");

        uint depositAmount = numberOfDepositors * _valuePerDepositor;
        require(
            _valuePerDepositor == depositAmount / numberOfDepositors,
            "Overflow in depositAmount calculation"
        );

        valuePerDepositor = _valuePerDepositor;
        deposited = true;
        _receive(depositAmount);
        emit Deposit(depositAmount, valuePerDepositor, numberOfDepositors);
    }

    function withdraw() public isInitialised isDeposited {
        require(
            now >= releaseTimestamp,
            "The deposit cannot be withdrawn yet."
        );
        require(canWithdraw[msg.sender], "cannot withdraw from sender");

        canWithdraw[msg.sender] = false;
        _transfer(msg.sender, valuePerDepositor);
        emit Withdraw(msg.sender, valuePerDepositor);
    }

    function slash(address _depositorToBeSlashed)
        public
        isInitialised
        isDeposited
    {
        require(
            msg.sender == slasher,
            "Only the slasher can call this function."
        );
        require(canWithdraw[_depositorToBeSlashed], "cannot slash address");
        canWithdraw[_depositorToBeSlashed] = false;
        _burn(valuePerDepositor);
        emit Slash(_depositorToBeSlashed, valuePerDepositor);
    }

    function _init(
        uint _releaseTimestamp,
        address _slasher,
        address _depositorsProxy
    ) internal {
        require(!initialized, "The contract is already initialised.");
        require(
            _releaseTimestamp > now,
            "The release timestamp must be in the future"
        );

        releaseTimestamp = _releaseTimestamp;
        slasher = _slasher;
        depositorsProxy = _depositorsProxy;
        initialized = true;
        owner = address(0);
    }

    /// Hooks for derived contracts to receive, transfer and burn the deposits
    function _receive(uint amount) internal;

    function _transfer(address payable recipient, uint amount) internal;

    function _burn(uint amount) internal;
}


/*
  The TokenDepositLocker contract locks ERC20 token deposits

  For more information see DepositLocker.sol
*/

contract TokenDepositLocker is BaseDepositLocker {
    IERC20 public token;

    function init(
        uint _releaseTimestamp,
        address _slasher,
        address _depositorsProxy,
        IERC20 _token
    ) external onlyOwner {
        BaseDepositLocker._init(_releaseTimestamp, _slasher, _depositorsProxy);
        require(
            address(_token) != address(0),
            "Token contract can not be on the zero address!"
        );
        token = _token;
    }

    function _receive(uint amount) internal {
        require(msg.value == 0, "Token locker contract does not accept ETH");
        // to receive erc20 tokens, we have to pull them
        token.transferFrom(msg.sender, address(this), amount);
    }

    function _transfer(address payable recipient, uint amount) internal {
        token.transfer(recipient, amount);
    }

    function _burn(uint amount) internal {
        token.burn(amount);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"releaseTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"canWithdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_depositor","type":"address"}],"name":"registerDepositor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"slasher","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_valuePerDepositor","type":"uint256"}],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_depositorToBeSlashed","type":"address"}],"name":"slash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_releaseTimestamp","type":"uint256"},{"name":"_slasher","type":"address"},{"name":"_depositorsProxy","type":"address"},{"name":"_token","type":"address"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"depositorsProxy","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"deposited","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"depositorAddress","type":"address"},{"indexed":false,"name":"numberOfDepositors","type":"uint256"}],"name":"DepositorRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"totalValue","type":"uint256"},{"indexed":false,"name":"valuePerDepositor","type":"uint256"},{"indexed":false,"name":"numberOfDepositors","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"withdrawer","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"slashedDepositor","type":"address"},{"indexed":false,"name":"slashedValue","type":"uint256"}],"name":"Slash","type":"event"}]

60806040526000805460058290556001600160b01b031916331790556110b18061002a6000396000f3fe6080604052600436106100bd5760003560e01c8063b6b55f251161006f578063b6b55f25146101df578063c96be4cb146101fc578063dc890da91461022f578063e8823af11461027a578063eef49ee31461028f578063f2fde38b146102a4578063fc0c546a146102d7576100bd565b80630a3f013f146100cc578063158ef93e146100f357806319262d301461011c57806338c56be11461014f5780633ccfd60b146101845780638da5cb5b14610199578063b1344271146101ca575b3480156100c957600080fd5b50005b3480156100d857600080fd5b506100e16102ec565b60408051918252519081900360200190f35b3480156100ff57600080fd5b506101086102f2565b604080519115158252519081900360200190f35b34801561012857600080fd5b506101086004803603602081101561013f57600080fd5b50356001600160a01b0316610302565b34801561015b57600080fd5b506101826004803603602081101561017257600080fd5b50356001600160a01b0316610317565b005b34801561019057600080fd5b506101826104e5565b3480156101a557600080fd5b506101ae610695565b604080516001600160a01b039092168252519081900360200190f35b3480156101d657600080fd5b506101ae6106a4565b610182600480360360208110156101f557600080fd5b50356106b3565b34801561020857600080fd5b506101826004803603602081101561021f57600080fd5b50356001600160a01b03166108f1565b34801561023b57600080fd5b506101826004803603608081101561025257600080fd5b508035906001600160a01b036020820135811691604081013582169160609091013516610ac4565b34801561028657600080fd5b506101ae610b88565b34801561029b57600080fd5b50610108610b97565b3480156102b057600080fd5b50610182600480360360208110156102c757600080fd5b50356001600160a01b0316610ba7565b3480156102e357600080fd5b506101ae610c21565b60035481565b600054600160a01b900460ff1681565b60046020526000908152604090205460ff1681565b600054600160a01b900460ff1661036257604051600160e51b62461bcd028152600401808060200182810382526021815260200180610ecf6021913960400191505060405180910390fd5b600054600160a81b900460ff16156103bb5760408051600160e51b62461bcd02815260206004820152601160248201526001607a1b70185b1c9958591e4819195c1bdcda5d195902604482015290519081900360640190fd5b6002546001600160a01b0316331461040757604051600160e51b62461bcd028152600401808060200182810382526030815260200180610f696030913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205460ff16156104785760408051600160e51b62461bcd02815260206004820181905260248201527f63616e206f6e6c79207265676973746572204465706f7369746f72206f6e6365604482015290519081900360640190fd5b6001600160a01b038116600081815260046020908152604091829020805460ff19166001908117909155600580549091019081905582519384529083015280517f2f2ecba9464c960a79dc691961ff2965ab0b5d7a25b776931686d50094c4d1b89281900390910190a150565b600054600160a01b900460ff1661053057604051600160e51b62461bcd028152600401808060200182810382526021815260200180610ecf6021913960400191505060405180910390fd5b600054600160a81b900460ff166105865760408051600160e51b62461bcd02815260206004820152600f60248201526001608a1b6e1b9bc819195c1bdcda5d1cc81e595d02604482015290519081900360640190fd5b6003544210156105ca57604051600160e51b62461bcd028152600401808060200182810382526024815260200180610feb6024913960400191505060405180910390fd5b3360009081526004602052604090205460ff166106315760408051600160e51b62461bcd02815260206004820152601b60248201527f63616e6e6f742077697468647261772066726f6d2073656e6465720000000000604482015290519081900360640190fd5b336000818152600460205260409020805460ff191690556006546106559190610c30565b60065460408051338152602081019290925280517f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649281900390910190a1565b6000546001600160a01b031681565b6001546001600160a01b031681565b600054600160a01b900460ff166106fe57604051600160e51b62461bcd028152600401808060200182810382526021815260200180610ecf6021913960400191505060405180910390fd5b600054600160a81b900460ff16156107575760408051600160e51b62461bcd02815260206004820152601160248201526001607a1b70185b1c9958591e4819195c1bdcda5d195902604482015290519081900360640190fd5b6002546001600160a01b031633146107a357604051600160e51b62461bcd028152600401808060200182810382526030815260200180610f696030913960400191505060405180910390fd5b6000600554116107f05760408051600160e51b62461bcd02815260206004820152600d6024820152600160981b6c6e6f206465706f7369746f727302604482015290519081900360640190fd5b6000811161083257604051600160e51b62461bcd02815260040180806020018281038252602381526020018061100f6023913960400191505060405180910390fd5b60055480820290818161084157fe5b04821461088257604051600160e51b62461bcd028152600401808060200182810382526025815260200180610f446025913960400191505060405180910390fd5b600682905560008054600160a81b60ff021916600160a81b1790556108a681610cb9565b60065460055460408051848152602081019390935282810191909152517f33da4f9b82b3e18a281ca2cabbe2f076925692abb593b7ea3f850009e8ec97709181900360600190a15050565b600054600160a01b900460ff1661093c57604051600160e51b62461bcd028152600401808060200182810382526021815260200180610ecf6021913960400191505060405180910390fd5b600054600160a81b900460ff166109925760408051600160e51b62461bcd02815260206004820152600f60248201526001608a1b6e1b9bc819195c1bdcda5d1cc81e595d02604482015290519081900360640190fd5b6001546001600160a01b031633146109de57604051600160e51b62461bcd028152600401808060200182810382526028815260200180610ef06028913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205460ff16610a4e5760408051600160e51b62461bcd02815260206004820152601460248201527f63616e6e6f7420736c6173682061646472657373000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600460205260409020805460ff19169055600654610a7a90610d85565b600654604080516001600160a01b0384168152602081019290925280517fa69f22d963cb7981f842db8c1aafcc93d915ba2a95dcf26dcc333a9c2a09be269281900390910190a150565b6000546001600160a01b03163314610b1057604051600160e51b62461bcd02815260040180806020018281038252602c815260200180610f18602c913960400191505060405180910390fd5b610b1b848484610df0565b6001600160a01b038116610b6357604051600160e51b62461bcd02815260040180806020018281038252602e815260200180610fbd602e913960400191505060405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055505050565b6002546001600160a01b031681565b600054600160a81b900460ff1681565b6000546001600160a01b03163314610bf357604051600160e51b62461bcd02815260040180806020018281038252602c815260200180610f18602c913960400191505060405180910390fd5b6001600160a01b03811615610c1e57600080546001600160a01b0319166001600160a01b0383161790555b50565b6007546001600160a01b031681565b60075460408051600160e01b63a9059cbb0281526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610c8957600080fd5b505af1158015610c9d573d6000803e3d6000fd5b505050506040513d6020811015610cb357600080fd5b50505050565b3415610cf957604051600160e51b62461bcd02815260040180806020018281038252602981526020018061105d6029913960400191505060405180910390fd5b60075460408051600160e01b6323b872dd0281523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610d5657600080fd5b505af1158015610d6a573d6000803e3d6000fd5b505050506040513d6020811015610d8057600080fd5b505050565b60075460408051600160e31b630852cd8d0281526004810184905290516001600160a01b03909216916342966c689160248082019260009290919082900301818387803b158015610dd557600080fd5b505af1158015610de9573d6000803e3d6000fd5b5050505050565b600054600160a01b900460ff1615610e3c57604051600160e51b62461bcd028152600401808060200182810382526024815260200180610f996024913960400191505060405180910390fd5b428311610e7d57604051600160e51b62461bcd02815260040180806020018281038252602b815260200180611032602b913960400191505060405180910390fd5b600392909255600180546001600160a01b039283166001600160a01b031991821617909155600280549390921692811692909217905560008054600160a01b60ff021916600160a01b17909116905556fe54686520636f6e747261637420776173206e6f7420696e697469616c697a65642e4f6e6c792074686520736c61736865722063616e2063616c6c20746869732066756e6374696f6e2e5468652066756e6374696f6e2063616e206f6e6c792062652063616c6c656420627920746865206f776e65724f766572666c6f7720696e206465706f736974416d6f756e742063616c63756c6174696f6e4f6e6c7920746865206465706f7369746f727350726f78792063616e2063616c6c20746869732066756e6374696f6e2e54686520636f6e747261637420697320616c726561647920696e697469616c697365642e546f6b656e20636f6e74726163742063616e206e6f74206265206f6e20746865207a65726f206164647265737321546865206465706f7369742063616e6e6f742062652077697468647261776e207965742e5f76616c75655065724465706f7369746f72206d75737420626520706f7369746976655468652072656c656173652074696d657374616d70206d75737420626520696e2074686520667574757265546f6b656e206c6f636b657220636f6e747261637420646f6573206e6f742061636365707420455448a165627a7a723058208ac17105304992be2fa504ab703feffd55985429cb127e4e42ae567557584ff00029

Deployed ByteCode Sourcemap

10087:963:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10087:963:0;;6099:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6099:28:0;;;:::i;:::-;;;;;;;;;;;;;;;;5630:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5630:31:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;6136:43;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6136:43:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6136:43:0;-1:-1:-1;;;;;6136:43:0;;:::i;7149:419::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7149:419:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7149:419:0;-1:-1:-1;;;;;7149:419:0;;:::i;:::-;;8304:405;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8304:405:0;;;:::i;231:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;231:20:0;;;:::i;:::-;;;;-1:-1:-1;;;;;231:20:0;;;;;;;;;;;;;;6033:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6033:22:0;;;:::i;7576:720::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7576:720:0;;:::i;8717:470::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8717:470:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8717:470:0;-1:-1:-1;;;;;8717:470:0;;:::i;10171:409::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10171:409:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;10171:409:0;;;-1:-1:-1;;;;;10171:409:0;;;;;;;;;;;;;;;;;;;;;:::i;6062:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6062:30:0;;;:::i;5668:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5668:29:0;;;:::i;499:151::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;499:151:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;499:151:0;-1:-1:-1;;;;;499:151:0;;:::i;10143:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10143:19:0;;;:::i;6099:28::-;;;;:::o;5630:31::-;;;-1:-1:-1;;;5630:31:0;;;;;:::o;6136:43::-;;;;;;;;;;;;;;;:::o;7149:419::-;6641:11;;-1:-1:-1;;;6641:11:0;;;;6633:57;;;;-1:-1:-1;;;;;6633:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6863:9;;-1:-1:-1;;;6863:9:0;;;;6862:10;6854:40;;;;;-1:-1:-1;;;;;6854:40:0;;;;;;;;;;;;-1:-1:-1;;;;;6854:40:0;;;;;;;;;;;;;;;7000:15;;-1:-1:-1;;;;;7000:15:0;6986:10;:29;6964:127;;;;-1:-1:-1;;;;;6964:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7326:23:0;;;;;;:11;:23;;;;;;;;:32;7304:114;;;;;-1:-1:-1;;;;;7304:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7429:23:0;;;;;;:11;:23;;;;;;;;;:30;;-1:-1:-1;;7429:30:0;7455:4;7429:30;;;;;;7470:18;:23;;;;;;;;;7509:51;;;;;;;;;;;;;;;;;;;;;7149:419;:::o;8304:405::-;6641:11;;-1:-1:-1;;;6641:11:0;;;;6633:57;;;;-1:-1:-1;;;;;6633:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6760:9;;-1:-1:-1;;;6760:9:0;;;;6752:37;;;;;-1:-1:-1;;;;;6752:37:0;;;;;;;;;;;;-1:-1:-1;;;;;6752:37:0;;;;;;;;;;;;;;;8397:16;;8390:3;:23;;8368:109;;;;-1:-1:-1;;;;;8368:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8508:10;8496:23;;;;:11;:23;;;;;;;;8488:63;;;;;-1:-1:-1;;;;;8488:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8576:10;8590:5;8564:23;;;:11;:23;;;;;:31;;-1:-1:-1;;8564:31:0;;;8628:17;;8606:40;;8576:10;8606:9;:40::i;:::-;8683:17;;8662:39;;;8671:10;8662:39;;;;;;;;;;;;;;;;;;;;;8304:405::o;231:20::-;;;-1:-1:-1;;;;;231:20:0;;:::o;6033:22::-;;;-1:-1:-1;;;;;6033:22:0;;:::o;7576:720::-;6641:11;;-1:-1:-1;;;6641:11:0;;;;6633:57;;;;-1:-1:-1;;;;;6633:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6863:9;;-1:-1:-1;;;6863:9:0;;;;6862:10;6854:40;;;;;-1:-1:-1;;;;;6854:40:0;;;;;;;;;;;;-1:-1:-1;;;;;6854:40:0;;;;;;;;;;;;;;;7000:15;;-1:-1:-1;;;;;7000:15:0;6986:10;:29;6964:127;;;;-1:-1:-1;;;;;6964:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7772:1;7751:18;;:22;7743:48;;;;;-1:-1:-1;;;;;7743:48:0;;;;;;;;;;;;-1:-1:-1;;;;;7743:48:0;;;;;;;;;;;;;;;7831:1;7810:18;:22;7802:70;;;;-1:-1:-1;;;;;7802:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7906:18;;:39;;;;;:18;8000:34;;;;;7978:18;:56;7956:143;;;;-1:-1:-1;;;;;7956:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8112:17;:38;;;8161:9;:16;;-1:-1:-1;;;;;;8161:16:0;-1:-1:-1;;;8161:16:0;;;8188:23;8197:13;8188:8;:23::i;:::-;8250:17;;8269:18;;8227:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7102:1;7576:720;:::o;8717:470::-;6641:11;;-1:-1:-1;;;6641:11:0;;;;6633:57;;;;-1:-1:-1;;;;;6633:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6760:9;;-1:-1:-1;;;6760:9:0;;;;6752:37;;;;;-1:-1:-1;;;;;6752:37:0;;;;;;;;;;;;-1:-1:-1;;;;;6752:37:0;;;;;;;;;;;;;;;8875:7;;-1:-1:-1;;;;;8875:7:0;8861:10;:21;8839:111;;;;-1:-1:-1;;;;;8839:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8969:34:0;;;;;;:11;:34;;;;;;;;8961:67;;;;;-1:-1:-1;;;;;8961:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9039:34:0;;9076:5;9039:34;;;:11;:34;;;;;:42;;-1:-1:-1;;9039:42:0;;;9098:17;;9092:24;;:5;:24::i;:::-;9161:17;;9132:47;;;-1:-1:-1;;;;;9132:47:0;;;;;;;;;;;;;;;;;;;;;;;8717:470;:::o;10171:409::-;394:5;;-1:-1:-1;;;;;394:5:0;380:10;:19;358:113;;;;-1:-1:-1;;;;;358:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10341:70;10365:17;10384:8;10394:16;10341:23;:70::i;:::-;-1:-1:-1;;;;;10444:29:0;;10422:125;;;;-1:-1:-1;;;;;10422:125:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10558:5;:14;;-1:-1:-1;;;;;;10558:14:0;-1:-1:-1;;;;;10558:14:0;;;;;;;;;;-1:-1:-1;;;10171:409:0:o;6062:30::-;;;-1:-1:-1;;;;;6062:30:0;;:::o;5668:29::-;;;-1:-1:-1;;;5668:29:0;;;;;:::o;499:151::-;394:5;;-1:-1:-1;;;;;394:5:0;380:10;:19;358:113;;;;-1:-1:-1;;;;;358:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;576:22:0;;;572:71;;615:5;:16;;-1:-1:-1;;;;;;615:16:0;-1:-1:-1;;;;;615:16:0;;;;;572:71;499:151;:::o;10143:19::-;;;-1:-1:-1;;;;;10143:19:0;;:::o;10845:120::-;10924:5;;:33;;;-1:-1:-1;;;;;10924:33:0;;-1:-1:-1;;;;;10924:33:0;;;;;;;;;;;;;;;:5;;;;;:14;;:33;;;;;;;;;;;;;;:5;;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;10924:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10924:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;10845:120:0:o;10588:249::-;10647:9;:14;10639:68;;;;-1:-1:-1;;;;;10639:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10776:5;;:53;;;-1:-1:-1;;;;;10776:53:0;;10795:10;10776:53;;;;10815:4;10776:53;;;;;;;;;;;;-1:-1:-1;;;;;10776:5:0;;;;:18;;:53;;;;;;;;;;;;;;;:5;;:53;;;5:2:-1;;;;30:1;27;20:12;5:2;10776:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10776:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;10588:249:0:o;10973:74::-;11021:5;;:18;;;-1:-1:-1;;;;;11021:18:0;;;;;;;;;;-1:-1:-1;;;;;11021:5:0;;;;:10;;:18;;;;;:5;;:18;;;;;;;;:5;;:18;;;5:2:-1;;;;30:1;27;20:12;5:2;11021:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11021:18:0;;;;10973:74;:::o;9195:514::-;9341:11;;-1:-1:-1;;;9341:11:0;;;;9340:12;9332:61;;;;-1:-1:-1;;;;;9332:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9446:3;9426:17;:23;9404:116;;;;-1:-1:-1;;;;;9404:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9533:16;:36;;;;9580:7;:18;;-1:-1:-1;;;;;9580:18:0;;;-1:-1:-1;;;;;;9580:18:0;;;;;;;-1:-1:-1;9609:34:0;;;;;;;;;;;;;;;9580:7;9654:18;;-1:-1:-1;;;;;;9654:18:0;-1:-1:-1;;;9654:18:0;9683;;;;;9195:514::o

Swarm Source

bzzr://8ac17105304992be2fa504ab703feffd55985429cb127e4e42ae567557584ff0
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.