Contract 0xeb59d193cb4b16c5c3734002d49dcd0805b0f222

Contract Overview

Balance:
0 AVAX

AVAX Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe812131acc02e9158339e0e4452ed199f690a688ad1f72c115b15cdb8ef6d926Claim Spawn278914732023-03-25 14:43:542 days 22 hrs ago0x5ed38ca309ab9b070ff632fc16705973f6d4eeee IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.023282743609 28.1913
0x69a9e13a9d22516954b117d5d6928a562c1021b9bde71d7fa87b5e90752f24e9Claim Spawn278502912023-03-24 14:42:533 days 22 hrs ago0x1dafd87db12a29053b58d262a81c5946159704f0 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.009041217 26.5
0xccc1b1b791f4b69da3be7cd9dd9ea83affe9e086627851cf75515c1451202c37Un Stake Token278435432023-03-24 10:49:034 days 1 hr ago0x1ad783fe41e08fbb7856bedad344174941fa3baf IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.0060406162 25.1
0x11e57f8c6d40f3c11bbb4b124555b9004fa7616a8f386bba209e1a25a5b1ffa0Stake Token277682692023-03-22 12:20:146 days 23 mins ago0xe9c27a96b6d21d19aafeacc045bff60ace5de005 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.007044866 26.5
0xd044dd9635e2bd020816fefd6ddbdfacfff5d6c1e5edca6552d1a738d91d187dClaim Spawn277682582023-03-22 12:19:526 days 24 mins ago0xe9c27a96b6d21d19aafeacc045bff60ace5de005 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.01174533 26.5
0x42ff7ecf8ec376044e938e04a8ef59606aa133a22a088c6272ed661856580d95Claim Spawn275652362023-03-17 18:36:1610 days 18 hrs ago0x99a33695e109273d9e6485d3be8614101a645bb4 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.024223015838 27.35225
0x9b0dd177ba86d82453d8e7452c7ad65e6bd505fef3ad78c4a69f5a513835ea93Stake Token275652252023-03-17 18:35:5410 days 18 hrs ago0x99a33695e109273d9e6485d3be8614101a645bb4 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.00716216064 26.94
0xa469be66351943bfc29836c6c671315c3359d0aec58141b87ee7362d0fa37efaClaim Spawn274546552023-03-15 3:55:3713 days 8 hrs ago0xa48304625dc15bddceeb602df28da3d2c6feea0f IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.006524032426 27.2816825
0x423f1c248d6c0fabd6e77502dbf571af19501686fb88452eb843307fa4369ad2Claim Spawn272855632023-03-11 4:54:3417 days 7 hrs ago0xd21d49edcb5e314ecdac8bbeed3adf8e747cc317 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.005273955217 26.799506167
0xf67d7329e499a86aeb799aee5b44432e35fca776addea119e1181d8e34da54ebUn Stake Token272277102023-03-09 20:52:3418 days 15 hrs ago0x67b53b2d09ef8cfd173f8fe3b8e648494a521cd4 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.0285572215 26.5
0x7ac86baacfac41591c89bd7ae18190ec0b4471cb1b373fa59588d040a2d37e56Claim Spawn271798512023-03-08 17:35:3319 days 19 hrs ago0x1dafd87db12a29053b58d262a81c5946159704f0 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.0101841633 29.85
0xf91abe9fc7beda384bb3b7c045f3d7f4fce0da151226616baca60c786e83ac2aClaim Spawn270940522023-03-06 15:27:4521 days 21 hrs ago0x67b53b2d09ef8cfd173f8fe3b8e648494a521cd4 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.009376017493 29.7045
0x0b67206e90911c75876ac61a0aa4a02a27276cd7ca00062ad9189d6796b17450Claim Spawn269034372023-03-01 23:55:1426 days 12 hrs ago0x8f42952dd9f1dbb6fc7dc297c67d316805b7a037 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.006336786 26.5
0x589d22ac8f03e15da8578aa3993f2c03fd9d97d2f744ed8b463cf0c8bc34c484Claim Spawn268911572023-03-01 16:51:5326 days 19 hrs ago0xa92625e30020d36cad9785bf37e8c2ad41b4d4e5 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.00263613295 30.626
0xda35a21f1f07613fad2c303baf4d029d470a6e08d1c33e9a477120afaf586129Un Stake Token268799612023-03-01 10:26:1527 days 2 hrs ago0x6954f7add88b0c0a2761a5dd0a56913df88894c8 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.033751831 26.5
0x2a64a23182ac974f78f90d314edccdc12b6f423d8e310d660ed97f6076c6cf2aClaim Spawn268799412023-03-01 10:25:3427 days 2 hrs ago0x6954f7add88b0c0a2761a5dd0a56913df88894c8 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.009717232 26.5
0x31847c7444bf08fc39cef3900caf75b63ddd78a949802c42d788c01de09ef9eaClaim Spawn265160492023-02-20 20:14:0735 days 16 hrs ago0xe9c27a96b6d21d19aafeacc045bff60ace5de005 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.01174533 26.5
0x6b6fa7a79b0d4f89f45e92d12f82b878f5a2ee96da63e81ab0c09f7fbd0392d2Claim Spawn264286792023-02-18 19:01:0437 days 17 hrs ago0xcd820d1a7f9905d1043e95cbd7f9a19249a4ef7b IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.005661089 26.5
0xdbcfddfb8c76dcc32d1958268c582f610a8010d97ec31262f84b079b0d67a241Claim Spawn263866442023-02-17 19:21:5638 days 17 hrs ago0x70ec347892554d78cfac7cad2d783037b2e78cb8 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.018059909 26.5
0x9eac44aa4193dfdad3388c9b4e5751131c8bf6b26fdb8843c08e6c620353cd3aUn Stake Token258165802023-02-04 9:14:5252 days 3 hrs ago0x013779ee41328cc8d7299f3013df6352dbfa27e8 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.02259830034 25.62
0xd5cba6dcf5ff7d9c314925d5bd900dd2fbf5b6062fa77c6505fb886ab3b960f0Claim Spawn257890212023-02-03 17:40:5052 days 19 hrs ago0x17b9087455e4813f2df87f420b20fd07170c339b IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.0022809875 26.5
0x2807e7ba96f83a4beb634cfa3221712d495b2e5d2a9bd957178aaeb34974b193Claim Spawn257832292023-02-03 14:31:0252 days 22 hrs ago0x1b2de8b124d15e7653429797b7358cd34cdb2dae IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.009291639579 32.0228
0x6feef52bce36df7873701444fd7877f81667e9a04891ccfb327832fd52809723Claim Spawn257687982023-02-03 6:23:0353 days 6 hrs ago0xa48304625dc15bddceeb602df28da3d2c6feea0f IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.006337104 26.5
0x5e760bd58907984d18e30a86a2ca94e970a15738b97ccb4b04f7b1cd8129a01aClaim Spawn256568792023-01-31 16:07:2655 days 20 hrs ago0x1dafd87db12a29053b58d262a81c5946159704f0 IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.0101841633 29.85
0x71a8e8f85841c0fb2c754ece267197690bffc7d41255f2ec43739b71e635604bClaim Spawn256072752023-01-30 11:59:3557 days 44 mins ago0xa48304625dc15bddceeb602df28da3d2c6feea0f IN  0xeb59d193cb4b16c5c3734002d49dcd0805b0f2220 AVAX0.006337104 26.5
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FrogFrensStakingV2

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 6: FrogFrensStakingV2.sol
// SPDX-License-Identifier: MIT
/**
* ______              ______                   _____ _        _    _             
* |  ___|             |  ___|                 /  ___| |      | |  (_)            
* | |_ _ __ ___   __ _| |_ _ __ ___ _ __  ___ \ `--.| |_ __ _| | ___ _ __   __ _ 
* |  _| '__/ _ \ / _` |  _| '__/ _ \ '_ \/ __| `--. \ __/ _` | |/ / | '_ \ / _` |
* | | | | | (_) | (_| | | | | |  __/ | | \__ \/\__/ / || (_| |   <| | | | | (_| |
* \_| |_|  \___/ \__, \_| |_|  \___|_| |_|___/\____/ \__\__,_|_|\_\_|_| |_|\__, |
*                 __/ |                                                     __/ |
*                |___/                                                     |___/ 
*/

pragma solidity 0.8.3;

import "./IERC721.sol";
import "./ReentrancyGuard.sol";
import "./IERC721Receiver.sol";
import "./IERC20.sol";

contract FrogFrensStakingV2 is IERC721Receiver, ReentrancyGuard {
    IERC721 public _fren;
    IERC20 public _spawn;
    address public _admin;
    uint256 public rewardsPerSecond = 555555555555555;
    
    mapping(uint256 => uint256) private rewards;
    mapping(address => uint256) public rewardsClaimed;

    struct userStakeNft {
        uint256[] id;
        mapping(uint256 => uint256) tokenIndex;
    }
    mapping(address => userStakeNft) private userNFTs;

    struct Stake {
        uint256 startTime;
        address owner;
    }

    // TokenID => Stake
    mapping(uint256 => Stake) public receipt;

    event NftStaked(address indexed staker, uint256 tokenId, uint256 time);
    event NftUnStaked(address indexed staker, uint256 tokenId, uint256 time);
    event StakePayout(
        address indexed staker,
        uint256 tokenId,
        uint256 stakeAmount,
        uint256 startTime,
        uint256 endTime
    );
    //event StakeRewardUpdated(uint256 traitType, uint256 rewardPerSecond);

    modifier onlyStaker(uint256 tokenId) {
        // require that msg.sender is the owner of this nft
        require(
            receipt[tokenId].owner == msg.sender, "onlyStaker: Caller is not NFT stake owner");
        _;
    }

    modifier onlyAdmin() {
        require(msg.sender == _admin, "reclaimTokens: Caller is not the ADMIN");
        _;
    }

    constructor(
        address admin_,
        IERC20 spawn_,
        IERC721 fren_
    ) {
        _admin = admin_;
        _spawn = spawn_;
        _fren = fren_;
    }

    /**
     * Always returns `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address,
        address,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }

    //User must give this contract permission to take ownership of it.
    function stakeToken(uint256[] memory tokenId) public nonReentrant {
        // allow for staking multiple NFTS at one time.
        for (uint256 i = 0; i < tokenId.length; i++) {
            _stakeToken(tokenId[i]);
        }
    }

    function getStakeContractBalance() public view returns (uint256) {
        return _spawn.balanceOf(address(this));
    }

    function getPendingStakeRewards(uint256 tokenId) public view returns (uint256) {
        // do not return if NFT not staked
        uint256 timePassed = block.timestamp - receipt[tokenId].startTime;
        return (rewardsPerSecond * timePassed);
    }

    function unStakeToken(uint256[] memory tokenId) public nonReentrant {
        for (uint256 indx = 0; indx < tokenId.length; indx++) {
            _unStakeToken(tokenId[indx]);
        }
    }

    function _unStakeToken(uint256 tokenId) internal onlyStaker(tokenId) {
        // payout stake, this should be safe as the function is non-reentrant
        _payoutStake(tokenId);

        userStakeNft storage nftStaked = userNFTs[msg.sender];
        uint256 lastIndex = nftStaked.id.length - 1;
        uint256 lastIndexKey = nftStaked.id[lastIndex];
        nftStaked.id[nftStaked.tokenIndex[tokenId]] = lastIndexKey;
        nftStaked.tokenIndex[lastIndexKey] = nftStaked.tokenIndex[tokenId];
        if (nftStaked.id.length > 0) {
            nftStaked.id.pop();
            delete nftStaked.tokenIndex[tokenId];
        }

        // delete stake record, effectively unstaking it
        delete receipt[tokenId];

        // return token
        _fren.safeTransferFrom(address(this), msg.sender, tokenId);

        emit NftUnStaked(msg.sender, tokenId, block.timestamp);
    }

    function claimSpawn(uint256[] memory tokenId) external {
        for (uint256 indx = 0; indx < tokenId.length; indx++) {
            _claimSpawn(tokenId[indx]);
        }
    }

    function _claimSpawn(uint256 tokenId)
        internal
        nonReentrant
        onlyStaker(tokenId)
    {
        // This 'payout first' should be safe as the function is nonReentrant
        _payoutStake(tokenId);

        // // update receipt with a new time
        receipt[tokenId].startTime = block.timestamp;
    }

    function reclaimTokens() external onlyAdmin {
        _spawn.transfer(_admin, _spawn.balanceOf(address(this)));
    }

    function _stakeToken(uint256 tokenId) internal {
        // take possession of the NFT
        _fren.safeTransferFrom(msg.sender, address(this), tokenId);

        userStakeNft storage user = userNFTs[msg.sender];
        user.id.push(tokenId);
        user.tokenIndex[tokenId] = user.id.length - 1;

        receipt[tokenId] = Stake({
            startTime: block.timestamp,
            owner: msg.sender
        });

        emit NftStaked(msg.sender, tokenId, block.timestamp);
    }

    function _payoutStake(uint256 tokenId) internal {
        /* NOTE : Must be called from non-reentrant function to be safe!*/

        // double check that the receipt exists and we're not staking from time 0
        require( receipt[tokenId].startTime > 0, "_payoutStake: Can not stake from time 0");

        // earned amount is difference between the stake start time, current time multiplied by reward amount
        uint256 timeStaked = block.timestamp - receipt[tokenId].startTime;
        uint256 payout = timeStaked * rewardsPerSecond;

        // If contract does not have enough tokens to pay out, return the NFT without payment
        // This prevent a NFT being locked in the contract when empty
        if (_spawn.balanceOf(address(this)) < payout) {
            emit StakePayout(
                msg.sender,
                tokenId,
                0,
                receipt[tokenId].startTime,
                block.timestamp
            );
            return;
        }

        // payout stake
        _handlePayout(receipt[tokenId].owner, payout);

        emit StakePayout(
            msg.sender,
            tokenId,
            payout,
            receipt[tokenId].startTime,
            block.timestamp
        );
    }

    function _handlePayout(address to, uint256 payout) private {
        _transferToken(to, payout);
        rewardsClaimed[to] += payout;
    }

    function _transferToken(address to, uint256 amount) private {
        _spawn.transfer(to, amount);
    }

    function setRewardsPerSecond(uint256 _newRewardsPerSecond) public onlyAdmin {
        rewardsPerSecond = _newRewardsPerSecond;
    }

    function getTokensStaked(address staker) public view returns (uint256[] memory) {
        return userNFTs[staker].id;
    }

    function nftDepositor(uint256 tokenId) public view returns (address) {
        address nftStaker = receipt[tokenId].owner;
        return nftStaker;
    }

    function balanceOf(address owner) public view returns (uint256) {
        return getTokensStaked(owner).length;
    }
}

File 2 of 6: 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);
}

File 3 of 6: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 4 of 6: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 5 of 6: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 6 of 6: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"admin_","type":"address"},{"internalType":"contract IERC20","name":"spawn_","type":"address"},{"internalType":"contract IERC721","name":"fren_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"NftStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"NftUnStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"StakePayout","type":"event"},{"inputs":[],"name":"_admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fren","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_spawn","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"}],"name":"claimSpawn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getPendingStakeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakeContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getTokensStaked","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"nftDepositor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"receipt","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reclaimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newRewardsPerSecond","type":"uint256"}],"name":"setRewardsPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"}],"name":"stakeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"}],"name":"unStakeToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526601f9465b8ab8e360045534801561001b57600080fd5b5060405161124538038061124583398101604081905261003a91610081565b60016000819055600380546001600160a01b039586166001600160a01b031991821617909155600280549486169482169490941790935580549190931691161790556100e5565b600080600060608486031215610095578283fd5b83516100a0816100cd565b60208501519093506100b1816100cd565b60408501519092506100c2816100cd565b809150509250925092565b6001600160a01b03811681146100e257600080fd5b50565b611151806100f46000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063a2aa4337116100a2578063cbeb09aa11610071578063cbeb09aa14610276578063d3f730fd14610289578063da7b84a7146102a9578063eacdaabc146102bc578063fac8440e146102c55761010b565b8063a2aa4337146101fb578063b72e4cfe14610248578063bf8f02181461025b578063c0da6203146102635761010b565b80633c54caa5116100de5780633c54caa51461019f57806352eb7796146101a757806370a08231146101c75780638863cfb6146101e85761010b565b806301bc45c914610110578063072317a314610140578063150b7a02146101555780631728bb981461018c575b600080fd5b600354610123906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61015361014e366004610e53565b6102f1565b005b610173610163366004610d9b565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610137565b600154610123906001600160a01b031681565b610153610379565b6101ba6101b5366004610d81565b6104ac565b6040516101379190610f4b565b6101da6101d5366004610d81565b610519565b604051908152602001610137565b6101536101f6366004610e53565b61052b565b61022b610209366004610f1b565b600860205260009081526040902080546001909101546001600160a01b031682565b604080519283526001600160a01b03909116602083015201610137565b610153610256366004610e53565b61057d565b6101da6105f3565b6101da610271366004610f1b565b610674565b610153610284366004610f1b565b6106a6565b6101da610297366004610d81565b60066020526000908152604090205481565b600254610123906001600160a01b031681565b6101da60045481565b6101236102d3366004610f1b565b6000908152600860205260409020600101546001600160a01b031690565b6002600054141561031d5760405162461bcd60e51b815260040161031490610fd5565b60405180910390fd5b600260009081555b81518110156103705761035e82828151811061035157634e487b7160e01b600052603260045260246000fd5b60200260200101516106d5565b80610368816110d4565b915050610325565b50506001600055565b6003546001600160a01b031633146103a35760405162461bcd60e51b815260040161031490610f8f565b6002546003546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a082319060240160206040518083038186803b1580156103f357600080fd5b505afa158015610407573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042b9190610f33565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561047157600080fd5b505af1158015610485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a99190610efb565b50565b6001600160a01b03811660009081526007602090815260409182902080548351818402810184019094528084526060939283018282801561050c57602002820191906000526020600020905b8154815260200190600101908083116104f8575b505050505090505b919050565b6000610524826104ac565b5192915050565b60005b81518110156105795761056782828151811061055a57634e487b7160e01b600052603260045260246000fd5b60200260200101516108eb565b80610571816110d4565b91505061052e565b5050565b600260005414156105a05760405162461bcd60e51b815260040161031490610fd5565b600260009081555b8151811015610370576105e18282815181106105d457634e487b7160e01b600052603260045260246000fd5b602002602001015161096f565b806105eb816110d4565b9150506105a8565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561063757600080fd5b505afa15801561064b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066f9190610f33565b905090565b600081815260086020526040812054819061068f90426110bd565b90508060045461069f919061109e565b9392505050565b6003546001600160a01b031633146106d05760405162461bcd60e51b815260040161031490610f8f565b600455565b60008181526008602052604090206001015481906001600160a01b031633146107105760405162461bcd60e51b81526004016103149061100c565b61071982610aa7565b3360009081526007602052604081208054909190610739906001906110bd565b9050600082600001828154811061076057634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050808360000184600101600088815260200190815260200160002054815481106107a657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558681526001850190915260408082205483835291205582541561081d5782548390806107f357634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810183905590920190925586825260018501905260408120555b600085815260086020526040808220918255600191820180546001600160a01b031916905590549051632142170760e11b8152306004820152336024820152604481018790526001600160a01b03909116906342842e0e90606401600060405180830381600087803b15801561089257600080fd5b505af11580156108a6573d6000803e3d6000fd5b5050604080518881524260208201523393507f32bc6caf9c29ce36f00f0386a4015fd281d5d4058d348d1a684a24a05c9b324d92500160405180910390a25050505050565b6002600054141561090e5760405162461bcd60e51b815260040161031490610fd5565b600260009081558181526008602052604090206001015481906001600160a01b0316331461094e5760405162461bcd60e51b81526004016103149061100c565b61095782610aa7565b50600090815260086020526040812042905560019055565b600154604051632142170760e11b8152336004820152306024820152604481018390526001600160a01b03909116906342842e0e90606401600060405180830381600087803b1580156109c157600080fd5b505af11580156109d5573d6000803e3d6000fd5b50503360009081526007602090815260408220805460018181018355828552929093209092018590558154919350610a0e9250906110bd565b60008381526001838101602090815260408084209490945583518085018552428082523382840181815289875260088552958790209251835594519190930180546001600160a01b0319166001600160a01b0390921691909117905583518681529081019190915290917f2209f5ab1e50b2a6cab82d8f63686a6991f8d51072e1c8c6e752570697c29c46910160405180910390a25050565b600081815260086020526040902054610b125760405162461bcd60e51b815260206004820152602760248201527f5f7061796f75745374616b653a2043616e206e6f74207374616b652066726f6d60448201526602074696d6520360cc1b6064820152608401610314565b600081815260086020526040812054610b2b90426110bd565b9050600060045482610b3d919061109e565b6002546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b158015610b8557600080fd5b505afa158015610b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbd9190610f33565b1015610c235760008381526008602090815260408083205481518781529283019390935281019190915242606082015233907f7e8de6a1e6682f9d48e1dca794f42aa811c7a6515c3e9bf64713fd7ece9e8e139060800160405180910390a250506104a9565b600083815260086020526040902060010154610c48906001600160a01b031682610ca4565b60008381526008602090815260409182902054825186815291820184905281830152426060820152905133917f7e8de6a1e6682f9d48e1dca794f42aa811c7a6515c3e9bf64713fd7ece9e8e13919081900360800190a2505050565b610cae8282610cdf565b6001600160a01b03821660009081526006602052604081208054839290610cd6908490611086565b90915550505050565b60025460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b158015610d2d57600080fd5b505af1158015610d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d659190610efb565b505050565b80356001600160a01b038116811461051457600080fd5b600060208284031215610d92578081fd5b61069f82610d6a565b60008060008060808587031215610db0578283fd5b610db985610d6a565b93506020610dc8818701610d6a565b935060408601359250606086013567ffffffffffffffff80821115610deb578384fd5b818801915088601f830112610dfe578384fd5b813581811115610e1057610e10611105565b610e22601f8201601f19168501611055565b91508082528984828501011115610e37578485fd5b8084840185840137810190920192909252939692955090935050565b60006020808385031215610e65578182fd5b823567ffffffffffffffff80821115610e7c578384fd5b818501915085601f830112610e8f578384fd5b813581811115610ea157610ea1611105565b8060051b9150610eb2848301611055565b8181528481019084860184860187018a1015610ecc578788fd5b8795505b83861015610eee578035835260019590950194918601918601610ed0565b5098975050505050505050565b600060208284031215610f0c578081fd5b8151801515811461069f578182fd5b600060208284031215610f2c578081fd5b5035919050565b600060208284031215610f44578081fd5b5051919050565b6020808252825182820181905260009190848201906040850190845b81811015610f8357835183529284019291840191600101610f67565b50909695505050505050565b60208082526026908201527f7265636c61696d546f6b656e733a2043616c6c6572206973206e6f74207468656040820152651020a226a4a760d11b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526029908201527f6f6e6c795374616b65723a2043616c6c6572206973206e6f74204e465420737460408201526830b5b29037bbb732b960b91b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561107e5761107e611105565b604052919050565b60008219821115611099576110996110ef565b500190565b60008160001904831182151516156110b8576110b86110ef565b500290565b6000828210156110cf576110cf6110ef565b500390565b60006000198214156110e8576110e86110ef565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b4e12731664da4bac3a241f23669fbf6ec90698771abf9dbe40fb542d51990ce64736f6c63430008030033000000000000000000000000cf5e0e57a75505b3be1845f0e087c4d2061ed85500000000000000000000000052628f8ea702c51c19b43897d67e4b2845a71b08000000000000000000000000dc3a5c2d973b52652f87a22002ff1502fbe91b26

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

000000000000000000000000cf5e0e57a75505b3be1845f0e087c4d2061ed85500000000000000000000000052628f8ea702c51c19b43897d67e4b2845a71b08000000000000000000000000dc3a5c2d973b52652f87a22002ff1502fbe91b26

-----Decoded View---------------
Arg [0] : admin_ (address): 0xcf5e0e57a75505b3be1845f0e087c4d2061ed855
Arg [1] : spawn_ (address): 0x52628f8ea702c51c19b43897d67e4b2845a71b08
Arg [2] : fren_ (address): 0xdc3a5c2d973b52652f87a22002ff1502fbe91b26

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000cf5e0e57a75505b3be1845f0e087c4d2061ed855
Arg [1] : 00000000000000000000000052628f8ea702c51c19b43897d67e4b2845a71b08
Arg [2] : 000000000000000000000000dc3a5c2d973b52652f87a22002ff1502fbe91b26


Deployed ByteCode Sourcemap

832:6795:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;954:21;;;;;-1:-1:-1;;;;;954:21:0;;;;;;-1:-1:-1;;;;;3290:32:6;;;3272:51;;3260:2;3245:18;954:21:0;;;;;;;;3364:191;;;;;;:::i;:::-;;:::i;:::-;;2466:200;;;;;;:::i;:::-;-1:-1:-1;;;2466:200:0;;;;;;;;;;-1:-1:-1;;;;;;4795:33:6;;;4777:52;;4765:2;4750:18;2466:200:0;4732:103:6;902:20:0;;;;;-1:-1:-1;;;;;902:20:0;;;4961:117;;;:::i;7219:123::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7508:117::-;;;;;;:::i;:::-;;:::i;:::-;;;7016:25:6;;;7004:2;6989:18;7508:117:0;6971:76:6;4449:176:0;;;;;;:::i;:::-;;:::i;1404:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1404:40:0;;;;;;;7226:25:6;;;-1:-1:-1;;;;;7287:32:6;;;7282:2;7267:18;;7260:60;7199:18;1404:40:0;7181:145:6;2743:231:0;;;;;;:::i;:::-;;:::i;2980:120::-;;;:::i;3106:252::-;;;;;;:::i;:::-;;:::i;7081:132::-;;;;;;:::i;:::-;;:::i;1090:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;928:20;;;;;-1:-1:-1;;;;;928:20:0;;;981:49;;;;;;7348:154;;;;;;:::i;:::-;7408:7;7447:16;;;:7;:16;;;;;:22;;;-1:-1:-1;;;;;7447:22:0;;7348:154;3364:191;1744:1:5;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:5;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;3442:107:0::1;3472:7;:14;3465:4;:21;3442:107;;;3510:28;3524:7;3532:4;3524:13;;;;;;-1:-1:-1::0;;;3524:13:0::1;;;;;;;;;;;;;;;3510;:28::i;:::-;3488:6:::0;::::1;::::0;::::1;:::i;:::-;;;;3442:107;;;-1:-1:-1::0;;1701:1:5;2628:7;:22;3364:191:0:o;4961:117::-;2136:6;;-1:-1:-1;;;;;2136:6:0;2122:10;:20;2114:71;;;;-1:-1:-1;;;2114:71:0;;;;;;;:::i;:::-;5015:6:::1;::::0;5031::::1;::::0;5039:31:::1;::::0;-1:-1:-1;;;5039:31:0;;5064:4:::1;5039:31;::::0;::::1;3272:51:6::0;-1:-1:-1;;;;;5015:6:0;;::::1;::::0;:15:::1;::::0;5031:6:::1;::::0;5015;;5039:16:::1;::::0;3245:18:6;;5039:31:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5015:56;::::0;-1:-1:-1;;;;;;5015:56:0::1;::::0;;;;;;-1:-1:-1;;;;;3906:32:6;;;5015:56:0::1;::::0;::::1;3888:51:6::0;3955:18;;;3948:34;3861:18;;5015:56:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4961:117::o:0;7219:123::-;-1:-1:-1;;;;;7316:16:0;;;;;;:8;:16;;;;;;;;;7309:26;;;;;;;;;;;;;;;;;7281:16;;7309:26;;;7316:16;7309:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7219:123;;;;:::o;7508:117::-;7563:7;7589:22;7605:5;7589:15;:22::i;:::-;:29;;7508:117;-1:-1:-1;;7508:117:0:o;4449:176::-;4519:12;4514:105;4544:7;:14;4537:4;:21;4514:105;;;4582:26;4594:7;4602:4;4594:13;;;;;;-1:-1:-1;;;4594:13:0;;;;;;;;;;;;;;;4582:11;:26::i;:::-;4560:6;;;;:::i;:::-;;;;4514:105;;;;4449:176;:::o;2743:231::-;1744:1:5;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:5;;;;;;;:::i;:::-;1744:1;2455:7;:18;;;2875:93:0::1;2899:7;:14;2895:1;:18;2875:93;;;2934:23;2946:7;2954:1;2946:10;;;;;;-1:-1:-1::0;;;2946:10:0::1;;;;;;;;;;;;;;;2934:11;:23::i;:::-;2915:3:::0;::::1;::::0;::::1;:::i;:::-;;;;2875:93;;2980:120:::0;3062:6;;:31;;-1:-1:-1;;;3062:31:0;;3087:4;3062:31;;;3272:51:6;3036:7:0;;-1:-1:-1;;;;;3062:6:0;;:16;;3245:18:6;;3062:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3055:38;;2980:120;:::o;3106:252::-;3176:7;3277:16;;;:7;:16;;;;;:26;3176:7;;3259:44;;:15;:44;:::i;:::-;3238:65;;3340:10;3321:16;;:29;;;;:::i;:::-;3313:38;3106:252;-1:-1:-1;;;3106:252:0:o;7081:132::-;2136:6;;-1:-1:-1;;;;;2136:6:0;2122:10;:20;2114:71;;;;-1:-1:-1;;;2114:71:0;;;;;;;:::i;:::-;7167:16:::1;:39:::0;7081:132::o;3561:882::-;1977:16;;;;:7;:16;;;;;:22;;;3621:7;;-1:-1:-1;;;;;1977:22:0;2003:10;1977:36;1956:103;;;;-1:-1:-1;;;1956:103:0;;;;;;;:::i;:::-;3718:21:::1;3731:7;3718:12;:21::i;:::-;3792:10;3750:30;3783:20:::0;;;:8:::1;:20;::::0;;;;3833:19;;3783:20;;3750:30;3833:23:::1;::::0;3855:1:::1;::::0;3833:23:::1;:::i;:::-;3813:43;;3866:20;3889:9;:12;;3902:9;3889:23;;;;;;-1:-1:-1::0;;;3889:23:0::1;;;;;;;;;;;;;;;;;3866:46;;3968:12;3922:9;:12;;3935:9;:20;;:29;3956:7;3935:29;;;;;;;;;;;;3922:43;;;;;;-1:-1:-1::0;;;3922:43:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;:58:::0;;;;4027:29;;;:20:::1;::::0;::::1;:29:::0;;;;;;;;3990:34;;;;;:66;4070:19;;:23;4066:122:::1;;4109:18:::0;;:9;;:18;::::1;;-1:-1:-1::0;;;4109:18:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;4109:18:0;;;;;;;;;;;;4148:29;;;4109:18:::1;4148:20:::0;::::1;:29:::0;;;;;4141:36;4066:122:::1;4262:16;::::0;;;:7:::1;:16;::::0;;;;;4255:23;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;4255:23:0::1;::::0;;4313:5;;:58;;-1:-1:-1;;;4313:58:0;;4344:4:::1;4313:58;::::0;::::1;3574:34:6::0;4351:10:0::1;3624:18:6::0;;;3617:43;3676:18;;;3669:34;;;-1:-1:-1;;;;;4313:5:0;;::::1;::::0;:22:::1;::::0;3509:18:6;;4313:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;4387:49:0::1;::::0;;7909:25:6;;;4420:15:0::1;7965:2:6::0;7950:18;;7943:34;4399:10:0::1;::::0;-1:-1:-1;4387:49:0::1;::::0;-1:-1:-1;7882:18:6;4387:49:0::1;;;;;;;2069:1;;;3561:882:::0;;:::o;4631:324::-;1744:1:5;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:5;;;;;;;:::i;:::-;1744:1;2455:7;:18;;;1977:16:0;;;:7:::1;:16;::::0;;;;:22:::1;;::::0;4726:7;;-1:-1:-1;;;;;1977:22:0::1;2003:10;1977:36;1956:103;;;;-1:-1:-1::0;;;1956:103:0::1;;;;;;;:::i;:::-;4827:21:::2;4840:7;4827:12;:21::i;:::-;-1:-1:-1::0;4904:16:0::2;::::0;;;:7:::2;:16;::::0;;;;4933:15:::2;4904:44:::0;;1701:1:5;2628:22;;4631:324:0:o;5084:486::-;5179:5;;:58;;-1:-1:-1;;;5179:58:0;;5202:10;5179:58;;;3574:34:6;5222:4:0;3624:18:6;;;3617:43;3676:18;;;3669:34;;;-1:-1:-1;;;;;5179:5:0;;;;:22;;3509:18:6;;5179:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5285:10:0;5248:25;5276:20;;;:8;:20;;;;;;;5306:21;;;;;;;;;;;;;;;;;;;;;5364:14;;5276:20;;-1:-1:-1;5364:18:0;;-1:-1:-1;5306:21:0;5364:18;:::i;:::-;5337:24;;;;:15;;;;:24;;;;;;;;:45;;;;5412:88;;;;;;;5443:15;5412:88;;;5479:10;5412:88;;;;;;5393:16;;;:7;:16;;;;;;:107;;;;;;;;;;;;-1:-1:-1;;;;;;5393:107:0;-1:-1:-1;;;;;5393:107:0;;;;;;;;;5516:47;;7909:25:6;;;7950:18;;;7943:34;;;;5479:10:0;;5516:47;;7882:18:6;5516:47:0;;;;;;;5084:486;;:::o;5576:1243::-;5830:1;5801:16;;;:7;:16;;;;;:26;5792:83;;;;-1:-1:-1;;;5792:83:0;;5894:2:6;5792:83:0;;;5876:21:6;5933:2;5913:18;;;5906:30;5972:34;5952:18;;;5945:62;-1:-1:-1;;;6023:18:6;;;6016:37;6070:19;;5792:83:0;5866:229:6;5792:83:0;5996:18;6035:16;;;:7;:16;;;;;:26;6017:44;;:15;:44;:::i;:::-;5996:65;;6071:14;6101:16;;6088:10;:29;;;;:::i;:::-;6296:6;;:31;;-1:-1:-1;;;6296:31:0;;6321:4;6296:31;;;3272:51:6;6071:46:0;;-1:-1:-1;6071:46:0;;-1:-1:-1;;;;;6296:6:0;;;;:16;;3245:18:6;;6296:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;6292:270;;;6439:1;6458:16;;;:7;:16;;;;;;;;:26;6357:174;;7570:25:6;;;7611:18;;;7604:34;;;;7654:18;;7647:34;;;;6502:15:0;7712:2:6;7697:18;;7690:34;6386:10:0;;6357:174;;7557:3:6;7542:19;6357:174:0;;;;;;;6545:7;;;;6292:270;6610:16;;;;:7;:16;;;;;:22;;;6596:45;;-1:-1:-1;;;;;6610:22:0;6634:6;6596:13;:45::i;:::-;6747:16;;;;:7;:16;;;;;;;;;:26;6657:155;;7570:25:6;;;7611:18;;;7604:34;;;7654:18;;;7647:34;6787:15:0;7712:2:6;7697:18;;7690:34;6657:155:0;;6682:10;;6657:155;;;;;;7557:3:6;6657:155:0;;;5576:1243;;;:::o;6825:140::-;6894:26;6909:2;6913:6;6894:14;:26::i;:::-;-1:-1:-1;;;;;6930:18:0;;;;;;:14;:18;;;;;:28;;6952:6;;6930:18;:28;;6952:6;;6930:28;:::i;:::-;;;;-1:-1:-1;;;;6825:140:0:o;6971:104::-;7041:6;;:27;;-1:-1:-1;;;7041:27:0;;-1:-1:-1;;;;;3906:32:6;;;7041:27:0;;;3888:51:6;3955:18;;;3948:34;;;7041:6:0;;;;:15;;3861:18:6;;7041:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6971:104;;:::o;14:173:6:-;82:20;;-1:-1:-1;;;;;131:31:6;;121:42;;111:2;;177:1;174;167:12;192:196;;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;393:1025::-;;;;;565:3;553:9;544:7;540:23;536:33;533:2;;;587:6;579;572:22;533:2;615:29;634:9;615:29;:::i;:::-;605:39;;663:2;684:38;718:2;707:9;703:18;684:38;:::i;:::-;674:48;;769:2;758:9;754:18;741:32;731:42;;824:2;813:9;809:18;796:32;847:18;888:2;880:6;877:14;874:2;;;909:6;901;894:22;874:2;952:6;941:9;937:22;927:32;;997:7;990:4;986:2;982:13;978:27;968:2;;1024:6;1016;1009:22;968:2;1065;1052:16;1087:2;1083;1080:10;1077:2;;;1093:18;;:::i;:::-;1135:53;1178:2;1159:13;;-1:-1:-1;;1155:27:6;1151:36;;1135:53;:::i;:::-;1122:66;;1211:2;1204:5;1197:17;1251:7;1246:2;1241;1237;1233:11;1229:20;1226:33;1223:2;;;1277:6;1269;1262:22;1223:2;1337;1332;1328;1324:11;1319:2;1312:5;1308:14;1295:45;1360:14;;1356:23;;;1349:39;;;;523:895;;;;-1:-1:-1;523:895:6;;-1:-1:-1;;523:895:6:o;1423:1002::-;;1538:2;1581;1569:9;1560:7;1556:23;1552:32;1549:2;;;1602:6;1594;1587:22;1549:2;1647:9;1634:23;1676:18;1717:2;1709:6;1706:14;1703:2;;;1738:6;1730;1723:22;1703:2;1781:6;1770:9;1766:22;1756:32;;1826:7;1819:4;1815:2;1811:13;1807:27;1797:2;;1853:6;1845;1838:22;1797:2;1894;1881:16;1916:2;1912;1909:10;1906:2;;;1922:18;;:::i;:::-;1968:2;1965:1;1961:10;1951:20;;1991:28;2015:2;2011;2007:11;1991:28;:::i;:::-;2053:15;;;2084:12;;;;2116:11;;;2146;;;2142:20;;2139:33;-1:-1:-1;2136:2:6;;;2190:6;2182;2175:22;2136:2;2217:6;2208:15;;2232:163;2246:2;2243:1;2240:9;2232:163;;;2303:17;;2291:30;;2264:1;2257:9;;;;;2341:12;;;;2373;;2232:163;;;-1:-1:-1;2414:5:6;1518:907;-1:-1:-1;;;;;;;;1518:907:6:o;2430:297::-;;2550:2;2538:9;2529:7;2525:23;2521:32;2518:2;;;2571:6;2563;2556:22;2518:2;2608:9;2602:16;2661:5;2654:13;2647:21;2640:5;2637:32;2627:2;;2688:6;2680;2673:22;2732:190;;2844:2;2832:9;2823:7;2819:23;2815:32;2812:2;;;2865:6;2857;2850:22;2812:2;-1:-1:-1;2893:23:6;;2802:120;-1:-1:-1;2802:120:6:o;2927:194::-;;3050:2;3038:9;3029:7;3025:23;3021:32;3018:2;;;3071:6;3063;3056:22;3018:2;-1:-1:-1;3099:16:6;;3008:113;-1:-1:-1;3008:113:6:o;3993:635::-;4164:2;4216:21;;;4286:13;;4189:18;;;4308:22;;;3993:635;;4164:2;4387:15;;;;4361:2;4346:18;;;3993:635;4433:169;4447:6;4444:1;4441:13;4433:169;;;4508:13;;4496:26;;4577:15;;;;4542:12;;;;4469:1;4462:9;4433:169;;;-1:-1:-1;4619:3:6;;4144:484;-1:-1:-1;;;;;;4144:484:6:o;5285:402::-;5487:2;5469:21;;;5526:2;5506:18;;;5499:30;5565:34;5560:2;5545:18;;5538:62;-1:-1:-1;;;5631:2:6;5616:18;;5609:36;5677:3;5662:19;;5459:228::o;6100:355::-;6302:2;6284:21;;;6341:2;6321:18;;;6314:30;6380:33;6375:2;6360:18;;6353:61;6446:2;6431:18;;6274:181::o;6460:405::-;6662:2;6644:21;;;6701:2;6681:18;;;6674:30;6740:34;6735:2;6720:18;;6713:62;-1:-1:-1;;;6806:2:6;6791:18;;6784:39;6855:3;6840:19;;6634:231::o;8384:275::-;8455:2;8449:9;8520:2;8501:13;;-1:-1:-1;;8497:27:6;8485:40;;8555:18;8540:34;;8576:22;;;8537:62;8534:2;;;8602:18;;:::i;:::-;8638:2;8631:22;8429:230;;-1:-1:-1;8429:230:6:o;8664:128::-;;8735:1;8731:6;8728:1;8725:13;8722:2;;;8741:18;;:::i;:::-;-1:-1:-1;8777:9:6;;8712:80::o;8797:168::-;;8903:1;8899;8895:6;8891:14;8888:1;8885:21;8880:1;8873:9;8866:17;8862:45;8859:2;;;8910:18;;:::i;:::-;-1:-1:-1;8950:9:6;;8849:116::o;8970:125::-;;9038:1;9035;9032:8;9029:2;;;9043:18;;:::i;:::-;-1:-1:-1;9080:9:6;;9019:76::o;9100:135::-;;-1:-1:-1;;9160:17:6;;9157:2;;;9180:18;;:::i;:::-;-1:-1:-1;9227:1:6;9216:13;;9147:88::o;9240:127::-;9301:10;9296:3;9292:20;9289:1;9282:31;9332:4;9329:1;9322:15;9356:4;9353:1;9346:15;9372:127;9433:10;9428:3;9424:20;9421:1;9414:31;9464:4;9461:1;9454:15;9488:4;9485:1;9478:15

Swarm Source

ipfs://b4e12731664da4bac3a241f23669fbf6ec90698771abf9dbe40fb542d51990ce
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.