ETH Price: $2,793.04 (+4.05%)

Contract

0x2EF96fBfb0A5416C3DC20D9E1cd67875378C7179

Overview

ETH Balance

0 ETH

ETH Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

1 Internal Transaction found.

Latest 1 internal transaction

Parent Transaction Hash Block From To
17410212025-02-14 7:48:198 days ago1739519299  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LandFacet

Compiler Version
v0.8.24+commit.e11b9ed9

ZkSolc Version
v1.5.7

Optimization Enabled:
Yes with Mode 3

Other Settings:
paris EvmVersion
File 1 of 7 : LandFacet.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import {AppStorage, Modifiers, Land} from "../libraries/LibAppStorage.sol";
import {LibLand} from "../libraries/LibLand.sol";
import {LibERC20} from "../libraries/LibERC20.sol";
import {LibDiamond} from "../libraries/LibDiamond.sol";

contract LandFacet is Modifiers {
    error NoLandsForSale();
    error EnhanceNotAvailable();
    error NotEnoughCredits();
    error NotEnoughETH();

    event LandPurchased(address indexed user, uint256 id, uint256 price);
    event LandEthPurchased(address indexed user, uint256 id, uint256 price);
    event LandEnhanced(address indexed user, uint256 counts, uint256 gains);

    function buyLand() external onlyCharacter onlyNonLandOwners {
        if (s.landIndex >= s.landSupplyForSale || s.landPrice == 0) {
            revert NoLandsForSale();
        }

        address ssbToken = s.tokenAddress;
        uint256 price = s.landPrice;
        LibERC20.transferFrom(ssbToken, msg.sender, address(this), price);

        s.landIndex += 1;
        uint256 landId = s.landIndex;
        LibLand.initLand(landId, price);
        s.playerToLandId[msg.sender] = landId;

        address treasury = LibDiamond.contractOwner();
        LibERC20.transfer(ssbToken, treasury, (price * 5) / 100);

        emit LandPurchased(msg.sender, landId, price);
    }

    function improveLand() external onlyLandOwners {
        uint256 playerLandId = s.playerToLandId[msg.sender];
        LibLand.dailyLandProgress(playerLandId);
    }

    function enhanceLand(uint256 _counts) external onlyLandOwners {
        if (s.enhanceLandCreditCost == 0) {
            revert EnhanceNotAvailable();
        }

        uint256 totalCreditCost = _counts * s.enhanceLandCreditCost;
        if (s.playerCharacter[msg.sender].credits < totalCreditCost) {
            revert NotEnoughCredits();
        }

        s.playerCharacter[msg.sender].credits -= totalCreditCost;
        uint256 totalXPGain = _counts * 10;
        LibLand.addLandXP(totalXPGain);

        emit LandEnhanced(msg.sender, _counts, totalXPGain);
    }

    function levelUpLand() external onlyLandOwners {
        LibLand.updateLandLevel();
    }

    function buyLandWithEth() external payable onlyCharacter onlyNonLandOwners {
        if (s.landIndex >= s.landSupplyForSale || s.landPriceInEth == 0) {
            revert NoLandsForSale();
        }

        if (msg.value < s.landPriceInEth) {
            revert NotEnoughETH();
        }

        s.landIndex += 1;
        uint256 landId = s.landIndex;
        LibLand.initLand(landId, 0);
        s.playerToLandId[msg.sender] = landId;

        emit LandEthPurchased(msg.sender, landId, s.landPriceInEth);
    }

    // ===== ADMIN ===== //

    function setLandSupply(uint256 _supply) external onlyOwner {
        s.landSupplyForSale = _supply;
    }

    function setLandPrice(uint256 _amount) external onlyOwner {
        s.landPrice = _amount;
    }

    function setLandPriceInEth(uint256 _amount) external onlyOwner {
        s.landPriceInEth = _amount;
    }

    function setEnhanceLandCreditCost(uint256 _amount) external onlyOwner {
        s.enhanceLandCreditCost = _amount;
    }

    // ===== GETTERS ===== //

    function getLandByAddress(
        address _user
    ) external view returns (Land memory) {
        uint256 querylandId = s.playerToLandId[_user];
        return s.lands[querylandId];
    }

    function getLandById(uint256 _id) external view returns (Land memory) {
        return s.lands[_id];
    }

    function isLandOwnerCheck(address _user) external view returns (bool) {
        if (s.playerToLandId[_user] != 0) {
            return true;
        } else {
            return false;
        }
    }
}

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

import {LibDiamond} from "./LibDiamond.sol";

struct Land {
    uint256 landId;
    address landOwner;
    uint256 createdAt;
    uint256 escrow;
    uint256 landLevel;
    uint256 landXP;
    uint256 lastTimeLandImprove;
    uint256 improveTotalCount;
}

struct Character {
    uint256 playerId; 
    address charOwner; 
    string name; 
    uint256 joinTime;
    uint256 level;
    uint256 xp;
    uint256 credits;
    uint256 earnings;
    uint256 debt;
    uint256 score;
    uint256 power;
    uint256 craftingComponents; 
    uint256 neuroStims; 
    uint256 synthOrgans; 
    uint256 aiFragments; 
    uint256 dataShards; 
    uint256 energyCells;
    uint256 lastTimeGather;
    uint256 lastTimeQuest;
    uint256 gatherCount;
    uint256 questCount;
    uint256 wins;
    uint256 loses;
    uint256 lastTimeDailyClaim;
    uint256 claimTotalCount;
    uint256 claimStreak;
    uint256 lastTimeRecharge;
}

struct AppStorage {
    address tokenAddress; 
    uint256 players; 
    mapping(address => Character) playerCharacter;
    mapping(address => uint256) characterUID; 
    mapping(uint256 => address) idToAddress; 
    uint256 costToCreate;
    uint256 costToCreateEth;
    uint256 costToRecharge;
    mapping(string => bool) nameExist;
    mapping(string => address) nameOwner;
    uint256 totalEarnings;
    uint256 totalDistributedEarnings;
    uint256 landSupplyForSale;
    uint256 landPrice;
    uint256 landPriceInEth;
    uint256 landIndex;
    uint256 enhanceLandCreditCost;
    mapping(address => uint256) playerToLandId;
    mapping(uint256 => Land) lands;
}

library LibAppStorage {
    function appStorage() internal pure returns (AppStorage storage s) {
        assembly {
            s.slot := 0
        }
    }
}

contract Modifiers {
    AppStorage internal s;

    error AlreadyCreatedCharacter();
    error RequiresACharacter();
    error NameAlreadyTaken();
    error NotLandOwner();
    error MaxLimitOneLand();

    modifier onlyOwner() {
        LibDiamond.enforceIsContractOwner();
        _;
    }

    modifier onlyCharacter() {
        uint256 characterId = s.characterUID[msg.sender];
        if (characterId == 0) {
            revert RequiresACharacter();
        }
        _;
    }

    modifier onlyCreateOnce() {
        uint256 characterId = s.characterUID[msg.sender];
        if (characterId != 0) {
            revert AlreadyCreatedCharacter();
        }
        _;
    }

    modifier onlyUniqueName(string calldata _name) {
        if (s.nameExist[_name]) {
            revert NameAlreadyTaken();
        }
        _;
    }

    modifier onlyLandOwners() {
        if (s.playerToLandId[msg.sender] == 0) {
            revert NotLandOwner();
        }
        _;
    }

    modifier onlyNonLandOwners() {
        if (s.playerToLandId[msg.sender] != 0) {
            revert MaxLimitOneLand();
        }
        _;
    }
}

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

import {LibAppStorage, AppStorage, Land} from "./LibAppStorage.sol";

library LibLand {

    error TooSoonToImproveAgain();

    function initLand(uint256 _landId, uint256 _amount) internal {
        AppStorage storage s = LibAppStorage.appStorage();
        Land storage land = s.lands[_landId];

        // init values
        land.landId = _landId;
        land.landOwner = msg.sender;
        land.createdAt = block.timestamp;
        land.escrow = _amount;
        land.landLevel = 1; 
    } 

    function dailyLandProgress(uint256 _id) internal {
        AppStorage storage s = LibAppStorage.appStorage();
        Land storage land = s.lands[_id];

        // up to 2 times a day
        if (block.timestamp < land.lastTimeLandImprove + 43200) {
            revert TooSoonToImproveAgain();
        }

        land.lastTimeLandImprove = block.timestamp; 

        // update rewards
        land.improveTotalCount += 1;
        land.landXP += 500;
    }

    function addLandXP(uint256 _amount) internal {
        AppStorage storage s = LibAppStorage.appStorage();
        uint256 playerLandId = s.playerToLandId[msg.sender];
        Land storage land = s.lands[playerLandId];

        land.landXP += _amount;
    }

    function updateLandLevel() internal {
        AppStorage storage s = LibAppStorage.appStorage();
        uint256 playerLandId = s.playerToLandId[msg.sender];
        Land storage land = s.lands[playerLandId];

        uint256 landScale;
        if (land.landLevel >= 20) {
            landScale = land.landLevel / 10;
        }

        uint256 levelThreshold = (land.landLevel * 1500) * (1 + landScale);
        
        if (land.landXP >= levelThreshold) {
            land.landLevel += 1;
            land.lastTimeLandImprove = 0;
        }
    }

}

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

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/
import { IDiamondCut } from "../interfaces/IDiamondCut.sol";

// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.
// The loupe functions are required by the EIP2535 Diamonds standard

error InitializationFunctionReverted(address _initializationContractAddress, bytes _calldata);

library LibDiamond {
    // 32 bytes keccak hash of a string to use as a diamond storage location.
    bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage");

    struct FacetAddressAndPosition {
        address facetAddress;
        uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array
    }

    struct FacetFunctionSelectors {
        bytes4[] functionSelectors;
        uint256 facetAddressPosition; // position of facetAddress in facetAddresses array
    }

    struct DiamondStorage {
        // maps function selector to the facet address and
        // the position of the selector in the facetFunctionSelectors.selectors array
        mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;
        // maps facet addresses to function selectors
        mapping(address => FacetFunctionSelectors) facetFunctionSelectors;
        // facet addresses
        address[] facetAddresses;
        // Used to query if a contract implements an interface.
        // Used to implement ERC-165.
        mapping(bytes4 => bool) supportedInterfaces;
        // owner of the contract
        address contractOwner;
    }

    function diamondStorage() internal pure returns (DiamondStorage storage ds) {
        bytes32 position = DIAMOND_STORAGE_POSITION;
        // assigns struct storage slot to the storage position
        assembly {
            ds.slot := position
        }
    }

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

    function setContractOwner(address _newOwner) internal {
        DiamondStorage storage ds = diamondStorage();
        address previousOwner = ds.contractOwner;
        ds.contractOwner = _newOwner;
        emit OwnershipTransferred(previousOwner, _newOwner);
    }

    function contractOwner() internal view returns (address contractOwner_) {
        contractOwner_ = diamondStorage().contractOwner;
    }

    function enforceIsContractOwner() internal view {
        require(msg.sender == diamondStorage().contractOwner, "LibDiamond: Must be contract owner");
    }

    event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);

    // Internal function version of diamondCut
    function diamondCut(
        IDiamondCut.FacetCut[] memory _diamondCut,
        address _init,
        bytes memory _calldata
    ) internal {
        for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {
            IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;
            if (action == IDiamondCut.FacetCutAction.Add) {
                addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else if (action == IDiamondCut.FacetCutAction.Replace) {
                replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else if (action == IDiamondCut.FacetCutAction.Remove) {
                removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else {
                revert("LibDiamondCut: Incorrect FacetCutAction");
            }
        }
        emit DiamondCut(_diamondCut, _init, _calldata);
        initializeDiamondCut(_init, _calldata);
    }

    function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();        
        require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)");
        uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            addFacet(ds, _facetAddress);            
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(oldFacetAddress == address(0), "LibDiamondCut: Can't add function that already exists");
            addFunction(ds, selector, selectorPosition, _facetAddress);
            selectorPosition++;
        }
    }

    function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)");
        uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            addFacet(ds, _facetAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(oldFacetAddress != _facetAddress, "LibDiamondCut: Can't replace function with same function");
            removeFunction(ds, oldFacetAddress, selector);
            addFunction(ds, selector, selectorPosition, _facetAddress);
            selectorPosition++;
        }
    }

    function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        // if function does not exist then do nothing and return
        require(_facetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)");
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            removeFunction(ds, oldFacetAddress, selector);
        }
    }

    function addFacet(DiamondStorage storage ds, address _facetAddress) internal {
        enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code");
        ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;
        ds.facetAddresses.push(_facetAddress);
    }    


    function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {
        ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;
        ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);
        ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;
    }

    function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal {        
        require(_facetAddress != address(0), "LibDiamondCut: Can't remove function that doesn't exist");
        // an immutable function is a function defined directly in a diamond
        require(_facetAddress != address(this), "LibDiamondCut: Can't remove immutable function");
        // replace selector with last selector, then delete last selector
        uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;
        uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;
        // if not the same then replace _selector with lastSelector
        if (selectorPosition != lastSelectorPosition) {
            bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];
            ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;
            ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);
        }
        // delete the last selector
        ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();
        delete ds.selectorToFacetAndPosition[_selector];

        // if no more selectors for facet address then delete the facet address
        if (lastSelectorPosition == 0) {
            // replace facet address with last facet address and delete last facet address
            uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;
            uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
            if (facetAddressPosition != lastFacetAddressPosition) {
                address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];
                ds.facetAddresses[facetAddressPosition] = lastFacetAddress;
                ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;
            }
            ds.facetAddresses.pop();
            delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
        }
    }

    function initializeDiamondCut(address _init, bytes memory _calldata) internal {
        if (_init == address(0)) {
            return;
        }
        enforceHasContractCode(_init, "LibDiamondCut: _init address has no code");        
        (bool success, bytes memory error) = _init.delegatecall(_calldata);
        if (!success) {
            if (error.length > 0) {
                // bubble up error
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(error)
                    revert(add(32, error), returndata_size)
                }
            } else {
                revert InitializationFunctionReverted(_init, _calldata);
            }
        }
    }

    function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {
        uint256 contractSize;
        assembly {
            contractSize := extcodesize(_contract)
        }
        require(contractSize > 0, _errorMessage);
    }
}

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

/******************************************************************************\
* Author: Nick Mudge
*
/******************************************************************************/

import { IERC20 } from "../interfaces/IERC20.sol";

library LibERC20 {
    function transferFrom(
        address _token,
        address _from,
        address _to,
        uint256 _value
    ) internal {
        uint256 size;
        assembly {
            size := extcodesize(_token)
        }
        require(size > 0, "LibERC20: ERC20 token address has no code");
        (bool success, bytes memory result) = _token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, _from, _to, _value));
        handleReturn(success, result);
    }

    function transfer(
        address _token,
        address _to,
        uint256 _value
    ) internal {
        uint256 size;
        assembly {
            size := extcodesize(_token)
        }
        require(size > 0, "LibERC20: ERC20 token address has no code");
        (bool success, bytes memory result) = _token.call(abi.encodeWithSelector(IERC20.transfer.selector, _to, _value));
        handleReturn(success, result);
    }

    function handleReturn(bool _success, bytes memory _result) internal pure {
        if (_success) {
            if (_result.length > 0) {
                require(abi.decode(_result, (bool)), "LibERC20: transfer or transferFrom returned false");
            }
        } else {
            if (_result.length > 0) {
                // bubble up any reason for revert
                revert(string(_result));
            } else {
                revert("LibERC20: transfer or transferFrom reverted");
            }
        }
    }
}

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

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

interface IDiamondCut {
    enum FacetCutAction {Add, Replace, Remove}
    // Add=0, Replace=1, Remove=2

    struct FacetCut {
        address facetAddress;
        FacetCutAction action;
        bytes4[] functionSelectors;
    }

    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @param _diamondCut Contains the facet addresses and function selectors
    /// @param _init The address of the contract or facet to execute _calldata
    /// @param _calldata A function call, including function selector and arguments
    ///                  _calldata is executed with delegatecall on _init
    function diamondCut(
        FacetCut[] calldata _diamondCut,
        address _init,
        bytes calldata _calldata
    ) external;

    event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);
}

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

interface IERC20 {
    function name() external view returns (string memory);

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

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

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

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    ) external returns (bool success);

    function transfer(address _to, uint256 _value) external returns (bool success);

    function approve(address _spender, uint256 _value) external returns (bool success);

    function allowance(address _owner, address _spender) external view returns (uint256 remaining);
}

Settings
{
  "evmVersion": "paris",
  "optimizer": {
    "enabled": true,
    "mode": "3"
  },
  "outputSelection": {
    "*": {
      "*": [
        "abi",
        "metadata"
      ],
      "": [
        "ast"
      ]
    }
  },
  "detectMissingLibraries": false,
  "forceEVMLA": false,
  "enableEraVMExtensions": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"name":"AlreadyCreatedCharacter","type":"error"},{"inputs":[],"name":"EnhanceNotAvailable","type":"error"},{"inputs":[],"name":"MaxLimitOneLand","type":"error"},{"inputs":[],"name":"NameAlreadyTaken","type":"error"},{"inputs":[],"name":"NoLandsForSale","type":"error"},{"inputs":[],"name":"NotEnoughCredits","type":"error"},{"inputs":[],"name":"NotEnoughETH","type":"error"},{"inputs":[],"name":"NotLandOwner","type":"error"},{"inputs":[],"name":"RequiresACharacter","type":"error"},{"inputs":[],"name":"TooSoonToImproveAgain","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"counts","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gains","type":"uint256"}],"name":"LandEnhanced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"LandEthPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"LandPurchased","type":"event"},{"inputs":[],"name":"buyLand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyLandWithEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_counts","type":"uint256"}],"name":"enhanceLand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getLandByAddress","outputs":[{"components":[{"internalType":"uint256","name":"landId","type":"uint256"},{"internalType":"address","name":"landOwner","type":"address"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"escrow","type":"uint256"},{"internalType":"uint256","name":"landLevel","type":"uint256"},{"internalType":"uint256","name":"landXP","type":"uint256"},{"internalType":"uint256","name":"lastTimeLandImprove","type":"uint256"},{"internalType":"uint256","name":"improveTotalCount","type":"uint256"}],"internalType":"struct Land","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getLandById","outputs":[{"components":[{"internalType":"uint256","name":"landId","type":"uint256"},{"internalType":"address","name":"landOwner","type":"address"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"escrow","type":"uint256"},{"internalType":"uint256","name":"landLevel","type":"uint256"},{"internalType":"uint256","name":"landXP","type":"uint256"},{"internalType":"uint256","name":"lastTimeLandImprove","type":"uint256"},{"internalType":"uint256","name":"improveTotalCount","type":"uint256"}],"internalType":"struct Land","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"improveLand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isLandOwnerCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"levelUpLand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setEnhanceLandCreditCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setLandPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setLandPriceInEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_supply","type":"uint256"}],"name":"setLandSupply","outputs":[],"stateMutability":"nonpayable","type":"function"}]

9c4d535b00000000000000000000000000000000000000000000000000000000000000000100018fdcc7a82942c7771629d011e7b15683b613922e3bc1abe5216ff7029e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x0003000000000002000600000000000200000060031002700000015103300197000200000031035500010000000103550000008004000039000000400040043f00000001002001900000006f0000c13d000000040030008c000002f10000413d000000000201043b000000e002200270000001530020009c000000770000213d0000015b0020009c0000008c0000213d0000015f0020009c0000011a0000613d000001600020009c000001270000613d000001610020009c000002f10000c13d0000000001000416000000000001004b000002f10000c13d0000000001000411000000000010043f0000000301000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039000600000004001d053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b0000014b0000613d0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b0000020f0000c13d0000000c01000039000000000101041a0000000f02000039000000000202041a000000000012004b000002050000813d0000000d01000039000000000101041a000000000001004b000002050000613d000500000001001d000000000100041a000001710200004100000000002004430000016301100197000400000001001d00000004001004430000000001000414000001510010009c0000015101008041000000c00110021000000172011001c70000800202000039053e05390000040f0000000100200190000003fa0000613d000000000101043b000000000001004b000003050000c13d000000400100043d00000064021000390000018203000041000000000032043500000044021000390000018303000041000000000032043500000024021000390000002903000039000000000032043500000179020000410000000000210435000000040210003900000020030000390000000000320435000001510010009c000001510100804100000040011002100000017a011001c700000540000104300000000001000416000000000001004b000002f10000c13d00000020010000390000010000100443000001200000044300000152010000410000053f0001042e000001540020009c000000dc0000213d000001580020009c0000013a0000613d000001590020009c0000014e0000613d0000015a0020009c000002f10000c13d000000240030008c000002f10000413d0000000001000416000000000001004b000002f10000c13d053e05070000040f00000004010000390000000101100367000000000101043b0000001002000039000000000012041b00000000010000190000053f0001042e0000015c0020009c0000015b0000613d0000015d0020009c0000019b0000613d0000015e0020009c000002f10000c13d0000000001000416000000000001004b000002f10000c13d0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b000001b40000613d0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000010043f0000001201000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000201043b0000000603200039000000000403041a000001860040009c000002ff0000213d000600000004001d000400000003001d000500000002001d000001660100004100000000001004430000000001000414000001510010009c0000015101008041000000c00110021000000167011001c70000800b02000039053e05390000040f0000000100200190000003fa0000613d000000000101043b00000006020000290000a8c002200039000000000021004b000002f30000813d000000400100043d0000016b02000041000001b60000013d000001550020009c000001bc0000613d000001560020009c000001c90000613d000001570020009c000002f10000c13d0000000001000416000000000001004b000002f10000c13d0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b000001b40000613d00000000010004110000016301100197000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000010043f0000001201000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b0000000402100039000000000302041a000000140030008c0000022f0000413d0000000a0430011a0000000104400039000002320000013d000000240030008c000002f10000413d0000000001000416000000000001004b000002f10000c13d053e05070000040f00000004010000390000000101100367000000000101043b0000000d02000039000000000012041b00000000010000190000053f0001042e000000240030008c000002f10000413d0000000002000416000000000002004b000002f10000c13d0000000401100370000000000101043b000001630010009c000002f10000213d000600000001001d053e04ec0000040f0000000601000029000000000010043f0000001101000039000000200010043f0000000001000019053e05230000040f000000000101041a000001640000013d0000000001000411000000000010043f0000000301000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b000001ea0000c13d000000400100043d0000018502000041000001b60000013d000000240030008c000002f10000413d0000000001000416000000000001004b000002f10000c13d053e05070000040f00000004010000390000000101100367000000000101043b0000000e02000039000000000012041b00000000010000190000053f0001042e000000240030008c000002f10000413d0000000001000416000000000001004b000002f10000c13d053e04ec0000040f00000004010000390000000101100367000000000101043b000000000010043f0000001201000039000000200010043f0000000001000019053e05230000040f000600000001001d000000400100043d000500000001001d053e04e10000040f0000000604000029000000000104041a000000050300002900000000011304360000000102400039000000000202041a000001630220019700000000002104350000000201400039000000000101041a000000400230003900000000001204350000000301400039000000000101041a000000600230003900000000001204350000000401400039000000000101041a000000800230003900000000001204350000000501400039000000000101041a000000a00230003900000000001204350000000601400039000000000101041a000000c00230003900000000001204350000000701400039000000000101041a000000e00430003900000000020300190000000000140435000000400100043d000600000001001d053e04c20000040f00000006020000290000000001210049000001510010009c00000151010080410000006001100210000001510020009c00000151020080410000004002200210000000000121019f0000053f0001042e000000240030008c000002f10000413d0000000002000416000000000002004b000002f10000c13d0000000401100370000000000101043b000600000001001d0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b000002080000c13d000000400100043d0000016f020000410000000000210435000001510010009c000001510100804100000040011002100000016a011001c70000054000010430000000240030008c000002f10000413d0000000001000416000000000001004b000002f10000c13d053e05070000040f00000004010000390000000101100367000000000101043b0000000c02000039000000000012041b00000000010000190000053f0001042e000000240030008c000002f10000413d0000000002000416000000000002004b000002f10000c13d0000000401100370000000000101043b000001630010009c000002f10000213d000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b0000000001000039000000010100c039000000400200043d0000000000120435000001510020009c0000015102008041000000400120021000000164011001c70000053f0001042e0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b0000020f0000c13d0000000f01000039000000000201041a0000000c03000039000000000303041a000000000032004b000002050000813d0000000e03000039000000000303041a000000000003004b000002480000c13d000000400100043d0000018402000041000001b60000013d0000001001000039000000000101041a000000000001004b000002120000c13d000000400100043d0000016e02000041000001b60000013d000000400100043d0000017002000041000001b60000013d000000060200002900000000032100a9000000000002004b000002190000613d00000000022300d9000000000012004b000002ff0000c13d000500000003001d0000000001000411000000000010043f0000000201000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b0000000601100039000000000101041a000000050010006c0000024e0000813d000000400100043d0000016d02000041000001b60000013d000000000003004b000002420000613d0000000104000039000005dc053000c900000000063500d9000005dc0060008c000002ff0000c13d000000000005004b000002400000613d00000000065400a900000000055600d9000000000045004b000002ff0000c13d0000000504100039000000000404041a000000000064004b000002460000413d000001870030009c000002ff0000613d0000000103300039000000000032041b0000000601100039000000000001041b00000000010000190000053f0001042e0000000004000416000000000034004b0000029e0000813d000000400100043d0000016902000041000001b60000013d0000000001000411000000000010043f0000000201000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b0000000601100039000000000201041a000000050220006c0000000603000029000002ff0000413d000000000021041b0005000a003000cd000000000003004b000002680000613d00000005013000f90000000a0010008c000002ff0000c13d00000000010004110000016301100197000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000010043f0000001201000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b0000000501100039000000000201041a000000050020002a0000000603000029000002ff0000413d00000005040000290000000002420019000000000021041b000000400100043d000000200210003900000000004204350000000000310435000001510010009c000001510100804100000040011002100000000002000414000001510020009c0000015102008041000000c002200210000000000112019f00000162011001c70000800d0200003900000002030000390000016c04000041000002ed0000013d0000000102200039000000000021041b000600000002001d000000000020043f0000001201000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b0000000602000029000000000021041b000500000001001d0000000101100039000000000201041a00000165022001970000000003000411000000000232019f000000000021041b000001660100004100000000001004430000000001000414000001510010009c0000015101008041000000c00110021000000167011001c70000800b02000039053e05390000040f0000000100200190000003fa0000613d000000000101043b00000005030000290000000202300039000000000012041b0000000301300039000000000001041b00000004013000390000000102000039000000000021041b0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f00000001002001900000000604000029000002f10000613d000000000101043b000000000041041b0000000e01000039000000000101041a000000400200043d000000200320003900000000001304350000000000420435000001510020009c000001510200804100000040012002100000000002000414000001510020009c0000015102008041000000c002200210000000000112019f00000162011001c70000800d02000039000000020300003900000168040000410000000005000411053e05340000040f0000000100200190000002460000c13d000000000100001900000540000104300000000402000029000000000012041b00000005030000290000000701300039000000000201041a000000010220003a000002ff0000613d000000000021041b0000000501300039000000000201041a000001880020009c0000031c0000a13d0000018001000041000000000010043f0000001101000039000000040010043f00000181010000410000054000010430000000400200043d00000064012000390000000503000029000000000031043500000044012000390000000003000410000000000031043500000020012000390000017303000041000000000031043500000024032000390000000004000411000000000043043500000064030000390000000000320435000001740020009c000003200000413d0000018001000041000000000010043f0000004101000039000000040010043f00000181010000410000054000010430000001f402200039000000000021041b00000000010000190000053f0001042e000000a003200039000000400030043f000000000302043300000000020004140000000404000029000000040040008c0000032a0000c13d000000010200003900000000030000310000033c0000013d000001510010009c00000151010080410000004001100210000001510030009c00000151030080410000006003300210000000000113019f000001510020009c0000015102008041000000c002200210000000000121019f0000000402000029053e05340000040f000000010220018f00020000000103550000006001100270000001510010019d0000015103100197000000000003004b000003580000c13d00000060010000390000000004010433000000000002004b000003830000c13d000000400200043d0000017903000041000000000032043500000004032000390000002005000039000000000053043500000044032000390000002405200039000000000004004b000003fb0000c13d0000002b0100003900000000001504350000017801000041000000000013043500000064012000390000017e030000410000000000310435000001510020009c000001510200804100000040012002100000017a011001c70000054000010430000001750030009c000003160000213d0000001f0130003900000189011001970000003f011000390000018905100197000000400100043d0000000005510019000000000015004b00000000060000390000000106004039000001750050009c000003160000213d0000000100600190000003160000c13d000000400050043f000000000631043600000189043001980000001f0530018f000600000006001d00000000034600190000000206000367000003750000613d000000000706034f0000000608000029000000007907043c0000000008980436000000000038004b000003710000c13d000000000005004b0000033f0000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000033f0000013d000000000004004b000004150000c13d0000000f01000039000000000101041a000000010010003a000002ff0000413d00000001011000390000000f02000039000000000012041b000600000001001d000000000010043f0000001201000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000201043b0000000601000029000000000012041b000300000002001d0000000101200039000000000201041a00000165022001970000000003000411000000000232019f000000000021041b000001660100004100000000001004430000000001000414000001510010009c0000015101008041000000c00110021000000167011001c70000800b02000039053e05390000040f0000000100200190000003fa0000613d000000000101043b00000003030000290000000202300039000000000012041b00000003013000390000000502000029000000000021041b00000004013000390000000102000039000300000002001d000000000021041b0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b0000000602000029000000000021041b000000050100002900020005001000cd00000002011000f9000000050010008c000002ff0000c13d0000017b01000041000000000101041a000100000001001d00000171010000410000000000100443000000040100002900000004001004430000000001000414000001510010009c0000015101008041000000c00110021000000172011001c70000800202000039053e05390000040f0000000100200190000003fa0000613d000000000101043b000000000001004b0000005b0000613d000000010100002900000163031001970000000201000029000000640110011a000000400200043d0000004404200039000000000014043500000020012000390000017c04000041000000000041043500000024042000390000000000340435000000440300003900000000003204350000017d0020009c000003160000213d0000008003200039000000400030043f000000000302043300000000020004140000000404000029000000040040008c0000042c0000c13d00000000030000310000043e0000013d000000000001042f00000000010104330000000000150435000000000001004b0000000607000029000004080000613d000000000400001900000000053400190000000006470019000000000606043300000000006504350000002004400039000000000014004b000004010000413d0000001f041000390000018904400197000000000113001900000000000104350000004401400039000001510010009c00000151010080410000006001100210000001510020009c00000151020080410000004002200210000000000121019f0000054000010430000001760040009c0000000601000029000002f10000213d000000200040008c000002f10000413d0000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000002f10000c13d000000000001004b000003850000c13d000000400100043d00000064021000390000017703000041000000000032043500000044021000390000017803000041000000000032043500000024021000390000003103000039000000640000013d000001510010009c00000151010080410000004001100210000001510030009c00000151030080410000006003300210000000000113019f000001510020009c0000015102008041000000c002200210000000000121019f0000000402000029053e05340000040f000300000002001d00020000000103550000006001100270000001510010019d0000015103100197000000000003004b0000045b0000c13d00000060020000390000008001000039000000000502043300000003030000290000000100300190000004850000613d000000000005004b0000049b0000c13d000000400100043d00000020021000390000000503000029000000000032043500000006020000290000000000210435000001510010009c000001510100804100000040011002100000000002000414000001510020009c0000015102008041000000c002200210000000000112019f00000162011001c70000800d0200003900000002030000390000017f04000041000002ed0000013d000001750030009c000003160000213d0000001f0130003900000189011001970000003f011000390000018901100197000000400200043d0000000001120019000000000021004b00000000050000390000000105004039000001750010009c000003160000213d0000000100500190000003160000c13d000000400010043f000000000132043600000189043001980000001f0530018f00000000034100190000000206000367000004770000613d000000000706034f0000000008010019000000007907043c0000000008980436000000000038004b000004730000c13d000000000005004b000004420000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000004420000013d000000400300043d0000017904000041000000000043043500000004043000390000002006000039000000000064043500000044043000390000002406300039000000000005004b000004a90000c13d0000002b0100003900000000001604350000017801000041000000000014043500000064013000390000017e020000410000000000210435000001510030009c000001510300804100000040013002100000017a011001c70000054000010430000001760050009c000002f10000213d000000200050008c000002f10000413d0000000002010433000000000002004b0000000001000039000000010100c039000000000012004b000002f10000c13d000000400100043d000000000002004b000004230000613d000004490000013d00000000020204330000000000260435000000000002004b000004b50000613d000000000500001900000000064500190000000007510019000000000707043300000000007604350000002005500039000000000025004b000004ae0000413d0000001f012000390000018901100197000000000224001900000000000204350000004401100039000001510010009c00000151010080410000006001100210000001510030009c00000151030080410000004002300210000000000121019f000005400001043000000000430204340000000003310436000000000404043300000163044001970000000000430435000000400320003900000000030304330000004004100039000000000034043500000060032000390000000003030433000000600410003900000000003404350000008003200039000000000303043300000080041000390000000000340435000000a0032000390000000003030433000000a0041000390000000000340435000000c0032000390000000003030433000000c0041000390000000000340435000000e0022000390000000002020433000000e00310003900000000002304350000010001100039000000000001042d0000018a0010009c000004e60000813d0000010001100039000000400010043f000000000001042d0000018001000041000000000010043f0000004101000039000000040010043f00000181010000410000054000010430000000400100043d0000018a0010009c000005010000813d0000010002100039000000400020043f000000e0021000390000000000020435000000c0021000390000000000020435000000a0021000390000000000020435000000800210003900000000000204350000006002100039000000000002043500000040021000390000000000020435000000200210003900000000000204350000000000010435000000000001042d0000018001000041000000000010043f0000004101000039000000040010043f000001810100004100000540000104300000017b01000041000000000101041a00000163011001970000000002000411000000000012004b0000050e0000c13d000000000001042d000000400100043d00000064021000390000018b03000041000000000032043500000044021000390000018c03000041000000000032043500000024021000390000002203000039000000000032043500000179020000410000000000210435000000040210003900000020030000390000000000320435000001510010009c000001510100804100000040011002100000017a011001c70000054000010430000000000001042f0000000002000414000001510020009c0000015102008041000000c002200210000001510010009c00000151010080410000004001100210000000000121019f00000162011001c70000801002000039053e05390000040f0000000100200190000005320000613d000000000101043b000000000001042d0000000001000019000005400001043000000537002104210000000102000039000000000001042d0000000002000019000000000001042d0000053c002104230000000102000039000000000001042d0000000002000019000000000001042d0000053e000004320000053f0001042e000005400001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000093a8dccd00000000000000000000000000000000000000000000000000000000ad040c4b00000000000000000000000000000000000000000000000000000000ad040c4c00000000000000000000000000000000000000000000000000000000b58c419000000000000000000000000000000000000000000000000000000000fdb94d780000000000000000000000000000000000000000000000000000000093a8dcce000000000000000000000000000000000000000000000000000000009a5022af00000000000000000000000000000000000000000000000000000000a225165700000000000000000000000000000000000000000000000000000000727c04c700000000000000000000000000000000000000000000000000000000727c04c8000000000000000000000000000000000000000000000000000000008614e91d000000000000000000000000000000000000000000000000000000008e54537100000000000000000000000000000000000000000000000000000000022565f1000000000000000000000000000000000000000000000000000000003b79829b00000000000000000000000000000000000000000000000000000000469327dd0200000000000000000000000000000000000040000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000020000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000cb99f1ee9ce9260ec540aede7da2f5a6f715d3a81b18732aecf623e1f8ca6dac583aa0260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000007ca326d100000000000000000000000000000000000000000000000000000000c4602b9f782fb4c3cf5f68f9f7dcdc84a571dcdf4ec6b9be87303d01382e37da3866fc6c00000000000000000000000000000000000000000000000000000000d06a149100000000000000000000000000000000000000000000000000000000a1d2981d000000000000000000000000000000000000000000000000000000000ea2dc35000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000023b872dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff60000000000000000000000000000000000000000000000000ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f6d2072657475726e65642066616c73650000000000000000000000000000004c696245524332303a207472616e73666572206f72207472616e73666572467208c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f6f6d207265766572746564000000000000000000000000000000000000000000556f8be3f6ef9de42afc6418362fb38769c654c735ebd1b91f52722ce948121b4e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000073206e6f20636f646500000000000000000000000000000000000000000000004c696245524332303a20455243323020746f6b656e206164647265737320686104cea43b0000000000000000000000000000000000000000000000000000000005736fb400000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff573ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff0065720000000000000000000000000000000000000000000000000000000000004c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e000000000000000000000000000000000000000000000000000000000000000077afd7ce57444d65462d14f683f90bcffa2e2940c4663490c91aae2969d6fc1e

Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.