ETH Price: $2,694.74 (+0.98%)

Token

Nexus Mutual: Staking NFT (NXM-STAKE)
 

Overview

Max Total Supply

188 NXM-STAKE

Holders

120

Total Transfers

-

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
StakingNFT

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 6 : StakingNFT.sol
// SPDX-License-Identifier: AGPL-3.0-only

pragma solidity ^0.8.18;

import "../../interfaces/IStakingNFT.sol";
import "../../interfaces/IStakingNFTDescriptor.sol";
import "../../libraries/StakingPoolLibrary.sol";

/// @dev Based on Solmate https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol
contract StakingNFT is IStakingNFT {

  struct TokenInfo {
    uint96 poolId;
    address owner;
  }

  string public name;
  string public symbol;

  mapping(uint => TokenInfo) internal _tokenInfo;
  mapping(address => uint) internal _balanceOf;
  mapping(uint => address) public getApproved;
  mapping(address => mapping(address => bool)) public isApprovedForAll;

  uint96 internal _totalSupply;
  address public operator;
  address public nftDescriptor;

  address public immutable stakingPoolFactory;

  modifier onlyOperator {
    if (msg.sender != operator) revert NotOperator();
    _;
  }

  constructor(
    string memory _name,
    string memory _symbol,
    address _stakingPoolFactory,
    address _operator,
    address _nftDescriptor
  ) {
    name = _name;
    symbol = _symbol;
    stakingPoolFactory = _stakingPoolFactory;
    operator = _operator;
    nftDescriptor = _nftDescriptor;
  }

  // operator functions

  function changeOperator(address newOperator) public onlyOperator {
    if (newOperator == address(0)) revert InvalidNewOperatorAddress();
    operator = newOperator;
  }

  function changeNFTDescriptor(address newNFTDescriptor) public onlyOperator {
    if (newNFTDescriptor == address(0)) revert InvalidNewNFTDescriptorAddress();
    nftDescriptor = newNFTDescriptor;
  }

  // minting and supply

  function mint(uint poolId, address to) public returns (uint id) {

    if (msg.sender != StakingPoolLibrary.getAddress(stakingPoolFactory, poolId)) {
      revert NotStakingPool();
    }

    if (to == address(0)) revert InvalidRecipient();

    // counter overflow is incredibly unrealistic
    unchecked {
      id = ++_totalSupply;
      _balanceOf[to]++;
    }

    _tokenInfo[id].owner = to;
    _tokenInfo[id].poolId = uint96(poolId);

    emit Transfer(address(0), to, id);
  }

  function totalSupply() public view returns (uint) {
    return _totalSupply;
  }

  // info

  function tokenInfo(uint tokenId) public view returns (uint poolId, address owner) {
    poolId = _tokenInfo[tokenId].poolId;
    owner = _tokenInfo[tokenId].owner;
    if (owner == address(0)) revert NotMinted();
  }

  function stakingPoolOf(uint tokenId) public view returns (uint poolId) {
    poolId = _tokenInfo[tokenId].poolId;
    if (poolId == 0) revert NotMinted();
  }

  // ERC165

  function supportsInterface(bytes4 interfaceId) public pure returns (bool) {
    return
      interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
      interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
      interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata
  }

  // ERC721

  function tokenURI(uint id) public view virtual returns (string memory uri) {
    if (_tokenInfo[id].owner == address(0)) revert NotMinted();
    return IStakingNFTDescriptor(nftDescriptor).tokenURI(id);
  }

  function ownerOf(uint id) public view returns (address owner) {
    owner = _tokenInfo[id].owner;
    if (owner == address(0)) revert NotMinted();
  }

  function balanceOf(address owner) public view returns (uint) {
    if (owner == address(0)) revert NotMinted();
    return _balanceOf[owner];
  }

  function approve(address spender, uint id) public {
    address owner = ownerOf(id);
    if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) revert NotAuthorized();
    getApproved[id] = spender;
    emit Approval(owner, spender, id);
  }

  function setApprovalForAll(address spender, bool approved) public {
    isApprovedForAll[msg.sender][spender] = approved;
    emit ApprovalForAll(msg.sender, spender, approved);
  }

  /// @dev `ownerOf` and `getApproved` throw if the token doesn't exist as per ERC721 spec
  /// @dev as a consequence this function will throw as well in that case
  function isApprovedOrOwner(address spender, uint id) external view returns (bool) {
    address owner = ownerOf(id);
    return spender == owner || isApprovedForAll[owner][spender] || spender == getApproved[id];
  }

  function transferFrom(address from, address to, uint id) public {

    if (from != ownerOf(id)) revert WrongFrom();
    if (to == address(0)) revert InvalidRecipient();

    if (msg.sender != from && !isApprovedForAll[from][msg.sender] && msg.sender != getApproved[id]) {
      revert NotAuthorized();
    }

    // underflow of the sender's balance is impossible because we check for
    // ownership above and the recipient's balance can't realistically overflow
    unchecked {
      _balanceOf[from]--;
      _balanceOf[to]++;
    }

    _tokenInfo[id].owner = to;
    delete getApproved[id];

    emit Transfer(from, to, id);
  }

  function safeTransferFrom(address from, address to, uint id) public {
    transferFrom(from, to, id);
    if (to.code.length != 0 && ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") != ERC721TokenReceiver.onERC721Received.selector) {
      revert UnsafeRecipient();
    }
  }

  function safeTransferFrom(
    address from,
    address to,
    uint id,
    bytes calldata data
  ) public {
    transferFrom(from, to, id);
    if (to.code.length != 0 && ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) != ERC721TokenReceiver.onERC721Received.selector) {
      revert UnsafeRecipient();
    }
  }
}

/// @notice A generic interface for a contract which properly accepts ERC721 tokens.
/// @dev Based on Solmate https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol
abstract contract ERC721TokenReceiver {
  function onERC721Received(address, address, uint, bytes calldata) external virtual returns
  (bytes4) {
    return ERC721TokenReceiver.onERC721Received.selector;
  }
}

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

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 4 of 6 : IStakingNFT.sol
// SPDX-License-Identifier: GPL-3.0-only

pragma solidity >=0.5.0;

import "@openzeppelin/contracts-v4/token/ERC721/IERC721.sol";

interface IStakingNFT is IERC721 {

  function isApprovedOrOwner(address spender, uint tokenId) external returns (bool);

  function mint(uint poolId, address to) external returns (uint tokenId);

  function changeOperator(address newOperator) external;

  function totalSupply() external returns (uint);

  function tokenInfo(uint tokenId) external view returns (uint poolId, address owner);

  function stakingPoolOf(uint tokenId) external view returns (uint poolId);

  function stakingPoolFactory() external view returns (address);

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

  error NotOperator();
  error NotMinted();
  error WrongFrom();
  error InvalidRecipient();
  error InvalidNewOperatorAddress();
  error InvalidNewNFTDescriptorAddress();
  error NotAuthorized();
  error UnsafeRecipient();
  error AlreadyMinted();
  error NotStakingPool();

}

File 5 of 6 : IStakingNFTDescriptor.sol
// SPDX-License-Identifier: GPL-3.0-only

pragma solidity >=0.5.0;

interface IStakingNFTDescriptor {

  function tokenURI(uint tokenId) external view returns (string memory);

}

File 6 of 6 : StakingPoolLibrary.sol
// SPDX-License-Identifier: GPL-3.0-only

pragma solidity ^0.8.18;

/**
 * @dev Simple library to derive the staking pool address from the pool id without external calls
 */
library StakingPoolLibrary {

  function getAddress(address factory, uint poolId) internal pure returns (address) {

    bytes32 hash = keccak256(
      abi.encodePacked(
        hex'ff',
        factory,
        poolId, // salt
        // init code hash of the MinimalBeaconProxy
        // updated using patch-staking-pool-library.js script
        hex'1eb804b66941a2e8465fa0951be9c8b855b7794ee05b0789ab22a02ee1298ebe' // init code hash
      )
    );

    // cast last 20 bytes of hash to address
    return address(uint160(uint(hash)));
  }

}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_stakingPoolFactory","type":"address"},{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_nftDescriptor","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyMinted","type":"error"},{"inputs":[],"name":"InvalidNewNFTDescriptorAddress","type":"error"},{"inputs":[],"name":"InvalidNewOperatorAddress","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"NotAuthorized","type":"error"},{"inputs":[],"name":"NotMinted","type":"error"},{"inputs":[],"name":"NotOperator","type":"error"},{"inputs":[],"name":"NotStakingPool","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"inputs":[],"name":"WrongFrom","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newNFTDescriptor","type":"address"}],"name":"changeNFTDescriptor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"changeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isApprovedOrOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftDescriptor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingPoolFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stakingPoolOf","outputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenInfo","outputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040523480156200001157600080fd5b506040516200155a3803806200155a833981016040819052620000349162000189565b6000620000428682620002ba565b506001620000518582620002ba565b506001600160a01b03928316608052600680546001600160601b03166c010000000000000000000000009385169390930292909217909155600780546001600160a01b0319169190921617905550620003869050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000cf57600080fd5b81516001600160401b0380821115620000ec57620000ec620000a7565b604051601f8301601f19908116603f01168101908282118183101715620001175762000117620000a7565b816040528381526020925086838588010111156200013457600080fd5b600091505b8382101562000158578582018301518183018401529082019062000139565b600093810190920192909252949350505050565b80516001600160a01b03811681146200018457600080fd5b919050565b600080600080600060a08688031215620001a257600080fd5b85516001600160401b0380821115620001ba57600080fd5b620001c889838a01620000bd565b96506020880151915080821115620001df57600080fd5b50620001ee88828901620000bd565b945050620001ff604087016200016c565b92506200020f606087016200016c565b91506200021f608087016200016c565b90509295509295909350565b600181811c908216806200024057607f821691505b6020821081036200026157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b557600081815260208120601f850160051c81016020861015620002905750805b601f850160051c820191505b81811015620002b1578281556001016200029c565b5050505b505050565b81516001600160401b03811115620002d657620002d6620000a7565b620002ee81620002e784546200022b565b8462000267565b602080601f8311600181146200032657600084156200030d5750858301515b600019600386901b1c1916600185901b178555620002b1565b600085815260208120601f198616915b82811015620003575788860151825594840194600190910190840162000336565b5085821015620003765787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516111b1620003a9600039600081816102d2015261093101526111b16000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80636352211e116100c3578063a22cb4651161007c578063a22cb465146102f4578063b88d4fde14610307578063c87b56dd1461031a578063cc33c8751461032d578063cf11548b1461035d578063e985e9c51461037057600080fd5b80636352211e1461027957806370a082311461028c57806394bf804d1461029f57806395d89b41146102b25780639d8168eb146102ba578063a1b8adcb146102cd57600080fd5b806318160ddd1161011557806318160ddd146101f857806323b872dd1461021357806342842e0e14610226578063430c208114610239578063442675701461024c578063570ca7351461025f57600080fd5b806301ffc9a71461015257806306394c9b1461017a57806306fdde031461018f578063081812fc146101a4578063095ea7b3146101e5575b600080fd5b610165610160366004610db4565b61039e565b60405190151581526020015b60405180910390f35b61018d610188366004610def565b6103f0565b005b610197610471565b6040516101719190610e2e565b6101cd6101b2366004610e61565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610171565b61018d6101f3366004610e7a565b6104ff565b6006546001600160601b03165b604051908152602001610171565b61018d610221366004610ea4565b6105c3565b61018d610234366004610ea4565b610739565b610165610247366004610e7a565b610813565b6007546101cd906001600160a01b031681565b6006546101cd90600160601b90046001600160a01b031681565b6101cd610287366004610e61565b610892565b61020561029a366004610def565b6108d4565b6102056102ad366004610ee0565b610919565b610197610aa7565b61018d6102c8366004610def565b610ab4565b6101cd7f000000000000000000000000000000000000000000000000000000000000000081565b61018d610302366004610f0c565b610b2f565b61018d610315366004610f48565b610b9b565b610197610328366004610e61565b610c65565b61034061033b366004610e61565b610d15565b604080519283526001600160a01b03909116602083015201610171565b61020561036b366004610e61565b610d62565b61016561037e366004610fe3565b600560209081526000928352604080842090915290825290205460ff1681565b60006301ffc9a760e01b6001600160e01b0319831614806103cf57506380ac58cd60e01b6001600160e01b03198316145b806103ea5750635b5e139f60e01b6001600160e01b03198316145b92915050565b600654600160601b90046001600160a01b0316331461042257604051631f0853c160e21b815260040160405180910390fd5b6001600160a01b038116610449576040516302b9f2c160e21b815260040160405180910390fd5b600680546001600160a01b03909216600160601b026001600160601b03909216919091179055565b6000805461047e9061100d565b80601f01602080910402602001604051908101604052809291908181526020018280546104aa9061100d565b80156104f75780601f106104cc576101008083540402835291602001916104f7565b820191906000526020600020905b8154815290600101906020018083116104da57829003601f168201915b505050505081565b600061050a82610892565b9050336001600160a01b0382161480159061054957506001600160a01b038116600090815260056020908152604080832033845290915290205460ff16155b156105675760405163ea8e4eb560e01b815260040160405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6105cc81610892565b6001600160a01b0316836001600160a01b0316146105fd5760405163c6de3f2560e01b815260040160405180910390fd5b6001600160a01b03821661062457604051634e46966960e11b815260040160405180910390fd5b336001600160a01b0384161480159061066157506001600160a01b038316600090815260056020908152604080832033845290915290205460ff16155b801561068457506000818152600460205260409020546001600160a01b03163314155b156106a25760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b0383811660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160601b0316600160601b8302179055600490915283822080546001600160a01b03191690559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6107448383836105c3565b6001600160a01b0382163b158015906107f05750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156107bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e39190611047565b6001600160e01b03191614155b1561080e57604051633da6393160e01b815260040160405180910390fd5b505050565b60008061081f83610892565b9050806001600160a01b0316846001600160a01b0316148061086657506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061088a57506000838152600460205260409020546001600160a01b038581169116145b949350505050565b600081815260026020526040902054600160601b90046001600160a01b0316806108cf57604051634d5e5fb360e01b815260040160405180910390fd5b919050565b60006001600160a01b0382166108fd57604051634d5e5fb360e01b815260040160405180910390fd5b506001600160a01b031660009081526003602052604090205490565b604080516001600160f81b03196020808301919091527f000000000000000000000000000000000000000000000000000000000000000060601b6bffffffffffffffffffffffff19166021830152603582018590527f1eb804b66941a2e8465fa0951be9c8b855b7794ee05b0789ab22a02ee1298ebe60558084019190915283518084039091018152607590920190925280519101206000906001600160a01b0316336001600160a01b0316146109e3576040516373543a0560e11b815260040160405180910390fd5b6001600160a01b038216610a0a57604051634e46966960e11b815260040160405180910390fd5b50600680546001600160601b03808216600190810182166bffffffffffffffffffffffff1993841681179094556001600160a01b0385166000818152600360209081526040808320805490950190945586825260029052828120938816600160601b830290951694909417909255518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a492915050565b6001805461047e9061100d565b600654600160601b90046001600160a01b03163314610ae657604051631f0853c160e21b815260040160405180910390fd5b6001600160a01b038116610b0d5760405163edb7f57160e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ba68585856105c3565b6001600160a01b0384163b15801590610c405750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610bf09033908a90899089908990600401611064565b6020604051808303816000875af1158015610c0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c339190611047565b6001600160e01b03191614155b15610c5e57604051633da6393160e01b815260040160405180910390fd5b5050505050565b600081815260026020526040902054606090600160601b90046001600160a01b0316610ca457604051634d5e5fb360e01b815260040160405180910390fd5b60075460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd90602401600060405180830381865afa158015610ced573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103ea91908101906110ce565b6000818152600260205260409020546001600160601b03811690600160601b90046001600160a01b031680610d5d57604051634d5e5fb360e01b815260040160405180910390fd5b915091565b6000818152600260205260408120546001600160601b0316908190036108cf57604051634d5e5fb360e01b815260040160405180910390fd5b6001600160e01b031981168114610db157600080fd5b50565b600060208284031215610dc657600080fd5b8135610dd181610d9b565b9392505050565b80356001600160a01b03811681146108cf57600080fd5b600060208284031215610e0157600080fd5b610dd182610dd8565b60005b83811015610e25578181015183820152602001610e0d565b50506000910152565b6020815260008251806020840152610e4d816040850160208701610e0a565b601f01601f19169190910160400192915050565b600060208284031215610e7357600080fd5b5035919050565b60008060408385031215610e8d57600080fd5b610e9683610dd8565b946020939093013593505050565b600080600060608486031215610eb957600080fd5b610ec284610dd8565b9250610ed060208501610dd8565b9150604084013590509250925092565b60008060408385031215610ef357600080fd5b82359150610f0360208401610dd8565b90509250929050565b60008060408385031215610f1f57600080fd5b610f2883610dd8565b915060208301358015158114610f3d57600080fd5b809150509250929050565b600080600080600060808688031215610f6057600080fd5b610f6986610dd8565b9450610f7760208701610dd8565b935060408601359250606086013567ffffffffffffffff80821115610f9b57600080fd5b818801915088601f830112610faf57600080fd5b813581811115610fbe57600080fd5b896020828501011115610fd057600080fd5b9699959850939650602001949392505050565b60008060408385031215610ff657600080fd5b610fff83610dd8565b9150610f0360208401610dd8565b600181811c9082168061102157607f821691505b60208210810361104157634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561105957600080fd5b8151610dd181610d9b565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156110e057600080fd5b815167ffffffffffffffff808211156110f857600080fd5b818401915084601f83011261110c57600080fd5b81518181111561111e5761111e6110b8565b604051601f8201601f19908116603f01168101908382118183101715611146576111466110b8565b8160405282815287602084870101111561115f57600080fd5b611170836020830160208801610e0a565b97965050505050505056fea2646970667358221220b52b1a91bad4cb9e669eea1eae76fbb87959f45cb586f6a4cf472bc9d554532864736f6c6343000812003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000cafeafb97bf8831d95c0fc659b8eb3946b101cb3000000000000000000000000cafeac0ff5da0a2777d915531bfa6b29d282ee62000000000000000000000000cafea534e156a41b3e77f29bf93c653004f1455c00000000000000000000000000000000000000000000000000000000000000194e65787573204d757475616c3a205374616b696e67204e46540000000000000000000000000000000000000000000000000000000000000000000000000000094e584d2d5354414b450000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c80636352211e116100c3578063a22cb4651161007c578063a22cb465146102f4578063b88d4fde14610307578063c87b56dd1461031a578063cc33c8751461032d578063cf11548b1461035d578063e985e9c51461037057600080fd5b80636352211e1461027957806370a082311461028c57806394bf804d1461029f57806395d89b41146102b25780639d8168eb146102ba578063a1b8adcb146102cd57600080fd5b806318160ddd1161011557806318160ddd146101f857806323b872dd1461021357806342842e0e14610226578063430c208114610239578063442675701461024c578063570ca7351461025f57600080fd5b806301ffc9a71461015257806306394c9b1461017a57806306fdde031461018f578063081812fc146101a4578063095ea7b3146101e5575b600080fd5b610165610160366004610db4565b61039e565b60405190151581526020015b60405180910390f35b61018d610188366004610def565b6103f0565b005b610197610471565b6040516101719190610e2e565b6101cd6101b2366004610e61565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610171565b61018d6101f3366004610e7a565b6104ff565b6006546001600160601b03165b604051908152602001610171565b61018d610221366004610ea4565b6105c3565b61018d610234366004610ea4565b610739565b610165610247366004610e7a565b610813565b6007546101cd906001600160a01b031681565b6006546101cd90600160601b90046001600160a01b031681565b6101cd610287366004610e61565b610892565b61020561029a366004610def565b6108d4565b6102056102ad366004610ee0565b610919565b610197610aa7565b61018d6102c8366004610def565b610ab4565b6101cd7f000000000000000000000000cafeafb97bf8831d95c0fc659b8eb3946b101cb381565b61018d610302366004610f0c565b610b2f565b61018d610315366004610f48565b610b9b565b610197610328366004610e61565b610c65565b61034061033b366004610e61565b610d15565b604080519283526001600160a01b03909116602083015201610171565b61020561036b366004610e61565b610d62565b61016561037e366004610fe3565b600560209081526000928352604080842090915290825290205460ff1681565b60006301ffc9a760e01b6001600160e01b0319831614806103cf57506380ac58cd60e01b6001600160e01b03198316145b806103ea5750635b5e139f60e01b6001600160e01b03198316145b92915050565b600654600160601b90046001600160a01b0316331461042257604051631f0853c160e21b815260040160405180910390fd5b6001600160a01b038116610449576040516302b9f2c160e21b815260040160405180910390fd5b600680546001600160a01b03909216600160601b026001600160601b03909216919091179055565b6000805461047e9061100d565b80601f01602080910402602001604051908101604052809291908181526020018280546104aa9061100d565b80156104f75780601f106104cc576101008083540402835291602001916104f7565b820191906000526020600020905b8154815290600101906020018083116104da57829003601f168201915b505050505081565b600061050a82610892565b9050336001600160a01b0382161480159061054957506001600160a01b038116600090815260056020908152604080832033845290915290205460ff16155b156105675760405163ea8e4eb560e01b815260040160405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6105cc81610892565b6001600160a01b0316836001600160a01b0316146105fd5760405163c6de3f2560e01b815260040160405180910390fd5b6001600160a01b03821661062457604051634e46966960e11b815260040160405180910390fd5b336001600160a01b0384161480159061066157506001600160a01b038316600090815260056020908152604080832033845290915290205460ff16155b801561068457506000818152600460205260409020546001600160a01b03163314155b156106a25760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b0383811660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160601b0316600160601b8302179055600490915283822080546001600160a01b03191690559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6107448383836105c3565b6001600160a01b0382163b158015906107f05750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156107bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e39190611047565b6001600160e01b03191614155b1561080e57604051633da6393160e01b815260040160405180910390fd5b505050565b60008061081f83610892565b9050806001600160a01b0316846001600160a01b0316148061086657506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061088a57506000838152600460205260409020546001600160a01b038581169116145b949350505050565b600081815260026020526040902054600160601b90046001600160a01b0316806108cf57604051634d5e5fb360e01b815260040160405180910390fd5b919050565b60006001600160a01b0382166108fd57604051634d5e5fb360e01b815260040160405180910390fd5b506001600160a01b031660009081526003602052604090205490565b604080516001600160f81b03196020808301919091527f000000000000000000000000cafeafb97bf8831d95c0fc659b8eb3946b101cb360601b6bffffffffffffffffffffffff19166021830152603582018590527f1eb804b66941a2e8465fa0951be9c8b855b7794ee05b0789ab22a02ee1298ebe60558084019190915283518084039091018152607590920190925280519101206000906001600160a01b0316336001600160a01b0316146109e3576040516373543a0560e11b815260040160405180910390fd5b6001600160a01b038216610a0a57604051634e46966960e11b815260040160405180910390fd5b50600680546001600160601b03808216600190810182166bffffffffffffffffffffffff1993841681179094556001600160a01b0385166000818152600360209081526040808320805490950190945586825260029052828120938816600160601b830290951694909417909255518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a492915050565b6001805461047e9061100d565b600654600160601b90046001600160a01b03163314610ae657604051631f0853c160e21b815260040160405180910390fd5b6001600160a01b038116610b0d5760405163edb7f57160e01b815260040160405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ba68585856105c3565b6001600160a01b0384163b15801590610c405750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610bf09033908a90899089908990600401611064565b6020604051808303816000875af1158015610c0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c339190611047565b6001600160e01b03191614155b15610c5e57604051633da6393160e01b815260040160405180910390fd5b5050505050565b600081815260026020526040902054606090600160601b90046001600160a01b0316610ca457604051634d5e5fb360e01b815260040160405180910390fd5b60075460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd90602401600060405180830381865afa158015610ced573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103ea91908101906110ce565b6000818152600260205260409020546001600160601b03811690600160601b90046001600160a01b031680610d5d57604051634d5e5fb360e01b815260040160405180910390fd5b915091565b6000818152600260205260408120546001600160601b0316908190036108cf57604051634d5e5fb360e01b815260040160405180910390fd5b6001600160e01b031981168114610db157600080fd5b50565b600060208284031215610dc657600080fd5b8135610dd181610d9b565b9392505050565b80356001600160a01b03811681146108cf57600080fd5b600060208284031215610e0157600080fd5b610dd182610dd8565b60005b83811015610e25578181015183820152602001610e0d565b50506000910152565b6020815260008251806020840152610e4d816040850160208701610e0a565b601f01601f19169190910160400192915050565b600060208284031215610e7357600080fd5b5035919050565b60008060408385031215610e8d57600080fd5b610e9683610dd8565b946020939093013593505050565b600080600060608486031215610eb957600080fd5b610ec284610dd8565b9250610ed060208501610dd8565b9150604084013590509250925092565b60008060408385031215610ef357600080fd5b82359150610f0360208401610dd8565b90509250929050565b60008060408385031215610f1f57600080fd5b610f2883610dd8565b915060208301358015158114610f3d57600080fd5b809150509250929050565b600080600080600060808688031215610f6057600080fd5b610f6986610dd8565b9450610f7760208701610dd8565b935060408601359250606086013567ffffffffffffffff80821115610f9b57600080fd5b818801915088601f830112610faf57600080fd5b813581811115610fbe57600080fd5b896020828501011115610fd057600080fd5b9699959850939650602001949392505050565b60008060408385031215610ff657600080fd5b610fff83610dd8565b9150610f0360208401610dd8565b600181811c9082168061102157607f821691505b60208210810361104157634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561105957600080fd5b8151610dd181610d9b565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156110e057600080fd5b815167ffffffffffffffff808211156110f857600080fd5b818401915084601f83011261110c57600080fd5b81518181111561111e5761111e6110b8565b604051601f8201601f19908116603f01168101908382118183101715611146576111466110b8565b8160405282815287602084870101111561115f57600080fd5b611170836020830160208801610e0a565b97965050505050505056fea2646970667358221220b52b1a91bad4cb9e669eea1eae76fbb87959f45cb586f6a4cf472bc9d554532864736f6c63430008120033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000cafeafb97bf8831d95c0fc659b8eb3946b101cb3000000000000000000000000cafeac0ff5da0a2777d915531bfa6b29d282ee62000000000000000000000000cafea534e156a41b3e77f29bf93c653004f1455c00000000000000000000000000000000000000000000000000000000000000194e65787573204d757475616c3a205374616b696e67204e46540000000000000000000000000000000000000000000000000000000000000000000000000000094e584d2d5354414b450000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Nexus Mutual: Staking NFT
Arg [1] : _symbol (string): NXM-STAKE
Arg [2] : _stakingPoolFactory (address): 0xcafeafb97BF8831D95C0FC659b8eB3946B101CB3
Arg [3] : _operator (address): 0xcafeac0fF5dA0A2777d915531bfA6B29d282Ee62
Arg [4] : _nftDescriptor (address): 0xcafea534e156a41b3e77f29Bf93C653004f1455C

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 000000000000000000000000cafeafb97bf8831d95c0fc659b8eb3946b101cb3
Arg [3] : 000000000000000000000000cafeac0ff5da0a2777d915531bfa6b29d282ee62
Arg [4] : 000000000000000000000000cafea534e156a41b3e77f29bf93c653004f1455c
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [6] : 4e65787573204d757475616c3a205374616b696e67204e465400000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [8] : 4e584d2d5354414b450000000000000000000000000000000000000000000000


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.