Address Details
contract

0x4311ba6e4584F1b5Ce5237F23E80a0360Ba9763E

Contract Name
PlastikRoyaltyCal
Creator
0x4c45c6–9e9f2c at 0x91e1aa–844ee8
Balance
0 CELO ( )
Locked CELO Balance
0.00 CELO
Voting CELO Balance
0.00 CELO
Pending Unlocked Gold
0.00 CELO
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
21040851
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
PlastikRoyaltyCal




Optimization enabled
false
Compiler version
v0.8.9+commit.e5eed63a




EVM Version
london




Verified at
2022-11-03T12:06:29.366972Z

contracts/PlastikRoyaltyCal.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/common/ERC2981.sol";

interface IPlastikRoyaltyCal is IERC2981 {
    function setTokenRoyalty(
        uint256 tokenId,
        address receiver,
        uint96 feeNumerator
    ) external;

    function resetTokenRoyalty(uint256 _tokenId) external;
}

contract PlastikRoyaltyCal is ERC2981, IPlastikRoyaltyCal {
    event TokenRoyaltySet(uint256 tokenId, address receiver, uint96 fee);
    event TokenRoyaltyReset(uint256 tokenId);

    function setTokenRoyalty(
        uint256 tokenId,
        address receiver,
        uint96 feeNumerator
    ) public {
        super._setTokenRoyalty(tokenId, receiver, feeNumerator);
        emit TokenRoyaltySet(tokenId, receiver, feeNumerator);
    }

    function resetTokenRoyalty(uint256 tokenId) public {
        super._resetTokenRoyalty(tokenId);
        emit TokenRoyaltyReset(tokenId);
    }
}
        

/_openzeppelin/contracts/interfaces/IERC165.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol)

pragma solidity ^0.8.0;

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

/_openzeppelin/contracts/interfaces/IERC2981.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/IERC2981.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Interface for the NFT Royalty Standard.
 *
 * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
 * support for royalty payments across all NFT marketplaces and ecosystem participants.
 *
 * _Available since v4.5._
 */
interface IERC2981 is IERC165 {
    /**
     * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
     * exchange. The royalty amount is denominated and should be payed in that same unit of exchange.
     */
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}
          

/_openzeppelin/contracts/token/common/ERC2981.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (token/common/ERC2981.sol)

pragma solidity ^0.8.0;

import "../../interfaces/IERC2981.sol";
import "../../utils/introspection/ERC165.sol";

/**
 * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.
 *
 * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for
 * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.
 *
 * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the
 * fee is specified in basis points by default.
 *
 * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See
 * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to
 * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.
 *
 * _Available since v4.5._
 */
abstract contract ERC2981 is IERC2981, ERC165 {
    struct RoyaltyInfo {
        address receiver;
        uint96 royaltyFraction;
    }

    RoyaltyInfo private _defaultRoyaltyInfo;
    mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) {
        return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @inheritdoc IERC2981
     */
    function royaltyInfo(uint256 _tokenId, uint256 _salePrice) external view override returns (address, uint256) {
        RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId];

        if (royalty.receiver == address(0)) {
            royalty = _defaultRoyaltyInfo;
        }

        uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator();

        return (royalty.receiver, royaltyAmount);
    }

    /**
     * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a
     * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an
     * override.
     */
    function _feeDenominator() internal pure virtual returns (uint96) {
        return 10000;
    }

    /**
     * @dev Sets the royalty information that all ids in this contract will default to.
     *
     * Requirements:
     *
     * - `receiver` cannot be the zero address.
     * - `feeNumerator` cannot be greater than the fee denominator.
     */
    function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual {
        require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
        require(receiver != address(0), "ERC2981: invalid receiver");

        _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator);
    }

    /**
     * @dev Removes default royalty information.
     */
    function _deleteDefaultRoyalty() internal virtual {
        delete _defaultRoyaltyInfo;
    }

    /**
     * @dev Sets the royalty information for a specific token id, overriding the global default.
     *
     * Requirements:
     *
     * - `tokenId` must be already minted.
     * - `receiver` cannot be the zero address.
     * - `feeNumerator` cannot be greater than the fee denominator.
     */
    function _setTokenRoyalty(
        uint256 tokenId,
        address receiver,
        uint96 feeNumerator
    ) internal virtual {
        require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
        require(receiver != address(0), "ERC2981: Invalid parameters");

        _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator);
    }

    /**
     * @dev Resets royalty information for the token id back to the global default.
     */
    function _resetTokenRoyalty(uint256 tokenId) internal virtual {
        delete _tokenRoyaltyInfo[tokenId];
    }
}
          

/_openzeppelin/contracts/utils/introspection/ERC165.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
          

/_openzeppelin/contracts/utils/introspection/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);
}
          

Contract ABI

[{"type":"event","name":"TokenRoyaltyReset","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"TokenRoyaltySet","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256","indexed":false},{"type":"address","name":"receiver","internalType":"address","indexed":false},{"type":"uint96","name":"fee","internalType":"uint96","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"resetTokenRoyalty","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"},{"type":"uint256","name":"","internalType":"uint256"}],"name":"royaltyInfo","inputs":[{"type":"uint256","name":"_tokenId","internalType":"uint256"},{"type":"uint256","name":"_salePrice","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTokenRoyalty","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"},{"type":"address","name":"receiver","internalType":"address"},{"type":"uint96","name":"feeNumerator","internalType":"uint96"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"supportsInterface","inputs":[{"type":"bytes4","name":"interfaceId","internalType":"bytes4"}]}]
              

Contract Creation Code

0x608060405234801561001057600080fd5b50610b86806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100515780632a55205a146100815780635944c753146100b25780638a616bc0146100ce575b600080fd5b61006b600480360381019061006691906106b5565b6100ea565b60405161007891906106fd565b60405180910390f35b61009b6004803603810190610096919061074e565b610164565b6040516100a99291906107de565b60405180910390f35b6100cc60048036038101906100c79190610877565b61034f565b005b6100e860048036038101906100e391906108ca565b61039a565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061015d575061015c826103dd565b5b9050919050565b6000806000600160008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614156102fa5760006040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610304610447565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866103309190610926565b61033a91906109af565b90508160000151819350935050509250929050565b61035a838383610451565b7f7f5b076c952c0ec86e5425963c1326dd0f03a3595c19f81d765e8ff559a6e33c83838360405161038d939291906109ef565b60405180910390a1505050565b6103a3816105f9565b7f0e6dc85545aec6da2e4702814198336dc5e52c107d879f264e71c3c2abeee92d816040516103d29190610a26565b60405180910390a150565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000612710905090565b610459610447565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156104b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ae90610ac4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051e90610b30565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff168152506001600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b60016000828152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff0219169055505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6106928161065d565b811461069d57600080fd5b50565b6000813590506106af81610689565b92915050565b6000602082840312156106cb576106ca610658565b5b60006106d9848285016106a0565b91505092915050565b60008115159050919050565b6106f7816106e2565b82525050565b600060208201905061071260008301846106ee565b92915050565b6000819050919050565b61072b81610718565b811461073657600080fd5b50565b60008135905061074881610722565b92915050565b6000806040838503121561076557610764610658565b5b600061077385828601610739565b925050602061078485828601610739565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107b98261078e565b9050919050565b6107c9816107ae565b82525050565b6107d881610718565b82525050565b60006040820190506107f360008301856107c0565b61080060208301846107cf565b9392505050565b610810816107ae565b811461081b57600080fd5b50565b60008135905061082d81610807565b92915050565b60006bffffffffffffffffffffffff82169050919050565b61085481610833565b811461085f57600080fd5b50565b6000813590506108718161084b565b92915050565b6000806000606084860312156108905761088f610658565b5b600061089e86828701610739565b93505060206108af8682870161081e565b92505060406108c086828701610862565b9150509250925092565b6000602082840312156108e0576108df610658565b5b60006108ee84828501610739565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061093182610718565b915061093c83610718565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610975576109746108f7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006109ba82610718565b91506109c583610718565b9250826109d5576109d4610980565b5b828204905092915050565b6109e981610833565b82525050565b6000606082019050610a0460008301866107cf565b610a1160208301856107c0565b610a1e60408301846109e0565b949350505050565b6000602082019050610a3b60008301846107cf565b92915050565b600082825260208201905092915050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b6000610aae602a83610a41565b9150610ab982610a52565b604082019050919050565b60006020820190508181036000830152610add81610aa1565b9050919050565b7f455243323938313a20496e76616c696420706172616d65746572730000000000600082015250565b6000610b1a601b83610a41565b9150610b2582610ae4565b602082019050919050565b60006020820190508181036000830152610b4981610b0d565b905091905056fea26469706673582212200360e01fc38f4a2e6ec4d7432602dfdc4b37271582c8a9e2755d50734003073264736f6c63430008090033

Deployed ByteCode

0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100515780632a55205a146100815780635944c753146100b25780638a616bc0146100ce575b600080fd5b61006b600480360381019061006691906106b5565b6100ea565b60405161007891906106fd565b60405180910390f35b61009b6004803603810190610096919061074e565b610164565b6040516100a99291906107de565b60405180910390f35b6100cc60048036038101906100c79190610877565b61034f565b005b6100e860048036038101906100e391906108ca565b61039a565b005b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061015d575061015c826103dd565b5b9050919050565b6000806000600160008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614156102fa5760006040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610304610447565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866103309190610926565b61033a91906109af565b90508160000151819350935050509250929050565b61035a838383610451565b7f7f5b076c952c0ec86e5425963c1326dd0f03a3595c19f81d765e8ff559a6e33c83838360405161038d939291906109ef565b60405180910390a1505050565b6103a3816105f9565b7f0e6dc85545aec6da2e4702814198336dc5e52c107d879f264e71c3c2abeee92d816040516103d29190610a26565b60405180910390a150565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000612710905090565b610459610447565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156104b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ae90610ac4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051e90610b30565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff168152506001600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b60016000828152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff0219169055505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6106928161065d565b811461069d57600080fd5b50565b6000813590506106af81610689565b92915050565b6000602082840312156106cb576106ca610658565b5b60006106d9848285016106a0565b91505092915050565b60008115159050919050565b6106f7816106e2565b82525050565b600060208201905061071260008301846106ee565b92915050565b6000819050919050565b61072b81610718565b811461073657600080fd5b50565b60008135905061074881610722565b92915050565b6000806040838503121561076557610764610658565b5b600061077385828601610739565b925050602061078485828601610739565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006107b98261078e565b9050919050565b6107c9816107ae565b82525050565b6107d881610718565b82525050565b60006040820190506107f360008301856107c0565b61080060208301846107cf565b9392505050565b610810816107ae565b811461081b57600080fd5b50565b60008135905061082d81610807565b92915050565b60006bffffffffffffffffffffffff82169050919050565b61085481610833565b811461085f57600080fd5b50565b6000813590506108718161084b565b92915050565b6000806000606084860312156108905761088f610658565b5b600061089e86828701610739565b93505060206108af8682870161081e565b92505060406108c086828701610862565b9150509250925092565b6000602082840312156108e0576108df610658565b5b60006108ee84828501610739565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061093182610718565b915061093c83610718565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610975576109746108f7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006109ba82610718565b91506109c583610718565b9250826109d5576109d4610980565b5b828204905092915050565b6109e981610833565b82525050565b6000606082019050610a0460008301866107cf565b610a1160208301856107c0565b610a1e60408301846109e0565b949350505050565b6000602082019050610a3b60008301846107cf565b92915050565b600082825260208201905092915050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b6000610aae602a83610a41565b9150610ab982610a52565b604082019050919050565b60006020820190508181036000830152610add81610aa1565b9050919050565b7f455243323938313a20496e76616c696420706172616d65746572730000000000600082015250565b6000610b1a601b83610a41565b9150610b2582610ae4565b602082019050919050565b60006020820190508181036000830152610b4981610b0d565b905091905056fea26469706673582212200360e01fc38f4a2e6ec4d7432602dfdc4b37271582c8a9e2755d50734003073264736f6c63430008090033