Contract 0xa47430eab0c59bd8ce8653cb09459baa759cedae

 
Ad
Ad
Txn Hash Method
Block
From
To
Value
0x634a35ff857ddbc85f6ec9b23eb1ef37611955386223bb41556da57bd4009c2cStop_stake123467022021-05-01 6:33:087 days 6 hrs ago0x522587fc081224fac891e61e45a0187bf49f2edf IN  Predix Network: Staking0 Ether0.00136938434
0x50dd8ceda6ce90759bac375919b664ca84fe6b2f5623bb1525f9382e3a7b5557Stop_stake121530732021-04-01 10:27:2337 days 2 hrs ago0xdb5a0bee13ed43d2af4f8c9bc06e5133d3201f59 IN  Predix Network: Staking0 Ether0.003817275165
0x675caf6794db5017a9e2eeeb2c287571ae08ec6b3ef26414a9bd0ff28603dc26Stop_stake121530732021-04-01 10:27:2337 days 2 hrs ago0xdb5a0bee13ed43d2af4f8c9bc06e5133d3201f59 IN  Predix Network: Staking0 Ether0.003400845031147.000001347
0xcf0619ba67bf15de8cf0a25d825c51d413e5b6d1caf346ff155c3ddafc5d41baStop_stake121530732021-04-01 10:27:2337 days 2 hrs ago0xdb5a0bee13ed43d2af4f8c9bc06e5133d3201f59 IN  Predix Network: Staking0 Ether0.005683167147
0x6a4144df0739d5993f3340b6eb6682ecd48d96da04789bf2bec134845c5920cdStop_stake120517112021-03-16 19:59:4852 days 17 hrs ago0x021077ba2f976bba6e646982185f4cb98c614871 IN  Predix Network: Staking0 Ether0.00591651153
0xfa06d219e41c85a7e2fe8811bae4a08735dbf6dadaeea8dc390e15f5d7433a14Stop_stake118881022021-02-19 15:14:4777 days 21 hrs ago0x003000bb2d5221da1bfc8ac32aa8d142d5cc989e IN  Predix Network: Staking0 Ether0.010168116266
0x35a3add74d7372550b3bedb8bc4a9988ab04f75d74ca71fa3b47c18b8c6ab8d1Stop_stake118756302021-02-17 17:06:5179 days 20 hrs ago0x82806b83297ddfe9ebb10e7e5eef4520c0661144 IN  Predix Network: Staking0 Ether0.004002355173
0x1052d16cdfa5873753a14bae6a07631f8a4ce043f16f390a120e72f2509c386cStop_stake118756302021-02-17 17:06:5179 days 20 hrs ago0x82806b83297ddfe9ebb10e7e5eef4520c0661144 IN  Predix Network: Staking0 Ether0.006687876172
0x502ae661b5d527b38b74ee2df30053761d537c8b5cab124f0b10af001a280ce4Stop_stake118667042021-02-16 8:22:1181 days 4 hrs ago0xf4a53b6bb9e4ec51e7831e0d7a06d5d404391824 IN  Predix Network: Staking0 Ether0.004243086111
0xc0b9625bce008ce09b8005674ee2123605a41aa2f40d7eec98fcf74728f870beStop_stake118525972021-02-14 4:17:3383 days 8 hrs ago0x3f9438a92510778beaf2a93909a309753a8d9cc3 IN  Predix Network: Staking0 Ether0.00599632160
0x05ce534b54349df35b22e3127e5f728d5410685a6a7677ef310ec0598eeb2038Stop_stake117835952021-02-03 13:33:0593 days 23 hrs ago0xe9638e14ea9ae15d65e1a6e08254901e31e5f6d9 IN  Predix Network: Staking0 Ether0.005379432141
0x1bb5188ac85fff12aa047b15ca18718fd9725c81122088c78d39da453aa32631Stop_stake117435362021-01-28 9:36:48100 days 3 hrs ago0x887ca19b435f17a4f635bcee3a0b7ef73559bf68 IN  Predix Network: Staking0 Ether0.00192642351
0xce6775c1041b9f66afab7e29cb89a72b3c6b95283ea84ce66d280f78b990e2d2Stop_stake117261602021-01-25 17:13:58102 days 19 hrs ago0x4b58ad6d97d795e58cda46b655e506e2ac62e56f IN  Predix Network: Staking0 Ether0.00504858595
0xbd9a6b79e2c527847f3f6a9f6f8acc1a3a569667066f937457dc3b12f951a091Stop_stake117074142021-01-22 20:20:35105 days 16 hrs ago0x5151e65d3537aef202007dc5f62d3bbdbd261073 IN  Predix Network: Staking0 Ether0.00391185173
0x711bcff9dc9adf0eba52bf2ca3f76c08bcaf459f52df25156fb9b5a5f2b0e104Stop_stake116782242021-01-18 8:40:01110 days 4 hrs ago0xd42d272b1523afd7448086275aa29de130d3acdf IN  Predix Network: Staking0 Ether0.00250334565
0xa1baa6e6bece5d9b08caaa19e6cb830f2de24dacaa45f2f822a42db6f49be27eStop_stake116761372021-01-18 1:01:15110 days 12 hrs ago0x2711069e624dca7a9bfa4b37bc08f07c7f6c0f32 IN  Predix Network: Staking0 Ether0.00201818456
0x865f8b34bdcba63fdbdde2ebdf2e0618ca427034c9d038a8aef3c21ded850ccaStop_stake116722752021-01-17 10:51:03111 days 2 hrs ago0x26139fd1b2665ecefc7100966513886639fb0241 IN  Predix Network: Staking0 Ether0.00196462251
0xee49c143bb5205f3db6a08992ae9a52f5123081a1577243cca9aa3b592713425Stop_stake116543472021-01-14 16:43:42113 days 20 hrs ago0xcafe13e03ebe1e1f8f51c8a575f922b8b2a8d10b IN  Predix Network: Staking0 Ether0.0034661790
0xecd006a67b18a09c7eb6f3b81dc746f84c2edd30f19f07409a117b21c83cffe6Stop_stake116393562021-01-12 9:34:39116 days 3 hrs ago0x021077ba2f976bba6e646982185f4cb98c614871 IN  Predix Network: Staking0 Ether0.002719371
0x92a5dcaf04144de31d6baa23320ad5f35ed72f9ad1667cb812d83df4e9805907Stop_stake116163562021-01-08 20:51:32119 days 16 hrs ago0x089ace88109942261da5bf8d9aee3302a6772416 IN  Predix Network: Staking0 Ether0.00641268120
0xa5a42435e2f40b7e79aa49ec06be392adb4c3bc3de2f8dff8901dcb839a31de1Stop_stake116108412021-01-08 0:48:00120 days 12 hrs ago0x98a0efc622cdc86b38484ce6a6729606d26e500e IN  Predix Network: Staking0 Ether0.0059163111
0x6663bc3b79f608650bd5bbe8aa331829d6146bc99c82ea03aa04451931332dccStop_stake116024212021-01-06 17:33:07121 days 19 hrs ago0x3baa2d77be42755c78bec0389b2d5832a4fc4f80 IN  Predix Network: Staking0 Ether0.00337449505195.000001459
0x4b8e6d2131a4b21088788cfe0b37b18dc779f8ac2c322483accf2c0508b9a551Stop_stake116020832021-01-06 16:16:12121 days 20 hrs ago0x3baa2d77be42755c78bec0389b2d5832a4fc4f80 IN  Predix Network: Staking0 Ether0.00397149372109.08
0xb9e38fd220d8b3281b2d1e31c6fae046cecf9265bb46c4a472aa695223ead0bbStop_stake116020672021-01-06 16:11:53121 days 20 hrs ago0x3baa2d77be42755c78bec0389b2d5832a4fc4f80 IN  Predix Network: Staking0 Ether0.003330000043111.000001459
0x95e945498d700c2d06c2a5581984e9678e7d82ce303248dbb0cfefb36fd08a92Stop_stake115968762021-01-05 21:00:39122 days 16 hrs ago0x95c2a575d427fae0d4ee9eb1915a73c28ac3ac66 IN  Predix Network: Staking0 Ether0.00232275861
[ Download CSV Export 

OVERVIEW

The Predix Network staking contract facilitates a convenient staking interface with PRDX rewards for users to get. Each week, the staking rewards are rewarded to the user.

View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PredixNetworkStaking

Compiler Version
v0.7.1+commit.f4a555be

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 3 of 4: PredixNetworkStaking.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;

import "./SafeMath.sol";
import "./Ownable.sol" ; 

//@title PRDX token contract interface
interface PRDX_token {
    function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);
    function transfer(address _to, uint256 _value) external returns (bool success) ; 
}

//@title PRDX Staking contract
//@author Predix Network Team
contract PredixNetworkStaking is Ownable {
    using SafeMath for uint256 ; 
    
    //time variables
    uint public week = 604800 ; 
    
    //level definitions
    uint public _lvl1 = 50 * 1e18 ;  
    uint public _lvl2 = 500 * 1e18 ;  
    uint public _lvl3 = 5000 * 1e18 ; 
    
    //active staking coins
    uint public coins_staking ; 
    
    //Staking Defintions
    mapping (address => bool) public isStaking ; 
    mapping(address => uint256) public stakingAmount ;
    mapping(address => uint256) public stakingStart ;
    
    //contract addresses
    address public token_addr ; 
    
    PRDX_token token_contract = PRDX_token(token_addr) ;
    
    event staked(address staker, uint256 amount) ;
    event ended_stake(address staker, uint256 reward) ; 
    
    /**
     * @dev Set PRDX Token contract address
     * @param addr Address of PRDX Token contract
     */
    function set_token_address(address addr) public onlyOwner {
        token_addr = addr ; 
        token_contract = PRDX_token(addr) ;
    }
    
    /**
     * @dev Get staking amount of user, hook for other contracts
     * @param staker User address to get staking amount for
     * @return staking_amount Only zero if user is not staking
     */
    function get_staking_amount(address staker) public view returns (uint256 staking_amount) {
        if (isStaking[staker] == false) {
            return 0 ; 
        }
        return stakingAmount[staker] ; 
    }
    
    /**
     * @dev Get user staking status, hook for other contracts
     * @param user User address to get staking status for
     * @return is_staking Is false if user is not staking, true if staking
     */
    function get_is_staking(address user) public view returns (bool is_staking) {
     return isStaking[user] ;    
    }
    
    /**
     * @dev Stake tokens, should be called through main token contract. User must have approved 
     * staking contract, amount must be at least {_lvl1} and cannot be staking already. Extra 
     * check for staking timestamp performed to prevent timestamp errors and futuristic staking
     * @param   staker User address to stake tokens for
     *          amount Amount of tokens to stake
     * @return success Only false if transaction fails
     */
    function stake(address staker, uint256 amount) public payable returns (bool success) {
        require(amount >= _lvl1, "Not enough tokens to start staking") ; 
        require(isStaking[staker] == false, "Already staking") ;
        require(stakingStart[staker] <= block.timestamp, "Error getting staking timestamp") ; 
        require(token_contract.transferFrom(staker, address(this), amount), "Error transacting tokens to contract") ;
        
        isStaking[staker] = true ; 
        stakingAmount[staker] = amount ;  
        stakingStart[staker] = block.timestamp ; 
        coins_staking += amount ; 
        
        emit staked(staker, amount) ; 
        return true ; 
    }
    
    /**
     * @dev Stop staking currently staking tokens. Sender has to be staking
     */
    function stop_stake() public returns (bool success) {
        require(stakingStart[msg.sender] <= block.timestamp, "Staking timestamp error") ; 
        require(isStaking[msg.sender] == true, "User not staking") ; 

        uint256 reward = getStakingReward(msg.sender) + stakingAmount[msg.sender] ; 

        token_contract.transfer(msg.sender, reward) ; 
      
        coins_staking -= stakingAmount[msg.sender] ;
        stakingAmount[msg.sender] = 0 ; 
        isStaking[msg.sender] = false ;
         
        emit ended_stake(msg.sender, reward) ; 
        return true ; 
    }
    
    /**
     * @dev Calculate staking reward
     * @param staker Address to get the staking reward for
     */
    function getStakingReward(address staker) public view returns (uint256 __reward) {
        uint amount = stakingAmount[staker] ; 
        uint age = getCoinAge(staker) ; 
        
        if ((amount >= _lvl1) && (amount < _lvl2)) {
            return calc_lvl1(amount, age) ; 
        }
        
        if ((amount >= _lvl2) && (amount < _lvl3)) {
            return calc_lvl2(amount, age) ; 
        }
        
        if (amount >= _lvl3) {
            return calc_lvl3(amount, age) ;
        }
    }
    
    /**
     * @dev Calculate staking reward for level 1 staker
     * @param   amount Amount of PRDX tokens to calculate staking reward performed
     *          age Age of staked tokens
     */    
    function calc_lvl1(uint amount, uint age) public view returns (uint256 reward) {
        uint256 _weeks = age/week ;
        uint interest = amount ;
        
        for (uint i = 0; i < _weeks; i++) {
            interest += 25 * interest / 10000 ; 
        }
        
        return interest - amount ; 
    }

    /**
     * @dev Calculate staking reward for level 2 staker
     * @param   amount Amount of PRDX tokens to calculate staking reward performed
     *          age Age of staked tokens
     */    
    function calc_lvl2(uint amount, uint age) public view returns (uint256 reward) {
        uint256 _weeks = age/week ;
        uint interest = amount ;
        
        for (uint i = 0; i < _weeks; i++) {
            interest += 50 * interest / 10000 ; 
        }
        
        return interest - amount ; 
    }

    /**
     * @dev Calculate staking reward for level 3 staker
     * @param   amount Amount of PRDX tokens to calculate staking reward performed
     *          age Age of staked tokens
     */    
    function calc_lvl3(uint amount, uint age) public view returns (uint256 reward) {
        uint256 _weeks = age/week ;
        uint interest = amount ;
        
        for (uint i = 0; i < _weeks; i++) {
            interest += 85 * interest / 10000 ; 
        }
        
        return interest - amount ; 
    }
    
    /**
     * @dev Get coin age of staker. Returns zero if user not staking
     * @param staker Address to get the staking age for
     */
    function getCoinAge(address staker) public view returns(uint256 age) {
        if (isStaking[staker] == true){
            return (block.timestamp.sub(stakingStart[staker])) ;
        }
        else {
            return 0 ;
        }
    }
    
    /**
     * @dev Returns total amount of coins actively staking
     */
    function get_total_coins_staking() public view returns (uint256 amount) {
        return coins_staking ; 
    }
}

File 1 of 4: Context.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () { }

    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 2 of 4: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.0;

import "./Context.sol";
/**
 * @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 is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

File 4 of 4: SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, reverts on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b);

    return c;
  }

  /**
  * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b > 0); // Solidity only automatically asserts when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold

    return c;
  }

  /**
  * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b <= a);
    uint256 c = a - b;

    return c;
  }

  /**
  * @dev Adds two numbers, reverts on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a);

    return c;
  }

  /**
  * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
  * reverts when dividing by zero.
  */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"ended_stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"staked","type":"event"},{"inputs":[],"name":"_lvl1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lvl2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lvl3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"age","type":"uint256"}],"name":"calc_lvl1","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"age","type":"uint256"}],"name":"calc_lvl2","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"age","type":"uint256"}],"name":"calc_lvl3","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coins_staking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getCoinAge","outputs":[{"internalType":"uint256","name":"age","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakingReward","outputs":[{"internalType":"uint256","name":"__reward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"get_is_staking","outputs":[{"internalType":"bool","name":"is_staking","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"get_staking_amount","outputs":[{"internalType":"uint256","name":"staking_amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_total_coins_staking","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"set_token_address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stop_stake","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token_addr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"week","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405262093a806001556802b5e3af16b1880000600255681b1ae4d6e2ef50000060035569010f0cf064dd59200000600455600954600a80546001600160a01b0319166001600160a01b0390921691909117905534801561006157600080fd5b50600061006c6100bb565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100bf565b3390565b610e76806100ce6000396000f3fe6080604052600436106101405760003560e01c80638b56b77a116100b6578063b2f54b561161006f578063b2f54b56146103d4578063d201cbe914610404578063de36b1d314610419578063e5db00cd1461044c578063e8f7b1ee1461047c578063f2fde38b146104af57610140565b80638b56b77a146102ea5780638c51ad821461031b5780638da5cb5b146103305780639f68369014610345578063adc9772e14610375578063ade6fa27146103a157610140565b806360ea74ee1161010857806360ea74ee146102125780636aec8ddc146102455780636f49712b1461025a578063715018a61461028d57806378f4d413146102a257806385c3a966146102d557610140565b80633758772f1461014557806342263aa21461016e57806344d998fa146101a35780634995b458146101e85780634b33d8a2146101fd575b600080fd5b34801561015157600080fd5b5061015a6104e2565b604080519115158252519081900360200190f35b34801561017a57600080fd5b506101a16004803603602081101561019157600080fd5b50356001600160a01b03166106b0565b005b3480156101af57600080fd5b506101d6600480360360208110156101c657600080fd5b50356001600160a01b0316610746565b60408051918252519081900360200190f35b3480156101f457600080fd5b506101d66107a0565b34801561020957600080fd5b506101d66107a6565b34801561021e57600080fd5b506101d66004803603602081101561023557600080fd5b50356001600160a01b03166107ac565b34801561025157600080fd5b506101d66107f0565b34801561026657600080fd5b5061015a6004803603602081101561027d57600080fd5b50356001600160a01b03166107f6565b34801561029957600080fd5b506101a161080b565b3480156102ae57600080fd5b506101d6600480360360208110156102c557600080fd5b50356001600160a01b03166108bf565b3480156102e157600080fd5b506101d661094b565b3480156102f657600080fd5b506102ff610951565b604080516001600160a01b039092168252519081900360200190f35b34801561032757600080fd5b506101d6610960565b34801561033c57600080fd5b506102ff610966565b34801561035157600080fd5b506101d66004803603604081101561036857600080fd5b5080359060200135610975565b61015a6004803603604081101561038b57600080fd5b506001600160a01b0381351690602001356109b2565b3480156103ad57600080fd5b506101d6600480360360208110156103c457600080fd5b50356001600160a01b0316610c07565b3480156103e057600080fd5b506101d6600480360360408110156103f757600080fd5b5080359060200135610c19565b34801561041057600080fd5b506101d6610c4a565b34801561042557600080fd5b5061015a6004803603602081101561043c57600080fd5b50356001600160a01b0316610c50565b34801561045857600080fd5b506101d66004803603604081101561046f57600080fd5b5080359060200135610c6e565b34801561048857600080fd5b506101d66004803603602081101561049f57600080fd5b50356001600160a01b0316610c9f565b3480156104bb57600080fd5b506101a1600480360360208110156104d257600080fd5b50356001600160a01b0316610cb1565b33600090815260086020526040812054421015610546576040805162461bcd60e51b815260206004820152601760248201527f5374616b696e672074696d657374616d70206572726f72000000000000000000604482015290519081900360640190fd5b3360009081526006602052604090205460ff1615156001146105a2576040805162461bcd60e51b815260206004820152601060248201526f55736572206e6f74207374616b696e6760801b604482015290519081900360640190fd5b3360008181526007602052604081205490916105bd906108bf565b600a546040805163a9059cbb60e01b8152336004820152939092016024840181905291519193506001600160a01b03169163a9059cbb9160448083019260209291908290030181600087803b15801561061557600080fd5b505af1158015610629573d6000803e3d6000fd5b505050506040513d602081101561063f57600080fd5b50503360008181526007602090815260408083208054600580549190910390558390556006825291829020805460ff191690558151928352820183905280517f2cbfa5770168159acdcefa9c0693136bca666cb3551b141235fdf76bc5cbedc69281900390910190a1600191505090565b6106b8610dbb565b6000546001600160a01b0390811691161461071a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600980546001600160a01b039092166001600160a01b03199283168117909155600a8054909216179055565b6001600160a01b03811660009081526006602052604081205460ff16151560011415610797576001600160a01b038216600090815260086020526040902054610790904290610dbf565b905061079b565b5060005b919050565b60015481565b60055490565b6001600160a01b03811660009081526006602052604081205460ff166107d45750600061079b565b506001600160a01b031660009081526007602052604090205490565b60025481565b60066020526000908152604090205460ff1681565b610813610dbb565b6000546001600160a01b03908116911614610875576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001600160a01b038116600090815260076020526040812054816108e284610746565b905060025482101580156108f7575060035482105b1561090f576109068282610975565b9250505061079b565b6003548210158015610922575060045482105b15610931576109068282610c19565b6004548210610944576109068282610c6e565b5050919050565b60055481565b6009546001600160a01b031681565b60045481565b6000546001600160a01b031690565b600080600154838161098357fe5b0490508360005b828110156109a65761271060198302049091019060010161098a565b50939093039392505050565b60006002548210156109f55760405162461bcd60e51b8152600401808060200182810382526022815260200180610dfb6022913960400191505060405180910390fd5b6001600160a01b03831660009081526006602052604090205460ff1615610a55576040805162461bcd60e51b815260206004820152600f60248201526e416c7265616479207374616b696e6760881b604482015290519081900360640190fd5b6001600160a01b038316600090815260086020526040902054421015610ac2576040805162461bcd60e51b815260206004820152601f60248201527f4572726f722067657474696e67207374616b696e672074696d657374616d7000604482015290519081900360640190fd5b600a54604080516323b872dd60e01b81526001600160a01b03868116600483015230602483015260448201869052915191909216916323b872dd9160648083019260209291908290030181600087803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b505050506040513d6020811015610b4857600080fd5b5051610b855760405162461bcd60e51b8152600401808060200182810382526024815260200180610e1d6024913960400191505060405180910390fd5b6001600160a01b0383166000818152600660209081526040808320805460ff1916600117905560078252808320869055600882529182902042905560058054860190558151928352820184905280517f8f169816223f856d6f6a5945e3f7c520efe6c139d4152b6bb65e454babb2f2cb9281900390910190a150600192915050565b60086020526000908152604090205481565b6000806001548381610c2757fe5b0490508360005b828110156109a657612710603283020490910190600101610c2e565b60035481565b6001600160a01b031660009081526006602052604090205460ff1690565b6000806001548381610c7c57fe5b0490508360005b828110156109a657612710605583020490910190600101610c83565b60076020526000908152604090205481565b610cb9610dbb565b6000546001600160a01b03908116911614610d1b576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116610d605760405162461bcd60e51b8152600401808060200182810382526026815260200180610dd56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082821115610dce57600080fd5b5090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734e6f7420656e6f75676820746f6b656e7320746f207374617274207374616b696e674572726f72207472616e73616374696e6720746f6b656e7320746f20636f6e7472616374a264697066735822122001db17e7ad30019f1fa981621d90b209e3c891fb0067c6ca3ef533954e58ca2b64736f6c63430007010033

Deployed ByteCode Sourcemap

438:6601:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3579:598;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1361:141;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1361:141:2;-1:-1:-1;;;;;1361:141:2;;:::i;:::-;;6587:246;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6587:246:2;-1:-1:-1;;;;;6587:246:2;;:::i;:::-;;;;;;;;;;;;;;;;549:25;;;;;;;;;;;;;:::i;6923:113::-;;;;;;;;;;;;;:::i;1723:217::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1723:217:2;-1:-1:-1;;;;;1723:217:2;;:::i;614:29::-;;;;;;;;;;;;;:::i;833:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;833:42:2;-1:-1:-1;;;;;833:42:2;;:::i;1728:148:1:-;;;;;;;;;;;;;:::i;4305:519:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4305:519:2;-1:-1:-1;;;;;4305:519:2;;:::i;767:25::-;;;;;;;;;;;;;:::i;1027:::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1027:25:2;;;;;;;;;;;;;;693:31;;;;;;;;;;;;;:::i;1086:79:1:-;;;;;;;;;;;;;:::i;5041:321:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5041:321:2;;;;;;;:::i;2771:701::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2771:701:2;;;;;;;;:::i;940:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;940:47:2;-1:-1:-1;;;;;940:47:2;;:::i;5575:321::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5575:321:2;;;;;;;:::i;653:30::-;;;;;;;;;;;;;:::i;2168:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2168:119:2;-1:-1:-1;;;;;2168:119:2;;:::i;6109:321::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6109:321:2;;;;;;;:::i;884:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;884:48:2;-1:-1:-1;;;;;884:48:2;;:::i;2031:244:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2031:244:1;-1:-1:-1;;;;;2031:244:1;;:::i;3579:598:2:-;3663:10;3617:12;3650:24;;;:12;:24;;;;;;3678:15;-1:-1:-1;3650:43:2;3642:79;;;;;-1:-1:-1;;;3642:79:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;3752:10;3742:21;;;;:9;:21;;;;;;;;:29;;:21;:29;3734:58;;;;;-1:-1:-1;;;3734:58:2;;;;;;;;;;;;-1:-1:-1;;;3734:58:2;;;;;;;;;;;;;;;3869:10;3807:14;3855:25;;;:13;:25;;;;;;3807:14;;3824:28;;:16;:28::i;:::-;3895:14;;:43;;;-1:-1:-1;;;3895:43:2;;3919:10;3895:43;;;;3824:56;;;;3895:43;;;;;;;;3824:56;;-1:-1:-1;;;;;;3895:14:2;;:23;;:43;;;;;;;;;;;;;;:14;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3990:10:2;3976:25;;;;:13;3895:43;3976:25;;;;;;;;;3959:13;:42;;;;;;;;4013:29;;;4055:9;:21;;;;;;:29;;-1:-1:-1;;4055:29:2;;;4112:31;;;;;;;;;;;;;;;;;;;;;;4163:4;4156:11;;;3579:598;:::o;1361:141::-;1308:12:1;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:1;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1430:10:2::1;:17:::0;;-1:-1:-1;;;;;1430:17:2;;::::1;-1:-1:-1::0;;;;;;1430:17:2;;::::1;::::0;::::1;::::0;;;1460:14:::1;:33:::0;;;;::::1;;::::0;;1361:141::o;6587:246::-;-1:-1:-1;;;;;6671:17:2;;6643:11;6671:17;;;:9;:17;;;;;;;;:25;;:17;:25;6667:159;;;-1:-1:-1;;;;;6740:20:2;;;;;;:12;:20;;;;;;6720:41;;:15;;:19;:41::i;:::-;6712:50;;;;6667:159;-1:-1:-1;6812:1:2;6667:159;6587:246;;;:::o;549:25::-;;;;:::o;6923:113::-;7013:13;;6923:113;:::o;1723:217::-;-1:-1:-1;;;;;1827:17:2;;1788:22;1827:17;;;:9;:17;;;;;;;;1823:69;;-1:-1:-1;1877:1:2;1870:8;;1823:69;-1:-1:-1;;;;;;1909:21:2;;;;;:13;:21;;;;;;;1723:217::o;614:29::-;;;;:::o;833:42::-;;;;;;;;;;;;;;;:::o;1728:148:1:-;1308:12;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:1;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1835:1:::1;1819:6:::0;;1798:40:::1;::::0;-1:-1:-1;;;;;1819:6:1;;::::1;::::0;1798:40:::1;::::0;1835:1;;1798:40:::1;1866:1;1849:19:::0;;-1:-1:-1;;;;;;1849:19:1::1;::::0;;1728:148::o;4305:519:2:-;-1:-1:-1;;;;;4411:21:2;;4368:16;4411:21;;;:13;:21;;;;;;4368:16;4456:18;4425:6;4456:10;:18::i;:::-;4445:29;;4512:5;;4502:6;:15;;4501:37;;;;;4532:5;;4523:6;:14;4501:37;4497:101;;;4562:22;4572:6;4580:3;4562:9;:22::i;:::-;4555:29;;;;;;4497:101;4633:5;;4623:6;:15;;4622:37;;;;;4653:5;;4644:6;:14;4622:37;4618:101;;;4683:22;4693:6;4701:3;4683:9;:22::i;4618:101::-;4753:5;;4743:6;:15;4739:78;;4782:22;4792:6;4800:3;4782:9;:22::i;4739:78::-;4305:519;;;;;:::o;767:25::-;;;;:::o;1027:::-;;;-1:-1:-1;;;;;1027:25:2;;:::o;693:31::-;;;;:::o;1086:79:1:-;1124:7;1151:6;-1:-1:-1;;;;;1151:6:1;1086:79;:::o;5041:321:2:-;5104:14;5131;5152:4;;5148:3;:8;;;;;;;-1:-1:-1;5184:6:2;5168:13;5212:96;5233:6;5229:1;:10;5212:96;;;5289:5;5273:2;:13;;:21;5261:33;;;;5241:3;;5212:96;;;-1:-1:-1;5335:17:2;;;;;5041:321;-1:-1:-1;;;5041:321:2:o;2771:701::-;2842:12;2885:5;;2875:6;:15;;2867:62;;;;-1:-1:-1;;;2867:62:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2950:17:2;;;;;;:9;:17;;;;;;;;:26;2942:54;;;;;-1:-1:-1;;;2942:54:2;;;;;;;;;;;;-1:-1:-1;;;2942:54:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;3016:20:2;;;;;;:12;:20;;;;;;3040:15;-1:-1:-1;3016:39:2;3008:83;;;;;-1:-1:-1;;;3008:83:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;3112:14;;:58;;;-1:-1:-1;;;3112:58:2;;-1:-1:-1;;;;;3112:58:2;;;;;;;3156:4;3112:58;;;;;;;;;;;;:14;;;;;:27;;:58;;;;;;;;;;;;;;:14;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3112:58:2;3104:107;;;;-1:-1:-1;;;3104:107:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3233:17:2;;;;;;:9;:17;;;;;;;;:24;;-1:-1:-1;;3233:24:2;3253:4;3233:24;;;3270:13;:21;;;;;:30;;;3314:12;:20;;;;;;3337:15;3314:38;;3365:13;:23;;;;;;3416:22;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3458:4:2;2771:701;;;;:::o;940:47::-;;;;;;;;;;;;;:::o;5575:321::-;5638:14;5665;5686:4;;5682:3;:8;;;;;;;-1:-1:-1;5718:6:2;5702:13;5746:96;5767:6;5763:1;:10;5746:96;;;5823:5;5807:2;:13;;:21;5795:33;;;;5775:3;;5746:96;;653:30;;;;:::o;2168:119::-;-1:-1:-1;;;;;2259:15:2;2227;2259;;;:9;:15;;;;;;;;;2168:119::o;6109:321::-;6172:14;6199;6220:4;;6216:3;:8;;;;;;;-1:-1:-1;6252:6:2;6236:13;6280:96;6301:6;6297:1;:10;6280:96;;;6357:5;6341:2;:13;;:21;6329:33;;;;6309:3;;6280:96;;884:48;;;;;;;;;;;;;:::o;2031:244:1:-;1308:12;:10;:12::i;:::-;1298:6;;-1:-1:-1;;;;;1298:6:1;;;:22;;;1290:67;;;;;-1:-1:-1;;;1290:67:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2120:22:1;::::1;2112:73;;;;-1:-1:-1::0;;;2112:73:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2222:6;::::0;;2201:38:::1;::::0;-1:-1:-1;;;;;2201:38:1;;::::1;::::0;2222:6;::::1;::::0;2201:38:::1;::::0;::::1;2250:6;:17:::0;;-1:-1:-1;;;;;;2250:17:1::1;-1:-1:-1::0;;;;;2250:17:1;;;::::1;::::0;;;::::1;::::0;;2031:244::o;785:106:0:-;873:10;785:106;:::o;1149:136:3:-;1207:7;1236:1;1231;:6;;1223:15;;;;;;-1:-1:-1;1257:5:3;;;1149:136::o

Swarm Source

ipfs://01db17e7ad30019f1fa981621d90b209e3c891fb0067c6ca3ef533954e58ca2b
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.