CRO Price: $0.18 (-3.92%)

Contract

0x2a1D63c71dB48061d2270b7c7C6D844115574644

Overview

CRO Balance

Cronos Chain LogoCronos Chain LogoCronos Chain Logo0 CRO

CRO Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Whitelist154250822024-08-20 13:33:17114 days ago1724160797IN
0x2a1D63c7...115574644
0 CRO0.232644775,001.5
Set Whitelist154250212024-08-20 13:27:34114 days ago1724160454IN
0x2a1D63c7...115574644
0 CRO0.134405755,050
Set Whitelist154250022024-08-20 13:25:47114 days ago1724160347IN
0x2a1D63c7...115574644
0 CRO0.13573655,100
Set Whitelist154247222024-08-20 12:59:36114 days ago1724158776IN
0x2a1D63c7...115574644
0 CRO0.166345216,250.055
Set Whitelist144625542024-06-18 9:54:04177 days ago1718704444IN
0x2a1D63c7...115574644
0 CRO0.134405755,050
Set Whitelist144623602024-06-18 9:35:58177 days ago1718703358IN
0x2a1D63c7...115574644
0 CRO0.234900755,050
Set Staking Pool134914522024-04-15 10:15:38241 days ago1713176138IN
0x2a1D63c7...115574644
0 CRO0.235517655,080.62927486
Set Payment Cont...134914462024-04-15 10:15:04241 days ago1713176104IN
0x2a1D63c7...115574644
0 CRO0.258960535,538.43358005
Set Reward Holde...134914402024-04-15 10:14:30241 days ago1713176070IN
0x2a1D63c7...115574644
0 CRO0.23506745,050
Set Reward Contr...134914342024-04-15 10:13:56241 days ago1713176036IN
0x2a1D63c7...115574644
0 CRO0.236233955,050

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EarnStakingManager

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 12 runs

Other Settings:
default evmVersion, MIT license
File 1 of 6 : EarnStakingManager.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

import "@openzeppelin/contracts/access/Ownable.sol";
import "./IEarnStakingManager.sol";
import "./EarnAssetController.sol";

contract EarnStakingManager is
    Ownable,
    IEarnStakingManager,
    EarnAssetController
{
    // ************ MODIFIERS ************ //

    modifier noAddressZero(address adr) {
        require(adr != address(0), "ESM: Wrong Address");
        _;
    }

    // ************ EVENTS ************ //

    event NewTreasury(address indexed newTreasury);

    event NewSigner(address indexed newSigner);

    event Payed(
        uint256 indexed paymentType,
        address payer,
        address paymentToken,
        uint256 amount,
        uint256 nonce
    );

    event StakePositionUpdate(
        address indexed staker,
        bytes32 indexed assetId,
        uint256 transactionNonce,
        uint256 newUserStakedAmount,
        uint256 newTotalStakedAmount,
        uint256 txIndex,
        uint256 timestamp,
        uint256 newUnstakeTimestamp,
        uint256[] erc721TokenIds,
        bool liquidated
    );

    event RewardExecuted(
        address indexed from,
        uint256 indexed nonce,
        address rewardToken,
        uint256 rewardAmount,
        uint256 erc721TokenId,
        uint256[] erc721TokenIds,
        bool isWithdrawTx
    );

    event NonceProcessed(address indexed addr, uint256 amount, uint256 nonce);

    // ************ VARIABLES ************ //
    mapping(address => bool) internal _paymentContractStatus;
    mapping(address => bool) internal _rewardsContractStatus;
    mapping(address => bool) internal _whitelist;
    address internal _rewardHolderContract;
    address internal _stakingPoolContract;
    address internal _treasury;
    address internal _signer;
    address internal _weth;

    // ************ CONSTRUCTOR ************ //

    constructor(address treasury_, address signer_, address weth_) {
        _treasury = treasury_;
        _signer = signer_;
        _weth = weth_;
    }

    // ************ VIEW FUNCTIONS ************ //

    function stakingPoolContract() external view returns (address) {
        return _stakingPoolContract;
    }

    function whitelisted(address addr) external view returns (bool) {
        return _whitelist[addr];
    }

    function rewardsHolderContract() external view returns (address) {
        return _rewardHolderContract;
    }

    function paymentContractStatus(
        address paymentContract
    ) external view returns (bool) {
        return _paymentContractStatus[paymentContract];
    }

    function rewardsContractStatus(
        address rewardsContract
    ) external view returns (bool) {
        return _rewardsContractStatus[rewardsContract];
    }

    function treasury() external view returns (address) {
        return _treasury;
    }

    function signer() external view returns (address) {
        return _signer;
    }

    function WETH() external view returns (address) {
        return _weth;
    }

    function admin() external view returns (address) {
        return owner();
    }

    // ************ ASSETS FUNCTIONS ************ //
    function getOrCreateAsset(
        bytes32 _assetId,
        address _assetAddress,
        uint256 _erc1155TokenId,
        AssetType _assetType
    ) external returns (Asset memory) {
        return
            _getOrCreateAsset(
                _assetId,
                _assetAddress,
                _erc1155TokenId,
                _assetType
            );
    }

    function getAssetId(
        address _assetAddress,
        uint256 _erc1155TokenId,
        AssetType _assetType
    ) external pure returns (bytes32) {
        return _calculateAssetId(_assetAddress, _erc1155TokenId, _assetType);
    }

    function getAssetById(
        bytes32 _assetId
    ) external view returns (Asset memory) {
        return _assets[_assetId];
    }

    function assets(
        bytes32 _assetId
    ) external view returns (Asset memory asset) {
        return _assets[_assetId];
    }

    // ************ STAKING FUNCTIONS ************ //

    function stakePositionUpdate(
        address staker,
        bytes32 assetId,
        uint256 transactionNonce,
        uint256 newUserStakedAmount,
        uint256 newTotalStakedAmount,
        uint256 transactionIndex,
        uint256 timestamp,
        uint256 unstakeTimestamp,
        uint256[] memory erc721TokenIds,
        bool liquidated
    ) external {
        require(msg.sender == _stakingPoolContract);
        emit StakePositionUpdate(
            staker,
            assetId,
            transactionNonce,
            newUserStakedAmount,
            newTotalStakedAmount,
            transactionIndex,
            timestamp,
            unstakeTimestamp,
            erc721TokenIds,
            liquidated
        );
    }

    // ************ PAYMENT FUNCTIONS ************ //

    function pay(
        address payer,
        uint256 paymentType,
        address paymentToken,
        uint256 amount,
        uint256 nonce
    ) external {
        require(
            _paymentContractStatus[msg.sender],
            "ESM: Only Payment Contracts"
        );
        emit Payed(paymentType, payer, paymentToken, amount, nonce);
    }

    // ************ REWARD FUNCTIONS ************ //
    function execReward(
        address from,
        uint256 nonce,
        address rewardToken,
        uint256 rewardAmount,
        uint256 erc1155TokenId,
        uint256[] memory erc721TokenIds,
        bool isWithdrawTx
    ) external {
        require(
            msg.sender == _rewardHolderContract ||
                _rewardsContractStatus[msg.sender],
            "ESM: Only Reward Contracts"
        );
        emit RewardExecuted(
            from,
            nonce,
            rewardToken,
            rewardAmount,
            erc1155TokenId,
            erc721TokenIds,
            isWithdrawTx
        );
    }

    // ************ ADMIN FUNCTIONS ************ //
    function setStakingPool(
        address stakingPool
    ) external noAddressZero(stakingPool) onlyOwner {
        require(
            _stakingPoolContract == address(0),
            "ESM: Staking Pool Already Set"
        );
        _stakingPoolContract = stakingPool;
    }

    function setTreasury(
        address newTreasury
    ) external noAddressZero(newTreasury) onlyOwner {
        _treasury = newTreasury;
        emit NewTreasury(newTreasury);
    }

    function setSigner(
        address newSigner
    ) external noAddressZero(newSigner) onlyOwner {
        _signer = newSigner;
        emit NewSigner(newSigner);
    }

    function setPaymentContractStatus(
        address paymentContract,
        bool status
    ) external onlyOwner {
        _paymentContractStatus[paymentContract] = status;
    }

    function setRewardHolderContract(
        address rewardHolderContractAddress
    ) external noAddressZero(rewardHolderContractAddress) onlyOwner {
        _rewardHolderContract = rewardHolderContractAddress;
    }

    function setRewardContractStatus(
        address rewardContract,
        bool status
    ) external onlyOwner {
        _rewardsContractStatus[rewardContract] = status;
    }

    function setWhitelist(address addr, bool status) external onlyOwner {
        _whitelist[addr] = status;
    }

    // ************ OTHER FUNCTIONS ************ //
    function emitNonce(address addr, uint256 amount, uint256 nonce) external {
        require(_whitelist[msg.sender], "ESM: Not Whitelisted");
        emit NonceProcessed(addr, amount, nonce);
    }
}

File 2 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

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

pragma solidity ^0.8.0;

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

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

File 4 of 6 : EarnAssetController.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

import {Asset, AssetType} from "./EarnAssetTypes.sol";

contract EarnAssetController {
    //asset id => Asset
    mapping(bytes32 => Asset) internal _assets;

    function _getOrCreateAsset(
        bytes32 _assetId,
        address _assetAddress,
        uint256 _erc1155TokenId,
        AssetType _assetType
    ) internal returns (Asset memory) {
        Asset memory sa = _assets[_assetId];
        if (sa.assetType == AssetType.UNDEFINED) {
            bytes32 newAssetId = _calculateAssetId(
                _assetAddress,
                _erc1155TokenId,
                _assetType
            );
            if (_assetId != 0) {
                require(newAssetId == _assetId, "EAC: assetId mismatch");
            }
            sa = Asset({
                assetAddress: _assetAddress,
                erc1155TokenId: _erc1155TokenId,
                assetType: _assetType
            });
            _assets[newAssetId] = sa;
        }
        return sa;
    }

    function _calculateAssetId(
        address _assetAddress,
        uint256 _erc1155TokenId,
        AssetType _assetType
    ) internal pure returns (bytes32) {
        require(
            _assetType != AssetType.UNDEFINED,
            "EAC: assetType cannot be UNDEFINED"
        );
        return
            keccak256(
                abi.encodePacked(_assetAddress, _erc1155TokenId, _assetType)
            );
    }
}

File 5 of 6 : EarnAssetTypes.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

enum AssetType {
    UNDEFINED,
    ERC20,
    ERC721,
    ERC1155,
    NATIVE
}

struct Asset {
    address assetAddress;
    uint256 erc1155TokenId;
    AssetType assetType;
}

File 6 of 6 : IEarnStakingManager.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

import {Asset, AssetType} from "./EarnAssetTypes.sol";

interface IEarnStakingManager {
    function treasury() external view returns (address);

    function signer() external view returns (address);

    function rewardsHolderContract() external view returns (address);

    function stakePositionUpdate(
        address staker,
        bytes32 assetId,
        uint256 transactionNonce,
        uint256 newUserStakedAmount,
        uint256 newTotalStakedAmount,
        uint256 transactionIndex,
        uint256 timestamp,
        uint256 unstakeTimestamp,
        uint256[] memory erc721TokenIds,
        bool liquidated
    ) external;

    function pay(
        address payer,
        uint256 paymentType,
        address paymentToken,
        uint256 amount,
        uint256 nonce
    ) external;

    function execReward(
        address from,
        uint256 nonce,
        address rewardToken,
        uint256 rewardAmount,
        uint256 erc1155TokenId,
        uint256[] memory erc721TokenIds,
        bool isWithdrawTx
    ) external;

    function WETH() external view returns (address);

    function getOrCreateAsset(
        bytes32 _assetId,
        address _assetAddress,
        uint256 _erc1155TokenId,
        AssetType _assetType
    ) external returns (Asset memory);

    function getAssetById(bytes32 _assetId)
        external
        view
    returns (Asset memory);

    function getAssetId(
        address _assetAddress,
        uint256 _erc1155TokenId,
        AssetType _assetType
    ) external pure returns (bytes32);

    function assets(bytes32 _assetId)
        external
        view
    returns (Asset memory asset);

    function admin() external view returns (address);

    function emitNonce(address addr, uint256 amount, uint256 nonce) external;
}

Settings
{
  "evmVersion": "paris",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 12
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"treasury_","type":"address"},{"internalType":"address","name":"signer_","type":"address"},{"internalType":"address","name":"weth_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newSigner","type":"address"}],"name":"NewSigner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newTreasury","type":"address"}],"name":"NewTreasury","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"NonceProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"paymentType","type":"uint256"},{"indexed":false,"internalType":"address","name":"payer","type":"address"},{"indexed":false,"internalType":"address","name":"paymentToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"Payed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"address","name":"rewardToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"erc721TokenId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"erc721TokenIds","type":"uint256[]"},{"indexed":false,"internalType":"bool","name":"isWithdrawTx","type":"bool"}],"name":"RewardExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"bytes32","name":"assetId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"transactionNonce","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newUserStakedAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalStakedAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"txIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newUnstakeTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"erc721TokenIds","type":"uint256[]"},{"indexed":false,"internalType":"bool","name":"liquidated","type":"bool"}],"name":"StakePositionUpdate","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_assetId","type":"bytes32"}],"name":"assets","outputs":[{"components":[{"internalType":"address","name":"assetAddress","type":"address"},{"internalType":"uint256","name":"erc1155TokenId","type":"uint256"},{"internalType":"enum AssetType","name":"assetType","type":"uint8"}],"internalType":"struct Asset","name":"asset","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"emitNonce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"uint256","name":"erc1155TokenId","type":"uint256"},{"internalType":"uint256[]","name":"erc721TokenIds","type":"uint256[]"},{"internalType":"bool","name":"isWithdrawTx","type":"bool"}],"name":"execReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_assetId","type":"bytes32"}],"name":"getAssetById","outputs":[{"components":[{"internalType":"address","name":"assetAddress","type":"address"},{"internalType":"uint256","name":"erc1155TokenId","type":"uint256"},{"internalType":"enum AssetType","name":"assetType","type":"uint8"}],"internalType":"struct Asset","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_assetAddress","type":"address"},{"internalType":"uint256","name":"_erc1155TokenId","type":"uint256"},{"internalType":"enum AssetType","name":"_assetType","type":"uint8"}],"name":"getAssetId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_assetId","type":"bytes32"},{"internalType":"address","name":"_assetAddress","type":"address"},{"internalType":"uint256","name":"_erc1155TokenId","type":"uint256"},{"internalType":"enum AssetType","name":"_assetType","type":"uint8"}],"name":"getOrCreateAsset","outputs":[{"components":[{"internalType":"address","name":"assetAddress","type":"address"},{"internalType":"uint256","name":"erc1155TokenId","type":"uint256"},{"internalType":"enum AssetType","name":"assetType","type":"uint8"}],"internalType":"struct Asset","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payer","type":"address"},{"internalType":"uint256","name":"paymentType","type":"uint256"},{"internalType":"address","name":"paymentToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"pay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"paymentContract","type":"address"}],"name":"paymentContractStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rewardsContract","type":"address"}],"name":"rewardsContractStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsHolderContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"paymentContract","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setPaymentContractStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rewardContract","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setRewardContractStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rewardHolderContractAddress","type":"address"}],"name":"setRewardHolderContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSigner","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"stakingPool","type":"address"}],"name":"setStakingPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"bytes32","name":"assetId","type":"bytes32"},{"internalType":"uint256","name":"transactionNonce","type":"uint256"},{"internalType":"uint256","name":"newUserStakedAmount","type":"uint256"},{"internalType":"uint256","name":"newTotalStakedAmount","type":"uint256"},{"internalType":"uint256","name":"transactionIndex","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"unstakeTimestamp","type":"uint256"},{"internalType":"uint256[]","name":"erc721TokenIds","type":"uint256[]"},{"internalType":"bool","name":"liquidated","type":"bool"}],"name":"stakePositionUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingPoolContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620013bd380380620013bd8339810160408190526200003491620000ef565b6200003f3362000082565b600780546001600160a01b039485166001600160a01b03199182161790915560088054938516938216939093179092556009805491909316911617905562000139565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000ea57600080fd5b919050565b6000806000606084860312156200010557600080fd5b6200011084620000d2565b92506200012060208501620000d2565b91506200013060408501620000d2565b90509250925092565b61127480620001496000396000f3fe608060405234801561001057600080fd5b50600436106101495760003560e01c8063018d9e991461014e578063177d1c1a1461018f578063238ac933146101a45780632a9535ff146101c95780633028f63a146101da57806341832567146101ed57806353d6fd591461020d5780635770f1ba1461022057806361d027b31461024c5780636c19e7831461025d578063715018a6146102705780638203c664146102785780638a198d1e1461028b5780638da5cb5b1461029e5780639fda5b66146101ed578063ad5c4648146102a6578063b0f5637f146102b7578063c63436ec146102ca578063cf6cfa25146102dd578063d154a2ea146102f0578063d936547e14610303578063e31aff2a1461032f578063e35c93aa14610342578063e6a1ee0214610363578063f0f4426014610374578063f2fde38b14610387578063f851a4401461039a575b600080fd5b61017a61015c366004610d29565b6001600160a01b031660009081526002602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6101a261019d366004610e0b565b6103a2565b005b6008546001600160a01b03165b6040516001600160a01b039091168152602001610186565b6006546001600160a01b03166101b1565b6101a26101e8366004610d29565b610415565b6102006101fb366004610eae565b6104c9565b6040516101869190610edd565b6101a261021b366004610f29565b61053e565b61017a61022e366004610d29565b6001600160a01b031660009081526003602052604090205460ff1690565b6007546001600160a01b03166101b1565b6101a261026b366004610d29565b610571565b6101a26105eb565b6101a2610286366004610f5c565b6105ff565b6101a2610299366004610fe7565b6106c3565b6101b161077b565b6009546001600160a01b03166101b1565b6101a26102c5366004611035565b61078a565b6101a26102d8366004610f29565b610829565b6101a26102eb366004610f29565b61085c565b6101a26102fe366004610d29565b61088f565b61017a610311366004610d29565b6001600160a01b031660009081526004602052604090205460ff1690565b61020061033d366004611077565b6108e1565b6103556103503660046110bd565b6108fe565b604051908152602001610186565b6005546001600160a01b03166101b1565b6101a2610382366004610d29565b610913565b6101a2610395366004610d29565b61098d565b6101b1610a06565b6006546001600160a01b031633146103b957600080fd5b888a6001600160a01b03167fe2c69a4f1d8540e0ba6a2d2e4fa3d6b0bed5a73b4746866fd709684d3ada47958a8a8a8a8a8a8a8a604051610401989796959493929190611134565b60405180910390a350505050505050505050565b806001600160a01b0381166104455760405162461bcd60e51b815260040161043c90611184565b60405180910390fd5b61044d610a15565b6006546001600160a01b0316156104a65760405162461bcd60e51b815260206004820152601d60248201527f45534d3a205374616b696e6720506f6f6c20416c726561647920536574000000604482015260640161043c565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6104d1610cef565b600082815260016020818152604092839020835160608101855281546001600160a01b0316815292810154918301919091526002810154919290919083019060ff16600481111561052457610524610ec7565b600481111561053557610535610ec7565b90525092915050565b610546610a15565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b806001600160a01b0381166105985760405162461bcd60e51b815260040161043c90611184565b6105a0610a15565b600880546001600160a01b0319166001600160a01b0384169081179091556040517fffafe5c39be83f4bcf20d7e1a150f6e21c1858ea0948315ba84b6b1c386d45bb90600090a25050565b6105f3610a15565b6105fd6000610a74565b565b6005546001600160a01b031633148061062757503360009081526003602052604090205460ff165b6106705760405162461bcd60e51b815260206004820152601a60248201527945534d3a204f6e6c792052657761726420436f6e74726163747360301b604482015260640161043c565b85876001600160a01b03167f2330e278fd8df2cd15ab4edacb5a8a1b0de2e49417e1f1c769b2bff15eb13f9b87878787876040516106b29594939291906111b0565b60405180910390a350505050505050565b3360009081526002602052604090205460ff166107205760405162461bcd60e51b815260206004820152601b60248201527a45534d3a204f6e6c79205061796d656e7420436f6e74726163747360281b604482015260640161043c565b604080516001600160a01b038088168252851660208201529081018390526060810182905284907fcb9f0be262ad3b430b428c9abdee45cf658196c34d6e8e16af16fbeae7923f389060800160405180910390a25050505050565b6000546001600160a01b031690565b3360009081526004602052604090205460ff166107e05760405162461bcd60e51b81526020600482015260146024820152731154d34e88139bdd0815da1a5d195b1a5cdd195960621b604482015260640161043c565b60408051838152602081018390526001600160a01b038516917ffbe83ff766b1cae90598a749651b82a37f3f0a3540a7a10dd29bbd8475b5f3bb910160405180910390a2505050565b610831610a15565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b610864610a15565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b806001600160a01b0381166108b65760405162461bcd60e51b815260040161043c90611184565b6108be610a15565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b6108e9610cef565b6108f585858585610ac4565b95945050505050565b600061090b848484610c4e565b949350505050565b806001600160a01b03811661093a5760405162461bcd60e51b815260040161043c90611184565b610942610a15565b600780546001600160a01b0319166001600160a01b0384169081179091556040517fafa147634b29e2c7bd53ce194256b9f41cfb9ba3036f2b822fdd1d965beea08690600090a25050565b610995610a15565b6001600160a01b0381166109fa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161043c565b610a0381610a74565b50565b6000610a1061077b565b905090565b33610a1e61077b565b6001600160a01b0316146105fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610acc610cef565b6000858152600160208181526040808420815160608101835281546001600160a01b03168152938101549284019290925260028201549083019060ff166004811115610b1a57610b1a610ec7565b6004811115610b2b57610b2b610ec7565b9052509050600081604001516004811115610b4857610b48610ec7565b036108f5576000610b5a868686610c4e565b90508615610ba957868114610ba95760405162461bcd60e51b815260206004820152601560248201527408a82867440c2e6e6cae892c840dad2e6dac2e8c6d605b1b604482015260640161043c565b6040518060600160405280876001600160a01b03168152602001868152602001856004811115610bdb57610bdb610ec7565b9052600082815260016020818152604092839020845181546001600160a01b0319166001600160a01b0390911617815590840151818301559183015160028301805494965086949192909160ff191690836004811115610c3d57610c3d610ec7565b021790555050505095945050505050565b600080826004811115610c6357610c63610ec7565b03610cbb5760405162461bcd60e51b815260206004820152602260248201527f4541433a206173736574547970652063616e6e6f7420626520554e444546494e604482015261115160f21b606482015260840161043c565b838383604051602001610cd0939291906111f1565b6040516020818303038152906040528051906020012090509392505050565b60408051606081018252600080825260208201819052909182015290565b80356001600160a01b0381168114610d2457600080fd5b919050565b600060208284031215610d3b57600080fd5b610d4482610d0d565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610d7257600080fd5b813560206001600160401b0380831115610d8e57610d8e610d4b565b8260051b604051601f19603f83011681018181108482111715610db357610db3610d4b565b604052938452858101830193838101925087851115610dd157600080fd5b83870191505b84821015610df057813583529183019190830190610dd7565b979650505050505050565b80358015158114610d2457600080fd5b6000806000806000806000806000806101408b8d031215610e2b57600080fd5b610e348b610d0d565b995060208b0135985060408b0135975060608b0135965060808b0135955060a08b0135945060c08b0135935060e08b013592506101008b01356001600160401b03811115610e8157600080fd5b610e8d8d828e01610d61565b925050610e9d6101208c01610dfb565b90509295989b9194979a5092959850565b600060208284031215610ec057600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b81516001600160a01b03168152602080830151908201526040820151606082019060058110610f1c57634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b60008060408385031215610f3c57600080fd5b610f4583610d0d565b9150610f5360208401610dfb565b90509250929050565b600080600080600080600060e0888a031215610f7757600080fd5b610f8088610d0d565b965060208801359550610f9560408901610d0d565b9450606088013593506080880135925060a08801356001600160401b03811115610fbe57600080fd5b610fca8a828b01610d61565b925050610fd960c08901610dfb565b905092959891949750929550565b600080600080600060a08688031215610fff57600080fd5b61100886610d0d565b94506020860135935061101d60408701610d0d565b94979396509394606081013594506080013592915050565b60008060006060848603121561104a57600080fd5b61105384610d0d565b95602085013595506040909401359392505050565b803560058110610d2457600080fd5b6000806000806080858703121561108d57600080fd5b8435935061109d60208601610d0d565b9250604085013591506110b260608601611068565b905092959194509250565b6000806000606084860312156110d257600080fd5b6110db84610d0d565b9250602084013591506110f060408501611068565b90509250925092565b600081518084526020808501945080840160005b838110156111295781518752958201959082019060010161110d565b509495945050505050565b60006101008a83528960208401528860408401528760608401528660808401528560a08401528060c084015261116c818401866110f9565b91505082151560e08301529998505050505050505050565b60208082526012908201527145534d3a2057726f6e67204164647265737360701b604082015260600190565b60018060a01b038616815284602082015283604082015260a0606082015260006111dd60a08301856110f9565b905082151560808301529695505050505050565b606084901b6001600160601b03191681526014810183905260006005831061122957634e487b7160e01b600052602160045260246000fd5b5060f89190911b60348201526035019291505056fea26469706673582212205a8a799153f01aa61c91582707c3264544de9b98a2e09da9a161cbb013afaef464736f6c6343000814003300000000000000000000000077338041539558854ae4d163783aa18f19328bfa00000000000000000000000087a7d331520b96886384d09e1b33826afec70c1c0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101495760003560e01c8063018d9e991461014e578063177d1c1a1461018f578063238ac933146101a45780632a9535ff146101c95780633028f63a146101da57806341832567146101ed57806353d6fd591461020d5780635770f1ba1461022057806361d027b31461024c5780636c19e7831461025d578063715018a6146102705780638203c664146102785780638a198d1e1461028b5780638da5cb5b1461029e5780639fda5b66146101ed578063ad5c4648146102a6578063b0f5637f146102b7578063c63436ec146102ca578063cf6cfa25146102dd578063d154a2ea146102f0578063d936547e14610303578063e31aff2a1461032f578063e35c93aa14610342578063e6a1ee0214610363578063f0f4426014610374578063f2fde38b14610387578063f851a4401461039a575b600080fd5b61017a61015c366004610d29565b6001600160a01b031660009081526002602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6101a261019d366004610e0b565b6103a2565b005b6008546001600160a01b03165b6040516001600160a01b039091168152602001610186565b6006546001600160a01b03166101b1565b6101a26101e8366004610d29565b610415565b6102006101fb366004610eae565b6104c9565b6040516101869190610edd565b6101a261021b366004610f29565b61053e565b61017a61022e366004610d29565b6001600160a01b031660009081526003602052604090205460ff1690565b6007546001600160a01b03166101b1565b6101a261026b366004610d29565b610571565b6101a26105eb565b6101a2610286366004610f5c565b6105ff565b6101a2610299366004610fe7565b6106c3565b6101b161077b565b6009546001600160a01b03166101b1565b6101a26102c5366004611035565b61078a565b6101a26102d8366004610f29565b610829565b6101a26102eb366004610f29565b61085c565b6101a26102fe366004610d29565b61088f565b61017a610311366004610d29565b6001600160a01b031660009081526004602052604090205460ff1690565b61020061033d366004611077565b6108e1565b6103556103503660046110bd565b6108fe565b604051908152602001610186565b6005546001600160a01b03166101b1565b6101a2610382366004610d29565b610913565b6101a2610395366004610d29565b61098d565b6101b1610a06565b6006546001600160a01b031633146103b957600080fd5b888a6001600160a01b03167fe2c69a4f1d8540e0ba6a2d2e4fa3d6b0bed5a73b4746866fd709684d3ada47958a8a8a8a8a8a8a8a604051610401989796959493929190611134565b60405180910390a350505050505050505050565b806001600160a01b0381166104455760405162461bcd60e51b815260040161043c90611184565b60405180910390fd5b61044d610a15565b6006546001600160a01b0316156104a65760405162461bcd60e51b815260206004820152601d60248201527f45534d3a205374616b696e6720506f6f6c20416c726561647920536574000000604482015260640161043c565b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b6104d1610cef565b600082815260016020818152604092839020835160608101855281546001600160a01b0316815292810154918301919091526002810154919290919083019060ff16600481111561052457610524610ec7565b600481111561053557610535610ec7565b90525092915050565b610546610a15565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b806001600160a01b0381166105985760405162461bcd60e51b815260040161043c90611184565b6105a0610a15565b600880546001600160a01b0319166001600160a01b0384169081179091556040517fffafe5c39be83f4bcf20d7e1a150f6e21c1858ea0948315ba84b6b1c386d45bb90600090a25050565b6105f3610a15565b6105fd6000610a74565b565b6005546001600160a01b031633148061062757503360009081526003602052604090205460ff165b6106705760405162461bcd60e51b815260206004820152601a60248201527945534d3a204f6e6c792052657761726420436f6e74726163747360301b604482015260640161043c565b85876001600160a01b03167f2330e278fd8df2cd15ab4edacb5a8a1b0de2e49417e1f1c769b2bff15eb13f9b87878787876040516106b29594939291906111b0565b60405180910390a350505050505050565b3360009081526002602052604090205460ff166107205760405162461bcd60e51b815260206004820152601b60248201527a45534d3a204f6e6c79205061796d656e7420436f6e74726163747360281b604482015260640161043c565b604080516001600160a01b038088168252851660208201529081018390526060810182905284907fcb9f0be262ad3b430b428c9abdee45cf658196c34d6e8e16af16fbeae7923f389060800160405180910390a25050505050565b6000546001600160a01b031690565b3360009081526004602052604090205460ff166107e05760405162461bcd60e51b81526020600482015260146024820152731154d34e88139bdd0815da1a5d195b1a5cdd195960621b604482015260640161043c565b60408051838152602081018390526001600160a01b038516917ffbe83ff766b1cae90598a749651b82a37f3f0a3540a7a10dd29bbd8475b5f3bb910160405180910390a2505050565b610831610a15565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b610864610a15565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b806001600160a01b0381166108b65760405162461bcd60e51b815260040161043c90611184565b6108be610a15565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b6108e9610cef565b6108f585858585610ac4565b95945050505050565b600061090b848484610c4e565b949350505050565b806001600160a01b03811661093a5760405162461bcd60e51b815260040161043c90611184565b610942610a15565b600780546001600160a01b0319166001600160a01b0384169081179091556040517fafa147634b29e2c7bd53ce194256b9f41cfb9ba3036f2b822fdd1d965beea08690600090a25050565b610995610a15565b6001600160a01b0381166109fa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161043c565b610a0381610a74565b50565b6000610a1061077b565b905090565b33610a1e61077b565b6001600160a01b0316146105fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610acc610cef565b6000858152600160208181526040808420815160608101835281546001600160a01b03168152938101549284019290925260028201549083019060ff166004811115610b1a57610b1a610ec7565b6004811115610b2b57610b2b610ec7565b9052509050600081604001516004811115610b4857610b48610ec7565b036108f5576000610b5a868686610c4e565b90508615610ba957868114610ba95760405162461bcd60e51b815260206004820152601560248201527408a82867440c2e6e6cae892c840dad2e6dac2e8c6d605b1b604482015260640161043c565b6040518060600160405280876001600160a01b03168152602001868152602001856004811115610bdb57610bdb610ec7565b9052600082815260016020818152604092839020845181546001600160a01b0319166001600160a01b0390911617815590840151818301559183015160028301805494965086949192909160ff191690836004811115610c3d57610c3d610ec7565b021790555050505095945050505050565b600080826004811115610c6357610c63610ec7565b03610cbb5760405162461bcd60e51b815260206004820152602260248201527f4541433a206173736574547970652063616e6e6f7420626520554e444546494e604482015261115160f21b606482015260840161043c565b838383604051602001610cd0939291906111f1565b6040516020818303038152906040528051906020012090509392505050565b60408051606081018252600080825260208201819052909182015290565b80356001600160a01b0381168114610d2457600080fd5b919050565b600060208284031215610d3b57600080fd5b610d4482610d0d565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610d7257600080fd5b813560206001600160401b0380831115610d8e57610d8e610d4b565b8260051b604051601f19603f83011681018181108482111715610db357610db3610d4b565b604052938452858101830193838101925087851115610dd157600080fd5b83870191505b84821015610df057813583529183019190830190610dd7565b979650505050505050565b80358015158114610d2457600080fd5b6000806000806000806000806000806101408b8d031215610e2b57600080fd5b610e348b610d0d565b995060208b0135985060408b0135975060608b0135965060808b0135955060a08b0135945060c08b0135935060e08b013592506101008b01356001600160401b03811115610e8157600080fd5b610e8d8d828e01610d61565b925050610e9d6101208c01610dfb565b90509295989b9194979a5092959850565b600060208284031215610ec057600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b81516001600160a01b03168152602080830151908201526040820151606082019060058110610f1c57634e487b7160e01b600052602160045260246000fd5b8060408401525092915050565b60008060408385031215610f3c57600080fd5b610f4583610d0d565b9150610f5360208401610dfb565b90509250929050565b600080600080600080600060e0888a031215610f7757600080fd5b610f8088610d0d565b965060208801359550610f9560408901610d0d565b9450606088013593506080880135925060a08801356001600160401b03811115610fbe57600080fd5b610fca8a828b01610d61565b925050610fd960c08901610dfb565b905092959891949750929550565b600080600080600060a08688031215610fff57600080fd5b61100886610d0d565b94506020860135935061101d60408701610d0d565b94979396509394606081013594506080013592915050565b60008060006060848603121561104a57600080fd5b61105384610d0d565b95602085013595506040909401359392505050565b803560058110610d2457600080fd5b6000806000806080858703121561108d57600080fd5b8435935061109d60208601610d0d565b9250604085013591506110b260608601611068565b905092959194509250565b6000806000606084860312156110d257600080fd5b6110db84610d0d565b9250602084013591506110f060408501611068565b90509250925092565b600081518084526020808501945080840160005b838110156111295781518752958201959082019060010161110d565b509495945050505050565b60006101008a83528960208401528860408401528760608401528660808401528560a08401528060c084015261116c818401866110f9565b91505082151560e08301529998505050505050505050565b60208082526012908201527145534d3a2057726f6e67204164647265737360701b604082015260600190565b60018060a01b038616815284602082015283604082015260a0606082015260006111dd60a08301856110f9565b905082151560808301529695505050505050565b606084901b6001600160601b03191681526014810183905260006005831061122957634e487b7160e01b600052602160045260246000fd5b5060f89190911b60348201526035019291505056fea26469706673582212205a8a799153f01aa61c91582707c3264544de9b98a2e09da9a161cbb013afaef464736f6c63430008140033

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

00000000000000000000000077338041539558854ae4d163783aa18f19328bfa00000000000000000000000087a7d331520b96886384d09e1b33826afec70c1c0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23

-----Decoded View---------------
Arg [0] : treasury_ (address): 0x77338041539558854Ae4d163783Aa18F19328BfA
Arg [1] : signer_ (address): 0x87a7D331520B96886384d09e1B33826aFec70C1c
Arg [2] : weth_ (address): 0x5C7F8A570d578ED84E63fdFA7b1eE72dEae1AE23

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000077338041539558854ae4d163783aa18f19328bfa
Arg [1] : 00000000000000000000000087a7d331520b96886384d09e1b33826afec70c1c
Arg [2] : 0000000000000000000000005c7f8a570d578ed84e63fdfa7b1ee72deae1ae23


Block Transaction Gas Used Reward
view all blocks validated

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
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.