Address Contract Partially Verified
Address
0x2E162fa42d723685A171a2bf64dACf901fCfC286
Balance
0 ETH
Nonce
1
Code Size
6728 bytes
Creator
0x9B39e4D7...0027 at tx 0xcb228cbc...b707cf
Indexed Transactions
0
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