ETH Price: $3,217.19 (-3.83%)
 
Transaction Hash
Method
Block
From
To
Start Raffle189364442024-01-04 20:48:59371 days ago1704401339IN
0x514D6658...f817dF7A9
0 ETH0.0081126424.12445106
Start Raffle189364282024-01-04 20:45:47371 days ago1704401147IN
0x514D6658...f817dF7A9
0 ETH0.0086376425.68748429
Start Raffle189362932024-01-04 20:18:35371 days ago1704399515IN
0x514D6658...f817dF7A9
0 ETH0.0081269324.15574167
Start Raffle189362852024-01-04 20:16:59371 days ago1704399419IN
0x514D6658...f817dF7A9
0 ETH0.0069404820.64030917
Start Raffle189362762024-01-04 20:14:59371 days ago1704399299IN
0x514D6658...f817dF7A9
0 ETH0.0069132720.55936056
Start Raffle189362672024-01-04 20:13:11371 days ago1704399191IN
0x514D6658...f817dF7A9
0 ETH0.0076329722.69970273
Start Raffle189362572024-01-04 20:11:11371 days ago1704399071IN
0x514D6658...f817dF7A9
0 ETH0.0076856822.85807014
Start Raffle183292662023-10-11 19:26:23456 days ago1697052383IN
0x514D6658...f817dF7A9
0 ETH0.002942068.74908769
Start Raffle183292472023-10-11 19:22:35456 days ago1697052155IN
0x514D6658...f817dF7A9
0 ETH0.002832728.42454427
Start Raffle183292372023-10-11 19:20:35456 days ago1697052035IN
0x514D6658...f817dF7A9
0 ETH0.003057129.09191692
Start Raffle183292172023-10-11 19:16:23456 days ago1697051783IN
0x514D6658...f817dF7A9
0 ETH0.003007548.94443911
Start Raffle183292032023-10-11 19:13:35456 days ago1697051615IN
0x514D6658...f817dF7A9
0 ETH0.002897518.61751479
Start Raffle183291802023-10-11 19:08:59456 days ago1697051339IN
0x514D6658...f817dF7A9
0 ETH0.002908858.64723683
Start Raffle178293652023-08-02 19:21:11526 days ago1691004071IN
0x514D6658...f817dF7A9
0 ETH0.0132865139.51132217
Start Raffle178293042023-08-02 19:08:59526 days ago1691003339IN
0x514D6658...f817dF7A9
0 ETH0.0152048845.19520557
Start Raffle178292952023-08-02 19:07:11526 days ago1691003231IN
0x514D6658...f817dF7A9
0 ETH0.0135372340.259809
Start Raffle175309662023-06-21 22:19:47568 days ago1687385987IN
0x514D6658...f817dF7A9
0 ETH0.006595919.60995356
Start Raffle175309592023-06-21 22:18:23568 days ago1687385903IN
0x514D6658...f817dF7A9
0 ETH0.0073260221.78608173
Start Raffle175309512023-06-21 22:16:47568 days ago1687385807IN
0x514D6658...f817dF7A9
0 ETH0.0069019120.52485035
Start Raffle175309432023-06-21 22:15:11568 days ago1687385711IN
0x514D6658...f817dF7A9
0 ETH0.0064904919.30139387
Start Raffle175309342023-06-21 22:13:23568 days ago1687385603IN
0x514D6658...f817dF7A9
0 ETH0.0080121723.82567783
Start Raffle175309272023-06-21 22:11:59568 days ago1687385519IN
0x514D6658...f817dF7A9
0 ETH0.0072171321.46147993
Start Raffle175309192023-06-21 22:10:23568 days ago1687385423IN
0x514D6658...f817dF7A9
0 ETH0.0062832918.68454028
Start Raffle175309102023-06-21 22:08:35568 days ago1687385315IN
0x514D6658...f817dF7A9
0 ETH0.0070251920.8937054
Accept Ownership172991272023-05-20 7:22:47600 days ago1684567367IN
0x514D6658...f817dF7A9
0 ETH0.0008226729.18750128
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JRNYRaffle

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 7 : JRNYRaffle.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.2 <0.9.0;

import "@chainlink/contracts/src/v0.8/ConfirmedOwner.sol";
import "@chainlink/contracts/src/v0.8/VRFV2WrapperConsumerBase.sol";

contract JRNYRaffle is
    VRFV2WrapperConsumerBase,
    ConfirmedOwner
{
    event RequestSent(uint256 requestId, uint32 numWords);
    event RequestFulfilled(
        uint256 requestId,
        uint256[] randomWords,
        uint256 payment
    );

    struct RequestStatus {
        uint256 paid;
        bool fulfilled;
        uint256[] randomWords;
    }
    mapping(uint256 => RequestStatus)
        public s_requests;


    struct Raffle {
        uint256 requestId;
        uint32 entries;
    }
    mapping(string => Raffle)
        public s_raffles;

    uint256[] public requestIds;
    uint256 public lastRequestId;

    uint32 public callbackGasLimit = 100000;
    uint16 public requestConfirmations = 3;
    uint32 numWords = 1;

    // sepolia
    // address linkAddress = 0x779877A7B0D9E8603169DdbD7836e478b4624789;
    // address wrapperAddress = 0xab18414CD93297B0d12ac29E63Ca20f515b3DB46;

    // mainnet
    address linkAddress = 0x514910771AF9Ca656af840dff83E8264EcF986CA;
    address wrapperAddress = 0x5A861794B927983406fCE1D062e00b9368d97Df6;

    constructor()
        ConfirmedOwner(msg.sender)
        VRFV2WrapperConsumerBase(linkAddress, wrapperAddress)
    {}

    function startRaffle(
        string calldata _raffleName,
        uint32 _raffleEntries
    )
        external
        onlyOwner
        returns (Raffle memory raffle)
    {
        require(s_raffles[_raffleName].requestId == 0, "raffle already exists, name must be unique");
        uint256 requestId = requestRandomWords();
        raffle = Raffle({
            requestId: requestId,
            entries: _raffleEntries
        });
        s_raffles[_raffleName] = raffle;
        return raffle;
    }

    function checkWinner(
        string calldata _raffleName
    )
        external
        view
        returns (uint256 winner)
    {
        Raffle memory _raffle = s_raffles[_raffleName];
        require(_raffle.requestId > 0, "raffle not found");
        RequestStatus memory _request = s_requests[_raffle.requestId];
        require(_request.paid > 0, "chainlink request not found");
        require(_request.fulfilled == true, "chainlink request is still not confirmed");
        winner = _request.randomWords[0] % _raffle.entries;
        return winner;
    }

    function setCallbackGasLimit(
        uint32 _callbackGasLimit
    )
        external
        onlyOwner
    {
        callbackGasLimit = _callbackGasLimit;
    }

    function setRequestConfirmations(
        uint16 _requestConfirmations
    )
        external
        onlyOwner
    {
        requestConfirmations = _requestConfirmations;
    }


    function requestRandomWords()
        internal
        returns (uint256 requestId)
    {
        requestId = requestRandomness(
            callbackGasLimit,
            requestConfirmations,
            numWords
        );
        s_requests[requestId] = RequestStatus({
            paid: VRF_V2_WRAPPER.calculateRequestPrice(callbackGasLimit),
            randomWords: new uint256[](0),
            fulfilled: false
        });
        requestIds.push(requestId);
        lastRequestId = requestId;
        emit RequestSent(requestId, numWords);
        return requestId;
    }

    function fulfillRandomWords(
        uint256 _requestId,
        uint256[] memory _randomWords
    ) internal override {
        require(s_requests[_requestId].paid > 0, "request not found");
        s_requests[_requestId].fulfilled = true;
        s_requests[_requestId].randomWords = _randomWords;
        emit RequestFulfilled(
            _requestId,
            _randomWords,
            s_requests[_requestId].paid
        );
    }

    function getRequestStatus(
        uint256 _requestId
    )
        external
        view
        returns (uint256 paid, bool fulfilled, uint256[] memory randomWords)
    {
        require(s_requests[_requestId].paid > 0, "request not found");
        RequestStatus memory request = s_requests[_requestId];
        return (request.paid, request.fulfilled, request.randomWords);
    }

    /**
     * Allow withdraw of Link tokens from the contract
     */
    function withdrawLink() public onlyOwner {
        LinkTokenInterface link = LinkTokenInterface(linkAddress);
        require(
            link.transfer(msg.sender, link.balanceOf(address(this))),
            "Unable to transfer"
        );
    }
}

File 2 of 7 : VRFV2WrapperConsumerBase.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./interfaces/LinkTokenInterface.sol";
import "./interfaces/VRFV2WrapperInterface.sol";

/** *******************************************************************************
 * @notice Interface for contracts using VRF randomness through the VRF V2 wrapper
 * ********************************************************************************
 * @dev PURPOSE
 *
 * @dev Create VRF V2 requests without the need for subscription management. Rather than creating
 * @dev and funding a VRF V2 subscription, a user can use this wrapper to create one off requests,
 * @dev paying up front rather than at fulfillment.
 *
 * @dev Since the price is determined using the gas price of the request transaction rather than
 * @dev the fulfillment transaction, the wrapper charges an additional premium on callback gas
 * @dev usage, in addition to some extra overhead costs associated with the VRFV2Wrapper contract.
 * *****************************************************************************
 * @dev USAGE
 *
 * @dev Calling contracts must inherit from VRFV2WrapperConsumerBase. The consumer must be funded
 * @dev with enough LINK to make the request, otherwise requests will revert. To request randomness,
 * @dev call the 'requestRandomness' function with the desired VRF parameters. This function handles
 * @dev paying for the request based on the current pricing.
 *
 * @dev Consumers must implement the fullfillRandomWords function, which will be called during
 * @dev fulfillment with the randomness result.
 */
abstract contract VRFV2WrapperConsumerBase {
  LinkTokenInterface internal immutable LINK;
  VRFV2WrapperInterface internal immutable VRF_V2_WRAPPER;

  /**
   * @param _link is the address of LinkToken
   * @param _vrfV2Wrapper is the address of the VRFV2Wrapper contract
   */
  constructor(address _link, address _vrfV2Wrapper) {
    LINK = LinkTokenInterface(_link);
    VRF_V2_WRAPPER = VRFV2WrapperInterface(_vrfV2Wrapper);
  }

  /**
   * @dev Requests randomness from the VRF V2 wrapper.
   *
   * @param _callbackGasLimit is the gas limit that should be used when calling the consumer's
   *        fulfillRandomWords function.
   * @param _requestConfirmations is the number of confirmations to wait before fulfilling the
   *        request. A higher number of confirmations increases security by reducing the likelihood
   *        that a chain re-org changes a published randomness outcome.
   * @param _numWords is the number of random words to request.
   *
   * @return requestId is the VRF V2 request ID of the newly created randomness request.
   */
  function requestRandomness(
    uint32 _callbackGasLimit,
    uint16 _requestConfirmations,
    uint32 _numWords
  ) internal returns (uint256 requestId) {
    LINK.transferAndCall(
      address(VRF_V2_WRAPPER),
      VRF_V2_WRAPPER.calculateRequestPrice(_callbackGasLimit),
      abi.encode(_callbackGasLimit, _requestConfirmations, _numWords)
    );
    return VRF_V2_WRAPPER.lastRequestId();
  }

  /**
   * @notice fulfillRandomWords handles the VRF V2 wrapper response. The consuming contract must
   * @notice implement it.
   *
   * @param _requestId is the VRF V2 request ID.
   * @param _randomWords is the randomness result.
   */
  function fulfillRandomWords(uint256 _requestId, uint256[] memory _randomWords) internal virtual;

  function rawFulfillRandomWords(uint256 _requestId, uint256[] memory _randomWords) external {
    require(msg.sender == address(VRF_V2_WRAPPER), "only VRF V2 wrapper can fulfill");
    fulfillRandomWords(_requestId, _randomWords);
  }
}

File 3 of 7 : ConfirmedOwner.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ConfirmedOwnerWithProposal.sol";

/**
 * @title The ConfirmedOwner contract
 * @notice A contract with helpers for basic contract ownership.
 */
contract ConfirmedOwner is ConfirmedOwnerWithProposal {
  constructor(address newOwner) ConfirmedOwnerWithProposal(newOwner, address(0)) {}
}

File 4 of 7 : VRFV2WrapperInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface VRFV2WrapperInterface {
  /**
   * @return the request ID of the most recent VRF V2 request made by this wrapper. This should only
   * be relied option within the same transaction that the request was made.
   */
  function lastRequestId() external view returns (uint256);

  /**
   * @notice Calculates the price of a VRF request with the given callbackGasLimit at the current
   * @notice block.
   *
   * @dev This function relies on the transaction gas price which is not automatically set during
   * @dev simulation. To estimate the price at a specific gas price, use the estimatePrice function.
   *
   * @param _callbackGasLimit is the gas limit used to estimate the price.
   */
  function calculateRequestPrice(uint32 _callbackGasLimit) external view returns (uint256);

  /**
   * @notice Estimates the price of a VRF request with a specific gas limit and gas price.
   *
   * @dev This is a convenience function that can be called in simulation to better understand
   * @dev pricing.
   *
   * @param _callbackGasLimit is the gas limit used to estimate the price.
   * @param _requestGasPriceWei is the gas price in wei used for the estimation.
   */
  function estimateRequestPrice(uint32 _callbackGasLimit, uint256 _requestGasPriceWei) external view returns (uint256);
}

File 5 of 7 : LinkTokenInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface LinkTokenInterface {
  function allowance(address owner, address spender) external view returns (uint256 remaining);

  function approve(address spender, uint256 value) external returns (bool success);

  function balanceOf(address owner) external view returns (uint256 balance);

  function decimals() external view returns (uint8 decimalPlaces);

  function decreaseApproval(address spender, uint256 addedValue) external returns (bool success);

  function increaseApproval(address spender, uint256 subtractedValue) external;

  function name() external view returns (string memory tokenName);

  function symbol() external view returns (string memory tokenSymbol);

  function totalSupply() external view returns (uint256 totalTokensIssued);

  function transfer(address to, uint256 value) external returns (bool success);

  function transferAndCall(
    address to,
    uint256 value,
    bytes calldata data
  ) external returns (bool success);

  function transferFrom(
    address from,
    address to,
    uint256 value
  ) external returns (bool success);
}

File 6 of 7 : ConfirmedOwnerWithProposal.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./interfaces/OwnableInterface.sol";

/**
 * @title The ConfirmedOwner contract
 * @notice A contract with helpers for basic contract ownership.
 */
contract ConfirmedOwnerWithProposal is OwnableInterface {
  address private s_owner;
  address private s_pendingOwner;

  event OwnershipTransferRequested(address indexed from, address indexed to);
  event OwnershipTransferred(address indexed from, address indexed to);

  constructor(address newOwner, address pendingOwner) {
    require(newOwner != address(0), "Cannot set owner to zero");

    s_owner = newOwner;
    if (pendingOwner != address(0)) {
      _transferOwnership(pendingOwner);
    }
  }

  /**
   * @notice Allows an owner to begin transferring ownership to a new address,
   * pending.
   */
  function transferOwnership(address to) public override onlyOwner {
    _transferOwnership(to);
  }

  /**
   * @notice Allows an ownership transfer to be completed by the recipient.
   */
  function acceptOwnership() external override {
    require(msg.sender == s_pendingOwner, "Must be proposed owner");

    address oldOwner = s_owner;
    s_owner = msg.sender;
    s_pendingOwner = address(0);

    emit OwnershipTransferred(oldOwner, msg.sender);
  }

  /**
   * @notice Get the current owner
   */
  function owner() public view override returns (address) {
    return s_owner;
  }

  /**
   * @notice validate, transfer ownership, and emit relevant events
   */
  function _transferOwnership(address to) private {
    require(to != msg.sender, "Cannot transfer to self");

    s_pendingOwner = to;

    emit OwnershipTransferRequested(s_owner, to);
  }

  /**
   * @notice validate access
   */
  function _validateOwnership() internal view {
    require(msg.sender == s_owner, "Only callable by owner");
  }

  /**
   * @notice Reverts if called by anyone other than the contract owner.
   */
  modifier onlyOwner() {
    _validateOwnership();
    _;
  }
}

File 7 of 7 : OwnableInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface OwnableInterface {
  function owner() external returns (address);

  function transferOwnership(address recipient) external;

  function acceptOwnership() external;
}

Settings
{
  "optimizer": {
    "enabled": true,
    "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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"randomWords","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"payment","type":"uint256"}],"name":"RequestFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"numWords","type":"uint32"}],"name":"RequestSent","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"callbackGasLimit","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_raffleName","type":"string"}],"name":"checkWinner","outputs":[{"internalType":"uint256","name":"winner","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_requestId","type":"uint256"}],"name":"getRequestStatus","outputs":[{"internalType":"uint256","name":"paid","type":"uint256"},{"internalType":"bool","name":"fulfilled","type":"bool"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRequestId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_requestId","type":"uint256"},{"internalType":"uint256[]","name":"_randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requestConfirmations","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"s_raffles","outputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint32","name":"entries","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"s_requests","outputs":[{"internalType":"uint256","name":"paid","type":"uint256"},{"internalType":"bool","name":"fulfilled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_callbackGasLimit","type":"uint32"}],"name":"setCallbackGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_requestConfirmations","type":"uint16"}],"name":"setRequestConfirmations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_raffleName","type":"string"},{"internalType":"uint32","name":"_raffleEntries","type":"uint32"}],"name":"startRaffle","outputs":[{"components":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint32","name":"entries","type":"uint32"}],"internalType":"struct JRNYRaffle.Raffle","name":"raffle","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawLink","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c0604052600680547d514910771af9ca656af840dff83e8264ecf986ca000000010003000186a06001600160f01b0319909116179055600780546001600160a01b031916735a861794b927983406fce1d062e00b9368d97df617905534801561006857600080fd5b506006546007546001600160a01b036a010000000000000000000090920482166080521660a05233806000816100e55760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615610115576101158161011d565b5050506101c6565b336001600160a01b038216036101755760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016100dc565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60805160a05161145d6102006000396000818161041a01528181610a9501528181610dbb0152610ec401526000610d91015261145d6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638dc654a211610097578063d8a4676f11610066578063d8a4676f14610265578063da5987db14610287578063f2fde38b146102d9578063fc2a88c3146102ec57600080fd5b80638dc654a2146101e2578063a168fa89146101ea578063a4eb718c14610229578063b0fb162f1461023c57600080fd5b806379ba5097116100d357806379ba5097146101995780638796ba8c146101a15780638824f5a7146101b45780638da5cb5b146101c757600080fd5b80631f5d76a7146101055780631fe543e31461013e57806324f74697146101535780632c9790f114610178575b600080fd5b61011861011336600461100e565b6102f5565b604080518251815260209283015163ffffffff1692810192909252015b60405180910390f35b61015161014c3660046110a9565b61040f565b005b6006546101639063ffffffff1681565b60405163ffffffff9091168152602001610135565b61018b61018636600461115b565b610495565b604051908152602001610135565b610151610691565b61018b6101af36600461119d565b61073b565b6101516101c23660046111b6565b61075c565b6000546040516001600160a01b039091168152602001610135565b610151610788565b6102146101f836600461119d565b6002602052600090815260409020805460019091015460ff1682565b60408051928352901515602083015201610135565b6101516102373660046111e1565b6108c1565b60065461025290640100000000900461ffff1681565b60405161ffff9091168152602001610135565b61027861027336600461119d565b6108e5565b60405161013593929190611237565b6102bf610295366004611258565b80516020818301810180516003825292820191909301209152805460019091015463ffffffff1682565b6040805192835263ffffffff909116602083015201610135565b6101516102e73660046112ed565b6109d1565b61018b60055481565b60408051808201909152600080825260208201526103116109e2565b60038484604051610323929190611316565b90815260405190819003602001902054156103985760405162461bcd60e51b815260206004820152602a60248201527f726166666c6520616c7265616479206578697374732c206e616d65206d75737460448201526920626520756e6971756560b01b60648201526084015b60405180910390fd5b60006103a2610a37565b905060405180604001604052808281526020018463ffffffff16815250915081600386866040516103d4929190611316565b90815260405160209181900382019020825181559101516001909101805463ffffffff191663ffffffff909216919091179055509392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104875760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792056524620563220777261707065722063616e2066756c66696c6c00604482015260640161038f565b6104918282610bef565b5050565b600080600384846040516104aa929190611316565b908152604080519182900360209081018320838301909252815480845260019092015463ffffffff16908301529091506105195760405162461bcd60e51b815260206004820152601060248201526f1c9859999b19481b9bdd08199bdd5b9960821b604482015260640161038f565b80516000908152600260208181526040808420815160608101835281548152600182015460ff161515818501529381018054835181860281018601855281815292949386019383018282801561058e57602002820191906000526020600020905b81548152602001906001019080831161057a575b505050505081525050905060008160000151116105ed5760405162461bcd60e51b815260206004820152601b60248201527f636861696e6c696e6b2072657175657374206e6f7420666f756e640000000000604482015260640161038f565b602081015115156001146106545760405162461bcd60e51b815260206004820152602860248201527f636861696e6c696e6b2072657175657374206973207374696c6c206e6f7420636044820152671bdb999a5c9b595960c21b606482015260840161038f565b816020015163ffffffff16816040015160008151811061067657610676611326565b6020026020010151610688919061133c565b95945050505050565b6001546001600160a01b031633146106e45760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b604482015260640161038f565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6004818154811061074b57600080fd5b600091825260209091200154905081565b6107646109e2565b6006805461ffff9092166401000000000265ffff0000000019909216919091179055565b6107906109e2565b6006546040516370a0823160e01b8152306004820152600160501b9091046001600160a01b031690819063a9059cbb90339083906370a0823190602401602060405180830381865afa1580156107ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080e919061135e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087d9190611377565b6108be5760405162461bcd60e51b81526020600482015260126024820152712ab730b13632903a37903a3930b739b332b960711b604482015260640161038f565b50565b6108c96109e2565b6006805463ffffffff191663ffffffff92909216919091179055565b60008181526002602052604081205481906060906109395760405162461bcd60e51b81526020600482015260116024820152701c995c5d595cdd081b9bdd08199bdd5b99607a1b604482015260640161038f565b6000848152600260208181526040808420815160608101835281548152600182015460ff16151581850152938101805483518186028101860185528181529294938601938301828280156109ac57602002820191906000526020600020905b815481526020019060010190808311610998575b5050509190925250508151602083015160409093015190989297509550909350505050565b6109d96109e2565b6108be81610cc2565b6000546001600160a01b03163314610a355760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b604482015260640161038f565b565b600654600090610a689063ffffffff8082169161ffff64010000000082041691660100000000000090910416610d6b565b6040805160608101918290526006546310c1b4d560e21b90925263ffffffff9091166064820152909150807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634306d35460848301602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b07919061135e565b81526000602080830182905260408051838152808301825293810193909352848252600280825291839020845181558482015160018201805460ff1916911515919091179055928401518051610b64938501929190910190610f4c565b5050600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0182905550600581905560065460408051838152660100000000000090920463ffffffff1660208301527fcc58b13ad3eab50626c6a6300b1d139cd6ebb1688a7cced9461c2f7e762665ee910160405180910390a190565b600082815260026020526040902054610c3e5760405162461bcd60e51b81526020600482015260116024820152701c995c5d595cdd081b9bdd08199bdd5b99607a1b604482015260640161038f565b60008281526002602081815260409092206001818101805460ff191690911790558351610c7393919092019190840190610f4c565b50600082815260026020526040908190205490517f147eb1ff0c82f87f2b03e2c43f5a36488ff63ec6b730195fde4605f612f8db5191610cb69185918591611399565b60405180910390a15050565b336001600160a01b03821603610d1a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161038f565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6040516310c1b4d560e21b815263ffffffff841660048201526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691634000aea0917f00000000000000000000000000000000000000000000000000000000000000009190821690634306d35490602401602060405180830381865afa158015610e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e29919061135e565b6040805163ffffffff808b16602083015261ffff8a169282019290925290871660608201526080016040516020818303038152906040526040518463ffffffff1660e01b8152600401610e7e939291906113c2565b6020604051808303816000875af1158015610e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec19190611377565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fc2a88c36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f44919061135e565b949350505050565b828054828255906000526020600020908101928215610f87579160200282015b82811115610f87578251825591602001919060010190610f6c565b50610f93929150610f97565b5090565b5b80821115610f935760008155600101610f98565b60008083601f840112610fbe57600080fd5b50813567ffffffffffffffff811115610fd657600080fd5b602083019150836020828501011115610fee57600080fd5b9250929050565b803563ffffffff8116811461100957600080fd5b919050565b60008060006040848603121561102357600080fd5b833567ffffffffffffffff81111561103a57600080fd5b61104686828701610fac565b9094509250611059905060208501610ff5565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156110a1576110a1611062565b604052919050565b600080604083850312156110bc57600080fd5b8235915060208084013567ffffffffffffffff808211156110dc57600080fd5b818601915086601f8301126110f057600080fd5b81358181111561110257611102611062565b8060051b9150611113848301611078565b818152918301840191848101908984111561112d57600080fd5b938501935b8385101561114b57843582529385019390850190611132565b8096505050505050509250929050565b6000806020838503121561116e57600080fd5b823567ffffffffffffffff81111561118557600080fd5b61119185828601610fac565b90969095509350505050565b6000602082840312156111af57600080fd5b5035919050565b6000602082840312156111c857600080fd5b813561ffff811681146111da57600080fd5b9392505050565b6000602082840312156111f357600080fd5b6111da82610ff5565b600081518084526020808501945080840160005b8381101561122c57815187529582019590820190600101611210565b509495945050505050565b838152821515602082015260606040820152600061068860608301846111fc565b6000602080838503121561126b57600080fd5b823567ffffffffffffffff8082111561128357600080fd5b818501915085601f83011261129757600080fd5b8135818111156112a9576112a9611062565b6112bb601f8201601f19168501611078565b915080825286848285010111156112d157600080fd5b8084840185840137600090820190930192909252509392505050565b6000602082840312156112ff57600080fd5b81356001600160a01b03811681146111da57600080fd5b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b60008261135957634e487b7160e01b600052601260045260246000fd5b500690565b60006020828403121561137057600080fd5b5051919050565b60006020828403121561138957600080fd5b815180151581146111da57600080fd5b8381526060602082015260006113b260608301856111fc565b9050826040830152949350505050565b60018060a01b038416815260006020848184015260606040840152835180606085015260005b81811015611404578581018301518582016080015282016113e8565b506000608082860101526080601f19601f8301168501019250505094935050505056fea2646970667358221220276f59b98db41eb09eec36d59ee071aaa2b64e45eaabcc973637b74a6d26ad3064736f6c63430008130033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101005760003560e01c80638dc654a211610097578063d8a4676f11610066578063d8a4676f14610265578063da5987db14610287578063f2fde38b146102d9578063fc2a88c3146102ec57600080fd5b80638dc654a2146101e2578063a168fa89146101ea578063a4eb718c14610229578063b0fb162f1461023c57600080fd5b806379ba5097116100d357806379ba5097146101995780638796ba8c146101a15780638824f5a7146101b45780638da5cb5b146101c757600080fd5b80631f5d76a7146101055780631fe543e31461013e57806324f74697146101535780632c9790f114610178575b600080fd5b61011861011336600461100e565b6102f5565b604080518251815260209283015163ffffffff1692810192909252015b60405180910390f35b61015161014c3660046110a9565b61040f565b005b6006546101639063ffffffff1681565b60405163ffffffff9091168152602001610135565b61018b61018636600461115b565b610495565b604051908152602001610135565b610151610691565b61018b6101af36600461119d565b61073b565b6101516101c23660046111b6565b61075c565b6000546040516001600160a01b039091168152602001610135565b610151610788565b6102146101f836600461119d565b6002602052600090815260409020805460019091015460ff1682565b60408051928352901515602083015201610135565b6101516102373660046111e1565b6108c1565b60065461025290640100000000900461ffff1681565b60405161ffff9091168152602001610135565b61027861027336600461119d565b6108e5565b60405161013593929190611237565b6102bf610295366004611258565b80516020818301810180516003825292820191909301209152805460019091015463ffffffff1682565b6040805192835263ffffffff909116602083015201610135565b6101516102e73660046112ed565b6109d1565b61018b60055481565b60408051808201909152600080825260208201526103116109e2565b60038484604051610323929190611316565b90815260405190819003602001902054156103985760405162461bcd60e51b815260206004820152602a60248201527f726166666c6520616c7265616479206578697374732c206e616d65206d75737460448201526920626520756e6971756560b01b60648201526084015b60405180910390fd5b60006103a2610a37565b905060405180604001604052808281526020018463ffffffff16815250915081600386866040516103d4929190611316565b90815260405160209181900382019020825181559101516001909101805463ffffffff191663ffffffff909216919091179055509392505050565b336001600160a01b037f0000000000000000000000005a861794b927983406fce1d062e00b9368d97df616146104875760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792056524620563220777261707065722063616e2066756c66696c6c00604482015260640161038f565b6104918282610bef565b5050565b600080600384846040516104aa929190611316565b908152604080519182900360209081018320838301909252815480845260019092015463ffffffff16908301529091506105195760405162461bcd60e51b815260206004820152601060248201526f1c9859999b19481b9bdd08199bdd5b9960821b604482015260640161038f565b80516000908152600260208181526040808420815160608101835281548152600182015460ff161515818501529381018054835181860281018601855281815292949386019383018282801561058e57602002820191906000526020600020905b81548152602001906001019080831161057a575b505050505081525050905060008160000151116105ed5760405162461bcd60e51b815260206004820152601b60248201527f636861696e6c696e6b2072657175657374206e6f7420666f756e640000000000604482015260640161038f565b602081015115156001146106545760405162461bcd60e51b815260206004820152602860248201527f636861696e6c696e6b2072657175657374206973207374696c6c206e6f7420636044820152671bdb999a5c9b595960c21b606482015260840161038f565b816020015163ffffffff16816040015160008151811061067657610676611326565b6020026020010151610688919061133c565b95945050505050565b6001546001600160a01b031633146106e45760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b604482015260640161038f565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6004818154811061074b57600080fd5b600091825260209091200154905081565b6107646109e2565b6006805461ffff9092166401000000000265ffff0000000019909216919091179055565b6107906109e2565b6006546040516370a0823160e01b8152306004820152600160501b9091046001600160a01b031690819063a9059cbb90339083906370a0823190602401602060405180830381865afa1580156107ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080e919061135e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087d9190611377565b6108be5760405162461bcd60e51b81526020600482015260126024820152712ab730b13632903a37903a3930b739b332b960711b604482015260640161038f565b50565b6108c96109e2565b6006805463ffffffff191663ffffffff92909216919091179055565b60008181526002602052604081205481906060906109395760405162461bcd60e51b81526020600482015260116024820152701c995c5d595cdd081b9bdd08199bdd5b99607a1b604482015260640161038f565b6000848152600260208181526040808420815160608101835281548152600182015460ff16151581850152938101805483518186028101860185528181529294938601938301828280156109ac57602002820191906000526020600020905b815481526020019060010190808311610998575b5050509190925250508151602083015160409093015190989297509550909350505050565b6109d96109e2565b6108be81610cc2565b6000546001600160a01b03163314610a355760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b604482015260640161038f565b565b600654600090610a689063ffffffff8082169161ffff64010000000082041691660100000000000090910416610d6b565b6040805160608101918290526006546310c1b4d560e21b90925263ffffffff9091166064820152909150807f0000000000000000000000005a861794b927983406fce1d062e00b9368d97df66001600160a01b0316634306d35460848301602060405180830381865afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b07919061135e565b81526000602080830182905260408051838152808301825293810193909352848252600280825291839020845181558482015160018201805460ff1916911515919091179055928401518051610b64938501929190910190610f4c565b5050600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0182905550600581905560065460408051838152660100000000000090920463ffffffff1660208301527fcc58b13ad3eab50626c6a6300b1d139cd6ebb1688a7cced9461c2f7e762665ee910160405180910390a190565b600082815260026020526040902054610c3e5760405162461bcd60e51b81526020600482015260116024820152701c995c5d595cdd081b9bdd08199bdd5b99607a1b604482015260640161038f565b60008281526002602081815260409092206001818101805460ff191690911790558351610c7393919092019190840190610f4c565b50600082815260026020526040908190205490517f147eb1ff0c82f87f2b03e2c43f5a36488ff63ec6b730195fde4605f612f8db5191610cb69185918591611399565b60405180910390a15050565b336001600160a01b03821603610d1a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161038f565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6040516310c1b4d560e21b815263ffffffff841660048201526000906001600160a01b037f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca811691634000aea0917f0000000000000000000000005a861794b927983406fce1d062e00b9368d97df69190821690634306d35490602401602060405180830381865afa158015610e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e29919061135e565b6040805163ffffffff808b16602083015261ffff8a169282019290925290871660608201526080016040516020818303038152906040526040518463ffffffff1660e01b8152600401610e7e939291906113c2565b6020604051808303816000875af1158015610e9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec19190611377565b507f0000000000000000000000005a861794b927983406fce1d062e00b9368d97df66001600160a01b031663fc2a88c36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f44919061135e565b949350505050565b828054828255906000526020600020908101928215610f87579160200282015b82811115610f87578251825591602001919060010190610f6c565b50610f93929150610f97565b5090565b5b80821115610f935760008155600101610f98565b60008083601f840112610fbe57600080fd5b50813567ffffffffffffffff811115610fd657600080fd5b602083019150836020828501011115610fee57600080fd5b9250929050565b803563ffffffff8116811461100957600080fd5b919050565b60008060006040848603121561102357600080fd5b833567ffffffffffffffff81111561103a57600080fd5b61104686828701610fac565b9094509250611059905060208501610ff5565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156110a1576110a1611062565b604052919050565b600080604083850312156110bc57600080fd5b8235915060208084013567ffffffffffffffff808211156110dc57600080fd5b818601915086601f8301126110f057600080fd5b81358181111561110257611102611062565b8060051b9150611113848301611078565b818152918301840191848101908984111561112d57600080fd5b938501935b8385101561114b57843582529385019390850190611132565b8096505050505050509250929050565b6000806020838503121561116e57600080fd5b823567ffffffffffffffff81111561118557600080fd5b61119185828601610fac565b90969095509350505050565b6000602082840312156111af57600080fd5b5035919050565b6000602082840312156111c857600080fd5b813561ffff811681146111da57600080fd5b9392505050565b6000602082840312156111f357600080fd5b6111da82610ff5565b600081518084526020808501945080840160005b8381101561122c57815187529582019590820190600101611210565b509495945050505050565b838152821515602082015260606040820152600061068860608301846111fc565b6000602080838503121561126b57600080fd5b823567ffffffffffffffff8082111561128357600080fd5b818501915085601f83011261129757600080fd5b8135818111156112a9576112a9611062565b6112bb601f8201601f19168501611078565b915080825286848285010111156112d157600080fd5b8084840185840137600090820190930192909252509392505050565b6000602082840312156112ff57600080fd5b81356001600160a01b03811681146111da57600080fd5b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b60008261135957634e487b7160e01b600052601260045260246000fd5b500690565b60006020828403121561137057600080fd5b5051919050565b60006020828403121561138957600080fd5b815180151581146111da57600080fd5b8381526060602082015260006113b260608301856111fc565b9050826040830152949350505050565b60018060a01b038416815260006020848184015260606040840152835180606085015260005b81811015611404578581018301518582016080015282016113e8565b506000608082860101526080601f19601f8301168501019250505094935050505056fea2646970667358221220276f59b98db41eb09eec36d59ee071aaa2b64e45eaabcc973637b74a6d26ad3064736f6c63430008130033

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.