Contract 0xC0AAfAb00AA92da5405C4a8536D5cF1Fc1c5c1B4 4

Contract Overview

Balance:
101.827909564986580391 AVAX

AVAX Value:
$1,753.48 (@ $17.22/AVAX)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x3843a0716ebb0f16da8f40d021f6eaf47659295f53e3d33c3e2d3c9d4e56b12cUnstake204034012022-09-28 23:37:181 hr 36 mins ago0x5355c541004777c3d9bd2a594ffec9e4200f877e IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.001694628 27
0x870f34fb6a53a1cd874e2d9681174fdeff6486c20d81b169e6ac2d21bc7440aeClaim204033002022-09-28 23:33:471 hr 39 mins ago0xe462bdf56ae5bf761dbaebb3ec8bd4525c65881e IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.000788358779 27.2816825
0x0aabef499e1e8f83614bbc6339394a3655c7bdc850421c891af79c7fb8f27ec5Unstake204032842022-09-28 23:33:131 hr 40 mins ago0xe462bdf56ae5bf761dbaebb3ec8bd4525c65881e IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.002506782125 27.425
0x5564ca1404072af5aaba9dfd3d7bb9678b7ea4f50e1c3fe7fcf40997aa6f280aStake Set203973062022-09-28 20:08:265 hrs 5 mins ago0x94542a589fe8248be6beeb99b3a643dc00c3c4cc IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.0037153 26.5
0x16a6b8173bde247071dd13c980b6d892e70d686601f3ae73d90cf9bdc75d29caUnstake203906842022-09-28 16:21:128 hrs 52 mins ago0x5355c541004777c3d9bd2a594ffec9e4200f877e IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.0017213027 27.425
0xe370b786e615962d0769886145be5497e5c219e71729f09f352dc56c0222fb4cStake Set203868692022-09-28 14:10:2911 hrs 3 mins ago0xe561fdbceaa225ccfa080bcd4d84382e27f6d9d9 IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.005546508675 26.175
0xe5e4deeca02c9b528169af1f823be66940718777906bbd49a4478bd06b8a66a0Claim203834832022-09-28 12:13:4412 hrs 59 mins ago0xceec1f8c5bb91b4a7b12c0b550731de9afce2144 IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.00356994534 26.41
0x28769c3d631758b609458d7a171b60e32df9ab8a648251f861b122d718f33aaeClaim203702572022-09-28 4:39:3120 hrs 34 mins ago0xac9ac8c29bd3983e26b727ec64bbe3eb84079689 IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.003534093 26.5
0x0b325e125f6c25c0eeaf48d7000001cae1bfa4407062c11e0d8390db7f406973Stake Set203681842022-09-28 3:28:3121 hrs 45 mins ago0xf9130f1406cff05e0b6368dc0fb7a0bde59f6a3f IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.0122492805 26.5
0x881834ef968a0b4edeea54872502d16d1ca2b5b13e0526db06ff4119ca3dbc92Stake Set203573262022-09-27 21:15:201 day 3 hrs ago0xf83ea853e5ffb718f36a2202051de850e2f9873b IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.006109681 26.5
0x9d0211719a460e818079b353dbc6c77f0d5deebf42a4d046ea175de46bd29f56Claim203491792022-09-27 16:37:001 day 8 hrs ago0x8047e8e33fab6caec0841a575b3f7e266f6f745a IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.0073594475 26.5
0x2a5929e5c4878f6b5401c87189546156225edf44034a61fb89af67c09cd7841aClaim203490652022-09-27 16:33:061 day 8 hrs ago0xe4e64ac04295953593954e5d4eebcb509839ecb3 IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.002423902 26.5
0xb17e5c3561f6cc338e028b219a9c5d285886886f3840342b4b690093618adc2fClaim203471082022-09-27 15:26:361 day 9 hrs ago0xe2321a99d054eeebe31ded3451a294136b0d1ffe IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.005697341 26.5
0xbd8adb265692c5d394bd2035307784a004c4c2865a0966833bae0887aef9d1f3Claim203463512022-09-27 15:00:421 day 10 hrs ago0xb528377be30ae47925ede70bf2de0fb997a9a879 IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.012229008 26.5
0xe634024b4133b452342c4f5da18c35dbf4117043ff452050051db371be78a5d8Claim203434482022-09-27 13:20:551 day 11 hrs ago0xcfdbc75a72e630d99b4b45039d2d2770a181313c IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.003044707619 26.738217978
0x9c4b0520d38c00ea7495ddf701fd27759f98964db0fa47f181354dae053d1bf9Unstake203419562022-09-27 12:30:001 day 12 hrs ago0xc1984d6dc28bd40025d5786043b52517443fabd8 IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.005852684 26.5
0xc2d167c9fc0a09c3b4f18c1d3d0a429a632900e0d93aa2ec7f416e5960bd557aClaim203279592022-09-27 4:29:571 day 20 hrs ago0xbc47c825760d8e6f624b6586763c5aed38f8fcd1 IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.0035772615 26.5
0x222df97b26e4a4e72f36f7ae1d6653fbf2f7e0429eba870e1829995f0b219aa6Stake Set203269642022-09-27 3:55:511 day 21 hrs ago0x33b59b41800716680748411aa0a4ca339062292e IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.012833656 41
0xee38579b92ce4c84f51446bda4c102125173f8b78afc8b03a54a261cef77467fStake Set203248472022-09-27 2:43:411 day 22 hrs ago0x33b59b41800716680748411aa0a4ca339062292e IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.007273031 41
0x7e9050ff16126fc6e246d4f99a0da64f3065978282b71f09339200d241675252Stake Set203247462022-09-27 2:40:091 day 22 hrs ago0x33b59b41800716680748411aa0a4ca339062292e IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.008770638 41
0xe48d75225273516c29d1dabfb3e4814abd1a706513e97d5cad054817d65c78e6Stake Set203158162022-09-26 21:33:592 days 3 hrs ago0xce36bef66670910f2f7d8576a45e60ef2ad29928 IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.0520831795 26.5
0xbca4233369bfa8b79ccad63b22af1ddb5d3cbe1d16aa993c4adcc292f10295a6Stake Set203141922022-09-26 20:38:282 days 4 hrs ago0xbf4048970ff95dfd3e99030fe3d0af354dad1f9c IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.00615659356 26.41
0x29ff1b01e11add2dd20f0b43be8aaa439daf3cc267327f1aeb53f93b7a97250fStake Set203095792022-09-26 17:59:482 days 7 hrs ago0x410c26f2614ae78ddda5d140e7a95ac4aa343629 IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.0046807215 26.5
0x12d2b9bebef656335f44305382f1739cf8feaf69b13c6d68290cd064737366aaUnstake203087912022-09-26 17:32:252 days 7 hrs ago0x47577e20889347f10bd08d83cd590e8249a87c48 IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.01773529217 26.41
0xf109e50d207c40f194ff6c74dc1677e0b915a109d396335003dc8225fb128f34Unstake203087842022-09-26 17:32:112 days 7 hrs ago0x47577e20889347f10bd08d83cd590e8249a87c48 IN  0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40 AVAX0.01783409198 26.41
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x5b8274bb64c7e3ff27307a7e843aed08336247f462cba7044b2ec65029cd7a98204061282022-09-29 1:10:253 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.0057 AVAX
0xc7732cf1b90babfc1e92baa02c0c52744c2e09089e56323fa51b563c020ae03b204053462022-09-29 0:43:5429 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005188 AVAX
0xc7732cf1b90babfc1e92baa02c0c52744c2e09089e56323fa51b563c020ae03b204053462022-09-29 0:43:5429 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0xc7732cf1b90babfc1e92baa02c0c52744c2e09089e56323fa51b563c020ae03b204053462022-09-29 0:43:5429 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0xc7732cf1b90babfc1e92baa02c0c52744c2e09089e56323fa51b563c020ae03b204053462022-09-29 0:43:5429 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0x11dd4b9e18c16898874c9a0d09933bacfb7b97d9fd57d973a9ab4df35dcc51ce204053262022-09-29 0:43:1330 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0x11dd4b9e18c16898874c9a0d09933bacfb7b97d9fd57d973a9ab4df35dcc51ce204053262022-09-29 0:43:1330 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0x11dd4b9e18c16898874c9a0d09933bacfb7b97d9fd57d973a9ab4df35dcc51ce204053262022-09-29 0:43:1330 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0x11dd4b9e18c16898874c9a0d09933bacfb7b97d9fd57d973a9ab4df35dcc51ce204053262022-09-29 0:43:1330 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0x11dd4b9e18c16898874c9a0d09933bacfb7b97d9fd57d973a9ab4df35dcc51ce204053262022-09-29 0:43:1330 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0x11dd4b9e18c16898874c9a0d09933bacfb7b97d9fd57d973a9ab4df35dcc51ce204053262022-09-29 0:43:1330 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0x11dd4b9e18c16898874c9a0d09933bacfb7b97d9fd57d973a9ab4df35dcc51ce204053262022-09-29 0:43:1330 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0x11dd4b9e18c16898874c9a0d09933bacfb7b97d9fd57d973a9ab4df35dcc51ce204053262022-09-29 0:43:1330 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0x11dd4b9e18c16898874c9a0d09933bacfb7b97d9fd57d973a9ab4df35dcc51ce204053262022-09-29 0:43:1330 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0x11dd4b9e18c16898874c9a0d09933bacfb7b97d9fd57d973a9ab4df35dcc51ce204053262022-09-29 0:43:1330 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0x11dd4b9e18c16898874c9a0d09933bacfb7b97d9fd57d973a9ab4df35dcc51ce204053262022-09-29 0:43:1330 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0x11dd4b9e18c16898874c9a0d09933bacfb7b97d9fd57d973a9ab4df35dcc51ce204053262022-09-29 0:43:1330 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0xc4774e3a3900057a38c726757d3335cea51ffff2709294a5be1c330351a51bee204051932022-09-29 0:38:4634 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0xbf26454b673c8027bc375e25ab790dd96d64ef6d71a6747ddaae9c120620b6f2204051552022-09-29 0:37:2936 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0x4a2757248123da8ffe18ffdc4c0314089150875b7b2641b8ac4df591b5f22599204042602022-09-29 0:06:541 hr 6 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.02 AVAX
0xd57ba857acf9f8de56e4b05f222f469782ce584582fbb9efb727e12a50d0c873204036122022-09-28 23:44:371 hr 29 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.15 AVAX
0xa8797f5aba3c34002756fe5f90aebfa06128dfcd6d7f0deccbed46324ef82515204034022022-09-28 23:37:201 hr 36 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.005 AVAX
0x402e4e121cfadeddd8378097709a8be4c3ac4353be13b45dc259cd04f1ef11e1204033322022-09-28 23:34:521 hr 38 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.0015 AVAX
0x68795751dae5f9cbed1812865accc126f5b8853fb21e37d414b69c508fd01e78204033132022-09-28 23:34:141 hr 39 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.0015 AVAX
0x64ceecc18121ae3748ad961c5ebeb34cfbbdbc9a71c7f86fd4e27507d23b23a7204032462022-09-28 23:31:561 hr 41 mins ago 0xbcb09cdb2011fea0591b52e52085bb102e4a082a 0xc0aafab00aa92da5405c4a8536d5cf1fc1c5c1b40.0098 AVAX
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CampfireStaking

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 8 : CampfireStaking.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;

import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

contract CampfireStaking is Ownable, ReentrancyGuard {
  uint256 private _totalNftsStaked;
  uint256 private _totalBlockEntries;

  address private _wavaxAddress;
  address private _keeperAddress;
  uint256 private _maxStake;

  mapping (address => uint256) private _totalNftsStakedForAccount;
  mapping (address => bool) private _partners;
  mapping (address => bool) private _managers;
  mapping (address => uint256) private _blockEntries;

  mapping (address => mapping (uint256 => bool)) _staked;
  mapping (address => mapping (uint256 => address)) private _stakers;
  // mapping (address => StakedNFT[]) private _stakedNFTs;

  mapping (address => mapping (address => bool)) private _approvals;

  mapping (bytes32 => StakedNFT) private _stakedNFTs;
  mapping (address => bytes32[]) private _stakedNFTHashes;


  struct StakedNFT {
    address contractAddress;
    uint256 tokenId;
  }

  constructor() {
    _managers[msg.sender] = true;
    _maxStake = 250;
  }

  modifier onlyManager() {
    require(_managers[msg.sender], "Campfire Staking: Caller is not the manager");
    _;
  }

  function addManager(address _newManager) public onlyManager {
    _managers[_newManager] = true;
  }

  function removeManager(address _manager) public onlyManager {
    _managers[_manager] = false;
  }

  function addPartner(address _contractAddress) public onlyManager {
    _partners[_contractAddress] = true;
  }

  function isPartner(address _contractAddress) public view returns (bool) {
    if (_contractAddress == 0x5e4504663AB2a8060715A1D1f162873F39DF9abf) { // OUTLAWS
      return true;
    } else {
      return _partners[_contractAddress];
    }
  }

  function stakeSet(address _contractAddress, uint256[] memory _tokenIds) public nonReentrant {
    require(_tokenIds.length <= 15, "Campfire Staking: You can't stake more than 15 at a time.");
    // IMPORTANT: Rely on real value here, not cached!
    uint256 accountNftsStaked = getNumberStaked(msg.sender);
    for (uint256 index = 0; index < _tokenIds.length; index++) {
      uint256 _tokenId = _tokenIds[index];
      _stake(_contractAddress, _tokenId, (accountNftsStaked + index));
    }
  }

  function stake(address _contractAddress, uint256 _tokenId) public nonReentrant {
    // IMPORTANT: Rely on real value here, not cached!
    uint256 accountNftsStaked = getNumberStaked(msg.sender);
    _stake(_contractAddress, _tokenId, accountNftsStaked);
  }

  function _stake(address _contractAddress, uint256 _tokenId, uint256 accountNftsStaked) private {
    require(isPartner(_contractAddress), "Campfire Staking: This project is not a parter.");

    IERC721 nft = IERC721(_contractAddress);
    require(nft.ownerOf(_tokenId) == msg.sender, "Campfire Staking: You don't own that NFT.");

    if (isStaked(_contractAddress, _tokenId)) {
      if (_stakers[_contractAddress][_tokenId] == msg.sender) {
        require(false, "Campfire Staking: You cannot stake an NFT more than once.");
      } else {
        address originalOwner = _stakers[_contractAddress][_tokenId];
        uint256 currentForOriginal = getNumberStaked(originalOwner);

        resetTotalsFor(originalOwner, currentForOriginal);

        _stakers[_contractAddress][_tokenId] = msg.sender;
      }
    }
    
    if (_totalNftsStakedForAccount[msg.sender] > 0 && block.number < _blockEntries[msg.sender]) {
      if (_totalNftsStakedForAccount[msg.sender] > accountNftsStaked) {
        resetTotalsFor(msg.sender, accountNftsStaked);
      }

      uint256 avaxRewards = _availableAVAXRewards(msg.sender, accountNftsStaked);
      uint256 wavaxRewards = _availableWAVAXRewards(msg.sender, accountNftsStaked);

      _totalBlockEntries -= _blockEntries[msg.sender] * _totalNftsStakedForAccount[msg.sender];

      if (wavaxRewards > 0) {
        IERC20 wavax = IERC20(_wavaxAddress);
        wavax.transfer(msg.sender, wavaxRewards);
      }
      if (avaxRewards > 0) {
        payable(msg.sender).transfer(avaxRewards);
      }
    } else if (_totalNftsStakedForAccount[msg.sender] > 0) {
      _totalBlockEntries -= _blockEntries[msg.sender] * _totalNftsStakedForAccount[msg.sender];
    }

    _totalNftsStaked += 1;
    _totalNftsStakedForAccount[msg.sender] += 1;

    _blockEntries[msg.sender] = block.number;
    _totalBlockEntries += block.number * _totalNftsStakedForAccount[msg.sender];

    bytes32 nftHash = keccak256(abi.encodePacked(msg.sender, _contractAddress, _tokenId));

    _stakedNFTs[nftHash] = StakedNFT(_contractAddress, _tokenId);
    _stakedNFTHashes[msg.sender].push(nftHash);

    _stakers[_contractAddress][_tokenId] = msg.sender;

    require(_totalNftsStakedForAccount[msg.sender] <= _maxStake, "Campfire Staking: You have hit the max staked limit.");

    _staked[_contractAddress][_tokenId] = true;
  }

  function isStaked(address _contractAddress, uint256 _tokenId) public view returns (bool) {
    return _staked[_contractAddress][_tokenId];
  }

  function totalStaked() public view returns (uint256) {
    return _totalNftsStaked;
  }

  function totalStakedFor(address staker) public view returns (uint256) {
    return _totalNftsStakedForAccount[staker];
  }
  
  function totalBlockEntries() public view returns (uint256) {
    return _totalBlockEntries;
  }

  function blockEntriesFor(address staker) public view returns (uint256) {
    return _blockEntries[staker];
  }

  function unstake(address _contractAddress, uint256 _tokenId) public nonReentrant {
    IERC721 nft = IERC721(_contractAddress);

    address nftOwner = nft.ownerOf(_tokenId);
    require(msg.sender == nftOwner, "Campfire Staking: You don't own that NFT.");
    require(isStaked(_contractAddress, _tokenId), "Campfire Staking: That NFT is not currently staked.");

    // IMPORTANT: Rely on real value here, not cached!
    uint256 accountNftsStaked = getNumberStaked(msg.sender);

    if (_totalNftsStakedForAccount[msg.sender] > accountNftsStaked) {
      resetTotalsFor(msg.sender, accountNftsStaked);
    }

    uint256 avaxRewards = _availableAVAXRewards(msg.sender, accountNftsStaked);
    uint256 wavaxRewards = _availableWAVAXRewards(msg.sender, accountNftsStaked);

    _totalBlockEntries -= _blockEntries[msg.sender] * _totalNftsStakedForAccount[msg.sender];
    
    _totalNftsStaked -= 1;
    _totalNftsStakedForAccount[msg.sender] -= 1;
    
    _blockEntries[msg.sender] = block.number;
    _totalBlockEntries += block.number * _totalNftsStakedForAccount[msg.sender];

    _staked[_contractAddress][_tokenId] = false;

    IERC20 wavax = IERC20(_wavaxAddress);

    if (wavaxRewards > 0) {
      wavax.transfer(msg.sender, wavaxRewards);
    }
    if (avaxRewards > 0) {
      payable(msg.sender).transfer(avaxRewards);
    }
  }

  function unclaimedBlocks() public view returns (uint256) {
    uint256 totalUnclaimedBlocks = (block.number * _totalNftsStaked) - _totalBlockEntries;
    return totalUnclaimedBlocks;
  }

  function claim() public nonReentrant {
    _claim(msg.sender);
  }

  function claimFor(address account) public {
    require(msg.sender == _keeperAddress || _approvals[account][msg.sender], "Campfire Staking: You don't have permission to do that.");

    _claim(account);
  }

  function _claim(address account) private {
    require(_totalNftsStakedForAccount[account] > 0, "Campfire Staking: You are not staked.");

    // IMPORTANT: Rely on real value here, not cached!
    uint256 accountNftsStaked = getNumberStaked(account);

    if (_totalNftsStakedForAccount[account] > accountNftsStaked) {
      resetTotalsFor(account, accountNftsStaked);
    }

    uint256 avaxRewards = _availableAVAXRewards(account, accountNftsStaked);
    uint256 wavaxRewards = _availableWAVAXRewards(account, accountNftsStaked);

    _totalBlockEntries -= _blockEntries[account] * _totalNftsStakedForAccount[account];

    _blockEntries[account] = block.number;
    _totalBlockEntries += block.number * _totalNftsStakedForAccount[account];

    IERC20 wavax = IERC20(_wavaxAddress);

    if (wavaxRewards > 0) {
      wavax.transfer(account, wavaxRewards);
    }
    if (avaxRewards > 0) {
      payable(account).transfer(avaxRewards);
    }
  }

  function resetTotalsFor(address account, uint256 accountNftsStaked) private {
    _totalBlockEntries -= (_blockEntries[account] * _totalNftsStakedForAccount[account]);
    _totalNftsStaked -= _totalNftsStakedForAccount[account];
    _totalNftsStakedForAccount[account] = accountNftsStaked;
    _totalBlockEntries += (_blockEntries[account] * _totalNftsStakedForAccount[account]);
    _totalNftsStaked += _totalNftsStakedForAccount[account];
  }

  // NOTE: The next two methods are convenience methods for the UI --> not to be used internally
  function availableAVAXRewards(address account) public view returns (uint256) {
    uint256 accountNftsStaked = getNumberStaked(account);
    uint256 available = address(this).balance;
    return _rewardsCalc(account, available, accountNftsStaked);
  }

  function availableWAVAXRewards(address account) public view returns (uint256) {
    uint256 accountNftsStaked = getNumberStaked(account);
    IERC20 wavax = IERC20(_wavaxAddress);
    uint256 available = wavax.balanceOf(address(this));
    return _rewardsCalc(account, available, accountNftsStaked);
  }

  function _availableAVAXRewards(address account, uint256 accountNftsStaked) private view returns (uint256) {
    uint256 available = address(this).balance;
    return _rewardsCalc(account, available, accountNftsStaked);
  }

  function _availableWAVAXRewards(address account, uint256 accountNftsStaked) private view returns (uint256) {
    IERC20 wavax = IERC20(_wavaxAddress);
    uint256 available = wavax.balanceOf(address(this));
    return _rewardsCalc(account, available, accountNftsStaked);
  }


  function _rewardsCalc(address account, uint256 available, uint256 accountNftsStaked) private view returns (uint256) {
      uint256 totalUnclaimedBlocks = (block.number * _totalNftsStaked) - _totalBlockEntries;

     if (totalUnclaimedBlocks > 0) {
      uint256 accountUnclaimedBlocks = (block.number * accountNftsStaked) - (_blockEntries[account] * accountNftsStaked);
      uint256 reward = (available * accountUnclaimedBlocks) / totalUnclaimedBlocks;
      return reward;
    } else {
      return 0;
    }
  }

  function getNumberStaked(address staker) public view returns (uint256) {
    uint256 numberStaked = 0;
    for (uint256 index = 0; index < _stakedNFTHashes[staker].length; index++) {
      bytes32 nftHash = _stakedNFTHashes[staker][index];
      StakedNFT memory stakedNFT = _stakedNFTs[nftHash];

      if (isStaked(stakedNFT.contractAddress, stakedNFT.tokenId)) {
        IERC721 nft = IERC721(stakedNFT.contractAddress);
        if (nft.ownerOf(stakedNFT.tokenId) == staker) {
          numberStaked += 1;
        }
      }
    }
    return numberStaked;
  }

  function setWAVAX(address wavaxAddress_) public onlyOwner {
    _wavaxAddress = wavaxAddress_;
  }

  function setKeeper(address keeperAddress_) public onlyOwner {
    _keeperAddress = keeperAddress_;
  }

  function setMaxStake(uint256 maxStake_) public onlyOwner {
    _maxStake = maxStake_;
  }

  function approve(address manager, bool approved) public {
    _approvals[msg.sender][manager] = approved;
  }

  receive() external payable {}

}

File 2 of 8 : 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 8 : Counters.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

File 4 of 8 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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

pragma solidity ^0.8.0;

import "../../utils/introspection/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 6 of 8 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        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 7 of 8 : 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;
    }
}

File 8 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_newManager","type":"address"}],"name":"addManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"addPartner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"availableAVAXRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"availableWAVAXRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"blockEntriesFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"claimFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getNumberStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"isPartner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"isStaked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"removeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"keeperAddress_","type":"address"}],"name":"setKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxStake_","type":"uint256"}],"name":"setMaxStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wavaxAddress_","type":"address"}],"name":"setWAVAX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"stakeSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalBlockEntries","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"totalStakedFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclaimedBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b5062000032620000266200009f60201b60201c565b620000a760201b60201c565b600180819055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060fa6006819055506200016b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613b4d806200017b6000396000f3fe60806040526004361061016a5760003560e01c8063817b1cd2116100d1578063adc9772e1161008a578063da71413511610064578063da7141351461052f578063db95bfea1461056c578063ddeae03314610595578063f2fde38b146105be57610171565b8063adc9772e146104b2578063c2a672e0146104db578063cf859eed1461050457610171565b8063817b1cd2146103a25780638bf34237146103cd5780638c0f9aac146103f65780638da5cb5b14610433578063904fe5cf1461045e578063ac18de431461048957610171565b80635451da1b116101235780635451da1b146102825780635c814f2d146102bf5780636fc14837146102fc5780637069c99814610325578063715018a614610362578063748747e61461037957610171565b8063168ae9b6146101765780632d06177a1461019f5780633d140d21146101c85780634b341aed146101f15780634e71d92d1461022e578063510395be1461024557610171565b3661017157005b600080fd5b34801561018257600080fd5b5061019d60048036038101906101989190612e89565b6105e7565b005b3480156101ab57600080fd5b506101c660048036038101906101c19190612e89565b6106a7565b005b3480156101d457600080fd5b506101ef60048036038101906101ea9190612f2f565b61078e565b005b3480156101fd57600080fd5b5061021860048036038101906102139190612e89565b610826565b604051610225919061343d565b60405180910390f35b34801561023a57600080fd5b5061024361086f565b005b34801561025157600080fd5b5061026c60048036038101906102679190612e89565b6108cf565b604051610279919061343d565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612f6b565b6108f6565b6040516102b691906132a2565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190612e89565b61095e565b6040516102f3919061343d565b60405180910390f35b34801561030857600080fd5b50610323600480360381019061031e9190612fd0565b610bcb565b005b34801561033157600080fd5b5061034c60048036038101906103479190612e89565b610c51565b604051610359919061343d565b60405180910390f35b34801561036e57600080fd5b50610377610c9a565b005b34801561038557600080fd5b506103a0600480360381019061039b9190612e89565b610d22565b005b3480156103ae57600080fd5b506103b7610de2565b6040516103c4919061343d565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef9190612e89565b610dec565b005b34801561040257600080fd5b5061041d60048036038101906104189190612e89565b610ed3565b60405161042a91906132a2565b60405180910390f35b34801561043f57600080fd5b50610448610f7b565b604051610455919061325e565b60405180910390f35b34801561046a57600080fd5b50610473610fa4565b604051610480919061343d565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190612e89565b610fae565b005b3480156104be57600080fd5b506104d960048036038101906104d49190612f6b565b611095565b005b3480156104e757600080fd5b5061050260048036038101906104fd9190612f6b565b611107565b005b34801561051057600080fd5b5061051961165d565b604051610526919061343d565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190612e89565b611684565b604051610563919061343d565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190612edb565b61175b565b005b3480156105a157600080fd5b506105bc60048036038101906105b79190612e89565b611883565b005b3480156105ca57600080fd5b506105e560048036038101906105e09190612e89565b6119b0565b005b6105ef611aa8565b73ffffffffffffffffffffffffffffffffffffffff1661060d610f7b565b73ffffffffffffffffffffffffffffffffffffffff1614610663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065a9061337d565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072a9061333d565b60405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b80600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600260015414156108b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ac906133fd565b60405180910390fd5b60026001819055506108c633611ab0565b60018081905550565b6000806108db8361095e565b905060004790506108ed848284611e0d565b92505050919050565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff16905092915050565b6000806000905060005b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015610bc1576000600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610a2b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490506000600e60008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250509050610acc816000015182602001516108f6565b15610bac576000816000015190508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e84602001516040518263ffffffff1660e01b8152600401610b2e919061343d565b60206040518083038186803b158015610b4657600080fd5b505afa158015610b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7e9190612eb2565b73ffffffffffffffffffffffffffffffffffffffff161415610baa57600185610ba791906134ba565b94505b505b50508080610bb990613648565b915050610968565b5080915050919050565b610bd3611aa8565b73ffffffffffffffffffffffffffffffffffffffff16610bf1610f7b565b73ffffffffffffffffffffffffffffffffffffffff1614610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e9061337d565b60405180910390fd5b8060068190555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ca2611aa8565b73ffffffffffffffffffffffffffffffffffffffff16610cc0610f7b565b73ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d9061337d565b60405180910390fd5b610d206000611ece565b565b610d2a611aa8565b73ffffffffffffffffffffffffffffffffffffffff16610d48610f7b565b73ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d959061337d565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600254905090565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f9061333d565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000735e4504663ab2a8060715a1d1f162873f39df9abf73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f265760019050610f76565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600354905090565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661103a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110319061333d565b60405180910390fd5b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600260015414156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d2906133fd565b60405180910390fd5b600260018190555060006110ee3361095e565b90506110fb838383611f92565b50600180819055505050565b6002600154141561114d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611144906133fd565b60405180910390fd5b6002600181905550600082905060008173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401611195919061343d565b60206040518083038186803b1580156111ad57600080fd5b505afa1580156111c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e59190612eb2565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c906132fd565b60405180910390fd5b61125f84846108f6565b61129e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112959061341d565b60405180910390fd5b60006112a93361095e565b905080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156112fd576112fc3382612a55565b5b60006113093383612c91565b905060006113173384612cab565b9050600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113a39190613541565b600360008282546113b4919061359b565b925050819055506001600260008282546113ce919061359b565b925050819055506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611425919061359b565b9250508190555043600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054436114bb9190613541565b600360008282546114cc91906134ba565b925050819055506000600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008211156115fb578073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016115a7929190613279565b602060405180830381600087803b1580156115c157600080fd5b505af11580156115d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f99190612fa7565b505b600083111561164c573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561164a573d6000803e3d6000fd5b505b505050505050600180819055505050565b600080600354600254436116719190613541565b61167b919061359b565b90508091505090565b6000806116908361095e565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116f4919061325e565b60206040518083038186803b15801561170c57600080fd5b505afa158015611720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117449190612ff9565b9050611751858285611e0d565b9350505050919050565b600260015414156117a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611798906133fd565b60405180910390fd5b6002600181905550600f815111156117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e5906132bd565b60405180910390fd5b60006117f93361095e565b905060005b8251811015611876576000838281518110611842577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506118628582848661185d91906134ba565b611f92565b50808061186e90613648565b9150506117fe565b5050600180819055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806119655750600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199b9061339d565b60405180910390fd5b6119ad81611ab0565b50565b6119b8611aa8565b73ffffffffffffffffffffffffffffffffffffffff166119d6610f7b565b73ffffffffffffffffffffffffffffffffffffffff1614611a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a239061337d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a93906132dd565b60405180910390fd5b611aa581611ece565b50565b600033905090565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b299061331d565b60405180910390fd5b6000611b3d8261095e565b905080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611b9157611b908282612a55565b5b6000611b9d8383612c91565b90506000611bab8484612cab565b9050600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c379190613541565b60036000828254611c48919061359b565b9250508190555043600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205443611cde9190613541565b60036000828254611cef91906134ba565b925050819055506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000821115611db5578073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86846040518363ffffffff1660e01b8152600401611d61929190613279565b602060405180830381600087803b158015611d7b57600080fd5b505af1158015611d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db39190612fa7565b505b6000831115611e06578473ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611e04573d6000803e3d6000fd5b505b5050505050565b60008060035460025443611e219190613541565b611e2b919061359b565b90506000811115611ec157600083600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e839190613541565b8443611e8f9190613541565b611e99919061359b565b90506000828287611eaa9190613541565b611eb49190613510565b9050809350505050611ec7565b60009150505b9392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611f9b83610ed3565b611fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd19061335d565b60405180910390fd5b60008390503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b815260040161202f919061343d565b60206040518083038186803b15801561204757600080fd5b505afa15801561205b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207f9190612eb2565b73ffffffffffffffffffffffffffffffffffffffff16146120d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cc906132fd565b60405180910390fd5b6120df84846108f6565b156122ed573373ffffffffffffffffffffffffffffffffffffffff16600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121ce5760006121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c0906133dd565b60405180910390fd5b6122ec565b6000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061224e8261095e565b905061225a8282612a55565b33600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505b5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411801561237a5750600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205443105b156125a75781600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156123d1576123d03383612a55565b5b60006123dd3384612c91565b905060006123eb3385612cab565b9050600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124779190613541565b60036000828254612488919061359b565b92505081905550600081111561254f576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016124fa929190613279565b602060405180830381600087803b15801561251457600080fd5b505af1158015612528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254c9190612fa7565b50505b60008211156125a0573373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561259e573d6000803e3d6000fd5b505b5050612693565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561269257600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126799190613541565b6003600082825461268a919061359b565b925050819055505b5b6001600260008282546126a691906134ba565b925050819055506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126fd91906134ba565b9250508190555043600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054436127939190613541565b600360008282546127a491906134ba565b9250508190555060003385856040516020016127c293929190613221565b60405160208183030381529060405280519060200120905060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff16815260200185815250600e600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155905050600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505533600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600654600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156129e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dc906133bd565b60405180910390fd5b6001600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612adf9190613541565b60036000828254612af0919061359b565b92505081905550600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460026000828254612b48919061359b565b9250508190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1d9190613541565b60036000828254612c2e91906134ba565b92505081905550600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460026000828254612c8691906134ba565b925050819055505050565b600080479050612ca2848285611e0d565b91505092915050565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612d0e919061325e565b60206040518083038186803b158015612d2657600080fd5b505afa158015612d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d5e9190612ff9565b9050612d6b858286611e0d565b9250505092915050565b6000612d88612d838461347d565b613458565b90508083825260208201905082856020860282011115612da757600080fd5b60005b85811015612dd75781612dbd8882612e5f565b845260208401935060208301925050600181019050612daa565b5050509392505050565b600081359050612df081613ad2565b92915050565b600081519050612e0581613ad2565b92915050565b600082601f830112612e1c57600080fd5b8135612e2c848260208601612d75565b91505092915050565b600081359050612e4481613ae9565b92915050565b600081519050612e5981613ae9565b92915050565b600081359050612e6e81613b00565b92915050565b600081519050612e8381613b00565b92915050565b600060208284031215612e9b57600080fd5b6000612ea984828501612de1565b91505092915050565b600060208284031215612ec457600080fd5b6000612ed284828501612df6565b91505092915050565b60008060408385031215612eee57600080fd5b6000612efc85828601612de1565b925050602083013567ffffffffffffffff811115612f1957600080fd5b612f2585828601612e0b565b9150509250929050565b60008060408385031215612f4257600080fd5b6000612f5085828601612de1565b9250506020612f6185828601612e35565b9150509250929050565b60008060408385031215612f7e57600080fd5b6000612f8c85828601612de1565b9250506020612f9d85828601612e5f565b9150509250929050565b600060208284031215612fb957600080fd5b6000612fc784828501612e4a565b91505092915050565b600060208284031215612fe257600080fd5b6000612ff084828501612e5f565b91505092915050565b60006020828403121561300b57600080fd5b600061301984828501612e74565b91505092915050565b61302b816135cf565b82525050565b61304261303d826135cf565b613691565b82525050565b613051816135e1565b82525050565b60006130646039836134a9565b915061306f8261376a565b604082019050919050565b60006130876026836134a9565b9150613092826137b9565b604082019050919050565b60006130aa6029836134a9565b91506130b582613808565b604082019050919050565b60006130cd6025836134a9565b91506130d882613857565b604082019050919050565b60006130f0602b836134a9565b91506130fb826138a6565b604082019050919050565b6000613113602f836134a9565b915061311e826138f5565b604082019050919050565b60006131366020836134a9565b915061314182613944565b602082019050919050565b60006131596037836134a9565b91506131648261396d565b604082019050919050565b600061317c6034836134a9565b9150613187826139bc565b604082019050919050565b600061319f6039836134a9565b91506131aa82613a0b565b604082019050919050565b60006131c2601f836134a9565b91506131cd82613a5a565b602082019050919050565b60006131e56033836134a9565b91506131f082613a83565b604082019050919050565b6132048161360d565b82525050565b61321b6132168261360d565b6136b5565b82525050565b600061322d8286613031565b60148201915061323d8285613031565b60148201915061324d828461320a565b602082019150819050949350505050565b60006020820190506132736000830184613022565b92915050565b600060408201905061328e6000830185613022565b61329b60208301846131fb565b9392505050565b60006020820190506132b76000830184613048565b92915050565b600060208201905081810360008301526132d681613057565b9050919050565b600060208201905081810360008301526132f68161307a565b9050919050565b600060208201905081810360008301526133168161309d565b9050919050565b60006020820190508181036000830152613336816130c0565b9050919050565b60006020820190508181036000830152613356816130e3565b9050919050565b6000602082019050818103600083015261337681613106565b9050919050565b6000602082019050818103600083015261339681613129565b9050919050565b600060208201905081810360008301526133b68161314c565b9050919050565b600060208201905081810360008301526133d68161316f565b9050919050565b600060208201905081810360008301526133f681613192565b9050919050565b60006020820190508181036000830152613416816131b5565b9050919050565b60006020820190508181036000830152613436816131d8565b9050919050565b600060208201905061345260008301846131fb565b92915050565b6000613462613473565b905061346e8282613617565b919050565b6000604051905090565b600067ffffffffffffffff8211156134985761349761371d565b5b602082029050602081019050919050565b600082825260208201905092915050565b60006134c58261360d565b91506134d08361360d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613505576135046136bf565b5b828201905092915050565b600061351b8261360d565b91506135268361360d565b925082613536576135356136ee565b5b828204905092915050565b600061354c8261360d565b91506135578361360d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135905761358f6136bf565b5b828202905092915050565b60006135a68261360d565b91506135b18361360d565b9250828210156135c4576135c36136bf565b5b828203905092915050565b60006135da826135ed565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6136208261374c565b810181811067ffffffffffffffff8211171561363f5761363e61371d565b5b80604052505050565b60006136538261360d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613686576136856136bf565b5b600182019050919050565b600061369c826136a3565b9050919050565b60006136ae8261375d565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f43616d7066697265205374616b696e673a20596f752063616e2774207374616b60008201527f65206d6f7265207468616e20313520617420612074696d652e00000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f43616d7066697265205374616b696e673a20596f7520646f6e2774206f776e2060008201527f74686174204e46542e0000000000000000000000000000000000000000000000602082015250565b7f43616d7066697265205374616b696e673a20596f7520617265206e6f7420737460008201527f616b65642e000000000000000000000000000000000000000000000000000000602082015250565b7f43616d7066697265205374616b696e673a2043616c6c6572206973206e6f742060008201527f746865206d616e61676572000000000000000000000000000000000000000000602082015250565b7f43616d7066697265205374616b696e673a20546869732070726f6a656374206960008201527f73206e6f742061207061727465722e0000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f43616d7066697265205374616b696e673a20596f7520646f6e2774206861766560008201527f207065726d697373696f6e20746f20646f20746861742e000000000000000000602082015250565b7f43616d7066697265205374616b696e673a20596f75206861766520686974207460008201527f6865206d6178207374616b6564206c696d69742e000000000000000000000000602082015250565b7f43616d7066697265205374616b696e673a20596f752063616e6e6f742073746160008201527f6b6520616e204e4654206d6f7265207468616e206f6e63652e00000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f43616d7066697265205374616b696e673a2054686174204e4654206973206e6f60008201527f742063757272656e746c79207374616b65642e00000000000000000000000000602082015250565b613adb816135cf565b8114613ae657600080fd5b50565b613af2816135e1565b8114613afd57600080fd5b50565b613b098161360d565b8114613b1457600080fd5b5056fea26469706673582212204081c968d06a6d8c550d4f5a85bd9fa3c6b3367be9136468d916f27140cf4c7464736f6c63430008010033

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.