Notice: The OpenEthereum team and core developers are aware of the syncing issues facing the OE client and are working to diagnose and fix. New block data will not be available on Etherscan until a fix is released.

Contract 0xf4662bb1c4831fd411a95b8050b3a5998d8a4a5b

 
Ad
Ad
Txn Hash Method
Block
From
To
Value
0x1dd1ac9461426d491215c9f0f49f60f6638644df8d50e3c41e343c6dc2af1ea3Pending(pending)2021-04-15 15:18:3015 mins ago0x6005b1954de6c418abf892baa5cda64efa0f3378 IN Loopring: Staking Pool0 Ether(Pending)(Pending)
0xbee3679dd656792877b893b5f46e07c6d1dc7699dd5fdff9ba62e491f647b860Pending(pending)2021-04-15 14:50:4443 mins ago0x3ef60ae2ace351dc6058b5b21fb566089d118137 IN Loopring: Staking Pool0 Ether(Pending)(Pending)
0x32394f8ba539a5f9b77a26b3d7611bf77ab3e66586707d52c436e52ea0069867Pending(pending)2021-04-15 14:38:1455 mins ago0xea7f699fa809e8ff30c7348bde2eb3aca5398563 IN Loopring: Staking Pool0 Ether(Pending)(Pending)
0x9b021755c2e8232f5aba5a6d32b098c8e65a7b556a8ca29e9b55f119f3d0f5ffWithdraw122446832021-04-15 12:35:592 hrs 58 mins ago0x9f0e45144739ae836553e66ee625534c38a9f7f2 IN  Loopring: Staking Pool0 Ether0.0030408770
0xe94b25db0ea3f3fd0b67f3075837539ee1e36f43e466e4d682ec7361b493424fWithdraw122436412021-04-15 8:47:426 hrs 46 mins ago0xc6b690aac269703f95c785eb4f52e7daa465967c IN  Loopring: Staking Pool0 Ether0.00420095494
0x5b949a2d0ee1f03da2c46c0e82578827054a3d32c5e41d3cc2a1c418c6cf4db9Withdraw122407412021-04-14 21:54:5217 hrs 39 mins ago0x9fa0aeac7a631ae846ec60993c5beefb643f5a56 IN  Loopring: Staking Pool0 Ether0.00535255797
0x1e983d7921aaa6b44522a51c905d5bc1933875cc14011c04e484eb5fec5fec25Withdraw122403662021-04-14 20:31:1319 hrs 2 mins ago0x6c4ed73364df3e58c7c6e16f0fae7d74a762533a IN  Loopring: Staking Pool0 Ether0.0039043890
0x53e258af66d6ca121d49cf413ad741a36af4ff4e94ac344adc5e9ff780e894f1Withdraw122397392021-04-14 18:09:2821 hrs 24 mins ago0x4834762ccd407c89a145c55755bba1e7ccd8237f IN  Loopring: Staking Pool0 Ether0.00882896160
0xaf6e4352c4bd4188a5e66226b235536559ec6a888293c0758276a795b5e006eeWithdraw122393202021-04-14 16:33:5323 hrs ago0xa4ac2bb3885ff3bf82e99cc2b442a379e3627ef7 IN  Loopring: Staking Pool0 Ether0.00739126170
0xa4cc8edfef841cf348df438e4cc8928137208e0d9a9ab66197eaa3ccdab5bb18Withdraw122393202021-04-14 16:33:5323 hrs ago0xa4ac2bb3885ff3bf82e99cc2b442a379e3627ef7 IN  Loopring: Staking Pool0 Ether0.005056637113
0x86dce1bf70263d9a3dfbadff41c80dad1cabdd039893639da1e7a107f38090cdWithdraw122391492021-04-14 15:54:4823 hrs 39 mins ago0xc1612baffd9ae385b5eaeb7f3e1f1b051c3c4816 IN  Loopring: Staking Pool0 Ether0.00575224104
0xcf340cabd3ac0819b78c1b787dbd0b152bd4ae054630cc2ed2823524ccd11b07Withdraw122391282021-04-14 15:51:0823 hrs 42 mins ago0xf556a0fb18130430c3699182259d15b47e043cd3 IN  Loopring: Staking Pool0 Ether0.007063168128
0xd4fa69043c14a1e9ad1f7ab5795d554f91761c019612fbc86e9d720266cffc83Withdraw122381452021-04-14 12:16:511 day 3 hrs ago0x9c52dc78bd84007bf63987806f0aeeece0ef14a6 IN  Loopring: Staking Pool0 Ether0.0039043890
0xd594fafcc8637b5fafb36d259c8f61e57d6473cb934be5cdf79ce1cd6473bd4aWithdraw122367292021-04-14 6:59:181 day 8 hrs ago0x637a2c20bfcd4d5d832afb053315f791ab998be0 IN  Loopring: Staking Pool0 Ether0.004871319109
0xdcd64626e86311378f7345130318f35fffb2dc2a80c6af3ed3fac27387327ad3Withdraw122362922021-04-14 5:22:421 day 10 hrs ago0xfbcfe4ab8922b7caf23d3e28634c4ac05475502b IN  Loopring: Staking Pool0 Ether0.006125091111
0x71d7c63f564b64d6c7aff8ab37b44cbfdd3321e9f3aef822da975daf5eb8574aWithdraw122305442021-04-13 8:01:302 days 7 hrs ago0x2b9f0a0b3b0a8d7a63450e6cb9232271d0c627f9 IN  Loopring: Staking Pool0 Ether0.00402821373
0x3e718b4e3a8d011184a3d13d0afe9ee0c628f8f651e4cf9c07bc26ded213f0fcWithdraw122304432021-04-13 7:38:432 days 7 hrs ago0x2ac14572bacfd491408306db6c6cf544cbe94687 IN  Loopring: Staking Pool0 Ether0.00342122262
0x5e7f4c7ed1e15fc6259585b35cec1347b3bd1aca89f8eafa9fbe201ad4d04420Claim122286832021-04-13 1:07:182 days 14 hrs ago0x4950719e7dd336eee34016b0baf658a4bd70c090 IN  Loopring: Staking Pool0 Ether0.00348688881
0xdcc7f12cda8eec85182a972623c0a421783e5dd03dfa7700e65a176763986f81Withdraw122284522021-04-13 0:13:422 days 15 hrs ago0x592cbeac830431f12fd51f6854cee7e6f819a1bf IN  Loopring: Staking Pool0 Ether0.00344120777
0xffc9cb61ae7540debc6e8fd03531c59391d8e68a0b9553488e0a24d220a2b826Withdraw122279052021-04-12 22:13:592 days 17 hrs ago0xe9c78c5efae66b52c5bf1919c8039f5698cd3cca IN  Loopring: Staking Pool0 Ether0.004513791101
0xf9f71070fe281a8570ae6ea95e55fbf301f2b72b016c7d0294d2182daa50af0cWithdraw122255852021-04-12 13:46:023 days 1 hr ago0xfff3098133d97fd783be532ad78b2812d93aa167 IN  Loopring: Staking Pool0 Ether0.00458002383
0x3fe7b5c6f71804523dadd001470323467b5138b8d5432bf083c8aee9f428c0feWithdraw122250512021-04-12 11:42:143 days 3 hrs ago0x5781435cfcd84edb559f2eb70c91e49eabccd7cd IN  Loopring: Staking Pool0 Ether0.00524219595
0xb594f8a31fd8b72528905f8e0550408dd4be8ed0914285f0cbfb4c2882154749Withdraw122244422021-04-12 9:24:263 days 6 hrs ago0xf0772eb66bdb39a953273ab1f8a5a086db247d3a IN  Loopring: Staking Pool0 Ether0.00294960666
0xe06679cd60c2cf6365a1631d0ad6cafa6e2ae02195eb37715d0309aff6c2d9ecWithdraw122242652021-04-12 8:48:593 days 6 hrs ago0x36b873a52dc210f2ea0e679dca5cfc815dbf6c09 IN  Loopring: Staking Pool0 Ether0.00330713474
0x945122d37f331bc107e7b0f444fb9f1f6400866532b9a96ec573dbc6e579f29fWithdraw122229022021-04-12 3:48:143 days 11 hrs ago0xa1992346630fa9539bc31438a8981c646c6698f1 IN  Loopring: Staking Pool0 Ether0.00321775206572.000001459
[ Download CSV Export 

OVERVIEW

The address for Loopring's user staking pool.

View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UserStakingPool

Compiler Version
v0.5.11+commit.c082d0b4

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-11-20
*/

/**
Author: Loopring Foundation (Loopring Project Ltd)
*/

pragma solidity ^0.5.11;


contract Ownable {
    address public owner;

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

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

    
    modifier onlyOwner()
    {
        require(msg.sender == owner, "UNAUTHORIZED");
        _;
    }

    
    
    
    function transferOwnership(
        address newOwner
        )
        public
        onlyOwner
    {
        require(newOwner != address(0), "ZERO_ADDRESS");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

    function renounceOwnership()
        public
        onlyOwner
    {
        emit OwnershipTransferred(owner, address(0));
        owner = address(0);
    }
}

contract Claimable is Ownable
{
    address public pendingOwner;

    
    modifier onlyPendingOwner() {
        require(msg.sender == pendingOwner, "UNAUTHORIZED");
        _;
    }

    
    
    function transferOwnership(
        address newOwner
        )
        public
        onlyOwner
    {
        require(newOwner != address(0) && newOwner != owner, "INVALID_ADDRESS");
        pendingOwner = newOwner;
    }

    
    function claimOwnership()
        public
        onlyPendingOwner
    {
        emit OwnershipTransferred(owner, pendingOwner);
        owner = pendingOwner;
        pendingOwner = address(0);
    }
}

contract ERC20 {
    function totalSupply()
        public
        view
        returns (uint);

    function balanceOf(
        address who
        )
        public
        view
        returns (uint);

    function allowance(
        address owner,
        address spender
        )
        public
        view
        returns (uint);

    function transfer(
        address to,
        uint value
        )
        public
        returns (bool);

    function transferFrom(
        address from,
        address to,
        uint    value
        )
        public
        returns (bool);

    function approve(
        address spender,
        uint    value
        )
        public
        returns (bool);
}

library ERC20SafeTransfer {
    function safeTransferAndVerify(
        address token,
        address to,
        uint    value
        )
        internal
    {
        safeTransferWithGasLimitAndVerify(
            token,
            to,
            value,
            gasleft()
        );
    }

    function safeTransfer(
        address token,
        address to,
        uint    value
        )
        internal
        returns (bool)
    {
        return safeTransferWithGasLimit(
            token,
            to,
            value,
            gasleft()
        );
    }

    function safeTransferWithGasLimitAndVerify(
        address token,
        address to,
        uint    value,
        uint    gasLimit
        )
        internal
    {
        require(
            safeTransferWithGasLimit(token, to, value, gasLimit),
            "TRANSFER_FAILURE"
        );
    }

    function safeTransferWithGasLimit(
        address token,
        address to,
        uint    value,
        uint    gasLimit
        )
        internal
        returns (bool)
    {
        
        
        

        
        bytes memory callData = abi.encodeWithSelector(
            bytes4(0xa9059cbb),
            to,
            value
        );
        (bool success, ) = token.call.gas(gasLimit)(callData);
        return checkReturnValue(success);
    }

    function safeTransferFromAndVerify(
        address token,
        address from,
        address to,
        uint    value
        )
        internal
    {
        safeTransferFromWithGasLimitAndVerify(
            token,
            from,
            to,
            value,
            gasleft()
        );
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint    value
        )
        internal
        returns (bool)
    {
        return safeTransferFromWithGasLimit(
            token,
            from,
            to,
            value,
            gasleft()
        );
    }

    function safeTransferFromWithGasLimitAndVerify(
        address token,
        address from,
        address to,
        uint    value,
        uint    gasLimit
        )
        internal
    {
        bool result = safeTransferFromWithGasLimit(
            token,
            from,
            to,
            value,
            gasLimit
        );
        require(result, "TRANSFER_FAILURE");
    }

    function safeTransferFromWithGasLimit(
        address token,
        address from,
        address to,
        uint    value,
        uint    gasLimit
        )
        internal
        returns (bool)
    {
        
        
        

        
        bytes memory callData = abi.encodeWithSelector(
            bytes4(0x23b872dd),
            from,
            to,
            value
        );
        (bool success, ) = token.call.gas(gasLimit)(callData);
        return checkReturnValue(success);
    }

    function checkReturnValue(
        bool success
        )
        internal
        pure
        returns (bool)
    {
        
        
        
        if (success) {
            assembly {
                switch returndatasize()
                
                case 0 {
                    success := 1
                }
                
                case 32 {
                    returndatacopy(0, 0, 32)
                    success := mload(0)
                }
                
                default {
                    success := 0
                }
            }
        }
        return success;
    }
}

library MathUint {
    function mul(
        uint a,
        uint b
        )
        internal
        pure
        returns (uint c)
    {
        c = a * b;
        require(a == 0 || c / a == b, "MUL_OVERFLOW");
    }

    function sub(
        uint a,
        uint b
        )
        internal
        pure
        returns (uint)
    {
        require(b <= a, "SUB_UNDERFLOW");
        return a - b;
    }

    function add(
        uint a,
        uint b
        )
        internal
        pure
        returns (uint c)
    {
        c = a + b;
        require(c >= a, "ADD_OVERFLOW");
    }

    function decodeFloat(
        uint f
        )
        internal
        pure
        returns (uint value)
    {
        uint numBitsMantissa = 23;
        uint exponent = f >> numBitsMantissa;
        uint mantissa = f & ((1 << numBitsMantissa) - 1);
        value = mantissa * (10 ** exponent);
    }
}

contract ReentrancyGuard {
    
    uint private _guardValue;

    
    modifier nonReentrant()
    {
        
        require(_guardValue == 0, "REENTRANCY");

        
        _guardValue = 1;

        
        _;

        
        _guardValue = 0;
    }
}

contract IProtocolFeeVault {
    uint public constant REWARD_PERCENTAGE      = 70;
    uint public constant DAO_PERDENTAGE         = 20;

    address public userStakingPoolAddress;
    address public lrcAddress;
    address public tokenSellerAddress;
    address public daoAddress;

    uint claimedReward;
    uint claimedDAOFund;
    uint claimedBurn;

    event LRCClaimed(uint amount);
    event DAOFunded(uint amountDAO, uint amountBurn);
    event TokenSold(address token, uint amount);
    event SettingsUpdated(uint time);

    
    
    
    
    function updateSettings(
        address _userStakingPoolAddress,
        address _tokenSellerAddress,
        address _daoAddress
        )
        external;

    
    
    
    
    
    function claimStakingReward(uint amount) external;

    
    
    function fundDAO() external;

    
    
    
    
    function sellTokenForLRC(
        address token,
        uint    amount
        )
        external;

    
    
    
    
    
    
    
    
    
    function getProtocolFeeStats()
        public
        view
        returns (
            uint accumulatedFees,
            uint accumulatedBurn,
            uint accumulatedDAOFund,
            uint accumulatedReward,
            uint remainingFees,
            uint remainingBurn,
            uint remainingDAOFund,
            uint remainingReward
        );
}

contract IUserStakingPool {
    uint public constant MIN_CLAIM_DELAY        = 90 days;
    uint public constant MIN_WITHDRAW_DELAY     = 90 days;

    address public lrcAddress;
    address public protocolFeeVaultAddress;

    uint    public numAddresses;

    event ProtocolFeeVaultChanged (address feeVaultAddress);

    event LRCStaked       (address indexed user,  uint amount);
    event LRCWithdrawn    (address indexed user,  uint amount);
    event LRCRewarded     (address indexed user,  uint amount);

    
    
    function setProtocolFeeVault(address _protocolFeeVaultAddress)
        external;

    
    function getTotalStaking()
        public
        view
        returns (uint);

    
    
    
    
    
    
    function getUserStaking(address user)
        public
        view
        returns (
            uint withdrawalWaitTime,
            uint rewardWaitTime,
            uint balance,
            uint pendingReward
        );

    
    
    
    function stake(uint amount)
        external;

    
    
    function withdraw(uint amount)
        external;

    
    
    
    function claim()
        external
        returns (uint claimedAmount);
}

contract UserStakingPool is Claimable, ReentrancyGuard, IUserStakingPool
{
    using ERC20SafeTransfer for address;
    using MathUint          for uint;

    struct Staking {
        uint   balance;        
        uint64 depositedAt;
        uint64 claimedAt;      
    }

    Staking public total;
    mapping (address => Staking) public stakings;

    constructor(address _lrcAddress)
        Claimable()
        public
    {
        require(_lrcAddress != address(0), "ZERO_ADDRESS");
        lrcAddress = _lrcAddress;
    }

    function setProtocolFeeVault(address _protocolFeeVaultAddress)
        external
        nonReentrant
        onlyOwner
    {
        
        protocolFeeVaultAddress = _protocolFeeVaultAddress;
        emit ProtocolFeeVaultChanged(protocolFeeVaultAddress);
    }

    function getTotalStaking()
        public
        view
        returns (uint)
    {
        return total.balance;
    }

    function getUserStaking(address user)
        public
        view
        returns (
            uint withdrawalWaitTime,
            uint rewardWaitTime,
            uint balance,
            uint pendingReward
        )
    {
        withdrawalWaitTime = getUserWithdrawalWaitTime(user);
        rewardWaitTime = getUserClaimWaitTime(user);
        balance = stakings[user].balance;
        (, , pendingReward) = getUserPendingReward(user);
    }

    function stake(uint amount)
        external
        nonReentrant
    {
        require(amount > 0, "ZERO_VALUE");

        
        lrcAddress.safeTransferFromAndVerify(msg.sender, address(this), amount);

        Staking storage user = stakings[msg.sender];

        if (user.balance == 0) {
            numAddresses += 1;
        }

        
        uint balance = user.balance.add(amount);

        user.depositedAt = uint64(
            user.balance
                .mul(user.depositedAt)
                .add(amount.mul(now)) / balance
        );

        user.claimedAt = uint64(
            user.balance
                .mul(user.claimedAt)
                .add(amount.mul(now)) / balance
        );

        user.balance = balance;

        
        balance = total.balance.add(amount);

        total.claimedAt = uint64(
            total.balance
                .mul(total.claimedAt)
                .add(amount.mul(now)) / balance
        );

        total.balance = balance;

        emit LRCStaked(msg.sender, amount);
    }

    function withdraw(uint amount)
        external
        nonReentrant
    {
        require(getUserWithdrawalWaitTime(msg.sender) == 0, "NEED_TO_WAIT");

        
        if (protocolFeeVaultAddress != address(0) &&
            getUserClaimWaitTime(msg.sender) == 0) {
            claimReward();
        }

        Staking storage user = stakings[msg.sender];

        uint _amount = (amount == 0 || amount > user.balance) ? user.balance : amount;
        require(_amount > 0, "ZERO_BALANCE");

        total.balance = total.balance.sub(_amount);
        user.balance = user.balance.sub(_amount);

        if (user.balance == 0) {
            numAddresses -= 1;
            delete stakings[msg.sender];
        }

        
        lrcAddress.safeTransferAndVerify(msg.sender, _amount);

        emit LRCWithdrawn(msg.sender, _amount);
    }

    function claim()
        external
        nonReentrant
        returns (uint claimedAmount)
    {
        return claimReward();
    }

    

    function claimReward()
        private
        returns (uint claimedAmount)
    {
        require(protocolFeeVaultAddress != address(0), "ZERO_ADDRESS");
        require(getUserClaimWaitTime(msg.sender) == 0, "NEED_TO_WAIT");

        uint totalPoints;
        uint userPoints;

        (totalPoints, userPoints, claimedAmount) = getUserPendingReward(msg.sender);

        if (claimedAmount > 0) {
            IProtocolFeeVault(protocolFeeVaultAddress).claimStakingReward(claimedAmount);

            total.balance = total.balance.add(claimedAmount);

            total.claimedAt = uint64(
                now.sub(totalPoints.sub(userPoints) / total.balance)
            );

            Staking storage user = stakings[msg.sender];
            user.balance = user.balance.add(claimedAmount);
            user.claimedAt = uint64(now);
        }
        emit LRCRewarded(msg.sender, claimedAmount);
    }

    function getUserWithdrawalWaitTime(address user)
        private
        view
        returns (uint)
    {
        uint depositedAt = stakings[user].depositedAt;
        if (depositedAt == 0) {
            return MIN_WITHDRAW_DELAY;
        } else {
            uint time = depositedAt + MIN_WITHDRAW_DELAY;
            return (time <= now) ? 0 : time.sub(now);
        }
    }

    function getUserClaimWaitTime(address user)
        private
        view
        returns (uint)
    {
        uint claimedAt = stakings[user].claimedAt;
        if (claimedAt == 0) {
            return MIN_CLAIM_DELAY;
        } else {
            uint time = stakings[user].claimedAt + MIN_CLAIM_DELAY;
            return (time <= now) ? 0 : time.sub(now);
        }
    }

    function getUserPendingReward(address user)
        private
        view
        returns (
            uint totalPoints,
            uint userPoints,
            uint pendingReward
        )
    {
        Staking storage staking = stakings[user];

        
        totalPoints = total.balance.mul(now.sub(total.claimedAt).add(1));
        userPoints = staking.balance.mul(now.sub(staking.claimedAt));

        
        if (totalPoints < userPoints) {
            userPoints = totalPoints;
        }

        if (protocolFeeVaultAddress != address(0) &&
            totalPoints != 0 &&
            userPoints != 0) {
            (, , , , , , , pendingReward) = IProtocolFeeVault(
                protocolFeeVaultAddress
            ).getProtocolFeeStats();
            pendingReward = pendingReward.mul(userPoints) / totalPoints;
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserStaking","outputs":[{"internalType":"uint256","name":"withdrawalWaitTime","type":"uint256"},{"internalType":"uint256","name":"rewardWaitTime","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"pendingReward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"total","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint64","name":"depositedAt","type":"uint64"},{"internalType":"uint64","name":"claimedAt","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"numAddresses","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lrcAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[{"internalType":"uint256","name":"claimedAmount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTotalStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_CLAIM_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_protocolFeeVaultAddress","type":"address"}],"name":"setProtocolFeeVault","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MIN_WITHDRAW_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"protocolFeeVaultAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakings","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint64","name":"depositedAt","type":"uint64"},{"internalType":"uint64","name":"claimedAt","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lrcAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"feeVaultAddress","type":"address"}],"name":"ProtocolFeeVaultChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LRCStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LRCWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LRCRewarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

608060405234801561001057600080fd5b506040516114e43803806114e48339818101604052602081101561003357600080fd5b5051600080546001600160a01b031916331790556001600160a01b0381166100bc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f414444524553530000000000000000000000000000000000000000604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b03929092169190911790556113f9806100eb6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063715018a6116100a2578063ae15943911610071578063ae1594391461020c578063c730eca414610267578063dc6e13e11461026f578063e30c397814610295578063f2fde38b1461029d57610116565b8063715018a61461021457806388e95c471461021c5780638da5cb5b14610242578063a694fc3a1461024a57610116565b80633d6cf722116100e95780633d6cf722146101d05780634e71d92d146101f45780634e71e0c8146101fc57806358d575451461020457806361605b921461020c57610116565b80630c0fd5491461011b5780632ddbd13a146101675780632e1a7d4d146101975780632f8646d6146101b6575b600080fd5b6101416004803603602081101561013157600080fd5b50356001600160a01b03166102c3565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61016f610312565b604080519384526001600160401b039283166020850152911682820152519081900360600190f35b6101b4600480360360208110156101ad57600080fd5b503561032f565b005b6101be610522565b60408051918252519081900360200190f35b6101d8610528565b604080516001600160a01b039092168252519081900360200190f35b6101be610537565b6101b4610594565b6101be610646565b6101be61064c565b6101b4610653565b6101b46004803603602081101561023257600080fd5b50356001600160a01b03166106eb565b6101d86107df565b6101b46004803603602081101561026057600080fd5b50356107ee565b6101d8610a52565b61016f6004803603602081101561028557600080fd5b50356001600160a01b0316610a61565b6101d8610a8e565b6101b4600480360360208110156102b357600080fd5b50356001600160a01b0316610a9d565b6000806000806102d285610b76565b93506102dd85610bdc565b6001600160a01b038616600090815260086020526040902054909350915061030485610c63565b959794965092949392505050565b6006546007546001600160401b0380821691600160401b90041683565b60025415610371576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b600160025561037f33610b76565b156103c0576040805162461bcd60e51b815260206004820152600c60248201526b1391515117d513d7d5d0525560a21b604482015290519081900360640190fd5b6004546001600160a01b0316158015906103e057506103de33610bdc565b155b156103ef576103ed610dbc565b505b3360009081526008602052604081209082158061040c5750815483115b6104165782610419565b81545b90506000811161045f576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f42414c414e434560a01b604482015290519081900360640190fd5b600654610472908263ffffffff610fc516565b6006558154610487908263ffffffff610fc516565b8083556104c5576005805460001901905533600090815260086020526040812090815560010180546fffffffffffffffffffffffffffffffff191690555b6003546104e2906001600160a01b0316338363ffffffff61101716565b60408051828152905133917f2958029af76592f61d851f6d7c7456b3d9ae7536e7dc715c408fe02cd06c4651919081900360200190a25050600060025550565b60055481565b6003546001600160a01b031681565b600060025460001461057d576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b600160025561058a610dbc565b9050600060025590565b6001546001600160a01b031633146105e2576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60065490565b6276a70081565b6000546001600160a01b031633146106a1576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6002541561072d576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b60016002556000546001600160a01b03163314610780576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fb3b08642421ba31da9df792b3dbe9f52ff071894103ba3b1c4317b2daf33736c916020908290030190a1506000600255565b6000546001600160a01b031681565b60025415610830576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b600160025580610874576040805162461bcd60e51b815260206004820152600a6024820152695a45524f5f56414c554560b01b604482015290519081900360640190fd5b600354610892906001600160a01b031633308463ffffffff61102816565b33600090815260086020526040902080546108b1576005805460010190555b80546000906108c6908463ffffffff61103b16565b9050806109076108dc854263ffffffff61108216565b600185015485546108fb916001600160401b031663ffffffff61108216565b9063ffffffff61103b16565b8161090e57fe5b60018401805467ffffffffffffffff1916929091046001600160401b0316919091179055806109606109408542611082565b600185015485546108fb91600160401b90046001600160401b0316611082565b8161096757fe5b60018401805467ffffffffffffffff60401b1916600160401b939092046001600160401b0316929092021790558082556006546109a4908461103b565b9050806109d96109ba854263ffffffff61108216565b6007546006546108fb91600160401b90046001600160401b0316611082565b816109e057fe5b600780546001600160401b039390920492909216600160401b0267ffffffffffffffff60401b19909116179055600681905560408051848152905133917f7bcf38427a7f7fc25e271d30f03522e51794ec2ba24df0703481c2b7222ced4e919081900360200190a25050600060025550565b6004546001600160a01b031681565b600860205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b6001546001600160a01b031681565b6000546001600160a01b03163314610aeb576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b6001600160a01b03811615801590610b1157506000546001600160a01b03828116911614155b610b54576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4144445245535360881b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600860205260408120600101546001600160401b031680610bac576276a700915050610bd7565b6276a700810142811115610bcf57610bca814263ffffffff610fc516565b610bd2565b60005b925050505b919050565b6001600160a01b038116600090815260086020526040812060010154600160401b90046001600160401b031680610c19576276a700915050610bd7565b6001600160a01b0383166000908152600860205260409020600101546001600160401b03600160401b909104166276a7000142811115610bcf57610bca814263ffffffff610fc516565b6001600160a01b038116600090815260086020526040812060075482918291610cb790610ca8906001906108fb904290600160401b90046001600160401b0316610fc5565b6006549063ffffffff61108216565b6001820154909450610cec90610cde904290600160401b90046001600160401b0316610fc5565b82549063ffffffff61108216565b925082841015610cfa578392505b6004546001600160a01b031615801590610d1357508315155b8015610d1e57508215155b15610db4576004805460408051630d96a41b60e21b815290516001600160a01b039092169263365a906c92828201926101009290829003018186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d610100811015610d9157600080fd5b5060e00151915083610da9838563ffffffff61108216565b81610db057fe5b0491505b509193909250565b6004546000906001600160a01b0316610e0b576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b610e1433610bdc565b15610e55576040805162461bcd60e51b815260206004820152600c60248201526b1391515117d513d7d5d0525560a21b604482015290519081900360640190fd5b600080610e6133610c63565b945090925090508215610f8a5760048054604080516308e7352960e21b8152928301869052516001600160a01b039091169163239cd4a491602480830192600092919082900301818387803b158015610eb957600080fd5b505af1158015610ecd573d6000803e3d6000fd5b5050600654610ee5925090508463ffffffff61103b16565b6006819055610f1490610efe848463ffffffff610fc516565b81610f0557fe5b4291900463ffffffff610fc516565b600780546001600160401b0392909216600160401b0267ffffffffffffffff60401b199092169190911790553360009081526008602052604090208054610f61908563ffffffff61103b16565b8155600101805467ffffffffffffffff60401b1916600160401b426001600160401b0316021790555b60408051848152905133917ffaa4a7e6a2ecb2217533f3081ad082d42261efe260c8842dd32a5ebb72011b78919081900360200190a2505090565b60008282111561100c576040805162461bcd60e51b815260206004820152600d60248201526c5355425f554e444552464c4f5760981b604482015290519081900360640190fd5b508082035b92915050565b6110238383835a6110da565b505050565b611035848484845a61112a565b50505050565b81810182811015611011576040805162461bcd60e51b815260206004820152600c60248201526b4144445f4f564552464c4f5760a01b604482015290519081900360640190fd5b81810282158061109a57508183828161109757fe5b04145b611011576040805162461bcd60e51b815260206004820152600c60248201526b4d554c5f4f564552464c4f5760a01b604482015290519081900360640190fd5b6110e684848484611188565b611035576040805162461bcd60e51b815260206004820152601060248201526f5452414e534645525f4641494c55524560801b604482015290519081900360640190fd5b60006111398686868686611284565b905080611180576040805162461bcd60e51b815260206004820152601060248201526f5452414e534645525f4641494c55524560801b604482015290519081900360640190fd5b505050505050565b604080516001600160a01b038086166024830152604480830186905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485938a16928792869282918083835b602083106112045780518252601f1990920191602091820191016111e5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038160008787f1925050503d8060008114611267576040519150601f19603f3d011682016040523d82523d6000602084013e61126c565b606091505b5050905061127981611389565b979650505050505050565b604080516001600160a01b0380871660248301528086166044830152606480830186905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1781529251825160009485938b16928792869282918083835b602083106113085780518252601f1990920191602091820191016112e9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038160008787f1925050503d806000811461136b576040519150601f19603f3d011682016040523d82523d6000602084013e611370565b606091505b5050905061137d81611389565b98975050505050505050565b600081156113c0573d80156113a957602081146113b257600092506113be565b600192506113be565b60206000803e60005192505b505b509056fea265627a7a723158203a8d4f4a474e4e4cf5f39ea7846c3a11c33125afc08eae8ed969ba8bfb4f4f7b64736f6c634300050b0032000000000000000000000000bbbbca6a901c926f240b89eacb641d8aec7aeafd

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

000000000000000000000000bbbbca6a901c926f240b89eacb641d8aec7aeafd

-----Decoded View---------------
Arg [0] : _lrcAddress (address): 0xbbbbca6a901c926f240b89eacb641d8aec7aeafd

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000bbbbca6a901c926f240b89eacb641d8aec7aeafd


Swarm Source

bzzr://3a8d4f4a474e4e4cf5f39ea7846c3a11c33125afc08eae8ed969ba8bfb4f4f7b
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.