VRC-20 Data Tokens

Powering the economic engine for DataDAOs and their communities.

The VRC-20 standard provides a framework for tokenizing datasets. VRC-20 tokens are ERC-20 tokens with additional DataFi functionalities for governing dataset access and economics.

Core Functions

VRC-20 tokens enable three core functions:

  • Incentivize Contribution: Rewards users for providing verified data
  • Govern Data Access: Manage permissions and usage policies onchain
  • Enable Community Governance: Token holders vote on dataset policies

Disambiguation: VRC-20, DAT, and ERC-20

  • VRC-20 is a standard, not an implementation. This standard defines rules around which criteria ERC-20 tokens should fulfill to effectively represent dataset value, provide data access permission governance utilities, and incentivize data contributors. Not all aspects are writable onchain, for example the existence of public documentation on the token's role in their data ecosystem.
  • DAT (Data Access Tokens) are a minimally VRC-20 compliant ERC-20 template implementation. They are ERC-20 tokens that are capped, burnable, and include an address blocking feature controlled by the token admin. For more information on how this is implemented on the smart contract level, please visit the VRC-20 (DAT) developer reference page.
  • ERC-20 tokens are the generic fungible-token interface defined by EIP-20, exposing only balance/transfer/allowance mechanics (totalSupply, balanceOf, transfer, approve, transferFrom, allowance) and carrying no built-in rules about supply caps, governance, or dataset linkage.

How VRC-20 Tokens Work

A VRC-20 token is a fully ERC-20 compatible token that is verifiably linked to a specific Data Liquidity Pool (DLP), representing the economic value and governance rights over its underlying dataset. For DeFi integrations, you can treat a VRC-20 token just like any other ERC-20, but you can also query its underlying data metrics for more advanced use cases.

The Onchain Link: How a Token is Tied to a Dataset

A token officially becomes a VRC-20 when it is registered as the tokenAddress within a DLP's entry in the DLPRegistry contract. This creates a permanent, onchain link between the token and the dataset.

You can verify this link for any DLP on Vanascan by looking up the dlps(dlpId), dlpsByAddress(dlpAddress), or dlpsByName(dlpName) function on the DLPRegistry contract (0x4D5...). The tokenAddress field will show the official VRC-20 for that DLP.

How to Query DLP Identifiers and Token via Subgraph

📘

Vana Subgraph

We are preparing to open-source our subgraph. The repository link and access to deployed Subgraphs on "The Graph" will be available here soon. It is the canonical source of truth for all ecosystem analytics.

In the meantime, explore our hosted mainnet subgraph (not supported for use in production systems):

https://api.goldsky.com/api/public/project_cm168cz887zva010j39il7a6p/subgraphs/vana/main/gn

Tip: Look for the "Documentation Explorer" icon in the top left

The following example query outputs relevant onchain DLP identifiers (id, address, name), the current status, and token address (if set). These identifiers are commonly used as input parameters with various onchain smart contract methods.

# Find the DLP identifiers and token address required for onchain smart contract function calls
query GetAllDLPIdentifiers {
  dlps {
    id
    address
    name
    status # 1 = Registered, 2 = Eligible for rewards, 3 = Deregistered
    token
  }
}

Measuring the Data Backing a VRC-20 Token

While the onchain link is simple, understanding the quality and activity of the data backing a token requires more context. The recommended method for querying data metrics is to use a subgraph instance that indexes the data lifecycle.

How to Query Key Metrics

1. How many unique contributors does a token have?
You can find the number of unique data contributors backing a token by querying for its parent DLP in the Vana Subgraph.

# Find the total unique contributors for the DLP linked to a token
query GetUniqueContributors {
  # Query for the DLP using its ID (e.g., "9" for MindDAO)
  dlp(id: "9") {
    name
    totals {
      uniqueFileContributors
    }
  }
}

2. How much is a dataset being used?
You can measure data usage by summing the data access fees paid to a DLP's refiners in the Vana Subgraph.

# Get all data access payments for a specific DLP's refiners
query GetDataAccessFees {
  # Query for payments where the refiner belongs to DLP "9"
  paymentReceiveds(where: {refiner_: {dlp: "9"}}) {
    amount # in VANA, with 18 decimals
    receivedAt # Unix timestamp
  }
}

3. Historical Performance Ratings (by Epoch)

The Vana Subgraph also tracks historical performance ratings by epoch for deeper analyses.

# Get all measured performances by Epoch
query GetHistoricalPerformances {
  # For DLP id "10"
  dlp(id:"10"){
    # Query all performance metrics (total score, trading volume, ...) with Epoch id 
    performances{
      totalScore
      epoch {
        id
      }
      tradingVolume
      uniqueContributors
      dataAccessFees
    }
  }
}

4. How Contributed Data is Verified

Each DLP specifies its own proof-of-contribution (PoC) process on-chain to ensure data integrity. You can verify the rules governing any dataset. There are two primary ways to do this.

A. Finding a DLP's Primary Proof-of-Contribution Script

Most DLPs created with the standard DLP template store their primary proof-of-contribution script URL directly in their main contract. This is the script used for most new contributions.

  • Example: For the UNWRAPPED DataDAO, you can navigate to their dlpAddress contract on Vanascan (0xFb3...) and call the proofInstruction read method to get the URL of their current proof-of-contribution script.

B. Verifying the Proof-of-Contribution for a Specific Contribution

The proof-of-contribution script used for each data contribution is recorded immutably. The most direct way to find the script for a specific piece of data is to query the DataRegistry contract. To do this through Vanascan:

  1. Navigate to the DataRegistry contract on Vanascan (0x8C...).
  2. Find and expand the fileProofs read method.
  3. Enter the fileId of the contribution you want to inspect. For the index, enter 0 to get the first proof for that file.
  4. Click "Query." The result will be a Proof struct containing several fields. The instruction field holds the URL of the Proof-of-Contribution script that was used to validate that specific file.

Data Access and VRC-20 Tokens

For data access, VRC-20 tokens may be used to pay for queries. Currently on mainnet, data access fees are paid in $VANA, and 80% of that fee goes to the DLP's treasury. Future versions will incorporate the VRC-20 token directly into this payment flow.

Integrating VRC-20 Tokens into DeFi

For any standard DeFi application (DEX, bridge, etc.), you can integrate a VRC-20 token just like any other ERC-20 token.

For more advanced DataFi applications (e.g., a lending protocol that accepts data as collateral), you can use the subgraph queries above to assess the fundamental value of the token. For example, your smart contract could use an oracle to check that a VRC-20 token is backed by a DLP with a minimum of 10,000 contributors and has processed at least one data access payment in the last month before accepting it as collateral.

Onchain Token Examples

Existing onchain VRC-20 examples include (but are not limited to):