Language
Docs

Documentation

Contributors: Dylan Shade
Last Updated:

ANS-110: Asset Discoverabilityopen in new window

Status: Draft

Authors: Tom Wilson ([email protected]), Sam Williams ([email protected]), Abhav Kedia ([email protected])

Abstract

This document specifies a data protocol that allows assets to be discovered and uniformly displayed on the permaweb.

Motivation

The permaweb is a rich collection of various kinds of data -- media, content, functions, and applications. A standard protocol for identifying assets enables discoverability for dashboards, exchanges, and higher-level permaweb services. By providing an extensible data protocol for transactions, creators and publishers can harness the power of permaweb-wide content discoverability -- making it easily appear in various applications and contexts across the permaweb.

This protocol would enable, for example, a marketplace or exchange where users trade media assets to render them in a user-friendly way. By extending asset transactions using these identifiers, creators provide a clear and composable set of identifiers that marketplaces or exchanges can use to give a detailed description of the asset. Another example would be a search engine service that may want to index specific types of assets.

Specfication

Transaction Format

To utilize Asset Discoverability, a creator or publisher can dispatch or post an Arweave transaction specifying the following tags.

Tag NameOptional?Tag Value
TitleFalseA maximum of 150 characters used to identify the content, this title can provide a quick eye catching description of the asset
Type*FalseType of asset. One or more of: meme, image, video, podcast, blog-post, social-post, music, token, web-page, profile
Topic*TrueZero to many topics that can be used to locate assets of a given type by a specific topic. For example: an asset of type meme might have the following two topics, Funny, Sports.
DescriptionTrueA longer description of 300 characters that can provide a set of details further describing the asset

Usage

The primary purpose of these tags is to allow content devs to leverage GraphQL to find asset transactions of a specific type or topic for use in their applications.

query {
  transactions(
      first: 100, 
        tags: [
          { name: "Type", values: ["meme", "blog-post"] }, 
          { name: "Topic:Funny", values: ["Funny"] },
          { name: "Topic:Jokes", values: ["Jokes"] }
        ]) {
      edges {
          node {
              id
                owner {
                  address
                }
                tags {
                  name
                    value
                }
        }}
    }
}

This GraphQL query filters based on Type and Topic tags to filter Assets for an aggregate list display.