Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
19940961 | 182 days ago | 10 ETH | ||||
19940806 | 182 days ago | 10 ETH | ||||
19770056 | 206 days ago | 10 ETH | ||||
19770023 | 206 days ago | 10 ETH | ||||
19718899 | 213 days ago | 10 ETH | ||||
19712423 | 214 days ago | 10 ETH | ||||
19568554 | 234 days ago | 10 ETH | ||||
19567780 | 235 days ago | 10 ETH | ||||
19511924 | 242 days ago | 10 ETH | ||||
19476316 | 247 days ago | 10 ETH | ||||
19470126 | 248 days ago | 10 ETH | ||||
19413091 | 256 days ago | 10 ETH | ||||
19411321 | 257 days ago | 10 ETH | ||||
19362708 | 263 days ago | 10 ETH | ||||
19361056 | 264 days ago | 10 ETH | ||||
19312107 | 270 days ago | 11 ETH | ||||
19311456 | 271 days ago | 11 ETH | ||||
19262688 | 277 days ago | 11 ETH | ||||
19262478 | 277 days ago | 11 ETH | ||||
19212946 | 284 days ago | 11 ETH | ||||
19212820 | 284 days ago | 11 ETH | ||||
19169419 | 290 days ago | 11 ETH | ||||
19169118 | 290 days ago | 11 ETH | ||||
19113073 | 298 days ago | 11 ETH | ||||
19112965 | 298 days ago | 11 ETH |
Loading...
Loading
Contract Name:
RewardsDistribution
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 888888 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.20; // LooksRare unopinionated libraries import {LowLevelERC20Transfer} from "@looksrare/contracts-libs/contracts/lowLevelCallers/LowLevelERC20Transfer.sol"; import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; import {IWETH} from "@looksrare/contracts-libs/contracts/interfaces/generic/IWETH.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {IStakingRewards} from "./interfaces/IStakingRewards.sol"; import {IRewardsDistribution} from "./interfaces/IRewardsDistribution.sol"; /** * @title RewardsDistribution * @notice This contract is used to receive protocol fees and transfer them to StakingRewards. * StakingRewards is expected to receive WETH and the call notifyRewardAmount, * so this contract will convert ETH to WETH before notifying StakingRewards. * @author LooksRare protocol team (👀,💎) */ contract RewardsDistribution is LowLevelERC20Transfer, AccessControl { /** * @notice StakingRewards contract address */ IStakingRewards public stakingRewards; /** * @notice WETH contract address */ IWETH public immutable WETH; /** * @notice Operators can transfer ETH to StakingRewards. */ bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE"); event StakingRewardsUpdated(address _stakingRewards); event StakingRewardsRewardsDistributionUpdated(address _rewardsDistribution); error RewardsDistribution__NothingToTransfer(); /** * @param _weth WETH contract address * @param _defaultAdmin Default admin address */ constructor(address _weth, address _defaultAdmin) { WETH = IWETH(_weth); _grantRole(DEFAULT_ADMIN_ROLE, _defaultAdmin); _grantRole(OPERATOR_ROLE, _defaultAdmin); } /** * @notice Set staking rewards. Only callable by contract owner. * @param _stakingRewards StakingRewards contract address */ function setStakingRewards(address _stakingRewards) external onlyRole(DEFAULT_ADMIN_ROLE) { stakingRewards = IStakingRewards(_stakingRewards); emit StakingRewardsUpdated(_stakingRewards); } /** * @notice Transfer ETH to staking rewards */ function transferETH() external onlyRole(OPERATOR_ROLE) { uint256 ethBalance = address(this).balance; if (ethBalance != 0) { WETH.deposit{value: ethBalance}(); } uint256 wethBalance = IERC20(address(WETH)).balanceOf(address(this)); if (wethBalance == 0) { revert RewardsDistribution__NothingToTransfer(); } _executeERC20DirectTransfer(address(WETH), address(stakingRewards), wethBalance); stakingRewards.notifyRewardAmount(wethBalance); } /** * @notice Recover stuck ERC-20 tokens * @param currency ERC-20 currency address * @param to Address to send the tokens to */ function recoverERC20(address currency, address to) external onlyRole(DEFAULT_ADMIN_ROLE) { uint256 balance = IERC20(currency).balanceOf(address(this)); if (balance == 0) { revert RewardsDistribution__NothingToTransfer(); } _executeERC20DirectTransfer(currency, to, balance); } /** * @notice Recover stuck ERC-20 tokens in staking rewards * @param currency ERC20 currency address * @param to Address to send the tokens to */ function recoverERC20InStakingRewards(address currency, address to) external onlyRole(DEFAULT_ADMIN_ROLE) { stakingRewards.recoverERC20(currency, to, IERC20(currency).balanceOf(address(stakingRewards))); } /** * @notice Set staking rewards' new rewards distribution contract * @param rewardsDistribution New rewards distribution address */ function setNewRewardsDistribution(address rewardsDistribution) external onlyRole(DEFAULT_ADMIN_ROLE) { if (IRewardsDistribution(rewardsDistribution).isRewardsDistribution()) { stakingRewards.setNewRewardsDistribution(rewardsDistribution); emit StakingRewardsRewardsDistributionUpdated(rewardsDistribution); } } /** * @notice Check if this contract is RewardsDistribution compatible. */ function isRewardsDistribution() external pure returns (bool) { return true; } receive() external payable {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; // Interfaces import {IERC20} from "../interfaces/generic/IERC20.sol"; // Errors import {ERC20TransferFail, ERC20TransferFromFail} from "../errors/LowLevelErrors.sol"; import {NotAContract} from "../errors/GenericErrors.sol"; /** * @title LowLevelERC20Transfer * @notice This contract contains low-level calls to transfer ERC20 tokens. * @author LooksRare protocol team (👀,💎) */ contract LowLevelERC20Transfer { /** * @notice Execute ERC20 transferFrom * @param currency Currency address * @param from Sender address * @param to Recipient address * @param amount Amount to transfer */ function _executeERC20TransferFrom(address currency, address from, address to, uint256 amount) internal { if (currency.code.length == 0) { revert NotAContract(); } (bool status, bytes memory data) = currency.call(abi.encodeCall(IERC20.transferFrom, (from, to, amount))); if (!status) { revert ERC20TransferFromFail(); } if (data.length > 0) { if (!abi.decode(data, (bool))) { revert ERC20TransferFromFail(); } } } /** * @notice Execute ERC20 (direct) transfer * @param currency Currency address * @param to Recipient address * @param amount Amount to transfer */ function _executeERC20DirectTransfer(address currency, address to, uint256 amount) internal { if (currency.code.length == 0) { revert NotAContract(); } (bool status, bytes memory data) = currency.call(abi.encodeCall(IERC20.transfer, (to, amount))); if (!status) { revert ERC20TransferFail(); } if (data.length > 0) { if (!abi.decode(data, (bool))) { revert ERC20TransferFail(); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol) pragma solidity ^0.8.20; import {IAccessControl} from "./IAccessControl.sol"; import {Context} from "../utils/Context.sol"; import {ERC165} from "../utils/introspection/ERC165.sol"; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ```solidity * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ```solidity * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules} * to enforce additional security measures for this role. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address account => bool) hasRole; bytes32 adminRole; } mapping(bytes32 role => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with an {AccessControlUnauthorizedAccount} error including the required role. */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual returns (bool) { return _roles[role].hasRole[account]; } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()` * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier. */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account` * is missing `role`. */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert AccessControlUnauthorizedAccount(account, role); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleGranted} event. */ function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleRevoked} event. */ function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `callerConfirmation`. * * May emit a {RoleRevoked} event. */ function renounceRole(bytes32 role, address callerConfirmation) public virtual { if (callerConfirmation != _msgSender()) { revert AccessControlBadConfirmation(); } _revokeRole(role, callerConfirmation); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted. * * Internal function without access restriction. * * May emit a {RoleGranted} event. */ function _grantRole(bytes32 role, address account) internal virtual returns (bool) { if (!hasRole(role, account)) { _roles[role].hasRole[account] = true; emit RoleGranted(role, account, _msgSender()); return true; } else { return false; } } /** * @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked. * * Internal function without access restriction. * * May emit a {RoleRevoked} event. */ function _revokeRole(bytes32 role, address account) internal virtual returns (bool) { if (hasRole(role, account)) { _roles[role].hasRole[account] = false; emit RoleRevoked(role, account, _msgSender()); return true; } else { return false; } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address dst, uint256 wad) external returns (bool); function withdraw(uint256 wad) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.7; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; /// @title IStakingRewardsFunctions /// @notice Interface for the staking rewards contract that interact with the `RewardsDistributor` contract interface IStakingRewardsFunctions { function notifyRewardAmount(uint256 reward) external; function recoverERC20(address tokenAddress, address to, uint256 tokenAmount) external; function setNewRewardsDistribution(address newRewardsDistribution) external; } /// @title IStakingRewards /// @notice Previous interface with additionnal getters for public variables interface IStakingRewards is IStakingRewardsFunctions { function periodFinish() external view returns (uint256); function rewardToken() external view returns (IERC20); function getReward() external; function stake(uint256 amount) external; function withdraw(uint256 amount) external; function balanceOf(address account) external view returns (uint256); function earned(address account) external view returns (uint256); function stakeOnBehalf(uint256 amount, address staker) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.20; interface IRewardsDistribution { function isRewardsDistribution() external pure returns (bool); function transferETH() external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address from, address to, uint256 amount) external returns (bool); function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; /** * @notice It is emitted if the ETH transfer fails. */ error ETHTransferFail(); /** * @notice It is emitted if the ERC20 approval fails. */ error ERC20ApprovalFail(); /** * @notice It is emitted if the ERC20 transfer fails. */ error ERC20TransferFail(); /** * @notice It is emitted if the ERC20 transferFrom fails. */ error ERC20TransferFromFail(); /** * @notice It is emitted if the ERC721 transferFrom fails. */ error ERC721TransferFromFail(); /** * @notice It is emitted if the ERC1155 safeTransferFrom fails. */ error ERC1155SafeTransferFromFail(); /** * @notice It is emitted if the ERC1155 safeBatchTransferFrom fails. */ error ERC1155SafeBatchTransferFromFail();
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; /** * @notice It is emitted if the call recipient is not a contract. */ error NotAContract();
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/IAccessControl.sol) pragma solidity ^0.8.20; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev The `account` is missing a role. */ error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); /** * @dev The caller of a function is not the expected one. * * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}. */ error AccessControlBadConfirmation(); /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `callerConfirmation`. */ function renounceRole(bytes32 role, address callerConfirmation) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "remappings": [ "@ensdomains/=node_modules/@ensdomains/", "@looksrare/=node_modules/@looksrare/", "@openzeppelin/=node_modules/@openzeppelin/", "@uniswap/=node_modules/@uniswap/", "base64-sol/=node_modules/base64-sol/", "ds-test/=lib/forge-std/lib/ds-test/src/", "eth-gas-reporter/=node_modules/eth-gas-reporter/", "forge-std/=lib/forge-std/src/", "hardhat/=node_modules/hardhat/", "solmate/=node_modules/solmate/" ], "optimizer": { "enabled": true, "runs": 888888 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "viaIR": true, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_defaultAdmin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ERC20TransferFail","type":"error"},{"inputs":[],"name":"NotAContract","type":"error"},{"inputs":[],"name":"RewardsDistribution__NothingToTransfer","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_rewardsDistribution","type":"address"}],"name":"StakingRewardsRewardsDistributionUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_stakingRewards","type":"address"}],"name":"StakingRewardsUpdated","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRewardsDistribution","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"recoverERC20InStakingRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rewardsDistribution","type":"address"}],"name":"setNewRewardsDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingRewards","type":"address"}],"name":"setStakingRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingRewards","outputs":[{"internalType":"contract IStakingRewards","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a034620000a757601f6200130f38819003918201601f19168301916001600160401b03831184841017620000ac578084926040948552833981010312620000a757806200005f6020620000576200007f94620000c2565b9201620000c2565b6001600160a01b039091166080526200007881620000d7565b5062000157565b506040516110f59081620001fa82396080518181816103430152818161048901526105f10152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620000a757565b6001600160a01b031660008181527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604081205490919060ff166200015357818052816020526040822081835260205260408220600160ff198254161790553391600080516020620012ef8339815191528180a4600190565b5090565b6001600160a01b031660008181527fee57cd81e84075558e8fcc182a1f4393f91fc97f963a136e66b7f949a62f319f60205260408120549091907f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9299060ff16620001f457808352826020526040832082845260205260408320600160ff19825416179055600080516020620012ef833981519152339380a4600190565b50509056fe608060409080825260049182361015610023575b505050361561002157600080fd5b005b600091823560e01c90816301ffc9a714610bb857508063248a9ca314610b705780632f2ff15d14610b2857806336568abe14610a9f57806364b87a7014610a4d5780636fb83a57146109a0578063873291bb14610812578063886f039a146106f757806391d14854146106865780639c18b5411461064d578063a217fddf14610615578063ad5c4648146105a7578063d547741f1461054a578063e28d717b146102ae57909180938263ec0a725d1461014357505063f5b541a6146100e85780610013565b3461013f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602090517f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9298152f35b5080fd5b915091346102aa57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102aa5761017c610c98565b610184610c75565b9261018d610edd565b73ffffffffffffffffffffffffffffffffffffffff8080600154169316918451917f70a082310000000000000000000000000000000000000000000000000000000083528482840152602083602481875afa9283156102a0578893610265575b50843b1561026157879460649386928851998a9788967f1171bda900000000000000000000000000000000000000000000000000000000885287015216602485015260448401525af190811561025857506102455750f35b61024e90610cbb565b6102555780f35b80fd5b513d84823e3d90fd5b8780fd5b975091506020873d8211610298575b8161028160209383610cfe565b810103126102935787965191386101ed565b600080fd5b3d9150610274565b86513d8a823e3d90fd5b5050fd5b503461013f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f577f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9299081600052602091600083528160002033600052835260ff8260002054161561051457504780610472575b5073ffffffffffffffffffffffffffffffffffffffff93847f0000000000000000000000000000000000000000000000000000000000000000169482517f70a08231000000000000000000000000000000000000000000000000000000008152308382015284816024818a5afa948515610468578695610438575b50508315610410576103bd848697836001541690610d57565b6001541692833b1561040c576024859283855196879485937f3c6b16ab0000000000000000000000000000000000000000000000000000000085528401525af190811561025857506102455750f35b8480fd5b5090517fd2a490db000000000000000000000000000000000000000000000000000000008152fd5b9080929550813d8311610461575b6104508183610cfe565b8101031261029357519238806103a4565b503d610446565b84513d88823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b1561040c578490868451809481937fd0e30db00000000000000000000000000000000000000000000000000000000083525af1801561050a579084916104f2575b50610329565b6104fb90610cbb565b6105065782386104ec565b8280fd5b82513d86823e3d90fd5b849060449251917fe2517d3f00000000000000000000000000000000000000000000000000000000835233908301526024820152fd5b5082903461050657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610506576105a3913561059e600161058d610c75565b938387528660205286200154610f4e565b61101e565b5080f35b503461013f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461013f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5751908152602090f35b503461013f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576020905160018152f35b50823461050657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105065773ffffffffffffffffffffffffffffffffffffffff826020946106d7610c75565b93358152808652209116600052825260ff81600020541690519015158152f35b503461013f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5761072e610c98565b610736610c75565b9061073f610edd565b8251927f70a08231000000000000000000000000000000000000000000000000000000008452308685015260208460248173ffffffffffffffffffffffffffffffffffffffff86165afa9384156108085785946107d5575b5083156107ad57506107aa939450610d57565b80f35b8590517fd2a490db000000000000000000000000000000000000000000000000000000008152fd5b9093506020813d8211610800575b816107f060209383610cfe565b8101031261029357519238610797565b3d91506107e3565b81513d87823e3d90fd5b508290346105065760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105065761084c610c98565b91610855610edd565b8373ffffffffffffffffffffffffffffffffffffffff8094169383517f9c18b5410000000000000000000000000000000000000000000000000000000081526020818581895afa908115610996578391610968575b506108b3575080f35b6001541691823b1561013f576024859183865195869485937f873291bb0000000000000000000000000000000000000000000000000000000085528401525af1801561050a57610930575b507f1f782e1e65b8b4769f849bbc9d8d96851099c290000cab78e960f25f838ecbe19160209151908152a18180808380f35b916020919361095f7f1f782e1e65b8b4769f849bbc9d8d96851099c290000cab78e960f25f838ecbe194610cbb565b939150916108fe565b610989915060203d811161098f575b6109818183610cfe565b810190610d3f565b876108aa565b503d610977565b85513d85823e3d90fd5b503461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760207f551390b523f91b5d9df0281cbb04db779545fbfa265f5fcde47668f4d4e160069173ffffffffffffffffffffffffffffffffffffffff610a11610c98565b610a19610edd565b1690817fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015551908152a180f35b503461013f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b503461013f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57610ad6610c75565b903373ffffffffffffffffffffffffffffffffffffffff831603610b0057506105a391923561101e565b8390517f6697b232000000000000000000000000000000000000000000000000000000008152fd5b5082903461050657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610506576105a39135610b6b600161058d610c75565b610f74565b5082346105065760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261050657816020936001923581528085522001549051908152f35b839085346105065760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261050657357fffffffff00000000000000000000000000000000000000000000000000000000811680910361050657602092507f7965db0b000000000000000000000000000000000000000000000000000000008114908115610c4b575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483610c44565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361029357565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361029357565b67ffffffffffffffff8111610ccf57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610ccf57604052565b90816020910312610293575180151581036102935790565b9190823b15610eb3576040519173ffffffffffffffffffffffffffffffffffffffff60208401927fa9059cbb000000000000000000000000000000000000000000000000000000008452166024840152604483015260448252608082019167ffffffffffffffff9281811084821117610ccf57604052600093849283809351925af1903d15610ea9573d908111610e7c5760405190610e1e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160183610cfe565b8152809260203d92013e5b15610e525780519081610e3a575050565b602080610e4b938301019101610d3f565b15610e5257565b60046040517ff1568f95000000000000000000000000000000000000000000000000000000008152fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b5060609150610e29565b60046040517f09ee12d5000000000000000000000000000000000000000000000000000000008152fd5b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604081205460ff1615610f175750565b604490604051907fe2517d3f0000000000000000000000000000000000000000000000000000000082523360048301526024820152fd5b80600052600060205260406000203360005260205260ff6040600020541615610f175750565b906000918083528260205273ffffffffffffffffffffffffffffffffffffffff6040842092169182845260205260ff604084205416156000146110195780835282602052604083208284526020526040832060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b505090565b906000918083528260205273ffffffffffffffffffffffffffffffffffffffff6040842092169182845260205260ff604084205416600014611019578083528260205260408320828452602052604083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a460019056fea2646970667358221220e093259513d99d212f95fd537d5e27d24a46d2f326f710efb58dd1beccf13c9364736f6c634300081400332f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000bfb6669ef4c4c71ae6e722526b1b8d7d9ff9a019
Deployed Bytecode
0x608060409080825260049182361015610023575b505050361561002157600080fd5b005b600091823560e01c90816301ffc9a714610bb857508063248a9ca314610b705780632f2ff15d14610b2857806336568abe14610a9f57806364b87a7014610a4d5780636fb83a57146109a0578063873291bb14610812578063886f039a146106f757806391d14854146106865780639c18b5411461064d578063a217fddf14610615578063ad5c4648146105a7578063d547741f1461054a578063e28d717b146102ae57909180938263ec0a725d1461014357505063f5b541a6146100e85780610013565b3461013f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602090517f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9298152f35b5080fd5b915091346102aa57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102aa5761017c610c98565b610184610c75565b9261018d610edd565b73ffffffffffffffffffffffffffffffffffffffff8080600154169316918451917f70a082310000000000000000000000000000000000000000000000000000000083528482840152602083602481875afa9283156102a0578893610265575b50843b1561026157879460649386928851998a9788967f1171bda900000000000000000000000000000000000000000000000000000000885287015216602485015260448401525af190811561025857506102455750f35b61024e90610cbb565b6102555780f35b80fd5b513d84823e3d90fd5b8780fd5b975091506020873d8211610298575b8161028160209383610cfe565b810103126102935787965191386101ed565b600080fd5b3d9150610274565b86513d8a823e3d90fd5b5050fd5b503461013f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f577f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9299081600052602091600083528160002033600052835260ff8260002054161561051457504780610472575b5073ffffffffffffffffffffffffffffffffffffffff93847f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2169482517f70a08231000000000000000000000000000000000000000000000000000000008152308382015284816024818a5afa948515610468578695610438575b50508315610410576103bd848697836001541690610d57565b6001541692833b1561040c576024859283855196879485937f3c6b16ab0000000000000000000000000000000000000000000000000000000085528401525af190811561025857506102455750f35b8480fd5b5090517fd2a490db000000000000000000000000000000000000000000000000000000008152fd5b9080929550813d8311610461575b6104508183610cfe565b8101031261029357519238806103a4565b503d610446565b84513d88823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216803b1561040c578490868451809481937fd0e30db00000000000000000000000000000000000000000000000000000000083525af1801561050a579084916104f2575b50610329565b6104fb90610cbb565b6105065782386104ec565b8280fd5b82513d86823e3d90fd5b849060449251917fe2517d3f00000000000000000000000000000000000000000000000000000000835233908301526024820152fd5b5082903461050657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610506576105a3913561059e600161058d610c75565b938387528660205286200154610f4e565b61101e565b5080f35b503461013f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576020905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2168152f35b503461013f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5751908152602090f35b503461013f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576020905160018152f35b50823461050657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105065773ffffffffffffffffffffffffffffffffffffffff826020946106d7610c75565b93358152808652209116600052825260ff81600020541690519015158152f35b503461013f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5761072e610c98565b610736610c75565b9061073f610edd565b8251927f70a08231000000000000000000000000000000000000000000000000000000008452308685015260208460248173ffffffffffffffffffffffffffffffffffffffff86165afa9384156108085785946107d5575b5083156107ad57506107aa939450610d57565b80f35b8590517fd2a490db000000000000000000000000000000000000000000000000000000008152fd5b9093506020813d8211610800575b816107f060209383610cfe565b8101031261029357519238610797565b3d91506107e3565b81513d87823e3d90fd5b508290346105065760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105065761084c610c98565b91610855610edd565b8373ffffffffffffffffffffffffffffffffffffffff8094169383517f9c18b5410000000000000000000000000000000000000000000000000000000081526020818581895afa908115610996578391610968575b506108b3575080f35b6001541691823b1561013f576024859183865195869485937f873291bb0000000000000000000000000000000000000000000000000000000085528401525af1801561050a57610930575b507f1f782e1e65b8b4769f849bbc9d8d96851099c290000cab78e960f25f838ecbe19160209151908152a18180808380f35b916020919361095f7f1f782e1e65b8b4769f849bbc9d8d96851099c290000cab78e960f25f838ecbe194610cbb565b939150916108fe565b610989915060203d811161098f575b6109818183610cfe565b810190610d3f565b876108aa565b503d610977565b85513d85823e3d90fd5b503461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760207f551390b523f91b5d9df0281cbb04db779545fbfa265f5fcde47668f4d4e160069173ffffffffffffffffffffffffffffffffffffffff610a11610c98565b610a19610edd565b1690817fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015551908152a180f35b503461013f57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b503461013f57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57610ad6610c75565b903373ffffffffffffffffffffffffffffffffffffffff831603610b0057506105a391923561101e565b8390517f6697b232000000000000000000000000000000000000000000000000000000008152fd5b5082903461050657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610506576105a39135610b6b600161058d610c75565b610f74565b5082346105065760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261050657816020936001923581528085522001549051908152f35b839085346105065760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261050657357fffffffff00000000000000000000000000000000000000000000000000000000811680910361050657602092507f7965db0b000000000000000000000000000000000000000000000000000000008114908115610c4b575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483610c44565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361029357565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361029357565b67ffffffffffffffff8111610ccf57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610ccf57604052565b90816020910312610293575180151581036102935790565b9190823b15610eb3576040519173ffffffffffffffffffffffffffffffffffffffff60208401927fa9059cbb000000000000000000000000000000000000000000000000000000008452166024840152604483015260448252608082019167ffffffffffffffff9281811084821117610ccf57604052600093849283809351925af1903d15610ea9573d908111610e7c5760405190610e1e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160183610cfe565b8152809260203d92013e5b15610e525780519081610e3a575050565b602080610e4b938301019101610d3f565b15610e5257565b60046040517ff1568f95000000000000000000000000000000000000000000000000000000008152fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b5060609150610e29565b60046040517f09ee12d5000000000000000000000000000000000000000000000000000000008152fd5b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604081205460ff1615610f175750565b604490604051907fe2517d3f0000000000000000000000000000000000000000000000000000000082523360048301526024820152fd5b80600052600060205260406000203360005260205260ff6040600020541615610f175750565b906000918083528260205273ffffffffffffffffffffffffffffffffffffffff6040842092169182845260205260ff604084205416156000146110195780835282602052604083208284526020526040832060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d339380a4600190565b505090565b906000918083528260205273ffffffffffffffffffffffffffffffffffffffff6040842092169182845260205260ff604084205416600014611019578083528260205260408320828452602052604083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a460019056fea2646970667358221220e093259513d99d212f95fd537d5e27d24a46d2f326f710efb58dd1beccf13c9364736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000bfb6669ef4c4c71ae6e722526b1b8d7d9ff9a019
-----Decoded View---------------
Arg [0] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : _defaultAdmin (address): 0xBfb6669Ef4C4c71ae6E722526B1B8d7d9ff9a019
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 000000000000000000000000bfb6669ef4c4c71ae6e722526b1b8d7d9ff9a019
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.