Skip to content
ETS · Universal Tagging System for Ethereum
viem logo
An experimental content tagging protocol for the decentralized internet.

ETS is a simple, decentralized protocol built for developers to tokenize hashtag strings as non-fungible tokens (NFTs), link them with online media and surface this data for use in networks, platforms and applications.

Developer Focused
Composable Typescript libraries and APIs to build applications with speed
Universal
Tags and Tagging Records are composable units shared across the ecosystem
Immutable
Provenance and attribution of the tag graph is backed by the blockchain
Incentivized
Novel crypto-economic design that rewards ecosystem actors

Barebones Examples

Create Tagging Record using sdk-core

/// 1. Import modules
import { createRelayerClient } from "@ethereum-tag-service/sdk-core";
import { privateKeyToAccount } from "viem/accounts";
import { arbitrumSepolia } from "viem/chains";
 
// 2. Initialize account
const account = privateKeyToAccount("0x..."); // Your private key here
 
// 3. Initialize RelayerClient
const client = createRelayerClient({
  chainId: arbitrumSepolia.id,
  relayerAddress: "0xa01c9cb373c5e29934b92e5afa6a78e3d590340b",
  account
});
 
// 4. Create a Tagging Record!
client?.createTaggingRecord(
  ["#rainbow", "#unicorn", "#og", "#uniswap"],
  "https://uniswap.org",
  "Demo"
)
.then((result) => console.log("Tagging record created:", result))
.catch((error) => console.error("Error creating tagging record:", error));
 
Output:
Tagging record created: {
transactionHash: '0x0b36f4d57ff8f2ab6f82e6f1ffc7c9c02ecdc1c5ed8da68c09a79f31b9917e00',
status: 'success',
taggingRecordId: '80903853133999221435814377604232091751415136525898835875800777163543136099110'
}

Surface Tagging Record using ETS API

import { getSubgraphEndpoint } from "@ethereum-tag-service/subgraph-endpoints";
 
// Arbitrum Sepolia
const endpoint = getSubgraphEndpoint(421614);
 
const graphqlQuery = {
  query: `
    {
  taggingRecords(
    first: 1
    skip: 0
    orderBy: timestamp
    orderDirection: desc
    where: {id: "80903853133999221435814377604232091751415136525898835875800777163543136099110"}
  ) {
    recordType
    timestamp
    relayer {
      name
    }
    tagger {
      id
    }
    tags {
      display
      machineName
    }
    target {
      targetURI
      targetType
    }
  }
}
  `,
};
 
const response = await fetch(endpoint, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(graphqlQuery),
});
 
const { data } = await response.json();
console.info(JSON.stringify(data, null, 2));
 
Output:
{
"taggingRecords": [
{
"recordType": "Demo",
"timestamp": "1724717433",
"relayer": {
"name": "ETSRelayer"
},
"tagger": {
"id": "0x07bd3b64f9f51fe1d5c79f81dfc0460fff305b0e"
},
"tags": [
{
"display": "#unicorn",
"machineName": "unicorn"
},
{
"display": "#rainbow",
"machineName": "rainbow"
},
{
"display": "#og",
"machineName": "og"
},
{
"display": "#uniswap",
"machineName": "uniswap"
}
],
"target": {
"targetURI": "https://uniswap.org",
"targetType": "UNKNOWN"
}
}
]
}
Open in ETS GithubView in ETS Explorer

Features

ETS is a community-owned tagging infrastructure for the Ethereum Ecosystem and beyond. It provides a set of tools to create, manage, and query tagging records on an EVM blockchain.

Tagging infrastructure

  • Developer focused architecture with composable modules
  • Typescript SDKs for vanilla javascript and React that leverage Viem for interacting with ETS smart contracts
  • Decentralized subgraph API on The Graph
  • Tagging records stored on-chain ensuring data tag graph attribution and immutability

Community Ownership

  • Tag strings tokenized as ERC-721 NFTs
  • Per-tag fees for tagging records distrubuted to creators, owners and relayers
  • Relayer model for apps to create tagging records and benefit economically
  • Fully on-chain tag auction modeled after Nouns DAO to ensure fair and controlled tag distribution

Community & Support

Check out the following places for more ETS-related content:

Open Source

Help support future development and make ETS a sustainable open-source project: