# Collections

A collection is comprised of layers, tokens, and settings. A user may create several collections.

## Storage

### Tableland

The `Collections` table in Tableland has the following schema:

```json
{
    "id": integer (PK)
    "owner": text (FK)
    "tokens_table": text
    "layers_table": text
    "attributes_table": text
    "contract_address": text
    "name": text
    "symbol": text
    "description": text
    "image": text
    "external_link": text
    "seller_fee_basis_points": integer
    "fee_recipient": text
}
```

* `id`: Integer (primary key) representing the row of the entry
* `owner`: Uuid of the user who created the collection. This value is a foreign key for the uuid in the `Users` table
* `tokens_table`: String identifier for the name of the user-specific `Tokens` table
* `layers_table`: String identifier for the name of the user-specific `Layers` table
* `attributes_table`: String identifier for the name of the user-specific `Attributes` table
* `contract_address`: Address for the deployed smart contract. This is only populated if/when the user decides to deploy the contract to the blockchain
* `name`: Collection name
* `symbol`: Collection token symbol (e.g., "C" for CryptoPunks)
* `description`: Collection description
* `image`: IPFS content hash for the collection's avatar. This hash is inserted into an IPFS gateway in the Opal UI to fetch the content from IPFS
* `external_link`: Supplementary link to point to collection content (e.g., website, Twitter, Linktree, etc.)
* `seller_fee_basis_points`: Percentage in basis points for secondary market royalties (e.g., 100 basis points = 1% secondary market royalties)
* `fee_recipient`: Address for the recipient of any secondary market royalties

The name, description, image, external link, seller fee basis points, and fee recipient values are all values that are picked up on secondary NFT marketplaces via the smart contract's `contractURI()` function. More information can be found in OpenSea's documents on [contract-level metadata](https://docs.opensea.io/docs/contract-level-metadata).

#### Secondary Market Royalties

There has been recent discussion in the NFT space on whether marketplaces such as OpenSea will honor secondary market royalties and the technical implementation of possible solutions. As of now, there is no clear guidance on how creators should proceed. If anything changes, Opal will make the necessary changes to the `Collections` table schema, specifically with respect to the seller fee basis points and fee recipient.
