Assets
Overview
The core Rare Protocol is asset agnostic, but in order to strengthen the network we provide the community with art-based tokens such as our shared ERC721 minting contracts (SuperRareV2 and SuperRareV1), creator owned minting contracts (Series), and curator owned/managed minting contracts (Spaces). On the ERC20 front, while the Bazaar has the ability to support any token on the Approved Token Registry, weโll focus on the $RARE Governance token.
ERC721
While the Bazaar supports any arbitrary ERC721 token, we have gone ahead and provided a few of our own; SuperRareV1 (deprecated), SuperRareV2, Series, and Spaces.
SuperRareV1
The first version of the SuperRare ERC721 is a specal case where the market contract is built into the token allowing only offers and SalePrices
and doesnโt let a user approve
other operators to move tokens on their behalf (this is the reason that etherscan thinks theyโre ERC20 tokens).
Note that this is a shared minting contract shared by all token creators.
In addition to the above thereโs some more functionality built in:
Unique URI Check
Check the metadata URI being used to mint a token to verify it hasn't been used before.
Minting Allowlist
Maintains a mapping of addresses to whether or not they have the ability to mint new tokens under this contract.
Market Interface
SuperRareV2
This is the current default minting contract used by the SuperRare ecosystem. Unlike the V1 token this one removes the builtin market functionality opting for full composability.
Note that this is a shared minting contract shared by all token creators. Access to minting is controlled by SuperRare Labs.
Additional Functionality:
IERC721Creator
Provides the view function tokenCreator(uint256 _tokenId) -> (address payable)
to pull the address that initiated minting token with tokenId _tokenId
Minting Allowlist
Maintains a mapping of addresses to whether or not they have the ability to mint new tokens under this contract.
Series NFT
The series NFT contract is an ERC721 contract supplied by SuperRare and allows artists to deploy their own ERC721 contract that is fully owned by them. Weโve adopted OpenZeppelinโs clones
library to cut down on the cost of deployment by a factor of 10.
Note that this is a solo minting contract only able to be minted to by the contract owner.
Additional Functionality:
IERC721Creator
Provides the view function tokenCreator(uint256 _tokenId) -> (address payable)
to pull the address that initiated minting token with tokenId _tokenId
ERC2981: NFT Royalty Standard
function royaltyInfo(uint256 _tokenId, uint256 _salePrice) -> ( address receiver, uint256 royaltyAmount)
Abiding by the ERC2981 royalty standard, the contrat has a way to lookup the receiver of royalties for a given token and how much they should receive in royalties given an amount.
function setDefaultRoyaltyReceiver(address _receiver) -> ()
This function gives you the ability to change the default address returned by royaltyInfo
.
function setRoyaltyReceiverForToken(address _receiver, uint256 _tokenId) -> ()
Override the royalty receiver for a specific token.
Disable Minting
By the owner calling disableContract()
, minting to this contract will no longer be possible. This functionalty has 2 use cases: account compromise and finishing up a series.
Space NFT
Space NFT contracts are ERC721 tokens that are the basis of our first step to decentralized curation. Under a Space NFT contract, the contract owner (often referred to as the Space Operator) can add artists to the allowlist to mint (this variation also has the concept of a minting allowance rather than being all or nothing).
Note that this is a shared minting contract shared by all token creators. Access to minting is controlled by the SpaceOperator.
Additional Functionality:
IERC721Creator
Provides the view function tokenCreator(uint256 _tokenId) -> (address payable)
to pull the address that initiated minting token with tokenId _tokenId
ERC2981: NFT Royalty Standard
function royaltyInfo(uint256 _tokenId, uint256 _salePrice) -> ( address receiver, uint256 royaltyAmount)
Abiding by the ERC2981 royalty standard, the contrat has a way to lookup the receiver of royalties for a given token and how much they should receive in royalties given an amount.
function setDefaultRoyaltyReceiver(address _receiver) onlyOwner -> ()
This function gives you the ability to change the default address returned by royaltyInfo
.
function setRoyaltyReceiverForToken(address _receiver, uint256 _tokenId) onlyOwner -> ()
Override the royalty receiver for a specific token.
Minting Allowlist
Maintains a mapping of addresses to their minting allowance.
function addToWhitelist(address _newAddress) onlyOwner -> ()
Adds an address to the allowlist with an infinite (for all intents and purposes) minting allowance.
function removeFromWhitelist(address _newAddress) onlyOwner-> ()
Sets the minting allowance for an address to be 0, removing them from being able to mint under the SpaceNFT contract.
function updateMintingAllowance(address _newAddress, uint256 _newAllowance) onlyOwner-> ()
Sets the minting allowance for an address to be _newAllowance
.
ERC20
The $RARE Token
The $RARE token is the governance token (ERC20) of the used to vote on SIPs (SuperRare Improvement Proposal).
Interface
For more information on these functions see OpenZeppelin Docs
Addresses
Mainnet
SuperRareV1
0x41a322b28d0ff354040e2cbc676f0320d8c8850d
SuperRareV2
0xb932a70a57673d89f4acffbe830e8ed7f75fb9e0
SeriesNFTFactory
0x2c325156416cc7b701151daFb6D4c0BDF0d398f0
SpacesNFTFactory
0x3B2d699110aa1788B2B1cae336E0bA8ff942A390
$RARE Token
0xba5bde662c17e2adff1075610382b9b691296350
Last updated