Royalties
The Royalty
smart contract is an extension usable with any base smart contract. It implements EIP 2981 NFT royalty standard for royalty support on NFT marketplaces.
Import
import "@thirdweb-dev/contracts/extension/Royalty.sol";
Available functionality
Functionality | Description |
---|---|
royaltyInfo | Returns the recipient of royalties and the % of sales to take as royalties, for a given NFT. |
getDefaultRoyaltyInfo | Returns the default recipient of royalties and the default % of sales to take as royalties, for any given NFT. |
setDefaultRoyaltyInfo | Lets you set the default royalty recipient and % for your NFTs. |
getRoyaltyInfoForToken | Returns the recipient of royalties and the % of sales to take as royalties, for an NFT of a particular token ID. |
setRoyaltyInfoForToken | Lets you set the royalty recipient and % for an NFT of a particular tokenID. |
_canSetRoyaltyInfo | Defines the criteria a wallet must meet to be able to set any royalty percentage and recipient. |
The Royalty
contract extension lets you set a default recipient address for royalties generated by the secondary sales of your NFTs, and a default percentage of secondary sales to take as royalties.
You can also override the royalty recipient and percentage for your NFTs on a per token ID basis.
Implementing the Contract extension
Import the contract extension and make your contract inherit it.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/extension/Royalty.sol";
contract MyContract is Royalty {
/**
* We store the contract deployer's address only for the purposes of the example
* in the code comment below.
*
* Doing this is not necessary to use the `Royalty` extension.
*/
address public deployer;
constructor() {
deployer = msg.sender;
}
/**
* This function returns who is authorized to set royalty info for your NFT contract.
*
* As an EXAMPLE, we'll only allow the contract deployer to set the royalty info.
*
* You MUST complete the body of this function to use the `Royalty` extension.
*/
function _canSetRoyaltyInfo() internal virtual override returns (bool){
return msg.sender == deployer;
}
}
Unlocked Features
On the dashboard, you'll be able to set the wallet address and percentage of the royalty fee on secondary sales under the Settings
tab:
Within the SDK, you can get
and set
the royalty fee (if you have the necessary permissions).