Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
1741021 | 8 days ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
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
Contract Source Code (Solidity Standard Json-Input format)
// 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; } } }
// 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(); } _; } }
// 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; } } }
// 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); } }
// 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"); } } } }
// 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); }
// 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); }
{ "evmVersion": "paris", "optimizer": { "enabled": true, "mode": "3" }, "outputSelection": { "*": { "*": [ "abi", "metadata" ], "": [ "ast" ] } }, "detectMissingLibraries": false, "forceEVMLA": false, "enableEraVMExtensions": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
9c4d535b00000000000000000000000000000000000000000000000000000000000000000100018fdcc7a82942c7771629d011e7b15683b613922e3bc1abe5216ff7029e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x0003000000000002000600000000000200000060031002700000015103300197000200000031035500010000000103550000008004000039000000400040043f00000001002001900000006f0000c13d000000040030008c000002f10000413d000000000201043b000000e002200270000001530020009c000000770000213d0000015b0020009c0000008c0000213d0000015f0020009c0000011a0000613d000001600020009c000001270000613d000001610020009c000002f10000c13d0000000001000416000000000001004b000002f10000c13d0000000001000411000000000010043f0000000301000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039000600000004001d053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b0000014b0000613d0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b0000020f0000c13d0000000c01000039000000000101041a0000000f02000039000000000202041a000000000012004b000002050000813d0000000d01000039000000000101041a000000000001004b000002050000613d000500000001001d000000000100041a000001710200004100000000002004430000016301100197000400000001001d00000004001004430000000001000414000001510010009c0000015101008041000000c00110021000000172011001c70000800202000039053e05390000040f0000000100200190000003fa0000613d000000000101043b000000000001004b000003050000c13d000000400100043d00000064021000390000018203000041000000000032043500000044021000390000018303000041000000000032043500000024021000390000002903000039000000000032043500000179020000410000000000210435000000040210003900000020030000390000000000320435000001510010009c000001510100804100000040011002100000017a011001c700000540000104300000000001000416000000000001004b000002f10000c13d00000020010000390000010000100443000001200000044300000152010000410000053f0001042e000001540020009c000000dc0000213d000001580020009c0000013a0000613d000001590020009c0000014e0000613d0000015a0020009c000002f10000c13d000000240030008c000002f10000413d0000000001000416000000000001004b000002f10000c13d053e05070000040f00000004010000390000000101100367000000000101043b0000001002000039000000000012041b00000000010000190000053f0001042e0000015c0020009c0000015b0000613d0000015d0020009c0000019b0000613d0000015e0020009c000002f10000c13d0000000001000416000000000001004b000002f10000c13d0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b000001b40000613d0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000010043f0000001201000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000201043b0000000603200039000000000403041a000001860040009c000002ff0000213d000600000004001d000400000003001d000500000002001d000001660100004100000000001004430000000001000414000001510010009c0000015101008041000000c00110021000000167011001c70000800b02000039053e05390000040f0000000100200190000003fa0000613d000000000101043b00000006020000290000a8c002200039000000000021004b000002f30000813d000000400100043d0000016b02000041000001b60000013d000001550020009c000001bc0000613d000001560020009c000001c90000613d000001570020009c000002f10000c13d0000000001000416000000000001004b000002f10000c13d0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b000001b40000613d00000000010004110000016301100197000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000010043f0000001201000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b0000000402100039000000000302041a000000140030008c0000022f0000413d0000000a0430011a0000000104400039000002320000013d000000240030008c000002f10000413d0000000001000416000000000001004b000002f10000c13d053e05070000040f00000004010000390000000101100367000000000101043b0000000d02000039000000000012041b00000000010000190000053f0001042e000000240030008c000002f10000413d0000000002000416000000000002004b000002f10000c13d0000000401100370000000000101043b000001630010009c000002f10000213d000600000001001d053e04ec0000040f0000000601000029000000000010043f0000001101000039000000200010043f0000000001000019053e05230000040f000000000101041a000001640000013d0000000001000411000000000010043f0000000301000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b000001ea0000c13d000000400100043d0000018502000041000001b60000013d000000240030008c000002f10000413d0000000001000416000000000001004b000002f10000c13d053e05070000040f00000004010000390000000101100367000000000101043b0000000e02000039000000000012041b00000000010000190000053f0001042e000000240030008c000002f10000413d0000000001000416000000000001004b000002f10000c13d053e04ec0000040f00000004010000390000000101100367000000000101043b000000000010043f0000001201000039000000200010043f0000000001000019053e05230000040f000600000001001d000000400100043d000500000001001d053e04e10000040f0000000604000029000000000104041a000000050300002900000000011304360000000102400039000000000202041a000001630220019700000000002104350000000201400039000000000101041a000000400230003900000000001204350000000301400039000000000101041a000000600230003900000000001204350000000401400039000000000101041a000000800230003900000000001204350000000501400039000000000101041a000000a00230003900000000001204350000000601400039000000000101041a000000c00230003900000000001204350000000701400039000000000101041a000000e00430003900000000020300190000000000140435000000400100043d000600000001001d053e04c20000040f00000006020000290000000001210049000001510010009c00000151010080410000006001100210000001510020009c00000151020080410000004002200210000000000121019f0000053f0001042e000000240030008c000002f10000413d0000000002000416000000000002004b000002f10000c13d0000000401100370000000000101043b000600000001001d0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b000002080000c13d000000400100043d0000016f020000410000000000210435000001510010009c000001510100804100000040011002100000016a011001c70000054000010430000000240030008c000002f10000413d0000000001000416000000000001004b000002f10000c13d053e05070000040f00000004010000390000000101100367000000000101043b0000000c02000039000000000012041b00000000010000190000053f0001042e000000240030008c000002f10000413d0000000002000416000000000002004b000002f10000c13d0000000401100370000000000101043b000001630010009c000002f10000213d000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b0000000001000039000000010100c039000000400200043d0000000000120435000001510020009c0000015102008041000000400120021000000164011001c70000053f0001042e0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000001004b0000020f0000c13d0000000f01000039000000000201041a0000000c03000039000000000303041a000000000032004b000002050000813d0000000e03000039000000000303041a000000000003004b000002480000c13d000000400100043d0000018402000041000001b60000013d0000001001000039000000000101041a000000000001004b000002120000c13d000000400100043d0000016e02000041000001b60000013d000000400100043d0000017002000041000001b60000013d000000060200002900000000032100a9000000000002004b000002190000613d00000000022300d9000000000012004b000002ff0000c13d000500000003001d0000000001000411000000000010043f0000000201000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b0000000601100039000000000101041a000000050010006c0000024e0000813d000000400100043d0000016d02000041000001b60000013d000000000003004b000002420000613d0000000104000039000005dc053000c900000000063500d9000005dc0060008c000002ff0000c13d000000000005004b000002400000613d00000000065400a900000000055600d9000000000045004b000002ff0000c13d0000000504100039000000000404041a000000000064004b000002460000413d000001870030009c000002ff0000613d0000000103300039000000000032041b0000000601100039000000000001041b00000000010000190000053f0001042e0000000004000416000000000034004b0000029e0000813d000000400100043d0000016902000041000001b60000013d0000000001000411000000000010043f0000000201000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b0000000601100039000000000201041a000000050220006c0000000603000029000002ff0000413d000000000021041b0005000a003000cd000000000003004b000002680000613d00000005013000f90000000a0010008c000002ff0000c13d00000000010004110000016301100197000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b000000000101041a000000000010043f0000001201000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b0000000501100039000000000201041a000000050020002a0000000603000029000002ff0000413d00000005040000290000000002420019000000000021041b000000400100043d000000200210003900000000004204350000000000310435000001510010009c000001510100804100000040011002100000000002000414000001510020009c0000015102008041000000c002200210000000000112019f00000162011001c70000800d0200003900000002030000390000016c04000041000002ed0000013d0000000102200039000000000021041b000600000002001d000000000020043f0000001201000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b0000000602000029000000000021041b000500000001001d0000000101100039000000000201041a00000165022001970000000003000411000000000232019f000000000021041b000001660100004100000000001004430000000001000414000001510010009c0000015101008041000000c00110021000000167011001c70000800b02000039053e05390000040f0000000100200190000003fa0000613d000000000101043b00000005030000290000000202300039000000000012041b0000000301300039000000000001041b00000004013000390000000102000039000000000021041b0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f00000001002001900000000604000029000002f10000613d000000000101043b000000000041041b0000000e01000039000000000101041a000000400200043d000000200320003900000000001304350000000000420435000001510020009c000001510200804100000040012002100000000002000414000001510020009c0000015102008041000000c002200210000000000112019f00000162011001c70000800d02000039000000020300003900000168040000410000000005000411053e05340000040f0000000100200190000002460000c13d000000000100001900000540000104300000000402000029000000000012041b00000005030000290000000701300039000000000201041a000000010220003a000002ff0000613d000000000021041b0000000501300039000000000201041a000001880020009c0000031c0000a13d0000018001000041000000000010043f0000001101000039000000040010043f00000181010000410000054000010430000000400200043d00000064012000390000000503000029000000000031043500000044012000390000000003000410000000000031043500000020012000390000017303000041000000000031043500000024032000390000000004000411000000000043043500000064030000390000000000320435000001740020009c000003200000413d0000018001000041000000000010043f0000004101000039000000040010043f00000181010000410000054000010430000001f402200039000000000021041b00000000010000190000053f0001042e000000a003200039000000400030043f000000000302043300000000020004140000000404000029000000040040008c0000032a0000c13d000000010200003900000000030000310000033c0000013d000001510010009c00000151010080410000004001100210000001510030009c00000151030080410000006003300210000000000113019f000001510020009c0000015102008041000000c002200210000000000121019f0000000402000029053e05340000040f000000010220018f00020000000103550000006001100270000001510010019d0000015103100197000000000003004b000003580000c13d00000060010000390000000004010433000000000002004b000003830000c13d000000400200043d0000017903000041000000000032043500000004032000390000002005000039000000000053043500000044032000390000002405200039000000000004004b000003fb0000c13d0000002b0100003900000000001504350000017801000041000000000013043500000064012000390000017e030000410000000000310435000001510020009c000001510200804100000040012002100000017a011001c70000054000010430000001750030009c000003160000213d0000001f0130003900000189011001970000003f011000390000018905100197000000400100043d0000000005510019000000000015004b00000000060000390000000106004039000001750050009c000003160000213d0000000100600190000003160000c13d000000400050043f000000000631043600000189043001980000001f0530018f000600000006001d00000000034600190000000206000367000003750000613d000000000706034f0000000608000029000000007907043c0000000008980436000000000038004b000003710000c13d000000000005004b0000033f0000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000033f0000013d000000000004004b000004150000c13d0000000f01000039000000000101041a000000010010003a000002ff0000413d00000001011000390000000f02000039000000000012041b000600000001001d000000000010043f0000001201000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000201043b0000000601000029000000000012041b000300000002001d0000000101200039000000000201041a00000165022001970000000003000411000000000232019f000000000021041b000001660100004100000000001004430000000001000414000001510010009c0000015101008041000000c00110021000000167011001c70000800b02000039053e05390000040f0000000100200190000003fa0000613d000000000101043b00000003030000290000000202300039000000000012041b00000003013000390000000502000029000000000021041b00000004013000390000000102000039000300000002001d000000000021041b0000000001000411000000000010043f0000001101000039000000200010043f0000000001000414000001510010009c0000015101008041000000c00110021000000162011001c70000801002000039053e05390000040f0000000100200190000002f10000613d000000000101043b0000000602000029000000000021041b000000050100002900020005001000cd00000002011000f9000000050010008c000002ff0000c13d0000017b01000041000000000101041a000100000001001d00000171010000410000000000100443000000040100002900000004001004430000000001000414000001510010009c0000015101008041000000c00110021000000172011001c70000800202000039053e05390000040f0000000100200190000003fa0000613d000000000101043b000000000001004b0000005b0000613d000000010100002900000163031001970000000201000029000000640110011a000000400200043d0000004404200039000000000014043500000020012000390000017c04000041000000000041043500000024042000390000000000340435000000440300003900000000003204350000017d0020009c000003160000213d0000008003200039000000400030043f000000000302043300000000020004140000000404000029000000040040008c0000042c0000c13d00000000030000310000043e0000013d000000000001042f00000000010104330000000000150435000000000001004b0000000607000029000004080000613d000000000400001900000000053400190000000006470019000000000606043300000000006504350000002004400039000000000014004b000004010000413d0000001f041000390000018904400197000000000113001900000000000104350000004401400039000001510010009c00000151010080410000006001100210000001510020009c00000151020080410000004002200210000000000121019f0000054000010430000001760040009c0000000601000029000002f10000213d000000200040008c000002f10000413d0000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000002f10000c13d000000000001004b000003850000c13d000000400100043d00000064021000390000017703000041000000000032043500000044021000390000017803000041000000000032043500000024021000390000003103000039000000640000013d000001510010009c00000151010080410000004001100210000001510030009c00000151030080410000006003300210000000000113019f000001510020009c0000015102008041000000c002200210000000000121019f0000000402000029053e05340000040f000300000002001d00020000000103550000006001100270000001510010019d0000015103100197000000000003004b0000045b0000c13d00000060020000390000008001000039000000000502043300000003030000290000000100300190000004850000613d000000000005004b0000049b0000c13d000000400100043d00000020021000390000000503000029000000000032043500000006020000290000000000210435000001510010009c000001510100804100000040011002100000000002000414000001510020009c0000015102008041000000c002200210000000000112019f00000162011001c70000800d0200003900000002030000390000017f04000041000002ed0000013d000001750030009c000003160000213d0000001f0130003900000189011001970000003f011000390000018901100197000000400200043d0000000001120019000000000021004b00000000050000390000000105004039000001750010009c000003160000213d0000000100500190000003160000c13d000000400010043f000000000132043600000189043001980000001f0530018f00000000034100190000000206000367000004770000613d000000000706034f0000000008010019000000007907043c0000000008980436000000000038004b000004730000c13d000000000005004b000004420000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000004420000013d000000400300043d0000017904000041000000000043043500000004043000390000002006000039000000000064043500000044043000390000002406300039000000000005004b000004a90000c13d0000002b0100003900000000001604350000017801000041000000000014043500000064013000390000017e020000410000000000210435000001510030009c000001510300804100000040013002100000017a011001c70000054000010430000001760050009c000002f10000213d000000200050008c000002f10000413d0000000002010433000000000002004b0000000001000039000000010100c039000000000012004b000002f10000c13d000000400100043d000000000002004b000004230000613d000004490000013d00000000020204330000000000260435000000000002004b000004b50000613d000000000500001900000000064500190000000007510019000000000707043300000000007604350000002005500039000000000025004b000004ae0000413d0000001f012000390000018901100197000000000224001900000000000204350000004401100039000001510010009c00000151010080410000006001100210000001510030009c00000151030080410000004002300210000000000121019f000005400001043000000000430204340000000003310436000000000404043300000163044001970000000000430435000000400320003900000000030304330000004004100039000000000034043500000060032000390000000003030433000000600410003900000000003404350000008003200039000000000303043300000080041000390000000000340435000000a0032000390000000003030433000000a0041000390000000000340435000000c0032000390000000003030433000000c0041000390000000000340435000000e0022000390000000002020433000000e00310003900000000002304350000010001100039000000000001042d0000018a0010009c000004e60000813d0000010001100039000000400010043f000000000001042d0000018001000041000000000010043f0000004101000039000000040010043f00000181010000410000054000010430000000400100043d0000018a0010009c000005010000813d0000010002100039000000400020043f000000e0021000390000000000020435000000c0021000390000000000020435000000a0021000390000000000020435000000800210003900000000000204350000006002100039000000000002043500000040021000390000000000020435000000200210003900000000000204350000000000010435000000000001042d0000018001000041000000000010043f0000004101000039000000040010043f000001810100004100000540000104300000017b01000041000000000101041a00000163011001970000000002000411000000000012004b0000050e0000c13d000000000001042d000000400100043d00000064021000390000018b03000041000000000032043500000044021000390000018c03000041000000000032043500000024021000390000002203000039000000000032043500000179020000410000000000210435000000040210003900000020030000390000000000320435000001510010009c000001510100804100000040011002100000017a011001c70000054000010430000000000001042f0000000002000414000001510020009c0000015102008041000000c002200210000001510010009c00000151010080410000004001100210000000000121019f00000162011001c70000801002000039053e05390000040f0000000100200190000005320000613d000000000101043b000000000001042d0000000001000019000005400001043000000537002104210000000102000039000000000001042d0000000002000019000000000001042d0000053c002104230000000102000039000000000001042d0000000002000019000000000001042d0000053e000004320000053f0001042e000005400001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000000000000000000000000000000000000093a8dccd00000000000000000000000000000000000000000000000000000000ad040c4b00000000000000000000000000000000000000000000000000000000ad040c4c00000000000000000000000000000000000000000000000000000000b58c419000000000000000000000000000000000000000000000000000000000fdb94d780000000000000000000000000000000000000000000000000000000093a8dcce000000000000000000000000000000000000000000000000000000009a5022af00000000000000000000000000000000000000000000000000000000a225165700000000000000000000000000000000000000000000000000000000727c04c700000000000000000000000000000000000000000000000000000000727c04c8000000000000000000000000000000000000000000000000000000008614e91d000000000000000000000000000000000000000000000000000000008e54537100000000000000000000000000000000000000000000000000000000022565f1000000000000000000000000000000000000000000000000000000003b79829b00000000000000000000000000000000000000000000000000000000469327dd0200000000000000000000000000000000000040000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000020000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000cb99f1ee9ce9260ec540aede7da2f5a6f715d3a81b18732aecf623e1f8ca6dac583aa0260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000007ca326d100000000000000000000000000000000000000000000000000000000c4602b9f782fb4c3cf5f68f9f7dcdc84a571dcdf4ec6b9be87303d01382e37da3866fc6c00000000000000000000000000000000000000000000000000000000d06a149100000000000000000000000000000000000000000000000000000000a1d2981d000000000000000000000000000000000000000000000000000000000ea2dc35000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000023b872dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff60000000000000000000000000000000000000000000000000ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f6d2072657475726e65642066616c73650000000000000000000000000000004c696245524332303a207472616e73666572206f72207472616e73666572467208c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f6f6d207265766572746564000000000000000000000000000000000000000000556f8be3f6ef9de42afc6418362fb38769c654c735ebd1b91f52722ce948121b4e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000073206e6f20636f646500000000000000000000000000000000000000000000004c696245524332303a20455243323020746f6b656e206164647265737320686104cea43b0000000000000000000000000000000000000000000000000000000005736fb400000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff573ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff0065720000000000000000000000000000000000000000000000000000000000004c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e000000000000000000000000000000000000000000000000000000000000000077afd7ce57444d65462d14f683f90bcffa2e2940c4663490c91aae2969d6fc1e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.