ETH Price: $2,458.91 (+0.84%)

Contract

0x230B2754949d3936C2623A0017af002d46A38C53
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw200410502024-06-07 16:09:35127 days ago1717776575IN
0x230B2754...d46A38C53
0 ETH0.0020698326.18580027
Withdraw200406752024-06-07 14:54:11127 days ago1717772051IN
0x230B2754...d46A38C53
0 ETH0.0015910819.44048086
Withdraw200384182024-06-07 7:20:35127 days ago1717744835IN
0x230B2754...d46A38C53
0 ETH0.0010447612.7653644
Withdraw200336222024-06-06 15:16:47128 days ago1717687007IN
0x230B2754...d46A38C53
0 ETH0.0016510620.88795892
Withdraw200335992024-06-06 15:12:11128 days ago1717686731IN
0x230B2754...d46A38C53
0 ETH0.001753222.18011742
Withdraw200335412024-06-06 15:00:35128 days ago1717686035IN
0x230B2754...d46A38C53
0 ETH0.0020025625.33476976
Withdraw200335242024-06-06 14:56:59128 days ago1717685819IN
0x230B2754...d46A38C53
0 ETH0.0018033722.81829583
Withdraw200314752024-06-06 8:04:23128 days ago1717661063IN
0x230B2754...d46A38C53
0 ETH0.0017482522.12083628
Withdraw200311592024-06-06 7:00:59128 days ago1717657259IN
0x230B2754...d46A38C53
0 ETH0.0011174114.13663006
Withdraw200308112024-06-06 5:50:47128 days ago1717653047IN
0x230B2754...d46A38C53
0 ETH0.0008381910.24282918
Withdraw200263652024-06-05 14:56:35129 days ago1717599395IN
0x230B2754...d46A38C53
0 ETH0.0017804822.52529484
Withdraw200254092024-06-05 11:44:23129 days ago1717587863IN
0x230B2754...d46A38C53
0 ETH0.0013837517.50882876
Withdraw200252792024-06-05 11:18:23129 days ago1717586303IN
0x230B2754...d46A38C53
0 ETH0.001880214.1215742
Withdraw200184572024-06-04 12:28:23130 days ago1717504103IN
0x230B2754...d46A38C53
0 ETH0.001425910.70945838
Withdraw200181742024-06-04 11:31:35130 days ago1717500695IN
0x230B2754...d46A38C53
0 ETH0.000763079.65383482
Withdraw200181722024-06-04 11:31:11130 days ago1717500671IN
0x230B2754...d46A38C53
0 ETH0.00076289.65188315
Withdraw200181712024-06-04 11:30:59130 days ago1717500659IN
0x230B2754...d46A38C53
0 ETH0.000335919.61874817
Withdraw200181702024-06-04 11:30:47130 days ago1717500647IN
0x230B2754...d46A38C53
0 ETH0.000764989.6794567
Withdraw200180812024-06-04 11:12:59130 days ago1717499579IN
0x230B2754...d46A38C53
0 ETH0.000799839.77262282
Withdraw199817532024-05-30 9:24:47135 days ago1717061087IN
0x230B2754...d46A38C53
0 ETH0.0010824513.22579056
Withdraw199409602024-05-24 16:33:47141 days ago1716568427IN
0x230B2754...d46A38C53
0 ETH0.0011138314.0572156
Withdraw199398512024-05-24 12:50:23141 days ago1716555023IN
0x230B2754...d46A38C53
0 ETH0.0007944710.02816991
Withdraw199398422024-05-24 12:48:35141 days ago1716554915IN
0x230B2754...d46A38C53
0 ETH0.001298499.73940509
0x60806040198744322024-05-15 9:17:59150 days ago1715764679IN
 Create: JokSocialRewards
0 ETH0.010703338.04586888

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JokSocialRewards

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : jokSocialRewards.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

/// @title Jok Social Rewards
/// @author Andre Costa @ MyWeb3Startup.com


// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @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;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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.
 *
 * By default, the owner account will be the one that deploys the contract. 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;
    address internal _oldOwner;

    uint256 internal lastOwnershipTransfer;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Returns the address of the previous owner.
     */
    function oldOwner() public view virtual returns (address) {
        return _oldOwner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing 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 {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _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;
        _oldOwner = oldOwner_;
        _owner = newOwner;
        lastOwnershipTransfer = block.timestamp;
        emit OwnershipTransferred(oldOwner_, newOwner);
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount)
    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 `amount` 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 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @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
    );
}

/**
 * @title JokSocialRewards
 * @dev A smart contract for retrieving social rewards in JOK.
 * The contract enables users to withdraw staked funds and claimed rewards securely using ECDSA signatures.
 */
contract JokSocialRewards is Ownable {

    // ERC-20 token used for staking
    IERC20 public jokToken;

    // Struct to represent social rewards
    struct SocialRewards {
        uint256 totalClaimed;
        uint256 lastClaimDay;
    }

    // Mapping to store affiliate commissions for each address
    mapping(address => SocialRewards) public socialRewards;

    // Address of the staking signer
    address public signer = 0x8aaBaf348B299E759D091F17100a95A0F9caD89C;

    // Nonce to prevent replay attacks
    mapping(address => uint256) public nonce;

    // Event emitted on successful withdrawal
    event Withdraw(address indexed staker, uint256 earnings);

    /**
     * @dev Constructor function to initialize the contract.
     */
    constructor() {
        jokToken = IERC20(0xA728Aa2De568766E2Fa4544Ec7A77f79c0bf9F97);
    }

    /**
     * @dev Allows a user to withdraw staked funds and claimed rewards from the contract.
     * @param earnings The total amount of staking rewards to be withdrawn.
     * @param _v ECDSA signature parameter v.
     * @param _r ECDSA signature parameters r.
     * @param _s ECDSA signature parameters s.
     */


      function withdraw(uint256 earnings,string memory message, uint8 _v, bytes32 _r, bytes32 _s) external {
        // Validate the ECDSA signature for secure withdrawal
        uint256 totalEarnings = earnings;
        require(isValidSignature(msg.sender, totalEarnings, message, _v, _r, _s), "Invalid signature!");
        uint256 currentDay = getCurrentDay();
        // Update affiliate commission information
        socialRewards[msg.sender].totalClaimed += earnings;
        socialRewards[msg.sender].lastClaimDay = currentDay;

        nonce[msg.sender]++;

        // Transfer JOK tokens to the user
        require(jokToken.transfer(msg.sender, earnings), "Token transfer failed!");

        emit Withdraw(msg.sender, earnings);
    }

    // MISC

    /**
     * @dev Function to get the current day based on the contract's timestamp.
     * @return The current day.
     */
    function getCurrentDay() public view returns (uint256) {
        return block.timestamp / 1 days;
    }

function getMessageHash(
        address beneficiary,
        uint amount,
        string memory message,
        uint256 _nonce
    ) public view returns (bytes32) {
        return keccak256(abi.encodePacked(address(this), beneficiary, amount, message, _nonce));
    }

    /**
     * @dev Internal function to validate an ECDSA signature for secure staking-related transactions.
     * @param beneficiary The address that will receive the transaction result.
     * @param amount The total amount involved in the transaction.
     * @param _v ECDSA signature parameter v.
     * @param _r ECDSA signature parameters r.
     * @param _s ECDSA signature parameters s.
     * @return A boolean indicating whether the signature is valid.
     */

     function isValidSignature(address beneficiary, uint256 amount, string memory message, uint8 _v, bytes32 _r, bytes32 _s) internal view returns (bool) {

        bytes32 messageHash = getMessageHash(beneficiary, amount, message, nonce[beneficiary]);
        // bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash);
        bytes32 prefixedHash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", messageHash));

        address recoveredSigner = ecrecover(prefixedHash, _v, _r, _s);

        return recoveredSigner == signer;
    }

    // ADMIN

    /**
     * @notice Sets the address of the signer.
     * @dev This function updates the signer address.
     * @param _signer The new address of the signer.
     */
    function setSigner(address _signer) external onlyOwner {
        signer = _signer;
    }

    /**
     * @dev Function to set the ERC-20 token used for staking.
     * @param _jokToken The new address of the ERC-20 token.
     */
    function setJokToken(address _jokToken) external onlyOwner {
        jokToken = IERC20(_jokToken);
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"earnings","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"getCurrentDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"message","type":"string"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"getMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jokToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"_jokToken","type":"address"}],"name":"setJokToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"socialRewards","outputs":[{"internalType":"uint256","name":"totalClaimed","type":"uint256"},{"internalType":"uint256","name":"lastClaimDay","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"earnings","type":"uint256"},{"internalType":"string","name":"message","type":"string"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052738aabaf348b299e759d091f17100a95a0f9cad89c60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015610063575f80fd5b506100806100756100d960201b60201c565b6100e060201b60201c565b73a728aa2de568766e2fa4544ec7a77f79c0bf9f9760035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101e8565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426002819055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611555806101f55f395ff3fe608060405234801561000f575f80fd5b50600436106100cd575f3560e01c8063715018a61161008a578063a35f8a4011610064578063a35f8a40146101d7578063d3d7b35d14610207578063f2fde38b14610238578063f487404f14610254576100cd565b8063715018a614610193578063723f9dfe1461019d5780638da5cb5b146101b9576100cd565b80631f418dde146100d1578063238ac933146100ef5780633e6968b61461010d5780634a7e255f1461012b5780636c19e7831461014757806370ae92d214610163575b5f80fd5b6100d9610272565b6040516100e69190610bb2565b60405180910390f35b6100f7610297565b6040516101049190610beb565b60405180910390f35b6101156102bc565b6040516101229190610c1c565b60405180910390f35b61014560048036038101906101409190610c70565b6102d1565b005b610161600480360381019061015c9190610c70565b610390565b005b61017d60048036038101906101789190610c70565b61044f565b60405161018a9190610c1c565b60405180910390f35b61019b610464565b005b6101b760048036038101906101b29190610e6a565b6104eb565b005b6101c1610765565b6040516101ce9190610beb565b60405180910390f35b6101f160048036038101906101ec9190610efd565b61078c565b6040516101fe9190610f8c565b60405180910390f35b610221600480360381019061021c9190610c70565b6107c6565b60405161022f929190610fa5565b60405180910390f35b610252600480360381019061024d9190610c70565b6107e6565b005b61025c6108dc565b6040516102699190610beb565b60405180910390f35b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f62015180426102cc9190611026565b905090565b6102d9610904565b73ffffffffffffffffffffffffffffffffffffffff166102f7610765565b73ffffffffffffffffffffffffffffffffffffffff161461034d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610344906110b0565b60405180910390fd5b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610398610904565b73ffffffffffffffffffffffffffffffffffffffff166103b6610765565b73ffffffffffffffffffffffffffffffffffffffff161461040c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610403906110b0565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6006602052805f5260405f205f915090505481565b61046c610904565b73ffffffffffffffffffffffffffffffffffffffff1661048a610765565b73ffffffffffffffffffffffffffffffffffffffff16146104e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d7906110b0565b60405180910390fd5b6104e95f61090b565b565b5f8590506104fd338287878787610a13565b61053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611118565b60405180910390fd5b5f6105456102bc565b90508660045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f8282546105959190611136565b925050819055508060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001018190555060065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061062e90611169565b919050555060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33896040518363ffffffff1660e01b815260040161068f9291906111b0565b6020604051808303815f875af11580156106ab573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106cf919061120c565b61070e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070590611281565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364886040516107549190610c1c565b60405180910390a250505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f30858585856040516020016107a6959493929190611356565b604051602081830303815290604052805190602001209050949350505050565b6004602052805f5260405f205f91509050805f0154908060010154905082565b6107ee610904565b73ffffffffffffffffffffffffffffffffffffffff1661080c610765565b73ffffffffffffffffffffffffffffffffffffffff1614610862576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610859906110b0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c790611420565b60405180910390fd5b6108d98161090b565b50565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426002819055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80610a5e88888860065f8d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461078c565b90505f81604051602001610a7291906114a8565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051610aad94939291906114dc565b6020604051602081039080840390855afa158015610acd573d5f803e3d5ffd5b50505060206040510351905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161493505050509695505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f610b7a610b75610b7084610b38565b610b57565b610b38565b9050919050565b5f610b8b82610b60565b9050919050565b5f610b9c82610b81565b9050919050565b610bac81610b92565b82525050565b5f602082019050610bc55f830184610ba3565b92915050565b5f610bd582610b38565b9050919050565b610be581610bcb565b82525050565b5f602082019050610bfe5f830184610bdc565b92915050565b5f819050919050565b610c1681610c04565b82525050565b5f602082019050610c2f5f830184610c0d565b92915050565b5f604051905090565b5f80fd5b5f80fd5b610c4f81610bcb565b8114610c59575f80fd5b50565b5f81359050610c6a81610c46565b92915050565b5f60208284031215610c8557610c84610c3e565b5b5f610c9284828501610c5c565b91505092915050565b610ca481610c04565b8114610cae575f80fd5b50565b5f81359050610cbf81610c9b565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610d1382610ccd565b810181811067ffffffffffffffff82111715610d3257610d31610cdd565b5b80604052505050565b5f610d44610c35565b9050610d508282610d0a565b919050565b5f67ffffffffffffffff821115610d6f57610d6e610cdd565b5b610d7882610ccd565b9050602081019050919050565b828183375f83830152505050565b5f610da5610da084610d55565b610d3b565b905082815260208101848484011115610dc157610dc0610cc9565b5b610dcc848285610d85565b509392505050565b5f82601f830112610de857610de7610cc5565b5b8135610df8848260208601610d93565b91505092915050565b5f60ff82169050919050565b610e1681610e01565b8114610e20575f80fd5b50565b5f81359050610e3181610e0d565b92915050565b5f819050919050565b610e4981610e37565b8114610e53575f80fd5b50565b5f81359050610e6481610e40565b92915050565b5f805f805f60a08688031215610e8357610e82610c3e565b5b5f610e9088828901610cb1565b955050602086013567ffffffffffffffff811115610eb157610eb0610c42565b5b610ebd88828901610dd4565b9450506040610ece88828901610e23565b9350506060610edf88828901610e56565b9250506080610ef088828901610e56565b9150509295509295909350565b5f805f8060808587031215610f1557610f14610c3e565b5b5f610f2287828801610c5c565b9450506020610f3387828801610cb1565b935050604085013567ffffffffffffffff811115610f5457610f53610c42565b5b610f6087828801610dd4565b9250506060610f7187828801610cb1565b91505092959194509250565b610f8681610e37565b82525050565b5f602082019050610f9f5f830184610f7d565b92915050565b5f604082019050610fb85f830185610c0d565b610fc56020830184610c0d565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61103082610c04565b915061103b83610c04565b92508261104b5761104a610fcc565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61109a602083611056565b91506110a582611066565b602082019050919050565b5f6020820190508181035f8301526110c78161108e565b9050919050565b7f496e76616c6964207369676e61747572652100000000000000000000000000005f82015250565b5f611102601283611056565b915061110d826110ce565b602082019050919050565b5f6020820190508181035f83015261112f816110f6565b9050919050565b5f61114082610c04565b915061114b83610c04565b925082820190508082111561116357611162610ff9565b5b92915050565b5f61117382610c04565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036111a5576111a4610ff9565b5b600182019050919050565b5f6040820190506111c35f830185610bdc565b6111d06020830184610c0d565b9392505050565b5f8115159050919050565b6111eb816111d7565b81146111f5575f80fd5b50565b5f81519050611206816111e2565b92915050565b5f6020828403121561122157611220610c3e565b5b5f61122e848285016111f8565b91505092915050565b7f546f6b656e207472616e73666572206661696c656421000000000000000000005f82015250565b5f61126b601683611056565b915061127682611237565b602082019050919050565b5f6020820190508181035f8301526112988161125f565b9050919050565b5f8160601b9050919050565b5f6112b58261129f565b9050919050565b5f6112c6826112ab565b9050919050565b6112de6112d982610bcb565b6112bc565b82525050565b5f819050919050565b6112fe6112f982610c04565b6112e4565b82525050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f61133082611304565b61133a818561130e565b935061134a818560208601611318565b80840191505092915050565b5f61136182886112cd565b60148201915061137182876112cd565b60148201915061138182866112ed565b6020820191506113918285611326565b915061139d82846112ed565b6020820191508190509695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61140a602683611056565b9150611415826113b0565b604082019050919050565b5f6020820190508181035f830152611437816113fe565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f82015250565b5f611472601c8361130e565b915061147d8261143e565b601c82019050919050565b5f819050919050565b6114a261149d82610e37565b611488565b82525050565b5f6114b282611466565b91506114be8284611491565b60208201915081905092915050565b6114d681610e01565b82525050565b5f6080820190506114ef5f830187610f7d565b6114fc60208301866114cd565b6115096040830185610f7d565b6115166060830184610f7d565b9594505050505056fea2646970667358221220fcff13d959289488a62854879a557b80acf42fa87228341f9efdf0d17d03bd9564736f6c63430008190033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106100cd575f3560e01c8063715018a61161008a578063a35f8a4011610064578063a35f8a40146101d7578063d3d7b35d14610207578063f2fde38b14610238578063f487404f14610254576100cd565b8063715018a614610193578063723f9dfe1461019d5780638da5cb5b146101b9576100cd565b80631f418dde146100d1578063238ac933146100ef5780633e6968b61461010d5780634a7e255f1461012b5780636c19e7831461014757806370ae92d214610163575b5f80fd5b6100d9610272565b6040516100e69190610bb2565b60405180910390f35b6100f7610297565b6040516101049190610beb565b60405180910390f35b6101156102bc565b6040516101229190610c1c565b60405180910390f35b61014560048036038101906101409190610c70565b6102d1565b005b610161600480360381019061015c9190610c70565b610390565b005b61017d60048036038101906101789190610c70565b61044f565b60405161018a9190610c1c565b60405180910390f35b61019b610464565b005b6101b760048036038101906101b29190610e6a565b6104eb565b005b6101c1610765565b6040516101ce9190610beb565b60405180910390f35b6101f160048036038101906101ec9190610efd565b61078c565b6040516101fe9190610f8c565b60405180910390f35b610221600480360381019061021c9190610c70565b6107c6565b60405161022f929190610fa5565b60405180910390f35b610252600480360381019061024d9190610c70565b6107e6565b005b61025c6108dc565b6040516102699190610beb565b60405180910390f35b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f62015180426102cc9190611026565b905090565b6102d9610904565b73ffffffffffffffffffffffffffffffffffffffff166102f7610765565b73ffffffffffffffffffffffffffffffffffffffff161461034d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610344906110b0565b60405180910390fd5b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610398610904565b73ffffffffffffffffffffffffffffffffffffffff166103b6610765565b73ffffffffffffffffffffffffffffffffffffffff161461040c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610403906110b0565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6006602052805f5260405f205f915090505481565b61046c610904565b73ffffffffffffffffffffffffffffffffffffffff1661048a610765565b73ffffffffffffffffffffffffffffffffffffffff16146104e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d7906110b0565b60405180910390fd5b6104e95f61090b565b565b5f8590506104fd338287878787610a13565b61053c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053390611118565b60405180910390fd5b5f6105456102bc565b90508660045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f8282546105959190611136565b925050819055508060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001018190555060065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f81548092919061062e90611169565b919050555060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33896040518363ffffffff1660e01b815260040161068f9291906111b0565b6020604051808303815f875af11580156106ab573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106cf919061120c565b61070e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070590611281565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364886040516107549190610c1c565b60405180910390a250505050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f30858585856040516020016107a6959493929190611356565b604051602081830303815290604052805190602001209050949350505050565b6004602052805f5260405f205f91509050805f0154908060010154905082565b6107ee610904565b73ffffffffffffffffffffffffffffffffffffffff1661080c610765565b73ffffffffffffffffffffffffffffffffffffffff1614610862576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610859906110b0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c790611420565b60405180910390fd5b6108d98161090b565b50565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426002819055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80610a5e88888860065f8d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461078c565b90505f81604051602001610a7291906114a8565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051610aad94939291906114dc565b6020604051602081039080840390855afa158015610acd573d5f803e3d5ffd5b50505060206040510351905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161493505050509695505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f610b7a610b75610b7084610b38565b610b57565b610b38565b9050919050565b5f610b8b82610b60565b9050919050565b5f610b9c82610b81565b9050919050565b610bac81610b92565b82525050565b5f602082019050610bc55f830184610ba3565b92915050565b5f610bd582610b38565b9050919050565b610be581610bcb565b82525050565b5f602082019050610bfe5f830184610bdc565b92915050565b5f819050919050565b610c1681610c04565b82525050565b5f602082019050610c2f5f830184610c0d565b92915050565b5f604051905090565b5f80fd5b5f80fd5b610c4f81610bcb565b8114610c59575f80fd5b50565b5f81359050610c6a81610c46565b92915050565b5f60208284031215610c8557610c84610c3e565b5b5f610c9284828501610c5c565b91505092915050565b610ca481610c04565b8114610cae575f80fd5b50565b5f81359050610cbf81610c9b565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610d1382610ccd565b810181811067ffffffffffffffff82111715610d3257610d31610cdd565b5b80604052505050565b5f610d44610c35565b9050610d508282610d0a565b919050565b5f67ffffffffffffffff821115610d6f57610d6e610cdd565b5b610d7882610ccd565b9050602081019050919050565b828183375f83830152505050565b5f610da5610da084610d55565b610d3b565b905082815260208101848484011115610dc157610dc0610cc9565b5b610dcc848285610d85565b509392505050565b5f82601f830112610de857610de7610cc5565b5b8135610df8848260208601610d93565b91505092915050565b5f60ff82169050919050565b610e1681610e01565b8114610e20575f80fd5b50565b5f81359050610e3181610e0d565b92915050565b5f819050919050565b610e4981610e37565b8114610e53575f80fd5b50565b5f81359050610e6481610e40565b92915050565b5f805f805f60a08688031215610e8357610e82610c3e565b5b5f610e9088828901610cb1565b955050602086013567ffffffffffffffff811115610eb157610eb0610c42565b5b610ebd88828901610dd4565b9450506040610ece88828901610e23565b9350506060610edf88828901610e56565b9250506080610ef088828901610e56565b9150509295509295909350565b5f805f8060808587031215610f1557610f14610c3e565b5b5f610f2287828801610c5c565b9450506020610f3387828801610cb1565b935050604085013567ffffffffffffffff811115610f5457610f53610c42565b5b610f6087828801610dd4565b9250506060610f7187828801610cb1565b91505092959194509250565b610f8681610e37565b82525050565b5f602082019050610f9f5f830184610f7d565b92915050565b5f604082019050610fb85f830185610c0d565b610fc56020830184610c0d565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61103082610c04565b915061103b83610c04565b92508261104b5761104a610fcc565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61109a602083611056565b91506110a582611066565b602082019050919050565b5f6020820190508181035f8301526110c78161108e565b9050919050565b7f496e76616c6964207369676e61747572652100000000000000000000000000005f82015250565b5f611102601283611056565b915061110d826110ce565b602082019050919050565b5f6020820190508181035f83015261112f816110f6565b9050919050565b5f61114082610c04565b915061114b83610c04565b925082820190508082111561116357611162610ff9565b5b92915050565b5f61117382610c04565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036111a5576111a4610ff9565b5b600182019050919050565b5f6040820190506111c35f830185610bdc565b6111d06020830184610c0d565b9392505050565b5f8115159050919050565b6111eb816111d7565b81146111f5575f80fd5b50565b5f81519050611206816111e2565b92915050565b5f6020828403121561122157611220610c3e565b5b5f61122e848285016111f8565b91505092915050565b7f546f6b656e207472616e73666572206661696c656421000000000000000000005f82015250565b5f61126b601683611056565b915061127682611237565b602082019050919050565b5f6020820190508181035f8301526112988161125f565b9050919050565b5f8160601b9050919050565b5f6112b58261129f565b9050919050565b5f6112c6826112ab565b9050919050565b6112de6112d982610bcb565b6112bc565b82525050565b5f819050919050565b6112fe6112f982610c04565b6112e4565b82525050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f61133082611304565b61133a818561130e565b935061134a818560208601611318565b80840191505092915050565b5f61136182886112cd565b60148201915061137182876112cd565b60148201915061138182866112ed565b6020820191506113918285611326565b915061139d82846112ed565b6020820191508190509695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61140a602683611056565b9150611415826113b0565b604082019050919050565b5f6020820190508181035f830152611437816113fe565b9050919050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f82015250565b5f611472601c8361130e565b915061147d8261143e565b601c82019050919050565b5f819050919050565b6114a261149d82610e37565b611488565b82525050565b5f6114b282611466565b91506114be8284611491565b60208201915081905092915050565b6114d681610e01565b82525050565b5f6080820190506114ef5f830187610f7d565b6114fc60208301866114cd565b6115096040830185610f7d565b6115166060830184610f7d565b9594505050505056fea2646970667358221220fcff13d959289488a62854879a557b80acf42fa87228341f9efdf0d17d03bd9564736f6c63430008190033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.