More Info
Private Name Tags
ContractCreator
Latest 5 from a total of 5 transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ReferralReward
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; // Interface for the World Address Book contract interface IAddressBook { function addressVerifiedUntil(address addr) external view returns (uint256); } /** * @title OneTimeReward * @dev A contract that allows verified accounts to reward one other user with a fixed amount of tokens, once. */ contract ReferralReward is Ownable, ReentrancyGuard { using SafeERC20 for IERC20; // The ERC20 token used for rewards IERC20 public immutable rewardToken; // Hardcoded address of the verification contract address public constant ADDRESS_BOOK = 0x57b930D551e677CC36e2fA036Ae2fe8FdaE0330D; // Fixed reward amount uint256 public constant REWARD_AMOUNT = 50 * 10**18; // 10 tokens with 18 decimals // Mapping to track who has rewarded whom (rewarder => rewarded) // If address(0), the rewarder has not rewarded anyone yet mapping(address => address) public rewardedUser; // Mapping to track how many times an address has been rewarded mapping(address => uint256) public rewardCount; // Events event RewardSent(address indexed sender, address indexed recipient, uint256 amount); event TokensDeposited(address indexed owner, uint256 amount); event TokensWithdrawn(address indexed owner, uint256 amount); /** * @dev Constructor sets the reward token * @param _rewardToken The ERC20 token to be used for rewards */ constructor(address _rewardToken) Ownable(msg.sender) { require(_rewardToken != address(0), "Invalid token address"); rewardToken = IERC20(_rewardToken); } /** * @dev Allows a verified user to reward another user with tokens * @param recipient The address of the recipient */ function rewardUser(address recipient) external nonReentrant { // Verify sender is verified require( IAddressBook(ADDRESS_BOOK).addressVerifiedUntil(msg.sender) > 0, "Sender not verified" ); // Check that sender hasn't already rewarded someone require(rewardedUser[msg.sender] == address(0), "Already rewarded someone"); // Check that sender isn't rewarding themselves require(msg.sender != recipient, "Cannot reward yourself"); // Check that recipient is not address(0) require(recipient != address(0), "Cannot reward zero address"); // Check contract has enough balance require(rewardToken.balanceOf(address(this)) >= REWARD_AMOUNT, "Insufficient contract balance"); // Record who the sender rewarded rewardedUser[msg.sender] = recipient; // Increment the reward count for the recipient rewardCount[recipient]++; // Send the tokens rewardToken.safeTransfer(recipient, REWARD_AMOUNT); emit RewardSent(msg.sender, recipient, REWARD_AMOUNT); } /** * @dev Allows the owner to deposit reward tokens * @param amount The amount of tokens to deposit */ function depositTokens(uint256 amount) external onlyOwner nonReentrant { require(amount > 0, "Amount must be greater than 0"); rewardToken.safeTransferFrom(msg.sender, address(this), amount); emit TokensDeposited(msg.sender, amount); } /** * @dev Allows the owner to withdraw reward tokens * @param amount The amount of tokens to withdraw */ function withdrawTokens(uint256 amount) external onlyOwner nonReentrant { require(amount > 0, "Amount must be greater than 0"); require(rewardToken.balanceOf(address(this)) >= amount, "Insufficient balance"); rewardToken.safeTransfer(msg.sender, amount); emit TokensWithdrawn(msg.sender, amount); } /** * @dev Checks if a sender has already rewarded someone * @param sender The sender address to check * @return hasRewarded Whether the sender has rewarded anyone * @return recipient The address that was rewarded (if any) */ function checkReward(address sender) external view returns (bool hasRewarded, address recipient) { recipient = rewardedUser[sender]; hasRewarded = recipient != address(0); return (hasRewarded, recipient); } /** * @dev Gets the number of times an address has been rewarded * @param user The address to check * @return The number of times the address has been rewarded */ function getRewardCount(address user) external view returns (uint256) { return rewardCount[user]; } /** * @dev Check if a user is eligible to reward * @param user The address to check * @return Whether the user can reward someone */ function canReward(address user) external view returns (bool) { return IAddressBook(ADDRESS_BOOK).addressVerifiedUntil(user) > 0 && rewardedUser[user] == address(0); } /** * @dev Gets the total token balance of the contract * @return The token balance */ function getContractBalance() external view returns (uint256) { return rewardToken.balanceOf(address(this)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) 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 making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.2.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.20; import {IERC20} from "../IERC20.sol"; import {IERC1363} from "../../../interfaces/IERC1363.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC-20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { /** * @dev An operation with an ERC-20 token failed. */ error SafeERC20FailedOperation(address token); /** * @dev Indicates a failed `decreaseAllowance` request. */ error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease); /** * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value))); } /** * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. */ function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value))); } /** * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. * * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client" * smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior. */ function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); forceApprove(token, spender, oldAllowance + value); } /** * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no * value, non-reverting calls are assumed to be successful. * * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client" * smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior. */ function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal { unchecked { uint256 currentAllowance = token.allowance(address(this), spender); if (currentAllowance < requestedDecrease) { revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease); } forceApprove(token, spender, currentAllowance - requestedDecrease); } } /** * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval * to be set to zero before setting it to a non-zero value, such as USDT. * * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function * only sets the "standard" allowance. Any temporary allowance will remain active, in addition to the value being * set here. */ function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value)); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0))); _callOptionalReturn(token, approvalCall); } } /** * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when * targeting contracts. * * Reverts if the returned value is other than `true`. */ function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal { if (to.code.length == 0) { safeTransfer(token, to, value); } else if (!token.transferAndCall(to, value, data)) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when * targeting contracts. * * Reverts if the returned value is other than `true`. */ function transferFromAndCallRelaxed( IERC1363 token, address from, address to, uint256 value, bytes memory data ) internal { if (to.code.length == 0) { safeTransferFrom(token, from, to, value); } else if (!token.transferFromAndCall(from, to, value, data)) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when * targeting contracts. * * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}. * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall} * once without retrying, and relies on the returned value to be true. * * Reverts if the returned value is other than `true`. */ function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal { if (to.code.length == 0) { forceApprove(token, to, value); } else if (!token.approveAndCall(to, value, data)) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). * * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements. */ function _callOptionalReturn(IERC20 token, bytes memory data) private { uint256 returnSize; uint256 returnValue; assembly ("memory-safe") { let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20) // bubble errors if iszero(success) { let ptr := mload(0x40) returndatacopy(ptr, 0, returndatasize()) revert(ptr, returndatasize()) } returnSize := returndatasize() returnValue := mload(0) } if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). * * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead. */ function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { bool success; uint256 returnSize; uint256 returnValue; assembly ("memory-safe") { success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20) returnSize := returndatasize() returnValue := mload(0) } return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ 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: MIT // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol) pragma solidity ^0.8.20; import {IERC20} from "./IERC20.sol"; import {IERC165} from "./IERC165.sol"; /** * @title IERC1363 * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363]. * * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction. */ interface IERC1363 is IERC20, IERC165 { /* * Note: the ERC-165 identifier for this interface is 0xb0202a11. * 0xb0202a11 === * bytes4(keccak256('transferAndCall(address,uint256)')) ^ * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^ * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^ * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^ * bytes4(keccak256('approveAndCall(address,uint256)')) ^ * bytes4(keccak256('approveAndCall(address,uint256,bytes)')) */ /** * @dev Moves a `value` amount of tokens from the caller's account to `to` * and then calls {IERC1363Receiver-onTransferReceived} on `to`. * @param to The address which you want to transfer to. * @param value The amount of tokens to be transferred. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function transferAndCall(address to, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from the caller's account to `to` * and then calls {IERC1363Receiver-onTransferReceived} on `to`. * @param to The address which you want to transfer to. * @param value The amount of tokens to be transferred. * @param data Additional data with no specified format, sent in call to `to`. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism * and then calls {IERC1363Receiver-onTransferReceived} on `to`. * @param from The address which you want to send tokens from. * @param to The address which you want to transfer to. * @param value The amount of tokens to be transferred. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function transferFromAndCall(address from, address to, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism * and then calls {IERC1363Receiver-onTransferReceived} on `to`. * @param from The address which you want to send tokens from. * @param to The address which you want to transfer to. * @param value The amount of tokens to be transferred. * @param data Additional data with no specified format, sent in call to `to`. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`. * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function approveAndCall(address spender, uint256 value) external returns (bool); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`. * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. * @param data Additional data with no specified format, sent in call to `spender`. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "../utils/introspection/IERC165.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol) pragma solidity ^0.8.20; import {IERC20} from "../token/ERC20/IERC20.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[ERC]. * * 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[ERC 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); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "remappings": [] }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensWithdrawn","type":"event"},{"inputs":[],"name":"ADDRESS_BOOK","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"canReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"checkReward","outputs":[{"internalType":"bool","name":"hasRewarded","type":"bool"},{"internalType":"address","name":"recipient","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getRewardCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"rewardUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardedUser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405234801561000f575f5ffd5b50604051611c13380380611c1383398181016040528101906100319190610280565b335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a2575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161009991906102ba565b60405180910390fd5b6100b18161016160201b60201c565b50600180819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161011e9061032d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505061034b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61024f82610226565b9050919050565b61025f81610245565b8114610269575f5ffd5b50565b5f8151905061027a81610256565b92915050565b5f6020828403121561029557610294610222565b5b5f6102a28482850161026c565b91505092915050565b6102b481610245565b82525050565b5f6020820190506102cd5f8301846102ab565b92915050565b5f82825260208201905092915050565b7f496e76616c696420746f6b656e206164647265737300000000000000000000005f82015250565b5f6103176015836102d3565b9150610322826102e3565b602082019050919050565b5f6020820190508181035f8301526103448161030b565b9050919050565b60805161188661038d5f395f8181610365015281816104430152818161063c015281816109de01528181610b9201528181610d630152610e8701526118865ff3fe608060405234801561000f575f5ffd5b50600436106100f3575f3560e01c8063a1a7797111610095578063cf84944211610064578063cf84944214610284578063dd49756e146102a2578063f2fde38b146102be578063f7c618c1146102da576100f3565b8063a1a77971146101d7578063a6afd7db14610207578063b5af960d14610223578063c3c90e6414610253576100f3565b80636555c174116100d15780636555c174146101615780636f9fb98a14610191578063715018a6146101af5780638da5cb5b146101b9576100f3565b80630ccfe3e2146100f7578063315a095d1461011557806352abb95014610131575b5f5ffd5b6100ff6102f8565b60405161010c919061122b565b60405180910390f35b61012f600480360381019061012a919061127b565b610310565b005b61014b600480360381019061014691906112d0565b6104e0565b604051610158919061122b565b60405180910390f35b61017b600480360381019061017691906112d0565b610510565b6040516101889190611315565b60405180910390f35b610199610639565b6040516101a6919061133d565b60405180910390f35b6101b76106d7565b005b6101c16106ea565b6040516101ce919061122b565b60405180910390f35b6101f160048036038101906101ec91906112d0565b610711565b6040516101fe919061133d565b60405180910390f35b610221600480360381019061021c91906112d0565b610757565b005b61023d600480360381019061023891906112d0565b610c4f565b60405161024a919061133d565b60405180910390f35b61026d600480360381019061026891906112d0565b610c64565b60405161027b929190611356565b60405180910390f35b61028c610cfc565b604051610299919061133d565b60405180910390f35b6102bc60048036038101906102b7919061127b565b610d09565b005b6102d860048036038101906102d391906112d0565b610e01565b005b6102e2610e85565b6040516102ef91906113d8565b60405180910390f35b7357b930d551e677cc36e2fa036ae2fe8fdae0330d81565b610318610ea9565b610320610f30565b5f8111610362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103599061144b565b60405180910390fd5b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103bc919061122b565b602060405180830381865afa1580156103d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103fb919061147d565b101561043c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610433906114f2565b60405180910390fd5b61048733827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610f7f9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516104cd919061133d565b60405180910390a26104dd610ffe565b50565b6002602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f7357b930d551e677cc36e2fa036ae2fe8fdae0330d73ffffffffffffffffffffffffffffffffffffffff16632bc91fed846040518263ffffffff1660e01b815260040161055f919061122b565b602060405180830381865afa15801561057a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059e919061147d565b11801561063257505f73ffffffffffffffffffffffffffffffffffffffff1660025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610693919061122b565b602060405180830381865afa1580156106ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106d2919061147d565b905090565b6106df610ea9565b6106e85f611007565b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61075f610f30565b5f7357b930d551e677cc36e2fa036ae2fe8fdae0330d73ffffffffffffffffffffffffffffffffffffffff16632bc91fed336040518263ffffffff1660e01b81526004016107ad919061122b565b602060405180830381865afa1580156107c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ec919061147d565b1161082c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108239061155a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ed906115c2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b9061162a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c990611692565b60405180910390fd5b6802b5e3af16b18800007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a35919061122b565b602060405180830381865afa158015610a50573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a74919061147d565b1015610ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aac906116fa565b60405180910390fd5b8060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190610b7d90611745565b9190505550610bd6816802b5e3af16b18800007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610f7f9092919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8432952c9ff89738f893e867fa3c19fde7223207c2f40ba8131f18d6ba1f3f6e6802b5e3af16b1880000604051610c3c919061133d565b60405180910390a3610c4c610ffe565b50565b6003602052805f5260405f205f915090505481565b5f5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614159150915091565b6802b5e3af16b188000081565b610d11610ea9565b610d19610f30565b5f8111610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d529061144b565b60405180910390fd5b610da83330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166110c8909392919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f59062170a285eb80e8c6b8ced60428442a51910635005233fc4ce084a475845e82604051610dee919061133d565b60405180910390a2610dfe610ffe565b50565b610e09610ea9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e79575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610e70919061122b565b60405180910390fd5b610e8281611007565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b610eb161114a565b73ffffffffffffffffffffffffffffffffffffffff16610ecf6106ea565b73ffffffffffffffffffffffffffffffffffffffff1614610f2e57610ef261114a565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f25919061122b565b60405180910390fd5b565b600260015403610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c906117d6565b60405180910390fd5b6002600181905550565b610ff9838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401610fb29291906117f4565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611151565b505050565b60018081905550565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611144848573ffffffffffffffffffffffffffffffffffffffff166323b872dd8686866040516024016110fd9392919061181b565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611151565b50505050565b5f33905090565b5f5f60205f8451602086015f885af180611170576040513d5f823e3d81fd5b3d92505f519150505f82146111895760018114156111a4565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b156111e657836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016111dd919061122b565b60405180910390fd5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611215826111ec565b9050919050565b6112258161120b565b82525050565b5f60208201905061123e5f83018461121c565b92915050565b5f5ffd5b5f819050919050565b61125a81611248565b8114611264575f5ffd5b50565b5f8135905061127581611251565b92915050565b5f602082840312156112905761128f611244565b5b5f61129d84828501611267565b91505092915050565b6112af8161120b565b81146112b9575f5ffd5b50565b5f813590506112ca816112a6565b92915050565b5f602082840312156112e5576112e4611244565b5b5f6112f2848285016112bc565b91505092915050565b5f8115159050919050565b61130f816112fb565b82525050565b5f6020820190506113285f830184611306565b92915050565b61133781611248565b82525050565b5f6020820190506113505f83018461132e565b92915050565b5f6040820190506113695f830185611306565b611376602083018461121c565b9392505050565b5f819050919050565b5f6113a061139b611396846111ec565b61137d565b6111ec565b9050919050565b5f6113b182611386565b9050919050565b5f6113c2826113a7565b9050919050565b6113d2816113b8565b82525050565b5f6020820190506113eb5f8301846113c9565b92915050565b5f82825260208201905092915050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f611435601d836113f1565b915061144082611401565b602082019050919050565b5f6020820190508181035f83015261146281611429565b9050919050565b5f8151905061147781611251565b92915050565b5f6020828403121561149257611491611244565b5b5f61149f84828501611469565b91505092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f6114dc6014836113f1565b91506114e7826114a8565b602082019050919050565b5f6020820190508181035f830152611509816114d0565b9050919050565b7f53656e646572206e6f74207665726966696564000000000000000000000000005f82015250565b5f6115446013836113f1565b915061154f82611510565b602082019050919050565b5f6020820190508181035f83015261157181611538565b9050919050565b7f416c726561647920726577617264656420736f6d656f6e6500000000000000005f82015250565b5f6115ac6018836113f1565b91506115b782611578565b602082019050919050565b5f6020820190508181035f8301526115d9816115a0565b9050919050565b7f43616e6e6f742072657761726420796f757273656c66000000000000000000005f82015250565b5f6116146016836113f1565b915061161f826115e0565b602082019050919050565b5f6020820190508181035f83015261164181611608565b9050919050565b7f43616e6e6f7420726577617264207a65726f20616464726573730000000000005f82015250565b5f61167c601a836113f1565b915061168782611648565b602082019050919050565b5f6020820190508181035f8301526116a981611670565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e63650000005f82015250565b5f6116e4601d836113f1565b91506116ef826116b0565b602082019050919050565b5f6020820190508181035f830152611711816116d8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61174f82611248565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361178157611780611718565b5b600182019050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6117c0601f836113f1565b91506117cb8261178c565b602082019050919050565b5f6020820190508181035f8301526117ed816117b4565b9050919050565b5f6040820190506118075f83018561121c565b611814602083018461132e565b9392505050565b5f60608201905061182e5f83018661121c565b61183b602083018561121c565b611848604083018461132e565b94935050505056fea264697066735822122053073424e1adec037bc4450b090ab4c69bfb49345983e8620d81e871ba5f141264736f6c634300081c0033000000000000000000000000ede54d9c024ee80c85ec0a75ed2d8774c7fbac9b
Deployed Bytecode
0x608060405234801561000f575f5ffd5b50600436106100f3575f3560e01c8063a1a7797111610095578063cf84944211610064578063cf84944214610284578063dd49756e146102a2578063f2fde38b146102be578063f7c618c1146102da576100f3565b8063a1a77971146101d7578063a6afd7db14610207578063b5af960d14610223578063c3c90e6414610253576100f3565b80636555c174116100d15780636555c174146101615780636f9fb98a14610191578063715018a6146101af5780638da5cb5b146101b9576100f3565b80630ccfe3e2146100f7578063315a095d1461011557806352abb95014610131575b5f5ffd5b6100ff6102f8565b60405161010c919061122b565b60405180910390f35b61012f600480360381019061012a919061127b565b610310565b005b61014b600480360381019061014691906112d0565b6104e0565b604051610158919061122b565b60405180910390f35b61017b600480360381019061017691906112d0565b610510565b6040516101889190611315565b60405180910390f35b610199610639565b6040516101a6919061133d565b60405180910390f35b6101b76106d7565b005b6101c16106ea565b6040516101ce919061122b565b60405180910390f35b6101f160048036038101906101ec91906112d0565b610711565b6040516101fe919061133d565b60405180910390f35b610221600480360381019061021c91906112d0565b610757565b005b61023d600480360381019061023891906112d0565b610c4f565b60405161024a919061133d565b60405180910390f35b61026d600480360381019061026891906112d0565b610c64565b60405161027b929190611356565b60405180910390f35b61028c610cfc565b604051610299919061133d565b60405180910390f35b6102bc60048036038101906102b7919061127b565b610d09565b005b6102d860048036038101906102d391906112d0565b610e01565b005b6102e2610e85565b6040516102ef91906113d8565b60405180910390f35b7357b930d551e677cc36e2fa036ae2fe8fdae0330d81565b610318610ea9565b610320610f30565b5f8111610362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103599061144b565b60405180910390fd5b807f000000000000000000000000ede54d9c024ee80c85ec0a75ed2d8774c7fbac9b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016103bc919061122b565b602060405180830381865afa1580156103d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103fb919061147d565b101561043c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610433906114f2565b60405180910390fd5b61048733827f000000000000000000000000ede54d9c024ee80c85ec0a75ed2d8774c7fbac9b73ffffffffffffffffffffffffffffffffffffffff16610f7f9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516104cd919061133d565b60405180910390a26104dd610ffe565b50565b6002602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f7357b930d551e677cc36e2fa036ae2fe8fdae0330d73ffffffffffffffffffffffffffffffffffffffff16632bc91fed846040518263ffffffff1660e01b815260040161055f919061122b565b602060405180830381865afa15801561057a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059e919061147d565b11801561063257505f73ffffffffffffffffffffffffffffffffffffffff1660025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b5f7f000000000000000000000000ede54d9c024ee80c85ec0a75ed2d8774c7fbac9b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610693919061122b565b602060405180830381865afa1580156106ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106d2919061147d565b905090565b6106df610ea9565b6106e85f611007565b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61075f610f30565b5f7357b930d551e677cc36e2fa036ae2fe8fdae0330d73ffffffffffffffffffffffffffffffffffffffff16632bc91fed336040518263ffffffff1660e01b81526004016107ad919061122b565b602060405180830381865afa1580156107c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ec919061147d565b1161082c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108239061155a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ed906115c2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b9061162a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c990611692565b60405180910390fd5b6802b5e3af16b18800007f000000000000000000000000ede54d9c024ee80c85ec0a75ed2d8774c7fbac9b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a35919061122b565b602060405180830381865afa158015610a50573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a74919061147d565b1015610ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aac906116fa565b60405180910390fd5b8060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190610b7d90611745565b9190505550610bd6816802b5e3af16b18800007f000000000000000000000000ede54d9c024ee80c85ec0a75ed2d8774c7fbac9b73ffffffffffffffffffffffffffffffffffffffff16610f7f9092919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8432952c9ff89738f893e867fa3c19fde7223207c2f40ba8131f18d6ba1f3f6e6802b5e3af16b1880000604051610c3c919061133d565b60405180910390a3610c4c610ffe565b50565b6003602052805f5260405f205f915090505481565b5f5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614159150915091565b6802b5e3af16b188000081565b610d11610ea9565b610d19610f30565b5f8111610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d529061144b565b60405180910390fd5b610da83330837f000000000000000000000000ede54d9c024ee80c85ec0a75ed2d8774c7fbac9b73ffffffffffffffffffffffffffffffffffffffff166110c8909392919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f59062170a285eb80e8c6b8ced60428442a51910635005233fc4ce084a475845e82604051610dee919061133d565b60405180910390a2610dfe610ffe565b50565b610e09610ea9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e79575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610e70919061122b565b60405180910390fd5b610e8281611007565b50565b7f000000000000000000000000ede54d9c024ee80c85ec0a75ed2d8774c7fbac9b81565b610eb161114a565b73ffffffffffffffffffffffffffffffffffffffff16610ecf6106ea565b73ffffffffffffffffffffffffffffffffffffffff1614610f2e57610ef261114a565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f25919061122b565b60405180910390fd5b565b600260015403610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c906117d6565b60405180910390fd5b6002600181905550565b610ff9838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401610fb29291906117f4565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611151565b505050565b60018081905550565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611144848573ffffffffffffffffffffffffffffffffffffffff166323b872dd8686866040516024016110fd9392919061181b565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611151565b50505050565b5f33905090565b5f5f60205f8451602086015f885af180611170576040513d5f823e3d81fd5b3d92505f519150505f82146111895760018114156111a4565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b156111e657836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016111dd919061122b565b60405180910390fd5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611215826111ec565b9050919050565b6112258161120b565b82525050565b5f60208201905061123e5f83018461121c565b92915050565b5f5ffd5b5f819050919050565b61125a81611248565b8114611264575f5ffd5b50565b5f8135905061127581611251565b92915050565b5f602082840312156112905761128f611244565b5b5f61129d84828501611267565b91505092915050565b6112af8161120b565b81146112b9575f5ffd5b50565b5f813590506112ca816112a6565b92915050565b5f602082840312156112e5576112e4611244565b5b5f6112f2848285016112bc565b91505092915050565b5f8115159050919050565b61130f816112fb565b82525050565b5f6020820190506113285f830184611306565b92915050565b61133781611248565b82525050565b5f6020820190506113505f83018461132e565b92915050565b5f6040820190506113695f830185611306565b611376602083018461121c565b9392505050565b5f819050919050565b5f6113a061139b611396846111ec565b61137d565b6111ec565b9050919050565b5f6113b182611386565b9050919050565b5f6113c2826113a7565b9050919050565b6113d2816113b8565b82525050565b5f6020820190506113eb5f8301846113c9565b92915050565b5f82825260208201905092915050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f611435601d836113f1565b915061144082611401565b602082019050919050565b5f6020820190508181035f83015261146281611429565b9050919050565b5f8151905061147781611251565b92915050565b5f6020828403121561149257611491611244565b5b5f61149f84828501611469565b91505092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f6114dc6014836113f1565b91506114e7826114a8565b602082019050919050565b5f6020820190508181035f830152611509816114d0565b9050919050565b7f53656e646572206e6f74207665726966696564000000000000000000000000005f82015250565b5f6115446013836113f1565b915061154f82611510565b602082019050919050565b5f6020820190508181035f83015261157181611538565b9050919050565b7f416c726561647920726577617264656420736f6d656f6e6500000000000000005f82015250565b5f6115ac6018836113f1565b91506115b782611578565b602082019050919050565b5f6020820190508181035f8301526115d9816115a0565b9050919050565b7f43616e6e6f742072657761726420796f757273656c66000000000000000000005f82015250565b5f6116146016836113f1565b915061161f826115e0565b602082019050919050565b5f6020820190508181035f83015261164181611608565b9050919050565b7f43616e6e6f7420726577617264207a65726f20616464726573730000000000005f82015250565b5f61167c601a836113f1565b915061168782611648565b602082019050919050565b5f6020820190508181035f8301526116a981611670565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e63650000005f82015250565b5f6116e4601d836113f1565b91506116ef826116b0565b602082019050919050565b5f6020820190508181035f830152611711816116d8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61174f82611248565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361178157611780611718565b5b600182019050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f6117c0601f836113f1565b91506117cb8261178c565b602082019050919050565b5f6020820190508181035f8301526117ed816117b4565b9050919050565b5f6040820190506118075f83018561121c565b611814602083018461132e565b9392505050565b5f60608201905061182e5f83018661121c565b61183b602083018561121c565b611848604083018461132e565b94935050505056fea264697066735822122053073424e1adec037bc4450b090ab4c69bfb49345983e8620d81e871ba5f141264736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ede54d9c024ee80c85ec0a75ed2d8774c7fbac9b
-----Decoded View---------------
Arg [0] : _rewardToken (address): 0xEdE54d9c024ee80C85ec0a75eD2d8774c7Fbac9B
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000ede54d9c024ee80c85ec0a75ed2d8774c7fbac9b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.