Contract 0xA47430eAb0C59bd8Ce8653Cb09459BaA759CEDAe 1

 

Contract Overview

Predix Network: Staking
Balance:
0 Ether

EtherValue:
$0.00

Token:
Txn Hash
Method
Block
From
To
Value
0x9841324d9da9d5dc12b99528f75411addff826509522fab5bfbd595cffaae1c0Stop_stake143167732022-03-03 22:41:20160 days 16 hrs ago0xd7a98d34cd49dd203cac9752ea400ee309a5f602 IN  Predix Network: Staking0 Ether0.‍00371322 45.‍61592914
0x9a61c645518152ddb9ae291dfe24aa1fd13d30f0d9476a463828160cc389d055Stop_stake140241602022-01-17 16:40:46205 days 22 hrs ago0x08f8f2e7d15b821cf2a3bb6824279d473dd7508b IN  Predix Network: Staking0 Ether0.‍00644975 102.‍74723199
0xb83cfbe48e3dcb9c400963f0ff65ca77b82071ec2d4956c0fbe334c0899a540eStop_stake132233612021-09-14 10:43:54331 days 4 hrs ago0x0734c876c0923eb8356baaf51e5f71229b7d2bb5 IN  Predix Network: Staking0 Ether0.‍00307174 49.‍22439188
0x706b641f5d57f8d584ee036feb4bcd9f81cd06708949ce75e3b335eb96066d02Stop_stake131368322021-09-01 1:31:09344 days 13 hrs ago0xf8ba44c82a608df0678df28ae6deb31882947aa0 IN  Predix Network: Staking0 Ether0.‍00586963 99.‍86283455
0x51d1e863c7c9a13579fa7941f1209a1c1f5bc1ff6f488f87ebe50179daf6bc4eStop_stake130872712021-08-24 9:44:04352 days 5 hrs ago0x8d92888660a6eafe0e3e7690a08373b2414d7eb9 IN  Predix Network: Staking0 Ether0.‍0034462 43.‍46820525
0xef7803107fa30fe2cb6cc7404306105693f95ad730e36549433feec0db893177Stop_stake130043032021-08-11 13:57:21365 days 55 mins ago0xf72051de82ae499e23f3895ff58e440a9c190ae3 IN  Predix Network: Staking0 Ether0.‍0059294275
0x6f51230bbe1ed11a841562cf3994aee46f19aca16444f212f93b9e1ce89cdd51Stop_stake128800262021-07-23 2:40:13384 days 12 hrs ago0x806b0ef98fac3d4f7fc15fca556032c529e2d230 IN  Predix Network: Staking0 Ether0.‍0008499222
0xaade5de0d562a77121bd895796cdae574401fe7f9c4b917bced84dea8b107dceStop_stake128070532021-07-11 16:19:42395 days 22 hrs ago0x2117c37a65ad3c0489682386f7d81d4c6d08b3c8 IN  Predix Network: Staking0 Ether0.‍0007360718
0xbb4b87debcb1f6ec16063dbd1dd3997b5f0909c1f2679088f6b3d95f2dc53424Stop_stake126780322021-06-21 14:02:15416 days 51 mins ago0x9fb470ae1278be58fe7511f465812d44696f98f1 IN  Predix Network: Staking0 Ether0.‍003546661
0x622c43afea81ff3b13db12872a0027da513e4339da21a32d98a4632b4e25e19fStop_stake126342012021-06-14 18:34:29422 days 20 hrs agoENS Name pstevep.eth IN  Predix Network: Staking0 Ether0.‍000762919
0x1fdac3e7aaeccc1361409aae9429cfefa677637cec6a76a1bdcacb05d4b775c9Stop_stake124877232021-05-23 1:45:14445 days 13 hrs agoENS Name jimmythommes.eth IN  Predix Network: Staking0 Ether0.‍0013445833
0x6c61c7346daa230d31e8086e648490dc70159ebb3e5c7892d80df5235b8a5446Stop_stake124733592021-05-20 20:11:22447 days 18 hrs ago0x021077ba2f976bba6e646982185f4cb98c614871 IN  Predix Network: Staking0 Ether0.‍0034205688
0x634a35ff857ddbc85f6ec9b23eb1ef37611955386223bb41556da57bd4009c2cStop_stake123467022021-05-01 6:33:08467 days 8 hrs ago0x522587fc081224fac891e61e45a0187bf49f2edf IN  Predix Network: Staking0 Ether0.‍0013693834
0x50dd8ceda6ce90759bac375919b664ca84fe6b2f5623bb1525f9382e3a7b5557Stop_stake121530732021-04-01 10:27:23497 days 4 hrs ago0xdb5a0bee13ed43d2af4f8c9bc06e5133d3201f59 IN  Predix Network: Staking0 Ether0.‍00381727165
0x675caf6794db5017a9e2eeeb2c287571ae08ec6b3ef26414a9bd0ff28603dc26Stop_stake121530732021-04-01 10:27:23497 days 4 hrs ago0xdb5a0bee13ed43d2af4f8c9bc06e5133d3201f59 IN  Predix Network: Staking0 Ether0.‍00340084147.‍00000134
0xcf0619ba67bf15de8cf0a25d825c51d413e5b6d1caf346ff155c3ddafc5d41baStop_stake121530732021-04-01 10:27:23497 days 4 hrs ago0xdb5a0bee13ed43d2af4f8c9bc06e5133d3201f59 IN  Predix Network: Staking0 Ether0.‍00568316147
0x6a4144df0739d5993f3340b6eb6682ecd48d96da04789bf2bec134845c5920cdStop_stake120517112021-03-16 19:59:48512 days 18 hrs ago0x021077ba2f976bba6e646982185f4cb98c614871 IN  Predix Network: Staking0 Ether0.‍00591651153
0xfa06d219e41c85a7e2fe8811bae4a08735dbf6dadaeea8dc390e15f5d7433a14Stop_stake118881022021-02-19 15:14:47537 days 23 hrs agoENS Name gmi1.eth IN  Predix Network: Staking0 Ether0.‍01016811266
0x35a3add74d7372550b3bedb8bc4a9988ab04f75d74ca71fa3b47c18b8c6ab8d1Stop_stake118756302021-02-17 17:06:51539 days 21 hrs ago0x82806b83297ddfe9ebb10e7e5eef4520c0661144 IN  Predix Network: Staking0 Ether0.‍00400235173
0x1052d16cdfa5873753a14bae6a07631f8a4ce043f16f390a120e72f2509c386cStop_stake118756302021-02-17 17:06:51539 days 21 hrs ago0x82806b83297ddfe9ebb10e7e5eef4520c0661144 IN  Predix Network: Staking0 Ether0.‍00668787172
0x502ae661b5d527b38b74ee2df30053761d537c8b5cab124f0b10af001a280ce4Stop_stake118667042021-02-16 8:22:11541 days 6 hrs ago0xf4a53b6bb9e4ec51e7831e0d7a06d5d404391824 IN  Predix Network: Staking0 Ether0.‍00424308111
0xc0b9625bce008ce09b8005674ee2123605a41aa2f40d7eec98fcf74728f870beStop_stake118525972021-02-14 4:17:33543 days 10 hrs ago0x3f9438a92510778beaf2a93909a309753a8d9cc3 IN  Predix Network: Staking0 Ether0.‍00599632160
0x05ce534b54349df35b22e3127e5f728d5410685a6a7677ef310ec0598eeb2038Stop_stake117835952021-02-03 13:33:05554 days 1 hr ago0xe9638e14ea9ae15d65e1a6e08254901e31e5f6d9 IN  Predix Network: Staking0 Ether0.‍00537943141
0x1bb5188ac85fff12aa047b15ca18718fd9725c81122088c78d39da453aa32631Stop_stake117435362021-01-28 9:36:48560 days 5 hrs ago0x887ca19b435f17a4f635bcee3a0b7ef73559bf68 IN  Predix Network: Staking0 Ether0.‍0019264251
0xce6775c1041b9f66afab7e29cb89a72b3c6b95283ea84ce66d280f78b990e2d2Stop_stake117261602021-01-25 17:13:58562 days 21 hrs ago0x4b58ad6d97d795e58cda46b655e506e2ac62e56f IN  Predix Network: Staking0 Ether0.‍0050485895
[ 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.

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.