# Welcome

**HyperVIBES** is a public and free protocol from [**Rarible DAO**](https://discord.gg/ZtZqH7nfgG) that lets you infuse any ERC-20 token into ERC-721 NFTs from any minting platfor&#x6D;**.**&#x20;

Infused tokens can be mined and claimed by the NFT owner over time.

Create a fully isolated and independently configured HyperVIBES **realm** to run your own experiments or protocols without having to deploy a smart contract.

HyperVIBES is:

* 🎁 Open Source
* 🥳 Massively Multiplayer
* 🌈 Public Infrastructure
* 🚀 Unstoppable and Censor-Proof
* 🌎 Multi-chain
* 💖 Free Forever

**Feel free to use HyperVIBES in any way you want.**

{% hint style="info" %}
**The possibilities are endless in the realms of your imagination.**&#x20;

What would you do with that power?
{% endhint %}

{% content-ref url="/pages/TCxTEGrA9urOECSFa8b3" %}
[Overview](/overview)
{% endcontent-ref %}

{% content-ref url="/pages/UnKuaHNAsnc0WRGk3Gwm" %}
[Use Cases](/use-cases)
{% endcontent-ref %}

### Getting Started

Want to jump into the deep end? Follow our **Getting Started** guide to practice launching a custom token, NFT contract, and HyperVIBES realm on the Goerli testnet:

{% content-ref url="/pages/NRngA1R8LGig4869Tewz" %}
[Getting Started](/guides/getting-started)
{% endcontent-ref %}

### Integrating

You can use HyperVIBES without having to write any code, but direct smart contract integrations can rapidly add infusion capabilities to your protocol or NFT project.

{% content-ref url="/pages/Ck3JkktiS38zpaFwItnX" %}
[Integration](/developers/integration)
{% endcontent-ref %}

### Contributing

HyperVIBES is an immutable and non-upgradeable protocol with no admin functionality, it will exist in its current state as long as the blockchain exists.&#x20;

{% content-ref url="/pages/wvFh0ssSkOopnKAJWeAh" %}
[Links and Repos](/developers/links-and-repos)
{% endcontent-ref %}

{% hint style="info" %}
**If you're looking to build**, come hang in the [**Rarible DAO Discord**](https://discord.gg/ZtZqH7nfgG).&#x20;

We're working to make a habit of shipping fun and highly-composable decentralized software like HyperVIBES.
{% endhint %}


# Overview

**HyperVIBES** is a public and trustless protocol for infusing tokens inside of any NFT.&#x20;

Anyone can create a realm, which is a fully configurable and isolated environment within the protocol. Depending on realm configuration, infused tokens may be claimed by the owner of the NFT over time.

{% hint style="info" %}
[**Rarible DAO**](https://discord.gg/ZtZqH7nfgG) **built this protocol as a** [**global public good**](https://newsletter.banklesshq.com/p/global-public-goods-and-the-protocol) to enrich the broader NFT ecosystem, encourage experimentation, and foster creative innovation.

HyperVIBES works with all ERC-721 NFTs, you do not have to mint on rarible.com.
{% endhint %}

Want to jump in head-first and start experimenting? Check out our complete walkthrough:

{% content-ref url="/pages/NRngA1R8LGig4869Tewz" %}
[Getting Started](/guides/getting-started)
{% endcontent-ref %}

Or if you'd rather understand HyperVIBES via some concrete use cases:

{% content-ref url="/pages/UnKuaHNAsnc0WRGk3Gwm" %}
[Use Cases](/use-cases)
{% endcontent-ref %}

### Provenance Mining

The core mechanism at the heart of HyperVIBES is **Provenance Mining**.

ERC-20 tokens can be infused inside of any ERC-721 NFT. Infused tokens are mined over time based on realm configuration, and only the owner of the NFT can claim the currently mined tokens to their wallet.

If the NFT is sold or transferred to another owner, unclaimed tokens stay within the NFT.

{% hint style="info" %}
Provenance mining tokenizes of the act of holding an NFT over time.
{% endhint %}

{% content-ref url="/pages/kKF6BrldoV4q8odkBqoW" %}
[Provenance Mining](/protocol/provenance-mining)
{% endcontent-ref %}

### Multi-Tenancy

HyperVIBES is a [multi-tenanted](https://en.wikipedia.org/wiki/Multitenancy) protocol. Each isolated tenant is known as a HyperVIBES **realm**.

This means that anybody can permissionlessly create a new realm, with any token they want, configured however they like... without having to fork or deploy a smart contract.

Realms are completely isolated and independent from one another. It's possible for a single NFT to have infused tokens from several different realms.

{% content-ref url="/pages/CuQnDQnfx9zIs6EweimB" %}
[Realms](/protocol/realms)
{% endcontent-ref %}

### Permissionless

There is no gatekeeping or privileged authority within the HyperVIBES protocol.

* Anybody is free to create a realm without permission
* Anybody can infuse any NFT with any token without permission

{% hint style="info" %}
This creates a system of parallel, opt-in, non-coercive and non-rivalrous realms of experimentation layered within any infused NFT.
{% endhint %}

While the protocol itself is not permissioned in any way, individual realms can be configured to limit what agents can infuse or what collections are allowed to be infused, along with several other realm constraints.

### Trustless Infrastructure

There is no administrative functionality nor roles retained by Rarible DAO or any other agent, and the smart contract is non-upgradeable. This ensures that functionality will remain the same for as long as the blockchain exists.

All configured realms are fully sovereign and only modifiable by the admins specified during realm creation.

{% hint style="info" %}
By removing any possibility of rugging or modifying the protocol, other builders do not have to trust Rarible DAO or anybody else when choosing to integrate HyperVIBES.
{% endhint %}

### Extension and Composition

HyperVIBES was designed to be integrated with other protocols and composed within larger on-chain products.&#x20;

A proxy approval system allows external agents to infuse-on-behalf of another address, ensuring that infusions can never be spoofed without explicit authorization while still allowing interesting extensions to the protocol beyond the supported constraints.

{% content-ref url="/pages/Ck3JkktiS38zpaFwItnX" %}
[Integration](/developers/integration)
{% endcontent-ref %}


# Use Cases

HyperVIBES is designed to be a flexible and low-level building block for the community to experiment with. A variety of applications are possible without having to even deploy a smart contract.

We're excited to see the use cases the community comes up with!

{% hint style="info" %}
Want to brainstorm potential use cases or integrations?

**Hop in the** [**Rarible DAO Discord**](https://discord.gg/ZtZqH7nfgG) and geek out on the possibilities with us.
{% endhint %}

### Curation Network

Curation protocols can create uniquely-configured token-based curation mechanisms.&#x20;

Realm constraints allow for a wide amount of design-space, such as allowing fully open curation or more restrictive approaches. By tokenizing curatorial power, and allowing collectors to mine this token over time, a circular economy is created that incentivizes holding art and rewards collectors with the power to influence the curated direction of the network.

{% hint style="info" %}
HyperVIBES is a generalized, public, multi-tenanted version of the [VIBES art curation protocol](https://docs.sickvibes.xyz/protocol/curation) on Polygon.
{% endhint %}

### Token Distribution

Artists or tokenized individuals can turn any NFTs into portals that stream their social token to collectors and supporters.

Depending on realm configuration, this can be done after the NFTs have been distributed as a way of "turning on" the mechanism after the original NFT distribution.

If public infusion is allowed, the social token can be re-infused in new NFTs after being mined by the community, creating a decentralized and community-run network of token-streaming portals.

{% hint style="info" %}
Realm constraints are used to configure how the infusion and claiming mechanisms work for a specific realm, creating an extremely flexible and wide design space for token distribution.
{% endhint %}

### Gaming and Collectibles

Gaming platforms can infuse in-game resources inside of game NFTs that can be mined over time by players, or infuse art / community-created NFTs with an in-game currency as a promotional event.

Collectible projects can infuse a community governance token during the initial mint and sale via a direct smart contract integration to immediately start streaming tokens the moment an NFT is minted.

A syndicate of related or friendly 10K projects could all use the same token infused within their NFTs as a way of creating a larger meta-network and community.

### Credentialing and Certification

Realm parameters can be locked down to only allow infusion from specific or trusted agents, creating a system of on-chain signaling and certification.

Artists or other prominent community members can "autograph" other people's NFTs with their social token. If the artist allows mining this token, the collector of the autographed NFT could re-sell the social token while still keeping the original NFT.

{% hint style="info" %}
If the mining rate for a realm is set to zero, infused tokens are permanently locked within the NFT and cannot be claimed by collectors.
{% endhint %}

### Minting Platforms

HyperVIBES is not a minting platform and requires not specific ERC-721 contract to be used, but existing minting platforms could implement infuse-on-mint functionality into their platforms.

Streamlined realm configuration and social token distribution would allow for community members who don't have development experience to create interesting personal protocols and experiments.

A minting platform could also distribute their own protocol token via HyperVIBES as a way of decentralizing network equity to end-users.

UI integrations could show infused tokens across all (or a specific subset) of realms.

### Social Gamification

Distribute a ranking or signaling token to your community and allow them to infuse any NFTs based on some criteria or game.&#x20;

Display "most infused" or "top token balance" NFTs in leaderboards and high score UIs.

Multiple realms and tokens could be used for multi-dimensional signaling for interesting crowdsourced mechanisms and games.

Allow users to infuse "upvote" tokens in content or media NFTs.

### Governance

Users can "bring their own NFTs" for NFT-based governance participation by infusing a governance token into an NFT they already own.&#x20;

Social and reputation scoring can be implemented via a reputation token that is infused into membership NFTs. As that member stays within the group, the mined tokens can be re-infused into others' NFTs to continue to distribute reputation to more people.


# FAQ

### What is HyperVIBES?

HyperVIBES is a public and multi-tenanted provenance mining protocol created by Rarible DAO.

{% content-ref url="/pages/TCxTEGrA9urOECSFa8b3" %}
[Overview](/overview)
{% endcontent-ref %}

### What is provenance mining?

Provenance mining is a mechanism that allows an NFT to mine tokens over time that the owner of the NFT can claim. Unclaimed tokens stay within the NFT across sales or transfers.

### How does HyperVIBES relate to Rarible?

HyperVIBES was built by Rarible DAO as a [global public good](https://newsletter.banklesshq.com/p/global-public-goods-and-the-protocol) to enrich the broader NFT ecosystem, encourage experimentation, and foster creative innovation.

It does not directly relate to the Rarible exchange protocol or rarible.com.

{% hint style="info" %}
**HyperVIBES works with any ERC-721 NFTs from any platform.**

You do not need to mint on a specific platform nor use a custom ERC-721 contract.
{% endhint %}

### What is a realm?

A HyperVIBES realm is an isolated environment with a specific ERC-20 token and various configuration options. Anybody is free to create a realm for their own experiments, protocols, and projects.

{% content-ref url="/pages/CuQnDQnfx9zIs6EweimB" %}
[Realms](/protocol/realms)
{% endcontent-ref %}

### How do I create a realm?

The [HyperVIBES dApp](https://app.hypervibes.xyz/) can be used to create, view, and manage realms. You can also programmatically create realms directly from the smart contract by invoking the `createRealm` function.

You can follow our getting started guide to launch your first realm on a testnet:

{% content-ref url="/pages/NoHJjoa05a5mMQ5CZinZ" %}
[Create Your Realm](/guides/getting-started/create-your-realm)
{% endcontent-ref %}

### How do I integrate HyperVIBES into my protocol?

You can use HyperVIBES with any ERC-721 and ERC-20 token without having to write any code or deploy a contract by using the [HyperVIBES dApp](https://app.hypervibes.xyz/) to manage realms, infuse NFTs, and claim tokens.

More direct integrations can be built by directly invoking the HyperVIBES smart contract from your protocol.

{% content-ref url="/pages/Ck3JkktiS38zpaFwItnX" %}
[Integration](/developers/integration)
{% endcontent-ref %}

### What is infusion?

Infusion is the act of taking tokens from your wallet and staking them inside of an NFT. Infused tokens are mined over time by the NFT, and are claimable by the owner of the NFT. Unclaimed tokens stay within the NFT across sales or transfers.

Infused tokens cannot be removed from the NFT except via the mining process.

{% content-ref url="/pages/kKF6BrldoV4q8odkBqoW" %}
[Provenance Mining](/protocol/provenance-mining)
{% endcontent-ref %}

### How can I infuse an NFT?

You can view all realms that you are allowed to infuse within the [HyperVIBES dApp](https://app.hypervibes.xyz/). After selecting a specific realm, you can then choose to infuse NFTs based on the constraints and realm configuration.

{% content-ref url="/pages/0BdAW1owazLuILF3JW4N" %}
[Infuse Your NFTs](/guides/getting-started/infuse-your-nfts)
{% endcontent-ref %}

### What does it mean to claim infused tokens?

Claiming tokens is possible after an infused NFT has mined them over time. The owner of the NFT can claim tokens at any time, depending on realm configuration. Unclaimed tokens stay within the NFT across sales or transfers.

{% content-ref url="/pages/kKF6BrldoV4q8odkBqoW" %}
[Provenance Mining](/protocol/provenance-mining)
{% endcontent-ref %}

### How do I claim infused tokens?

You can view all realms that you can claim tokens from in the [HyperVIBES dApp](https://app.hypervibes.xyz/). After selecting a specific realm, you can then browse the NFTs you own with claimable tokens.

{% content-ref url="/pages/J9JpY5RYYM9NeBzgeKpk" %}
[Claim Tokens](/guides/getting-started/claim-tokens)
{% endcontent-ref %}

### What NFTs can I infuse via HyperVIBES?

Any ERC-721 NFTs can be infused via the protocol, depending on realm configuration. **ERC-1155s cannot be infused.**

HyperVIBES is not a minting platform. It was designed to allow infusing tokens into NFTs minted on any platform.

{% hint style="info" %}
**You do not have to use rarible.com NFTs with HyperVIBES.**&#x20;

You can use any ERC-721 you want, without any modification or custom code.
{% endhint %}

### What tokens can I infuse via HyperVIBES?

Any ERC-20 tokens can be used with HyperVIBES.&#x20;

Each realm is configured with a single token.

### What does it cost to use HyperVIBES?

HyperVIBES will always be 100% free to use, with zero fees, forever.

### Is there a protocol or governance token?

No, there is no upgradeable functionality or fee extraction. There is nothing to govern on the protocol itself.

Peripheral communities may choose to launch a DAO / token.

### What can I build with HyperVIBES?

Anything you want. The only limit is your imagination.

{% content-ref url="/pages/UnKuaHNAsnc0WRGk3Gwm" %}
[Use Cases](/use-cases)
{% endcontent-ref %}

### Can an NFT be infused with multiple tokens?

Yes, a single NFT could be infused across an infinite number of realms and mining several tokens simultaneously.

Depending on how a realm is configured, an NFT may be infused multiple times (from multiple agents) in the same realm.

### Do you have to own the NFT to infuse it?

This depends on the realm configuration.

{% content-ref url="/pages/CuQnDQnfx9zIs6EweimB" %}
[Realms](/protocol/realms)
{% endcontent-ref %}

### How can I contribute?

Hang out in the [Rarible DAO Discord](https://discord.gg/ZtZqH7nfgG)! We're working to make a habit of shipping fun and highly-composable decentralized software like HyperVIBES.

{% content-ref url="/pages/wvFh0ssSkOopnKAJWeAh" %}
[Links and Repos](/developers/links-and-repos)
{% endcontent-ref %}


# Getting Started

Welcome to **HyperVIBES**.&#x20;

This step-by-step guide will walk you through using the HyperVIBES protocol on the **Goerli Test Network**:

* 🦊 Get your browser setup with a web3 wallet (<https://metamask.io/>)
* 🚰 Request some test tokens on the Goerli network (<https://faucet.paradigm.xyz/>)
* 🤑 Deploy your own ERC-20 token (<https://coinmechanic.io/>)&#x20;
* 🎨 Deploy a custom ERC-721 NFT contract (<https://wemint.art/>)&#x20;
* 🛸 Create a HyperVIBES realm (<https://app.hypervibes.xyz>)
* 🌈 **Infuse your NFTs**&#x20;

{% hint style="info" %}
You might have done some of these steps already. That's cool! This guide covers every point in the process so you can jump in and out where it makes senes.&#x20;

**HyperVIBES is all about experimentation.**&#x20;
{% endhint %}

{% content-ref url="/pages/UnKuaHNAsnc0WRGk3Gwm" %}
[Use Cases](/use-cases)
{% endcontent-ref %}

### Overview

**HyperVIBES** is a public and trustless protocol for infusing tokens inside of any NFT.&#x20;

Infused tokens can be mined and claimed by the NFT owner over time.

{% content-ref url="/pages/TCxTEGrA9urOECSFa8b3" %}
[Overview](/overview)
{% endcontent-ref %}

Today, you're going to launch your own personal ERC-20 token and NFT contract using community-authored tools that are 100% free. Then, you're going to use the HyperVIBES protocol to create your own realm and infuse your NFTs with your token.

{% hint style="info" %}
**This walkthrough will be done on an Ethereum test network**, it won't cost any real money.

These same steps can be taken on any mainnet blockchain as well when you're ready to launch your project.
{% endhint %}

### Steps

{% content-ref url="/pages/8ZUeRcHzTGDGDn0bZSSH" %}
[Setup Your Wallet](/guides/getting-started/setup-your-wallet)
{% endcontent-ref %}

{% content-ref url="/pages/CamEr3bkzasu8Rh8gSYt" %}
[Drip Some Funds](/guides/getting-started/drip-some-funds)
{% endcontent-ref %}

{% content-ref url="/pages/rIwLKKYtCOw7viXpxhQP" %}
[Deploy a Token](/guides/getting-started/deploy-a-token)
{% endcontent-ref %}

{% content-ref url="/pages/xg3gszmSuqYSQsyHHnVz" %}
[Deploy an NFT Contract](/guides/getting-started/deploy-an-nft-contract)
{% endcontent-ref %}

{% content-ref url="/pages/NoHJjoa05a5mMQ5CZinZ" %}
[Create Your Realm](/guides/getting-started/create-your-realm)
{% endcontent-ref %}

{% content-ref url="/pages/0BdAW1owazLuILF3JW4N" %}
[Infuse Your NFTs](/guides/getting-started/infuse-your-nfts)
{% endcontent-ref %}

{% content-ref url="/pages/J9JpY5RYYM9NeBzgeKpk" %}
[Claim Tokens](/guides/getting-started/claim-tokens)
{% endcontent-ref %}

{% content-ref url="/pages/TrZcme1902noNb7yeOlh" %}
[Share Your Realm](/guides/getting-started/share-your-realm)
{% endcontent-ref %}


# Setup Your Wallet

If you haven't already, install MetaMask, an in-browser extension that allows you to connect to blockchain based decentralized applications, or "dApps":

* [https://metamask.io](https://metamask.io/)

MetaMask will allow you to interact with Ethereum-based networks and testnets, as well as networks like Polygon and Arbitrum.

{% hint style="info" %}
First time setting up metamask? [**Here is an official guide**](https://metamask.zendesk.com/hc/en-us/articles/360015489531-Getting-started-with-MetaMask)
{% endhint %}

Make sure you have selected the **Goerli Test Network** (or whatever testnet you prefer) from the network dropdown menu at the top of the MetaMask window.


# Drip Some Funds

A testnet "faucet" is a simple app that will send you tokens and NFTs on various test blockchains.&#x20;

You can skip this step if you already have tokens and have used the Goerli testnet before:

* <https://faucet.paradigm.xyz>

In order to prevent abuse, you must log in with Twitter. After logging in, provide your wallet address from your MetaMask in the input to deliver test funds to your account.

![Paradigm's testnet faucet](/files/bdeij9c5NdOwyZZsH9hX)


# Deploy a Token

Deploy your own ERC-20 token via CoinMechanic.&#x20;

* [https://coinmechanic.io](https://coinmechanic.io/)

**If you already have a token you'd like to use, you can skip this step.**

This could be a social token, community token, governance token... or anything else you could imagine.&#x20;

{% hint style="info" %}
**You could also use any existing ERC-20 token** (such as $ENS, $RARI, or $USDC) for your realm.

Check your local jurisdiction's securities law before you get too crazy.
{% endhint %}

#### Deploy

Select **Build Token** from the CoinMechanic site, setup your token however you wish:

![Token Builder UI](/files/x0xSpWRo9AUiSFso6QPC)

Once your token has been deployed, you can easily add it to your MetaMask. The initial supply will have been minted to your wallet:

![Token deployed screen](/files/7pqhAEyQ6VupLGPtHhEA)

{% hint style="info" %}
**Notice the Contract address for your token** -- this is needed later when you configure your HyperVIBES realm.
{% endhint %}


# Deploy an NFT Contract

Deploy your own ERC-721 via wemint.art.&#x20;

* [https://wemint.art](https://wemint.art/)

**If you already have minted NFTs or have your own contract, then you can skip this step.**

Controlling your own contract is a powerful way of establishing provenance around the pieces you mint.

{% hint style="info" %}
**You can use any existing ERC-721 NFTs as well**, HyperVIBES works across all minting platforms.

Depending on how you configure the realm, you don't even need to own the NFTs to infuse them.
{% endhint %}

#### Deploy

Make sure to **CONNECT** your wallet to the wemint.art app via the button in the top right, and ensure you are still on the **Goerli Test Network**. Provide some basic info to deploy your ERC-721 contract:

![wemint.art site](/files/9ca0iYfA4I6fAJFcq0M3)

Once the contract is deployed:

![Contract succesfully deployed](/files/tVu8K2MAcKf4tXkoCu8H)

{% hint style="info" %}
**Notice the contract address once deployment has finished**, you'll need this later when setting up your realm.
{% endhint %}

#### Mint

Select **HOW TO** in wemint.art for a basic walkthrough of getting artwork into IPFS. Alternatively, you can use the following example metadata URI:

* `ipfs://ipfs/QmPVEKvFEm9CHPzrKBuj7CPiEML9jKRUap7Lbpxu4tC1ce`

Once you have your metadata URI, select the **MINT** tab, provide the contract address and metadata URI:

![Minting in wemint.art](/files/8nA49WWnycElR2ElTyYN)

Press **MINT!** and your NFT will be minted!

* <https://testnets.opensea.io> - OpenSea sometimes has issues indexing NFTs on testnets, but you may be able to see it here.

Example successful transaction following the initial mint:

![etherscan.io](/files/VxotlzOtSd9rgk8pirGE)


# Create Your Realm

Previously, you have:

* Created your own ERC-20 token and minted some initial supply of tokens to your wallet
* Created your own ERC-721 NFT contract and minted a single NFT to your wallet

**Now it's time to setup a HyperVIBES realm:**

* <https://app.hypervibes.xyz>

A HyperVIBES realm is a completely isolated environment that can be setup with any ERC-20 token. Each project can set up their own realm, configured to meet their needs.

{% content-ref url="/pages/CuQnDQnfx9zIs6EweimB" %}
[Realms](/protocol/realms)
{% endcontent-ref %}

### Creating your Realm

Ensure you are still on the **Goerli Test Network** (or whatever your preferred testnet is), and select the first card:

![Choose your path](/files/XLpudtrrp5ZIaV6Pj39i)

Create a realm by inputting all the various configuration information. How you configure your realm is up to you:

![Initial realm configuration](/files/qQSvU6tol7euDYXXd6oW)

You can leave admin blank for now, there's no need to modify this realm. After press **NEXT**, add the NFT contract you deployed earlier as the **Allowed Collection:**&#x20;

![](/files/uDGLbit1xvh8KeyN0vAZ)

And set the **TOKEN ADDRESS** to the ERC-20 we deployed earlier (confirm the token symbol on the right of the input box):

![](/files/eXd03UMGKnHkSgwyW6R5)

By specifying your address for **ALLOWED INFUSERS**, and selected the second option above, you will be the only address that can infuse NFTs for this realm.

Provide additional configuration options:

![](/files/4Ml6uXTH91f5CV8CyyMl)

Specify constraints around claiming tokens:

![](/files/bLCbWyLsHgFG4i3I1gbA)

Once you press **CREATE REALM**, submit the transaction.


# Infuse Your NFTs

Once you've created your realm, you can now infuse the realm's ERC-20 token into your NFTs.

Infusion is the process of staking ERC-20 tokens inside of an NFT that mines tho tokens over time. The owner of the NFT can claim mined tokens, and unclaimed tokens stay inside the NFT across sales or transfers.

{% content-ref url="/pages/kKF6BrldoV4q8odkBqoW" %}
[Provenance Mining](/protocol/provenance-mining)
{% endcontent-ref %}

### Infuse

Select the **INFUSE** option from the top navigation menu of the HyperVIBES app, or select the middle **INFUSE** card from the main landing page

* <https://app.hypervibes.xyz>

Once there, you'll see a list of all realms that you can infuse NFTs in.&#x20;

{% hint style="info" %}
You may see additional realms that allow for "public infusion", where anybody is welcome to infuse NFTs (so long as they bring their own tokens):
{% endhint %}

![Select a realm to infuse within](/files/iswrJKkaF5WFjsRWbNkH)

If you don't see it, confirm the [**Create Realm**](/guides/getting-started/create-your-realm) transaction went through and that you are still on the correct network. Sometimes it can take a few moments for TheGraph to index new realms as well.

Select your realm, and then select your collection:

![Select the collection within the realm you'd like to infuse](/files/LMPGExWiP5ZPoUTWJXW3)

Once you select your collection, type in Token ID **0** to infuse the token [you minted previously](/guides/getting-started/deploy-an-nft-contract):

![Select a token to infuse](/files/QghKu6zBt98zAx2DM0LK)

Then input any amount of tokens you want to infuse, based on how you've configured your realm previously.&#x20;

**These tokens will be transferred from your wallet into the NFT:**

![Infuse your NFT](/files/hvxzHIPG9cqS6K90V2dz)

If this is your first infusion, you'll have to execute the **APPROVE** step as part of the standard ERC-20 approval flow:

![ERC-20 tokens must be approved before they can be spent by a smart contract](/files/CpJhLPY8crM9XHbyRL2N)

Once the approval completes, you can infuse your NFT:

![Infusing tokens](/files/AdwGf8f5kImH9xBEbIYY)

Your NFT is now infused!


# Claim Tokens

**Claiming** is the act of withdrawing mined tokens from an infused NFT to the NFT owner's wallet.&#x20;

Only mined tokens can be claimed, while un-mined tokens stay staked within the NFT. Unclaimed tokens stay within the NFT across sales or transfers.

{% content-ref url="/pages/kKF6BrldoV4q8odkBqoW" %}
[Provenance Mining](/protocol/provenance-mining)
{% endcontent-ref %}

### Claim

Select the **CLAIM** option from the top navigation menu of the HyperVIBES app, or select the far-right **CLAIM** card from the main landing page

* <https://app.hypervibes.xyz>

Once there, you'll see a list of all realms:

![Selecting a realm to claim tokens from](/files/wR1UzYzox0R4uxcTeYqp)

Select a realm to browse the infused NFTs within that realm:

![Select an NFT to claim tokens from](/files/7i4NgfKQY7Ftqky05K42)

The Claim Tokens screen allows you to input any amount of tokens, up to the total currently mined within the NFT. Input the amount (or press **MAX**), and press the **CLAIM** button to claim your tokens.

![](/files/LLuJF4kvUzKXUCSyldl1)

Once the transaction submits, you'll have the tokens in your wallet:

![](/files/ntZwjc2KyXXoSQrjznug)


# Share Your Realm

In addition to the primary [Create Realm](/guides/getting-started/create-your-realm), [Infuse NFTs](/guides/getting-started/infuse-your-nfts), and [Claim Tokens](/guides/getting-started/claim-tokens) UIs in HyperVIBES, there is a dedicated **Explore** section that can be used to view all realms and infused tokens, as well as share a direct link to a realm or NFT.

### Explore

Select the **EXPLORE** option from the top navigation menu of the HyperVIBES app, or select bottom **EXPLORE** button on the app home screen:

* <https://app.hypervibes.xyz>

Once there, you'll see a list of all realms:

![Explore Realms](/files/hpgHdTcJvSwHQtOoG4nf)

Selecting a realm will take you to a page where all of the NFTs infused within a realm are visible:

![Viewing the NFTs within a Realm](/files/axHXA6lM4VRHAulOLsV6)

Selecting an NFT will take you to the NFT detail page

![NFT details](/files/4h3VqcMsxoRTQbkGc35T)

{% hint style="info" %}
Each of the above pages can be shared directly with others and viewed in a browser, even without a web3 wallet installed.
{% endhint %}


# Realms

HyperVIBES is a [multi-tenanted](https://en.wikipedia.org/wiki/Multitenancy) protocol where anybody is free to create a **realm**, which is an isolated environment that can be configured and used independently from other realms.

Permissionless creation of realms allows anybody to build any protocol, experiment, or project on top of HyperVIBES without interfering with anybody else or asking for permission.

{% hint style="info" %}
This also means that **most use cases for HyperVIBES can be implemented without having to write any custom code** nor deploy a smart contract
{% endhint %}

Wanna dive in head-first? Check out the entire [**Getting Started**](/guides/getting-started) guide or jump right to the realm creation page:

{% content-ref url="/pages/NoHJjoa05a5mMQ5CZinZ" %}
[Create Your Realm](/guides/getting-started/create-your-realm)
{% endcontent-ref %}

### Realm Configuration

When a new realm is created, the following information is provided:

* **name** - Display name for the realm. Does not have to be unique across HyperVIBES.
* **description** - Description for the realm.
* **ERC-20 token** - The specific token that can be infused into NFTs for this realm.
* **token daily mining rate** - How many tokens per day each NFT will mine once infused.
* **realm constraints** - Configuration of the parameters of the realm. *See below.*
* **admins** - Addresses that are allowed to add or remove **admins**, **infusers**, **claimers**, or **collections** to the realm.
* **infusers** - Addresses that are allowed to infuse NFTs. Ignored if the **allow public infusion** constraint is true.
* **claimers** - Addresses that are allowed to claim mined tokens from an NFT. Ignored if the **allow public claiming** constraint is true.
* **collections** - NFT contract addresses that can be infused. Ignore if the **allow all collections** constraint is true.

{% hint style="info" %}
When a realm is created, an **id** will automatically be assigned.
{% endhint %}

{% hint style="warning" %}
Realm name, description, token, constraints, and daily mining rate **cannot be modified once the realm is created.**

You can always create additional realms (potentially with the same token) if you want to use different parameters in your project.
{% endhint %}

### Realm Constraints

Realm constraints determine the behavior around infusing, claiming, and token mining. By creating realms with different constraint configurations, a wide range of possible applications can be implemented.

* **min infusion amount** - An NFT must be infused with at least this amount of the token every time it's infused.
* **max token balance** - An NFT's infused balance cannot exceed this amount. If an infusion would result in exceeding the max token balance, amount transferred is clamped to the max.
* **min claim amount** - When claiming mined tokens, at least this much must be claimed at a time.
* **require NFT is owned** - If true, the infuser must own the NFT at time of infusion.
* **allow multi infuse** - If true, an NFT can be infused more than once in the same realm.
* **allow public infusion** - If true, anybody with enough tokens may infuse an NFT. If false, they must be on the **infusers** list
* **allow public claiming** - If true, anybody who owns an infused NFT may claim the mined tokens inside that NFT. If false, they must be on the **claimers** list.
* **allow all collections** - If true, NFTs from any ERC-721 contract can be infused. If false, the contract address must be on the **collections** list.

Realm constraints allow for a large range of possible mechanics and behaviors.

{% content-ref url="/pages/UnKuaHNAsnc0WRGk3Gwm" %}
[Use Cases](/use-cases)
{% endcontent-ref %}


# Provenance Mining

Provenance mining is a mechanism that allows an NFT to mine ERC-20 tokens over time that the owner of the NFT can claim. Unclaimed tokens stay within the NFT across sales or transfers.

{% hint style="info" %}
**What happens when you tokenize the act of holding an NFT over time?**

[**Create a realm**](/protocol/realms)**,** run your own experiment, and see what happens!
{% endhint %}

{% content-ref url="/pages/UnKuaHNAsnc0WRGk3Gwm" %}
[Use Cases](/use-cases)
{% endcontent-ref %}

### Infusion

**Infusion** is the process of staking ERC-20 tokens from your wallet into an NFT via HyperVIBES.&#x20;

Infused tokens are then mined by the NFT over time at a linear rate as configured in the realm. Mined tokens do not automatically go to the NFT owner's wallet, they must be "claimed" at some point (*see below*).

* Tokens immediately start mining on the same block they are infused.
* If the **require NFT is owned** constraint of the realm is `true`, the infuser must own the NFT being infused.
* If the **allow public infusion** constraint of the realm is `false`, the infuser must be on the list of allowed infusers for that realm.
* If the **allow all collections** constraint of the realm is `false`, the NFT being infused must be from a collection on the list of allowed collections for that realm.
* If the **allow multi infuse** constraint of the realm is `false`, an NFT can only be infused a single time for that realm.
* The amount being infused must be equal to or greater than the **min infusion amount** constraint set in the realm.
* If the infusion would result in a staked token balance for that NFT that is greater than the **max token balance** constraint for the realm, infused amount is clamped (limited) to the **max token balance** amount. If this clamped amount is less than **min infusion amount**, the infusion will fail.
* If the specified infuser is different than the address submitting the transaction, the infuser must have approved the sender as an [**authorized proxy**](/protocol/proxies) ahead of time.

{% content-ref url="/pages/0BdAW1owazLuILF3JW4N" %}
[Infuse Your NFTs](/guides/getting-started/infuse-your-nfts)
{% endcontent-ref %}

### Claiming

**Claiming** is the act of withdrawing mined tokens from an infused NFT to the NFT owner's wallet.&#x20;

Only mined tokens can be claimed, while un-mined tokens stay staked within the NFT. Unclaimed tokens stay within the NFT across sales or transfers.

* The total amount being claimed must be equal to or greater than the **min claim amount** constraint set in the realm.
* It is possible to claim less than the total claimable amount if desired.
* If the **allow public claiming** constraint of the realm is `false`, the claimer must be on the list of allowed claimers for that realm.
* If the address submitting the claim transaction does not own the NFT, the NFT owner must have approved the sender as an [**authorized proxy**](/protocol/proxies) ahead of time

{% content-ref url="/pages/J9JpY5RYYM9NeBzgeKpk" %}
[Claim Tokens](/guides/getting-started/claim-tokens)
{% endcontent-ref %}


# Proxies

Proxies are an advanced HyperVIBES mechanic that ensures that on-chain customization is possible for more complex integrations with the protocol.

This allows developers to launch a HyperVIBES realm with complete control over the infusion and claiming experience.

{% hint style="info" %}
You can [**configure a realm**](/protocol/realms) with various constraints directly in the HyperVIBES UI **with no need for custom smart contracts**.

Proxies are only needed for advanced integrations.
{% endhint %}

{% content-ref url="/pages/UnKuaHNAsnc0WRGk3Gwm" %}
[Use Cases](/use-cases)
{% endcontent-ref %}

### Overview

A HyperVIBES **proxy** is an address that an agent has delegated infusion and claiming functionality to for a specific realm.

Once an agent (the delegator) has delegated to a proxy, the proxy may now:

* **Infuse tokens into an NFT on behalf of the delegator**. Infused tokens must come from the proxy's address, and the delegator will be recorded as the infuser.
* **Claim infused tokens from NFTs owned by the delegator**. Claimed tokens are sent to the proxy's address.

{% hint style="info" %}
**Proxies are scoped to a specific realm.** Authorizing a proxy does NOT allow it to infuse and claim on behalf of the delegator across all realms.
{% endhint %}

#### Design Rationale

It can be useful to have a smart contract "frontend" to the infusion or claiming steps to add custom functionality for a realm beyond the built-in constraints.&#x20;

However, we do not want to allow any contract to have the ability to attribute infusion nor claim tokens on behalf of an address without that address giving explicit authorization.&#x20;

{% hint style="info" %}
This ensures that no matter how the realm is configured, **nobody can "spoof" the recorded infuser nor claim tokens without permission.**&#x20;
{% endhint %}

### Allowing and Denying Proxies

The `allowProxy` and `denyProxy` functions on the HyperVIBES smart contract are used to add and remove proxies on behalf of the message sender.

From `IHyperVIBES.sol`:&#x20;

```solidity
    // allower operator to infuse or claim on behalf of msg.sender for a
    // specific realm
    function allowProxy(uint256 realmId, address proxy) external;

    // deny operator the ability to infuse or claim on behalf of msg.sender for
    // a specific realm
    function denyProxy(uint256 realmId, address proxy) external;
```

These functions will allow or deny `proxy` the ability to infuse and claim on behalf of `msg.sender`.

You can view and query proxy information from the HyperVIBES subgraph.

{% content-ref url="/pages/JChKyIZIxvy0g0Q07zGg" %}
[Subgraph](/developers/subgraph)
{% endcontent-ref %}


# Integration

HyperVIBES can be used entirely from the UI without having to write any code.

Deeper integration and customization is possible for developers and builders who wish to deploy their own smart contracts.

{% hint style="info" %}
**Thinking of building an advanced integration with HyperVIBES?**&#x20;

Come hang in the [**Rarible DAO Discord**](https://discord.gg/ZtZqH7nfgG), we'd love to hear what you have in mind and would be happy to answer any questions .
{% endhint %}

{% content-ref url="/pages/UnKuaHNAsnc0WRGk3Gwm" %}
[Use Cases](/use-cases)
{% endcontent-ref %}

### Client-side Integration&#x20;

If you are wanting to display HyperVIBES data in your own web app such as:

* Infused and claimable token balances for a given NFT in a specific realm
* All NFTs infused within a specific realm
* All realms an NFT has been infused within
* All infused NFTs owned by a specific address
* All addresses that have infused a specific NFT
* All NFTs infused by a specific address
* All token claims executed by a specific address

The deployed subgraphs index all data and events from HyperVIBES, which can be queried client-side via GraphQL HTTP requests:

{% content-ref url="/pages/JChKyIZIxvy0g0Q07zGg" %}
[Subgraph](/developers/subgraph)
{% endcontent-ref %}

### Smart Contract Integration

Smart contracts can directly integrate the HyperVIBES protocols to implement the following extensions:

* **Custom infusion logic or constraints**, such infusion-by-vote, reputation-based infusion access, shared infusion token pools, etc
* **Infuse-on-mint functionality**. Create a custom ERC-721 contract that will automatically create a realm on deployment and infuse all minted tokens in the same transaction they are created.
* **Custom claim functionality**, such as taking a fee during executed claims, splitting claims to several addresses, sophisticated and dynamic role-based claiming

{% content-ref url="/pages/wvFh0ssSkOopnKAJWeAh" %}
[Links and Repos](/developers/links-and-repos)
{% endcontent-ref %}

#### Proxies

For custom infusion or claim functionality implemented as a smart contract frontend to HyperVIBES, infusion and claim power must be delegated explicitly to another address via the **proxy** approval step.

This is done to ensure it's impossible to attribute infusion or claim tokens on behalf of another address without their explicit approval.

{% content-ref url="/pages/E9S77RiValss0092rlyJ" %}
[Proxies](/protocol/proxies)
{% endcontent-ref %}


# Subgraph

All on-chain data and events from HyperVIBES are indexed via TheGraph.

You can build HyperVIBES-based applications without ever having to deploy a smart contract by creating a realm and building a web3 dapp frontend.

A unique subgraph is deployed for each blockchain network HyperVIBES is on.

{% content-ref url="/pages/wvFh0ssSkOopnKAJWeAh" %}
[Links and Repos](/developers/links-and-repos)
{% endcontent-ref %}

### Examples Queries

Like all GraphQL APIs, you can use introspection to explore the schema, types, and queries available in the subgraph. Below are a few possible ways of using the subgraph:

#### List all realms

```graphql
{
  realms(orderBy: createdAtTimestamp, orderDirection: desc) {
    id
    name
    description
    token { address symbol name decimals }
    createdAtTimestamp
  }
}
```

#### Get infusion info for an NFT across all realms

```graphql
{
  nfts(where: { 
    collection: "0xc0877d217b1b83a3347c1703032ae1e013a8fd9f" 
    tokenId: "11" 
  }) {
    tokenId
    collection { address }
    owner { address }

    # there will be 1 Infusion entity for-each Realm this NFT is infused in
    infusions {
      realm { id name token { symbol } }
      balance
      lastClaimAtTimestamp

      # all discrete infusion and claim events will be here
      events {
        eventType
        amount
        msgSender { address }
        target { address }
        createdAtTimestamp
      }
    }
  }
}
```

#### Get details and infused NFTs for a specific realm

```graphql
{
  realm(id: "3") {
    id
    name
    description
    token { address symbol decimals }
    createdAtBlock
    createdAtTimestamp
    dailyRate

    # constraints

    minInfusionAmount
    maxTokenBalance
    allowMultiInfuse
    allowPublicInfusion
    allowAllCollections
    requireNftIsOwned

    # configuration

    realmAdmins { account { address } }
    realmInfusers { account { address } }
    realmClaimers { account { address } }
    realmCollections { collection { address } }

    # get all infused nfts, balances, info, and events (claims and infusions)

    infusions {
      balance
      lastClaimAtTimestamp
      nft { tokenId tokenUri collection { address } owner { address } }
      events {
        createdAtTimestamp
        target { address }
        amount
        eventType
      }
    }
  }
}
```

#### Get details about a specific account (wallet / agent)

```graphql
{
  account(id:"0xa34c3476ae0c4863fc39e32c0e666219503bed9f") {
    address

    # realms this account is admin for
    realmAdmins { realm { id name } }

    # realms this account is an infuser for
    realmInfusers { realm { id name } }
    
    # realms this account is a claimer for
    realmClaimers { realm { id name } }

    # realms this account has created
    createdRealms {id name}

    # any accounts this account can infuse/claim on behalf of
    proxiesAsProxy { realm { id name } delegator { address } }

    # any accounts that can infuse/claim on behalf of this account
    proxiesAsDelegator { realm { id name } proxy { address } }

    # all nfts owned by this account that have been infused across all realms
    ownedNFTs {
      tokenId
      collection { address }
      infusions { realm { id name } balance }
    }

    # find all discrete infusions this account has executed
    infusionEventsAsTarget(where:{ eventType: INFUSE }) {
      amount
      infusion {
        realm { id name }
        nft { tokenId collection {address} owner { address } }
      }
    }
  }
}
```


# Links and Repos

HyperVIBES was built in public by [**Rarible DAO**](https://discord.gg/ZtZqH7nfgG)**.**

All documentation and source code is free to view, fork, or copy.

### Source Code

All code is hosted in the `r-group-devs` GitHub organization:

* [hypervibes-docs](https://github.com/R-Group-Devs/hypervibes-docs)
* [hypervibes-marketing-site](https://github.com/R-Group-Devs/hypervibes-marketing-site)
* [hypervibes-frontend](https://github.com/R-Group-Devs/hypervibes-frontend)
* [hypervibes-subgraph](https://github.com/R-Group-Devs/hypervibes-subgraph)
* [hypervibes-contracts](https://github.com/R-Group-Devs/hypervibes-contracts)

{% hint style="info" %}
View all of R-Group's [open source repos on GitHub](https://github.com/R-Group-Devs).
{% endhint %}

### Documentation

Beyond in-repo documentation and this docs site, Google Docs was used extensively during development:

* [Initial Product Brief](https://docs.google.com/document/d/1NvztqdMAyLERTPuX5uHSnq8f5G0YVRaxNsq5UaXhQEw) - Used to convey the idea internally among the Builder's Group and articulate the key concepts and scope of the project
* [Initial Vibe Brainstorm](https://docs.google.com/document/d/1g7A-Pt48FBLlRODD6iA8TcQ5v22Jo5lIAdlcq_EaQ4) - Nailing the vibe is critical. What should this protocol *feel* like?
* [MVP Coordination](https://docs.google.com/document/d/1dpMlzGeO4XfD6gBQoaTTXO2NxCCfA0hDYlTinJjCsfQ) - Helped track information across frontend and contract domains as development started
* [Protocol One-Sheet](https://docs.google.com/document/d/1bpQfozAamT-zmYMm9aV0ao9KrBezCLTVEqM-_UtHOGg) - Terse and straightforward info about the project that was shared externally to potential partners and internally to other working groups

{% hint style="info" %}
View all of the HyperVIBES docs in [Google Drive](https://drive.google.com/drive/u/0/folders/1L9s4HIB3zDNUpPXAVo7zQsgqK5U3abGe).

**These docs should be considered historical reference** mostly, this site is the current living documentation for the project.
{% endhint %}

### Contract Addresses

All contracts are verified on their respective blockchain explorer apps.

#### Mainnet Deployments

* Ethereum - `0x26887a9f95e1794e52ae1b72bfa404c1562eed0e`
* Polygon - `0x26887a9f95e1794e52ae1b72bfa404c1562eed0e`
* Arbitrum - `0x26887a9f95e1794e52ae1b72bfa404c1562eed0e`
* Fantom - `0x26887a9f95e1794e52ae1b72bfa404c1562eed0e`

#### Testnet Deployments

* Ropsten - `0xcd181fB818aaAae8D34D6D5bBe7aD4c44ac8af98`
* Rinkeby - `0xafb96b99a0A4eF348115C6BbD99A71d3d4F52Ff1`
* Goerli - `0x26887a9F95e1794e52aE1B72Bfa404c1562Eed0E`
* Mumbai - `0x57FBF9E899E17E23d46425e33eE191C8FaD27c28`
* Arbitrum Rinkeby - `0x26887a9F95e1794e52aE1B72Bfa404c1562Eed0E`

{% content-ref url="/pages/Ck3JkktiS38zpaFwItnX" %}
[Integration](/developers/integration)
{% endcontent-ref %}

### Subgraphs

On-chain data from HyperVIBES is indexed via TheGraph:

#### Mainnet Subgraphs

* Ethereum - <https://thegraph.com/hosted-service/subgraph/r-group-devs/hypervibes-mainnet>
* Polygon -  <https://thegraph.com/hosted-service/subgraph/r-group-devs/hypervibes-matic>
* Arbitrum - <https://thegraph.com/hosted-service/subgraph/r-group-devs/hypervibes-arbitrum-one>
* Fantom - <https://thegraph.com/hosted-service/subgraph/r-group-devs/hypervibes-fantom>

#### Testnet Subgraphs

* Ropsten - <https://thegraph.com/hosted-service/subgraph/r-group-devs/hypervibes-ropsten>
* Rinkeby - <https://thegraph.com/hosted-service/subgraph/r-group-devs/hypervibes-rinkeby>&#x20;
* Goerli - <https://thegraph.com/hosted-service/subgraph/r-group-devs/hypervibes-goerli>
* Mumbai - <https://thegraph.com/hosted-service/subgraph/r-group-devs/hypervibes-mumbai>
* Arbitrum Rinkeby - <https://thegraph.com/hosted-service/subgraph/r-group-devs/hypervibes-arbitrum-rinkeby>

{% content-ref url="/pages/JChKyIZIxvy0g0Q07zGg" %}
[Subgraph](/developers/subgraph)
{% endcontent-ref %}


# Disclaimer

{% hint style="warning" %}
HyperVIBES is experimental software: **use at your own risk**
{% endhint %}

{% hint style="warning" %}
Contracts have not been formally audited.
{% endhint %}

{% hint style="warning" %}
Nothing on this site or any other HyperVIBES page should be considered financial advice.
{% endhint %}

### Project Source Code

{% content-ref url="/pages/wvFh0ssSkOopnKAJWeAh" %}
[Links and Repos](/developers/links-and-repos)
{% endcontent-ref %}


