contracts-wizard icon indicating copy to clipboard operation
contracts-wizard copied to clipboard

Add Royalties for NFTs

Open JulissaDantes opened this issue 4 years ago • 4 comments

Add options for users to be able to integrate royalties on their ERC721 and ERC1155 contracts. This is a suggested set of changes:

  • [ ] Include it on the options after selecting ERC721 or ERC1155. image Populating those fields would inherit from the tokenRoyalty contract and call the setDefaultRoyalty from the constructor.

  • [ ] Include this parts on the code:

    • [ ] An import for the new module: import "@openzeppelin/contracts/token/tokenERC/extensions/tokenERCRoyalty.sol";
    • [ ] An inheritance: contract MyToken is ERC721, AccessControl { We'll use Access control to handle the roles of who can set royalties.
    • [ ] This calls to the royalties functions:
    function setTokenRoyalty(
        uint256 tokenId,
        address recipient,
        uint96 fraction
    ) public onlyRole(ROYALTY_SETTER_ROLE) {
        _setTokenRoyalty(tokenId, recipient, fraction);
    }

    function setDefaultRoyalty(address recipient, uint96 fraction) public onlyRole(ROYALTY_SETTER_ROLE) {
        _setDefaultRoyalty(recipient, fraction);
    }
- [ ] This constructor: 
bytes32 public constant ROYALTY_SETTER_ROLE= keccak256("ROYALTY_SETTER_ROLE");
constructor() ERC721("MyToken", "MTK") {
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _grantRole(ROYALTY_SETTER_ROLE, msg.sender);
    }

Take into consideration for the ERC1155, if the user specifies royalties and select ERC1155Supply do not import it btwice into the code, since the royalties contract inherits from this module.

JulissaDantes avatar Dec 15 '21 18:12 JulissaDantes

Let's remove the part about access control. I don't think a "royalty setter" role is the way this will be used in general.

Populating those fields would inherit from the tokenRoyalty contract and call the setDefaultRoyalty from the constructor.

This should be enough to get started.

frangio avatar Dec 21 '21 21:12 frangio

Would like to see this to be implemented too, will this be implemented in the future?

SudarminThen avatar Dec 31 '21 10:12 SudarminThen

Hello,

I was just looking into this project today.

I have a diff for this on https://github.com/gmertk/contracts-wizard/commit/29d903e5fde65853dab3cab6f887c8f4d41c9d8f

If it is ok for you, I can send a pull request after https://github.com/OpenZeppelin/openzeppelin-contracts/pull/3012 is merged.

Cheers!

gmertk avatar Jan 03 '22 22:01 gmertk

That's awesome @gmertk! Feel free to open a Draft PR any time and we can begin reviewing. It's not going to be merged until royalties are released in OpenZeppelin Contracts later this month.

frangio avatar Jan 06 '22 16:01 frangio