EIP-2981: NFT Royalty Standard
Blaine Malone
31th August 2021
Introduction
Blaine Malone
Software Engineer, Research @ Gemini��Prev. ConsenSys/Trustology��
Opinions expressed are my own and do not represent those of my employers
Acknowledgments
Contributors: �Zach Burks, James Morgan (@jamesmorgan), Blaine Malone (@blmalone), James Seibel (@seibelj)��Other notable contributors: �@cliffhall, @dievardump, @lenifoti, @wwhchung
Et al.
EIP-2981 Timeline
Status: DRAFT�22th Sep 2020
Status: FINAL�24th July 2021
Status: REVIEW�18th Jun 2021
Status: DRAFT�21st Feb 2021
Status: LAST CALL�8th Jul 2021
450+
Github discussions
60+ commits��15+ active participants
Contents
What are Royalties?
“A royalty is a payment made by one party to another that owns a particular asset, for the right to ongoing use of that asset. Royalties are typically agreed upon as a percentage of gross or net revenues derived from the use of an asset or a fixed price per unit sold of an item of such, but there are also other modes and metrics of compensation. A royalty interest is the right to collect a stream of future royalty payments.” - https://en.wikipedia.org/wiki/Royalty_payment
What are Royalties?
Payments to rightful recipients (creators) in perpetuity by a predefined set of rules.
Ecosystem Participants
Creator
Artist has an idea for an NFT and launches an ERC721/ERC1155 contract
Marketplace
Marketplace lists the NFT with a sale price, sets royalties
Buyer
Buyer interacts with marketplace and purchases NFT, royalties sent to ‘Creator’.
This is good, but....
The State of the Nation
Marketplace
Siloed
Royalty Information is not shared���What constitutes a sale of an NFT?
Facilitated by the marketplace.
Can’t we enforce royalties?
Marketplace
With the current architecture, we’ve got two problems:
Continued....
Marketplace
At first glance, three approaches seem attractive:
Contract is unaware of sale price, so easily bypassed
Heavyweight, Unfriendly for collector
Unfriendly for collector
Marketplaces want to implement a royalties framework.
The issue isn’t enforcement, it is adoption of cross-platform compatibility.
EIP-2981
Marketplace
Buyer
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.
Implementation
Marketplace
Buyer
...
Marketplace
Buyer
Each ‘tokenId’ has their own recipient and value
Targeting 2 decimal places so expecting ‘value’ to be at most
10,000 = 100%
We know that,� 15% of 45 Ether = 6.75��But Solidity computes: � (45 * 15) / 100 = 6 Ether�
So:
salePriceWei = 45 * 10^18;�(salePriceWei * 1,500) / 10,000 = 6.75^18 wei�6.75^18 wei == 6.75 Ether
...
Assume only ever invoked externally
No state modification within function
Temporary storage, only during the runtime.
100% or 10,000 basis points
send ‘_salePrice’ in the smallest denomination of the currency tendered.
...
Rationale
Marketplace
Buyer
Simple royalty payments to a single address
...
On-chain royalty payment percentage calculation
...
Unit-less royalty payment across all marketplaces, both on-chain and off-chain
...
Marketplace
Buyer
Universal Royalty Payments
Looking forward 👀
Marketplace
Buyer
Join the Discord
More royalties conversations happening @�https://discord.gg/qVZSnEBU
References:
https://manifoldxyz.substack.com/p/royalties-demystified-
https://github.com/dievardump/EIP2981-implementation
https://twitter.com/blainemalone/status/1410338839592329217