TheGraph stellt ein Indizierungsprotokoll für die Abfrage von Daten im Ethereum Netzwerk dar. Jeder Entwickler soll mit Hilfe von TheGraph in der Lage sein, offene APIs zu erstellen, diese zu veröffentlichen und dadurch Daten für andere Personen leicht sowie kostengünstig zur Verfügung zu stellen, die mit den jeweiligen Informationen arbeiten möchten. Für die unterschiedlichen Nutzergruppen von TheGraph ist es sinnvoll, einen Überblick über die Vorgänge und Daten im Netzwerk zu erhalten. Mithilfe dieses Dashboards sollen Indexer, Curators, Subgraph-Entwickler, sowie alle anderen interessierten Nutzer einen visuellen Einblick in das TheGraph Ökosystem erhalten und diverse Metriken ablesen können.

Anyblock Prototyp-Dashboard aus TheGraph Curator Testnet Phase 3

Das hier gezeigte Dashboard ist Work-In-Progress, welches im Zuge der Curator Testnet Phase 3 entstanden ist. Das Dashboard wurde mithilfe von Python, GraphQL, Plotly und Streamlit erstellt und kann ohne große Webentwicklungs-Kenntnisse komplett in Python erweitert werden. Der Quellcode ist auf dem Anyblock GitHub abrufbar.
Der aktuelle Subgraph mit den Daten vom TheGraph Netzwerk ist unter folgender Adresse erreichbar:
https://gateway-testnet.thegraph.com/network

Visualisierung des Datenschemas mit der GraphQL API

Eine komfortable Möglichkeit das Datenschema zu betrachten und einfache Queries auszuführen ist es, auf grapihql-online.com den Link der GraphQL API einzugeben.
GraphQL Data Explorer und Query Tester.

Abbildung: GraphQL Data Explorer und Query Tester. Zum Vergrößern anklicken.

Das Schema der GraphQL API von TheGraph zeigt, dass es sich um einen detaillierten Subgraph mit vielen Entitäten und Attributen handelt. Es sind Informationen zum gesamten Netzwerk vorhanden, dazu zählen auch die Allocations, Curators, Delegators, Epochen, GraphAccounts, Indexers sowie Subgraphs.
Für viele Indexer und Curatoren im TheGraph Ökosystem ist es von Interesse, eine Liste von Subgraphs, Curatoren und Indexern zu besitzen, die elaborierte Informationen über die Aktivität dieser Entitäten enthält. So sind interessante Informationen zum Beispiel:

  • Generelle TheGraph Informationen (Anzahl Curatoren, Epoche, The Graph Token Wert (GRT), Anzahl Indexer, Anzahl Subgraphen, Anzahl Indexing Rewards, etc.)
  • Wie oft und von wem wurde auf einen Subgraphen signalisiert?
  • Wieviel Subgraphen gibt es? Was ist ihr Zweck?
  • Informationen über die Allokationen von Indexern (Wie viel auf welchem Subgraph, Indexing Rewards, etc.)
  • Liste aller Subgraphen, Curator Fee Rewards by SignalledTokens, Indexing Reward by StakedTokens, etc.
  • Welche Subgraphen erhielten am meisten Signale?
  • Liste aller Curatoren mit Anzahl an vergebenen Signalen
  • und viele weitere Metriken…

Abfrage der Subgraph-Informationen über GraphQL API Queries

Im TheGraph Metrics Dashboard sind bereits einiger dieser Metriken visualisiert und aufgeführt. Die Informationen können mit einer einfachen Syntax aus der GraphQL API abgefragt werden. Um eine Liste aller Subgraphen mit ihrer ID, dem Namen, Erstellungszeitpunkt sowie einer Beschreibung und vielen weiteren Informationen zu erhalten, könnte man diese Query anwenden:
{
 subgraphs {
   id
   displayName
   createdAt
   description
   image
   codeRepository
   website
   withdrawnTokens
   withdrawableTokens
   reserveRatio   
   totalQueryFeesCollected
   totalIndexingRewards
   nameSignalAmount
   unsignalledTokens
   signalledTokens
 }
}

Von den API Queries zum Streamlit Dashboard 

Python kann mithilfe des Pakets “requests” auf die GraphQL API zugreifen. Im Folgenden ist eine Funktion aufgeführt, die den Link zur API sowie die Query als Parameter aufnimmt und die Ergebnisse als JSON zurückgibt (der gesamte Programmiercode kann im Anyblock GitHub Repository aufgerufen werden):
def getGraphQuery(subgraph_url, query, variables=None):

   # use requests to get query results from POST Request and dump it into    dat

   request_json = {'query': query}
   if variables:
       request_json['variables'] = variables
   resp = requests.post(subgraph_url, json=request_json)
   data = json.loads(resp.text)
   data = data['data']
  
   return data

Mit den folgenden zwei Code-Blöcken kann der JSON-Output in ein pandas DataFrame eingelesen und die Nested Dictionaries können mit dem DataFrame zusammengeführt werden:

# Useable for all DF -> Json to DF, Used to Input the Output of getGrapQuery into a DF
def graphQueryToDf(json_data): 
   df = pd.DataFrame(json_data.get(next(iter(json_data)), []))
   return df
  
# Concat Columns which have dictionaries with maindf
def concatDictColumns(df):
   for sub_dict_col in [col for col in df.columns if isinstance(df[col][0],dict)]:
       df = pd.concat([df.drop([sub_dict_col], axis=1), df[sub_dict_col].apply(pd.Series)], axis=1)
   return df

Daraufhin können die jeweiligen Daten verarbeitet, aggregiert und mit Plotly visualisiert werden. Mithilfe von Streamlit ist es möglich, in wenigen Zeilen Code ein Dashboard zu kreieren. Die Methode st.write(DataFrame) ermöglicht es beispielsweise sortierbare Tabellen im Dashboard auszugeben. st.selectbox() kann dazu genutzt werden, interaktive Metriken und Visualisierungen zu generieren. Das Besondere daran? Die ganze Magie passiert im Hintergrund und der Entwickler muss sich keine Gedanken darüber machen.

Indexing Rewards, Query Fees und weitere Metriken des TheGraph Dashboards

Das vorliegende Dashboard gliedert sich in sechs Unterseiten. Die erste Seite enthält einige generelle Informationen über das Netzwerk.
Dashboard Übersicht mit generellen TheGraph Informationen.

Abbildung: Dashboard Übersicht mit generellen TheGraph Informationen. Zum Vergrößern anklicken.

Auf ihr sind allgemeine Größen des TheGraph-Ökosystems aufgeführt wie die Anzahl an Subgraphen, Curatoren, ein Hinweis darauf, ob das System aktiv oder pausiert ist sowie Metriken über die Gesamtzahl an verdienten IndexingRewards und QueryFees. 
Die zweite Seite “Allocation / Indexer Stats” zeigt Grafiken über die Allocated Tokens pro Subgraph und Indexer an.

Übersicht der Indexer-Allokationen von Subgraphen.
Abbildung: Übersicht der Indexer-Allokationen von Subgraphen. Zum Vergrößern anklicken.
Auf dieser Unterseite können Filter angewandt und so Informationen über einzelne Indexer oder Subgraphen visualisiert werden.
Übersicht der Indexer-Allokationen von Subgraphen.

Abbildung: Übersicht der Indexer-Allokationen von Subgraphen. Zum Vergrößern anklicken.

Weitere Informationen bietet die Unterseite “Subgraph List”. Hier sind die unterschiedlichen Subgraphen mit ihrer Beschreibung aufgelistet sowie Hinweisen zum Signalling- und Staking-Verhalten. Ferner werden erzielte Einnahmen mit diesen Daten korreliert.
Generelle Subgraph Bereitstellungs-Statistiken.
Abbildung: Generelle Subgraph Bereitstellungs-Statistiken. Zum Vergrößern anklicken.
Liste von Subgraphen mit Beschreibungen und Links.

Abbildung: Liste von Subgraphen mit Beschreibungen und Links. Zum Vergrößern anklicken.

Weiterentwicklung des Dashboards durch Mitwirken der TheGraph Community

Die weiteren Unterseiten werden in diesem Artikel zunächst nicht beschrieben, wer mehr erfahren möchte, kann dies in unserem bald erscheinenden Folgeartikel tun. Selbstverständlich ist es dennoch möglich, das Dashboard auszuführen. Hierzu ist es lediglich nötig das Anyblock GitHub-Repository zu klonen; Streamlit, pandas und Plotly in der Python-Umgebung zu installieren und anschließend das Dashboard mit folgendem Befehl auszuführen (es ist wichtig sich im Verzeichnis des Dashboards zu befinden):

streamlit run main.py

Nach dem Ausführen dieses Befehls öffnet sich ein neues Browserfenster mit dem Dashboard. Da das Dashboard noch WIP ist, freuen wir uns über Vorschläge für zusätzlich gewünschte Metriken und über Mitwirkung bei der Weiterentwicklung des Dashboards.

Interested or questions?

 

Freddy Zwanzger
(Co-Founder & Chief Data Officer)
freddy@anyblockanalytics.com
+49 6131 3272372

    

Looking to create an Anyblock account? Takes seconds and it's free!

>> You can also browse related posts below or go back to all posts.

Pin It on Pinterest