Assets
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.
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.
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.
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;
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.
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 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
.
The $RARE token is the governance token (ERC20) of the SuperRare Network used to vote on SIPs (SuperRare Improvement Proposal).
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
Contract Name | Contract Address |
---|---|
SuperRareV1 | 0x41a322b28d0ff354040e2cbc676f0320d8c8850d |
SuperRareV2 | 0xb932a70a57673d89f4acffbe830e8ed7f75fb9e0 |
SeriesNFTFactory | 0x2c325156416cc7b701151daFb6D4c0BDF0d398f0 |
SpacesNFTFactory | 0x3B2d699110aa1788B2B1cae336E0bA8ff942A390 |
$RARE Token | 0xba5bde662c17e2adff1075610382b9b691296350 |