Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x2E162fa42d723685A171a2bf64dACf901fCfC286
Balance 0 ETH
Nonce 1
Code Size 6728 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

6728 bytes
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80637b0472f0116100f9578063b9b2cf9611610097578063f2fde38b11610071578063f2fde38b1461044d578063f4f3b20014610460578063fa1e151414610473578063fce50f171461049357600080fd5b8063b9b2cf96146103f9578063da4b2e751461040c578063e8becf021461043a57600080fd5b806386989038116100d3578063869890381461031a5780638da5cb5b14610323578063a85c38ef14610334578063aa604947146103d957600080fd5b80637b0472f0146102eb5780637dcb2abf146102fe578063817b1cd21461031157600080fd5b80635d3eea91116101665780636980598111610140578063698059811461028057806370a08231146102a3578063715018a6146102c3578063799102a2146102cb57600080fd5b80635d3eea911461025157806363fccba914610264578063695464e91461027757600080fd5b80630962ef79146101ae5780631a6c5e7e146101c35780631ec9d10f146101f6578063280da6fa146101fe5780632c26afae14610206578063336a57f314610226575b600080fd5b6101c16101bc366004611688565b6104cf565b005b6101e36101d1366004611688565b600f6020526000908152604090205481565b6040519081526020015b60405180910390f35b6101c16106b4565b6101c16108f2565b6101e3610214366004611688565b60106020526000908152604090205481565b600354610239906001600160a01b031681565b6040516001600160a01b0390911681526020016101ed565b6101c161025f366004611688565b610b02565b600254610239906001600160a01b031681565b6101e360075481565b61029361028e3660046116af565b610cc7565b60405190151581526020016101ed565b6101e36102b13660046116ea565b60096020526000908152604090205481565b6101c1610cf1565b6101e36102d9366004611688565b600e6020526000908152604090205481565b6101c16102f9366004611705565b610d03565b6101e361030c366004611688565b611183565b6101e360065481565b6101e360055481565b6000546001600160a01b0316610239565b610392610342366004611688565b600b60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03909616969495939492939192909160ff1688565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c0830152151560e0820152610100016101ed565b6103ec6103e73660046116ea565b6112aa565b6040516101ed9190611727565b6101c1610407366004611688565b611316565b61029361041a36600461176b565b600d60209081526000928352604080842090915290825290205460ff1681565b6101e36104483660046116ea565b61134c565b6101c161045b3660046116ea565b6113c2565b6101c161046e3660046116ea565b611438565b6101e36104813660046116ea565b600a6020526000908152604090205481565b6104ba6104a1366004611688565b6008602052600090815260409020805460019091015482565b604080519283526020830191909152016101ed565b6104d7611585565b6004548111156105025760405162461bcd60e51b81526004016104f990611795565b60405180910390fd5b6000818152600b6020526040902080546001600160a01b0316336001600160a01b0316146105425760405162461bcd60e51b81526004016104f9906117f3565b600061054d83611183565b336000908152600a6020526040812080549293508392909190610571908490611853565b925050819055508082600601600082825461058c9190611853565b90915550506003546001600160a01b031663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af11580156105f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610614919061186c565b6106305760405162461bcd60e51b81526004016104f990611889565b60028201546000908152600f602052604090205461064f908290611853565b60028301546000908152600f6020526040902055336001600160a01b03167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72418260405161069e91815260200190565b60405180910390a250506106b160018055565b50565b6106bc611585565b336000908152600c6020526040812090805b825481101561080f5760008382815481106106eb576106eb6118e6565b6000918252602080832090910154808352600b909152604090912060078101549192509060ff161561076a5760405162461bcd60e51b815260206004820152602260248201527f415155415374616b696e673a206f7264657220616c726561647920636c61696d604482015261195960f21b60648201526084016104f9565b600061077583611183565b90506107818186611853565b9450808260060160008282546107979190611853565b909155505060028201546000908152600f6020526040812080548392906107bf908490611853565b909155505060405181815233907f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72419060200160405180910390a25050508080610807906118fc565b9150506106ce565b506003546001600160a01b031663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af115801561086f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610893919061186c565b6108af5760405162461bcd60e51b81526004016104f990611889565b60405181815233907f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f7241906020015b60405180910390a250506108f060018055565b565b6108fa611585565b336000908152600c6020526040812090805b82548110156109fb576000838281548110610929576109296118e6565b6000918252602080832090910154808352600b909152604090912060078101549192509060ff161561096d5760405162461bcd60e51b81526004016104f990611915565b600181015461097c9085611853565b60078201805460ff1916600117905593506109943390565b6001820154604080518281526020810183905280820192909252516001600160a01b0392909216917f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca949181900360600190a2505080806109f3906118fc565b91505061090c565b506002546001600160a01b031663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7f919061186c565b610a9b5760405162461bcd60e51b81526004016104f990611958565b80600754610aa991906119ad565b6007553360009081526009602052604081208054839290610acb9084906119ad565b909155505060405181815233907fd7a4aa9f3dca5f6606ac15d7e1850920201bbb02c38cd986793779f58ae0dfd3906020016108dd565b610b0a611585565b600454811115610b2c5760405162461bcd60e51b81526004016104f990611795565b6000818152600b6020526040902080546001600160a01b0316336001600160a01b031614610b6c5760405162461bcd60e51b81526004016104f9906117f3565b600781015460ff1615610b915760405162461bcd60e51b81526004016104f990611915565b60018101543360009081526009602052604081208054839290610bb59084906119ad565b90915550506001820154600754610bcc91906119ad565b60079081558201805460ff191660011790556002546001600160a01b031663a9059cbb610bf63390565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c67919061186c565b610c835760405162461bcd60e51b81526004016104f990611958565b60018201546040805191825260208201839052810182905233907f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca949060600161069e565b6000610cd16115de565b506003805460ff60a01b1916600160a01b8315150217905560015b919050565b610cf96115de565b6108f06000611638565b60008181526008602052604090208054610d6e5760405162461bcd60e51b815260206004820152602660248201527f415155415374616b696e673a2061736b656420706f6f6c20646f6573206e6f7460448201526508195e1a5cdd60d21b60648201526084016104f9565b600354600160a01b900460ff16610dd35760405162461bcd60e51b8152602060048201526024808201527f415155415374616b696e673a207374616b696e67206e6f7420796574207374616044820152631c9d195960e21b60648201526084016104f9565b60008311610e365760405162461bcd60e51b815260206004820152602a60248201527f415155415374616b696e673a207374616b6520616d6f756e74206d757374206260448201526965206e6f6e207a65726f60b01b60648201526084016104f9565b6002546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018690526064016020604051808303816000875af1158015610e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebf919061186c565b610f315760405162461bcd60e51b815260206004820152603860248201527f415155415374616b696e673a2041515541207472616e7366657246726f6d207660448201527f6961206465706f736974206e6f7420737563636565646564000000000000000060648201526084016104f9565b604051806101000160405280610f443390565b6001600160a01b031681526020018481526020018260000154815260200182600101548152602001428152602001826000015442610f829190611853565b81526020016000815260200160001515815250600b6000600460008154610fa8906118fc565b9182905550815260208082019290925260409081016000908120845181546001600160a01b0319166001600160a01b03909116178155848401516001820155848301516002820155606085015160038201556080850151600482015560a0850151600582015560c0850151600682015560e0909401516007909401805460ff191694151594909417909355338352600d825280832085845290915290205460ff1661108857600082815260106020526040902054611067906001611853565b600083815260106020526040902055600554611084906001611853565b6005555b336000908152600d602090815260408083208584528252808320805460ff19166001179055600e9091529020546110c0908490611853565b6000838152600e60205260409020556006546110dd908490611853565b6006556007546110ee908490611853565b6007553360009081526009602052604081208054859290611110908490611853565b9091555050336000818152600c6020908152604080832060045481546001808201845592865294849020909401939093558454928501548151888152928301529192917f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e910160405180910390a3505050565b60006004548211156111a75760405162461bcd60e51b81526004016104f990611795565b6000828152600b60205260409020600781015460ff166112a1578060050154421061122f5760006064826003015483600101546111e491906119c0565b6111ee91906119d7565b905060006301e1338083600201548361120791906119c0565b61121191906119d7565b9050600083600601548261122591906119ad565b9695505050505050565b600081600401544261124191906119ad565b9050600060648360030154846001015461125b91906119c0565b61126591906119d7565b905060006301e1338061127884846119c0565b61128291906119d7565b9050600084600601548261129691906119ad565b979650505050505050565b50600092915050565b6001600160a01b0381166000908152600c6020908152604080832080548251818502810185019093528083526060949383018282801561130957602002820191906000526020600020905b8154815260200190600101908083116112f5575b5093979650505050505050565b61131e6115de565b600160005260086020527fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac56055565b6001600160a01b0381166000908152600c6020526040812081805b82548110156113ba576000838281548110611384576113846118e6565b9060005260206000200154905061139a81611183565b6113a49084611853565b92505080806113b2906118fc565b915050611367565b509392505050565b6113ca6115de565b6001600160a01b03811661142f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104f9565b6106b181611638565b6114406115de565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ad91906119f9565b90506000600754826114bf91906119ad565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0384169063a9059cbb906044016020604051808303816000875af115801561150f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611533919061186c565b61157f5760405162461bcd60e51b815260206004820152601e60248201527f77697468647261775f746f6b656e207472616e73666572206661696c6564000060448201526064016104f9565b50505050565b6002600154036115d75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016104f9565b6002600155565b6000546001600160a01b031633146108f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104f9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561169a57600080fd5b5035919050565b80151581146106b157600080fd5b6000602082840312156116c157600080fd5b81356116cc816116a1565b9392505050565b80356001600160a01b0381168114610cec57600080fd5b6000602082840312156116fc57600080fd5b6116cc826116d3565b6000806040838503121561171857600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b8181101561175f57835183529284019291840191600101611743565b50909695505050505050565b6000806040838503121561177e57600080fd5b611787836116d3565b946020939093013593505050565b602080825260409082018190527f415155415374616b696e673a20494e56414c4944206f7264657249642c206f72908201527f64657249642067726561746572207468616e206c61746573744f726465724964606082015260800190565b6020808252602a908201527f415155415374616b696e673a2063616c6c6572206973206e6f74207468652062604082015269656e656669636961727960b01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156118665761186661183d565b92915050565b60006020828403121561187e57600080fd5b81516116cc816116a1565b6020808252603b908201527f415155415374616b696e673a207341515541207472616e73666572207669612060408201527f636c61696d2072657761726473206e6f74207375636365656465640000000000606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006001820161190e5761190e61183d565b5060010190565b60208082526023908201527f415155415374616b696e673a206f7264657220616c726561647920756e7374616040820152621ad95960ea1b606082015260800190565b60208082526035908201527f415155415374616b696e673a2041515541207472616e736665722076696120776040820152741a5d1a191c985dc81b9bdd081cdd58d8d959591959605a1b606082015260800190565b818103818111156118665761186661183d565b80820281158282048414176118665761186661183d565b6000826119f457634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611a0b57600080fd5b505191905056fea26469706673582212205cd2782d8f99482d0415753c9f6c7bd9a622ab22dc3a0b01b0648689741f29f364736f6c63430008130033

Verified Source Code Partial Match

Compiler: v0.8.19+commit.7dd6d404 EVM: paris Optimization: Yes (200 runs)
AQUAStakingv2.sol 392 lines
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
}

abstract contract Context {
    function _msgSender() internal view returns (address) {
        return msg.sender;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view returns (address) {
        return _owner;
    }

    function _checkOwner() private view {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() external onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) external onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = _NOT_ENTERED;
    }

    function _reentrancyGuardEntered() private view returns (bool) {
        return _status == _ENTERED;
    }
}

contract AQUAStakingv2 is Ownable, ReentrancyGuard {
    struct PoolInfo {
        uint256 lockupDuration;
        uint256 returnPer;
    }
    struct OrderInfo {
        address beneficiary;
        uint256 amount;
        uint256 lockupDuration;
        uint256 returnPer;
        uint256 starttime;
        uint256 endtime;
        uint256 claimedReward;
        bool claimed;
    }
    uint256 private constant _1Year =  365 days ; 
    uint256 private constant _days365 = 365 days; 
    IERC20 public AQUA;
    IERC20 public sAQUA;

    bool private started = true;
    uint256 private latestOrderId = 0;
    uint256 public totalStakers;
    uint256 public totalStaked;
    uint256 public currentStaked;

    mapping(uint256 => PoolInfo) public pooldata;
    mapping(address => uint256) public balanceOf;
    mapping(address => uint256) public totalRewardEarn;
    mapping(uint256 => OrderInfo) public orders;
    mapping(address => uint256[]) private orderIds;
    mapping(address => mapping(uint256 => bool)) public hasStaked;
    mapping(uint256 => uint256) public stakeOnPool;
    mapping(uint256 => uint256) public rewardOnPool;
    mapping(uint256 => uint256) public stakersPlan;

    event Deposit(
        address indexed user,
        uint256 indexed lockupDuration,
        uint256 amount,
        uint256 returnPer
    );
    event Withdraw(
        address indexed user,
        uint256 amount,
        uint256 reward,
        uint256 total
    );
    event WithdrawAll(address indexed user, uint256 amount);
    event RewardClaimed(address indexed user, uint256 reward);

    constructor(
        address _aquaAddress,
        address _saquaAddress,
        uint256 _apy
    ) {
        AQUA = IERC20(_aquaAddress);
        sAQUA = IERC20(_saquaAddress);
        pooldata[1].lockupDuration = _1Year;
        pooldata[1].returnPer = _apy;
    }

    function stake(uint256 _amount, uint256 _lockupDuration) external {
        PoolInfo storage pool = pooldata[_lockupDuration];
        require(
            pool.lockupDuration > 0,
            "AQUAStaking: asked pool does not exist"
        );
        require(started, "AQUAStaking: staking not yet started");
        require(_amount > 0, "AQUAStaking: stake amount must be non zero");
        require(
            AQUA.transferFrom(_msgSender(), address(this), _amount),
            "AQUAStaking: AQUA transferFrom via deposit not succeeded"
        );

        orders[++latestOrderId] = OrderInfo(
            _msgSender(),
            _amount,
            pool.lockupDuration,
            pool.returnPer,
            block.timestamp,
            block.timestamp + pool.lockupDuration,
            0,
            false
        );

        if (!hasStaked[msg.sender][_lockupDuration]) {
            stakersPlan[_lockupDuration] = stakersPlan[_lockupDuration] + 1;
            totalStakers = totalStakers + 1;
        }

        //updating staking status

        hasStaked[msg.sender][_lockupDuration] = true;
        stakeOnPool[_lockupDuration] = stakeOnPool[_lockupDuration] + _amount;
        totalStaked = totalStaked + _amount;
        currentStaked = currentStaked + _amount;
        balanceOf[_msgSender()] += _amount;
        orderIds[_msgSender()].push(latestOrderId);
        emit Deposit(
            _msgSender(),
            pool.lockupDuration,
            _amount,
            pool.returnPer
        );
    }

    function unStake(uint256 orderId) external nonReentrant {
        require(
            orderId <= latestOrderId,
            "AQUAStaking: INVALID orderId, orderId greater than latestOrderId"
        );

        OrderInfo storage orderInfo = orders[orderId];
        require(
            _msgSender() == orderInfo.beneficiary,
            "AQUAStaking: caller is not the beneficiary"
        );
        require(!orderInfo.claimed, "AQUAStaking: order already unstaked");
        uint256 total = orderInfo.amount ;
        balanceOf[_msgSender()] -= orderInfo.amount;
        currentStaked = currentStaked - orderInfo.amount ;
        orderInfo.claimed = true;

        require(
            AQUA.transfer(address(_msgSender()), total),
            "AQUAStaking: AQUA transfer via withdraw not succeeded"
        );
        emit Withdraw(_msgSender(), orderInfo.amount, total, total);
    }

    function claimRewards(uint256 orderId) external nonReentrant {
        require(
            orderId <= latestOrderId,
            "AQUAStaking: INVALID orderId, orderId greater than latestOrderId"
        );

        OrderInfo storage orderInfo = orders[orderId];
        require(
            _msgSender() == orderInfo.beneficiary,
            "AQUAStaking: caller is not the beneficiary"
        );

        uint256 claimAvailable = pendingRewards(orderId);
        totalRewardEarn[_msgSender()] += claimAvailable;

        orderInfo.claimedReward += claimAvailable;

        require(
            sAQUA.transfer(address(_msgSender()), claimAvailable),
            "AQUAStaking: sAQUA transfer via claim rewards not succeeded"
        );
        rewardOnPool[orderInfo.lockupDuration] =
            rewardOnPool[orderInfo.lockupDuration] +
            claimAvailable;
        emit RewardClaimed(address(_msgSender()), claimAvailable);
    }

    function pendingRewards(uint256 orderId) public view returns (uint256) {
        require(
            orderId <= latestOrderId,
            "AQUAStaking: INVALID orderId, orderId greater than latestOrderId"
        );

        OrderInfo storage orderInfo = orders[orderId];
        if (!orderInfo.claimed) {
            if (block.timestamp >= orderInfo.endtime) {
                uint256 APY = (orderInfo.amount * orderInfo.returnPer) / 100;
                uint256 reward = (APY * orderInfo.lockupDuration) / _days365;
                uint256 claimAvailable = reward - orderInfo.claimedReward;
                return claimAvailable;
            } else {
                uint256 stakeTime = block.timestamp - orderInfo.starttime;
                uint256 APY = (orderInfo.amount * orderInfo.returnPer) / 100;
                uint256 reward = (APY * stakeTime) / _days365;
                uint256 claimAvailableNow = reward - orderInfo.claimedReward;
                return claimAvailableNow;
            }
        } else {
            return 0;
        }
    }

    function setPlansApy(uint256 plan1Apy) external onlyOwner {
        pooldata[1].returnPer = plan1Apy;
    }

    function toggleStaking(bool _start) external onlyOwner returns (bool) {
        started = _start;
        return true;
    }

    function investorOrderIds(address investor)
        external
        view
        returns (uint256[] memory ids)
    {
        uint256[] memory arr = orderIds[investor];
        return arr;
    }

    function withdrawERC20(address _token) external onlyOwner {
        IERC20 withdraw_token = IERC20(_token);
        uint256 balance = withdraw_token.balanceOf(address(this));
        uint256 withdrawToken = balance - currentStaked ;
        require(
            withdraw_token.transfer(msg.sender, withdrawToken),
            "withdraw_token transfer failed"
        );
    }


   function withdrawAllTokens() external nonReentrant {
    uint256[] storage userOrderIds = orderIds[_msgSender()];
    uint256 totalStakedAmount;

    for (uint256 i = 0; i < userOrderIds.length; i++) {
        uint256 orderId = userOrderIds[i];
        OrderInfo storage orderInfo = orders[orderId];

        // Ensure order is not already unstaked
        require(!orderInfo.claimed, "AQUAStaking: order already unstaked");

       
        
        totalStakedAmount += orderInfo.amount;

        // Mark order as claimed
        orderInfo.claimed = true;

        // Emit event for tokens withdrawn
        emit Withdraw(_msgSender(), orderInfo.amount, orderInfo.amount, orderInfo.amount);
    }

    // Transfer total staked amount back to user
      
    require(
        AQUA.transfer(_msgSender(), totalStakedAmount),
        "AQUAStaking: AQUA transfer via withdraw not succeeded"
    );

    currentStaked = currentStaked - totalStakedAmount;
    balanceOf[_msgSender()] -= totalStakedAmount;

    // Emit event for successful withdrawal
    emit WithdrawAll(_msgSender(), totalStakedAmount);
}

  function claimAllRemainingRewards() external nonReentrant {
    uint256[] storage userOrderIds = orderIds[_msgSender()];
    uint256 totalRewards;

    for (uint256 i = 0; i < userOrderIds.length; i++) {
        uint256 orderId = userOrderIds[i];
        OrderInfo storage orderInfo = orders[orderId];

        // Ensure order is not already claimed
        require(!orderInfo.claimed, "AQUAStaking: order already claimed");

        // Calculate and accumulate remaining rewards
        uint256 claimAvailable = pendingRewards(orderId);
        totalRewards += claimAvailable;
        orderInfo.claimedReward += claimAvailable;
        rewardOnPool[orderInfo.lockupDuration] += claimAvailable;

        // Emit event for reward claimed
        emit RewardClaimed(_msgSender(), claimAvailable);
    }

    // Transfer total rewards to user
    require(
        sAQUA.transfer(_msgSender(), totalRewards),
        "AQUAStaking: sAQUA transfer via claim rewards not succeeded"
    );

    // Emit event for successful reward claim
    emit RewardClaimed(_msgSender(), totalRewards);
}

function viewTotalPendingRewards(address user) external view returns (uint256) {
    uint256[] storage userOrderIds = orderIds[user];
    uint256 totalPendingRewards;

    for (uint256 i = 0; i < userOrderIds.length; i++) {
        uint256 orderId = userOrderIds[i];
        totalPendingRewards += pendingRewards(orderId);
    }

    return totalPendingRewards;
}


}

Read Contract

AQUA 0x63fccba9 → address
balanceOf 0x70a08231 → uint256
currentStaked 0x695464e9 → uint256
hasStaked 0xda4b2e75 → bool
investorOrderIds 0xaa604947 → uint256[]
orders 0xa85c38ef → address, uint256, uint256, uint256, uint256, uint256, uint256, bool
owner 0x8da5cb5b → address
pendingRewards 0x7dcb2abf → uint256
pooldata 0xfce50f17 → uint256, uint256
rewardOnPool 0x1a6c5e7e → uint256
sAQUA 0x336a57f3 → address
stakeOnPool 0x799102a2 → uint256
stakersPlan 0x2c26afae → uint256
totalRewardEarn 0xfa1e1514 → uint256
totalStaked 0x817b1cd2 → uint256
totalStakers 0x86989038 → uint256
viewTotalPendingRewards 0xe8becf02 → uint256

Write Contract 10 functions

These functions modify contract state and require a wallet transaction to execute.

claimAllRemainingRewards 0x1ec9d10f
No parameters
claimRewards 0x0962ef79
uint256 orderId
renounceOwnership 0x715018a6
No parameters
setPlansApy 0xb9b2cf96
uint256 plan1Apy
stake 0x7b0472f0
uint256 _amount
uint256 _lockupDuration
toggleStaking 0x69805981
bool _start
returns: bool
transferOwnership 0xf2fde38b
address newOwner
unStake 0x5d3eea91
uint256 orderId
withdrawAllTokens 0x280da6fa
No parameters
withdrawERC20 0xf4f3b200
address _token

Recent Transactions

No transactions found for this address