More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 403 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Get Reward | 18053707 | 504 days ago | IN | 0 ETH | 0.001026 | ||||
Get Reward | 17351860 | 603 days ago | IN | 0 ETH | 0.00202518 | ||||
Get Reward | 17350583 | 603 days ago | IN | 0 ETH | 0.00162698 | ||||
Get Reward | 17131149 | 634 days ago | IN | 0 ETH | 0.00167639 | ||||
Get Reward | 17077885 | 641 days ago | IN | 0 ETH | 0.00362241 | ||||
Get Reward | 17074020 | 642 days ago | IN | 0 ETH | 0.00729533 | ||||
Get Reward | 17055291 | 644 days ago | IN | 0 ETH | 0.00185136 | ||||
Get Reward | 17049800 | 645 days ago | IN | 0 ETH | 0.0019271 | ||||
Get Reward | 17039172 | 647 days ago | IN | 0 ETH | 0.00231085 | ||||
Get Reward | 17038497 | 647 days ago | IN | 0 ETH | 0.00359607 | ||||
Get Reward | 16839423 | 675 days ago | IN | 0 ETH | 0.00230132 | ||||
Withdraw | 16819730 | 678 days ago | IN | 0 ETH | 0.00514569 | ||||
Get Reward | 16818444 | 678 days ago | IN | 0 ETH | 0.00252994 | ||||
Withdraw | 16818406 | 678 days ago | IN | 0 ETH | 0.00195438 | ||||
Get Reward | 16818362 | 678 days ago | IN | 0 ETH | 0.00215092 | ||||
Withdraw | 16818342 | 678 days ago | IN | 0 ETH | 0.0043659 | ||||
Withdraw | 16818341 | 678 days ago | IN | 0 ETH | 0.00497895 | ||||
Get Reward | 16818330 | 678 days ago | IN | 0 ETH | 0.00223938 | ||||
Withdraw | 16818329 | 678 days ago | IN | 0 ETH | 0.00447003 | ||||
Withdraw | 16818303 | 678 days ago | IN | 0 ETH | 0.00465444 | ||||
Withdraw | 16818302 | 678 days ago | IN | 0 ETH | 0.00420432 | ||||
Get Reward | 16818281 | 678 days ago | IN | 0 ETH | 0.00335715 | ||||
Get Reward | 16818279 | 678 days ago | IN | 0 ETH | 0.00298813 | ||||
Withdraw | 16818274 | 678 days ago | IN | 0 ETH | 0.00456412 | ||||
Withdraw | 16818270 | 678 days ago | IN | 0 ETH | 0.0050827 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
||||
---|---|---|---|---|---|---|---|
18053707 | 504 days ago | 0 ETH | |||||
17077885 | 641 days ago | 0 ETH | |||||
17074020 | 642 days ago | 0 ETH | |||||
17055291 | 644 days ago | 0 ETH | |||||
17049800 | 645 days ago | 0 ETH | |||||
17038497 | 647 days ago | 0 ETH | |||||
17038151 | 647 days ago | 0 ETH | |||||
17038151 | 647 days ago | 0 ETH | |||||
16839423 | 675 days ago | 0 ETH | |||||
16819730 | 678 days ago | 0 ETH | |||||
16818444 | 678 days ago | 0 ETH | |||||
16818406 | 678 days ago | 0 ETH | |||||
16818362 | 678 days ago | 0 ETH | |||||
16818345 | 678 days ago | 0 ETH | |||||
16818345 | 678 days ago | 0 ETH | |||||
16818342 | 678 days ago | 0 ETH | |||||
16818341 | 678 days ago | 0 ETH | |||||
16818330 | 678 days ago | 0 ETH | |||||
16818329 | 678 days ago | 0 ETH | |||||
16818321 | 678 days ago | 0 ETH | |||||
16818321 | 678 days ago | 0 ETH | |||||
16818303 | 678 days ago | 0 ETH | |||||
16818302 | 678 days ago | 0 ETH | |||||
16818287 | 678 days ago | 0 ETH | |||||
16818287 | 678 days ago | 0 ETH |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xE5aFE81e...8ce74D570 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
StakingRewards
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // Inheritance import "./interfaces/IStakingRewards.sol"; import "./RewardsDistributionRecipient.sol"; import "./vendor/ReentrancyGuard.sol"; import "./Pausable.sol"; // Internal references import "./Utils.sol"; // Original contract can be found under the following link: // https://github.com/Synthetixio/synthetix/blob/master/contracts/StakingRewards.sol contract StakingRewards is IStakingRewards, RewardsDistributionRecipient, ReentrancyGuard, Pausable { /* ========== STATE VARIABLES ========== */ address immutable public rewardsToken; address immutable public stakingToken; uint256 public periodFinish = 0; uint256 public rewardRate = 0; uint256 public rewardsDuration = 14 days; uint256 public lastUpdateTime; uint256 public rewardPerTokenStored; mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; uint256 private _totalSupply; mapping(address => uint256) private _balances; /* ========== CONSTRUCTOR ========== */ constructor( address _owner, address _rewardsDistribution, address _rewardsToken, address _stakingToken ) Owned(_owner) { rewardsToken = _rewardsToken; stakingToken = _stakingToken; rewardsDistribution = _rewardsDistribution; } /* ========== VIEWS ========== */ function totalSupply() external view override returns (uint256) { return _totalSupply; } function balanceOf(address account) external view override returns (uint256) { return _balances[account]; } function lastTimeRewardApplicable() public view override returns (uint256) { return block.timestamp < periodFinish ? block.timestamp : periodFinish; } function rewardPerToken() public view override returns (uint256) { if (_totalSupply == 0) { return rewardPerTokenStored; } return rewardPerTokenStored + ((lastTimeRewardApplicable() - lastUpdateTime) * rewardRate * 1e18 / _totalSupply); } function earned(address account) public view override returns (uint256) { return (_balances[account] * (rewardPerToken() - userRewardPerTokenPaid[account]) / 1e18) + rewards[account]; } function getRewardForDuration() external view override returns (uint256) { return rewardRate * rewardsDuration; } /* ========== MUTATIVE FUNCTIONS ========== */ function stake(uint subAccountId, uint256 amount) public override nonReentrant notPaused updateReward(msg.sender) { require(amount > 0, "Cannot stake 0"); address from = Utils.getSubAccount(msg.sender, subAccountId); _totalSupply = _totalSupply + amount; _balances[msg.sender] = _balances[msg.sender] + amount; Utils.safeTransferFrom(stakingToken, from, address(this), amount); emit Staked(msg.sender, amount); } function withdraw(uint subAccountId, uint256 amount) public override nonReentrant updateReward(msg.sender) { require(amount > 0, "Cannot withdraw 0"); address to = Utils.getSubAccount(msg.sender, subAccountId); _totalSupply = _totalSupply - amount; _balances[msg.sender] = _balances[msg.sender] - amount; Utils.safeTransfer(stakingToken, to, amount); emit Withdrawn(msg.sender, amount); } function getReward() public override nonReentrant updateReward(msg.sender) { uint256 reward = rewards[msg.sender]; if (reward > 0) { rewards[msg.sender] = 0; Utils.safeTransfer(rewardsToken, msg.sender, reward); emit RewardPaid(msg.sender, reward); } } function exit(uint subAccountId) public override { withdraw(subAccountId, _balances[msg.sender]); getReward(); } function stake(uint256 amount) external override { stake(0, amount); } function withdraw(uint256 amount) public override { withdraw(0, amount); } function exit() external override { exit(0); } /* ========== RESTRICTED FUNCTIONS ========== */ function notifyRewardAmount(uint256 reward) external override onlyRewardsDistribution updateReward(address(0)) { require(block.timestamp >= periodFinish, "Staking period not finished"); // Ensure the provided reward amount is not more than the balance in the contract. // This keeps the reward rate in the right range, preventing overflows due to // very high values of rewardRate in the earned and rewardsPerToken functions; uint balance = IERC20(rewardsToken).balanceOf(address(this)); require(reward <= balance, "Provided reward too high"); rewardRate = reward / rewardsDuration; lastUpdateTime = block.timestamp; periodFinish = block.timestamp + rewardsDuration; emit RewardAdded(reward); } // Added to support recovering LP Rewards from other systems such as BAL to be distributed to holders function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyOwner { require(tokenAddress != address(stakingToken), "Cannot withdraw the staking token"); Utils.safeTransfer(tokenAddress, owner, tokenAmount); emit Recovered(tokenAddress, tokenAmount); } function setRewardsDuration(uint256 _rewardsDuration) external onlyOwner { require( block.timestamp > periodFinish, "Previous rewards period must be complete before changing the duration for the new period" ); rewardsDuration = _rewardsDuration; emit RewardsDurationUpdated(rewardsDuration); } /* ========== MODIFIERS ========== */ modifier updateReward(address account) { rewardPerTokenStored = rewardPerToken(); lastUpdateTime = lastTimeRewardApplicable(); if (account != address(0)) { rewards[account] = earned(account); userRewardPerTokenPaid[account] = rewardPerTokenStored; } _; } /* ========== EVENTS ========== */ event RewardAdded(uint256 reward); event Staked(address indexed user, uint256 amount); event Withdrawn(address indexed user, uint256 amount); event RewardPaid(address indexed user, uint256 reward); event RewardsDurationUpdated(uint256 newDuration); event Recovered(address token, uint256 amount); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // Inheritance import "./Owned.sol"; // Original contract can be found under the following link: // https://github.com/Synthetixio/synthetix/blob/master/contracts/RewardsDistributionRecipient.sol abstract contract RewardsDistributionRecipient is Owned { address public rewardsDistribution; function notifyRewardAmount(uint256 reward) external virtual; modifier onlyRewardsDistribution() { require(msg.sender == rewardsDistribution, "Caller is not RewardsDistribution contract"); _; } function setRewardsDistribution(address _rewardsDistribution) external onlyOwner { rewardsDistribution = _rewardsDistribution; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // Inheritance import "./Owned.sol"; // Original contract can be found under the following link: // https://github.com/Synthetixio/synthetix/blob/master/contracts/Pausable.sol abstract contract Pausable is Owned { uint public lastPauseTime; bool public paused; constructor() { // This contract is abstract, and thus cannot be instantiated directly require(owner != address(0), "Owner must be set"); // Paused will be false, and lastPauseTime will be 0 upon initialisation } /** * @notice Change the paused state of the contract * @dev Only the contract owner may call this. */ function setPaused(bool _paused) external onlyOwner { // Ensure we're actually changing the state before we do anything if (_paused == paused) { return; } // Set our paused state. paused = _paused; // If applicable, set the last pause time. if (paused) { lastPauseTime = block.timestamp; } // Let everyone know that our pause state has changed. emit PauseChanged(paused); } event PauseChanged(bool isPaused); modifier notPaused { require(!paused, "This action cannot be performed while the contract is paused"); _; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // Original contract can be found under the following link: // https://github.com/Synthetixio/synthetix/blob/master/contracts/interfaces/IStakingRewards.sol interface IStakingRewards { // Views function balanceOf(address account) external view returns (uint256); function earned(address account) external view returns (uint256); function getRewardForDuration() external view returns (uint256); function lastTimeRewardApplicable() external view returns (uint256); function rewardPerToken() external view returns (uint256); function totalSupply() external view returns (uint256); // Mutative function exit() external; function exit(uint subAccountId) external; function getReward() external; function stake(uint256 amount) external; function stake(uint subAccountId, uint256 amount) external; function withdraw(uint256 amount) external; function withdraw(uint subAccountId, uint256 amount) external; }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; import "./interfaces/IERC20.sol"; library Utils { function safeTransferFrom(address token, address from, address to, uint value) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), string(data)); } function safeTransfer(address token, address to, uint value) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), string(data)); } function safeApprove(address token, address to, uint value) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), string(data)); } function getSubAccount(address primary, uint subAccountId) internal pure returns (address) { require(subAccountId < 256, "Sub-account id too big"); return address(uint160(primary) ^ uint160(subAccountId)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // Original contract can be found under the following link: // https://github.com/Synthetixio/synthetix/blob/master/contracts/Owned.sol abstract contract Owned { address public owner; address public nominatedOwner; constructor(address _owner) { require(_owner != address(0), "Owner address cannot be 0"); owner = _owner; emit OwnerChanged(address(0), _owner); } function nominateNewOwner(address _owner) external onlyOwner { nominatedOwner = _owner; emit OwnerNominated(_owner); } function acceptOwnership() external { require(msg.sender == nominatedOwner, "You must be nominated before you can accept ownership"); emit OwnerChanged(owner, nominatedOwner); owner = nominatedOwner; nominatedOwner = address(0); } modifier onlyOwner { _onlyOwner(); _; } function _onlyOwner() private view { require(msg.sender == owner, "Only the contract owner may perform this action"); } event OwnerNominated(address newOwner); event OwnerChanged(address oldOwner, address newOwner); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // Original contract can be found under the following link: // https://github.com/Synthetixio/synthetix/blob/master/contracts/interfaces/IERC20.sol interface IERC20 { // ERC20 Optional Views function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); // Views function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); // Mutative functions function transfer(address to, uint value) external returns (bool); function approve(address spender, uint value) external returns (bool); function transferFrom( address from, address to, uint value ) external returns (bool); // Events event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); }
{ "optimizer": { "enabled": true, "runs": 1000000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_rewardsDistribution","type":"address"},{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"_stakingToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isPaused","type":"bool"}],"name":"PauseChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"RewardsDurationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"subAccountId","type":"uint256"}],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRewardForDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastPauseTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsDistribution","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsDistribution","type":"address"}],"name":"setRewardsDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardsDuration","type":"uint256"}],"name":"setRewardsDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subAccountId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"subAccountId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102255760003560e01c806379ba50971161012a57806391b4ded9116100bd578063cd3daf9d1161008c578063df136d6511610071578063df136d65146104dd578063e9fad8ee146104e6578063ebe2b12b146104ee57600080fd5b8063cd3daf9d146104ae578063d1af0c7d146104b657600080fd5b806391b4ded914610476578063a694fc3a1461047f578063c8f33c9114610492578063cc1a378f1461049b57600080fd5b806380faa57d116100f957806380faa57d1461041b5780638980f11f146104235780638b876347146104365780638da5cb5b1461045657600080fd5b806379ba5097146103e45780637b0472f0146103ec5780637b0a47ee146103ff5780637f8661a11461040857600080fd5b8063386a9525116101bd578063441a3e701161018c5780635c975abb116101715780635c975abb1461036a57806370a082311461038757806372f702f3146103bd57600080fd5b8063441a3e701461033757806353a47bb71461034a57600080fd5b8063386a9525146102ce5780633c6b16ab146102d75780633d18b912146102ea5780633fc6df6e146102f257600080fd5b806318160ddd116101f957806318160ddd1461029857806319762143146102a05780631c1f78eb146102b35780632e1a7d4d146102bb57600080fd5b80628cc2621461022a5780630700037d146102505780631627540c1461027057806316c38b3c14610285575b600080fd5b61023d610238366004611849565b6104f7565b6040519081526020015b60405180910390f35b61023d61025e366004611849565b600c6020526000908152604090205481565b61028361027e366004611849565b61058e565b005b610283610293366004611879565b610610565b600d5461023d565b6102836102ae366004611849565b6106a4565b61023d6106f3565b6102836102c9366004611896565b61070a565b61023d60085481565b6102836102e5366004611896565b610715565b610283610a1d565b6002546103129073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610247565b6102836103453660046118af565b610b95565b6001546103129073ffffffffffffffffffffffffffffffffffffffff1681565b6005546103779060ff1681565b6040519015158152602001610247565b61023d610395366004611849565b73ffffffffffffffffffffffffffffffffffffffff166000908152600e602052604090205490565b6103127f0000000000000000000000001b808f49add4b8c6b5117d9681cf7312fcf0dc1d81565b610283610d9c565b6102836103fa3660046118af565b610ee7565b61023d60075481565b610283610416366004611896565b611173565b61023d611196565b6102836104313660046118d1565b6111ad565b61023d610444366004611849565b600b6020526000908152604090205481565b6000546103129073ffffffffffffffffffffffffffffffffffffffff1681565b61023d60045481565b61028361048d366004611896565b611309565b61023d60095481565b6102836104a9366004611896565b611314565b61023d611408565b6103127f000000000000000000000000d9fcd98c322942075a5c3860693e9f4f03aae07b81565b61023d600a5481565b61028361146a565b61023d60065481565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600c6020908152604080832054600b909252822054670de0b6b3a76400009061053a611408565b610544919061192a565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600e60205260409020546105749190611941565b61057e919061197e565b61058891906119b9565b92915050565b610596611476565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce22906020015b60405180910390a150565b610618611476565b60055460ff161515811515141561062c5750565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682151590811790915560ff161561066857426004555b60055460405160ff909116151581527f8fb6c181ee25a520cf3dd6565006ef91229fcfe5a989566c2a3b8c115570cec590602001610605565b50565b6106ac611476565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006008546007546107059190611941565b905090565b6106a1600082610b95565b60025473ffffffffffffffffffffffffffffffffffffffff1633146107c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f43616c6c6572206973206e6f742052657761726473446973747269627574696f60448201527f6e20636f6e74726163740000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60006107cb611408565b600a556107d6611196565b60095573ffffffffffffffffffffffffffffffffffffffff811615610837576107fe816104f7565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b6006544210156108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b696e6720706572696f64206e6f742066696e6973686564000000000060448201526064016107b8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000d9fcd98c322942075a5c3860693e9f4f03aae07b73ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610930573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095491906119d1565b9050808311156109c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f50726f76696465642072657761726420746f6f2068696768000000000000000060448201526064016107b8565b6008546109cd908461197e565b6007554260098190556008546109e2916119b9565b6006556040518381527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9060200160405180910390a1505050565b60026003541415610a8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107b8565b600260035533610a98611408565b600a55610aa3611196565b60095573ffffffffffffffffffffffffffffffffffffffff811615610b0457610acb816104f7565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b336000908152600c60205260409020548015610b8c57336000818152600c6020526040812055610b56907f000000000000000000000000d9fcd98c322942075a5c3860693e9f4f03aae07b908361151d565b60405181815233907fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e04869060200160405180910390a25b50506001600355565b60026003541415610c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107b8565b600260035533610c10611408565b600a55610c1b611196565b60095573ffffffffffffffffffffffffffffffffffffffff811615610c7c57610c43816104f7565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b60008211610ce6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f43616e6e6f74207769746864726177203000000000000000000000000000000060448201526064016107b8565b6000610cf23385611661565b905082600d54610d02919061192a565b600d55336000908152600e6020526040902054610d2090849061192a565b336000908152600e6020526040902055610d5b7f0000000000000000000000001b808f49add4b8c6b5117d9681cf7312fcf0dc1d828561151d565b60405183815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5906020015b60405180910390a2505060016003555050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527f2063616e20616363657074206f776e657273686970000000000000000000000060648201526084016107b8565b6000546001546040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a160018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b60026003541415610f54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107b8565b600260035560055460ff1615610fec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f5468697320616374696f6e2063616e6e6f7420626520706572666f726d65642060448201527f7768696c652074686520636f6e7472616374206973207061757365640000000060648201526084016107b8565b33610ff5611408565b600a55611000611196565b60095573ffffffffffffffffffffffffffffffffffffffff81161561106157611028816104f7565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600c6020908152604080832093909355600a54600b909152919020555b600082116110cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f43616e6e6f74207374616b65203000000000000000000000000000000000000060448201526064016107b8565b60006110d73385611661565b905082600d546110e791906119b9565b600d55336000908152600e60205260409020546111059084906119b9565b336000908152600e60205260409020556111417f0000000000000000000000001b808f49add4b8c6b5117d9681cf7312fcf0dc1d8230866116d3565b60405183815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90602001610d89565b336000908152600e602052604090205461118e908290610b95565b6106a1610a1d565b600060065442106111a8575060065490565b504290565b6111b5611476565b7f0000000000000000000000001b808f49add4b8c6b5117d9681cf7312fcf0dc1d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f43616e6e6f7420776974686472617720746865207374616b696e6720746f6b6560448201527f6e0000000000000000000000000000000000000000000000000000000000000060648201526084016107b8565b6000546112b690839073ffffffffffffffffffffffffffffffffffffffff168361151d565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a15050565b6106a1600082610ee7565b61131c611476565b60065442116113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f50726576696f7573207265776172647320706572696f64206d7573742062652060448201527f636f6d706c657465206265666f7265206368616e67696e67207468652064757260648201527f6174696f6e20666f7220746865206e657720706572696f640000000000000000608482015260a4016107b8565b60088190556040518181527ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d390602001610605565b6000600d546000141561141c5750600a5490565b600d5460075460095461142d611196565b611437919061192a565b6114419190611941565b61145390670de0b6b3a7640000611941565b61145d919061197e565b600a5461070591906119b9565b6114746000611173565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314611474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201527f6f726d207468697320616374696f6e000000000000000000000000000000000060648201526084016107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916115b49190611a1a565b6000604051808303816000865af19150503d80600081146115f1576040519150601f19603f3d011682016040523d82523d6000602084013e6115f6565b606091505b50915091508180156116205750805115806116205750808060200190518101906116209190611a36565b8190611659576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b89190611a53565b505050505050565b600061010082106116ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5375622d6163636f756e7420696420746f6f206269670000000000000000000060448201526064016107b8565b501890565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916117729190611a1a565b6000604051808303816000865af19150503d80600081146117af576040519150601f19603f3d011682016040523d82523d6000602084013e6117b4565b606091505b50915091508180156117de5750805115806117de5750808060200190518101906117de9190611a36565b8190611817576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b89190611a53565b50505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461184457600080fd5b919050565b60006020828403121561185b57600080fd5b61186482611820565b9392505050565b80151581146106a157600080fd5b60006020828403121561188b57600080fd5b81356118648161186b565b6000602082840312156118a857600080fd5b5035919050565b600080604083850312156118c257600080fd5b50508035926020909101359150565b600080604083850312156118e457600080fd5b6118ed83611820565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561193c5761193c6118fb565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611979576119796118fb565b500290565b6000826119b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082198211156119cc576119cc6118fb565b500190565b6000602082840312156119e357600080fd5b5051919050565b60005b83811015611a055781810151838201526020016119ed565b83811115611a14576000848401525b50505050565b60008251611a2c8184602087016119ea565b9190910192915050565b600060208284031215611a4857600080fd5b81516118648161186b565b6020815260008251806020840152611a728160408501602087016119ea565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220b51995688cdb3e0eed8e47dfba864ea5616e74d0bb51b3bcf3e4974553fe0f6e64736f6c634300080a0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $4.4 | 4,781.8105 | $21,054.63 |
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.