Enforcing royalties
This article will go into why and how Immutable enforces royalty fees for content creators.
How are royalties enforced on Immutable zkEVM?
Royalties are enforced on Immutable zkEVM via the following controls.
Via collection
All NFT collections must inherit the royalty enforcement functions contained within Immutable's ERC721 and ERC1155 preset contracts.
Immutable's presets utilize the IOperatorAllowlist
interface, allowing compliant NFTs to implement the function isAllowlisted()
to check whether the supplied address respects the following rules:
- Assets can be transferred from any users externally owned wallets to another (i.e. peer to peer trading is allowed between 2 players Metamask wallets).
- Assets can be transferred from an approved user's smart contract wallets to another. Immutable's Passport is such a wallet.
- Only Marketplaces who respect royalty fees can be "approved" to sell assets.
Here is an example of the Operator Allowlist being implemented in a ERC721 and ERC1155 collection.
Via settlement contract
All settlement contracts that facilitate the buying and selling of NFTs on Immutable's platform will need to be approved by Immutable that they respect the payment of royalty fees to content creators. The use of Immutable's standard Seaport settlement contract is the preferred method this is achieved.
Via Immutable's allowlist
To safeguard the integrity of royalty payments, Immutable employs an allowlist of addresses to verify and ensure that royalties are duly respected. This allowlist serves as a point of reference for the isAllowlisted()
function, which outlines compliant contracts and marketplaces.
By maintaining this external list, separate from the NFTs themselves, any updates made to the allowlist promptly take effect across all compliant NFTs. This seamless integration enables immediate support for Immutable's Web3 gaming community, facilitating a smooth and uninterrupted experience for all stakeholders involved.
See the Operator Allowlist contract specification for an in-depth guide.
Using Immutable's allowlist
For content creators
- Deploy
ImmutableERC721.sol
orImmutableERC1155.sol
. The deploying account is theDEFAULT_ADMIN_ROLE
- Use the deploying account to call
setOperatorAllowlistRegistry
, passing in the address of the registry managed by Immutable (i.e. the allowlist)
Here is an example of the Operator Allowlist being implemented in a ERC721 and ERC1155 collection.
For marketplaces
- Speak to your Immutable account representative to ensure your platform is permissioned on the allowlist
- Ensure your platform uses Immutable's Seaport settlement contract, or another approved settlement contract
Allowlist details
Enforcement flows
approve(target) approveForAll(target) | Allowed |
---|---|
Approval target is an EOA | True |
Approval target is an address that has had its bytecode approved | True |
Approval target is an address that has had its address approved | True |
Approval target is an SC wallet that hasn't had its bytecode and implementation approved | False |
Approval target is a SC that hasn't had its address approved | False |
transferFrom | Allowed |
---|---|
Caller is EOA | True |
Caller is an SC wallet that hasn't had its bytecode and implementation approved | True |
Caller is a SC that has its address approved, e.g. Marketplace | True |
Caller is a SC wallet that hasn't had its bytecode approved and implementation | False |
Caller is a SC that hasn't had its address approved | False |