# Introduction

> #### ANNOUNCEMENTS
>
> The **beta version** of Capsule Packaging and Shipping is live!
>
> With Capsule Packaging and Shipping users can send, batch, secure, and recall cryptocurrency transactions on the Ethereum and Optimism blockchains.
>
> Follow us on [Twitter](https://docs.capsulelabs.xyz/www.twitter.com/capsulenft) and join our [Discord](https://t.co/FOVfyjbcZh) for announcements on the Capsule Ecosystem.

### Introduction to Capsule

Welcome to Capsule, a revolutionary system designed to redefine the cryptocurrency experience and streamline digital asset transactions.

Capsule introduces a unique concept of wrapping assets into programmable NFTs, aptly named **Capsule NFTs**, to enable secure, convenient, and gasless transactions across different chains.

### The Capsule Vision

Capsule aims to empower cryptocurrency users by:

* batching multiple asset transactions into a single, secure transfer
* introducing 'reroutable' transfer
* increasing security on asset transaction
* allowing for cryptocurrency transfer/acceptance without wallet sign in
* covering native chain gas fees on any chain

Capsule is built with a keen focus on accessibility and user experience. We introduce a Web2 style, 'one-click method' of accepting assets which eliminates complex onboarding processes for new users who seek to hold, trade, and transfer cryptocurrency.

#### Packaging and Shipping

Capsule was built to mirror how most real-life shipments work today – each Capsule NFT holds assets similarly to an Amazon package sent to your door. Just as each cardboard box comes with a unique barcode, delivery instruction, route, and much more, so does each Capsule transfer. Just as you are able to return a broken/lost shipment to Amazon, or re-route the shipping address to the proper location, Capsule introduces never-before-seen flexibility in cryptocurrency transfer.

When you order anything online, you have little doubt anything will go wrong during the shipping process. Any doubt you have is assuaged by the ability to return the package, or cancel the shipment. The real-world shipping process brings a universally accepted user experience to your door in the form of a package. As such, we have named our transfer protocol **Capsule Packaging and Shipping**.

***

For more information on how Capsule Packaging and Shipping works, view [here](/protocol-overview/packaging-and-shipping).

All of these features are available on our streamlined application, accessible [here](https://app.capsulenft.com).

***

### Social Media

**Twitter:** [twitter.com/Capsule\_XYZ](https://twitter.com/capsule_xyz)

**Discord:** [discord.com/invite/CapsuleNFT](https://discord.com/invite/CapsuleNFT)

**Medium:** [medium.com/CapsuleNFT](https://medium.com/capsulenft)

**LinkedIn:** [linkedin.com/company/Capsule-NFT](https://linkedin.com/company/Capsule-NFT)

**Website:** [capsulenft.com](https://capsulenft.com)

**Application:** [app.capsulenft.com](https://app.capsulenft.com)

### Contact

Capsule is hiring! Email us with your resume and a short description of your previous work experience, hobbies/passions, and favorite project(s) in the space.

**Hiring:** <recruitment@capsulenft.com>

**Support:** <support@capsulenft.com>


# Packaging and Shipping

{% hint style="info" %}
We’re excited to be launching **gasless pickup**! Any recipient can now redeem a digital asset without needing to create, sign, or pay for a transaction.

Create your own **gasless pickup** transfer [here](https://app.capsulenft.com).
{% endhint %}

## Capsule Packaging and Shipping (CPaS)

Capsule Packaging and Shipping (CPaS) allows any user to transfer any asset with programmable features on the Ethereum and Optimism networks. These programmable features include:

* Reroutable or cancelable transactions
* Batching assets for transfer in one transaction
* Gasless pickup, one-click obtaining of assets without signing into a wallet
* Increased on-chain security with password/asset key verification
* Off-chain requirements to transfer/receive assets
* Immediate user onboarding on new blockchains

### How it Works

Each transfer contains assets that are encapsulated in special NFTs – **Capsule NFTs** –  which can hold any amount and type of assets, functioning as programmable wrappers. Capsule NFTs have a unique identifier with their own metadata, programmed features, and held assets. These Capsule NFTs are then shipped to an escrow contract with access limited only to the sender and the recipient of the transaction, where further programmatic conditions – including off-chain requirements – can be added to the transfer.

Finally, when all conditions are met, the programmed receiver of the transfer can pick up the assets without paying gas fees or even requiring a cryptocurrency wallet at the point of pickup.

Receivers pick up their assets through a link known as the **Capsule Redemption Page**. Each Redemption Page is designated by a unique Capsule NFT ID, which contains information about the packaged assets, shipment status, and security checks required to pick up the assets. Senders supply a Capsule Redemption link and password to a recipient (who is not required to sign in, and/or may not have a cryptocurrency wallet of their own), and if all security checks pass, the **Capsule Relay** will transfer the attached assets to the receivers wallet (paying gas fees on behalf of the receiver), creating a wallet if the receiver does not yet have one.&#x20;

The Capsule Relay is currently supported by the Capsule team for seamless, one-click transaction. The ultimate goal for the Capsule Network is to decentralize the means of 'gasless transfer' by incentivizing a vast network of Capsule Node runners, who will exist around the world supporting transfers on any blockchain.

**Capsule Relay transfer is entirely optional** – users can send and receive transfers without utilizing the Capsule Relay by setting an address or ENS domain as the recipient. The benefits of using the Capsule Relay lie in a gasless, no-address-required experience for the receiver, although advanced users may opt into transferring to an already existing cryptocurrency address.

***

## In Depth - Capsule Packaging and Shipping

Capsule Packaging and Shipping (CPaS) can be divided into two separate protocols: Capsule Packaging, and Capsule Shipping.

### Capsule Packaging

Capsule Packaging is a formal name for the creation of Capsule NFTs transacted through Capsule Shipping. Capsule Packaging utilizes both Classic Capsules and Iron Capsules from the CapsuleNFT Protocol, and allows for optional extension for packaged Capsules by extending ownership of the CapsuleNFT Collection to a Capsule Logic Contract.

### Capsule Shipping

Capsule Shipping is a formal name for the transaction experience presented by sending assets through Capsule NFTs through the Capsule Shipping contracts. Capsule Shipping utilizes Capsule NFTs created through the Capsule Packaging contracts as shipping containers. Instead of direct transfer of a Capsule from one address to another, the Capsule Shipping Contract acts as a programmatic escrow, requiring a user to pass certain predetermined steps before accepting a Capsule shipped to their address. This particular escrow contract is named the **Capsule Fulfillment Center**, mirroring common Web2 shipping procedures where options of regular shipment can be changed or canceled at will.

{% hint style="info" %}
The **Capsule Fulfillment Center** is referred to as the Post Office in `PostOffice.sol`
{% endhint %}

<figure><img src="/files/qnSXLivmfH5GJQ80ADNi" alt=""><figcaption></figcaption></figure>

The example above displays the difference between sending a Capsule directly to another address versus “shipping” a Capsule (using CPaS) to another address. Transferring a Capsule from one address to another causes the secondary address to “receive” the Capsule without any predetermined checks. It requires only one transaction, although if multiple assets are packaged within a Capsule, it may significantly reduce gas cost for the batched asset transfer.

In contrast, “shipping” a Capsule using CPS has two steps: the “shipment” transaction, and the “redemption” transaction. First, a Capsule properly “packaged” using Capsule Packaging is either accepted or minted in conjunction with a “shipment” designation - coded as package information. A shipment designation currently contains, but is not limited to, the following settings:

* **packageType -** numeric package code designated to the “shipment” for tracking
* **capsuleType -** Classic or Iron Capsule type used
* **manager -** the manager of the package, often the sender, but can be any secondary contract - can also be set to the zero address
* **receiver -** the address to accept the package - can also be set to the Capsule Relay to allow for gasless, off-chain package pickup
* **securityType** - programmatic requirements necessary for package acceptance
* **secureHash** - if provided, a password necessary for package acceptance
* **isDelivered** - a boolean determining whether the shipment has been accepted

After a Capsule has been properly “shipped”, it remains within the Capsule Fulfillment Center until further action. Some actions are listed below for quick example:

* The Capsule has been properly shipped and is waiting acceptance
* The Capsule has been properly shipped, but requires a new password
* The Capsule has been shipped to the wrong address, and requires receiver update

Once a Capsule has been properly “shipped” with CPaS (using the example above, it is held within the fulfillment center with proper package information), two options exist:

* the “shipped” Capsule may have its shipment options modified by the package manager
* The “receiver” may accept the package, given the proper package requirements are passed

When the second option occurs (the receiver accepts the package), the CPaS shipping process is completed. The receiver can opt into accepting the Capsule NFT itself, or redeeming the Capsule, directly receiving the assets. Extra programmatic steps may be added onto the redemption of the Capsule in a user's hands.

***

Further Capsule Relay documentation can be found [here](/protocol-overview/packaging-and-shipping/capsule-relay).

Capsule Packaging and Shipping code documentation can be found [here](/protocol-overview/developer-walkthroughs/postoffice.sol).

You can learn more about Capsule by visiting our [website](https://capsulenft.com/), using our [application](https://app.capsulenft.com), following our [Twitter](https://twitter.com/capsulenft), or [joining the Capsule community on Discord.](https://discord.gg/capsulenft)


# Capsule Redemption Page

### Introduction

The Capsule Redemption Page is a user-friendly web interface that serves as a gateway for recipients to redeem their assets within the Capsule Packaging and Shipping (CPaS) ecosystem. It provides a seamless and secure method for users to claim their assets and interact with the CPaS ecosystem. The page also enables users to preview and verify ownership of the shipment with its contained assets.

The Capsule Redemption Page is also tied directly to the Capsule Relay, if it is selected as the recipient, and will allow for users to redeem assets without signing into their wallet, creating a transaction, or paying gas fees.

### How it Works

After a shipment is created, a user is given two (only one if no password is attached to the transaction) important pieces of information:

* a link (similar to [https://app.capsulenft.com/redeem/ethereum/cc/55](https://app.capsulenft.com/redeem/55))
* a password (optional - a randomized string of characters)

With these pieces of information, the receiver is able to pick up the transferred assets, so long as the receiver meets the specified package conditions by the sender. In practice, this means digital assets can now be sent over email, on Twitter or Discord as giveaways (with the password a riddle), or physically, on branded business cards with QR codes linking to the redemption page. This massively increases reach for digital asset pickup, and combined with no-wallet, one-click redemption, allows any user to take their first steps in cryptocurrency without trouble.

Moreover, the flexibility provided by the URL and password system ensures that users have complete control over their assets, enabling them to manage and move them according to their specific preferences and requirements. A user may be sent a package through email, and choose not to redeem it until they are ready to create their own wallet and take custody of their own funds.

### Advertisement

While a user is waiting for their redemption transaction to be confirmed on-chain, there is a large lag-time between redemption and 'true acceptance' (on-chain finality). During this period, as with any other Dapp in crypto, users stare at the web page and wait for the completion of the transaction. This massive market of users have the ability to view any advertisement for a prolonged period of time.

The Capsule Redemption Page is entirely customizable to any brand's identity, including graphics, video content, and other brand elements. This gives anyone the opportunity to create a unique, immersive experience for users, aligning brand with cutting-edge technology.

More information on advertising with Capsule view [here](/collaboration/advertising).

### Partnership

As specified above, the Capsule Redemption Page is entirely customizable to any project, including graphics, video content, and other brand elements.

If you are interested in partnering with Capsule to create your own streamlined shipments/activations, view [here](/collaboration/partnership).


# Capsule Relay

### Introduction

The Capsule Relay is an off-chain API service that operates within the Capsule Packaging and Shipping (CPaS) ecosystem. It provides a secure and efficient way to transfer assets without requiring users to pay gas fees. The Capsule Relay acts as an intermediary during the transaction process, facilitating gasless asset transfers and ensuring the integrity of the transactions.&#x20;

### Capsule Relay in the CPaS Ecosystem

In the context of the Capsule Packaging and Shipping ecosystem, the Capsule Relay plays a vital role in enabling gasless asset transfers. When creating a shipment using CPaS, the sender can choose to designate the Capsule Relay as the recipient address. This allows the recipient to accept the shipment without the need for native chain gas or funds in their wallet. By leveraging the Capsule Relay, users can bypass the gas requirements typically associated with on-chain transactions.

Additionally, shipments sent through the Capsule Relay are MEV resistant - meaning that no user can front-run a gasless relay transaction.

### Benefits of the Capsule Relay in CPaS

The Capsule Relay offers several benefits to users within the Capsule Packaging and Shipping ecosystem:

1. **Gasless Asset Transfers**: With the Capsule Relay, users can send and receive assets without the need for ETH or other native chain tokens to cover gas fees. This eliminates the barrier of entry for users who may not have sufficient funds.
2. **Convenient Asset Redemption**: Once a shipment is sent using CPaS, the recipient can easily redeem the assets by initiating a Capsule Relay transaction without requiring wallet sign-in to any address on-chain.
3. **Off-Chain Transaction Conditions**: The Capsule Relay processes transactions off-chain, meaning that any off-chain condition can be added to the redemption process - without increasing gas cost. This greatly extends the conditions for on-chain asset redemption, potentially linking shipments to real-world events, and allowing for unique physical-digital asset transfers such as trading cards or conference POAPs.

### Using the Capsule Relay

Interacting with the Capsule Relay is as simple as setting the on-chain address as the recipient for the CPaS shipment. The relay will wait for off-chain conditions to trigger in order to create an on-chain transfer shipping the assets to the proper address (or canceling the transaction).

As such, all Capsule Relay functionality is entirely opt-innable. Any user who wishes to use the ecosystem without the Relay must simply set the address of the receiver during the creation of the shipment, or modify the shipment information at any time before redemption.

### Capsule Relay Future

The ultimate goal for the Capsule Relay is to decentralize the means of 'gasless transfer' by incentivizing a vast network of Capsule Node runners, who will exist around the world supporting transfers on any blockchain. We name this eventual future the **Capsule Network**, and will support many other shipment benefits, such as: off-chain conditional shipment, automated on-chain transfer, extra security features, and bridging/creation of shipments cross-chain.


# Example Integration

The Capsule Packaging and Shipping Protocol is highly abstractable for any developer or user. Below, we outline an example marketing outreach created by a DeFi protocol seeking to onboard its users to a new chain deployment.

### Step by Step - Example Integration

1. Multiple shipments are created on a Capsule supported chain containing currency/pool tokens supported by the DeFi protocol.
   * These shipments are created with gasless pickup, meaning a redeeming user does **not even need any currency, or even a wallet on the new chain.**
   * A shipment may include
     * 10 pool tokens and some native chain gas (for interaction)
     * Multiple different pool tokens batched, with native chain gas
     * Any combination of tokens/native gas
2. Targeted users are sent a link (for example, [app.capsulenft.com/redeem/optimism/cc/40](https://app.capsulenft.com/redeem/62)) through any avenue (Email, Discord, Twitter, LinkedIn, DeBank)
   * Users could be targeted by
     * TVL on the native DeFi protocol chain
     * X total amount in a competing DeFi product
     * Their wallet held a certain amount of assets
     * Any other on or off-chain requirement...
3. Users click on the link, and are sent to the redemption page
   * Your Capsule Redemption Page can be specially branded, with high-agency ads
4. Users redeem assets to any wallet of their choosing (or one is generated for them)
   * Gasless Redemption is one-click and supports any of the following chains
     * Ethereum
     * Optimism
     * (Reach out so we can support your chain!)
5. The transaction is sent and confirmed through our backend, and the user receives the funds to the input wallet.
   * The user now has
     * Perfectly onboarded to the new chain
     * Given a grant of shipped tokens to their wallet
     * A small amount of gas for your protocol's DeFi usage
6. Your unique Capsule Redemption Page can now link a user out directly to your protocol's website for pool utilization/deposit/stats.

> A user has now gone from **absolutely no interaction with a new chain** to **holding tokens, with gas to interact with your protocol.** A wallet is not even required at the point of pickup.

### How Integration Works

The way it works is by placing any user’s assets inside of a “shipping container” of sorts, called a Capsule. Capsules are special NFTs that can hold any amount of any asset “inside” of them, functioning as programmable wrappers.

Once a Capsule is created for shipment, it is sent to an escrow contract where only the user and receiver have access to the transacted funds. From here, a transaction can be further programmed, accepted, or even canceled by either party.

Shipped Capsules have dynamic metadata which updates as the terms for shipment change, and can be viewed on any NFT exchange with the latest transaction information.

Receiving users access a unique page to receive their assets, called the Capsule Redemption Page, which appears similar to the following ([https://app.capsulenft.com/redeem/optimism/cc/40](https://app.capsulenft.com/redeem/55)). The receiver is prompted to input a password, verified on-chain, which gates acceptance of the assets. Further off-chain specifications can be added to this process.

Acceptance of the assets is entirely gasless, and is powered by the Capsule Relay, an off-chain API which transfers assets to users on their behalf. The Capsule Relay is a service provided by the Capsule team to extend off-chain transaction capabilities and to remove gas costs for a receiver. Users can bypass the Capsule Relay by simply setting the receiving address for the shipment themselves, although if the user’s account is not known beforehand, it is highly recommended for the user to utilize the Capsule Relay, as the package can be sniped through MEV attacks (packages shipped through the Capsule Relay are MEV-attack resistant) and will cost extra gas fees.

Given the correct parameters are input, the receiver accepts the assets with a single click, sending to either: their own wallet (signing in with a browser extension), a wallet of their choosing (no need to sign in), or sending to a completely new wallet (immediate, non-custodial creation of a wallet for the user). No transaction or signature is required.

Once the Capsule Relay transfer transaction is complete, the user obtains the shipped assets and the Capsule Package NFT utilized in shipping is permanently burned. Capsule Relay transactions can occur on any chain supported by the Capsule Network, meaning users can even create redemption transactions on one chain, and they will be processed on a separate chain.

***

You can learn more about Capsule by visiting our [website](https://capsulenft.com/), using our [application](https://app.capsulenft.com), following our [Twitter](https://twitter.com/capsulenft), or [joining the Capsule community on Discord.](https://discord.gg/capsulenft)


# Use Cases

### Use Cases

Capsule Packaging and Shipping (CPaS) offers a wide range of use cases that address key challenges in the evolving crypto ecosystem such as: innovative solutions for secure asset transfer, reliable shipment management, and enhanced user experience. We present some prominent use cases and their significance in the space.

1. [Sending Assets to a Compromised Address](/protocol-overview/use-cases/compromised-address): This use case demonstrates how CPaS ensures asset protection even when the recipient's address is compromised. By attaching a hashed password to the shipment, CPaS prevents unauthorized access to assets, safeguarding both the sender and the intended recipient.
2. [Shipment Acceptance Without Native Chain Gas](/protocol-overview/use-cases/gasless-pickup): CPaS enables asset senders to pay the transaction fees in ERC-20 tokens, instead of ETH (or for redemption, nothing at all). This use case eliminates the need for the recipient to have ETH in their wallet, making it more convenient to accept shipments and reducing the entry barriers for new users.
3. [Token Gate Shipment Acceptance by Asset Key](/protocol-overview/use-cases/gate-shipments): In this use case, CPaS leverages asset keys, such as NFTs or specific IDs, to restrict shipment acceptance. It ensures that the recipient possesses the required asset key before accepting the shipment, enabling secure and targeted asset delivery for various scenarios like company security setups and community giveaways.
4. [Sending Time Locked Assets](/protocol-overview/use-cases/time-locking-shipments): CPaS allows users to send time-locked assets that can only be accepted after a specific date has passed. This use case ensures that assets remain locked until a predetermined time, providing enhanced security and facilitating automated distribution processes.
5. ["Walletless/Unknown Pickup" Shipment Acceptance](/protocol-overview/use-cases/walletless-pickup): With CPaS, users can create shipments that can be picked up by designated addresses, even if the recipient's wallet does not exist yet. This use case streamlines the process of asset delivery to new or unknown addresses, eliminating the need for the recipient to have native chain tokens during the acceptance process.
6. [Multiple Signature Gated Shipment Acceptance](/protocol-overview/use-cases/whitelisted-shipment): CPaS can extend to support multi-signature requirements for shipment acceptance, adding an extra layer of security and accountability. This use case allows asset senders to define the number of required signatures from a set of addresses, ensuring that assets can only be redeemed when specific conditions are met.
7. [Sending Assets to a Wrong Address](/protocol-overview/use-cases/wrong-address): By leveraging CPaS, users can rectify the common mistake of sending assets to the wrong address. The system allows for easy correction and redirection of shipments, preventing asset loss and ensuring that assets reach the intended recipient without any disruption.

Each of these use cases showcases the versatility and practicality of CPaS in addressing critical pain points in asset transfer. By combining security measures, flexible acceptance conditions, and streamlined processes, Capsule Packaging and Shipping empowers users with a robust and efficient framework for managing asset transfers in the nascent crypto ecosystem.


# Compromised Address

<figure><img src="/files/8aQF7pLb7TJIDtGCXvOB" alt=""><figcaption></figcaption></figure>

The above figure displays an example of a user at address **0x…1** (Bob) attempting to send assets to user **0x…2** (Alice). But there’s an issue: Alice’s keys have been compromised and a bad actor has access to all of Alice’s funds.

Upon creation of the Capsule Shipment, Bob specifies to send his Capsuled assets to **0x…2** (Alice) – but Bob has also attached a password, “Hunter2”. On-chain, this password is stored within the Capsule Fulfillment Center as a hashed value of the password and a salt. Without the password, Alice is unable to properly accept this shipment and receive her Capsuled assets.

Thankfully, even though Alice’s keys have been compromised, the hacker is still unable to access Alice’s shipment: he does not know the password attached to the shipment coming to Alice. As such, Alice simply lets Bob know that her account has been compromised, and for Bob to change the shipment to a new address, **0x…3**, which Alice has properly secured. Bob does so, and Alice is able to properly accept the assets shipped at address **0x…3**. Bob may even change the shipment acceptance password, should he like. The hacker is unable to receive Alice’s shipped assets at **0x…2** or at **0x…3**. No assets were lost due to a compromised address, even though the address was correct.&#x20;

If this transaction were to have been broadcasted and accepted as is (without using CPaS, directly from **0x…1** to **0x…2**), there is an overwhelming chance that all assets are lost to Alice’s hacker – who can steal all of the assets sent to her address at **0x…2**. This again results in a loss for Bob (who owned the funds) and Alice (who has her funds stolen). Additionally, had multiple assets been bundled within a Capsule - this would have saved multiple assets from being lost. This situation can also be easily averted by using CPaS.


# Gasless Pickup

<figure><img src="/files/cHK5HD1eg09ZPU3pfYSS" alt=""><figcaption></figcaption></figure>

The above figure displays an example of a user at address **0x…1** (Bob) attempting to send assets to user **0x…2** (Earl).

Bob wants to send a large amount of ERC-20 tokens to Earl, but does not have enough ETH to pay gas for the transaction. Normally, Bob has no other choice but to send ETH to his wallet in order to create and send the transaction. His funds are essentially locked in his wallet. With CPaS, Bob has the ability to pay a certain amount of ERC-20 tokens instead of ETH as gas – where the Capsule Relay will pay the ETH gas fee in Bob’s stead.

In addition to the shipment fee paid in ERC-20 tokens, Bob can also pay an additional fee to ensure that the acceptance transaction fee will also be paid by the Capsule Fulfillment Center. In this case, Earl does not even require ETH within his wallet in order to accept the shipment: Earl would just need to sign the acceptance transaction over to the Capsule Fulfillment Center for payment.

In the future, different tokens may also be utilized for shipment fee payment. Solutions which simplify this process, such as EIP-4337, are of high priority for implementation.


# Gate Shipments

<figure><img src="/files/2bz28xeiqQWU5uZAhru8" alt=""><figcaption></figcaption></figure>

The above figure displays an example of a user at address **0x…1** (Bob) attempting to send assets to user **0x…3** (Carl). Carl is an employee at Bob’s company - Bob issues a specific asset to all of his co-workers - a KEY NFT. Carl’s specific NFT is ID #23, and Bob wants to ensure that once Carl has received his Key he will be able to receive his company asset pack. Potentially, Bob might send the KEY #23 to Carl through CPaS.

Upon creation of the Capsule Shipment, Bob specifies to send his Capsuled assets to **0x…3** (Carl) – and Bob has also attached a password. Without Carl properly owning KEY #23, Carl is unable to properly accept this shipment and receive his company asset pack. Bob may be waiting until Carl has properly passed onboarding, or anything of the sort. In the case where Carl does not join the company, Bob can simply cancel the shipment and receive Carl’s company asset pack back.

Thankfully, Carl does pass onboarding, and receives his KEY #23 through a separate transaction through CPaS. As such, Carl simply accepts the package holding KEY #23 in his wallet and receives his Capsuled asset pack.

This example speaks to a company-security setup, but this can easily be mapped alongside NFT collections and community giveaways, where assets are given away to specific ID holders.

***

If this interests you view our developer examples of [Conditional Redemption](/protocol-overview/developer-walkthroughs/code-examples/conditional-redemption) and [Conditional Shipment](/protocol-overview/developer-walkthroughs/code-examples/conditional-shipment).


# Time Locking Shipments

<figure><img src="/files/W7o396x2NCbC3dR2g5Zo" alt=""><figcaption></figcaption></figure>

The above figure displays an example of a user at address **0x…1** (Bob) attempting to send assets to user **0x…2** (Carl), acceptable only after a specific date has passed.

Upon creation of the Capsule Shipment, Bob specifies to send his Capsuled assets to **0x…2** (Carl) only acceptable after January 1st, 2026. Bob has also attached a password. Until the latest block’s timestamp has passed the timestamp for January 1st, 2026, Carl will be unable to properly accept this shipment. At any time, Bob still has the ability to cancel the shipment, remove the timelock, or directly send the assets to Carl.

Thankfully, humanity survives to January 1st, 2026, and Carl is able to accept Bob’s assets through CPaS.


# Walletless Pickup

<figure><img src="/files/ch4xrzmWvPr3tHwbtTAn" alt=""><figcaption></figcaption></figure>

The above figure displays an example of a user at address **0x…1** (Bob) attempting to send assets to a new account, devoid of ETH. Bob does not yet know this account’s public key, as he may not have created it yet.

Using CPaS, Bob creates a shipment which can be picked up by the Capsule Relay (the receiver address parameter is set to the Capsule Relay address) with a password attached. Bob also pays gas costs for the shipment transaction (Bob eventually could pay in ERC-20 token, as shown in the previous example, [Gasless Pickup](/protocol-overview/use-cases/gasless-pickup)), in order for the recipient to accept the package without ETH in his wallet.

> An extra check can be added here, where Bob’s shipping account can confirm that the new wallet is actually under Bob’s control - but this is optional.

After shipment, Bob can visit the Capsule Redemption Page to prompt the Capsule Relay to redeem the assets on his behalf to the new account. Once the acceptance transaction is confirmed, Bob now has received tokens in his new address without requiring any native chain gas (note, the Capsule Relay can also supply native gas alongside a redemption). Bob’s new address may never require native chain tokens at all, if it continues to utilize the CPaS to ship assets.

Note that in this example, there is no privacy over the pickup of the funds. At all times, the receiving wallet can be traced back to the shipping wallet (asset creator). Taking ERC-20 tokens as an example, a blockchain explorer would signify assets going from shipper, to Capsule Protection Contract (as they are stored within a Capsule), to new address.


# Whitelisted Shipment

<figure><img src="/files/XXkpx3XLbD97EbgcmAeL" alt=""><figcaption></figcaption></figure>

The above figure displays an example of a user at address **0x…1** (Bob) attempting to send assets to user **0x…3** (Daniella). Bob is sending a large amount of funds, and wants to ensure that multiple checks are in place before the asset Capsule can be accepted. As such, Bob requires 6/10 signatures to be confirmed from 10 different addresses: **0x…10**, **0x…11**, **0x…12**, and so on.

Daniella cannot claim the assets until at least 6 signatures are attached to her acceptance transaction. Once enough signatures have been assembled for the shipment, Daniella properly accepts the shipment and redeems for the funds.&#x20;

Of course, in this situation or any other, as many checks and balances can be added to the shipment as required, including password, time lock, asset key, signatures, and so on.

***

If this interests you view our developer example of a [Whitelisted Redemption contract](/protocol-overview/developer-walkthroughs/code-examples/whitelisted-redemption).


# Wrong Address

<figure><img src="/files/YFKS6SCLV6dDLigO6Y4s" alt=""><figcaption></figcaption></figure>

The above figure displays an example of a user at address **0x…1** (Bob) attempting to send assets to user **0x…3** (Alice). Upon creation of the Capsule Shipment, Bob specifies to send his assets to **0x…2** – Bob has made a mistake inputting Alice’s address. This is no problem for Bob or Alice – Alice simply lets Bob know he has made a mistake, and he should update the shipment to ship to address **0x…3** instead (her address). Bob does so, and Alice is able to properly accept the assets shipped. No assets were lost due to an incorrect shipment address.&#x20;

If this transaction were to have been broadcasted and accepted as is (without using CPaS, directly from **0x…1** to **0x…2**), all assets are lost – the assets at **0x…2** are inaccessible by both Bob and Alice. This results in a loss for Bob (who owned the funds) and Alice (who expected the funds). Additionally, had multiple assets been bundled within a Capsule - this would have saved multiple assets from being lost (assuming the incorrect address was input multiple times). These situations can be easily averted by using CPaS.


# Future


# Capsule Invoice

TBD


# Capsule Network

TBD


# Lightning Bridging

TBD


# Developer Walkthroughs

The Capsule Ecosystem offers developers a powerful framework for creating customized solutions in the decentralized packaging and shipping domain.

Utilizing the PostOffice contract suite provides developers a proven and reliable solution for securely shipping assets. The contract suite incorporates essential security measures, such as password protection and unlock timestamps, ensuring the integrity and privacy of packages.

The PostOffice contract suite was built to enable developers to customize and extend its functionalities to meet specific use cases. With the flexibility offered by the contract suite, developers can easily add new features, business rules, and conditions to tailor the package management process to their application's requirements. This composibility empowers developers to create unique user experiences and build innovative solutions that cater to their target audience.


# PostOffice.sol

### Overview

The `PostOffice.sol` contract facilitates the decentralized packaging and shipping of assets within Capsules. It provides a secure and transparent way to create, ship, and redeem packages.

The shipper, most often the package manager (unless an intermediary contract ships on behalf of users), creates packages by encapsulating assets, setting security measures such as password protection and unlock timestamps, and assigning a receiver. Packages can then be shipped or delivered directly to the receiver, manually or through the Capsule Relay.

Recipients can pick up packages by verifying their identity and password, or they can choose to redeem the Capsule NFT package itself and transfer the contents to their address.

`PostOffice.sol` also supports functionalities like canceling packages and updating package details such as the asset key, package manager, password hash, receiver, and unlock timestamp.&#x20;

Overall, the `PostOffice.sol` contract streamlines the process of package management, enhances security, and enables efficient and reliable package shipping and delivery in a decentralized manner.

> [View PostOffice.sol verified proxy contract code on Etherscan](https://etherscan.io/address/0x3b61403ade9240699042d3663814a3679dc15d56#code)

## CPaS: Important Methods

### **Function: shipPackage**

**Parameters:**

* **packageContent\_**: The content of the package encapsulated in a `CapsuleContent` struct.
  * `packageContent_.capsuleType`: The type of the capsule representing the package.
  * `packageContent_.metadataURI`: The URI string representing the metadata of the package.
* **securityInfo\_**: The security information of the package encapsulated in a `SecurityInfo` struct.
  * `securityInfo_.unlockTimestamp`: The timestamp indicating when the package can be unlocked. Set to `0` for any time.
  * `securityInfo_.keyAddress`: The address of the ERC721 collection used as the asset key. Set to `address(0)` if not applicable.
  * `securityInfo_.keyId`: The ID of the specific ERC721 token within the asset key collection. Set to `type(uint256).max` for any NFT in the collection.
  * `securityInfo_.passwordHash`: The hashed password used to protect the package. Highly reccomended.
* **receiver\_**: The address of the recipient who will receive the package.

**Returns:**

* **PackageID (uint256)**: The identifier assigned to the shipped package.

**Description:** Invoked by the package manager to initiate the shipping process for a single package. The function encapsulates the given assets into the package, secures it with the password hash, and sets the unlock timestamp.

### **Function: shipPackages**

**Parameters:**

* **packageContent\_**: An array of `CapsuleContent` structs representing the content of each package.
  * `packageContent_[].capsuleType`: The type of the capsule representing the package.
  * `packageContent_[].metadataURI`: The URI string representing the metadata of the package.
* **securityInfo\_**: An array of `SecurityInfo` structs representing the security information of each package.
  * `securityInfo_[].unlockTimestamp`: The timestamp indicating when each package can be unlocked. Set to `0` for any time.
  * `securityInfo_[].keyAddress`: The address of the ERC721 collection used as the asset key for each package. Set to `address(0)` if not applicable.
  * `securityInfo_[].keyId`: The ID of the specific ERC721 token within the asset key collection for each package. Set to `type(uint256).max` if not applicable.
  * `securityInfo_[].passwordHash`: The hashed password used to protect each package. Set to `bytes32(0)` if not applicable.
* **receiver\_**: An array of recipient addresses for each package.

**Returns:**

* **\_packageIds (uint256\[])**: An array of `uint256` values representing the identifiers assigned to the shipped packages.

**Description:** Allows the package manager to initiate the shipping process for multiple packages in one transaction. Essentially a batch version of the `shipPackage` function for efficiency.

### **Function: pickup**

**Parameters:**

* **packageId\_**: The identifier of the package to be picked up.
* **rawPassword\_**: The plain text password provided by the shipper. Empty string if no password.
* **salt\_**: The plain text salt provided by the shipper. Empty string if no password.
* **shouldRedeem\_**: A boolean flag indicating whether the package should be unwrapped or received as is.
  * `true`: Unwrap the package by burning the Capsule NFT and transferring the contents to the caller.
  * `false`: Receive the Capsule NFT without unwrapping. The Capsule NFT can be redeemed later to receive the contents.

**Description:** Called by the package receiver to pick up a package. Before delivering the package, this function ensures that the caller is the designated receiver and passes all the necessary security measures.

### **Function: cancelPackage**

**Parameters:**

* **packageId\_**: The identifier of the package to cancel.
* **contentReceiver\_**: The address that will receive the contents of the package.

**Description:** Allows the package manager to cancel a package shipment. It is typically used when the delivery or receipt of a package needs to be stopped or canceled for any reason.

### **Function: deliverPackage**

**Parameters:**

* **packageId\_**: The identifier of the package to deliver.

**Description:** Allows the package manager to deliver a package directly to the designated receiver, bypassing all security measures. This function is typically used for expedited deliveries or in special circumstances where it is necessary to override the usual security checks.

### **Function: redeemPackage**

**Parameters:**

* `packageId_`: The identifier for the package to be redeemed.
* `receiver_`: The receiver's address.

**Description:** The `redeemPackage` function is used to redeem a package by unwrapping it, burning the Capsule NFT, and transferring the package contents to the specified `receiver_` address.

This function is applicable in two cases:

1. When the package has been delivered to the recipient, and the recipient wants to unwrap the package by redeeming the Capsule NFT.
2. When the recipient has accepted the package at the PostOffice without redeeming it, and now wants to unwrap it.

### **Function: securityInfo**

**Parameters:**

* **packageId\_**: The identifier of the package.

**Description:** Allows users to retrieve the security information associated with a package. This function is useful when conducting security checks or verifying the security measures applied to a specific package. It allows users to obtain information about the unlock timestamp, password hash, and other security-related details of the package.

## CPaS: Package Modification

### Function: updatePackageAssetKey

**Parameters:**

* **packageId\_**: The identifier of the package.
* **newKeyAddress\_**: The new address of the ERC721 collection used as the asset key.
* **newKeyId\_**: The new ID of the specific ERC721 token within the asset key collection.

**Description:** Allows the package manager to update the asset key of a specific package. It takes in the `packageId_`, `newKeyAddress_`, and `newKeyId_` parameters, and updates the package's security information with the new asset key address and ID.

### Function: updatePackageManager

**Parameters:**

* **packageId\_**: The identifier of the package.
* **newPackageManager\_**: The new address of the package manager.

**Description**: Allows the package manager to update the package manager of a specific package. It takes in the `packageId_` and `newPackageManager_` parameters, and updates the package's manager address with the new value.

This function is useful when the package manager needs to transfer the management rights of a package to a different address, ensuring proper control and authorization over the package.

### Function: updatePackagePasswordHash

**Parameters:**

* **packageId\_**: The identifier of the package.
* **newPasswordHash\_**: The new password hash.

**Description:** Allows the package manager to update the password hash of a specific package. It takes in the `packageId_` and `newPasswordHash_` parameters, and updates the package's security information with the new password hash.

This function is useful when the package manager wants to change the password used to protect the package, providing enhanced security and control over package access.

### Function: updatePackageReceiver

**Parameters:**

* **packageId\_**: The identifier of the package.
* **newReceiver\_**: The new receiver address.

**Description**: Allows the package manager to update the receiver of a specific package. It takes in the `packageId_` and `newReceiver_` parameters, and updates the package's receiver address with the new value.

This function is useful when there is a need to change the recipient of a package, ensuring that it is delivered to the correct address.

### Function: updatePackageUnlockTimestamp

**Parameters:**

* **packageId\_**: The identifier of the package.
* **newUnlockTimestamp\_**: The new unlock timestamp.

**Description:** Allows the package manager to update the unlock timestamp of a specific package. It takes in the `packageId_` and `newUnlockTimestamp_` parameters, and updates the package's security information with the new unlock timestamp.

This function is useful when there is a need to change the unlock time for a package, providing control over when the recipient can access its contents.


# Code Examples

The Capsule Shipping contracts serve as a highly abstracted and modular solution for packaging and shipping assets within the blockchain ecosystem. Its design enables developers to create customized user interfaces, additional business logic, and complementary smart contracts that interact with the PostOffice.

With the `PostOffice.sol` contract as the core infrastructure, anyone can extend its functionality to suit their specific use cases. One can build wrapper contracts that add conditions for package redemption or shipment, leverage external data sources such as oracles to enforce rules and requirements, or anything more. Presented are example wrapper contracts that can be tailored to implement various constraints, pricing models, or eligibility criteria for package handling.


# Conditional Redemption

### Conditional On-Chain Package Redemption

As an example, we can create a wrapper contract that will only allow users to redeem a package if the price of Ethereum has reached $3,000.

We do so by using a Chainlink price oracle to fetch the last recorded price of ETH/USDC.

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

import "./PostOffice.sol";
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

contract ConditionalDeliveryService {
    PostOffice public postOffice;
    AggregatorV3Interface public chainlinkAggregator;

    uint8 public constant USDC_DECIMALS = 6;
    uint256 public constant CHAINLINK_DECIMALS = 8;
    uint256 public constant TO_SCALE = 10 ** (CHAINLINK_DECIMALS - USDC_DECIMALS);
    // The target price ($3,000)
    uint256 public constant TARGET_PRICE = 3000 * 10 ** USDC_DECIMALS;

    constructor(address postOfficeAddress_, address chainlinkAggregator_) {
        postOffice = PostOffice(postOfficeAddress_);
        chainlinkAggregator = AggregatorV3Interface(chainlinkAggregator_);
    }

    function shipPackage(
        CapsuleData.CapsuleContent calldata packageContent_,
        PostOffice.SecurityInfo calldata securityInfo_,
        address receiver_
    ) external returns (uint256) {
        return postOffice.shipPackage(packageContent_, securityInfo_, receiver_);
    }

    function pickupPackageIfEthAbove3k(
        uint256 packageId_,
        string calldata rawPassword_,
        string calldata salt_,
        bool shouldRedeem_
    ) external {
        (, int256 _price, , , ) = chainlinkAggregator.latestRoundData();

        uint256 priceInUSDC = uint256(_price) / TO_SCALE;

        require(priceInUSDC >= TARGET_PRICE, "ETH price is not above 3000 USDC");
        postOffice.pickup(packageId_, rawPassword_, salt_, shouldRedeem_);
    }
}
```

Here's what the `ConditionalDeliveryService` contract does:

* **shipPackage**: This function simply wraps the `shipPackage` function from the `PostOffice`.
* **redeemPackageIfEthAbove3k**: This function allows a package to be redeemed only if the price of ETH is above 3000 USDC. It fetches the latest ETH/USDC pair data from a Chainlink price oracle, and then compares it with the target price. If the returned price is above 3000, the package will be redeemed.

The `ConditionalDeliveryService` contract allows users to create packages that can only be redeemed if the price of ETH is above a certain threshold ($3,000).


# Conditional Shipment

### Conditional On-Chain Package Shipment

As an example, we can create a wrapper contract that will only allow users to ship a package if more than 1,000,000 USDC is included.

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

import "./PostOffice.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

contract MillionDollarShipmentService {
    using SafeERC20 for IERC20;

    PostOffice public postOffice;
    IERC20 public usdcToken;

    uint8 public constant USDC_DECIMALS = 6;
    uint256 public constant MIN_PACKAGE_VALUE = 1_000_000 * 10 ** USDC_DECIMALS;

    constructor(address _postOfficeAddress, address _usdcTokenAddress) {
        postOffice = PostOffice(_postOfficeAddress);
        usdcToken = IERC20(_usdcTokenAddress);
    }

    function createMillionDollarPackage(
        CapsuleData.CapsuleContent calldata packageContent_,
        PostOffice.SecurityInfo calldata securityInfo_,
        address receiver_,
        uint256 usdcAmount_
    ) external returns (uint256) {
        require(usdcAmount_ >= MIN_PACKAGE_VALUE, "Package value is below 1 million USDC");

        usdcToken.safeTransferFrom(msg.sender, address(this), usdcAmount_);

        return postOffice.shipPackage(packageContent_, securityInfo_, receiver_);
    }

    function pickup(
        uint256 packageId_,
        string calldata rawPassword_,
        string calldata salt_,
        bool shouldRedeem_
    ) external {
        postOffice.pickup(packageId_, rawPassword_, salt_, shouldRedeem_);
    }
}
```

`MillionDollarShipmentService` allows users to create a unique shipment by providing more than 1,000,000 USDC tokens. The `createMillionDollarPackage` method creates the package by transferring the USDC tokens from the sender to the contract if the million dollar criteria is met, and then invokes the `shipPackage` method from the `PostOffice` contract to initiate the shipment process.


# Shipment POAPs

## Shipment POAPs

We can write a contract, `ApePackageCreator`, that tacks on an `ApePOAP` NFT to any user shipment that includes a Bored Ape Yacht Club NFT to another user via the PostOffice contract.

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";
import "./PostOffice.sol";
import "./ApePOAP.sol";

interface CapsuleData {
    enum CapsuleType {
        SIMPLE,
        ERC20,
        ERC721,
        ERC1155
    }

    struct CapsuleContent {
        CapsuleType capsuleType;
        address[] tokenAddresses;
        uint256[] tokenIds;
        uint256[] amounts;
        string tokenURI;
    }
}

contract ApePackageCreator is ERC721Holder {
    PostOffice private postOffice;
    ApePOAP private apePOAP;
    IERC721 private boredApe;

    // replace these with the actual contract addresses
    address constant POST_OFFICE_ADDRESS = 0x3b61403AdE9240699042D3663814a3679dc15d56;
    address constant APE_POAP_ADDRESS = 0xC67F5E3a5B697AE004Edd8F84925189a81c6DC4b;
    address constant BORED_APE_ADDRESS = 0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D;

    constructor() {
        postOffice = PostOffice(POST_OFFICE_ADDRESS);
        apePOAP = ApePOAP(APE_POAP_ADDRESS);
        boredApe = IERC721(BORED_APE_ADDRESS);
    }

    function createApePackage(
        address to_,
        uint256 tokenId,
        bytes32 passwordHash_,
        uint64 unlockTimestamp_
    ) external returns (uint256) {
        // Transfer Bored Ape from user to this contract
        boredApe.safeTransferFrom(msg.sender, address(this), tokenId);

        // Mint a new Ape POAP
        apePOAP.mint(address(this));

        address[] memory _tokenAddresses = new address[](2);
        _tokenAddresses[0] = address(boredApe);
        _tokenAddresses[1] = address(apePOAP);

        uint256[] memory _tokenIds = new uint256[](2);
        _tokenIds[0] = tokenId;
        _tokenIds[1] = apePOAP.tokenOfOwnerByIndex(address(this), apePOAP.balanceOf(address(this)) - 1);

        CapsuleData.CapsuleContent memory _packageContent = CapsuleData.CapsuleContent({
            capsuleType: CapsuleData.CapsuleType.ERC721,
            tokenAddresses: _tokenAddresses,
            tokenIds: _tokenIds,
            amounts: new uint256[](2),
            tokenURI: "https://apepoap.io/metadata"
        });

        SecurityInfo memory _securityInfo = SecurityInfo({
            passwordHash: passwordHash_,
            unlockTimestamp: unlockTimestamp_,
            keyAddress: address(0),
            keyId: 0
        });

        // ship package through PostOffice
        uint256 packageId = postOffice.shipPackage(_packageContent, _securityInfo, to_);

        return packageId;
    }

    function pickup(
        uint256 packageId_,
        string calldata rawPassword_,
        string calldata salt_,
        bool shouldRedeem_
    ) external {
        postOffice.pickup(packageId_, rawPassword_, salt_, shouldRedeem_);
    }
}
```

`ApePackageCreator` accepts the recipient's address, the Bored Ape's token ID, a security hash, and an unlock timestamp. It then transfers the Bored Ape NFT from the sender to itself, mints a new `ApePOAP` NFT for the sender, and creates a new package in the `PostOffice` contract containing both NFTs. The new package can then be redeemed by the recipient using the PostOffice's methods.


# Whitelisted Redemption

### Whitelisted Package Redemption

`WhitelistPackageRedemption` provides a simple example of how users can create and redeem packages using the PostOffice contract while enforcing a whitelist requirement for package redemption.

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

import "./PostOffice.sol";

contract WhitelistPackageRedemption {
    PostOffice public postOffice;
    mapping(address => bool) public whitelist;

    constructor(address _postOfficeAddress) {
        postOffice = PostOffice(_postOfficeAddress);
        // Add addresses to the whitelist
        whitelist[address(0x123)] = true;
        whitelist[address(0x456)] = true;
        whitelist[address(0x789)] = true;
        whitelist[address(0xABC)] = true;
        whitelist[address(0xDEF)] = true;
    }

    function shipPackage(
        CapsuleData.CapsuleContent calldata packageContent_,
        PostOffice.SecurityInfo calldata securityInfo_,
        address receiver_
    ) external returns (uint256) {
        return postOffice.shipPackage(packageContent_, securityInfo_, receiver_);
    }

    function pickupPackage(
        uint256 packageId_,
        bytes32 messageHash,
        bytes[] calldata signature_,
        string calldata rawPassword_,
        string calldata salt_,
        bool shouldRedeem_
    ) external {
        uint256 _len = signature_.length;
        require(_len == 5, "Invalid number of signatures");

        // Verify signatures from whitelisted addresses
        for (uint256 i = 0; i < _len; i++) {
            address _signer = verifySignature(messageHash, signature_[i]);
            require(whitelist[_signer], "Invalid signer");
        }
        postOffice.pickup(packageId_, rawPassword_, salt_, shouldRedeem_);
    }

    function verifySignature(bytes32 messageHash_, bytes memory signature_) internal pure returns (address) {
        bytes32 r;
        bytes32 s;
        uint8 v;

        // Split the signature into r, s, and v components
        assembly {
            r := mload(add(signature_, 32))
            s := mload(add(signature_, 64))
            v := byte(0, mload(add(signature_, 96)))
        }
        // Verify and recover the signer's address
        return ecrecover(messageHash_, v, r, s);
    }
}
```

In this contract, users can create packages by calling the `createPackage` function, providing the necessary parameters such as the package manager, receiver, password hash, and asset key. The function will invoke the `shipPackage` method from the PostOffice contract to create the package.

To redeem a package, users need to call the `redeemPackage` function with the package ID, message hash, and an array of signatures. The function will verify the signatures from the whitelisted addresses by calling the `verifySignature` function, and if all signatures are valid, it will invoke the `redeemPackage` method from the PostOffice contract.


# Advertising

## Advertising with Capsule

The Capsule protocol offers a unique and cutting-edge approach to advertising in the cryptocurrency space, capitalizing on the intersection of blockchain technology, digital marketing, and user interaction.

### The Unique Value of Advertising with Capsule

With Capsule, marketers have the opportunity to embed their advertisements directly within the Capsule Packaging and Shipping UI. Advertisements can be included aside the Capsule Redemption Page during the transaction process, allowing the marketer to reach a highly targeted, captive audience.

These advantages lead to extremely high industry retention rates. Additionally, marketers can selectively choose their advertisement placement based on the contents of the user's shipment, allowing for a highly targeted and efficient marketing strategy.

### Benefits of Advertising with Capsule: Why it's Win-Win

One of the unique aspects of advertising with Capsule is the direct benefit to the end-users. The revenue generated from advertisements is utilized to subsidize the gas fees associated with the users' cryptocurrency transactions. This means that as a marketer, your advertisement investment directly contributes to a smoother, more accessible experience for users.

By using advertisements to fund the transaction costs, users can receive and transfer their cryptocurrency assets without any gas fee concerns. This process encourages more users to engage with the product advertised, and leads to a higher user retention rate, thereby offering increased exposure for the product/brand.

By advertising with Capsule, you are not only tapping into a burgeoning market of cryptocurrency users, but you are also contributing to a more accessible and equitable blockchain ecosystem.

***

For advertising opportunities contact <business@capsulenft.com> or [complete this form](https://docs.google.com/forms/d/1knQBx9XVQle0Kv7kWJbJT0TeI7aYXQrRxxwcabUVgVE/edit).


# Partnership

## Partnering with Capsule

Capsule offers a unique opportunity for organizations to reach and engage with a rapidly growing audience in the cryptocurrency space. Our partnerships enable organizations to leverage the innovative Capsule protocol for efficient asset distribution and effective brand engagement.

### The Unique Value of Partnering with Capsule

Our multi-year experience in the cryptocurrency space, along with our successful previous partnerships, is a testament to our expertise in the field. We have worked with a variety of partners at numerous events, both online and in-person, providing their communities with easy access to digital assets.

We provide the tools and resources to ensure our partners succeed in their venture, offering an immersive platform where digital assets can be delivered with ease. With the ability to curate asset packages and provide them gaslessly to users, partnering with Capsule enhances your outreach and marketing strategies.

### How Your Community Benefits from a Capsule Partnership

When you partner with Capsule, your community stands to gain significantly. Our platform offers a smooth user experience, eliminating the need for users to have a pre-existing wallet, which can often be a barrier to onboarding. By leveraging our infrastructure, users can easily pick up assets, facilitating their entry into the cryptocurrency world - on any blockchain.

Furthermore, our ability to distribute assets on a broad scale means that your community can extend its reach far beyond its current boundaries. The convenience offered by Capsule allows users to engage more readily with your assets, enhancing their engagement and fostering a stronger community around your organization.

Join us in revolutionizing the blockchain space, bringing cryptocurrency to a larger audience, and creating a more accessible and inclusive ecosystem.

### Our Partners

We've worked with a plethora of projects, brands, and companies in the cryptocurrency space. If you are interested in joining these companies, reach out at <business@capsulenft.com> or [complete this form](https://docs.google.com/forms/d/1knQBx9XVQle0Kv7kWJbJT0TeI7aYXQrRxxwcabUVgVE/edit).

#### Online Giveaways

(Picture necessary)

#### NFTNYC 2023

![](/files/apNFhj3wi4Canc3ZX14E)

#### NFTNYC 2022

(Picture necessary)

***

For partnership opportunities contact <business@capsulenft.com> or [complete this form](https://docs.google.com/forms/d/1knQBx9XVQle0Kv7kWJbJT0TeI7aYXQrRxxwcabUVgVE/edit).


# Fee Structure

### Capsule Packaging and Shipping

Each Capsule Packaging and Shipping transaction utilizes a Capsule NFT. As such, the cost of a shipment will always be the cost of **Capsule NFT Minting Fee** + **Native Chain Gas Fees**. Capsule Packaging and Shipping transfer fees below **include** the Capsule NFT Minting fee.

Gasless Transfer is a subset of regular transfer, with the recipient of the transaction set to the Capsule Relay.

Modifying a Capsule Packaging and Shipping transfer incurs no fee and only costs native chain gas fees.

<table><thead><tr><th align="center">Action</th><th align="center">Fee Amount</th><th data-hidden>??</th><th data-hidden></th></tr></thead><tbody><tr><td align="center"><strong>Regular Transfer</strong></td><td align="center">0.001 ETH</td><td></td><td></td></tr><tr><td align="center"><strong>Gasless Transfer</strong></td><td align="center">0.001 ETH</td><td></td><td></td></tr><tr><td align="center"><strong>Canceling Transfer</strong></td><td align="center">-</td><td></td><td></td></tr><tr><td align="center"><strong>Rerouting Transfer</strong></td><td align="center">-</td><td></td><td></td></tr><tr><td align="center"><strong>Modifying Transfer Metadata</strong></td><td align="center">-</td><td></td><td></td></tr><tr><td align="center"><strong>Modifying Transfer Timelock</strong></td><td align="center">-</td><td></td><td></td></tr><tr><td align="center"><strong>Modifying Transfer Password</strong></td><td align="center">-</td><td></td><td></td></tr><tr><td align="center"><strong>Modifying Transfer Asset Key/ID</strong></td><td align="center">-</td><td></td><td></td></tr></tbody></table>

### CapsuleNFT

To support infrastructure and overhead, the Capsule Protocol places a small fee on Capsule Collection deployment and Capsule NFT minting.

Fees are equal on every chain deployed (Ethereum mainnet, Optimism).

<table><thead><tr><th align="center">Action</th><th align="center">Fee Amount</th><th data-hidden>??</th><th data-hidden></th></tr></thead><tbody><tr><td align="center"><strong>Capsule Collection Deployment</strong></td><td align="center">0.025 ETH per collection</td><td></td><td></td></tr><tr><td align="center"><strong>Capsule NFT Minting</strong></td><td align="center">0.001 ETH per individual NFT minted</td><td></td><td></td></tr></tbody></table>

{% hint style="info" %}
**NOTE:** Each fee is independent of Ethereum gas fees.
{% endhint %}


# Overview

### **What is the CapsuleNFT Protocol?**

The CapsuleNFT Protocol is a community-driven ecosystem that offers users new and revolutionary ways to interact with NFTs. **The premier application of the CapsuleNFT Protocol is the ability to help users create Capsule NFTs - NFTs that are able to store other tokens within them, which may be redeemed at a later date.**

While storing tokens within NFTs is a concept that has been mostly overlooked, the ability to do so opens up many new exciting opportunities for users within the cryptosphere. To list a few examples:&#x20;

* Creating NFT art that has a baseline value (attributable to the underlying tokens within)&#x20;
* Distributing project tokens through an ‘Initial NFT Offering (INO)’ using a Capsule NFT containing the project tokens&#x20;
* Storing interest-generating tokens (Vesper’s ‘vTokens’, Aave’s ‘aTokens’, etc) within Capsule NFTs to create an interest-generating NFT
* Supporting a metaverse economy

These ideas only scratch the surface of what the CapsuleNFT Protocol can offer. There are a multitude of valuable and unique use cases that have yet to be discovered. It is our hope that providing the crypto community with the CapsuleNFT Protocol will inspire innovation and creativity far into the future of the cryptosphere. If you are interested, please visit the [Collaboration](/collaboration/advertising) section for an elaboration of the listed ideas and more interesting applications imagined by the Capsule team.

*Whether you are an artist, a developer, an entrepreneur or none of the above, we believe anyone* *can find a home within the Capsule ecosystem.*&#x20;

The following documentation is meant to provide users with a technical and functional overview of the CapsuleNFT Protocol and provide guidance on how users can begin interacting with the ecosystem.

### Capsule NFTs

The CapsuleNFT Protocol operates on the Ethereum blockchain and allows users to create token-storing NFTs, known as Capsule NFTs. Capsule NFTs follow the ERC-721 standard; they can be viewed, traded, bought, and sold in the same manner as traditional ERC-721 NFTs. However, there is a key difference — **Capsule NFTs can be redeemed for their underlying tokens**.&#x20;

The process of creating a Capsule NFT is known as *minting*. When using the CapsuleNFT Protocol, users have the option to store tokens within a Capsule NFT at the time of mint and embed the Capsule NFT with artwork. The tokens stored within Capsule NFTs can be ERC-20 tokens, ERC-721 tokens, or ERC-1155 tokens - that's right; you can store an NFT within an NFT. The user is charged a small fee per Capsule NFT minted. After the Capsule NFT is minted, it can be viewed, traded, bought and sold as any ERC-721 NFT could.&#x20;

At anytime, the owner of the Capsule NFT is able to redeem it for the tokens that were stored inside. Redeeming the Capsule NFT for the stored tokens *burns* the Capsule NFT in the process.&#x20;

### Types of Capsule NFTs

The following naming convention is used to describe the various Capsule NFTs that exist. The convention is based on the token(s) that are stored.

<table><thead><tr><th width="150" align="center">Type of Capsule NFT</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">Simple Capsule NFT</td><td align="center">A Capsule NFT that does not store any tokens. It functions as a normal ERC-721 NFT.</td></tr><tr><td align="center">ERC-20 Capsule NFT</td><td align="center">A Capsule NFT that may store any amount of ERC-20 tokens.</td></tr><tr><td align="center">ERC-721 Capsule NFT</td><td align="center">A Capsule NFT that may store any amount of ERC-721 tokens.</td></tr><tr><td align="center">ERC-1155 Capsule NFT</td><td align="center">A Capsule NFT that may store any amount of ERC-1155 tokens.</td></tr></tbody></table>


# Types of Capsule NFTs

To help illustrate how Capsule NFT work, below are end-to-end process examples from mint to redemption for each of the Capsule NFT types:

* [ERC-20 Capsule NFT](#erc-20-capsule-nft)
* [ERC-721 Capsule NFT](#scenario-b-erc-721-capsule-nft)
* [ERC-1155 Capsule NFT](#scenario-c-erc-1155-capsule-nft)
* [Simple Capsule NFT](#scenario-d-simple-capsule-nft)

{% hint style="info" %}
For the *definitions of these types of Capsule NFTs*, please read [Overview](/capsulenft/overview).
{% endhint %}

### ERC-20 Capsule NFT

In the scenario below, only one type of ERC-20 token is stored within the Capsule NFT, USDC. The Capsule NFT is then redeemed for the stored tokens.

> Alice mints a Capsule NFT embedded with a picture of her newest art piece and chooses to store 100 USDC inside of it. This Capsule NFT is known as an ERC-20 Capsule NFT. Alice then sells her ERC-20 Capsule NFT on the NFT marketplace, OpenSea, for 0.1 ETH to Bob.&#x20;
>
> At a later date, Bob decides to redeem the ERC-20 Capsule NFT, retrieving the stored value of 100 USDC. Alice no longer owns the ERC-20 Capsule NFT, and thus has no power over the redeeming of the ERC-20 Capsule NFT, nor over the tokens in the Capsule Protocol. Upon redemption, the ERC-20 Capsule NFT is burnt (including the embedded artwork) and Bob receives 100 USDC that was stored at time of mint.

### ERC-721 Capsule NFT

In the scenario below, only one ERC-721 NFT, a Bored Ape NFT in this case, is stored within the Capsule NFT. The Capsule NFT is then redeemed for the stored tokens.

> Alice mints a Capsule NFT embedded with a picture of her newest art piece and chooses to store a Bored Ape NFT inside of it. This Capsule NFT is known as an ERC-721 Capsule NFT. Alice then lists sells her ERC-721 Capsule NFT on the NFT marketplace, OpenSea, for 0.1 ETH to Bob.&#x20;
>
> At a later date, Bob decides to redeem the ERC-721 Capsule NFT, retrieving the stored Bored Ape ERC-721 NFT. Alice no longer owns the ERC-721 Capsule NFT, and thus has no power over the redeeming of the ERC-721 Capsule NFT, nor over the tokens in the Capsule Protocol. Upon redemption, the ERC-721 Capsule NFT is burnt (including the embedded artwork) and Bob receives the Bored Ape ERC-721 NFT.

### **ERC-1155 Capsule NFT**

In the scenario below, two ERC-1155 tokens are stored within the Capsule NFT, Artist A's song NFT and Artist B's song NFT. The Capsule NFT is then redeemed for the stored tokens.

> Alice mints a Capsule NFT embedded with a picture of her newest art piece and chooses to store two song ERC-1155 NFTs from her favorite artists - Kanye East's song, "Weaker", and Taylor Slow's song, "Hate Story", inside of it. This Capsule NFT is known as an ERC-1155 Capsule NFT. Alice then sells her ERC-1155 Capsule NFT on the NFT marketplace, OpenSea, for 0.1 ETH to Bob.&#x20;
>
> At a later date, Bob decides to redeem the ERC-1155 Capsule NFT, retrieving the stored value of the two song NFTs. Alice no longer owns the ERC-1155 Capsule NFT, and thus has no power over the redeeming of the ERC-1155 Capsule NFT, nor over the tokens in the Capsule Protocol. Upon redemption, the ERC-1155 Capsule NFT is burnt (including the embedded artwork) and Bob receives the two song ERC-1155 NFTs that were stored at time of mint.

### Simple Capsule NFT

In the scenario below, no tokens are stored within the Capsule NFT, and therefore, the Capsule NFT cannot be redeemed for any tokens.

> Alice mints a Capsule NFT embedded with a picture of her newest art piece and chooses to store a nothing inside of it. This Capsule NFT is known as a Simple Capsule NFT. Alice then lists sells her Simple Capsule NFT on the NFT marketplace, OpenSea, for 0.1 ETH to Bob. Bob is unable to redeem the Simple Capsule NFT for any tokens because no tokens were stored at time of mint.


# Capsule Collections

### Overview

An exciting feature of the Capsule Protocol is that users are able to create and deploy their own collections of Capsule NFTs.

Capsule Collections are NFT collections generated by the Capsule Protocol. An NFT Collection is like a library - housing any amount of NFTs inside similarly to how a library houses books. It can be a portfolio containing art pieces, a series of user badges, or even a list of domain names. Some famous NFT Collections include CryptoPunks, CryptoKitties, and Bored Ape Yacht Club.

{% hint style="info" %}
Example: [Public Capsule Collection](https://opensea.io/collection/public-capsule)
{% endhint %}

The Capsule Protocol allows for NFTs in a Capsule Collection to support any combination of ERC-20 Capsule NFTs, ERC-721 Capsule NFTs, ERC-1155 Capsule NFTs or Simple Capsule NFTs. For example, your collection could be made up of 1 Simple Capsule NFT, 2 ERC-20 Capsule NFTs, 4 ERC-1155 Capsule NFTs and 8 ERC-721 Capsule NFTs; or your collection could be made up of solely 10 ERC-721 Capsule NFTs. All Capsule Collections can be viewed on OpenSea, or any NFT marketplace.

When a user creates a collection, they deploy their own Capsule NFT contract at a new address. The ‘name’ and ‘symbol’ fields of the ERC-721 contract are customizable by the user, and the user is given ownership of the deployed contract.

### Customization of Capsule Collections

Capsule Collections offer extra layers of customization on top of providing access to methods facilitating the creation of Capsules.&#x20;

#### [**Metamaster (URI Owner)**](/capsulenft/overview/capsule-collections/metamaster)

The Metamaster is the address of the user who controls all of the metadata set inside any Capsule NFT in their collection. This address may be changed at a later date.&#x20;

If the Metamaster is set to the zero address (0x0000...), the metadata and the Metamaster cannot be changed by any user.&#x20;

{% hint style="info" %}
To learn more on changing the Metamaster, please read [Developer - Managing a Capsule Collection](/capsulenft/developer-walkthroughs/developer-managing-a-capsule-collection).
{% endhint %}

#### [Lockability](/capsulenft/overview/capsule-collections/lockability)

A Capsule Collection can be locked by the owner - preventing any users from minting further Capsule NFTs to that collection past that upper bound. Once a collection is locked, it can never be unlocked.

{% hint style="warning" %}
During Beta, Capsule Collections *can only be locked from the backend*. To view the developer walkthrough, please read [Developer - Managing a Capsule Collection](/capsulenft/developer-walkthroughs/developer-managing-a-capsule-collection).

The Capsule team is working towards improving this feature for the future.&#x20;
{% endhint %}

#### [**Public/Private**](/capsulenft/overview/capsule-collections/private-public)

On creation, a collection can be deemed *public* or *private*.&#x20;

A *public collection* allows any user to mint new Capsule NFTs from this collection, while a *private collection* allows only the owner to mint Capsule NFTs in the collection.


# Metamaster

A Metamaster, also known as an Uniform Resource Identifier (URI) Owner, is commonly used by creators to display NFT specific metadata. On creation, a collection can be passed a Metamaster - either a user address or the zero address.

#### If set to a **User Address**:

The user has the ability to change the metadata assigned to any NFT in that collection.&#x20;

This option could be very valuable for any collection owner that would want to ensure NFTs within their collection meet certain quality standards, or for NFT collections that require metadata updates after they have been minted.&#x20;

The Metamaster can be changed at any point - to learn more, read [Developer - Managing a Capsule Collection](/capsulenft/developer-walkthroughs/developer-managing-a-capsule-collection).

#### If set to the **Zero Address**:

The Metamaster can alternatively be set to the zero address in order to prevent anyone from changing NFT metadata in a collection. After setting the Metamaster to the zero address, the metadata and Metamaster can no longer be changed by any user.

{% hint style="info" %}
**Collection&#x20;*****Metamaster*****&#x20;vs. Collection&#x20;*****Owner***

A Metamaster is the controller of all metadata in the Capsule Collection, meaning they have the ability to reassign tokenURI data.&#x20;

An Owner is able to lock any Capsule Collections they own. In addition, if a Capsule Collection is private, only the Owner is able to mint to that collection.&#x20;

A collection may have one of the following structures:

* User A is Metamaster and Owner.
* User A is Metamaster, and User B is Owner.
* The Metamaster is set to the zero address. User A is Owner.
  {% endhint %}

### Related Tutorials

{% content-ref url="/pages/6GI3x8AzCdRQjo6XPNYH" %}
[Developer - Managing a Capsule Collection](/capsulenft/developer-walkthroughs/developer-managing-a-capsule-collection)
{% endcontent-ref %}


# Lockability

Locking a collection sets a permanent limit - determined by the Collection Owner - to the amount of NFTs that can be minted in a Capsule Collection. Once the limit about has been reached, no one, including the owner, can mint any more NFTs in the collection (*see Example #1*).

After creation, a collection may be locked at any time by calling the *lock* method and passing in a numerical upper bound. Please note that the Owner can only pass a numerical upper bound that is greater or equal to the current NFT count (*see Example #2*). Both private and public collections can be locked at any point by the owner of the contract - *but never unlocked*.

To permanently prevent a collection from being locked, please use of the following methods:

* Set the lock number to the maximum unit 256 minus one (2^256 - 2)
* Transfer ownership of the unlocked collection to the 000 address

{% hint style="warning" %}
During Beta, Capsule Collections *can only be locked from the backend*. To view the developer walkthrough, please read [Developer - Managing a Capsule Collection](/capsulenft/developer-walkthroughs/developer-managing-a-capsule-collection).

The Capsule team is working towards improving this feature for the future.&#x20;
{% endhint %}


# Private/Public

On creation, a collection can be deemed *public* or *private*.&#x20;

A *public collection* allows any user to mint new Capsule NFTs from this collection, while a *private collection* allows only the owner to mint Capsule NFTs in the collection.

#### If a Collection is Private:

Only the owner of the collection is able to mint Capsule NFTs within the collection. This can be set to any address, such as a, individual's address (only the individual would be able to mint Capsule NFTs to the collection), a contract address (only this helper-contract is able to mint Capsule NFTs to the collection) or the zero address (no one can mint Capsule NFTs to the collection).

#### If a Collection is Public:

Any user, including the owner of the collection, is able to mint Capsule NFTs within the collection.


# Collection Examples

To help illustrate how Capsule Collections work and their various customizable features, this page presents a few examples of how different Capsule Collections could be deployed.

### **Scenario A: Lockable, Private, User URI Owned Collection**

> Alice wants to create a fruit-based NFT collection, which contains artwork of different fruit. Alice doesn’t want anyone else to create NFTs in this collection, so she uses the Capsule Protocol to create a Capsule Collection and chooses the ‘private’ option on creation. She also passes in her own address as the URI Owner, meaning that she can change the attached metadata of any NFT in her collection at any time.
>
> Once deployed, Alice mints some fruit as Simple Capsule NFTs, and others with a varying amount of wrapped Ethereum inside. For one Capsule NFT, she minted a banana NFT and stored it inside another apple NFT of the same collection, creating a sort of nesting doll situation.
>
> After minting 10 fruit NFTs, Alice now decides to ensure the scarcity of her fruit-based Capsule Collection. She calls the ‘lock’ function with an upper bound of 10, which prohibits anyone (just herself in this case, since this was deemed a private collection) from minting any more NFTs to that collection. Existing NFTs are still redeemable for their underlying Capsule NFT value, but can never be created again.
>
> At this point, Alice has created and fully customized her fruit-based Capsule Collection. While she can no longer add anymore NFTs to the collection, she may still choose to list her NFTs for sale on OpenSea. Alice can now sit back and watch her fruit NFTs be exchanged on the open market.

### **Scenario B: Lockable, Public, Zero Address URI Owned Collection**

> Bob decides to create a ‘community vault’ of sorts. He decides to create a public collection, where any user can mint.
>
> Since it is a community vault, Bob wants to ensure that all users' metadata are immutably set. To do so, he uses the Capsule Protocol to create a Capsule Collection and passes the zero address (0x0000…) as the URI Owner. As a result, Bob or anyone else will never have the ability to alter any NFT metadata.
>
> Since Bob knows beforehand how large he wants his collection to become, he calls the ‘lock’ method passing in 50 as the upper bound after deployment (he can do this before any NFT has even been minted). Once the collection mints its 50th NFT, it locks itself automatically - no one else may mint another NFT, not even Bob.
>
> The functionality of these public Capsule NFTs remain the same - they are tradable and burnable by their respective owners. However, any holder may remain assured that Bob's collection will never grow in size - on the contrary - his collection size may only decrease from any Capsule NFTs being redeemed.


# Official Capsule Collections

The CapsuleNFT Team has created and deployed two official Capsule Collections: The Public Capsule Collection and Private Capsule Collection.

### Public Capsule (CPUB) Collection

**Anyone** may mint Capsule NFTs to the Public Capsule Collection. The Capsule Team created this collection with the community in mind. It is our hope that by providing unrestricted access to the collection, the Capsule Community can continue to foster and maintain creativity together now and into the future.

> **Address:** 0x1a0a69a267b3e72d22dEB970b2Cc6296aC31A80c
>
> [View on OpenSea](https://opensea.io/collection/public-capsule)
>
> [View Contract on Etherscan](https://etherscan.io/address/0x1a0a69a267b3e72d22dEB970b2Cc6296aC31A80c)

### Private Capsule (CNFT) Collection

Only the CapsuleNFT Team may mint Capsule NFTs to the Private Capsule Collection. We are reserving this collection to mint special Capsule NFTs for team-related projects and endeavors.

> **Address:** 0xECE3053E1e7C4Dd365975e8AB4Db7D1b238e30B6
>
> View on OpenSea \[temporarily unavailable]\
> [View Contract on Etherscan](https://etherscan.io/address/0xece3053e1e7c4dd365975e8ab4db7d1b238e30b6)

{% hint style="warning" %}
Capsule Collections are allowed to have the same names and acronyms. The *unique identifier* of each Capsule Collection is **the Collection Address**.

*Please check the Collection Address to ensure that you are viewing and minting to the correct Capsule Collection.*
{% endhint %}


# Developer Walkthroughs

These pages provide walkthroughs of which methods to use when incorporating the Capsule Protocol in your application.

#### Some Example Scenarios Covered:&#x20;

* [User wants to mint any type of Capsule NFT](/capsulenft/developer-walkthroughs/developer-mint-a-capsule-nft)
  * Simple Capsule NFT
  * Single and Multi ERC-20 Capsule NFTs
  * Single and Multi ERC-721 Capsule NFTs
  * (Single and) Multi ERC-1155 Capsule NFTs&#x20;
* [User wants to redeem any type of Capsule NFT](/capsulenft/developer-walkthroughs/developer-redeem-a-capsule-nft)
  * Simple Capsule NFT (if necessary)
  * Single and Multi ERC-20 Capsule NFTs
  * Single and Multi ERC-721 Capsule NFTs
  * (Single and) Multi ERC-1155 Capsule NFTs
* [User wants to create a Capsule Collection](/capsulenft/developer-walkthroughs/developer-create-a-capsule-collection)
  * Choose the name of the collection
  * Choose the symbol of the collection
  * Choose whether the collection is public/private
  * Set the metamaster/tokenURIOwner of the collection
* [User wants to manage their created Capsule Collection](/capsulenft/developer-walkthroughs/developer-managing-a-capsule-collection)
  * 'Lock' the collection at an amount of Capsule NFTs minted
  * Change the metamaster/tokenURIOwner of the collection
  * Transfer ownership of the collection


# Developer Overview

### Contract Overview

The Capsule Protocol utilizes three main Ethereum contracts to perform all of its on-chain functions.

* [**Capsule NFT contract**](/capsulenft/developer-walkthroughs/contracts/capsule.sol)&#x20;
* [**CapsuleFactory contract**](/capsulenft/developer-walkthroughs/contracts/capsulefactory.sol)
* [**CapsuleMinter contract**](/capsulenft/developer-walkthroughs/contracts/capsuleminter.sol)

The *CapsuleMinter* and *CapsuleFactory* contracts are attached to a proxy contract, meaning they are upgradable.&#x20;

The *Capsule NFT* contract can be 'upgraded' by changing the deploy address. This allows future Collections to support much greater functionality, such as storing other token types or storing combinations of other tokens.&#x20;

{% hint style="info" %}
For more information on the *contracts utilized in the Capsule Protocol*, please read [Contracts](/capsulenft/developer-walkthroughs/contracts).
{% endhint %}

### Developer Walkthroughs

Walkthroughs of which methods to use when incorporating the Capsule Protocol in your application can be found in [Developer Walkthroughs](/capsulenft/developer-walkthroughs).

The example scenarios that are covered include:

* [User wants to mint any type of Capsule NFT](/capsulenft/developer-walkthroughs/developer-mint-a-capsule-nft)
* [User wants to redeem any type of Capsule NFT](/capsulenft/developer-walkthroughs/developer-redeem-a-capsule-nft)
* [User wants to create a Capsule Collection](/capsulenft/developer-walkthroughs/developer-create-a-capsule-collection)
* [User wants to manage their created Capsule Collection](/capsulenft/developer-walkthroughs/developer-managing-a-capsule-collection)

### Decentralization

All Capsule Protocol contracts are decentralized. If the Capsule Team vanished tomorrow, the ecosystem would continue to work exactly as coded.


# Contracts

{% content-ref url="/pages/NKdnKOTHgsY7YF9DDGKa" %}
[Capsule.sol](/capsulenft/developer-walkthroughs/contracts/capsule.sol)
{% endcontent-ref %}

{% content-ref url="/pages/DRfTcoYVqMjhbNaQl7uI" %}
[CapsuleFactory.sol](/capsulenft/developer-walkthroughs/contracts/capsulefactory.sol)
{% endcontent-ref %}

{% content-ref url="/pages/Z5pLujZRO0liMsqTX5jY" %}
[CapsuleMinter.sol](/capsulenft/developer-walkthroughs/contracts/capsuleminter.sol)
{% endcontent-ref %}


# Capsule.sol

## The Capsule NFT Contract

The Capsule NFT contract ("Capsule contract") is the base ERC-721 NFT utilized by the Capsule Protocol. The other contracts (CapsuleFactory.sol and CapsuleMinter.sol) mint, burn, and interact with this contract. Any NFT generated from the Capsule Protocol is of this type.

A new instance of this contract is deployed each time a Capsule Collection is created.&#x20;

> [View an example of Capsule.sol verified contract code on Etherscan](https://etherscan.io/address/0x4ced59c19f1f3a9eebd670f746b737acf504d1eb)

### User Interactable Methods

#### lockCollectionCount

```solidity
function lockCollectionCount(uint256 _nftCount) external virtual
```

**Usage**: Lock the collection at a provided NFT count (the collection total Capsule NFT count), preventing any further minting past the given number. The set `maxId` of this collection will be the provided NFT count minus one, for clarity (without subtracting 1, a lock count of `15` would provide for `16` NFTs, as it includes the `0` count).

**Parameters**:

* `_name`: (uint256) - the count at which to lock the Capsule Collection from further minting

***

#### isCollectionLocked

```solidity
function isCollectionLocked() public view returns (bool)
```

**Usage**: Check if the Capsule Collection is locked. This is checked by ensuring the `maxId` is less than the counter.

**Parameters**: (none)

***

#### transferOwnership

```solidity
function transferOwnership(address _newOwner) public virtual
```

**Usage**: Transfer ownership of the Capsule to `_newOwner`. The new owner of the Capsule NFT will be able to call any owner-only methods from the contract.

**Parameters**:

* `_account`: (address) - The address (account) to pass ownership onto. This can also be the zero address.

***

#### tokenURI

```solidity
function tokenURI(uint256 tokenId) public view returns (string)
```

**Usage**: Check the tokenURI of a Capsule at id `tokenId`. The tokenURI will map to the NFT metadata.

**Parameters**:

* `_tokenId`: (uint256) - the id of the NFT

***

#### setTokenURI

```solidity
function setTokenURI(uint256 _tokenId, string _newTokenURI) external
```

**Usage**: Set new token URI for a given tokenId. Only the tokenURI owner, also known as the Metamaster, can set a new URI.

**Parameters**:

* `_tokenId`: (uint256) - the id of the NFT to burn
* `_newTokenURI`: (string) - the new NFT at `_tokenId`'s tokenURI

***

#### updateTokenURIOwner

```solidity
function updateTokenURIOwner(address _newTokenURIOwner) external
```

**Usage**: Update the tokenURIowner. Only the tokenURIOwner, also known as the Metamaster, can call this function.

**Parameters**:

* `_account`: (address) - The new address to become the tokenURIOwner (Metamaster)

***

#### isCollectionMinter

```solidity
function isCollectionMinter(address _account) external view returns (bool)
```

**Usage**: Check if the passed in address of `_account` is allowed to mint from the collection.

**Parameters**:

* `_account`: (address) - The address (account) to check

***

#### exists

```solidity
function exists(uint256 tokenId) external view returns (bool)
```

**Usage**: Check if a Capsule (at id `tokenId`) of the current collection exists.

**Parameters**:

* `_tokenId`: (uint256) - the id of the NFT

***

### User Non-Interactable Methods

#### constructor

```solidity
constructor(string _name, string _symbol, address _tokenURIOwner, bool _isCollectionPrivate) public
```

**Usage**: Called upon creation of Capsule. The CapsuleFactory calls the constructor upon creation of a Capsule Collection.

**Parameters**:

* `_name`: (string) - the name of the Capsule Collection
* `_symbol`: (string) - the symbol of the Capsule Collection
* `_tokenURIOwner`: (address) - the address of the Capsule Collection tokenURIOwner (also known as the Metamaster)
* `_isCollectionPrivate`: (boolean) - whether the Capsule Collection is designated as private

***

#### mint

```solidity
function mint(address _account, string _uri) external
```

**Usage**: Create an NFT from this collection. This method is uneditable by users, as only the CapsuleMinter may mint NFTs from this collection. Users interact with this mint through the CapsuleMinter's `mintCapsule` methods.

**Parameters**:

* `_account`: (address) - the account to receive the NFT
* `_uri`: (string) - the set NFT tokenURI

***

#### burn

```solidity
function burn(address _account, uint256 _tokenId) external
```

**Usage**: Burn an NFT from this collection. This method is uneditable by users, as only the CapsuleMinter may burn NFTs from this collection. Users interact with this burn through the CapsuleMinter's `burnCapsule` methods.

**Parameters**:

* `_account`: (address) - the account that is burning the NFT
* `_tokenId`: (uint256) - the id of the NFT to burn

***

### Key Constants

#### VERSION

```solidity
string VERSION
```

**Usage**: The current version.

***

#### counter

```solidity
uint256 counter
```

**Usage**: The current Capsule Collection counter (used as an id).

***

#### maxId

```solidity
uint256 maxId
```

**Usage**: The maximum id the collection is allowed to mint up to (this may also be set to the `MaxUInt256` to signify no maximum). The maxId may be set to a number lower than the current `counter` or id, in which case no further Capsules may be minted from this collection.

***

#### factory

```solidity
contract ICapsuleFactory factory
```

**Usage**: The address of the CapsuleFactory this Capsule is attached to.

***

#### tokenURIOwner

```solidity
address tokenURIOwner
```

**Usage**: The current tokenURIOwner of the collection - this parameter may also be known as the 'Metamaster'.

***

#### isCollectionPrivate

```solidity
bool isCollectionPrivate
```

**Usage**: A boolean which designates whether the collection is private (`true`) or public (`false`).

***

### Lesser Interesting Functions

#### supportsInterface

```solidity
function supportsInterface(bytes4 interfaceId) public view returns (bool)
```

***

#### \_beforeTokenTransfer

```solidity
function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal
```

***

#### \_burn

```solidity
function _burn(uint256 tokenId) internal
```

***

### Modifiers

#### onlyMinter

```solidity
modifier onlyMinter()
```

***

### Key Events

#### TokenURIOwnerUpdated

```solidity
event TokenURIOwnerUpdated(address oldOwner, address newOwner)
```

***

#### TokenURIUpdated

```solidity
event TokenURIUpdated(uint256 tokenId, string oldTokenURI, string newTokenURI)
```


# CapsuleFactory.sol

## The CapsuleFactory Contract

The CapsuleFactory contract allows users to deploy their own Capsule Collections. While the CapsuleMinter contract can be thought of as a database for Capsule NFTs, the CapsuleFactory contract can be thought of as a database for Capsule Collections.

> [View CapsuleFactory.sol verified contract code on Etherscan](https://etherscan.io/address/0x68df2bb8515b32819f0592f277af6ec0cd85ae08)
>
> [View CapsuleFactory.sol verified proxy contract code on Etherscan](https://etherscan.io/address/0x4ced59c19f1f3a9eebd670f746b737acf504d1eb)

### User Interactable Methods

#### createCapsuleCollection

```solidity
function createCapsuleCollection(string _name, string _symbol, address _tokenURIOwner, bool _isCollectionPrivate) external payable returns (address)
```

**Usage**: The main method which creates a Capsule NFT Collection for a user. Creation of a Capsule Collection MUST go through the CapsuleFactory in order to ensure ecosystem safety - this ensures that no Capsule contract is able to exploit the CapsuleMinter's token storing/redeeming methods.

**Parameters**:

* `_name`: (string) - the name of the Capsule Collection
* `_symbol`: (string) - the symbol of the Capsule Collection
* `_tokenURIOwner`: (address) - the address of the Capsule Collection tokenURIOwner (also known as the Metamaster)
* `_isCollectionPrivate`: (boolean) - whether the Capsule Collection is designated as private

**Returns**: (address) - The address of the newly deployed Capsule Collection.

#### getAllCapsuleCollections

```solidity
function getAllCapsuleCollections() external view returns (address[])
```

**Usage**: Get a list of all Capsule Collections created.

**Parameters**: (none)

**Returns**: (address\[]) - An array of addresses of all Capsule Collections created.

#### getCapsuleCollectionsOf

```solidity
function getCapsuleCollectionsOf(address _owner) external view returns (address[])
```

**Usage**: Get list of all Capsule Collections created by an input owner address `_owner`.

**Parameters**:

* `_owner`: (address) - the address of the owner

**Returns**: (address\[]) - An array of addresses of all Capsule Collections created by `_owner`.

### User Non-Interactable Methods

#### updateCapsuleCollectionOwner

```solidity
function updateCapsuleCollectionOwner(address _previousOwner, address _newOwner) external
```

**Usage**: A helper method which updates owner of a Capsule Collection. This is called when the `transferOwnership` method is called by the Capsule NFT in order to update the Capsule's owner information in the CapsuleFactory. Only a Capsule NFT may call this method.

**Parameters**:

* `_previousOwner`: (address) - the address of the old owner (the caller)
* `_newOwner`: (address) - the address of the new owner

### Lesser Interesting Methods

#### initialize

```solidity
function initialize() external
```

#### addToWhitelist

```solidity
function addToWhitelist(address _user) external
```

#### removeFromWhitelist

```solidity
function removeFromWhitelist(address _user) external
```

#### addToBlacklist

```solidity
function addToBlacklist(address _user) external
```

#### removeFromBlacklist

```solidity
function removeFromBlacklist(address _user) external
```

#### flushTaxAmount

```solidity
function flushTaxAmount() external
```

The owner or tax collector can call this function to withdraw all ETH stored in this contract

#### getWhitelist

```solidity
function getWhitelist() external view returns (address[])
```

Get a list of all whitelisted addresses

#### getBlacklist

```solidity
function getBlacklist() external view returns (address[])
```

Get a list of all blacklisted addresses

#### isBlacklisted

```solidity
function isBlacklisted(address _user) external view returns (bool)
```

Return whether a given address is blacklisted or not

#### isWhitelisted

```solidity
function isWhitelisted(address _user) external view returns (bool)
```

Return whether a given address is whitelisted or not

#### setCapsuleMinter

```solidity
function setCapsuleMinter(address _newCapsuleMinter) external
```

Set CapsuleMinter address

#### updateCapsuleCollectionTax

```solidity
function updateCapsuleCollectionTax(uint256 _newTax) external
```

Update Capsule Collection creation tax

#### updateTaxCollector

```solidity
function updateTaxCollector(address _newTaxCollector) external
```

Update tax collector

### Key Constants

#### VERSION

```solidity
string VERSION
```

### Key Events

#### CapsuleCollectionTaxUpdated

```solidity
event CapsuleCollectionTaxUpdated(uint256 oldTax, uint256 newTax)
```

#### CapsuleCollectionCreated

```solidity
event CapsuleCollectionCreated(address caller, address capsule)
```

#### CapsuleOwnerUpdated

```solidity
event CapsuleOwnerUpdated(address capsule, address previousOwner, address newOwner)
```

#### TaxCollectorUpdated

```solidity
event TaxCollectorUpdated(address oldTaxCollector, address newTaxCollector)
```

### CapsuleFactoryStorage

#### capsuleCollectionTax

```solidity
uint256 capsuleCollectionTax
```

#### taxCollector

```solidity
address taxCollector
```

#### capsuleMinter

```solidity
address capsuleMinter
```

#### capsules

```solidity
address[] capsules
```

#### capsulesOf

```solidity
mapping(address => struct EnumerableSet.AddressSet) capsulesOf
```

#### isCapsule

```solidity
mapping(address => bool) isCapsule
```

#### whitelist

```solidity
struct EnumerableSet.AddressSet whitelist
```

#### blacklist

```solidity
struct EnumerableSet.AddressSet blacklist
```


# CapsuleMinter.sol

## The CapsuleMinter Contract

The CapsuleMinter contract is an intermediary contract that holds tokens, assigns user holdings, and prevents abuse. This contract is responsible for the mintage of all Capsules. Nearly any token can be incorporated in the Capsule Protocol, with the exception of deflationary and rebasing tokens. Deflationary tokens are prohibited because the Capsule Protocol performs a check that the exact amount of token deposited is found at the contract post-transfer. Rebasing tokens are prohibited because their amount will change within the contract.

Capsule NFTs’ mint and burn functions are only callable through the CapsuleMinter. While this has no impact on the end functionality of the Capsule NFT (the methods work exactly as expected, simply through an intermediary), it prevents users from abusing contracts. You can think of the routing of NFT methods through the CapsuleMinter as a security blanket to ensure that no one can cheat the Capsule Protocol.

{% hint style="info" %}
**NOTE:** It is important to consider that certain tokens, such as rebasing tokens (for example, [Ampleforth](https://faq.ampleforth.org/)) will change their amount from within the protocol. As such, refrain from placing such tokens directly into Capsule NFTs unless you wrap the token first (for example, [Wrapped Ampleforth](https://faq.ampleforth.org/wampl)).
{% endhint %}

{% hint style="info" %}
**NOTE**: The Capsule Protocol supports deflationary tokens, but note that two 'deflation events' (placing into a Capsule NFT and redeeming from a Capsule NFT) occur when interacting with such.
{% endhint %}

> [View CapsuleMinter.sol verified contract code on Etherscan](https://etherscan.io/address/0x0412961b4b2259bc662505d67d73ad3584138ae9)
>
> [View CapsuleMinter.sol verified proxy contract code on Etherscan](https://etherscan.io/address/0xb8cf4a28da322598fdb78a1406a61b72d6f6b396)

### User Interactable Methods

#### mintSimpleCapsule

```solidity
function mintSimpleCapsule(address _capsule, string _uri, address _receiver) external payable
```

**Usage**: (External) Create a simple Capsule (normal compatible ERC-721 NFT) from collection `_capsule` with passed in `_uri`.

**Parameters**:

* `_capsule`: (address) - the address of the Capsule Collection
* `_uri`: (string) - the NFT tokenURI
* `_receiver`: (address) - the address which will receive the NFT (can be a contract)

**Returns**: (Nothing)

***

#### burnSimpleCapsule

```solidity
function burnSimpleCapsule(address _capsule, uint256 _id) external
```

**Usage**: (External) Burn a simple Capsule from collection `_capsule` (normally, there is no incentive to do so).

**Parameters**:

* `_capsule`: (address) - the address of the Capsule Collection
* `_id`: (uint256) - the Simple Capsule NFT id

**Returns**: (Nothing)

***

#### mintSingleERC20Capsule

```solidity
function mintSingleERC20Capsule(address _capsule, address _token, uint256 _amount, string _uri, address _receiver) external payable
```

**Usage**: (External) Create an ERC-721 Capsule from collection `_capsule` which holds an `_amount` of one token at address `_token`, with passed in `_uri`.

**Parameters**:

* `_capsule`: (address) - the address of the Capsule Collection
* `_token`: (address) - the token address to be deposited alongside creation of the Capsule
* `_amount`: (uint256) - the amount of token to be deposited alongside creation of the Capsule
* `_uri`: (string) - the NFT URI (IPFS hashes commonly used)

**Returns**: (Nothing)

***

#### burnSingleERC20Capsule

```solidity
function burnSingleERC20Capsule(address _capsule, uint256 _id) external
```

**Usage**: (External) Burn a Capsule from collection `_capsule` at `_id`. (This will return the `amount` of token at address `token` which is attached to that Capsule to the owner)

**Parameters**:

* `_capsule`: (address) - the address of the Capsule Collection
* `_id`: (uint256) - the Capsule token id to burn

**Returns**: (Nothing)

***

#### mintSingleERC721Capsule

```solidity
function mintSingleERC721Capsule(address _capsule, address _token, uint256 _id, string _uri, address _receiver) external payable
```

**Usage**: (External) Create an ERC-721 Capsule from collection `_capsule` which holds one ERC-721 compatible token at address `_token` and `_id`, with passed in `_uri`.

**Parameters**:

* `_capsule`: (address) - the address of the Capsule Collection
* `_token`: (address) - the token address to be deposited alongside creation of the Capsule
* `_id`: (uint256) - the id of token to be deposited alongside creation of the Capsule
* `_uri`: (string) - the NFT URI (IPFS hashes commonly used)

**Returns**: (Nothing)

***

#### burnSingleERC721Capsule

```solidity
function burnSingleERC721Capsule(address _capsule, uint256 _id) external
```

**Usage**: (External) Burn a Capsule from collection `_capsule` at `_id`. This will return the ERC-721 token at address `token` which is attached to that Capsule to the sender.

**Parameters**:

* `_capsule`: (address) - the address of the Capsule Collection
* `_id`: (uint256) - the Capsule token id to burn

**Returns**: (Nothing)

***

#### mintMultiERC20Capsule

```solidity
function mintMultiERC20Capsule(address _capsule, address[] _tokens, uint256[] _amounts, string _uri, address _receiver) external payable
```

**Usage**: (External) Create an ERC-721 Capsule from collection `_capsule` which holds multiple `_amounts` of multiple tokens at address `_tokens`, with passed in `_uri`. `_tokens` is passed in as an array, of which each token is matched by an amount in the `_amounts` array.

For example - a call should be formatted like so:

* `_capsule`: your Capsule Collection address
* `_tokens`: `[ <token-address-1>, <token-address-2]`
* `_amounts`: `[ <token-amount-of-token-address-1>, <token-amount-of-token-address-2> ]`
* `_uri`: your URI

To which, two token transfers are required, and one Capsule is returned to the user.

**Parameters**:

* `_capsule`: (address) - the address of the Capsule Collection
* `_tokens`: (address\[]) - the token addresses to be deposited alongside creation of the Capsule
* `_amounts`: (uint256\[]) - the amounts of each token to be deposited alongside creation of the Capsule
* `_uri`: (string) - the NFT URI (IPFS hashes commonly used)

**Returns**: (Nothing)

***

#### burnMultiERC20Capsule

```solidity
function burnMultiERC20Capsule(address _capsule, uint256 _id) external
```

**Usage**: (External) Burn an ERC-721 Capsule from collection `_capsule` at `_id`. This will return the `amounts` of token at addresses `tokens` which is attached to that Capsule to the sender.

For example - a multi ERC20 Capsule which holds 1 WBTC and 1 WETH returns both tokens to the sender, and burns the Capsule.

**Parameters**:

* `_capsule`: (address) - the address of the Capsule Collection
* `_id`: (uint256) - the Capsule token id to burn

**Returns**: (Nothing)

***

#### mintMultiERC721Capsule

```solidity
function mintMultiERC721Capsule(address _capsule, address[] _tokens, uint256[] _ids, string _uri, address _receiver) external payable
```

**Usage**: (External) Create an ERC-721 Capsule from collection `_capsule` which holds multiple ERC-721 tokens at address `_tokens` (with corresponding `_ids`) with passed in `_uri`. `_tokens` is passed in as an array, of which each token is matched by an amount in the `_ids` array.

For example - a call should be formatted like so:

* `_capsule`: (address) - the address of the Capsule Collection
* `_tokens`: `[ <token-address-1>, <token-address-2]`
* `_ids`: `[ <token-id-of-token-address-1>, <token-id-of-token-address-2> ]`
* `_uri`: your URI

To which, two ERC-721 token transfers are required, and one Capsule is returned to the user.

**Parameters**:

* `_capsule`: (address) - the address of the Capsule Collection
* `_tokens`: (address\[]) - the token addresses to be deposited alongside creation of the Capsule
* `_ids`: (uint256\[]) - the ids of each ERC-721 token
* `_uri`: (string) - the NFT URI (IPFS hashes commonly used)

**Returns**: (Nothing)

***

#### burnMultiERC721Capsule

```solidity
function burnMultiERC721Capsule(address _capsule, uint256 _id) external
```

**Usage**: (External) Burn an ERC-721 Capsule from collection `_capsule` at `_id`. This will return the token at addresses `tokens` which is attached to that Capsule to the sender.

For example - a multi ERC721 Capsule which holds 1 Rare Pepe and 1 Polkamon returns both tokens to the sender, and burns the Capsule.

**Parameters**:

* `_capsule`: (address) - the address of the Capsule Collection
* `_id`: (uint256) - the Capsule token id to burn

**Returns**: (Nothing)

***

#### getMultiERC20CapsuleData

```solidity
function getMultiERC20CapsuleData(address _capsule, uint256 _id) external view returns (struct CapsuleMinterStorage.MultiERC20Capsule _data)
```

**Usage**: (External) Get a struct holding:

* array of addresses
* array of amounts of a multi-ERC20 Capsule from collection `_capsule`, at `_id`.

**Parameters**:

* `_capsule`: (address) - the address of the Capsule Collection
* `_id`: (uint256) - the NFT id

**Returns**: (Struct: {address\[], uint256\[]}) - the token ids

***

#### getMultiERC721CapsuleData

```solidity
function getMultiERC721CapsuleData(address _capsule, uint256 _id) external view returns (struct CapsuleMinterStorage.MultiERC721Capsule _data)
```

**Usage**: (External) Get a struct holding:

* array of addresses
* array of ids of a multi-ERC721 Capsule from collection `_capsule`, at `_id`.

**Parameters**:

* `_capsule`: (address) - the address of the Capsule Collection
* `_id`: (uint256) - the NFT id

**Returns**: (Struct: {address\[], uint256\[]}) - the token ids

***

#### getCapsuleOwner

```solidity
function getCapsuleOwner(address _capsule, uint256 _id) external view returns (address)
```

**Usage**: (External) Get the owner of a certain Capsule from collection `_capsule` at `_id`.

**Parameters**:

* `_capsule`: (address) - the address of the Capsule Collection
* `_id`: (uint256) - the Capsule id

**Returns**: (address) - the owner of the Capsule

***

### Lesser Interesting Methods

#### addToWhitelist

```solidity
function addToWhitelist(address _user) external
```

***

#### removeFromWhitelist

```solidity
function removeFromWhitelist(address _user) external
```

***

#### getMintWhitelist

```solidity
function getMintWhitelist() external view returns (address[])
```

***

#### isMintWhitelisted

```solidity
function isMintWhitelisted(address _user) external view returns (bool)
```

***

#### flushTaxAmount

```solidity
function flushTaxAmount() external
```

***

#### updateCapsuleMintTax

```solidity
function updateCapsuleMintTax(uint256 _newTax) external
```

***

#### initialize

```solidity
function initialize(address _factory) external
```

***

#### onERC721Received

```solidity
function onERC721Received(address, address, uint256, bytes) external pure returns (bytes4)
```

***

#### \_depositToken

```solidity
function _depositToken(contract IERC20 _token, address _depositor, uint256 _amount) internal returns (uint256 _actualAmount)
```

***

### Key Events

#### CapsuleMintTaxUpdated

```solidity
event CapsuleMintTaxUpdated(uint256 oldMintTax, uint256 newMintTax)
```

***

#### SimpleCapsuleMinted

```solidity
event SimpleCapsuleMinted(address account, address capsule, string uri)
```

***

#### SimpleCapsuleBurnt

```solidity
event SimpleCapsuleBurnt(address account, address capsule, string uri)
```

***

#### SingleERC20CapsuleMinted

```solidity
event SingleERC20CapsuleMinted(address account, address capsule, address token, uint256 amount, string uri)
```

***

#### SingleERC20CapsuleBurnt

```solidity
event SingleERC20CapsuleBurnt(address account, address capsule, address token, uint256 amount, string uri)
```

***

#### SingleERC721CapsuleMinted

```solidity
event SingleERC721CapsuleMinted(address account, address capsule, address token, uint256 id, string uri)
```

***

#### SingleERC721CapsuleBurnt

```solidity
event SingleERC721CapsuleBurnt(address account, address capsule, address token, uint256 id, string uri)
```

***

#### MultiERC20CapsuleMinted

```solidity
event MultiERC20CapsuleMinted(address account, address capsule, address[] tokens, uint256[] amounts, string uri)
```

***

#### MultiERC20CapsuleBurnt

```solidity
event MultiERC20CapsuleBurnt(address account, address capsule, address[] tokens, uint256[] amounts, string uri)
```

***

#### MultiERC721CapsuleMinted

```solidity
event MultiERC721CapsuleMinted(address account, address capsule, address[] tokens, uint256[] ids, string uri)
```

***

#### MultiERC721CapsuleBurnt

```solidity
event MultiERC721CapsuleBurnt(address account, address capsule, address[] tokens, uint256[] ids, string uri)
```

***

### Modifiers

#### checkStatus

```solidity
modifier checkStatus()
```

***

#### onlyValidCapsuleCollections

```solidity
modifier onlyValidCapsuleCollections(address _capsule)
```

***

#### onlyCollectionMinter

```solidity
modifier onlyCollectionMinter(address _capsule)
```

***

## CapsuleMinterStorage

#### SingleERC20Capsule

```solidity
struct SingleERC20Capsule {
  address tokenAddress;
  uint256 tokenAmount;
}
```

***

#### MultiERC20Capsule

```solidity
struct MultiERC20Capsule {
  address[] tokenAddresses;
  uint256[] tokenAmounts;
}
```

***

#### SingleERC721Capsule

```solidity
struct SingleERC721Capsule {
  address tokenAddress;
  uint256 id;
}
```

***

#### MultiERC721Capsule

```solidity
struct MultiERC721Capsule {
  address[] tokenAddresses;
  uint256[] ids;
}
```

***

#### factory

```solidity
contract ICapsuleFactory factory
```

***

#### capsuleMintTax

```solidity
uint256 capsuleMintTax
```

***

#### isSimpleCapsule

```solidity
mapping(address => mapping(uint256 => bool)) isSimpleCapsule
```

***

#### singleERC20Capsule

```solidity
mapping(address => mapping(uint256 => struct CapsuleMinterStorage.SingleERC20Capsule)) singleERC20Capsule
```

***

#### singleERC721Capsule

```solidity
mapping(address => mapping(uint256 => struct CapsuleMinterStorage.SingleERC721Capsule)) singleERC721Capsule
```

***

#### multiERC20Capsule

```solidity
mapping(address => mapping(uint256 => struct CapsuleMinterStorage.MultiERC20Capsule)) multiERC20Capsule
```

***

#### multiERC721Capsule

```solidity
mapping(address => mapping(uint256 => struct CapsuleMinterStorage.MultiERC721Capsule)) multiERC721Capsule
```

***

#### mintWhitelist

```solidity
struct EnumerableSet.AddressSet mintWhitelist
```


# Testnets

{% content-ref url="/pages/pYpyV4wbV6x802pHjCzb" %}
[Ethereum - Goerli](/capsulenft/developer-walkthroughs/contracts/testnets/ethereum-goerli)
{% endcontent-ref %}


# Ethereum - Goerli

The CapsuleNFT contracts have been deployed on Goerli for user testing.

{% hint style="info" %}
Goerli ETH can be acquired from faucets online, or by dropping a message in the [CapsuleNFT Discord](https://discord.gg/CapsuleNFT)!
{% endhint %}

### Network Info

**Network:** [Goerli Testnet](https://goerli.net/)&#x20;

**Chain ID:** 5

### Contracts

**CapsuleMinter (Proxy):** \
`0xE6Af243aA76AbEd64864EC5d7EC91F8345D42484` [| ](<https://goerli.etherscan.io/address/0xE6Af243aA76AbEd64864EC5d7EC91F8345D42484 >)[View on Goerli Etherscan](https://goerli.etherscan.io/address/0xE6Af243aA76AbEd64864EC5d7EC91F8345D42484)

**CapsuleFactory (Proxy):**\
`0x92A75d0351984d62F588EeA1e00b53F56f0aa027` [| View on Goerli Etherscan](https://goerli.etherscan.io/address/0x92A75d0351984d62F588EeA1e00b53F56f0aa027)

**Example Capsule Collection:**\
`0x311448Def70713B6d6dc984cc0C62b470A173DAF` [| View on Goerli Etherscan](https://goerli.etherscan.io/address/0x311448Def70713B6d6dc984cc0C62b470A173DAF)

### Interacting

For more info on how to interact with these contracts, view [Contracts](/capsulenft/developer-walkthroughs/contracts).


# Developer - Mint a Capsule NFT

Users have the option to store tokens within a Capsule NFT at the time of mint and embed the Capsule NFT with artwork. At current date, the tokens stored within Capsule NFTs can be ERC-20 tokens, ERC-721 tokens (including Capsule NFTs), or ERC-1155 tokens. You are also able to create Simple Capsule NFTs, which hold no tokens and function as basic ERC-721 NFTs. All Capsule NFTs are minted from Capsule Collections, which you can learn about in [Developer - Create a Capsule Collection](/capsulenft/developer-walkthroughs/developer-create-a-capsule-collection).

Below are some examples of creating your own Capsule NFT using a pre-existing Capsule Collection.

### Methodology

In order to create a Capsule NFT you mus&#x74;**:**

1. [Select a Capsule Collection](#selecting-a-capsule-collection) from which it will be minted (this could be your Capsule Collection, or anyone else's public Capsule Collection)
2. Decide which type of Capsule NFT you'd like to create
   * Simple Capsule NFT (a basic ERC-721 Token)
   * ERC-20 Capsule NFT (a Capsule NFT which holds any number of ERC-20 tokens)
     * Depending on the amount of different tokens stored within the ERC-20 Capsule NFT, you will need to decide between methods `mintSingleERC20Capsule` (storing one token) and `mintMultiERC20Capsule` (storing two or more tokens)
   * ERC-721 Capsule NFT (a Capsule NFT which holds any number of ERC-721 tokens)
     * Depending on the amount of different NFTs stored within the ERC-721 Capsule NFT, you will need to decide between methods `mintSingleERC721Capsule` (storing one NFT) and `mintMultiERC721Capsule` (storing two or more NFTs)
   * ERC-1155 Capsule NFT (a Capsule NFT which holds any number of ERC-1155 tokens)
     * Only `mintMultiERC1155Capsule` is available to users and can still be used to store a single ERC-1155 token.
3. (if not a Simple Capsule NFT) - supply the Capsule NFT with the token(s) to store

#### Selecting a Capsule Collection

You'll need the address of the Capsule Collection you'd like to mint the Capsule NFT from. This can be found on the [CapsuleNFT Application](https://docs.capsulelabs.xyz/capsulenft/developer-walkthroughs/www.capsulenft.com/app) Collections Tab, by obtaining a response from the [Create a Capsule Collection](/capsulenft/developer-walkthroughs/developer-create-a-capsule-collection) method (upon creation), or by calling `getCapsuleCollectionsOf` and passing in an address as a parameter. This Capsule Collection address will be in the form of `0x...`.

### Capsule NFT Types and Methods

More information on the methods below can be found at the [CapsuleMinter.sol](/capsulenft/developer-walkthroughs/contracts/capsuleminter.sol) page. Depending on the type of Capsule NFT you are creating, you will call either:

#### [Simple Capsule NFT](#example-simple-capsule-nft-mint-call)

```solidity
function mintSimpleCapsule(address _capsule, string _uri, address _receiver) external payable
```

#### [ERC-20 Capsule NFT or Multi ERC-20 Capsule NFT](#erc-20-capsule-nft-minting)

{% code overflow="wrap" %}

```solidity
function mintSingleERC20Capsule(address _capsule, address _token, uint256 _amount, string _uri, address _receiver) external payable
```

{% endcode %}

{% code overflow="wrap" %}

```solidity
function mintMultiERC20Capsule(address _capsule, address[] _tokens, uint256[] _amounts, string _uri, address _receiver) external payable
```

{% endcode %}

#### [ERC-721 Capsule NFT or Multi ERC-721 Capsule NFT](#erc-721-capsule-nft-minting)

{% code overflow="wrap" %}

```solidity
function mintSingleERC721Capsule(address _capsule, address _token, uint256 _id, string _uri, address _receiver) external payable
```

{% endcode %}

{% code overflow="wrap" %}

```solidity
function mintMultiERC721Capsule(address _capsule, address[] _tokens, uint256[] _ids, string _uri, address _receiver) external payable
```

{% endcode %}

#### [Multi ERC-1155 Capsule NFT](#erc-1155-capsule-nft-minting)

Only `mintMultiERC1155Capsule` is available to the user. **Note: you can still create ERC-1155 Capsule NFTs that store a single token using this method.**

{% code overflow="wrap" %}

```solidity
function mintMultiERC1155Capsule(address _capsule, address[] _tokens, uint256[] _ids, string _uri, address _receiver) external payable
```

{% endcode %}

### Example Simple Capsule NFT Mint Call

An example call to create a Simple Capsule NFT is shown here:

```
mintSimpleCapsule(
    "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // Capsule Collection address
    "ipfs://bafyreibfmk7yeraghmiw5eygdjzjhgc2pqyh5ycyg5d2tm2lg5c2bop2by/metadata.json", // tokenURI/link to Metadata
    "0xB58992cfA9B39A2FFA0dd286248503A2eFbc65Db", // address to receive minted Capsule NFT
    { value: 0.001 }
);
```

This call will create a Simple Capsule NFT:

* In the Capsule Collection at address `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`
* With `tokenURI` (metadata) linking to `ipfs://bafy...p2by/metadata.json`
* And send that Simple Capsule NFT to the address `0xB58992cfA9B39A2FFA0dd286248503A2eFbc65Db`
* With ETH fee amount specified. This is the [required amount to create](/economics/fee-structure) a Capsule NFT.

### ERC-20 Capsule NFT Minting

Note that two different methods, `mintSingleERC20Capsule` and `mintMultiERC20Capsule` are available to the user.

`mintSingleERC20Capsule` is an optimized function meant to save the user gas in the case where only a single ERC-20 token would be embedded within a Capsule NFT.&#x20;

`mintMultiERC20Capsule` is a function meant to be called when more than one different token is meant to be embedded within a Capsule NFT. **Note: you can create ERC-20 Capsule NFTs that store one token using the** `mintMultiERC20Capsule` **method, but it would be gas inefficient to do so.**

#### Example Single ERC-20 Capsule NFT Mint Call

An example call to create a Single ERC-20 Capsule NFT is shown here:

```
mintSingleERC20Capsule(
    "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // Capsule Collection address
    "0x1b40183EFB4Dd766f11bDa7A7c3AD8982e998421", // Token address
    200000000000000000000, // Token amount
    "ipfs://bafyreibfmk7yeraghmiw5eygdjzjhgc2pqyh5ycyg5d2tm2lg5c2bop2by/metadata.json", // tokenURI/link to Metadata
    "0xB58992cfA9B39A2FFA0dd286248503A2eFbc65Db", // address to receive minted Capsule NFT
    { value: 0.001 }
);
```

This call will create a Single ERC-20 Capsule NFT:

* In the Capsule Collection at address `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`
* Storing `200` of the token at `0x1b40183EFB4Dd766f11bDa7A7c3AD8982e998421`
  * (Assuming 18 decimals)
* With `tokenURI` (metadata) linking to `ipfs://bafy...p2by/metadata.json`
* And send that Single ERC-20 Capsule NFT to the address `0xB58992cfA9B39A2FFA0dd286248503A2eFbc65Db`
* With ETH fee amount specified. This is the [required amount to create](/economics/fee-structure) a Capsule NFT.

#### Example Multi ERC-20 Capsule NFT Mint Call

An example call to create a Multi ERC-20 Capsule NFT is shown here:

```
mintMultiERC20Capsule(
    "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // Capsule Collection address
    [
        "0x1b40183EFB4Dd766f11bDa7A7c3AD8982e998421",
        "0xa3d58c4E56fedCae3a7c43A725aeE9A71F0ece4e"
    ], // Token addresses in an array
    [
        200000000000000000000,
        100000000000000000000
    ], // Token amounts in an array
    "ipfs://bafyreibfmk7yeraghmiw5eygdjzjhgc2pqyh5ycyg5d2tm2lg5c2bop2by/metadata.json", // tokenURI/link to Metadata
    "0xB58992cfA9B39A2FFA0dd286248503A2eFbc65Db", // address to receive minted Capsule NFT
    { value: 0.001 }
);
```

This call will create a Multi ERC-20 Capsule NFT:

* In the Capsule Collection at address `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`
* Storing both:
  * `200` of the token at `0x1b40183EFB4Dd766f11bDa7A7c3AD8982e998421`
    * (Assuming 18 decimals)
  * `100` of the token at `0xa3d58c4E56fedCae3a7c43A725aeE9A71F0ece4e`
    * (Assuming 18 decimals)
* With `tokenURI` (metadata) linking to `ipfs://bafy...p2by/metadata.json`
* And send that Multi ERC-20 Capsule NFT to the address `0xB58992cfA9B39A2FFA0dd286248503A2eFbc65Db`
* With ETH fee amount specified. This is the [required amount to create](/economics/fee-structure) a Capsule NFT.

### ERC-721 Capsule NFT Minting

Note that two different methods, `mintSingleERC721Capsule` and `mintMultiERC721Capsule` are available to the user.

`mintSingleERC721Capsule` is an optimized function meant to save the user gas in the case where only a single ERC-721 token would be embedded within a Capsule NFT.&#x20;

`mintMultiERC721Capsule` is a function meant to be called when more than one different token is meant to be embedded within a Capsule NFT. **Note: you can create ERC-721 Capsule NFTs that store one token using the** `mintMultiERC721Capsule` **method, but it would be gas inefficient to do so.**

#### Example Single ERC-721 Capsule NFT Mint Call

An example call to create a Single ERC-721 Capsule NFT is shown here:

```
mintSingleERC721Capsule(
    "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // Capsule Collection address
    "0x1a0a69a267b3e72d22dEB970b2Cc6296aC31A80c", // NFT address
    1, // NFT ID
    "ipfs://bafyreibfmk7yeraghmiw5eygdjzjhgc2pqyh5ycyg5d2tm2lg5c2bop2by/metadata.json", // tokenURI/link to Metadata
    "0xB58992cfA9B39A2FFA0dd286248503A2eFbc65Db", // address to receive minted Capsule NFT
    { value: 0.001 }
);
```

This call will create a Single ERC-721 Capsule NFT:

* In the Capsule Collection at address `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`
* Storing the NFT of ID `1` from `0x1a0a69a267b3e72d22dEB970b2Cc6296aC31A80c`
* With `tokenURI` (metadata) linking to `ipfs://bafy...p2by/metadata.json`
* And send that Single ERC-721 Capsule NFT to the address `0xB58992cfA9B39A2FFA0dd286248503A2eFbc65Db`
* With ETH fee amount specified. This is the [required amount to create](/economics/fee-structure) a Capsule NFT.

#### Example Multi ERC-721 Capsule NFT Mint Call

An example call to create a Multi ERC-721 Capsule NFT is shown here:

```
mintMultiERC721Capsule(
    "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // Capsule Collection address
    [
        "0x1a0a69a267b3e72d22dEB970b2Cc6296aC31A80c",
        "0xECE3053E1e7C4Dd365975e8AB4Db7D1b238e30B6"
    ], // NFT addresses in an array
    [
        1,
        15
    ], // NFT IDs in an array
    "ipfs://bafyreibfmk7yeraghmiw5eygdjzjhgc2pqyh5ycyg5d2tm2lg5c2bop2by/metadata.json", // tokenURI/link to Metadata
    "0xB58992cfA9B39A2FFA0dd286248503A2eFbc65Db", // address to receive minted Capsule NFT
    { value: 0.001 }
);
```

This call will create a Multi ERC-721 Capsule NFT:

* In the Capsule Collection at address `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`
* Storing both:
  * The NFT of ID `1` from `0x1a0a69a267b3e72d22dEB970b2Cc6296aC31A80c`
  * The NFT of ID `15` from `0xECE3053E1e7C4Dd365975e8AB4Db7D1b238e30B6`
* With `tokenURI` (metadata) linking to `ipfs://bafy...p2by/metadata.json`
* And send that Multi ERC-721 Capsule NFT to the address `0xB58992cfA9B39A2FFA0dd286248503A2eFbc65Db`
* With ETH fee amount specified. This is the [required amount to create](/economics/fee-structure) a Capsule NFT.

### ERC-1155 Capsule NFT Minting

For ERC-1155 tokens, only `mintMultiERC1155Capsule` is available to the user.

`mintMultiERC1155Capsule` is a function meant to be called when more than one different token is meant to be embedded within a Capsule NFT. **Note: you can still create ERC-1155 Capsule NFTs that store a single token using the** `mintMultiERC1155Capsule` **method.**

#### Example Multi ERC-1155 Capsule NFT Mint Call

An example call to create a Multi ERC-1155 Capsule NFT is shown here:

```
mintMultiERC1155Capsule(
    "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // Capsule Collection address
    [
        "0xe8aE4BfD7521d26283bc14f2395675144AA65e6d",
        "0xd07dc4262BCDbf85190C01c996b4C06a461d2430"
    ], // ERC-1155 NFT addresses in an array
    [
        1,
        15
    ], // ERC-1155 NFT IDs in an array
    [
        2,
        1
    ], // ERC-1155 Token amounts in an array
    "ipfs://bafyreibfmk7yeraghmiw5eygdjzjhgc2pqyh5ycyg5d2tm2lg5c2bop2by/metadata.json", // tokenURI/link to Metadata
    "0xB58992cfA9B39A2FFA0dd286248503A2eFbc65Db", // address to receive minted Capsule NFT
    { value: 0.001 }
);
```

This call will create a Multi ERC-1155 Capsule NFT:

* In the Capsule Collection at address `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`
* Storing both:
  * The NFT of ID `1` from `0xe8aE4BfD7521d26283bc14f2395675144AA65e6d`
    * of which we will store `2` tokens
  * The NFT of ID `15` from `0xd07dc4262BCDbf85190C01c996b4C06a461d2430`
    * of which we will store `1` token
* With `tokenURI` (metadata) linking to `ipfs://bafy...p2by/metadata.json`
* And send that Multi ERC-1155 Capsule NFT to the address `0xB58992cfA9B39A2FFA0dd286248503A2eFbc65Db`
* With ETH fee amount specified. This is the [required amount to create](/economics/fee-structure) a Capsule NFT.


# Developer - Redeem a Capsule NFT

Users have the option to store tokens within a Capsule NFT at the time of mint and embed the Capsule NFT with artwork. The Capsule NFT can be redeemed at any time to retrieve the tokens stored inside. Redemption of a Capsule NFT requires an already minted Capsule NFT, which you can create [here](/capsulenft/developer-walkthroughs/developer-mint-a-capsule-nft).

Below are some examples of redeeming a Capsule NFT.

**Note:** Redemption of the Capsule NFT requires burning of the Capsule NFT in return for acquiring the stored tokens. Thus, methods below are named `burnXYZ`.

### Methodology

In order to redeem a Capsule NFT you mus&#x74;**:**

* know the address of the Capsule Collection from which your Capsule NFT resides (this is the same as getting the address of your NFT, which can be found on Etherscan, OpenSea, or Metamask)
* know the ID of your Capsule NFT (the NFT ID, is the unique identification number given to your NFT. It can also be found on Etherscan, OpenSea, or Metamask)

### Capsule NFT Redemption Types and Methods

More information on the methods below can be found at the [CapsuleMinter.sol](/capsulenft/developer-walkthroughs/contracts/capsuleminter.sol) page. Depending on the type of Capsule NFT you are redeeming, you will call either:

#### Simple Capsule NFT

```solidity
function burnSimpleCapsule(address _capsule, uint256 _id) external
```

#### ERC-20 Capsule NFT or Multi ERC-20 Capsule NFT

```solidity
function burnSingleERC20Capsule(address _capsule, uint256 _id) external
```

```solidity
function burnMultiERC20Capsule(address _capsule, uint256 _id) external
```

#### ERC-721 Capsule NFT or Multi ERC-721 Capsule NFT

```solidity
function burnSingleERC721Capsule(address _capsule, uint256 _id) external
```

<pre class="language-solidity"><code class="lang-solidity"><strong>function burnMultiERC721Capsule(address _capsule, uint256 _id) external
</strong></code></pre>

#### ERC-1155 Capsule

Given that only [`mintMultiERC1155Capsule`](/capsulenft/developer-walkthroughs/developer-mint-a-capsule-nft#erc-1155-capsule-nft-minting) is available to users, `burnMultiERC1155Capsule` must be used.

```solidity
function burnMultiERC1155Capsule(address _capsule, uint256 _id) external
```

### Example Capsule NFT Redemption Call

Methods for redeeming a Capsule NFT are largely the same - the only difference lying in the type of Capsule (method) called.

**Note:** Burning a Simple Capsule NFT will not return any stored tokens (as none are placed inside), and thus has no special effect unless your application has built logic for such. An example has been shown for clarity.

Some example calls to redeem (burn) any type of Capsule NFT are shown here:

```
burnSimpleCapsule(
    "0x1a0a69a267b3e72d22dEB970b2Cc6296aC31A80c", // Capsule Collection (NFT) address
    1, // Capsule NFT ID
);

burnSingleERC20Capsule(
    "0x1a0a69a267b3e72d22dEB970b2Cc6296aC31A80c", // Capsule Collection (NFT) address
    2, // Capsule NFT ID
);

burnMultiERC721Capsule(
    "0x1a0a69a267b3e72d22dEB970b2Cc6296aC31A80c", // Capsule Collection (NFT) address
    3, // Capsule NFT ID
);
```

These calls will redeem any Capsule NFT:

* From the Capsule Collection at address `0x1a0a69a267b3e72d22dEB970b2Cc6296aC31A80c`
* Depending on the method above - with the ID `1`, `2`, or `3`

While the redemption parameters are the same for each Capsule NFT type, the method call differs for each.

You must use the same redemption method call as was used to mint the Capsule NFT (for example, a Single ERC-721 Capsule **must** be redeemed using the `burnSingleERC721Capsule` method).


# Developer - Create a Capsule Collection

Capsule Collections are NFT collections which support the minting of Capsule NFTs. You can mint any number of Simple Capsule NFTs, ERC-20 Capsule NFTs, ERC-721 Capsule NFTs, or ERC-1155 Capsule NFTs from a Capsule Collection you create.

Below is an example of creating your own Capsule Collection.

### Methodology

In order to create a Capsule Collection, only one method needs to be called - `createCapsuleCollection`.&#x20;

The docs for the method (also found under [CapsuleFactory.sol](/capsulenft/developer-walkthroughs/contracts/capsulefactory.sol#createcapsulecollection)) are posted here for reference:

```solidity
function createCapsuleCollection(string _name, string _symbol, address _tokenURIOwner, bool _isCollectionPrivate) external payable returns (address)
```

**Usage**: The main method which creates a Capsule NFT Collection for a user. Creation of a Capsule Collection MUST go through the CapsuleFactory in order to ensure ecosystem safety - this ensures that no Capsule contract is able to exploit the CapsuleMinter's token storing/redeeming methods.

**Parameters**:

* `_name`: (string) - the name of the Capsule Collection
* `_symbol`: (string) - the symbol of the Capsule Collection
* `_tokenURIOwner`: (address) - the address of the Capsule Collection tokenURIOwner (also known as the Metamaster)
* `_isCollectionPrivate`: (boolean) - whether the Capsule Collection is designated as private

**Returns**: (address) - The address of the newly deployed Capsule Collection.

### Example Capsule Collection Creation Call

An example call is shown here:

```
createCapsuleCollection(
    "Capsule",
    "CNFT",
    ZERO_ADDRESS,
    false,
    { value: 0.025 }
);
```

This call will create a Capsule Collection:

* Named `Capsule`
* With Symbol `CNFT`
* Whose Metamaster is the `Zero Address` (0x0000000000000000000000000000000000000000). The metamaster has control over ALL metadata in the collection. In most cases, you'd either set the Metamaster to **your address** (so that you'd have ownership over all metadata to change at any time), or the **zero address** (so that your Capsule NFTs metadata link can never be changed after mint).
* With Capsule Collection privacy boolean `false`, meaning this is a **public** Capsule Collection. A public Capsule Collection allows anyone from any address to mint Capsule NFTs within the Capsule Collection. A private Capsule Collection (`true`) only allows the `owner` to mint Capsule NFTs within the Capsule Collection.

*Note: The owner of the Capsule Collection is set to the address which calls the \`createCapsuleCollection\` method. The owner may change ownership of a Capsule Collection at any time.*

* With ETH fee amount specified. This is the [required amount to create](/economics/fee-structure) a Capsule Collection.


# Developer - Managing a Capsule Collection

Capsule Collections are NFT collections which support the minting of Capsule NFTs. You can mint any number of Simple Capsule NFTs, ERC-20 Capsule NFTs, ERC-721 Capsule NFTs, or ERC-1155 Capsule NFTs from a Capsule Collection you create.

You also have the ability to manage your Capsule Collection after creation, such as:

* Locking your collection at an upper bound
  * ‘Locking’ a collection means disabling **any** user from minting further Capsule NFTs from that collection past that upper bound.
  * If a collection ‘lock’ method is called at ‘15’, no more than 15 Capsule NFTs can be minted from that collection. If more than 15 were minted from that collection already, no more Capsule NFTs can be minted from the collection.
  * Both private and public collections can be locked at any point by the owner of the contract - but never unlocked.
* Changing the URI Owner (also known as the **metamaster**)
  * On creation, a collection can be passed a ‘URI Owner’ who has the ability to change the metadata assigned to any NFT in that collection.
  * The URI Owner can also be set to the zero address in order to prevent anyone from changing NFT metadata in a collection (in which case, it can also never be re-set).
* Transferring ownership of your Capsule Collection
  * Owning a Capsule Collection allows you to lock a collection at any time (if it is not locked). If ownership of a Capsule Collection is transferred to the zero address without locking it, the collection will stay unlocked forever.
  * The owner of a private Capsule Collection is the only person with the ability to mint new Capsule NFTs to that collection (so long as it is not locked).

Below are some examples of managing your Capsule Collection.

### Example Capsule Collection Locking Call

An example call is shown here:

```
lockCollectionCount(10);
```

This call will lock a Capsule Collection at `10` - meaning that only 10 Capsule NFTs will ever exist in this collection (the max ID of a Capsule NFT minted will be `9`).

If `11` Capsule NFTs were already minted before this call the Capsule Collection will stay at 11 total NFTs, but no more can be minted.

### Example Capsule Collection Transfer TokenURI Owner/Metamaster Call

An example call is shown here:

```
updateTokenURIOwner("0x0000000000000000000000000000000000000000");
```

This call will transfer `tokenURI` ownership (also known as the **metamaster**) to a different address (the zero address above). Only the current tokenURIOwner/metamaster can make this call. **Owning a Capsule Collection and being the metamaster of a Capsule Collection are two different concepts.** For more information on the differences, view above.

### Example Capsule Collection Transfer Ownership Call

An example call is shown here:

```
transferOwnership("0x0000000000000000000000000000000000000000");
```

This call will transfer ownership of the Capsule Collection to a different address (the zero address above). Only the current Capsule Collection owner can make this call.


# Use Cases

Explore several use cases of the Capsule Protocol.

{% content-ref url="/pages/s3HdzHLtLnmsiLP8yTzT" %}
[For Artists](/capsulenft/use-cases/for-artists)
{% endcontent-ref %}

{% content-ref url="/pages/X1raqqybd088YrGv2r3S" %}
[For DeFi](/capsulenft/use-cases/for-defi)
{% endcontent-ref %}

{% content-ref url="/pages/knM8cxM2TphNWmTt1x2B" %}
[For Gaming](/capsulenft/use-cases/for-gaming)
{% endcontent-ref %}


# For Artists

Explore several use cases of the CapsuleNFT Protocol that give artists and musicians power over their own work.

### Art With Underlying Value 

*Capsule NFTs represent a new medium that artists can choose to use as their canvas.*&#x20;

A common critique of the NFT marketplace as it relates to art is that there is no inherent value to NFTs. While this critique is contentiously debated, it is much easier to argue that Capsule NFTs do have underlying value. By storing ERC-20 tokens, ERC-1155 tokens or ERC-721 tokens within a Capsule NFT, the resulting NFT now has multifaceted value. The Capsule NFT contains the underlying value of its redeemable tokens as well as the value of the NFT metadata or artwork. Users can decide whether they would rather hold the NFT for its utility and art or redeem the Capsule NFT for the value of the underlying tokens. These choices add value to the Capsule NFT.

### Capsule Record Albums

The CapsuleNFT Protocol allows for nested NFTs. A perfect application for this could be applied to music NFTs, which could be stored in a Capsule NFT to create an "album" of music NFTs. This approach could be adopted by ordinary users who want to create their own "mixtape" or by professional artists who are looking for a new way to distribute their music and claim ownership over their product.

{% hint style="success" %}
These ideas were developed by the team, but we encourage the community to get creative and explore new possibilities!
{% endhint %}


# For DeFi

Explore several use cases of the Capsule Protocol that could be used to further decentralized finance, also known as DeFi.

### Interest-Generating NFTs

There many different ERC-20 tokens, such as pool tokens, that generate revenue by holding the token. By wrapping these tokens within Capsules NFT, users of the Capsule Protocol can create an NFT that passively generates interest. The holder would be able to redeem their Capsule NFT at any time in order to obtain their underlying tokens.

Please note that all interest generating activity is initiated by the minter. No interest generating activity is completed, performed or added by the Capsule Protocol. The interest generating tokens are merely stored within the Capsule NFT.

### Asset Portfolio NFTs

By placing multiple tokens in a Capsule NFT, funds would be able to group user investments in a single NFT. This single NFT could then be transferred or traded within a single transaction, saving users money on gas and providing a more seamless experience.

Portfolio NFTs can further be fractionalized for greater liquidity/accessibility to the portfolio, essentially creating "shares" for the original fractionalized Capsule NFT - this could be analogously compared to an exchange traded funds in the traditional finance space..

### Initial NFT Offering (INO)&#x20;

The Capsule Protocol allows new or existing projects to distribute their project tokens through NFTs. This would allow projects to complement or completely replace the traditional method of initial coin offerings (ICOs) with initial NFT offerings, or INOs. This is an entirely new way of distributing project tokens.

### Cross-chain Asset Bridge&#x20;

Capsule NFTs provide a revolutionary possibility to allow ERC-20s and ERC-1155 tokens to be permissionlessly bridged to any chain that supports an ERC-721 token bridge. By storing tokens within a Capsule NFT, you are essentially making those digital assets "compatible" to be transferred across ERC-721 bridges to other chains. Capsule NFTs that have been bridged to other chains would then simulate synthetic assets of their underlying tokens on the new chain/

Taking the above example a step further: the newly bridged Capsule NFT could be fractionalized for greater liquidity/accessibility to the synthetic asset.&#x20;

{% hint style="success" %}
These ideas were developed by the team, but we encourage the community to get creative and explore new possibilities!
{% endhint %}


# For Gaming

Explore several use cases of the CapsuleNFT Protocol that let gamers take their experience to the next level.

### Loot Boxes & Verifiably Random Loot Boxes

Capsule NFT’s are capable of storing multiple assets inside of a single container. These can be used as in-game loot box redemption systems. Instead of receiving a box and getting airdropped the loot, you can now receive all assets within a single transaction. Users can hold the loot box itself and trade it for its value, or crack it open to see what's inside.

Taking these Capsule NFT loot boxes a step further, it is possible to integrate Chainlink VRF into the loot box system. Users would be able to verify loot was trustlessly received on-chain, and confirm loot drop tables. Pair this with rarities and you have a very similar system to Counter Strike Global Offensive or verifiable Hearthstone card packs.

### In-Game Blockchain Economies

Capsule NFTs could be used for video games that utilize the blockchain to record in-game currencies. Capsule NFTs would represent items that can be sold or "broken down" in order to receive the underlying currency token(s). This provides transparency to the players, so they can rest assured that the value of their in-game items are verifiably backed by the in-game currency stored within the Capsule NFT item.

A popular example of where this use case would apply is for online trading card games that utilize a “dusting economy,” or a system where players are able to destroy (casually known as "dusting") their cards for in-game currency that they can then use to buy new cards. Using the CapsuleNFT Protocol, developers could use Capsule NFTs to represent their trading cards with the underlying “dust value” of the card wrapped within the Capsule. Anytime a player may want to dust their card, they would simply redeem the Capsule NFT and retrieve the underlying in-game currency.

### Evolving Capsule NFT

Capsule NFTs can be wrapped within other Capsule NFTs, forming something similar to a Russian Nesting Doll. As you burn different layers of the Capsule NFT, different wrapper images are revealed, and the Capsule NFT evolves from one form to another. It is possible to set different metadata conditions to each layer to reveal upon unwrapping, or even change the traits of the NFT.\
\
**Example:** A weapon skin as an Evolving Capsule NFT, where the condition is to get 10 kills. After you get 10 kills, a layer is burned and the skin evolves to its next form. The next form has significantly higher stats, and is viewable and tradable on any exchange.

\
**Example:** A character skin you purchase could evolve after completion of each level, creating dynamic character progression throughout the game itself.

### Metaverse Wrapper

There are many opportunities on how Capsule NFTs can be implemented into the metaverse.&#x20;

* Capsule NFTs could be used to hold a 'starter pack' of equipment that a player could purchase and redeem to immediately have all the necessary equipment to participate in a game or event.
* Capsule NFTs could be used to transform individual pieces into 'set pieces'. For example, imagine a user has an NFT representing a character and another NFT representing a piece of equipment. By creating a Capsule NFT holding both NFTs, you can produce a new NFT of the character holding or wearing the piece of equipment.<br>

{% hint style="success" %}
These are just a few ideas that the team has identified as potential areas of exploration. We are excited to see how the use of Capsule NFTs will evolve within the metaverse.
{% endhint %}


# Examples

Learn about how the CapsuleNFT Protocol has been implemented into various projects.

{% content-ref url="/pages/SbQR56RaHoBdNlTUZTlm" %}
[Dollar Store Kids](/capsulenft/examples/dollar-store-kids)
{% endcontent-ref %}


# Dollar Store Kids

This page highlights an example implementation of the CapsuleNFT Protocol with the popular NFT collection, Dollar Store Kids.

### Summary of Dollar Store Kids

Dollar Store Kids is the first NFT Collection of its kind in which every NFT in the collection can be redeemed for $1 USDC. Redeeming an NFT in the collection permanently burns the NFT, thereby reducing the total Dollar Store Kids NFTs in the collection by one.

The execution of this collection can be extrapolated to the [initial NFT offering (INO) use case](/capsulenft/use-cases/for-gaming#use-case-1-initial-nft-offerings-ino). By adding varying amounts of project tokens in place of the $1 USDC, projects have the opportunity to distribute their tokens through NFTs in an unprecedented fashion.

**At any time, the final version of the** [**Dollar Store Kids**](https://dollarstorekids.io/) **code can be viewed on** [**Github**](https://github.com/CapsuleNFT/dollar-store-kids) **and is free for public use. The code has been audited by Quantstamp, with results viewable** [**here**](https://github.com/CapsuleNFT/dollar-store-kids/blob/main/audit/CapsuleNFT%20-%20Dollar%20Store%20Kids%20and%20Protocol%20Updates%20-%20Report.pdf)**.**

#### Code Overview

Before hopping into the code, let's explore how this contract worked:

* Upon deployment of the Dollar Store Kids contract, the constructor would deploy its own Capsule NFT Collection (it now owns that collection) with specific parameters (further information here).
* The collection `baseURI` (collection metadata) is set through the constructor, but can also be changed at any time through the `updateBaseURI()` method.
* The moment the `toggleMint()` method is called, anyone can mint their own DSK from the contract by calling `mint()`.
* At any time, any user may redeem their DSK by calling the `burn()` function.

#### Other Considerations

The Dollar Store Kids were launched under the following conditions:

* The Dollar Store Kids maximum total supply (`MAX_DSK`) was set to X.
* The Dollar Store Kids contract was funded with USDC. This was to X, to correspond to the maximum total supply.
* In order to mint a Dollar Store Kid, the user would pay 0.001 ETH. This is the fee to mint an NFT using the Capsule NFT protocol.
* Mint is limited to one Dollar Store Kid per account.

### Dollar Store Kids Code

This section will go over some implementation requirements and decisions made in the Dollar Store Kids contract.

#### Implementing the CapsuleNFT Protocol

Adding the CapsuleNFT protocol to the contract is as simple as below:

```
ICapsuleFactory public constant CAPSULE_FACTORY = ICapsuleFactory(0x4Ced59c19F1f3a9EeBD670f746B737ACf504d1eB);
ICapsuleMinter public constant CAPSULE_MINTER = ICapsuleMinter(0xb8Cf4A28DA322598FDB78a1406a61B72d6F6b396);
ICapsule public immutable capsuleCollection;
```

This allows to you interact with all of the methods of the CapsuleNFT Protocol, alongside any ERC-721 NFT based methods (within `ICapsule`).

#### Core Functions

Since this is an NFT Collection owner, the most important methods are for users to mint and burn their Dollar Store Kid.

`function mint()`

As mentioned above, the Dollar Store Kids collection was limited to one mint per account. Most of the logic in the mint method relates to such condition.

The remaining logic relates to the creation of a Dollar Store Kid Capsule NFT.

```
// Mint the DSK
CAPSULE_MINTER.mintSingleERC20Capsule{value: msg.value}(
    address(capsuleCollection),
    USDC,
    ONE_DOLLAR,
    "",
    _caller
);
```

A more thorough explanation of the minting of a Capsule NFT can be found here. Note that this method could have included a different token, such as wETH, BAYC (with `mintSingleERC721Capsule`), or multiple tokens (with `mintMultiERC20Capsule` or `mintMultiERC721Capsule`).

Since we supplied the USDC to the Dollar Store Kids contract, there was no need for the user to transfer any tokens to the contract first. This step should be considered when creating your own collection.

`function burn()`

Quite simply, this method accepts the user's Dollar Store Kid, and burns it for them. There is the ability to add more logic to this method.

```
CAPSULE_MINTER.burnSingleERC20Capsule(address(capsuleCollection), id_);
```

The USDC is then transferred back to the user.

#### Governor Functions

The Governor functions are admin functions used for varying purposes:

* `function sweep(address _token)`

Used to withdraw any tokens sent to the Dollar Store Kids contract.

* `function toggleMint()`

Used to either start the mint process for the collection, or pause it.

* `function transferCollectionOwnership(address newOwner_)`

Used to transfer the ownership of the underlying Capsule NFT Collection.

* `function updateMetamaster(address metamaster_)`

Used to transfer `metamaster` ownership of the Capsule NFT Collection. For more information on `metamaster` privileges, view [Metamaster](/capsulenft/overview/capsule-collections/metamaster).

* `function updateBaseURI(string memory baseURI_)`

Used to update the `baseURI` of the collection.

* `function updateRoyaltyConfig(address royaltyReceiver_, uint256 royaltyRate_)`

Used to update the royalty config for the base Capsule NFT contract.

#### This is an example of utilizing the CapsuleNFT Protocol to create your own composable NFT collection. There are a variety of other use cases creatable with CapsuleNFT.

### Happy building!


# Comparison to ERC-998

In this section we discuss the key similarities and differences between ERC-998 and Capsule NFTs.

### ERC-998

ERC-998 tokens can be separated into two distinct categories: top-down composables, and bottom-up composables. A top-down composable is an ERC-721 token with additional functionality for owning other ERC-721 tokens, or ERC-20 tokens. A bottom-up composable can be either an ERC-721 or an ERC-20 token with functionality for being owned by an ERC-721 token.

In theory, ERC-998s allow for implemented internal tokens to be transferred in and out. In practice, the more tokens and methods an ERC-998 compatible token supports, the bigger the contract becomes. This can quickly reach a point where the token surpasses the 24KB maximum contract size limit, and becomes undeployable.

EIP-998 is a **draft**, and does not yet have a leading implementation for developer use. It is rarely used, complex, and updates to its supporting protocols have been few and far between. It has also not been officially audited. Implementing EIP-998 requires a tremendous amount of research, code-writing, and testing.

#### Links

The creator of the standard has [no further plans](https://github.com/ethereum/eips/issues/998#issuecomment-1012320451) to further improve the ERC-998 proposal.

A discussion in the OpenZeppelin contracts Github repository on why the addition of a standard ERC-998 implementation [would make little sense](https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3062).

### CapsuleNFT vs. ERC-998

The Capsule Protocol simplifies the process by giving users dependable, optimized methods to interact with tokens.

Developers and NFT creators utilizing the Capsule Protocol need only to call one method to create a unique Capsule NFT contract for themselves, and these Capsule NFTs natively support **all** Capsule NFT holding methods - which do not require extra token specification and implementation.

In addition, the entirety of Capsule’s ecosystem is upgradable at no cost to the user, meaning it could evolve to support other tokens, or anything else the community desires. For example: a new Capsule NFT minting method would be automatically supported by any existing Capsule Collection.

The Capsule Protocol is the simpler, clearer, and more flexible way to go about NFT composability. Capsule NFTs fixate on security, ease-of-use, and upgradability. Whether you are an aspiring NFT creator, or a hardcore developer, the Capsule Protocol is designed to bring users more secure, efficient, and robust solutions than implementing your own ERC-998 token standard.

#### Security

Unlike the unproven ERC-998 standard, the Capsule Protocol has undergone a thorough audit by Quantstamp, with the results viewable [here](https://certificate.quantstamp.com/full/capsule-nft).

### Examples

Here are some examples where using the Capsule Ecosystem trumps the ERC-998 standard:

#### Anyone

* Anyone, lacking knowledge of Solidity/testing frameworks/web3, wants to create a composable NFT Collection
* Anyone, lacking knowledge of Solidity/web3/React/HTML, wants to allow other users to mint from their collection without building an frontend
* Anyone, lacking knowledge of existing token types, wants to create a flexible solution for himself/his users to mint different types of composable NFTs from his collection
* Anyone, interested in the improvements built atop of the Capsule Protocol, creates a Collection to leverage the additional usecases of Capsule NFTs
* Anyone using the ERC-998 standard, realizing all-too-late their collection needed more flexibility in token-storing types, needing to redeploy their entire ecosystem
* Anyone, interested in the composability of Capsule NFTs (placing Capsule NFTs within another) without additional hassle, implementation, and testing.
* Anyone, interested in the protocol level NFT additions (private/public, lockable, tokenURIOwner) that Capsule NFTs have, without building, verifying, and testing their own code

#### Developers

* A developer who appreciates the ease, lack of maintenance, and flexibility in outsourcing composability to a secure (see audit results [here](https://certificate.quantstamp.com/full/capsule-nft)), upgradable outlet
* A developer who wants to build an ecosystem focused on a specific application of composable NFTs, rather than the generation of them
* A developer interested in building a ticketing/redemption application which requires the provable burning of the composable after usage
* A developer who seeks financial benefit in adding onto the Capsule ecosystem, allowing users to create different variations of Capsules, claiming additional fees.
* A developer who seeks to monetize his own NFT Collection atop the Capsule ecosystem
* A developer who seeks to build public, composable NFT Collections, potentially limiting minters of his NFT Collection to certain holders (NFT holders, wBTC holders, specific addresses, etc.)


# FAQ

### Capsule Packaging and Shipping

<details>

<summary>What is Capsule?</summary>

Capsule is a transfer service that allows anyone to send and redeem gasless transactions with enhanced security features. With Capsule, users can even reroute or recall transactions after they have been initiated.

</details>

<details>

<summary>How does Capsule work?</summary>

Capsule works by placing your assets inside of a programmable wrapper called a Capsule NFT. Think of a Capsule as secure digital container capable of holding and transporting any type of asset across any blockchain. Once a Capsule is prepared, it's shipped off to an escrow contract, accessible only by you and the recipient. This ensures absolute security and control over your assets.

</details>

<details>

<summary>What are the benefits of using Capsule?</summary>

* **No gas fees:** Capsule transactions are gasless, which means that users do not have to pay any fees to send or receive cryptocurrency.
* **Ease of use:** Capsule is very easy to use. Users can send and receive cryptocurrency with just a few clicks.
* **Security:** Capsule utilizes blockchain smart contracts to ensure transactions are secure and decentralized.
* **Scalability:** Capsule is designed to be scalable, so it can handle a large number of transactions on any blockchain without slowing down.

</details>

<details>

<summary>What blockchains does Capsule support?</summary>

Capsule is currently accessible on Ethereum and Optimism and will expand to many other blockchains in the future.

</details>

<details>

<summary>What is Capsule's Vision for the space?</summary>

Capsule is driven by the mission to make cryptocurrency more accessible. We plan to adopt the ERC-4337 standard, creating and offering user-friendly "smart wallets" that provide a seamless user experience. We're also working on bridging assets across various chains and integrating physical and off-chain data within transactions, making Capsule a comprehensive solution for your crypto needs. By taking on complex processes, supporting gas fees, and even generating wallets for users when necessary, Capsule aims to dismantle the barriers to cryptocurrency adoption.

</details>

<details>

<summary>Can I customize the Capsule Redemption Page?</summary>

Absolutely! The Capsule Redemption Page is customizable to your brand's identity, including graphics, video content, and other brand elements. This gives you the opportunity to create a unique, immersive experience for your users, aligning your brand with cutting-edge technology. For advertising and partnership opportunities contact <business@capsulenft.com> or [complete this form](https://docs.google.com/forms/d/1knQBx9XVQle0Kv7kWJbJT0TeI7aYXQrRxxwcabUVgVE/edit).

</details>

<details>

<summary>Where can I learn more about Capsule?</summary>

You can learn more about Capsule by reading our [documentation](https://docs.capsulenft.com/), visiting our [website](https://capsulenft.com/), reading the [Capsule whitepaper](https://docs.google.com/forms/d/e/1FAIpQLSe12345jkl67890fghijklmnopqrstu/edit), or [joining the Capsule community on Discord.](https://discord.gg/capsulenft)

</details>

### CapsuleNFT

<details>

<summary>What is a Capsule NFT?</summary>

A Capsule NFT is an NFT that follows the ERC-721 standard and is able to store other tokens, which may be redeemed at a later date. Capsule NFTs are created using the Capsule Protocol.

</details>

<details>

<summary>What kind of tokens can be stored in a Capsule NFT?</summary>

Currently, the Capsule Protocol supports the ability for users to store ERC-20 tokens, ERC-721 tokens and ERC-1155 tokens.

</details>

<details>

<summary>What is a Capsule Collection?</summary>

A Capsule Collection is an NFT collection generated by the Capsule protocol. An NFT Collection is like a library, housing any amount of NFTs inside similarly to how a library houses books. An example of an NFT Collection can be seen [here](https://opensea.io/collection/boredapeyachtclub).

</details>

<details>

<summary><strong>Can a Capsule NFT store another Capsule NFT?</strong></summary>

Yes a Capsule NFT can store a Capsule NFT, which can also store another Capsule NFT. Capsule NFTs can store an infinite chain of Capsule NFTs.

</details>

<details>

<summary><strong>How many tokens can a Capsule NFT store?</strong></summary>

Capsule NFTs can store **a limitless amount of a single token standard**. To elaborate further, a Capsule NFT is able to store many different kinds of ERC-20 tokens, ERC-721 tokens, or ERC-1155 in a single Capsule NFT, but not a combination at the same time.&#x20;

#### Example of Storing ERC-20, ERC-1155 and ERC-721 Tokens

If you would like to store ERC-20 tokens and ERC-1155 tokens with ERC-721 tokens, a user is able to do so by first creating an ERC-20 Capsule NFT and an ERC-1155 Capsule NFT separately and then adding it to an ERC-721 Capsule NFT along with any other ERC-721s that the user would like to include.

</details>

<details>

<summary><strong>What is collection locking?</strong></summary>

Locking a collection sets a limit, determined by the collection owner, to the amount of NFTs that can be minted in a Capsule Collection. Once the limit about has been reached, no one, including the owner, can mint any more NFTs in the collection.

</details>

<details>

<summary><strong>Is it possible to prevent a collection from being locked?</strong></summary>

Yes. There are two ways to permanently prevent a collection from being locked:

* Set the lock number to the maximum unit 256 minus one (2^256 - 2)
* Or transfer ownership of the unlocked collection to the zero address (0x0000...)

</details>

<details>

<summary><strong>Can you unlock a collection that has been locked?</strong></summary>

No. Once a collection has been locked, it may never be unlocked.

</details>

<details>

<summary><strong>What is the difference between a Collection Owner and a Metamaster?</strong> </summary>

A Collection Owner is able to lock any Capsule Collections they own. In addition if a Capsule Collection is private, only the Owner is able to mint to that collection.&#x20;

A Metamaster is the controller of all metadata in the Capsule Collection, meaning they have the ability to reassign tokenURI data.&#x20;

</details>

<details>

<summary><strong>Can I transfer collection ownership?</strong> </summary>

Yes. While there is currently no way to perform this function on the front end, a Collection Owner may view their collection on Etherscan and call the *transferOwnership* method to the desired address (for more details, see section [Capsule.sol](/capsulenft/developer-walkthroughs/contracts/capsule.sol#transferownership)). **We currently recommend only highly technical users to attempt this function.**&#x20;

The CapsuleNFT team is planning to create a more intuitive front end user experience for this function in the future.

</details>

<details>

<summary><strong>Can I transfer Metamaster privileges?</strong> </summary>

Yes. While there is currently no way to perform this function on the front end, a user with Metamaster privileges to a collection may view the collection on Etherscan and call the transfer *updateTokenURIOwner* method to the desired address (for more details, see section [Capsule.sol](/capsulenft/developer-walkthroughs/contracts/capsule.sol#updatetokenuriowner)). **We currently recommend only highly technical users to attempt this function**.&#x20;

The CapsuleNFT team is planning to create a more intuitive front end user experience for this function in the future.

</details>

<details>

<summary><strong>Does the CapsuleNFT Protocol have a token?</strong></summary>

There is currently no token associated with the Capsule Protocol.

</details>

Have more questions or concerns? E-mail **<support@CapsuleNFT.com>** or [**join our Discord**](https://discord.com/invite/capsulenft)**.**


# Official Links

<table data-header-hidden><thead><tr><th width="150" align="right"></th><th></th><th data-hidden></th></tr></thead><tbody><tr><td align="right"><strong>Website</strong></td><td><a href="https://capsulelabs.xyz">capsulelabs.xyz</a></td><td></td></tr><tr><td align="right"><strong>Application</strong></td><td><a href="https://app.capsulelabs.xyz">app.capsulelabs.xyz</a></td><td></td></tr><tr><td align="right"><strong>Docs</strong></td><td><a href="https://docs.capsulelabs.xyz">docs.capsulelabs.xyz</a></td><td></td></tr><tr><td align="right"><strong>Discord</strong></td><td><a href="https://discord.gg/invite/capsule">discord.com/invite/capsule</a></td><td></td></tr><tr><td align="right"><strong>Twitter</strong></td><td><a href="https://x.com/capsule_xyz">twitter.com/capsule_xyz</a></td><td></td></tr><tr><td align="right"><strong>Medium</strong></td><td><a href="https://medium.com/capsulenft">medium.com/CapsuleNFT</a></td><td></td></tr><tr><td align="right"><strong>LinkedIn</strong></td><td><a href="https://www.linkedin.com/company/capsule-nft/">linkedin.com/company/Capsule-NFT</a></td><td></td></tr><tr><td align="right"><strong>Dollar Store Kids</strong></td><td><a href="https://blur.io/collection/dollar-store-kids">blur.io/collection/dollar-store-kids</a></td><td></td></tr></tbody></table>


# Brand Kit

This page features the official CapsuleNFT logos, wordmarks, and colors for media use.

### Logo

![](/files/ijoxBTemGB6ZBsHlrLjX)

{% file src="/files/j2PXJozJVixMY5CowCdm" %}
Colored Logo PNG
{% endfile %}

{% file src="/files/Ez0yqXmiNO0lcKgUoF1J" %}
White Logo PNG
{% endfile %}

### Wordmark

![](/files/YH1ZilvMpgvjKd7etzaw)

{% file src="/files/YH1ZilvMpgvjKd7etzaw" %}
Black Wordmark PNG
{% endfile %}

{% file src="/files/k2QygV2acqn7qMNl7Ifm" %}
White Wordmark PNG
{% endfile %}

### Hex Colors

![#FFFFFF, #6F40FF, #000000](/files/0FIRzoYqiJRvILvTIDga)

### About CapsuleNFT

[CapsuleNFT](https://capsulenft.com/) makes NFTs more composable and useful for artists, gamers, collectors, crypto industry participants, and more. The Capsule Protocol allows for the simple, elegant packaging of digital assets — NFTs, cryptocurrency tokens, etc. — enabling easier transferability and maximum creative freedom. Follow the project on [Twitter](https://docs.capsulelabs.xyz/additional-resources/www.twitter.com/capsulenft), participate in the discussions on [Discord](https://docs.capsulelabs.xyz/additional-resources/www.discord.com/invite/CapsuleNFT), review the [documentation](https://docs.capsulenft.com/), or learn more about how to use CapsuleNFT on [YouTube](https://www.youtube.com/channel/UCNTwlZLvWOFO7j7lOlyesBQ).

### Official Links

{% content-ref url="/pages/TAp39YRzVoPDKM9WH6Sg" %}
[Official Links](/additional-resources/official-links)
{% endcontent-ref %}

### For media inquiries, please contact *<media@CapsuleNFT.com>*.


# Legal

{% content-ref url="/pages/NuXiiwaFSVAj5EZb4xi1" %}
[Terms of Use](/additional-resources/legal/terms-of-use)
{% endcontent-ref %}

{% content-ref url="/pages/mUe7Spumuga7YDwYD0bs" %}
[Privacy Policy](/additional-resources/legal/privacy-policy)
{% endcontent-ref %}

{% content-ref url="/pages/pwPhvbv0VXlfYop5XTPS" %}
[CCPA Notice](/additional-resources/legal/ccpa-notice)
{% endcontent-ref %}

{% content-ref url="/pages/nFBQXSdiduK7N1dFgRrr" %}
[Risks](/additional-resources/legal/risks)
{% endcontent-ref %}


# Terms of Use

Last Modified: June 2022

### **Acceptance of the Terms of Use**

These terms of use are entered into by and between You and CapsuleNFT, Inc., a Delaware corporation ("**Company**", "**we**" or "**us**"). The following terms and conditions, together with any documents they expressly incorporate by reference (collectively, these "**Terms of Use**"), govern your access to and use of the website located at CapsuleNFT.com (the “**Website**”), as well as any content, applications, services or other functionality offered on or through the Website by the Company now and in the future. The Website offers a means to access and use certain technology including the functionality associated with the Capsule™ NFT protocol (the “**Protocol**”). The Protocol code is available for non-production use under the Business Source License 1.1 and can be found here <https://capsulenft.gitbook.io/capsulenft/developers/contracts>. Use of the Protocol through the Website is governed by these Terms of Use. These Terms of Use also govern functionality offered through the Website in the future, such as improvements to the Protocol and marketplace functionality).

Please read the Terms of Use carefully before you start to access or use the Website including any of its functionality. **By using the Website, or by clicking to accept the Terms of Use when this option is made available to you, you agree to be bound and abide by these Terms of Use and our Privacy Policy, found at** [**https://capsulenft.gitbook.io/capsulenft/legal**](/additional-resources/legal)**, incorporated herein by reference.** If you do not want to agree to these Terms of Use or the Privacy Policy, you must not access or use the Website. All information we collect through use of the Website is subject to our Privacy Policy. By accessing or using the Website, you consent to all actions taken by us with respect to your information in compliance with the Privacy Policy. As used in the Terms of Use: the words “include,” “includes,” and “including” are not limiting and mean “without limitation”; the word “or” is not exclusive; words denoting the singular have a comparable meaning when used in the plural, and vice-versa; and words denoting any gender include all genders.

The Website includes a portal to access the Protocol and create Capsule NFTs and may also provide services as a “Marketplace” for Capsule NFTs or other Digital Assets (defined below). As such, the Website may function as an Online Service Provider under DMCA Title II, the Online Copyright Infringement Liability Limitation Act ("OCILLA"), for facilitating communication between two sets of users: sellers and buyers. Sellers may market their sale of items and buyers may peruse and at their option, bid or buy the items. The actual contract for sale is between the seller and buyer. In these capacities, unless specifically disclosed by the Company, Company is not a party to any transaction (e.g., a seller, a traditional auctioneer, etc.). Any guidance Company provides as part of facilitating the Protocol, providing the Marketplace, or otherwise operating the Website, such as pricing, listing, and sourcing is for informational purposes only it is up to you to follow it or not. Company is not involved in how the Capsule NFTs (or other digital-based goods that may be used in the creation of the Capsule NFTs, like smart contracts, cryptocurrencies, artistic or other content, and other digital-based goods) (collectively, “Digital Assets”) are used. Company has no control over and disclaims all liability related to: the existence, accuracy, quality, safety or legality of items advertised or user content; the ability or legal standing of sellers to sell items; the ability of buyers to pay for items; or that any user will complete a transaction or return an item. Some Digital Assets may relate or interface with distributed applications (“Dapps”) such as blockchains, Bitcoin, Ethereum, and other distributed ledger-type technologies.

The Protocol and Marketplace are offered and available to users who are 18 years of age or older. The Protocol and Marketplace are unavailable to users who are convicted sex offenders and users who have previously had their account disabled by the Company for violations of these Terms of Use or other applicable policies. If the user is an organization, you affirm you have the right, power, and authority to enter into this agreement on behalf of, and to bind, said organization. If you do not agree to the terms of this agreement, you must not use the Protocol or Marketplace or any of our services. By using this Protocol or the Marketplace, you represent and warrant that you are of legal age to form a binding contract with the Company and meet the foregoing eligibility requirements. You represent that you are legally permitted to use the Protocol and Marketplace in your jurisdiction and are permitted to transact in Digital Assets and interact with the Protocol and Marketplace in any reasonably foreseeable way. If you do not meet all of these requirements, you must not access or use the Protocol or the Marketplace. Without limiting the foregoing, by using our Protocol or the Marketplace, you acknowledge and understand that laws regarding Digital Assets may vary from jurisdiction to jurisdiction, and it is your obligation alone to ensure that you fully comply with any law, regulation or directive, relevant to your jurisdiction with regard to the use of our Protocol and the Marketplace. It is also your obligation to comply with any license or other requirements that apply to Digital Assets that you use in connection with the Marketplace or the Protocol. For example and without limiting the foregoing, you are responsible for complying with the terms of any content license that may apply to Digital Assets that you use in creating a Capsule NFT and for payment of any royalties, commissions or other amounts due upon sale of such Digital Assets including in connection with the sale of a Capsule NFT.

You further represent and warrant that you will not use the Protocol or the Marketplace if the laws of your country of residency prohibit you from doing so in accordance with these Terms of Use. For the avoidance of doubt, the ability to access our Protocol or the Marketplace does not necessarily mean that the Protocol or the Marketplace, or your activities through it, are legal under the laws, regulations or directives relevant to your jurisdiction. All of the Protocol, the Marketplace, or the services made available through our Protocol or in the Marketplace, may not be available to all users, and we reserve the right to assess or reassess at any time your eligibility to use all or part of our Protocol or interact in the Marketplace. The availability of our Protocol or use of the Marketplace does not constitute, and may not be used for the purposes of, an offer or solicitation to anyone in any jurisdiction in which such offer or solicitation is not authorized, or to any person to whom it is unlawful to make such an offer or solicitation. By accessing or using the Protocol or the Marketplace, you explicitly agree that any smart contracts that may be built into the Dapps that interact with the Protocol, comprise the Marketplace and services are legally binding and enforceable upon you and the contract counterparty.

### **License and Access**

Subject to your compliance with any terms required to access particular functionality or third party offerings (“Service Terms”) and these Terms of Use, and your payment of any applicable fees, we grant you a limited, non-exclusive, non-transferable, non-sublicensable license to access and make use of the Protocol, the Marketplace and related services. This license does not include any resale of the Protocol, the Marketplace, or the contents of the Marketplace; any collection and use of any product listings, descriptions, or prices; any derivative use of any service or its contents; any information posted by the Company or other users of the Website that may be publicly available (unless separate license is provided by other users); any downloading, copying, or other use of account information for the benefit of any third party; or any use of data mining, robots, or similar data gathering and extraction tools. All rights not expressly granted to you in these Terms of Use or any Service Terms are reserved and retained by Company or its licensors, suppliers, publishers, rightsholders, or other content providers. No portion of the Protocol or Marketplace may be reproduced, duplicated, copied, sold, resold, visited, or otherwise exploited for any commercial purpose without our express written consent. You may not frame or utilize framing techniques to enclose any trademark, logo, or other proprietary information (including images, text, page layout, or form) of the Website, Protocol or Marketplace without express written consent. You may not use any meta tags or any other "hidden text" utilizing our name or trademarks without our express written consent. You may use the Protocol or Marketplace only as permitted by law. The licenses granted by us terminate if you do not comply with these Terms of Use or any Service Terms.

### **NFT Attributes**

The Protocol is designed to allow users to mint Capsule™ NFTs, which through the technology can store other Digital Assets like tokens or NFTs within an NFT. Some Digital Assets sold on the Marketplace may include NFTs, including Capsule NFTs. When purchasing an NFT, you agree and understand what characteristics NFTs have and how the following terms apply to their sale. An NFT is a digital tool that can represent tangible and intangible property such as photographs, videos, writings, or music. NFTs are usually built using similar technology to cryptocurrencies and Dapps. But while cryptocurrencies are usually fungible, NFTs are not. Each NFT is coded into a blockchain, often Ethereum, and contains built-in authentication and proof of ownership and is often one-of-a-kind. When you buy an NFT, the terms of your purchase, and what you actually purchase and now own, may be limited by the terms or technology of the underlying Dapp comprising the NFT as well as any licenses or other agreements imposed by the owner of the NFT content. It is up to you to confirm your understanding of what you are buying. Company does not maintain control over any Dapp, such as those on Bitcoin or Ethereum. Therefore the ownership of, and any license or other rights transferred with, any purchased NFT is a matter between the seller and buyer and the applicable Dapp, and Company takes no responsibility with respect to such rights and obligations. When users use the Protocol, all licenses and all ownership interests in any Digital Assets which a user has remains with said user and does not pass to Company when users use the Protocol, Marketplace or the Website.

You further understand that some blockchain transactions may not be reversible. You understand that NFTs and other Digital Assets may only exist by virtue of the ownership record maintained in a respective Dapp, and further that smart contracts are conducted and occur on decentralized ledgers within such Dapps. Company has no control over and makes no guarantees or promises with respect to such smart contracts or the functioning of such Dapps. In cases where a transaction involving a Digital Asset is revealed to be fraudulent, or a buyer or seller acts fraudulently, then the defrauded buyer/seller shall have no recourse against Company, but solely against the respective seller/buyer.

Users minting NFTs through the Protocol agree to not use the Protocol with the intent to defraud persons.

### **Electronic Communications**

When you use our services or send emails, text messages and other communications from your desktop or mobile device to us, you may be communicating with us electronically, you consent to receive communications from us electronically, such as emails, texts, mobile push notices, or notices and messages on this site, and you can retain copies of these communications for your records. You agree that all agreements, notices, disclosures and other communications that we provide to you electronically satisfy any legal requirement that such communications be in writing.

### **Changes to the Terms of Use**

We may revise and update these Terms of Use in our sole discretion. Except when required by law, we will provide notification of updates to the Terms of Use and give users an opportunity to review them before they go into effect. Once the updated Terms of Use are in effect, you will be bound by the updated Terms of Use if you continue to use the Protocol or the Marketplace. Any changes to the dispute resolution provisions will not apply to any disputes for which the parties have actual notice on or prior to the effective date of any updated Terms of Use.

### **Accessing the Protocol or Marketplace and Account Security**

To access and use the Website, including the Protocol and Marketplace (when available), you may be asked to provide login information, potentially including a username, email, and password (“Login Info”) and may include an Ethereum (or other blockchain’s) wallet address (“Wallet”) to access, fund or receive disbursements from your account. It is your sole responsibility to maintain the security of your Login Info and your Wallet. If you lose access to your Wallet, a private key, password, or other method of securing your Wallet, any funds may be irretrievable, and we will be unable to assist you in any way. You hereby irrevocably waive, release and discharge all claims, whether known or unknown to you, against us, our affiliates and their respective shareholders, members, directors, officers, employees, agents and representatives related to your use of any Wallet software, associated loss of funds, transaction failures, or any other defects that arise in the course of your use of your Wallet, including any losses that may obtain as a result of any failure in smart contracts made available on the Website, used in connection with the Protocol, or used in connection with your use of the Marketplace. You hereby accept responsibility for any activity on the Protocol interacting with your Wallet.

Additionally, you hereby irrevocably waive, release and discharge all claims, whether known or unknown to you, against us, our affiliates and their respective shareholders, members, directors, officers, employees, agents and representatives related to any defects that arise in the course of your use of your Login Info and account. By using the Protocol or the Marketplace, you agree to be fully, independently and personally liable for each action initiated on the Protocol or Marketplace by you, and you must make sure that you are the only person with access to your Login Info at all times. You hereby accept responsibility for any activity transacted on the Protocol or Marketplace through your account.

As part of using the Marketplace in connection with the Protocol, you may be given the option to “lazy mint” NFTs or other Digital Assets. In this process you provide data, code and other relevant materials to mint a Digital Asset to Company, temporarily hosted in a centralized database. Another user identifies an unminted Digital Asset that they desire to purchase. Upon confirmation that a user desires to purchase one of these Digital Assets, such purchasing user shall provide fees required to mint the Digital Asset they wish to purchase. The selling user waives all claims against Company for any potential destruction or damage to unminted Digital Assets due to technical error, malicious third parties, catastrophe or any other event causing the centralized database in which unminted Digital Assets are held prior to a sale to be damaged, destroyed, or stolen.

We will use commercially reasonable technical and physical safeguards to make the Protocol and the Marketplace securely available to its users. However, given the inherent risk of transmitting information over the internet, we will not be liable if for any reason all or any part of the Protocol or Marketplace is unavailable at any time or for any period. From time to time, we may restrict access to some parts of the Website, Protocol, Marketplace, or the entire Protocol and/or Marketplace, to users. You are responsible for making all arrangements necessary for you to have access to the Protocol and the Marketplace.

It is a condition of your use of the Protocol and the Marketplace that all the information you provide to the Protocol and the Marketplace is correct, current and complete. You agree that all information you provide on the Website, in the Protocol, to the Marketplace or otherwise to the Company, including but not limited to through the use of any interactive features on the Website, is governed by our Privacy Policy, and you consent to all actions we take with respect to your information consistent with our Privacy Policy.

### **Fees**

Fees for the use of the Protocol and Marketplace (if applicable) are located at the following link: [https://capsulenft.gitbook.io/capsulenft/economics/fee-structure](https://capsulenft.gitbook.io/capsulenft/developers/contracts). Fees may be changed at any time in our sole discretion. Where applicable, you agree to have the Company receive payments on your behalf for deployment of Capsule™ NFT collections and the minting of NFTs and for items you sell using the Marketplace and manage settlement of those payments to you.

Users may pay for items using Ethereum through their connected wallet. Company may modify the type of payment methods available to you at its own discretion. To the extent you interact through the Protocol or the Marketplace with smart contracts, you acknowledge that such contracts are binding upon you and that the counterparty to the contract is a third-party participant, not Company. Any contract for the purchase of goods/services between buyer and seller is directly concluded by that buyer and seller, even if Company provides payment-related services to assist in concluding the purchase.

Users wishing to receive funds as part of any Marketplace transaction must have a financial account on file that is operable to receive funds. Financial accounts can include (depending on availability) blockchain addresses, and similar methods of receiving payment. Company may modify the type of financial accounts available to You at its own discretion.

To set up a financial account or payment method, you may be required to provide the Protocol or the Marketplace with all necessary information for the purposes of: verifying your identity, complying with applicable laws, managing settlements of your purchases, and assessing fraud and risk. For individuals, this information may include at least, your full name, address, phone number, date of birth, taxpayer identification number, bank account information, and a form of government-issued identification. For businesses, this information may include, at least, full business name, address, phone number, entity type, bank account information, tax identification number, and business number, in addition to details regarding your beneficial owner(s), director(s), officer(s), authorized representative, and/or primary contact, such as name, contact information, nationality, title, and government-issued identification. You understand that Company may be unable to settle your transactions if you do not provide or timely update your contact information and other requested data.

We may use third-party payment services providers, such as your payment methods or financial accounts, to assist us in providing payment capabilities (such as companies that process payments and disburse settlements, perform risk assessments or compliance checks, verify identity, or validate payment or settlement methods), and we may process your data and transfer it to these third parties. You hereby explicitly consent to: our use of such third-party service providers, the outsourcing of services to them, and the related transfer and processing of data. Where applicable so we can provide you with the described payment functionality, you hereby waive any professional secrecy rights.

You authorize Company and our affiliates to verify information you provide to us, such as by verifying the existence of your wallet or Ethereum address and obtaining reports from third-party sources, such as banks, credit agencies, data brokers, and other service providers. We reserve the right to close, suspend, or limit your account or rescind your access to the Protocol and/or the Marketplace in the event we are unable to obtain or verify any of this information. You agree that Company is not responsible for any losses suffered by you as a result of incomplete or inaccurate information you provide.

Some services of the Protocol or provided in the Marketplace involve the use of the Ethereum blockchain or another blockchain, which may require that you pay a fee, for example “Ethereum Gas Charges”, for the computational resources required to perform a transaction. You acknowledge and agree that the Company has no control over: (a) any Ethereum or other blockchain transactions; (b) the method of payment of any Ethereum Gas Charges; or (c) any actual payments of Ethereum Gas Charges. Accordingly, you must ensure that you have a sufficient balance of Ether stored at your Wallet (or sufficient balance in an applicable cryptocurrency) to complete any transaction on the Protocol or in the Marketplace before initiating such transactions. If you do not agree with the fees charged for Protocol or Marketplace functionality, do not use or access the Protocol or the Marketplace, respectively.

Sellers are liable for transaction fees arising out of any sales made using any portion of our services, even if sales terms are finalized or payment is made outside of the Marketplace. For example, if you offer or reference your contact information, or ask buyers for their contact information for the purpose of buying or selling outside of Marketplace, you may be liable for a final value fee related to the item, even if the item doesn't sell, given your reliance on our Marketplace for the introduction to a potential buyer.

Users must have a payment method on file when selling or buying through the Marketplace and to access certain functionality of the Protocol. Users must pay all fees and applicable taxes associated with our services by the payment due date. If your payment method fails or your account is past due, we may collect amounts owed by charging other payment methods on file with us, retain collection agencies and legal counsel, suspend or limit services. In addition, you will be subject to late fees. Company, or the collection agencies we retain, may also report information about your account to credit bureaus, and as a result, late payments, missed payments, or other defaults on your account may be reflected in your credit report. If you wish to dispute the information Company reported to a credit bureau (i.e., Experian™, Equifax™ or TransUnion™) please contact us at CapsuleNFT, Inc., 330 North Wabash Avenue, 23rd Floor, Chicago, IL 60611, Attn: Bloq/BloqCloud Team. If you wish to dispute the information a collection agency reported to a credit bureau regarding your Company account, you must contact the collection agency directly.

You agree to comply with, and not cause a third party to violate, all applicable laws, regulations, rules and terms and conditions in connection with your payment methods. You understand that some third parties, including credit and debit card issuers, payments services providers, and others, may have their own applicable terms and conditions for the payment methods you choose to use. Failure to follow such third party terms and conditions may result in fees assessed to you (for example, currency conversion fees) or other actions taken by such third parties, and you agree that Company has no control over, or responsibility or liability for, such fees or actions

In any jurisdiction where Company has an obligation to collect sales taxes on sales you make using our Marketplace, we may collect such sales taxes from you via the payment method on file or via any other means available to us.

Seller fees don't purchase exclusive rights to item exposure on the Marketplace. We may display third-party advertisements (including links and references thereto) or other content in any part of the Marketplace, in our sole discretion and without consent from, or payment, fee reduction, or other credit to, sellers.

Sellers may create rules for automated replacements, returns and refunds under their chosen circumstances. For new sellers, Company will set a default rule that can be changed at the seller’s preference. If your Buyer is entitled to a refund, return, or cancellation for a transaction, you agree that we are authorized to refund the Buyer the amount paid for the transaction at issue.

In order to manage risk or secure your obligations under this Terms of Use, we reserve the right at our reasonable discretion to require that you maintain a minimum reserve of transaction proceeds not available for disbursement (in the form of a fixed or rolling reserve) as a means of security. We will notify you of any reserves we require of you. Depending on your performance and the risk associated with your use of the Marketplace, a reserve may be raised, lowered, or removed at any time; if required by law, we will give you prior notice of such changes.

### **Risks**

Use of the Protocol or the Marketplace may carry financial risk. Digital Assets are a novel and relatively experimental technology. Their value, if any, can fluctuate with great volatility, and transactions conducted with Digital Assets are irreversible. Digital Assets and smart contracts are typically described using extremely technical language that is difficult to understand and requires a deep knowledge of cryptography and computer science. Functionality made available on the Website, in the Protocol or the Marketplace may have inherent design flaws that have not been detected in testing or may not perform as expected in conjunction with third-party technology or high-volume use. There are additional risks that exist with respect to the use of interacting with technologies like the Protocol and Marketplace, such as the risk of malicious software introduction, and the risk that third parties may obtain unauthorized access to information stored within your wallet. Please be aware that hacks, cyber-attacks, distributed denials of service or errors, double-spent attacks, flash-loan attacks, vulnerabilities, defects or flaws in the applicable third-party blockchain network, or other events that are beyond our control may lead to partial or complete theft or loss of Digital Assets. YOU UNDERSTAND, ACKNOWLEDGE AND AGREE THAT THE COMPANY AND ITS AFFILIATES AND SUPPLIERS WILL NOT BE RESPONSIBLE OR LIABLE TO YOU FOR ANY COMMUNICATION FAILURES, DISRUPTIONS, ERRORS, DISTORTIONS OR DELAYS YOU MAY EXPERIENCE WHEN USING THE PROTOCOL AND MARKETPLACE, HOWEVER CAUSED. You should carefully consider whether you have sufficient understanding of the technology before accessing or using the Protocol or the Marketplace. Further, the legal and regulatory regime governing blockchain technologies, cryptocurrencies, Digital Assets, etc. is uncertain, and new regulations or policies may materially adversely affect the Protocol and Marketplace and the potential value or utility of Digital Assets. These technologies and platforms may have unique benefits, limitations, advantages and disadvantages. It is up to you to understand these factors.

By accessing or using the Protocol or the Marketplace, you hereby represent that you have the requisite knowledge and experience to evaluate the risk of the technology you are using and any transactions you undertake, and you accept the risk that the Protocol or Marketplace might not function as anticipated and that you might lose access to your Digital Assets temporarily or permanently.

You acknowledge the importance of the security measures we put in place with regards to purchases, payment methods, and financial accounts, and agree to comply with them. If you become aware of an unauthorized payment transaction or of a delayed or incorrectly executed transaction, you must notify us immediately.

### **User Contributions**

The Website, including certain locations in the Marketplace, may contain links to social media, message boards, chat rooms, personal web pages or profiles, forums, bulletin boards, FAQs and other interactive features (collectively, "**Interactive Services**") that allow users to post, submit, publish, display, advise or transmit to other users or other persons (hereinafter, "**post**") content or materials (collectively, "**User Contributions**") on or through the Website.

All User Contributions must comply with the Content Standards set out in these Terms of Use. Any User Contribution you post to the Website or to the Marketplace will be considered non-confidential and non-proprietary. By providing any User Contribution on the Website or the Marketplace, you grant us and our affiliates and service providers, and each of their and our respective licensees, successors and assigns the right to use, reproduce, modify, perform, display, distribute and otherwise disclose to third parties any such material for any purpose in an irrevocable, non-exclusive, worldwide, royalty-free, sublicensable and transferable license.

You represent and warrant that:

* You own or control all rights in and to the User Contributions and have the right to grant the license granted above to us and our affiliates and service providers, and each of their and our respective licensees, successors and assigns, and to otherwise meet your obligations under this Terms of Use;
* all of your User Contributions do and will comply with these Terms of Use;
* use of any of your User Contributions (including derivative works) by us, our users, or others in contract with us, and in compliance with these Terms of Use, does not and will not infringe any Intellectual Property Rights or any other rights of any third party.

You understand and acknowledge that you are responsible for any User Contributions you submit or contribute, and you, not the Company, have full responsibility for such content, including its legality, reliability, accuracy and appropriateness. We are not responsible or liable to you, or any third party, for the content or accuracy of any User Contributions posted by you or any other user of the Website, Protocol or Marketplace.

We offer certain data and information (including images, descriptions and specifications) regarding the Protocol and information related to how Digital Assets interact with the Protocol, and product data posted to the Marketplace that are provided by third parties (including Company users). You may use that content solely in your listings of the Digital Assets on marketplaces (including on the Marketplace). Company may modify or revoke that permission at any time in our sole discretion. The product data may include copyrighted, trademarked and other proprietary materials. You agree not to create any derivative works based on that data (other than by including the data in listings you may post to marketplaces or exchanges). We try to offer reliable product data but cannot promise that the content provided through the Website (including but not limited to on the Protocol or in the Marketplace) will always be available, accurate, complete, and up-to-date. You agree that Company is not responsible for examining or warranting the listings or content provided by third parties through any marketplace involving Digital Assets that have interacted with the Protocol, and that you will not attempt to hold us or our data providers liable for inaccuracies.

### **Intellectual Property Rights**

“Intellectual Property Rights” includes copyrights, trademarks, tradenames, trade dress, service marks, patents, patent applications, provisionals, continuations, continuations-in-part, trade secrets and any similar intellectual property, creator or moral rights in any applicable jurisdiction.

The Company name, logo, and other related trademarks or service marks, including the Capsule trademark, are the exclusive property of the Company and may not be used without our prior written consent. If you breach these Terms of Use, your right to use the Protocol and the Marketplace will cease immediately and you must, at our option, return or destroy any copies of the materials you have made. No right, title or interest in or to the Marketplace or any content on the Marketplace is transferred to you, and all rights not expressly granted are reserved by the Company. Any use of the Protocol or the Marketplace not expressly permitted by these Terms of Use is a breach of these Terms of Use and may violate copyright, trademark and other laws. From time to time, we may allow you to use our Intellectual Property Rights (such as images, videos, or sounds) in User Contributions. We retain all ownership and rights in such content (but not yours). You can only use our copyrights or trademarks (or any similar marks) as expressly permitted.

You must not delete or alter any copyright, trademark or other proprietary rights notices from copies of materials from the Website (including but not limited to on the Protocol or the Marketplace). The Website and its entire contents (including the Protocol and the Marketplace), features and functionality (including but not limited to all information, trademarks, service marks, software, text, displays, images, video and audio, and the design, selection and arrangement thereof), are provided by the Company, its licensors or other third-party providers of such material, some of which may be protected by United States and international copyright, trademark, patent, trade secret and other intellectual property rights laws. Third-party technology may be provided to the Protocol or the Marketplace that is owned by the third-party provider of such technology and is made available subject to these Terms of Use as well as any additional applicable license related to such technology. Without our written permission, you may not modify, create derivative works of, decompile, or otherwise attempt to extract source code from the Website, the Protocol, or the Marketplace.

When you provide User Contributions using the Protocol or to the Marketplace or Website (directly or indirectly), you grant us a non-exclusive, worldwide, perpetual, irrevocable, royalty-free, sublicensable (through multiple tiers) right to exercise any and all Intellectual Property Rights you have in that content in connection with our provision, expansion, and promotion of the Protocol or Marketplace, in any media known now or developed in the future. To the fullest extent permitted under applicable law, you waive your right to enforce your Intellectual Property Rights in that content against Company, our assignees, our sublicensees, and their assignees in connection with our, those assignees', and those sublicensees' use of that content in connection with our provision, expansion, and promotion of the Protocol or Marketplace.

### **Prohibited Uses**

You may use the Marketplace, Protocol, and the Website only for lawful purposes and in accordance with these Terms of Use. You agree not to use the Website, the Protocol, or the Marketplace:

* in any way that violates any applicable federal, state, local or international law or regulation (including, without limitation, any laws regarding the export of data or software to and from the US or other countries);
* for the purpose of exploiting, harming or attempting to exploit or harm minors in any way by exposing them to inappropriate content, asking for personally identifiable information or otherwise;
* to attempt to circumvent any security or access controls or to interfere with the operation of the Protocol or Marketplace;
* to impersonate or attempt to impersonate the Company, a Company employee, another user or any other person or entity (including, without limitation, by using e-mail addresses or screen names associated with any of the foregoing);
* to transmit, conceal, store (in a Capsule™ NFT) or exchange goods, services, or payments or Digital Assets that are the direct or indirect proceeds of any illegal, criminal or fraudulent behavior;
* in any manner that could disable, overburden, damage, or impair the Protocol, Marketplace functionality, or Website or interfere with any other party's use of the Protocol Marketplace, or Website, including their ability to engage in real time activities through the Protocol and Marketplace;
* in combination with any robot, spider or other automatic device, process or means to access the Protocol or Marketplace for any purpose, including monitoring or copying any of the material on the Website, the Marketplace or in the Protocol;
* in combination with any manual process to monitor or copy any material on the Website, Marketplace or in the Protocol or for any other unauthorized purpose without our prior written consent;
* in combination with any device, software or routine that interferes with the proper working of the Website, the Marketplace or in the Protocol;
* to introduce any viruses, trojan horses, worms, logic bombs or other material which is malicious or technologically harmful;
* to infringe the patent, trademark, copyright, moral, database, publicity and/or other intellectual property rights that belong to or are licensed to Company;
* to carry out any illegal activities, including money laundering, terrorist financing, fraud/scams/deceptive trading;
* to obtain information about another user and use such information for any purpose other than the intended uses of the Website, the Marketplace or the Protocol, unless given consent by said user;
* to otherwise attempt to interfere with the proper working of the Website, the Marketplace or Protocol.

### **Monitoring and Enforcement**

We have the right to:

* remove or refuse to post any User Contributions for any or no reason in our sole discretion;
* take any action with respect to any User Contribution that we deem necessary or appropriate in our sole discretion, including if we believe that such User Contribution violates the Terms of Use (including the Content Standards set forth below), infringes any intellectual property right or other right of any person or entity, threatens the personal safety of users of the Protocol, the Marketplace or the public, or could create liability for the Company;
* disclose your information to any third-party claiming that your User Contribution violates their rights, such as intellectual property rights or right to privacy;
* take appropriate legal action, including without limitation, referral to law enforcement, for any illegal or unauthorized use of the Marketplace or Protocol;
* terminate or suspend your access to all or part of the Website, the Protocol and/or the Marketplace for any or no reason, including without limitation, any violation of these Terms of Use.

Without limiting the foregoing, we have the right to fully cooperate with any law enforcement authorities or court order requesting or directing us to disclose the identity or other information of anyone using or posting any materials on or through the Website, Marketplace or Protocol. YOU WAIVE AND HOLD HARMLESS THE COMPANY AND ITS AFFILIATES, LICENSEES AND SERVICE PROVIDERS FROM ANY CLAIMS RESULTING FROM ANY ACTION TAKEN BY ANY OF THE FOREGOING PARTIES DURING OR AS A RESULT OF ITS INVESTIGATIONS AND FROM ANY ACTIONS TAKEN AS A CONSEQUENCE OF INVESTIGATIONS BY SUCH PARTIES OR LAW ENFORCEMENT AUTHORITIES.

However, we do not undertake to review all material before it is posted on or through the Website or Marketplace and cannot ensure prompt removal of objectionable material after it has been posted. We assume no liability for any action or inaction regarding transmissions, communications or content provided by any user or third party. We have no liability or responsibility to anyone for performance or nonperformance of the activities described in this section.

If a buyer or seller issue arises, we may consider a variety of factors, including specific circumstances regarding the issue, or a user's performance history, in applying our policies. In our effort to do the best thing for both buyers and sellers, we may decide to be more lenient with policy enforcement. However, nothing contained in these Terms of Use should be read to limit our right to refuse, modify, or terminate all or part of our services to anyone, or to terminate this agreement with any user, for any reason in our sole discretion.

### **Content Standards**

These Content Standards apply to all User Contributions and use of Interactive Services, as well as to all Capsule™ NFTs created using the Protocol. User Contributions and Capsule NFTs created must in their entirety comply with all applicable federal, state, local and international laws and regulations. Without limiting the foregoing, User Contributions and Capsule NFTs created using the Protocol must not:

* contain any material which is defamatory, obscene, indecent, abusive, offensive, harassing, violent, hateful, inflammatory or otherwise objectionable;
* promote sexually explicit or pornographic material, violence, or discrimination based on race, sex, religion, nationality, disability, sexual orientation or age;
* infringe any patent, trademark, trade secret, copyright or other intellectual property or other rights of any other person;
* violate the legal rights (including the rights of publicity and privacy) of others or contain any material that could give rise to any civil or criminal liability under applicable laws or regulations or that otherwise may be in conflict with these Terms of Use and our Privacy Policy;
* promote any illegal activity, or advocate, promote or assist any unlawful act;
* cause annoyance, inconvenience or needless anxiety or be likely to upset, embarrass, alarm or annoy any other person;
* be likely to deceive any person or impersonate any person or misrepresent your identity or affiliation with any person or organization;
* involve commercial activities or sales, such as contests, sweepstakes and other sales promotions, barter or advertising.

### **Capsule™ NFT Token Storing**

When interacting with the Protocol, specifically using the Protocol to store NFTs or Digital Assets in Capsule NFTs, you agree to comply with Company’s storing standards, set forth below:

* You are responsible for understanding the implications of using the Protocol and how it will impact the Digital Assets you chose to interact with the Protocol.
* You enter into a legally binding contract to capsulize Digital Assets, and understand that by capsulizing such Digital Assets you may be impacting their value, function or usage.
* At no point in the storing process do you transfer legal ownership of Digital Assets.

### **Listing Standards**

When listing an item for sale on our Services, including the Marketplace, you agree to comply with Company’s Listing Standards, set forth below:

* You assume full responsibility for the item offered and the accuracy and content of the listing.
* Your listing may not be immediately searchable by keyword or category for several hours (or days in some circumstances). Company does not guarantee exact listing duration.
* Your fixed-price listings may renew automatically every calendar month, based on the listing terms at the time, until all quantities sell or the listing is ended by you or Company, in its sole discretion.
* Content that violates any Company policies may be modified, obfuscated or removed at our sole discretion.
* We may revise product data associated with listings to supplement, remove, or correct information.
* You agree not to market, sell, offer for sale, or otherwise engage in transactions related to child pornography.
* We strive to create a marketplace where buyers find what they are looking for. Therefore, the appearance or placement of listings in search and browse results will depend on a variety of factors, including, but not limited to:
  \*
  * buyer's location, search query, browsing site, and history;
  * item's location, listing format, price and shipping cost, terms of service, end time, history, and relevance to the user query;
  * seller's history, including listing practices, seller ratings, Company policy compliance, feedback, and defect rate; and
  * number of listings matching the buyer's query.
* To drive a positive user experience, a listing may not appear in some search and browse results regardless of the sort order chosen by the buyer.
* Some advanced listing upgrades will only be visible on some portions of the Marketplace.
* Duplicate listings may also affect whether your listing appears in search results.
* Metatags and URL links that are included in a listing may be removed or altered so as to not affect third-party search engine results.
* We may provide you with optional recommendations to consider when creating your listings. Such recommendations may be based on the aggregated sales and performance history of similar sold and current listings; results may vary for individual listings. To drive the recommendations experience, you agree that we may display the sales and performance history of your individual listings to other sellers.
* For items listed in certain categories, subject to certain programs, and/or offered or sold at certain price points, Company may require the use of certain payment methods. For example, for inventory covered by authentication services, buyer and sellers may be subject to escrow and/or payment handling requirements.

You will not sell and will promptly remove all listings for any product if the sale of the product is prohibited by law or regulation or the product poses a health or safety hazard as specified by any governmental agency applicable to you. Company has no responsibility or liability for the legitimacy, validity, existence, of any product that is listed or sold through the Marketplace.

### **Purchase Standards**

When purchasing an item for sale on our Marketplace, you agree to comply with Company’s Purchase Standards for buyers, set forth below:

* You are responsible for reading the full item listing before making a bid or committing to buy.
* You enter into a legally binding contract to purchase an item when you commit to buy an item, your offer for an item is accepted, or if you have the winning bid (or your bid is otherwise accepted).
* For motor vehicles and real estate, a bid or offer initiates a non-binding transaction representing a buyer's serious expression of interest in buying the seller's item and does not create a formal contract between the buyer and the seller.
* We do not transfer legal ownership of items from the seller to you. Legal transfer is effected by the seller.
* California Commercial Code § 2401(2) and Uniform Commercial Code § 2-401(2) apply to the transfer of ownership between the buyer and the seller, unless the buyer and the seller agree otherwise.

### **Reliance on Information Posted**

The information presented on or through the Website (including information on the Marketplace) is made available solely for general information purposes. We do not warrant the accuracy, completeness or usefulness of this information. We attempt to be as accurate as possible in our descriptions of the Protocol or in descriptions used in the Marketplace; however, we do not warrant that descriptions or other content on the Website (including product descriptions in the Marketplace) is accurate, complete, reliable, current or error-free. Any reliance you place on such information is strictly at your own risk. We disclaim all liability and responsibility arising from any reliance placed on such materials by you or any other user of the Protocol or the Marketplace, or by anyone who may be informed of any of its contents.

This Website (including on the Marketplace) may include, or link to, content provided by third-parties, including materials provided by other users, third-party licensors, syndicators, or aggregators. All statements and/or opinions expressed in such materials, and all articles and responses to questions and other content, other than the content provided by the Company, are solely the opinions and the responsibility of the person or entity providing those materials. These materials do not necessarily reflect the opinion of the Company. We are not responsible, or liable to you or any third party, for the content or accuracy of any materials provided by any third parties.

### **Changes to the Protocol**

We may update the Protocol from time to time. We reserve the right to withdraw or amend any service or functionality, including smart contract functionality, that is provided on the Protocol, in our sole discretion without notice. Any of the functionality of the Protocol may become obsolete or unusable at any given time, and we are under no obligation to update the Protocol. In the event of a change in the operation of the Protocol, you agree we may temporarily or permanently suspend our operations without liability to you.

### **Changes to the Website or Marketplace**

We may update the content on the Website and/or the Marketplace from time to time, but its content is not necessarily complete or up-to-date. We reserve the right to withdraw or amend any information on the Website and the Marketplace, and any service or functionality, including smart contract functionality, we provide on the Website or on the Marketplace, in our sole discretion without notice. Any of the material on the Website or the Marketplace may be out of date at any given time, and we are under no obligation to update such material. In the event of a change in the operation of the Website and/or the Marketplace, you agree we may temporarily or permanently suspend our operations without liability to you.

### **Data Privacy**

Our performance under these Terms of Use, including in facilitating processing of payments, entails the processing of your personal data when a sale happens. With respect to such data processing, you and the payment method or financial account each act as a separate data controller/business under applicable data protection laws (which may without limitation include, the General Data Protection Regulation, the California Consumer Privacy Act, or other data protection laws to which you are subject). You agree to: comply with your obligations as a data controller/business pursuant to the applicable data protection laws, and provide us with all such reasonable cooperation, information, and assistance as necessary for us to meet our requirements as a data controller/business.

### **Additional Terms and Conditions**

Additional terms and conditions may apply to specific portions, services or features of the Website, the Marketplace or the Protocol provided by the Company or third-parties, including any consumer offers or sweepstakes made available through the Website, either alone or in conjunction with the functionality provided by us. The use of such services or features shall be governed by the terms of use associated with them, and all such additional terms of use are hereby incorporated by this reference into these Terms of Use. We accept no liability or responsibility for any third-party functionality or any of our open-source functionality that has been modified by third parties.

You acknowledge and understand that your use of the Protocol with regard to Digital Assets you possess may implicate certain terms and conditions associated with the license(s) of such Digital Assets. It is your responsibility to understand what rights have been conferred to you with respect to Digital Assets that you own, hold or have some possessory interest in that has been licensed to you by the creator or transferor of such Digital Asset. You understand that in using the Protocol, the Company does not take any ownership interest in, or become party to any license associated with Digital Assets which interact with the Protocol (unless specified in the case of certain Digital Assets on the Marketplace which are created or sold by the Company or its affiliates). You agree to indemnify and hold the Company harmless in the event of a dispute that arises from a third party based on a theory of infringement (or some other related claim to violation of the intellectual property rights of such third party) based on your use of the Protocol.

### **Linking to the Website**

You may link to our Website (or specifically, the Marketplace), provided you do so in a way that is fair and legal and does not damage our reputation or take advantage of it, but you must not establish a link in such a way as to suggest any form of association, approval or endorsement on our part without our express written consent. This Website, the Marketplace and the Protocol may provide certain features that enable you to: link from your own or certain third-party marketplaces to certain content on this Website (including the Marketplace) or directly to the Protocol; or cause limited portions of content on this Website, the Marketplace or the Protocol to be displayed or appear to be displayed on your own or certain third-party websites, marketplaces or similar locations. You may use these features solely as they are provided by us and solely with respect to the content they are displayed with and otherwise in accordance with any additional terms and conditions we provide with respect to such features. Subject to the foregoing, you must not:

* establish a link from any marketplace or website that is not owned by you;
* otherwise take any action with respect to the materials on the Website, the Marketplace or related to the Protocol that is inconsistent with any other provision of these Terms of Use.

The website or marketplace from which you are linking, or on which you make certain content accessible, must comply in all respects with the Content Standards set out in these Terms of Use. You agree to cooperate with us in causing any unauthorized framing or linking immediately to cease. We reserve the right to withdraw linking permission without notice. We may disable all or any social media features and any links at any time without notice in our discretion.

### **Links from the Website**

The Website (including in the Marketplace) may contain links to other sites and resources provided by third-parties, such as advertisements and sponsored links. These links are provided for your convenience only. We have no control over the contents of those sites or resources and accept no responsibility for them or for any loss or damage that may arise from your use of them. If you decide to access any of the third-party sites linked to this Website, you do so entirely at your own risk and subject to the terms and conditions of use for such marketplaces.

### **Disclaimer of Warranties**

WE WILL NOT BE LIABLE FOR ANY LOSS OR DAMAGE CAUSED BY A DISTRIBUTED DENIAL-OF-SERVICE ATTACK, HACKS, VIRUSES OR OTHER TECHNOLOGICALLY HARMFUL MATERIAL THAT MAY INFECT YOUR COMPUTER EQUIPMENT, COMPUTER PROGRAMS, DATA OR OTHER PROPRIETARY MATERIAL DUE TO YOUR USE OF THE MARKETPLACE OR PROTOCOL OR ANY SERVICES OR ITEMS OBTAINED THROUGH THE WEBSITE, ANY THIRD-PARTY LINKS ACCESSED THROUGH OR IN CONJUNCTION WITH THE WEBSITE, OR ON ANY WEBSITE OR MARKETPLACE LINKED TO IT, INCLUDING THE MARKETPLACE AS DEFINED HEREIN.

YOUR USE OF THE WEBSITE, ITS CONTENT, INCLUDING THE PROTOCOL AND/OR THE MARKETPLACE, AND ANY SERVICES OR ITEMS OBTAINED THROUGH THE WEBSITE IS AT YOUR OWN RISK. THE WEBSITE, ITS CONTENT, INCLUDING THE PROTOCOL AND/OR THE MARKETPLACE, AND ANY SERVICES OR ITEMS OBTAINED THROUGH THE WEBSITE ARE PROVIDED ON AN "AS IS" AND "AS AVAILABLE" BASIS. THE COMPANY HEREBY DISCLAIMS ALL WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED, STATUTORY OR OTHERWISE, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT, FITNESS FOR PARTICULAR PURPOSE AND THOSE WARRANTIES ARISING BY CONDUCT SUCH AS COURSE OF DEALING, COURSE OF PERFORMANCE, USAGE OF TRADE OR OTHERWISE. THE FOREGOING DOES NOT AFFECT ANY WARRANTIES WHICH CANNOT BE EXCLUDED OR LIMITED UNDER APPLICABLE LAW. ANY USER PURCHASING DIGITAL ASSETS ON THE MARKETPLACE ACKNOWLEDGES THAT IT HAS NOT RELIED ON ANY REPRESENTATION OR WARRANTY MADE BY A SELLER, OR ANY OTHER PERSON ON SUCH SELLER’S BEHALF.

### **Limitation on Liability**

IN NO EVENT WILL THE COMPANY, ITS AFFILIATES OR THEIR LICENSORS, SERVICE PROVIDERS, EMPLOYEES, AGENTS, OFFICERS OR DIRECTORS BE LIABLE FOR DAMAGES OF ANY KIND, UNDER ANY LEGAL THEORY, ARISING OUT OF OR IN CONNECTION WITH YOUR USE, OR INABILITY TO USE, THE PROTOCOL, THE MARKETPLACE, ANY MARKETPLACE LINKED TO IT, ANY SMART CONTRACTS OR DISTRIBUTED APPLICATIONS EXISTING ON OR CONNECTING TO THE PROTOCOL AND/OR THE MARKETPLACE, ANY LOSS OF FUNDS OR COLLATERAL, ANY CONTENT ON THE WEBSITE OR SUCH OTHER WEBSITES OR ANY SERVICES OR ITEMS OBTAINED THROUGH THE WEBSITE INCLUDING THE PROTOCOL OR THE MARKETPLACE, INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL OR PUNITIVE DAMAGES, INCLUDING BUT NOT LIMITED TO, PERSONAL INJURY, PAIN AND SUFFERING, EMOTIONAL DISTRESS, LOSS OF REVENUE, LOSS OF PROFITS, LOSS OF BUSINESS OR ANTICIPATED SAVINGS, LOSS OF USE, LOSS OF GOODWILL, LOSS OF DATA, AND WHETHER CAUSED BY TORT (INCLUDING NEGLIGENCE), BREACH OF CONTRACT OR OTHERWISE, EVEN IF FORESEEABLE. UNDER NO CIRCUMSTANCES WILL WE BE RESPONSIBLE FOR ANY DAMAGES, LOSS OR INJURY RESULTING FROM HACKING, TAMPERING OR OTHER UNAUTHORIZED ACCESS OR USE OF THE WEBSITE OR ITS CONTENTS, INCLUDING THE PROTOCOL AN THE MARKETPLACE. THE FOREGOING DOES NOT AFFECT ANY LIABILITY WHICH CANNOT BE EXCLUDED OR LIMITED UNDER APPLICABLE LAW.

### **Indemnification**

You agree to defend, indemnify and hold harmless the Company, its affiliates, licensors and service providers, and its and their respective officers, directors, employees, contractors, agents, licensors, successors and assigns, from and against any claims, liabilities, damages, judgments, losses, costs, debts and fees (including reasonable attorneys' fees) arising out of or relating to: your violation of any agreement or third-party right; your provision of false or misleading information; your violation of any law or regulation; your violation of the Terms of Use; your willful misconduct; or your use of or access to the Protocol or Marketplace, including, but not limited to, your User Contributions, any use of the Website, the Marketplace or the Protocol other than as expressly authorized in these Terms of Use, or your use of information obtained from the Website.

If you have a dispute with one or more users, you release Company (and our affiliates and subsidiaries, and our and their respective officers, directors, employees and agents) from claims, demands and damages (actual and consequential) of every kind and nature, known and unknown, arising out of or in any way connected with such disputes. By entering into this release, you expressly waive any protections (whether statutory or otherwise) that would otherwise limit the coverage of this release to include only those claims which you may know or suspect to exist in your favor at the time of agreeing to this release.

### **Dispute Resolution**

All matters relating to the Website, including the Marketplace, Protocol and these Terms of Use, and any dispute or claim arising therefrom or related thereto (in each case, including non-contractual disputes or claims), shall be governed by and construed in accordance with the internal laws of the State of Illinois without giving effect to any choice or conflict of law provision or rule whether of the State of \[Illinois] or any other jurisdiction.

Any legal suit, action or proceeding arising out of, or related to, these Terms of Use, the Website, or the Protocol shall be brought exclusively in Illinois, in each case located in the County of Cook, Illinois although we retain the right to bring any suit, action or proceeding against you for breach of these Terms of Use in your country of residence or any other relevant country. You waive any and all objections to the exercise of jurisdiction over you by such courts and to venue in such courts.

Notwithstanding the provisions above regarding governing law and jurisdiction, at its sole discretion, the Company may require You to submit any disputes arising from the use of these Terms of Use, the Protocol or the Marketplace, including disputes arising from or concerning their interpretation, violation, invalidity, non-performance, or termination, to final and binding arbitration under the Rules of Arbitration of the American Arbitration Association applying Illinois law.

If a user of the Platform or the owner of a payment instrument initiates a return, cancellation, direct debit reversal, buyer protection claim, or otherwise asks their financial institution to open a payment dispute (all referred to solely within this paragraph as “Dispute”) in connection with a transaction, you agree that we may investigate and, at our discretion, re-present the Dispute with the payment method providers. You agree to provide timely information to assist in our Dispute investigations and understand that your failure to provide requested information on the timeline we require and as specified by credit and debit card networks' and other payment service providers' rules could adversely impact the outcome of an investigation, including forfeiture of the amounts in dispute. You will not contest the resolution of any Dispute that we investigate and/or re-present, nor will you re-open resolved Dispute investigations. You authorize us to pay on your behalf any amounts resulting from a Dispute, including costs and fees associated with re-presentment.

**YOU AND COMPANY AGREE THAT EACH OF US MAY BRING CLAIMS AGAINST THE OTHER ONLY ON AN INDIVIDUAL BASIS AND NOT AS A PLAINTIFF OR CLASS MEMBER IN ANY PURPORTED CLASS, OR REPRESENTATIVE OR PRIVATE ATTORNEY GENERAL ACTION OR PROCEEDING. UNLESS BOTH YOU AND COMPANY AGREE OTHERWISE, THE ARBITRATOR MAY NOT CONSOLIDATE OR JOIN MORE THAN ONE PERSON'S OR PARTY'S CLAIMS, AND MAY NOT OTHERWISE PRESIDE OVER ANY FORM OF A CONSOLIDATED, REPRESENTATIVE, CLASS, OR PRIVATE ATTORNEY GENERAL ACTION OR PROCEEDING. ALSO, THE ARBITRATOR MAY AWARD RELIEF (INCLUDING MONETARY, INJUNCTIVE, AND DECLARATORY RELIEF) ONLY IN FAVOR OF THE INDIVIDUAL PARTY SEEKING RELIEF AND ONLY TO THE EXTENT NECESSARY TO PROVIDE RELIEF NECESSITATED BY THAT PARTY'S INDIVIDUAL CLAIM(S). ANY RELIEF AWARDED CANNOT AFFECT OTHER USERS.** If a court decides that applicable law precludes enforcement of any of this paragraph's limitations as to a particular claim or a particular request for a remedy (such as a request for injunctive relief), then that claim or that remedy request (and only that claim or that remedy request) must be severed from the arbitration and may be brought in court (subject to other requirements and limitations of this Terms of Use), subject to your and Company’s right to appeal the court's decision. All other claims will be arbitrated.

### **Limitation on Time to File Claims**

ANY CAUSE OF ACTION OR CLAIM YOU MAY HAVE ARISING OUT OF OR RELATING TO THESE TERMS OF USE, THE PROTOCOL, OR THE MARKETPLACE MUST BE COMMENCED WITHIN ONE (1) YEAR AFTER THE CAUSE OF ACTION ACCRUES, OTHERWISE, SUCH CAUSE OF ACTION OR CLAIM IS PERMANENTLY BARRED.

### **Waiver and Severability**

No waiver by the Company of any term or condition set forth in these Terms of Use shall be deemed a further or continuing waiver of such term or condition or a waiver of any other term or condition, and any failure of the Company to assert a right or provision under these Terms of Use shall not constitute a waiver of such right or provision.

If any provision of these Terms of Use is held by a court or other tribunal of competent jurisdiction to be invalid, illegal or unenforceable for any reason, such provision shall be eliminated or limited to the minimum extent such that the remaining provisions of the Terms of Use will continue in full force and effect.

### **Entire Agreement**

The Terms of Use, the Privacy Policy, and any applicable terms governing the use of third-party functionality or additional functionality provided by the Company, constitute the sole and entire agreement between you and the Company with respect to the Website, including the Marketplace and including your use of the Protocol through the Website, and supersede all prior and contemporaneous understandings, agreements, representations and warranties, both written and oral, with respect to the Website, including the Marketplace and including your use of the Protocol through the Website. The Protocol is made available for non-production use outside of the Website under the Business Source License 1.1 and can be found here <https://capsulenft.gitbook.io/capsulenft/developers/contracts>.<br>

### **Assignment**

At our sole discretion, we may assign our rights and obligations under this Terms of Use. In cases of such assignment, we will notify you accordingly.

### **Force Majeure**

We will not be liable or responsible to the you, nor be deemed to have defaulted under or breached these Terms of Use, for any failure or delay in performance, when and to the extent such failure or delay is caused by or results from force majeure events (“Force Majeure Event”), including but not limited to: acts of God, flood, fire, epidemics, pandemics, natural disasters, explosion, war, hostilities, civil unrest, government action, industrial disturbances, shortage of adequate Internet connectivity, telecommunication or utilities breakdown, and other similar events beyond our control. If we suffer a Force Majeure Event, we will use reasonable efforts to promptly notify you of such, stating the period of time the occurrence is expected to continue. We will use diligent efforts to end the failure or delay and ensure the effects of such Force Majeure Event are minimized. We will resume the performance of our obligations as soon as reasonably practicable after the removal of the cause. In the event that our failure or delay remains uncured for a period of forty-five (45) consecutive days following written notice given by us under this section, we may thereafter terminate these Terms of Use upon fifteen (15) days' written notice.

### **Termination**

This Terms of Use is effective indefinitely, unless terminated in accordance with the below. We may terminate this Terms of Use by giving written notice fourteen (14) days prior via email to your registered email address. However, we may also terminate this Terms of Use on less notice or with immediate effect in the following scenarios: We are required to do so by law or a court order; a governmental authority requires us to do so to comply with anti-money laundering or counter-terrorism financing obligations; we have reasonable grounds to believe you are carrying out a prohibited or illegal activity; we are unable to verify your or your business’s identity, or any other information regarding your account; or you are otherwise in breach of a material contractual obligation, or seriously or persistently violating any provisions of these terms in any other way. You may terminate this Terms of Use by closing your account. Termination of this Terms of Use shall not affect the rights or liabilities of either party accrued until termination and/or any terms intended (expressly or implicitly) to survive termination. If there are pending payment transactions at the time the termination takes effect, they will be processed pursuant to these terms unless prohibited by law. As of the effective date of the termination, you will not be able to list any items on Marketplace anymore.

### **Digital Millennium Copyright Act**

DMCA Notice: We strive to comply with the Digital Millennium Copyright Act of 1998, as amended ("DMCA"), at all times and maintain a repeat offender policy which may result in the termination of your right to use the Marketplace if you violate such policy. If you believe that your work has been copied, posted or otherwise made available through the Marketplace in a way that constitutes copyright infringement, please notify our DMCA Copyright Agent of your complaint, as set forth in the DMCA. Please consult the DMCA to confirm these requirements. You must provide our DMCA Copyright Agent with the following information in writing, to the extent required by the DMCA:

(a) an electronic or physical signature of the person authorized to act on behalf of the copyright owner that is allegedly infringed;

(b) a description of the copyrighted work that you claim has been infringed (or, if multiple copyrighted works on a site are covered by a single complaint, a representative list of the allegedly infringing works on the site);

(c) identification of the material that is claimed to be infringing and to be removed, and information reasonably sufficient to permit us to locate the material;

(d) information reasonably sufficient to permit us to contact you, such as your address, telephone number and e-mail address;

(e) a written statement by you that you have a good faith belief that use of the material in the manner complained of is not authorized by the copyright owner, its agent or the law; and

(f) a statement by you, made under penalty of perjury, that the above information in your notice and complaint is accurate and that you are the copyright owner or authorized to act on the copyright owner's behalf. Please be aware that the foregoing information in your complaint may be forwarded to the person who provided the allegedly infringing content. The foregoing information must be submitted to Company’s DMCA Copyright Agent as follows: CapsuleNFT, Inc., 330 North Wabash Avenue, 23rd Floor, Chicago, IL 60611, Attn: Bloq/BloqCloud Team Attn. Copyright Agent Email: <support@capsulenft.com>.

Pursuant to Section 512(f) of the DMCA, any person who knowingly materially misrepresents that material or activity is infringing may be subject to liability. If you believe that your material has been mistakenly removed or disabled pursuant to this Section 17, you may submit a counter notice by notifying our DMCA Copyright Agent at the address provided above. Pursuant to Section 512(f) of the DMCA, any person who knowingly materially misrepresents that material or activity was removed or disabled by mistake or misidentification may be subject to liability.

### **Your Comments and Concerns**

The Website, including the Marketplace and Protocol are operated by CapsuleNFT, Inc.

All feedback, comments, requests for technical support and other communications relating to the Protocol or Marketplace should be directed to: <support@capsulenft.com>.

If you are a California resident, in accordance with Cal. Civ. Code §1789.3, you may report complaints to the Complaint Assistance Unit of the Division of Consumer Services of the California Department of Consumer Affairs by contacting them in writing at 400 R Street, Sacramento, CA 95814, or by telephone at (800) 952-5210.


# Privacy Policy

Effective Date: June 1, 2022 | Last Updated: June 1, 2022

CapsuleNFT, Inc. (“CapsuleNFT”, “we”, “our”, or “us”) cares about your privacy. Thank you for taking the time to read our privacy policy (“Privacy Policy”). This Privacy Policy covers all personal data processed by CapsuleNFT’s website (CapsuleNFT.com) and our services (“Services”). If our privacy practices for a certain services differ from those explained in this Privacy Policy, we will let you know at the time we ask for or collect your information.

It is our policy to comply with all applicable privacy and data protection laws, including the California Consumer Privacy Act of 2018 (“CCPA”), the General Data Protection Regulation, Regulation (EU) No. 2016/279 of 27 April 2016 on the protection of natural persons with regard to the processing of personal data and on the free movement of such data (“GDPR”). This commitment reflects the value we place on earning and keeping the trust of our customers, business partners, and others who share their data with us.

Please read this Privacy Policy carefully to understand our policies and practices regarding your information and how we will treat it. We may make changes to the Privacy Policy from time to time. We, therefore, encourage you to check the Privacy Policy periodically for updates.

We cover a lot of ground in this Privacy Policy. Please use the links below to navigate to later sections of the Privacy Policy of interest to you.

* [Data Controller](#data-controller)
* [What Data We Collect About You](#what-data-we-collect-about-you)
* [Reason for Processing Your Personal Data](#reason-for-processing-your-personal-data)
* [How We Collect Your Personal Data](#how-we-collect-your-personal-data)
* [How We Use Your Personal Data](#how-we-use-your-personal-data)
* [Disclosure of Your Personal Data](#disclosure-of-your-personal-data)
* [Cookies and Automatic Data Collection Technologies](#cookies-and-automatic-data-collection-technologies)
* [Third-Party Links](#third-party-links)
* [Retention](#retention)
* [Children](#children)
* [Your Rights and Choices](#your-rights-and-choices)
* [International Transfers](#international-transfers)
* [Data Security](#data-security)
* [Changes to This Privacy Policy](#changes-to-this-privacy-policy)
* [Contact Us](#contact-us)

### **Data Controller**

CapsuleNFT is the data controller responsible for your personal data. If you have any questions about this Privacy Policy, including any requests to exercise your legal rights, please contact us from the Contact Us section.

### **What Data We Collect About You**

Personal data means any information about an individual from which that person can be identified, directly or indirectly. It does not include data where the identity has been removed (anonymized data), which we can use for any purpose. Some jurisdictions may consider your Internet Protocol (IP) address to be personal data. We may collect different kinds of personal data about you which we have grouped together as follows:

**Information You Provide Us:**

* **Personal Identification Data** includes your email address, Ethereum wallet address (public key only), non-fungible token (NFT) address, Internet Protocol (IP) address or similar identifiers.
* **Communication Data** includes your feedback that you communicate to us via email.
* **Marketing Data** includes your name and email address.

**Information Automatically Collected by Technology:**

In addition, to the information you provide us, we may collect automatically collect certain information about your equipment, software, and browser to provide you with an efficient and personalized experience. This information includes:

* **Device Data** include the device’s hardware information, operating system, platform information, browser type, language information, browser plugin types.
* **Usage Data** includes information about how you use our website and our Services.

**Information Collected from Third-Parties:**

We may collect personal or anonymized information about you from third party companies that provide products and services that is used in together with our website or our Services. For example, we may collect publicly available blockchain data linked to your NFT address and related information that you made available with your Ethereum wallet. We may also collect recruitment information if you apply to our job postings through LinkedIn. For how we collect and manage your recruitment information, please view our Recruitment Privacy Policy.<br>

**Aggregated Data:**

We may also collect, use and share aggregated data such as statistical or demographic data for any purpose (“Aggregated Data”). Aggregated Data could be derived from your personal data but is not considered personal data as this data will not directly or indirectly reveal your identity. For example, we may aggregate your Usage Data to calculate the percentage of users accessing our websites and Services. However, if we combine or connect Aggregated Data with your personal data so that it can directly or indirectly identify you, we treat the combined data as personal data which will be used in accordance with this Privacy Policy.

We do not collect any special categories of sensitive personal data about you (this includes details about your race or ethnicity, religious or philosophical beliefs, sex life, sexual orientation, political opinions, trade union membership, information about your health, genetic and biometric data, and precise geolocation data). Nor do we collect any information about criminal convictions and offenses.<br>

### **Reason for Processing Your Personal Data**

We may process the personal data you provide for the following reasons and legal bases:

| **Why we process your data**                                                                                                      | **Legal basis for processing**                           |
| --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- |
| To receive your feedback that you email us and to communicate with you.                                                           | Legitimate interest to manage our website                |
| To communicate with you about your comments regarding our website and Services you provide on third-party social media platforms. | Legitimate interest to manage our website                |
| To receive your comments on our Blog posts.                                                                                       | Legitimate interest to manage our website                |
| To market our Services that are of interest to you.                                                                               | Consent                                                  |
| To provide you with updates and notices of your job application.                                                                  | Performance of a contract with you                       |
| To allow you to exercise your data privacy rights.                                                                                | <p>Necessary to comply with our legal obligation<br></p> |

In addition, we may process your personal data for the following reasons:

* To carry out our obligations and enforce our rights.
* In any other way we may describe when you provide the information.
* For any other purpose with your consent.

We may use information that is not personal data for any purpose. For example, we may aggregate usage data from many people in a way that does not identify any individuals to calculate the percentage of users accessing a feature on our website.

### **How We Collect Your Personal Data**

We use different methods to collect information from and about you including through:

* **Direct interactions.** You may give us information about you by interacting with our website, our Blog posts, or by communicating with us via email. This includes information you provide by emailing us about our website or Services or leave a comment in our Blog posts.
* **Third-party or publicly available sources.** We may receive information about you from third parties. The information we receive includes analytics information for marketing and application uses purposes.
* **Technical and Communication Data from the following parties:** We may collect information from third-parties providers such as Twitter, Medium, Discord, GitHub, Google Analytics, YouTube, LinkedIn, Metamask, and Meta. The information we may collect includes your feedback about our Services on our Twitter handle, Medium, Discord Server, GitHub page, YouTube channel.

### **How We Use Your Personal Data**

The Company may use your personal data to:

* **Communicate with you**. This may include: (i) informing you of our new services and promotional activities that may be of interest to you; (ii) providing information about our Services; (iii) responding to your feedback about our website and Services, including, for example, technical and service improvements to our website and Services; (iii) responding to your questions or inquiries, including technical questions and troubleshooting using our Services; (iv) responding to your privacy inquiries, and (v) inviting you to participate in, or informing you of the results of, market research surveys.
* **Develop and manage our relationships with you and our business partners**. This may include: (i) delivering services or carrying out transactions you or our business partners have requested; (ii) providing information about our Services and advertisements, that may be of interest to you; (iii) providing you with a more consistent experience in interacting with us, including by learning more about you and how you use and interact with our website and Services; and (iv) planning, managing, and performing our contractual relationships with our business partners.
* **Improve our website and Services**. This may include: (i) customizing our website to your preferences or interests, making them more compatible with your devices and browsers, or otherwise making our website and Services easier to use; (ii) maintaining the security of our website and Services and otherwise protecting them; and (iii) improving our website and Services; and (iv) developing new services, marketplaces, and platforms.
* **Address legal issues**. This may include: (i) complying with our obligations to retain certain business records for minimum retention periods; (ii) establishing, exercising, or defending legal claims; (iii) complying with laws, regulations, court orders, or other legal processes; (iv) detecting, preventing, and responding to anti-money laundering, fraud or intellectual property infringement claims, violations of our contracts or agreements, violations of law, or other misuse of our website or Services; and (v) protecting the our rights or property, or yours or others’ health, safety, welfare, rights, or property.

We may also use your personal data for other uses consistent with the context in which the data was collected or with your consent or lawful purposes. If we believe the purpose for which we use your personal data for other purposes go beyond the scope of your consent you provide during the personal data collection, we will communicate with you to obtain your consent.

We may anonymize or aggregate any of the data we collect and use it for any purpose, including research and product development. Such anonymized or aggregated data will not identify you individually.

### **Disclosure of Your Personal Data**

* We may share your personal data with other CapsuleNFT corporate group entities, which include our affiliates. When we do so, our group entities will use your data in a manner consistent with this Privacy Policy and all applicable privacy and data protection laws.
* We may also disclose your personal data with third-party processors to perform support Services and to assist us in processing your personal data as described above. These processors are required to treat your personal data in compliance with all applicable privacy and data protection laws.
* We may share your personal data with third parties who partner with us to provide our Services. Under such circumstances, we will require our business partners to use that data in a manner consistent with this Privacy Policy and all applicable privacy and data protection laws.
* We may share your personal data with third parties when we have a good faith belief that disclosure is necessary:
  * (i) to comply with a law, regulation, court order, or other legal processes;
  * (ii) to detect, prevent, and respond to fraud or intellectual property infringement claims, violations of our contracts or agreements, violations of law, or other misuse of our website or Services;
  * (iii) to protect our rights or property or yours or others’ health, safety, welfare, rights, or property; or
  * (iv) under similar circumstances. If such an event occurs, we will take appropriate steps to protect your personal data.
* We may disclose your personal data with third parties in connection with the sale, purchase, merger, reorganization, liquidation, or dissolution of CapsuleNFT, or under similar circumstances. If such an event occurs, we will take appropriate steps to protect your personal data.
* We may share your data with your consent or at your request.
* We may share anonymized or Aggregated Data internally and with third parties for any purpose. Such information will not identify you individually.

### **Cookies and Automatic Data Collection Technologies**

Our website may use automatic data collection technologies to distinguish you from other website users. This helps us deliver a better and more personalized experience when you browse our website. It also allows us to improve our website by enabling us to:

* Estimate our audience size and usage patterns.
* Store your preferences, so we may customize our website according to your individual interests.
* Recognize you when you return to our website.

The technologies we use for this automatic data collection may include:

* **Cookies (or browser cookies).** A cookie is a small file placed on the hard drive of your computer. For information about managing browser settings to refuse cookies, see Your Rights and Choices.
* **Flash Cookies**. Certain features of our website may use Flash cookies (local stored objects) instead of browser cookies to collect and store information about your preferences and navigation to, from, and on the website. For information about managing Flash cookies, see Your Rights and Choices.
* **Web Beacons, Pixel Tags, Clear Gifs.** Our website pages and emails may contain small transparent embedded images or objects known as web beacons (also referred to as clear gifs, pixel tags, and single-pixel gifs) that permit us, for example, to count website page visitors or email readers, or to compile other similar statistics such as recording website content popularity or verifying system and server integrity. For information about managing web beacons, see Your Rights and Choices.

Most web browsers include a Do-Not-Track (“DNT”) signal or similar mechanisms for your privacy preference. At this time, there is no technology standard for recognizing and implementing DNT signals has been finalized. Given the state of technology, we do not respond to DNT signals or any other mechanism that automatically communicates your preference not to be tracked online. If a standard for online tracking is adopted that we must follow in the future, we will inform you about that practice in a revised version of this privacy notice.

### **Third-Party Links**

Some content or applications on our website may be served by third parties, content providers and application providers including the following:

**Plugins.** Our website may make available the option for you to use “plugins” that are operated by social media/networking companies. If you choose to use one of these plugins, then it may collect information about you and send it back to the social media company that owns it. This may happen even if you do not click on the plugin, if you are logged into the social media/networking website that owns the plugin when you visit our website. Data collected by a plugin is subject to the privacy policy and terms of the social media company that makes it. If you do not want the social media company that owns a plugin to collect information about you when you visit our website, sign out of the social media network before visiting. By interacting with a plugin when you are on our website (for example, clicking the Facebook “Like” button), you are intentionally transferring information to that social media/networking company. Further, if you are logged into a social media website when you visit our website, then you are directing us to share your data with the social media company that owns the plugin.

**Third-party links.** Our website may contain links to other sites, which we do not control. Those website have their own privacy policies and terms, and we encourage you to read those terms before interacting with third-party sites.

### **Retention**

We will take reasonable steps to avoid collecting personal data that is not necessary. We will only retain your personal data for the period necessary to achieve the purposes described in this privacy policy. Your express agreement may permit us to retain your personal data for a longer period. Furthermore, legal requirements may require us to retain portions or all of the personal data we hold for a longer period of time. For example, we may be required to retain your information for tax, financial reporting, and other regulatory compliance reasons. When we are no longer required to retain your personal data, we will delete, erase, or anonymize your personal data as required by applicable law and regulations.

For the categories of data that we collect the following table shows the maximum retention period for the information.

| **Data Category**            | **Maximum Retention Period**                                                                                                                                                                                                                                                   |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Personal Identification Data | If the identity and contact data relate to the information provided through our website and Services will be retained for two (2) years after you delinking your Ethereum wallet.                                                                                              |
| Communication Data           | Your communication data via email will be retained no longer than two (2) years. Any Blog comments will remain so long as the Blog post is available. Any social media posts to third party platforms will be retained according to the third party platform’s privacy policy. |
| Employment Application data  | <p>If you do not receive an employment offer, your personal data will be retained for 12 months after the decision is sent to you.</p><p><br><br></p><p>If you receive a job offer, your personal data will be retained under our employment privacy policy.</p>               |
| Device and Usage Data        | Your device and usage data will be retained no longer than two (2) years.                                                                                                                                                                                                      |

### **Children**

Our website and Services are not intended for children under 16 years of age. We will not knowingly solicit or collect personal data from children under 16, or the relevant minimum age under applicable local legal requirements, except as permitted under applicable law. If we learn that we have received information directly from a child under 16 without his or her parent’s or legal guardian’s consent, we will make commercially reasonable efforts to delete such information.

### **Your Rights and Choices**

Your rights may vary depending on where you are located. We have created mechanisms to provide you with the following control over your information.

* **Accessing, Updating, and Deleting Your Information.** You can contact us as set forth in the Contact Us section below to request access to, correction of, or deletion of personal data that you have provided to us. We may also ask you to verify your identity before we respond to your request. Depending on your request, we may not accommodate your request to change information if we believe the change would violate any law or legal requirement or negatively affect the information’s accuracy.
* **Cookies and Automatic Data Collection Technologies**. You can set your browser to refuse all or some browser cookies, or to alert you when websites set or access cookies. However, if you disable or refuse cookies, please note that some parts of these websites may become inaccessible or not function properly.
* **California Residents**. If you are a California resident, you may have additional personal rights and choices with regard to your personal data. Please see Your California Privacy Rights for more information. California’s “Shine the Light” law (Civil Code Section § 1798.83) permits users of our website that are California residents to request certain information regarding our disclosure of personal data to third parties for their direct marketing purposes. At this time, we do not engage in this type of disclosure.
* **EU Residents.** If you are a resident of the European Union, you have the right to:
  * request access to your personal data, commonly known as a “data subject access request,” which allows you to receive a copy of the personal data we hold about you and to check that we are lawfully processing it.
  * Request a correction of the personal data that we hold about you. This enables you to have any incomplete or inaccurate data we hold about you corrected, though we may need to verify the accuracy of the new data you provide to us.
  * Request erasure of your personal data. This enables you to ask us to delete or remove personal data where there is no good reason for us to continue to process it. You also have the right to ask us to delete or remove your personal data where you have successfully exercised your right to object to processing (see below), where we may have processed your information unlawfully or where we are required to erase your personal data to comply with local law. Note, however, that we may not always be able to comply with your request of erasure for specific legal reasons which will be notified to you, if applicable, at the time of your request.
  * Object to processing of your personal data where we are relying on a legitimate interest (or those of a third party) and there is something about your particular situation which makes you want to object to processing on this ground as you feel it impacts on your fundamental rights and freedoms. In some cases, we may demonstrate that we have compelling legitimate grounds to process your information which override your rights and freedoms.
  * Request restriction of processing of your personal data. This enables you to ask us to suspend the processing of your personal data in the following scenarios:
    * If you want us to establish the data’s accuracy.
    * Where you need us to hold the data even if we no longer require it as you need it to establish, exercise, or defend legal claims.
    * You have objected to our use of your data, but we need to verify whether we have overriding legitimate grounds to use it.
  * Request the transfer of your personal data to you or to a third party. We will provide to you, or a third party you have chosen, your personal data in a structured, commonly used, machine-readable format. Note that this right only applies to automated information which you initially provided consent for us to use or where we used the information to perform a contract with you.
  * Withdraw consent at any time where we are relying on consent to process your personal data. However, this will not affect the lawfulness of any processing carried out before you withdraw your consent. If you withdraw your consent, we may not be able to provide certain Services to you. We will advise you if this is the case at the time you withdraw your consent.
  * We may make automated decisions about you based on your personal data that may affect your access or Services provided to you. You have the right not to be subject the automated decision making so long as the decision is not necessary for the performance of the contract with you or required by legal obligation. If the decision making is necessary, you may contest the decision and request human intervention in the decision-making process.
  * You also have a right to lodge a complaint with the data protection authority where you live.

### **International Transfers**

We are an international company, and we maintain the information collected and generated in the United States that may have privacy laws that offer different levels of protection from the privacy laws of where you live. If you visit our site or use our Services, you consent to our collection, transfer, processing and use of your personal data in the United States. We will ensure that your personal data is adequately protected by this Privacy Policy and the relevant legal and regulatory requirements, for example, by using model contractual clauses ensuring appropriate data protection safeguards can be used as a ground for data transfers from the EU to third countries.

If you are located in the EEA, we have put in place appropriate measures to comply with the laws and regulations to ensure that the transfer of personal data to countries outside of the EEA provides an adequate level of data protection.

### **Data Security**

The security of your personal data is very important to us. We use physical, electronic, and administrative safeguards designed to protect your personal data from loss, misuse and unauthorized access, use, alteration, or disclosure. We will only retain your personal data for as long as reasonably necessary to fulfill the purpose of collecting it.

We also require our service providers and business partners to whom we disclose the information to do the same. When you use certain types of information, for example, when you link your Ethereum wallet information or your third party accounts to our website and Service, we encrypt the transmission of that information using secure socket layer technology (SSL). We will continue to improve our physical, electronic, and administrative safeguards. However, the Internet environment is not 100% secure, and we cannot guarantee that information we collect will never be accessed in an unauthorized way.

### **Changes To This Privacy Policy**

Changes to this Privacy Policy will be posted on this site, along with information on any material changes. The Company reserves the right to update or modify this Privacy Policy at any time and without prior notice. If the changes made to our Privacy Policy are substantial, we will contact you before the changes take place.

### **Contact Us**

If you have any questions about this Privacy Policy or our use of your personal data, please contact us through the following method:

* By email: <Support@CapsuleNFT.com>


# Cookie Policy

**Effective Date**: January 1, 2022

**Last Reviewed**: July 1, 2022

Capsule NFT, Inc. (“**CapsuleNFT**”, “**we**”, “**our**”, or “**us**”) care about your privacy. Thank you for taking the time to read our Cookie Policy. This Cookie Policy explains what cookies we use in addition to when and why we use cookies and similar tracking technologies on CapsuleNFT’s website (“**Website**”).

### **What is a cookie?**

A cookie is a small text file that we store on your browser or your device (computer, tablet, smartphone, etc.)  if you agree. Cookies contain information that is transferred to your device’s memory or computer’s hard drive. There are three main types of cookies:

* **Session cookies**: specific to a particular visit and limited to sending session identifiers (random numbers generated by the server) so you don’t have to re-enter information when you navigate to a new page or check out. Session cookies are not permanently stored on your device and are deleted when the browser is closed;
* **Persistent cookies**: record information about your preferences and are stored in your browser cache or mobile device; and
* **First and third-party cookies**: whether a cookie is ‘first’ or ‘third’ party refers to the website or domain placing the cookie. First party cookies, in basic terms, are cookies set by a website visited by the user (the website displayed in the URL window), *i.e.,* cookies set by the Website. Third-party cookies are cookies that are set by a domain other than the one being visited by the user: *i.e.,* cookies which are set by websites other than the Website. If a user visits our Website and a separate company sets a cookie through it, this would be a third-party cookie.

### **Purpose of cookies**

Some cookies are strictly necessary for the use of the Website; others make it possible to optimize the use of the Website and personalize the contents displayed. Cookies make it possible to (1) measure and analyze the frequency and use of the Website’s sections and services so that we can improve the functionality of the Website’s and our services, and (2) measure safety and performance.

### **We use the following cookies:**&#x20;

* **Strictly necessary cookies.** These are cookies that are required for the operation of our Website. They include, for example, cookies that enable you to use our dApp.
* **Analytical or performance cookies.** These allow us to recognize and count the number of visitors and to see how visitors move around our Website when they are using it. This helps us to improve the way our Website works, for example, by ensuring that users are finding what they are looking for easily.
* **Functionality cookies.** These are used to recognize you when you return to our Website. This enables us to personalize our content for you and remember your preferences (for example, your choice of language or region).
* **Marketing cookies.** These cookies record your visits to our Website, the pages you have visited, and the links you have followed. We will use this information to make our Website more relevant to your interests. We may also share this information with third parties for this purpose.

### **Other Information Storing Technologies** &#x20;

* **IP Addresses.** Internet Protocol (IP) address is a specific identifier with which the electronic devices can identify and communicate with each other online. We may see our visitors’ IP addresses and use this information to comprehend where our visitors come from to improve our servic&#x65;**.**
* **Web Beacons.** Our Website may contain web beacons. Such instruments enable third parties to have immediate specific information, such as the IP address of the computer that downloaded the page with the beacon, the URL of the page where it appears, the time in which the page with the beacon was viewed and the type of browser used to view the page.
* **Embedded Scripts.** An embedded script is a programming code that is designed to collect information about the links you click on and your interactions with the Website. The code is temporarily downloaded onto your device from our web server or a third-party service provider and is active only while you are connected to the Website and is deactivated or deleted thereafter.
* **Other Means.** Your browser or device may utilize local shared objects or local storage, such as flash cookies, HTML 5 cookies, and other web application software methods. These instruments may operate through all the browsers, and in certain cases, they may not be managed by your browser or may require it to be managed through your installed applications directly. We do not use these technologies for storing information to target advertising to you on or off our Website.

### **How Long Will Cookies Stay on My Device?**

Some of the cookies we use are deleted after termination of the browser session, i.e., after your browser window is closed (so-called session cookies). Other cookies remain on your end device and enable us to recognize your browser on your next visit (persistent cookies).

### **Consent**

When you access our Website, you will have a choice to consent to all cookies, reject all cookies (except for strictly necessary cookies) or accept the use of certain cookies. If you consent to the use of cookies, a consent cookie will be placed on your computer.

If you reject the use of cookies, a rejection cookie will be placed on your computer so that we can record that you have rejected using certain cookies on the Website. If the rejection cookie is deleted, we will not be able to identify whether you have rejected the use of cookies.

In addition, you may withdraw your consent. However, your withdrawal will not retroactively affect the lawfulness of the processing of data before you withdrew your consent.

### **How Do I Change My Cookie Settings?**

Most web browsers allow some control of most cookies through the browser settings. You can configure your browser so that you are informed when cookies are set, or you can decide on an individual basis whether to accept cookies or reject the acceptance of cookies in general. Every browser differs in the management of cookie settings. They are available for the different browsers at the following links:

* &#x20;[Microsoft Windows Explorer](https://support.microsoft.com/en-us/search?query=enable%2520cookies%2520in%2520edge)
* [Google Chrome](https://support.google.com/chrome/answer/95647?hl=en\&co=GENIE.Platform=Desktop#zippy=)
* [Mozilla Firefox](https://support.mozilla.org/en-US/questions/1287973#:~:text=Click%2520Tools%2520%253E%2520Options.,Allow%2520sites%2520to%2520set%2520cookies.)
* [Apple Safari](https://support.apple.com/guide/safari/manage-cookies-sfri11471/mac)

You can find more information about cookies (including how to disable them) at <http://www.allabout> cookies.org/. Not accepting cookies can result in the limited functionality of our Website. You can also search in your cookie folders to find our cookies and the Google Analytics cookie if you wish to delete them.

### **Who Controls and Accesses Cookies?**

Not all cookies are set by us. Some cookies may be set through third-party services appearing on our pages. Third-party cookies are not in our control but are under the control of a third party.

Any other processing of your data will take place only if you have allowed Google to link your web and app browser history to your Google account and to use information from your Google account to personalize ads that you see on the web. In this case, if you are logged in to your Google account during your visit to our Website, Google will use your data together with Google Analytics data to create and define target group lists for cross-device remarketing. For this purpose, Google will temporarily link your personal information with Google Analytics data to create target groups.

If you do not want Google Analytics to be used in your browser, Google Analytics provides an opt-out tool which can be found [here](https://tools.google.com/dlpage/gaoptout).

### **Additional Information for our Visitors from the European Economic Area (“EEA”)**

If you are a visitor from the EEA, before cookies are placed on your computer or device, you will be shown a banner requesting that you accept the placement of cookies. By accepting the placement of cookies, you are enabling us to provide the best possible experience and service to you. You may, if you wish, decline the placement of cookies unless those cookies are strictly necessary.

### **Your Rights**

The GDPR provides you with rights to access, correct, erase the data, and object to the processing of data. In addition, you have the right to data portability. Please see our [Privacy Policy](/additional-resources/legal/privacy-policy) for further details.

### **Complaints**

The data subject may lodge a complaint with the relevant Data Protection Authority in the data subject’s jurisdiction.

### **Changes**

We may update this Cookie Policy from time to time. We reserve the right to revise our Cookie Policy at any time and any changes will be effective upon being posted unless we advise otherwise. We encourage you to periodically review this Cookie Policy for the latest information about the use of cookies on our Website.

### **Our Details**

For questions or concerns about our privacy policy and practices, you can contact us at <Support@CapsuleNFT.com>.

&#x20;


# CCPA Notice

Effective Date: June 1, 2022 | Last Updated: June 1, 2022

## **California Consumer Privacy Act (CCPA) Privacy Notice**

CapsuleNFT (“CapsuleNFT”, “we”, “our”, or “us”) cares about your privacy. Thank you for taking the time to read our California Consumer Privacy Act (“CCPA”) privacy notice (“Privacy Notice”). This Privacy Notice covers all personal data processed by our website (CapsuleNFT.com) and our services (“Services”).

If you are a California resident, you may have additional rights and choices about your Personal Information. Please note that the CCPA provides certain exceptions with respect to the Personal Information of California employees, job applicants, owners, directors, vendors, suppliers and contractors.

### **Information We Collect**

The categories of personal information we have collected about California residents in the last 12 months is described below:

| **Category**                                                                                                                          | **Examples**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | **Collected** |
| ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
| A. Identifiers.                                                                                                                       | A real name, alias, postal address, unique personal identifier, online identifier, Internet Protocol address, email address, account name, Social Security number, driver's license number, passport number, or other similar identifiers.                                                                                                                                                                                                                                                                          | YES           |
| B. Personal Information categories listed in the California Customer Records statute (Cal. Civ. Code § 1798.80(e)).                   | <p>A name, signature, Social Security number, physical characteristics or description, address, telephone number, passport number, driver's license or state identification card number, insurance policy number, education, employment, employment history, bank account number, credit card number, debit card number, or any other financial information, medical information, or health insurance information.</p><p>Some Personal Information included in this category may overlap with other categories.</p> | NO            |
| C. Protected classification characteristics under California or federal law.                                                          | Age (40 years or older), race, color, ancestry, national origin, citizenship, religion or creed, marital status, medical condition, physical or mental disability, sex (including gender, gender identity, gender expression, pregnancy or childbirth and related medical conditions), sexual orientation, veteran or military status, genetic information (including familial genetic information).                                                                                                                | NO            |
| D. Commercial information.                                                                                                            | Records of personal property, products or services purchased, obtained, or considered, or other purchasing or consuming histories or tendencies.                                                                                                                                                                                                                                                                                                                                                                    | YES           |
| E. Biometric information.                                                                                                             | Genetic, physiological, behavioral, and biological characteristics, or activity patterns used to extract a template or other identifier or identifying information, such as, fingerprints, faceprints, and voiceprints, iris or retina scans, keystroke, gait, or other physical patterns, and sleep, health, or exercise data.                                                                                                                                                                                     | NO            |
| F. Internet or other similar network activity.                                                                                        | Browsing history, search history, information on a consumer's interaction with a website, application, or advertisement.                                                                                                                                                                                                                                                                                                                                                                                            | YES           |
| G. Geolocation data.                                                                                                                  | Physical location or movements.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | NO            |
| H. Sensory data.                                                                                                                      | Audio, electronic, visual, thermal, olfactory, or similar information.                                                                                                                                                                                                                                                                                                                                                                                                                                              | NO            |
| I. Professional or employment-related information.                                                                                    | Current or past job history or performance evaluations.                                                                                                                                                                                                                                                                                                                                                                                                                                                             | YES           |
| J. Non-public education information (per the Family Educational Rights and Privacy Act (20 U.S.C. Section 1232g, 34 C.F.R. Part 99)). | Education records directly related to a student maintained by an educational institution or party acting on its behalf, such as grades, transcripts, class lists, student schedules, student identification codes, student financial information, or student disciplinary records.                                                                                                                                                                                                                                  | NO            |
| K. Inferences drawn from other Personal Information.                                                                                  | Profile reflecting a person’s preferences, characteristics, psychological trends, predispositions, behavior, attitudes, intelligence, abilities, and aptitudes.                                                                                                                                                                                                                                                                                                                                                     | NO            |

**Use of personal information**

In the last 12 months, we have used your personal information for the business and commercial purposes described below.

* Category A: Identifiers
* Category F: Internet or other similar network activity.
* Category I: Professional or employment-related information.

\
**Sharing of personal information**

The business and commercial purposes that we have shared your personal information in the last 12 months are as follows:

* Sharing your personal information for business purposes. We have shared the following categories of personal information with our affiliated companies and service providers for our business purposes:
  * Category A: Identifiers
  * Category F: Internet or other similar network activity.
  * Category I: Professional or employment-related information.

As described above, examples of business purposes include performing transactions, registering accounts, managing our relationship with you, and monitoring for security threats, anti-money laundering and fraud.

* Sharing your personal information for commercial or other purposes: We have shared the following categories of your personal information with co-sponsors, business partners and other third parties in a manner that is likely to be considered to be a “sale” or “sharing” for commercial purposes under the CCPA:
  * None.
* Sharing your sensitive personal information as defined by Cal. Civ. Code § 1798.140(ae). Sensitive personal information means personal information that reveals (A) a consumer’s social security, driver’s license, state identification card, or passport number; (B) a consumer’s account log-in, financial account, debit card, or credit card number in combination with any required security or access code, password, or credentials allowing access to an account; (C) a consumer’s precise geolocation; (D) a consumer’s racial or ethnic origin, religious or philosophical beliefs, or union membership; (E) the contents of a consumer’s mail, email, and text messages unless the business is the intended recipient of the communication (F) consumer’s genetic data; (G) biometric information for the purpose of uniquely identifying a consumer; (H) personal information collected and analyzed concerning a consumer’s health; (I) personal information collected and analyzed concerning a consumer’s sex life or sexual orientation.
  * None.

As described above, this information may be shared for personalization, analytics, marketing, retargeting, and sales. We do not sell or share personal information of consumers we actually know are less than 16 years of age.

### **Your Right to Know**

You have the right to request that we disclose certain information to you about our collection, use, disclosure, and sale of your personal information over the past 12 months. Once we verify your request, we will disclose to you:

* The categories of personal information we collected about you.
* The categories of sources for the personal information we collected about you.
* Our business or commercial purpose for collecting or selling that personal information.
* The categories of third parties with whom we share that personal information.
* If we sold or disclosed your personal information for a business purpose, two separate lists disclosing: sales, identifying the personal information categories that each category of recipient purchased; and disclosures for a business purpose, identifying the personal information categories that each category of recipient obtained.

We do not provide access rights to business to business (“B2B”) information.

### **Your Right to Obtain a Copy of Your Personal Information**

You have a right to obtain a copy of the specific pieces of personal information we collected about you (also called a data portability request). Once we verify your request, we will provide you a copy of your personal information that is responsive to your request.

We do not provide portability rights to B2B information.

### **Your Right to Delete Your Personal Information**

You have the right to request that we delete any of your personal information that we collected from you and retained, subject to certain exceptions. Once we verify your request, we will delete (and direct our service providers to delete) your personal information from our records, unless an exception applies.

We do not provide deletion rights to B2B information.

### **Your Right to Opt-Out of Sale of Your Information**

We do not sell or share personal information with third parties that would be considered a “sale” under the CCPA.

### **How to Exercise Your CCPA Rights**

To exercise your right to know, right to obtain a copy, or right to delete your personal information as described above, please submit your request to us by:&#x20;

* Contacting us at <Support@CapsuleNFT.com>

### **How We Verify Requests and Respond to Requests**

Before fulfilling your request, we take steps to verify you are who you say you are or that you have authority to act upon someone else’s behalf. Therefore, upon receipt of your request, we will request additional information that we need to verify you and, if you are submitting a request on behalf of someone else, to verify that you are permitted to act on that person’s behalf.

When we contact you to request verification information, please respond and provide the information that we have requested. Depending on the nature of the request you make, we may require you to verify your identity to either a reasonable degree of certainty or high degree of certainty. This may mean that we need to match two or three pieces of information that we hold about you with information that you provide to us. In some cases, we may require you to sign a declaration under penalty of perjury that you are the consumer whose personal information is the subject of the request or that you are authorized to make the request on behalf of someone else.

In addition to providing the information we need to verify you or your authority, you must provide us with enough information so that we can understand, evaluate, and respond to your request. We cannot respond to your request or provide you with personal information if we cannot confirm the personal information relates to you.

We will only use personal information provided in a verifiable consumer request to verify your identity or authority to make the request and to locate relevant information. We cannot respond to your request or provide you with personal information if we cannot verify your identity or authority to make the request and to understand, evaluate, and respond to your request.

We cannot delete personal information in those situations where our retention is required for our own internal business purposes or otherwise permitted by the CCPA (such as fraud prevention or legal compliance). In these situations, we will retain your information in accordance with our records retention program and securely delete it at the end of the retention period.

### **Who May Submit Requests?**

Only you, or someone legally authorized to act on your behalf, may make a request related to your personal information. You may also make request on behalf of your minor child. You may designate an authorized agent to make a request on your behalf by registering such person or entity with the California Secretary of State.

### **How Often You Can Submit Requests?**

You may make a CCPA consumer request twice within a 12-month period.

### **Response Timing and Format**

We make every attempt to respond to a verifiable consumer request within forty-five (45) days of its receipt. If we require more time, we will inform you of the reason and extension period in writing.

If you have an account with us, we will deliver our written response to that account. If you do not have an account with us, we will deliver our written response by mail or electronically, at your option.

Any disclosures we provide will only cover the 12-month period preceding the verifiable consumer request's receipt. The response we provide will also explain the reasons we cannot comply with a request, if applicable. When you request a copy of your personal information, we will select a format to provide your personal information that is readily useable and should allow you to transmit the information from one entity to another entity easily.

We do not charge a fee to process or respond to your verifiable consumer request unless it is excessive, repetitive, or manifestly unfounded. If we determine that the request warrants a fee, we will tell you why we made that decision and provide you with a cost estimate before completing your request.

### **Non-Discrimination**

We will not discriminate against you for exercising any of your CCPA rights. You have a right not to receive discriminatory treatment by us for exercising your privacy rights.

### **Changes To This Privacy Notice**

Changes to this Privacy Notice will be posted on this site, along with information on any material changes. The Company reserves the right to update or modify this Privacy Notice at any time and without prior notice. If the changes made to our Privacy Notice are substantial, we will contact you before the changes take place.

### **Contact Us**

If you have any questions about this Privacy Notice or our use of your personal data, please contact:

* By email: <Support@CapsuleNFT.com>


# Risks

### Risk Disclaimer

CAPSULENFT is not a registered broker, analyst, or investment advisor. Everything that we provide is purely for guidance, informational, and educational purposes. All information contained herein should be independently verified and confirmed. We do not accept any liability for any loss or damage whatsoever caused in reliance upon such information or services.&#x20;

CAPSULENFT showcases media uploads from across the crypto space, and the internet at large. We do not accept any liability for offensive or illegal content uploaded to our platform. Legal NSFW content is meant only for users who are 18 years and older. Illegal or offensive content, such as products that depict obscene, graphic sexual acts and/or images that depict children under the age of 18 in a sexually suggestive manner, are strictly prohibited on our platform. Any content found in violation of the terms specified in this section will be promptly removed, and the offending user will be perma-banned. If you become aware of the creation, listing, or buying of assets in violation of any of the terms specified in this section, contact us at [support@capsulenft.com](mailto:support@capsule.org) to report it.

### Disclaimer

Trading and investing in cryptocurrencies (also called digital or virtual currencies, crypto assets, altcoins and tokens) involves substantial risk of loss and is not suitable for every investor. Any content in the Gitbook should not be relied upon as advice or construed as providing recommendations of any kind. Information provided in this correspondence is intended solely for informational purposes and is obtained from sources believed to be reliable. Information is in no way guaranteed. No guarantee of any kind is implied or possible where projections of future conditions are attempted. None of the content published here constitutes a recommendation that any particular cryptocurrency, portfolio of cryptocurrencies, transaction or investment strategy is suitable for any specific person. None of the information providers or their affiliates will advise you personally concerning the nature, potential, value or suitability of any particular cryptocurrency, portfolio of cryptocurrencies, transaction, investment strategy or other matter. The products and services presented in this document may only be purchased in jurisdictions in which their marketing and distribution are authorized. CAPSULENFT advises all interested parties to check in advance whether they are legally entitled to purchase the products and/or services presented in this document.


# Security

#### Capsule Packaging and Shipping

*Currently, the Capsule Packaging and Shipping Protocol is in **beta**, and has not been audited. The Capsule team is not responsible for any loss of funds incurred by these contracts.*

The Capsule Packaging and Shipping Protocol contracts are verified on Etherscan [here](https://etherscan.io/address/0x3b61403ade9240699042d3663814a3679dc15d56#code).

#### CapsuleNFT

The CapsuleNFT Protocol contracts are verified on Etherscan and have been audited by Quantstamp. You can view the results of the audits [here](https://certificate.quantstamp.com/full/capsule-nft) and [here](https://github.com/CapsuleNFT/dollar-store-kids/blob/main/audit/CapsuleNFT%20-%20Dollar%20Store%20Kids%20and%20Protocol%20Updates%20-%20Report.pdf).

The Capsule team works diligently to ensure the utmost security of the Capsule Protocol. We encourage users to educate themselves on blockchain best practices in order to minimize inherent risks associated with blockchain technologies.&#x20;


# Report a Bug

If you see something, say something!

If you believe that you have identified an error or bug on the Capsule application, we encourage you to report the incident in one of the following methods:

* E-mail **<support@CapsuleNFT.com>** with the subject line, "CapsuleNFT Bug Report"
* Join our [**Discord**](https://discord.com/invite/capsulenft) and report the error in the #feedback channel

Please provide as many details as possible in your report, such as the following:

* Bug Description&#x20;
  * What action(s) were you attempting when the bug occurred?
  * What was the bug and how did it affect the action(s) you were attempting?
  * What are the steps to reproduce the bug?
* A Screen Recording or Screenshot of the Bug
* Website URL of Bug Occurrence
* System Description
  * Operating System
  * Browser
  * Device
  * Date and Time (including Time Zone) of Bug Occurrence

We always appreciate your help in improving our products!


# Contact Us

To contact the Capsule team, please use one of the following methods:

* E-mail <support@CapsuleNFT.com>&#x20;
* Join our [**Discord**](https://discord.com/invite/capsulenft) and send a message in the #feedback channel

The Capsule team is always happy to address any questions or concerns.


