ETH Price: $2,636.03 (+1.09%)

Contract

0xF4662bB1C4831fD411a95b8050B3A5998d8A4A5b
 
Transaction Hash
Method
Block
From
To
Withdraw198205392024-05-07 20:21:11146 days ago1715113271IN
Loopring: Staking Pool
0 ETH0.00044845.38383327
Withdraw195964222024-04-06 11:35:35177 days ago1712403335IN
Loopring: Staking Pool
0 ETH0.0009703511.6390881
Withdraw195018352024-03-24 3:47:11191 days ago1711252031IN
Loopring: Staking Pool
0 ETH0.0013693219.67451612
Withdraw194535872024-03-17 9:09:59198 days ago1710666599IN
Loopring: Staking Pool
0 ETH0.0021674226.02327721
Withdraw188316242023-12-21 3:39:35285 days ago1703129975IN
Loopring: Staking Pool
0 ETH0.0029900742.94977799
Stake187624872023-12-11 10:52:11294 days ago1702291931IN
Loopring: Staking Pool
0 ETH0.0028719626.82345378
Withdraw186565052023-11-26 14:40:59309 days ago1701009659IN
Loopring: Staking Pool
0 ETH0.0037742445.31558273
Withdraw185212072023-11-07 16:15:47328 days ago1699373747IN
Loopring: Staking Pool
0 ETH0.002604331.27208183
Withdraw182958912023-10-07 3:21:35360 days ago1696648895IN
Loopring: Staking Pool
0 ETH0.000515358.17822254
Withdraw182958822023-10-07 3:19:47360 days ago1696648787IN
Loopring: Staking Pool
0 ETH0.000552058.7671795
Withdraw182958822023-10-07 3:19:47360 days ago1696648787IN
Loopring: Staking Pool
0 ETH0.000552058.7671795
Withdraw182958412023-10-07 3:11:11360 days ago1696648271IN
Loopring: Staking Pool
0 ETH0.0007722712.25528128
Claim181965052023-09-23 5:42:35374 days ago1695447755IN
Loopring: Staking Pool
0 ETH0.000329977.22870615
Withdraw181964812023-09-23 5:37:47374 days ago1695447467IN
Loopring: Staking Pool
0 ETH0.000497267.13538301
Withdraw179593682023-08-20 23:54:59407 days ago1692575699IN
Loopring: Staking Pool
0 ETH0.0007813811.21534123
Withdraw178675232023-08-08 3:28:11420 days ago1691465291IN
Loopring: Staking Pool
0 ETH0.0013985716.79585278
Withdraw176761242023-07-12 7:53:35447 days ago1689148415IN
Loopring: Staking Pool
0 ETH0.0004717715.21863173
Withdraw176153292023-07-03 18:51:23455 days ago1688410283IN
Loopring: Staking Pool
0 ETH0.0015210721.85477429
Withdraw174394172023-06-09 1:28:35480 days ago1686274115IN
Loopring: Staking Pool
0 ETH0.0013002418.68456331
Withdraw173263612023-05-24 3:24:11496 days ago1684898651IN
Loopring: Staking Pool
0 ETH0.0025315236.42219874
Stake169641362023-04-02 21:43:11547 days ago1680471791IN
Loopring: Staking Pool
0 ETH0.0020380219.03258058
Withdraw169621352023-04-02 14:55:59547 days ago1680447359IN
Loopring: Staking Pool
0 ETH0.0013995722.22673916
Stake168951112023-03-24 4:53:35557 days ago1679633615IN
Loopring: Staking Pool
0 ETH0.0014311313.3665044
Stake166711482023-02-20 17:09:35588 days ago1676912975IN
Loopring: Staking Pool
0 ETH0.0065235260.92822885
Withdraw164814212023-01-25 4:22:23615 days ago1674620543IN
Loopring: Staking Pool
0 ETH0.001125916.18137886
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
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

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063715018a6116100a2578063ae15943911610071578063ae1594391461020c578063c730eca414610267578063dc6e13e11461026f578063e30c397814610295578063f2fde38b1461029d57610116565b8063715018a61461021457806388e95c471461021c5780638da5cb5b14610242578063a694fc3a1461024a57610116565b80633d6cf722116100e95780633d6cf722146101d05780634e71d92d146101f45780634e71e0c8146101fc57806358d575451461020457806361605b921461020c57610116565b80630c0fd5491461011b5780632ddbd13a146101675780632e1a7d4d146101975780632f8646d6146101b6575b600080fd5b6101416004803603602081101561013157600080fd5b50356001600160a01b03166102c3565b604080519485526020850193909352838301919091526060830152519081900360800190f35b61016f610312565b604080519384526001600160401b039283166020850152911682820152519081900360600190f35b6101b4600480360360208110156101ad57600080fd5b503561032f565b005b6101be610522565b60408051918252519081900360200190f35b6101d8610528565b604080516001600160a01b039092168252519081900360200190f35b6101be610537565b6101b4610594565b6101be610646565b6101be61064c565b6101b4610653565b6101b46004803603602081101561023257600080fd5b50356001600160a01b03166106eb565b6101d86107df565b6101b46004803603602081101561026057600080fd5b50356107ee565b6101d8610a52565b61016f6004803603602081101561028557600080fd5b50356001600160a01b0316610a61565b6101d8610a8e565b6101b4600480360360208110156102b357600080fd5b50356001600160a01b0316610a9d565b6000806000806102d285610b76565b93506102dd85610bdc565b6001600160a01b038616600090815260086020526040902054909350915061030485610c63565b959794965092949392505050565b6006546007546001600160401b0380821691600160401b90041683565b60025415610371576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b600160025561037f33610b76565b156103c0576040805162461bcd60e51b815260206004820152600c60248201526b1391515117d513d7d5d0525560a21b604482015290519081900360640190fd5b6004546001600160a01b0316158015906103e057506103de33610bdc565b155b156103ef576103ed610dbc565b505b3360009081526008602052604081209082158061040c5750815483115b6104165782610419565b81545b90506000811161045f576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f42414c414e434560a01b604482015290519081900360640190fd5b600654610472908263ffffffff610fc516565b6006558154610487908263ffffffff610fc516565b8083556104c5576005805460001901905533600090815260086020526040812090815560010180546fffffffffffffffffffffffffffffffff191690555b6003546104e2906001600160a01b0316338363ffffffff61101716565b60408051828152905133917f2958029af76592f61d851f6d7c7456b3d9ae7536e7dc715c408fe02cd06c4651919081900360200190a25050600060025550565b60055481565b6003546001600160a01b031681565b600060025460001461057d576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b600160025561058a610dbc565b9050600060025590565b6001546001600160a01b031633146105e2576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60065490565b6276a70081565b6000546001600160a01b031633146106a1576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6002541561072d576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b60016002556000546001600160a01b03163314610780576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b600480546001600160a01b0319166001600160a01b03838116919091179182905560408051929091168252517fb3b08642421ba31da9df792b3dbe9f52ff071894103ba3b1c4317b2daf33736c916020908290030190a1506000600255565b6000546001600160a01b031681565b60025415610830576040805162461bcd60e51b815260206004820152600a6024820152695245454e5452414e435960b01b604482015290519081900360640190fd5b600160025580610874576040805162461bcd60e51b815260206004820152600a6024820152695a45524f5f56414c554560b01b604482015290519081900360640190fd5b600354610892906001600160a01b031633308463ffffffff61102816565b33600090815260086020526040902080546108b1576005805460010190555b80546000906108c6908463ffffffff61103b16565b9050806109076108dc854263ffffffff61108216565b600185015485546108fb916001600160401b031663ffffffff61108216565b9063ffffffff61103b16565b8161090e57fe5b60018401805467ffffffffffffffff1916929091046001600160401b0316919091179055806109606109408542611082565b600185015485546108fb91600160401b90046001600160401b0316611082565b8161096757fe5b60018401805467ffffffffffffffff60401b1916600160401b939092046001600160401b0316929092021790558082556006546109a4908461103b565b9050806109d96109ba854263ffffffff61108216565b6007546006546108fb91600160401b90046001600160401b0316611082565b816109e057fe5b600780546001600160401b039390920492909216600160401b0267ffffffffffffffff60401b19909116179055600681905560408051848152905133917f7bcf38427a7f7fc25e271d30f03522e51794ec2ba24df0703481c2b7222ced4e919081900360200190a25050600060025550565b6004546001600160a01b031681565b600860205260009081526040902080546001909101546001600160401b0380821691600160401b90041683565b6001546001600160a01b031681565b6000546001600160a01b03163314610aeb576040805162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015290519081900360640190fd5b6001600160a01b03811615801590610b1157506000546001600160a01b03828116911614155b610b54576040805162461bcd60e51b815260206004820152600f60248201526e494e56414c49445f4144445245535360881b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600860205260408120600101546001600160401b031680610bac576276a700915050610bd7565b6276a700810142811115610bcf57610bca814263ffffffff610fc516565b610bd2565b60005b925050505b919050565b6001600160a01b038116600090815260086020526040812060010154600160401b90046001600160401b031680610c19576276a700915050610bd7565b6001600160a01b0383166000908152600860205260409020600101546001600160401b03600160401b909104166276a7000142811115610bcf57610bca814263ffffffff610fc516565b6001600160a01b038116600090815260086020526040812060075482918291610cb790610ca8906001906108fb904290600160401b90046001600160401b0316610fc5565b6006549063ffffffff61108216565b6001820154909450610cec90610cde904290600160401b90046001600160401b0316610fc5565b82549063ffffffff61108216565b925082841015610cfa578392505b6004546001600160a01b031615801590610d1357508315155b8015610d1e57508215155b15610db4576004805460408051630d96a41b60e21b815290516001600160a01b039092169263365a906c92828201926101009290829003018186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d610100811015610d9157600080fd5b5060e00151915083610da9838563ffffffff61108216565b81610db057fe5b0491505b509193909250565b6004546000906001600160a01b0316610e0b576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b610e1433610bdc565b15610e55576040805162461bcd60e51b815260206004820152600c60248201526b1391515117d513d7d5d0525560a21b604482015290519081900360640190fd5b600080610e6133610c63565b945090925090508215610f8a5760048054604080516308e7352960e21b8152928301869052516001600160a01b039091169163239cd4a491602480830192600092919082900301818387803b158015610eb957600080fd5b505af1158015610ecd573d6000803e3d6000fd5b5050600654610ee5925090508463ffffffff61103b16565b6006819055610f1490610efe848463ffffffff610fc516565b81610f0557fe5b4291900463ffffffff610fc516565b600780546001600160401b0392909216600160401b0267ffffffffffffffff60401b199092169190911790553360009081526008602052604090208054610f61908563ffffffff61103b16565b8155600101805467ffffffffffffffff60401b1916600160401b426001600160401b0316021790555b60408051848152905133917ffaa4a7e6a2ecb2217533f3081ad082d42261efe260c8842dd32a5ebb72011b78919081900360200190a2505090565b60008282111561100c576040805162461bcd60e51b815260206004820152600d60248201526c5355425f554e444552464c4f5760981b604482015290519081900360640190fd5b508082035b92915050565b6110238383835a6110da565b505050565b611035848484845a61112a565b50505050565b81810182811015611011576040805162461bcd60e51b815260206004820152600c60248201526b4144445f4f564552464c4f5760a01b604482015290519081900360640190fd5b81810282158061109a57508183828161109757fe5b04145b611011576040805162461bcd60e51b815260206004820152600c60248201526b4d554c5f4f564552464c4f5760a01b604482015290519081900360640190fd5b6110e684848484611188565b611035576040805162461bcd60e51b815260206004820152601060248201526f5452414e534645525f4641494c55524560801b604482015290519081900360640190fd5b60006111398686868686611284565b905080611180576040805162461bcd60e51b815260206004820152601060248201526f5452414e534645525f4641494c55524560801b604482015290519081900360640190fd5b505050505050565b604080516001600160a01b038086166024830152604480830186905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485938a16928792869282918083835b602083106112045780518252601f1990920191602091820191016111e5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038160008787f1925050503d8060008114611267576040519150601f19603f3d011682016040523d82523d6000602084013e61126c565b606091505b5050905061127981611389565b979650505050505050565b604080516001600160a01b0380871660248301528086166044830152606480830186905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1781529251825160009485938b16928792869282918083835b602083106113085780518252601f1990920191602091820191016112e9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038160008787f1925050503d806000811461136b576040519150601f19603f3d011682016040523d82523d6000602084013e611370565b606091505b5050905061137d81611389565b98975050505050505050565b600081156113c0573d80156113a957602081146113b257600092506113be565b600192506113be565b60206000803e60005192505b505b509056fea265627a7a723158203a8d4f4a474e4e4cf5f39ea7846c3a11c33125afc08eae8ed969ba8bfb4f4f7b64736f6c634300050b0032

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
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

The address for Loopring's user staking pool.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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.