SuperRare Developer Documentation
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Assets

Overview

The core SuperRare protocol is asset agnostic but in order to stregthen 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 our bazaar has the ability to support any token on the Approved Token Registry we’ll focus on the $RARE Governance token.

ERC721

While the SuperRare 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

function transfer(address _to, uint256 _tokenId)
	public;

function bid(uint256 _tokenId)
	public
	payable;

function acceptBid(uint256 _tokenId)
	public;

function cancelBid(uint256 _tokenId)
	public;

function buy(uint256 _tokenId)
	public
	payable;

function setSalePrice(uint256 _tokenId, uint256 _salePrice)
	public;

SuperRareV2

This is the current default minting contract used by the SuperRare ecosystem. Unlike the V1 token this one removes the builtin market functionality optiing for full composability.

Note that this is a shared minting contract shared by all token creators. Access to minting is controlled by SuperRare.

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 SuperRare Network used to vote on SIPs (SuperRare Improvement Proposal).

Interface

function name()
	public
	view
	returns (string);

function symbol()
	public
	view
	returns (string);


function decimals()
	public
	view
	returns (uint8);

function balanceOf(address _owner)
	public
	view
	returns (uint256);

function transfer(address _to, uint256 _value)
	public
	returns (bool);

function transferFrom(address _from, address _to, uint256 _value)
	public
	returns (bool);

function approve(address _spender, uint256 _value)
	public
	returns (bool);

function allowance(address _owner, address _spender)
	public
	view
	returns (uint256);

For more information on these functions see OpenZeppelin Docs

Addresses

Mainnet

Contract Name Contract Address
SuperRareV1 0x41a322b28d0ff354040e2cbc676f0320d8c8850d
SuperRareV2 0xb932a70a57673d89f4acffbe830e8ed7f75fb9e0
SeriesNFTFactory 0x2c325156416cc7b701151daFb6D4c0BDF0d398f0
SpacesNFTFactory 0x3B2d699110aa1788B2B1cae336E0bA8ff942A390
$RARE Token 0xba5bde662c17e2adff1075610382b9b691296350