• Stars
    star
    154
  • Rank 242,095 (Top 5 %)
  • Language
    TypeScript
  • Created over 3 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Zora β€” Auction House γ€œ 𓀨 γ€œ

Auction House Header Image

The Zora Auction House is an open and permissionless system that allows any creator, community, platform or DAO to create and run their own curated auction houses.

These auction houses run reserve timed auctions for NFTs, with special emphasis given to the role of curators. If an owner of an NFT chooses to list with a curator, that curator can charge a curator fee and has to approve any auction before it commences with that curators auction house.

Anyone is able to run an NFT auction on the protocol for free by simply not specifying a curator.

The Zora ethos is to create public goods that are either owned by the community or by no one. As such, we have deployed this without admin functionality, and is therefore entirely permissionless and unstoppable.

Mainnet address: 0xE468cE99444174Bd3bBBEd09209577d25D1ad673

Rinkeby address: 0xE7dd1252f50B3d845590Da0c5eADd985049a03ce

Table of Contents

Architecture

This protocol allows a holder of any NFT to create and perform a permissionless reserve auction. It also acknowledges the role of curators in auctions, and optionally allows the auction creator to dedicate a portion of the winnings from the auction to a curator of their choice.

Note that if a curator is specified, the curator decides when to start the auction. Additionally, the curator is able to cancel an auction before it begins.

Curators

In a metaverse of millions of NFTs, the act of curation is critical. Curators create and facilitate context and community which augment the value of NFTs that they select. The act of curation creates value for the NFT by contextualizing it and signalling its importance to a particular community. The act of curation is extremely valuable, and is directly recognized by the Auction House system. A curator who successfully auctions off an NFT for an owner can earn a share in the sale.

We have defined a curator role in the auction house. A curator can:

  • Approve and deny proposals for an NFT to be listed with them.
  • Earn a fee for their curation
  • Cancel an auction prior to bidding being commenced

Creators and collectors can submit a proposal to list their NFTs with a curator onchain, which the curator must accept (or optionally reject). This creates an onchain record of a curators activity and value creation.

Creators and collectors always have the option to run an auction themselves for free.

Create Auction

At any time, the holder of a token can create an auction. When an auction is created, the token is moved out of their wallet and held in escrow by the auction. The owner can retrieve the token at any time, so long as the auction has not begun.

Name Type Description
tokenId uint256 The tokenID to use in the auction
tokenContract address The address of the nft contract the token is from
duration uint256 The length of time, in seconds, that the auction should run for once the reserve price is hit.
reservePrice uint256 The minimum price for the first bid, starting the auction.
creator address The address of the current token holder, the creator of the auction
curator address The address of the curator for this auction
curatorFeePercentage uint8 The percentage of the winning bid to share with the curator
auctionCurrency address The currency to perform this auction in, or 0x0 for ETH

Cancel Auction

If an auction has not started yet, the curator or the creator of the auction may cancel the auction, and remove it from the registry. This action returns the token to the previous holder.

Name Type Description
auctionId uint256 The ID of the auction

Set Auction Approval

If a created auction specifies a curator to start the auction, the curator must approve it in order for it to start. This is to allow curators to specifically choose which auctions they are willing to curate and perform.

Name Type Description
auctionId uint256 The ID of the auction
approved bool The approval state to set on the auction

Create Bid

If an auction is approved, anyone is able to bid. The first bid must be greater than the reserve price. Once the first bid is successfully placed, other bidders may continue to place bids up until the auction's duration has passed.

If a bid is placed in the final 15 minutes of the auction, the auction is extended for another 15 minutes.

Name Type Description
auctionId uint256 The ID of the auction
amount uint256 The amount of currency to bid. If the bid is in ETH, this must match the sent ETH value

End Auction

Once the auction is no longer receiving bids, Anyone may finalize the auction. This action transfers the NFT to the winner, places the winning bid on the piece, and pays out the auction creator and curator.

Name Type Description
auctionId uint256 The ID of the auction

Local Development

The following assumes node >= 12

Install Dependencies

yarn

Compile Contracts

npx hardhat compile

Run Tests

npx hardhat test

Bug Bounty

  • 25 ETH for any critical bugs that could result in loss of funds.
  • Rewards will be given for smaller bugs or ideas.

Acknowledgements

This project is the result of an incredible community of builders, projects and contributors.

We would like to acknowledge the Mint Fund and the $BOUNTY backers for crowdfunding and coordinating the development of an opensource version of reserve auctions, implemented by Billy Rennekamp.

We would also like to credit projects that have pioneered and improved on the reserve auction mechanism and experience, such as SuperRare. Lastly, we'd like to ackowledge Coldie, the original pioneer of the reserve timed auction mechanism.

More Repositories

1

v3

Solidity
370
star
2

zora-721-contracts

Zora drops contracts (powers create.zora.co)
Solidity
189
star
3

nft-editions

Contracts to lazy-mint editioned ERC721s
Solidity
164
star
4

core

A protocol to create, share and exchange universally accessible and valuable media on the internet.
TypeScript
161
star
5

nft-hooks

NFT Data Fetching Hooks with Zora contract data
TypeScript
135
star
6

create-auction-house

Starter repo for creating your own auction house with Zora's protocol
TypeScript
121
star
7

nouns-protocol

Solidity
108
star
8

zora-docs

JavaScript
107
star
9

offchain

NFT Metadata made easy
Python
107
star
10

zdk

TypeScript
107
star
11

zorb

Zorb zelated zings
TypeScript
107
star
12

nft-components

NFT Rendering Components
TypeScript
100
star
13

nouns-builder

Nouns Builder
TypeScript
93
star
14

lanyard

Decentralized allowlists for web3
TypeScript
78
star
15

zora-protocol

Monorepo for Zora Protocol (contracts & sdks)
Solidity
77
star
16

mint-page-template

TypeScript
71
star
17

nft-metadata

generic nft metadata parsers
TypeScript
65
star
18

faucets

TypeScript
57
star
19

nouns-marketplace

βŒβ—¨-β—¨
TypeScript
49
star
20

foundry-script-examples

Solidity
44
star
21

doge-nft

DOGE NFT
SCSS
32
star
22

media-metadata-schemas

A repository of known JSON metadata schemas for the Zora media protocol.
TypeScript
29
star
23

themis

The legal terms of service for people's tokenized work
29
star
24

zora-v1-subgraph

TypeScript
27
star
25

mintpool

A mempool of things you can bring onchain
Rust
21
star
26

zora-token-factory-deprecated-

A token factory that enables any person or community to tokenize any good or endeavour.
JavaScript
21
star
27

nft-cli

NFT CLI library
TypeScript
17
star
28

protocol-rewards

Solidity
16
star
29

nouns-builder-bot

TypeScript
15
star
30

recovery-protocol

Solidity
15
star
31

simple-wallet-provider

Simple Wallet Provider
TypeScript
15
star
32

smol-safe

smol safe ui
TypeScript
15
star
33

chains-cli

Cli for chain configuration
TypeScript
14
star
34

zora-drops-extensions

Extensions for ZORA Drops
Solidity
11
star
35

nouns-ar-glasses-ios

Nouns AR Glasses for iOS
Swift
11
star
36

nouns-connect

Connect your Nouns DAOs to DApps
TypeScript
10
star
37

thegrandexchange

welp here goes nothing
TypeScript
9
star
38

json-extension-registry

Store arbitrary JSON data associated with a contract
Solidity
8
star
39

zorb-zenerator

JavaScript
8
star
40

zora-drop-frontend

Frontend template iteration for drop site using Zora drops contract factory.
JavaScript
7
star
41

rent-a-vote

Solidity
7
star
42

zora-crypto-list

A list of resources to help get started in crypto.
6
star
43

rug-house

Rug Store Auction House!
TypeScript
6
star
44

cryptomedia

What is Cryptomedia?
HTML
6
star
45

cli

TypeScript
5
star
46

hollyplus-minting-contract

Simple royalty-enabled IPFS minting contract for holly plus
TypeScript
5
star
47

manage-auction-hooks

Hooks to manage auction state for auction houses, integrates with simple-wallet-hooks
TypeScript
4
star
48

first-lol

TypeScript
3
star
49

mad-realities-auction

TypeScript
3
star
50

matthew-ball-minting-contract

On-chain metadata with contentURI implementation for Matthew Ball's Metaverse Essays
HTML
2
star
51

zora-zine-reader

POC for zora zine reader
TypeScript
1
star
52

uniswap-v2-interface

TypeScript
1
star
53

zora-creator-subgraph

TypeScript
1
star
54

frontend-exercise-one

ZORA Frontend Exercise #1
TypeScript
1
star