ETH Price: $2,636.14 (+1.33%)

Contract

0xB99adA738455e4C3bB53b583459C2c7B36840999
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim166281322023-02-14 16:18:11609 days ago1676391491IN
0xB99adA73...B36840999
0 ETH0.0024242330.88392378
Set Winner166244492023-02-14 3:55:47610 days ago1676346947IN
0xB99adA73...B36840999
0 ETH0.0006733914.52152541
Lottery166244252023-02-14 3:50:59610 days ago1676346659IN
0xB99adA73...B36840999
0 ETH0.0008723215.053264
Request Random W...166238092023-02-14 1:47:23610 days ago1676339243IN
0xB99adA73...B36840999
0 ETH0.0049688617.10405117
Request Random W...166237552023-02-14 1:36:35610 days ago1676338595IN
0xB99adA73...B36840999
0 ETH0.0067444916.83996786
Set Ticket Url166237522023-02-14 1:35:59610 days ago1676338559IN
0xB99adA73...B36840999
0 ETH0.0022930716.44548515
Claim166011372023-02-10 21:47:35613 days ago1676065655IN
0xB99adA73...B36840999
0 ETH0.0024085439.23027829
Set Winner165743682023-02-07 3:57:11617 days ago1675742231IN
0xB99adA73...B36840999
0 ETH0.0010539322.72773765
Lottery165743582023-02-07 3:55:11617 days ago1675742111IN
0xB99adA73...B36840999
0 ETH0.0014350625.05787633
Request Random W...165737582023-02-07 1:54:23617 days ago1675734863IN
0xB99adA73...B36840999
0 ETH0.0067480423.22842384
Set Ticket Url165736172023-02-07 1:26:11617 days ago1675733171IN
0xB99adA73...B36840999
0 ETH0.0034598224.81316766
Claim165273592023-01-31 14:19:35623 days ago1675174775IN
0xB99adA73...B36840999
0 ETH0.0033312442.4389427
Set Winner165242442023-01-31 3:52:59624 days ago1675137179IN
0xB99adA73...B36840999
0 ETH0.0007537316.25408252
Lottery165242332023-01-31 3:50:47624 days ago1675137047IN
0xB99adA73...B36840999
0 ETH0.0008632615.25442272
Request Random W...165235652023-01-31 1:36:47624 days ago1675129007IN
0xB99adA73...B36840999
0 ETH0.0054149818.63969462
Set Ticket Url165235522023-01-31 1:34:11624 days ago1675128851IN
0xB99adA73...B36840999
0 ETH0.0022561616.1807565
Claim164766032023-01-24 12:15:35631 days ago1674562535IN
0xB99adA73...B36840999
0 ETH0.0011591714.76751216
Set Winner164741432023-01-24 4:00:35631 days ago1674532835IN
0xB99adA73...B36840999
0 ETH0.0003669613.86239532
Set Winner164741422023-01-24 4:00:23631 days ago1674532823IN
0xB99adA73...B36840999
0 ETH0.0006821214.70979586
Lottery164740842023-01-24 3:48:47631 days ago1674532127IN
0xB99adA73...B36840999
0 ETH0.0009169216.39972784
Request Random W...164733892023-01-24 1:28:59631 days ago1674523739IN
0xB99adA73...B36840999
0 ETH0.0046329615.94781909
Set Ticket Url164733862023-01-24 1:28:23631 days ago1674523703IN
0xB99adA73...B36840999
0 ETH0.0022212715.93052045
Claim164300072023-01-18 0:08:35637 days ago1674000515IN
0xB99adA73...B36840999
0 ETH0.0020160125.68334221
Set Winner164239762023-01-17 3:58:35638 days ago1673927915IN
0xB99adA73...B36840999
0 ETH0.0006510214.03927373
Lottery164239632023-01-17 3:55:59638 days ago1673927759IN
0xB99adA73...B36840999
0 ETH0.0008554315.48801305
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:
MegaSerumLottery

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 13 : MegaSerumLottery.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.9;

import "@chainlink/contracts/src/v0.8/ConfirmedOwner.sol";
import "@chainlink/contracts/src/v0.8/VRFV2WrapperConsumerBase.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol";

interface DogcSerumInterface {
  function balanceOf(address account, uint256 id)
  external
  view
  returns (uint256);

  function safeTransferFrom(
    address from,
    address to,
    uint256 id,
    uint256 amount,
    bytes memory data
  ) external;
}


contract MegaSerumLottery is VRFV2WrapperConsumerBase, ConfirmedOwner, ReentrancyGuard, ERC1155Holder {
  DogcSerumInterface public immutable serum;

  event RequestSent(uint256 requestId, uint32 numWords);
  event RequestFulfilled(
    uint256 requestId,
    uint256[] randomWords,
    uint256 payment
  );

  event LotteryResults(uint16[] results);

  event ClaimSerum(uint256 _phase);

  struct RequestStatus {
    uint256 paid; // amount paid in link
    bool fulfilled; // whether the request has been successfully fulfilled
    uint256[] randomWords;
  }
  mapping(uint256 => RequestStatus) public s_requests; /* requestId --> requestStatus */


  uint256[] public requestIds;
  uint256 public lastRequestId;
  address public linkAddress;
  address public wrapperAddress;

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

  uint16[] public results;

  struct PhaseInfo {
    string ticketUrl;
    uint256 ticketsAmount;
    address winner;
  }
  mapping(uint256 => PhaseInfo) public phaseInfo;
  mapping(uint256 => bool) public claimed;

  constructor(address _linkAddress, address _wrapperAddress, address _serum)
    ConfirmedOwner(msg.sender)
    VRFV2WrapperConsumerBase(_linkAddress, _wrapperAddress)
  {
    linkAddress = _linkAddress;
    wrapperAddress = _wrapperAddress;
    serum = DogcSerumInterface(_serum);
  }

  function requestRandomWords() external onlyOwner 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);
  }

  function withdrawLink() public onlyOwner {
    LinkTokenInterface link = LinkTokenInterface(linkAddress);
    require(
      link.transfer(msg.sender, link.balanceOf(address(this))),
      "Unable to transfer"
    );
  }

  function lottery(uint256 _phase) external onlyOwner returns (uint16[] memory) {
    require(phaseInfo[_phase].ticketsAmount > 0, "Haven't set participants number");
    require(s_requests[lastRequestId].fulfilled, "Haven't got randomness");
    uint256 random = s_requests[lastRequestId].randomWords[0];

    uint16 result = uint16(random % phaseInfo[_phase].ticketsAmount);
    results.push(result);

    emit LotteryResults(results);
    return results;
  }

  function setTicketUrl(uint256 _phase, string memory _baseuri, uint256 _ticketsAmount) external onlyOwner {
    phaseInfo[_phase] = PhaseInfo(_baseuri, _ticketsAmount, address(0));
  }

  function setWinner(uint256 _phase, address _winner) external onlyOwner {
    phaseInfo[_phase].winner = _winner;
  }

  function balance(uint256 id) public view returns (uint256) {
    return serum.balanceOf(address(this), id);
  }

  function claim(uint256 _phase) external {
    require(!claimed[_phase], 'Already claimed the mega serum');
    require(msg.sender == phaseInfo[_phase].winner, 'Not the winner');
    require(balance(3) >= 1, "Insufficient remains");

    claimed[_phase] = true;
    serum.safeTransferFrom(address(this), msg.sender, 3, 1, "");
    emit ClaimSerum(_phase);
  }
}

File 2 of 13 : 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 3 of 13 : 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 4 of 13 : 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 5 of 13 : 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;
}

File 6 of 13 : 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 7 of 13 : 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 8 of 13 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.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;
    }
}

File 9 of 13 : IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 10 of 13 : ERC1155Holder.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/utils/ERC1155Holder.sol)

pragma solidity ^0.8.0;

import "./ERC1155Receiver.sol";

/**
 * Simple implementation of `ERC1155Receiver` that will allow a contract to hold ERC1155 tokens.
 *
 * IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be
 * stuck.
 *
 * @dev _Available since v3.1._
 */
contract ERC1155Holder is ERC1155Receiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] memory,
        uint256[] memory,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC1155BatchReceived.selector;
    }
}

File 11 of 13 : ERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "../IERC1155Receiver.sol";
import "../../../utils/introspection/ERC165.sol";

/**
 * @dev _Available since v3.1._
 */
abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
    }
}

File 12 of 13 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 13 of 13 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_linkAddress","type":"address"},{"internalType":"address","name":"_wrapperAddress","type":"address"},{"internalType":"address","name":"_serum","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_phase","type":"uint256"}],"name":"ClaimSerum","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16[]","name":"results","type":"uint16[]"}],"name":"LotteryResults","type":"event"},{"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":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_phase","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"linkAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_phase","type":"uint256"}],"name":"lottery","outputs":[{"internalType":"uint16[]","name":"","type":"uint16[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"phaseInfo","outputs":[{"internalType":"string","name":"ticketUrl","type":"string"},{"internalType":"uint256","name":"ticketsAmount","type":"uint256"},{"internalType":"address","name":"winner","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"requestRandomWords","outputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"results","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":[],"name":"serum","outputs":[{"internalType":"contract DogcSerumInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_phase","type":"uint256"},{"internalType":"string","name":"_baseuri","type":"string"},{"internalType":"uint256","name":"_ticketsAmount","type":"uint256"}],"name":"setTicketUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_phase","type":"uint256"},{"internalType":"address","name":"_winner","type":"address"}],"name":"setWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawLink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wrapperAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60e060405260078054600160a01b600160f01b03191665080018000c3560a51b1790553480156200002f57600080fd5b5060405162002073380380620020738339810160408190526200005291620001fa565b6001600160a01b03808416608052821660a0523380600081620000bc5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000ef57620000ef8162000131565b5050600160025550600680546001600160a01b03199081166001600160a01b039586161790915560078054909116928416929092179091551660c05262000244565b6001600160a01b0381163314156200018c5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620000b3565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0381168114620001f557600080fd5b919050565b6000806000606084860312156200021057600080fd5b6200021b84620001dd565b92506200022b60208501620001dd565b91506200023b60408501620001dd565b90509250925092565b60805160a05160c051611ddc620002976000396000818161023801528181610786015261083c01526000818161059f01528181610e950152818161118201526112a9015260006111580152611ddc6000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80638da5cb5b116100c3578063d8a4676f1161007c578063d8a4676f1461036c578063dbe7e3bd1461038e578063e0c86289146103b1578063f23a6e61146103b9578063f2fde38b146103d8578063fc2a88c3146103eb57600080fd5b80638da5cb5b146102a95780638dc654a2146102ba5780639c623683146102c2578063a168fa89146102d5578063a57d156014610314578063bc197c811461033457600080fd5b8063379607f511610115578063379607f5146102205780633af486251461023357806347bb89f01461025a57806379ba50971461027b5780637df8b802146102835780638796ba8c1461029657600080fd5b806301ffc9a71461015d57806304c3ea74146101855780631a4b0a251461019a5780631b0c27da146101bc5780631fe543e3146101e2578063235cea98146101f5575b600080fd5b61017061016b3660046114bd565b6103f4565b60405190151581526020015b60405180910390f35b61019861019336600461158d565b61042b565b005b6101ad6101a83660046115f1565b6104a8565b60405161017c93929190611657565b6101cf6101ca3660046115f1565b61055c565b60405161ffff909116815260200161017c565b6101986101f036600461170a565b610594565b600654610208906001600160a01b031681565b6040516001600160a01b03909116815260200161017c565b61019861022e3660046115f1565b61061f565b6102087f000000000000000000000000000000000000000000000000000000000000000081565b61026d6102683660046115f1565b61081e565b60405190815260200161017c565b6101986108bd565b600754610208906001600160a01b031681565b61026d6102a43660046115f1565b610967565b6000546001600160a01b0316610208565b610198610988565b6101986102d0366004611768565b610ad9565b6102ff6102e33660046115f1565b6003602052600090815260409020805460019091015460ff1682565b6040805192835290151560208301520161017c565b6103276103223660046115f1565b610b12565b60405161017c9190611794565b6103536103423660046117fc565b63bc197c8160e01b95945050505050565b6040516001600160e01b0319909116815260200161017c565b61037f61037a3660046115f1565b610d3a565b60405161017c939291906118e1565b61017061039c3660046115f1565b600a6020526000908152604090205460ff1681565b61026d610e28565b6103536103c736600461190b565b63f23a6e6160e01b95945050505050565b6101986103e6366004611970565b610ff9565b61026d60055481565b60006001600160e01b03198216630271189760e51b148061042557506301ffc9a760e01b6001600160e01b03198316145b92915050565b61043361100a565b60408051606081018252838152602080820184905260008284018190528681526009825292909220815180519293919261047092849201906113ea565b5060208201516001820155604090910151600290910180546001600160a01b0319166001600160a01b03909216919091179055505050565b6009602052600090815260409020805481906104c39061198b565b80601f01602080910402602001604051908101604052809291908181526020018280546104ef9061198b565b801561053c5780601f106105115761010080835404028352916020019161053c565b820191906000526020600020905b81548152906001019060200180831161051f57829003601f168201915b5050505060018301546002909301549192916001600160a01b0316905083565b6008818154811061056c57600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106115760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792056524620563220777261707065722063616e2066756c66696c6c0060448201526064015b60405180910390fd5b61061b828261105f565b5050565b6000818152600a602052604090205460ff161561067e5760405162461bcd60e51b815260206004820152601e60248201527f416c726561647920636c61696d656420746865206d65676120736572756d00006044820152606401610608565b6000818152600960205260409020600201546001600160a01b031633146106d85760405162461bcd60e51b815260206004820152600e60248201526d2737ba103a3432903bb4b73732b960911b6044820152606401610608565b60016106e4600361081e565b10156107295760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742072656d61696e7360601b6044820152606401610608565b6000818152600a6020526040808220805460ff191660019081179091559051637921219560e11b815230600482015233602482015260036044820152606481019190915260a0608482015260a48101919091526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f242432a9060c401600060405180830381600087803b1580156107ca57600080fd5b505af11580156107de573d6000803e3d6000fd5b505050507f288bc11ed9dc15e51a1944d3856fa7c043e2a6f1d164bc68fd629e5c5b93913c8160405161081391815260200190565b60405180910390a150565b604051627eeac760e11b8152306004820152602481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169062fdd58e9060440160206040518083038186803b15801561088557600080fd5b505afa158015610899573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042591906119c6565b6001546001600160a01b031633146109105760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610608565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6004818154811061097757600080fd5b600091825260209091200154905081565b61099061100a565b6006546040516370a0823160e01b81523060048201526001600160a01b0390911690819063a9059cbb90339083906370a082319060240160206040518083038186803b1580156109df57600080fd5b505afa1580156109f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1791906119c6565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610a5d57600080fd5b505af1158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9591906119df565b610ad65760405162461bcd60e51b81526020600482015260126024820152712ab730b13632903a37903a3930b739b332b960711b6044820152606401610608565b50565b610ae161100a565b60009182526009602052604090912060020180546001600160a01b0319166001600160a01b03909216919091179055565b6060610b1c61100a565b600082815260096020526040902060010154610b7a5760405162461bcd60e51b815260206004820152601f60248201527f486176656e277420736574207061727469636970616e7473206e756d626572006044820152606401610608565b60055460009081526003602052604090206001015460ff16610bd75760405162461bcd60e51b8152602060048201526016602482015275486176656e277420676f742072616e646f6d6e65737360501b6044820152606401610608565b600554600090815260036020526040812060020180548290610bfb57610bfb611a01565b600091825260208083209091015485835260099091526040822060010154909250610c269083611a17565b6008805460018101825560008290527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee360108204018054600f9092166002026101000a61ffff81810219909316928516029190911790556040519192507faf6d5756963048df4e487b5e4b4953c79456415b6a1cc2317543ba4bc124c64e91610caf9190611a39565b60405180910390a16008805480602002602001604051908101604052809291908181526020018280548015610d2b57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411610cf25790505b5050505050925050505b919050565b6000818152600360205260408120548190606090610d8e5760405162461bcd60e51b81526020600482015260116024820152701c995c5d595cdd081b9bdd08199bdd5b99607a1b6044820152606401610608565b6000848152600360209081526040808320815160608101835281548152600182015460ff16151581850152600282018054845181870281018701865281815292959394860193830182828015610e0357602002820191906000526020600020905b815481526020019060010190808311610def575b5050509190925250508151602083015160409093015190989297509550909350505050565b6000610e3261100a565b600754610e629063ffffffff600160a01b820481169161ffff600160c01b82041691600160d01b90910416611132565b6040805160608101918290526007546310c1b4d560e21b909252600160a01b90910463ffffffff166064820152909150807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634306d3546084830160206040518083038186803b158015610ede57600080fd5b505afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906119c6565b815260006020808301829052604080518381528083018252938101939093528482526003815290829020835181558382015160018201805460ff1916911515919091179055918301518051610f71926002850192019061146e565b5050600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0182905550600581905560075460408051838152600160d01b90920463ffffffff1660208301527fcc58b13ad3eab50626c6a6300b1d139cd6ebb1688a7cced9461c2f7e762665ee910160405180910390a190565b61100161100a565b610ad681611340565b6000546001600160a01b0316331461105d5760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610608565b565b6000828152600360205260409020546110ae5760405162461bcd60e51b81526020600482015260116024820152701c995c5d595cdd081b9bdd08199bdd5b99607a1b6044820152606401610608565b60008281526003602090815260409091206001818101805460ff1916909117905582516110e39260029092019184019061146e565b50600082815260036020526040908190205490517f147eb1ff0c82f87f2b03e2c43f5a36488ff63ec6b730195fde4605f612f8db51916111269185918591611d56565b60405180910390a15050565b6040516310c1b4d560e21b815263ffffffff841660048201526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691634000aea0917f00000000000000000000000000000000000000000000000000000000000000009190821690634306d3549060240160206040518083038186803b1580156111c757600080fd5b505afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff91906119c6565b6040805163ffffffff808b16602083015261ffff8a169282019290925290871660608201526080016040516020818303038152906040526040518463ffffffff1660e01b815260040161125493929190611d7f565b602060405180830381600087803b15801561126e57600080fd5b505af1158015611282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a691906119df565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fc2a88c36040518163ffffffff1660e01b815260040160206040518083038186803b15801561130057600080fd5b505afa158015611314573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133891906119c6565b949350505050565b6001600160a01b0381163314156113995760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610608565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b8280546113f69061198b565b90600052602060002090601f016020900481019282611418576000855561145e565b82601f1061143157805160ff191683800117855561145e565b8280016001018555821561145e579182015b8281111561145e578251825591602001919060010190611443565b5061146a9291506114a8565b5090565b82805482825590600052602060002090810192821561145e579160200282018281111561145e578251825591602001919060010190611443565b5b8082111561146a57600081556001016114a9565b6000602082840312156114cf57600080fd5b81356001600160e01b0319811681146114e757600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561152d5761152d6114ee565b604052919050565b600067ffffffffffffffff83111561154f5761154f6114ee565b611562601f8401601f1916602001611504565b905082815283838301111561157657600080fd5b828260208301376000602084830101529392505050565b6000806000606084860312156115a257600080fd5b83359250602084013567ffffffffffffffff8111156115c057600080fd5b8401601f810186136115d157600080fd5b6115e086823560208401611535565b925050604084013590509250925092565b60006020828403121561160357600080fd5b5035919050565b6000815180845260005b8181101561163057602081850181015186830182015201611614565b81811115611642576000602083870101525b50601f01601f19169290920160200192915050565b60608152600061166a606083018661160a565b6020830194909452506001600160a01b0391909116604090910152919050565b600082601f83011261169b57600080fd5b8135602067ffffffffffffffff8211156116b7576116b76114ee565b8160051b6116c6828201611504565b92835284810182019282810190878511156116e057600080fd5b83870192505b848310156116ff578235825291830191908301906116e6565b979650505050505050565b6000806040838503121561171d57600080fd5b82359150602083013567ffffffffffffffff81111561173b57600080fd5b6117478582860161168a565b9150509250929050565b80356001600160a01b0381168114610d3557600080fd5b6000806040838503121561177b57600080fd5b8235915061178b60208401611751565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156117d057835161ffff16835292840192918401916001016117b0565b50909695505050505050565b600082601f8301126117ed57600080fd5b6114e783833560208501611535565b600080600080600060a0868803121561181457600080fd5b61181d86611751565b945061182b60208701611751565b9350604086013567ffffffffffffffff8082111561184857600080fd5b61185489838a0161168a565b9450606088013591508082111561186a57600080fd5b61187689838a0161168a565b9350608088013591508082111561188c57600080fd5b50611899888289016117dc565b9150509295509295909350565b600081518084526020808501945080840160005b838110156118d6578151875295820195908201906001016118ba565b509495945050505050565b838152821515602082015260606040820152600061190260608301846118a6565b95945050505050565b600080600080600060a0868803121561192357600080fd5b61192c86611751565b945061193a60208701611751565b93506040860135925060608601359150608086013567ffffffffffffffff81111561196457600080fd5b611899888289016117dc565b60006020828403121561198257600080fd5b6114e782611751565b600181811c9082168061199f57607f821691505b602082108114156119c057634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156119d857600080fd5b5051919050565b6000602082840312156119f157600080fd5b815180151581146114e757600080fd5b634e487b7160e01b600052603260045260246000fd5b600082611a3457634e487b7160e01b600052601260045260246000fd5b500690565b60006020808301818452808554611a54818490815260200190565b60008881526020812094509092505b81600f82011015611baa57835461ffff8082168552601082901c8116878601526040611a9881870183858b1c1661ffff169052565b6060611aae818801848660301c1661ffff169052565b6080611ac38189018587861c1661ffff169052565b60a09250611adb838901858760501c1661ffff169052565b60c0611af0818a018688861c1661ffff169052565b60e09250611b08838a01868860701c1661ffff169052565b61ffff86831c8616166101008a0152611b2d6101208a01868860901c1661ffff169052565b61ffff86851c8616166101408a0152611b526101608a01868860b01c1661ffff169052565b61ffff86821c8616166101808a01525050611b796101a08801848660d01c1661ffff169052565b83901c9190911661ffff166101c08601525060f01c6101e08401526001939093019261020090920191601001611a63565b92549281811015611bc45761ffff84168352918401916001015b81811015611bdf57601084901c61ffff168352918401916001015b81811015611bf85783851c61ffff168352918401916001015b81811015611c1357603084901c61ffff168352918401916001015b81811015611c2e57604084901c61ffff168352918401916001015b81811015611c4957605084901c61ffff168352918401916001015b81811015611c6457606084901c61ffff168352918401916001015b81811015611c7f57607084901c61ffff168352918401916001015b81811015611c9a57608084901c61ffff168352918401916001015b81811015611cb557609084901c61ffff168352918401916001015b81811015611cd05760a084901c61ffff168352918401916001015b81811015611ceb5760b084901c61ffff168352918401916001015b81811015611d065760c084901c61ffff168352918401916001015b81811015611d215760d084901c61ffff168352918401916001015b81811015611d3c5760e084901c61ffff168352918401916001015b818110156117d057505060f09190911c8152019392505050565b838152606060208201526000611d6f60608301856118a6565b9050826040830152949350505050565b60018060a01b0384168152826020820152606060408201526000611902606083018461160a56fea2646970667358221220f6adc309f0d3da392db5b90b4ac3a9dc0e8b57e56b76d2fcfe0d9c222cbb2bff64736f6c63430008090033000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca0000000000000000000000005a861794b927983406fce1d062e00b9368d97df6000000000000000000000000a3de26661e786d7555493eca6d40d07ce14c4762

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101585760003560e01c80638da5cb5b116100c3578063d8a4676f1161007c578063d8a4676f1461036c578063dbe7e3bd1461038e578063e0c86289146103b1578063f23a6e61146103b9578063f2fde38b146103d8578063fc2a88c3146103eb57600080fd5b80638da5cb5b146102a95780638dc654a2146102ba5780639c623683146102c2578063a168fa89146102d5578063a57d156014610314578063bc197c811461033457600080fd5b8063379607f511610115578063379607f5146102205780633af486251461023357806347bb89f01461025a57806379ba50971461027b5780637df8b802146102835780638796ba8c1461029657600080fd5b806301ffc9a71461015d57806304c3ea74146101855780631a4b0a251461019a5780631b0c27da146101bc5780631fe543e3146101e2578063235cea98146101f5575b600080fd5b61017061016b3660046114bd565b6103f4565b60405190151581526020015b60405180910390f35b61019861019336600461158d565b61042b565b005b6101ad6101a83660046115f1565b6104a8565b60405161017c93929190611657565b6101cf6101ca3660046115f1565b61055c565b60405161ffff909116815260200161017c565b6101986101f036600461170a565b610594565b600654610208906001600160a01b031681565b6040516001600160a01b03909116815260200161017c565b61019861022e3660046115f1565b61061f565b6102087f000000000000000000000000a3de26661e786d7555493eca6d40d07ce14c476281565b61026d6102683660046115f1565b61081e565b60405190815260200161017c565b6101986108bd565b600754610208906001600160a01b031681565b61026d6102a43660046115f1565b610967565b6000546001600160a01b0316610208565b610198610988565b6101986102d0366004611768565b610ad9565b6102ff6102e33660046115f1565b6003602052600090815260409020805460019091015460ff1682565b6040805192835290151560208301520161017c565b6103276103223660046115f1565b610b12565b60405161017c9190611794565b6103536103423660046117fc565b63bc197c8160e01b95945050505050565b6040516001600160e01b0319909116815260200161017c565b61037f61037a3660046115f1565b610d3a565b60405161017c939291906118e1565b61017061039c3660046115f1565b600a6020526000908152604090205460ff1681565b61026d610e28565b6103536103c736600461190b565b63f23a6e6160e01b95945050505050565b6101986103e6366004611970565b610ff9565b61026d60055481565b60006001600160e01b03198216630271189760e51b148061042557506301ffc9a760e01b6001600160e01b03198316145b92915050565b61043361100a565b60408051606081018252838152602080820184905260008284018190528681526009825292909220815180519293919261047092849201906113ea565b5060208201516001820155604090910151600290910180546001600160a01b0319166001600160a01b03909216919091179055505050565b6009602052600090815260409020805481906104c39061198b565b80601f01602080910402602001604051908101604052809291908181526020018280546104ef9061198b565b801561053c5780601f106105115761010080835404028352916020019161053c565b820191906000526020600020905b81548152906001019060200180831161051f57829003601f168201915b5050505060018301546002909301549192916001600160a01b0316905083565b6008818154811061056c57600080fd5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b336001600160a01b037f0000000000000000000000005a861794b927983406fce1d062e00b9368d97df616146106115760405162461bcd60e51b815260206004820152601f60248201527f6f6e6c792056524620563220777261707065722063616e2066756c66696c6c0060448201526064015b60405180910390fd5b61061b828261105f565b5050565b6000818152600a602052604090205460ff161561067e5760405162461bcd60e51b815260206004820152601e60248201527f416c726561647920636c61696d656420746865206d65676120736572756d00006044820152606401610608565b6000818152600960205260409020600201546001600160a01b031633146106d85760405162461bcd60e51b815260206004820152600e60248201526d2737ba103a3432903bb4b73732b960911b6044820152606401610608565b60016106e4600361081e565b10156107295760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742072656d61696e7360601b6044820152606401610608565b6000818152600a6020526040808220805460ff191660019081179091559051637921219560e11b815230600482015233602482015260036044820152606481019190915260a0608482015260a48101919091526001600160a01b037f000000000000000000000000a3de26661e786d7555493eca6d40d07ce14c4762169063f242432a9060c401600060405180830381600087803b1580156107ca57600080fd5b505af11580156107de573d6000803e3d6000fd5b505050507f288bc11ed9dc15e51a1944d3856fa7c043e2a6f1d164bc68fd629e5c5b93913c8160405161081391815260200190565b60405180910390a150565b604051627eeac760e11b8152306004820152602481018290526000907f000000000000000000000000a3de26661e786d7555493eca6d40d07ce14c47626001600160a01b03169062fdd58e9060440160206040518083038186803b15801561088557600080fd5b505afa158015610899573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042591906119c6565b6001546001600160a01b031633146109105760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610608565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6004818154811061097757600080fd5b600091825260209091200154905081565b61099061100a565b6006546040516370a0823160e01b81523060048201526001600160a01b0390911690819063a9059cbb90339083906370a082319060240160206040518083038186803b1580156109df57600080fd5b505afa1580156109f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1791906119c6565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610a5d57600080fd5b505af1158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9591906119df565b610ad65760405162461bcd60e51b81526020600482015260126024820152712ab730b13632903a37903a3930b739b332b960711b6044820152606401610608565b50565b610ae161100a565b60009182526009602052604090912060020180546001600160a01b0319166001600160a01b03909216919091179055565b6060610b1c61100a565b600082815260096020526040902060010154610b7a5760405162461bcd60e51b815260206004820152601f60248201527f486176656e277420736574207061727469636970616e7473206e756d626572006044820152606401610608565b60055460009081526003602052604090206001015460ff16610bd75760405162461bcd60e51b8152602060048201526016602482015275486176656e277420676f742072616e646f6d6e65737360501b6044820152606401610608565b600554600090815260036020526040812060020180548290610bfb57610bfb611a01565b600091825260208083209091015485835260099091526040822060010154909250610c269083611a17565b6008805460018101825560008290527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee360108204018054600f9092166002026101000a61ffff81810219909316928516029190911790556040519192507faf6d5756963048df4e487b5e4b4953c79456415b6a1cc2317543ba4bc124c64e91610caf9190611a39565b60405180910390a16008805480602002602001604051908101604052809291908181526020018280548015610d2b57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411610cf25790505b5050505050925050505b919050565b6000818152600360205260408120548190606090610d8e5760405162461bcd60e51b81526020600482015260116024820152701c995c5d595cdd081b9bdd08199bdd5b99607a1b6044820152606401610608565b6000848152600360209081526040808320815160608101835281548152600182015460ff16151581850152600282018054845181870281018701865281815292959394860193830182828015610e0357602002820191906000526020600020905b815481526020019060010190808311610def575b5050509190925250508151602083015160409093015190989297509550909350505050565b6000610e3261100a565b600754610e629063ffffffff600160a01b820481169161ffff600160c01b82041691600160d01b90910416611132565b6040805160608101918290526007546310c1b4d560e21b909252600160a01b90910463ffffffff166064820152909150807f0000000000000000000000005a861794b927983406fce1d062e00b9368d97df66001600160a01b0316634306d3546084830160206040518083038186803b158015610ede57600080fd5b505afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1691906119c6565b815260006020808301829052604080518381528083018252938101939093528482526003815290829020835181558382015160018201805460ff1916911515919091179055918301518051610f71926002850192019061146e565b5050600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0182905550600581905560075460408051838152600160d01b90920463ffffffff1660208301527fcc58b13ad3eab50626c6a6300b1d139cd6ebb1688a7cced9461c2f7e762665ee910160405180910390a190565b61100161100a565b610ad681611340565b6000546001600160a01b0316331461105d5760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610608565b565b6000828152600360205260409020546110ae5760405162461bcd60e51b81526020600482015260116024820152701c995c5d595cdd081b9bdd08199bdd5b99607a1b6044820152606401610608565b60008281526003602090815260409091206001818101805460ff1916909117905582516110e39260029092019184019061146e565b50600082815260036020526040908190205490517f147eb1ff0c82f87f2b03e2c43f5a36488ff63ec6b730195fde4605f612f8db51916111269185918591611d56565b60405180910390a15050565b6040516310c1b4d560e21b815263ffffffff841660048201526000906001600160a01b037f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca811691634000aea0917f0000000000000000000000005a861794b927983406fce1d062e00b9368d97df69190821690634306d3549060240160206040518083038186803b1580156111c757600080fd5b505afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff91906119c6565b6040805163ffffffff808b16602083015261ffff8a169282019290925290871660608201526080016040516020818303038152906040526040518463ffffffff1660e01b815260040161125493929190611d7f565b602060405180830381600087803b15801561126e57600080fd5b505af1158015611282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a691906119df565b507f0000000000000000000000005a861794b927983406fce1d062e00b9368d97df66001600160a01b031663fc2a88c36040518163ffffffff1660e01b815260040160206040518083038186803b15801561130057600080fd5b505afa158015611314573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133891906119c6565b949350505050565b6001600160a01b0381163314156113995760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610608565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b8280546113f69061198b565b90600052602060002090601f016020900481019282611418576000855561145e565b82601f1061143157805160ff191683800117855561145e565b8280016001018555821561145e579182015b8281111561145e578251825591602001919060010190611443565b5061146a9291506114a8565b5090565b82805482825590600052602060002090810192821561145e579160200282018281111561145e578251825591602001919060010190611443565b5b8082111561146a57600081556001016114a9565b6000602082840312156114cf57600080fd5b81356001600160e01b0319811681146114e757600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561152d5761152d6114ee565b604052919050565b600067ffffffffffffffff83111561154f5761154f6114ee565b611562601f8401601f1916602001611504565b905082815283838301111561157657600080fd5b828260208301376000602084830101529392505050565b6000806000606084860312156115a257600080fd5b83359250602084013567ffffffffffffffff8111156115c057600080fd5b8401601f810186136115d157600080fd5b6115e086823560208401611535565b925050604084013590509250925092565b60006020828403121561160357600080fd5b5035919050565b6000815180845260005b8181101561163057602081850181015186830182015201611614565b81811115611642576000602083870101525b50601f01601f19169290920160200192915050565b60608152600061166a606083018661160a565b6020830194909452506001600160a01b0391909116604090910152919050565b600082601f83011261169b57600080fd5b8135602067ffffffffffffffff8211156116b7576116b76114ee565b8160051b6116c6828201611504565b92835284810182019282810190878511156116e057600080fd5b83870192505b848310156116ff578235825291830191908301906116e6565b979650505050505050565b6000806040838503121561171d57600080fd5b82359150602083013567ffffffffffffffff81111561173b57600080fd5b6117478582860161168a565b9150509250929050565b80356001600160a01b0381168114610d3557600080fd5b6000806040838503121561177b57600080fd5b8235915061178b60208401611751565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156117d057835161ffff16835292840192918401916001016117b0565b50909695505050505050565b600082601f8301126117ed57600080fd5b6114e783833560208501611535565b600080600080600060a0868803121561181457600080fd5b61181d86611751565b945061182b60208701611751565b9350604086013567ffffffffffffffff8082111561184857600080fd5b61185489838a0161168a565b9450606088013591508082111561186a57600080fd5b61187689838a0161168a565b9350608088013591508082111561188c57600080fd5b50611899888289016117dc565b9150509295509295909350565b600081518084526020808501945080840160005b838110156118d6578151875295820195908201906001016118ba565b509495945050505050565b838152821515602082015260606040820152600061190260608301846118a6565b95945050505050565b600080600080600060a0868803121561192357600080fd5b61192c86611751565b945061193a60208701611751565b93506040860135925060608601359150608086013567ffffffffffffffff81111561196457600080fd5b611899888289016117dc565b60006020828403121561198257600080fd5b6114e782611751565b600181811c9082168061199f57607f821691505b602082108114156119c057634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156119d857600080fd5b5051919050565b6000602082840312156119f157600080fd5b815180151581146114e757600080fd5b634e487b7160e01b600052603260045260246000fd5b600082611a3457634e487b7160e01b600052601260045260246000fd5b500690565b60006020808301818452808554611a54818490815260200190565b60008881526020812094509092505b81600f82011015611baa57835461ffff8082168552601082901c8116878601526040611a9881870183858b1c1661ffff169052565b6060611aae818801848660301c1661ffff169052565b6080611ac38189018587861c1661ffff169052565b60a09250611adb838901858760501c1661ffff169052565b60c0611af0818a018688861c1661ffff169052565b60e09250611b08838a01868860701c1661ffff169052565b61ffff86831c8616166101008a0152611b2d6101208a01868860901c1661ffff169052565b61ffff86851c8616166101408a0152611b526101608a01868860b01c1661ffff169052565b61ffff86821c8616166101808a01525050611b796101a08801848660d01c1661ffff169052565b83901c9190911661ffff166101c08601525060f01c6101e08401526001939093019261020090920191601001611a63565b92549281811015611bc45761ffff84168352918401916001015b81811015611bdf57601084901c61ffff168352918401916001015b81811015611bf85783851c61ffff168352918401916001015b81811015611c1357603084901c61ffff168352918401916001015b81811015611c2e57604084901c61ffff168352918401916001015b81811015611c4957605084901c61ffff168352918401916001015b81811015611c6457606084901c61ffff168352918401916001015b81811015611c7f57607084901c61ffff168352918401916001015b81811015611c9a57608084901c61ffff168352918401916001015b81811015611cb557609084901c61ffff168352918401916001015b81811015611cd05760a084901c61ffff168352918401916001015b81811015611ceb5760b084901c61ffff168352918401916001015b81811015611d065760c084901c61ffff168352918401916001015b81811015611d215760d084901c61ffff168352918401916001015b81811015611d3c5760e084901c61ffff168352918401916001015b818110156117d057505060f09190911c8152019392505050565b838152606060208201526000611d6f60608301856118a6565b9050826040830152949350505050565b60018060a01b0384168152826020820152606060408201526000611902606083018461160a56fea2646970667358221220f6adc309f0d3da392db5b90b4ac3a9dc0e8b57e56b76d2fcfe0d9c222cbb2bff64736f6c63430008090033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca0000000000000000000000005a861794b927983406fce1d062e00b9368d97df6000000000000000000000000a3de26661e786d7555493eca6d40d07ce14c4762

-----Decoded View---------------
Arg [0] : _linkAddress (address): 0x514910771AF9Ca656af840dff83E8264EcF986CA
Arg [1] : _wrapperAddress (address): 0x5A861794B927983406fCE1D062e00b9368d97Df6
Arg [2] : _serum (address): 0xa3De26661e786d7555493ECA6D40d07Ce14c4762

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [1] : 0000000000000000000000005a861794b927983406fce1d062e00b9368d97df6
Arg [2] : 000000000000000000000000a3de26661e786d7555493eca6d40d07ce14c4762


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.