May 29, 2022

Tutorial für Blockzeitstempel für Subquery Network

Dieser Artikel enthält eine Anleitung für ein Beispielprojekt von SubQuery, Block timestamp, das auf diesem Repository basiert.

Block timestamp indiziert im Wesentlichen den Zeitstempel jedes abgeschlossenen Blocks und ist ein Beispiel für einen CallHandler. Durch Parsen des externen Elements timestamp.set und Extrahieren der ersten Argumente können wir den Zeitstempel ermitteln.

Die Reihenfolge der Schritte ist wie folgt:

1. Klonen Sie das gesamte subql-example-Repository:

git clone https://github.com/subquery/subql-examples.git

2. Legen Sie die Abhängigkeiten fest:

cd block-timestamp yarn

3. Erzeugen von Typen:

yarn codegen

4. Erstellen Sie ein Projekt:

yarn build

5. Lokal ausführen:

yarn start:docker

6. Beispiel für eine Aufforderung zur Inbetriebnahme:

{ query{ blockTs{ nodes{ blockHeight, timestamp } } } }

Zum Verständnis dieses Projekts

Wie oben erwähnt, hat dieses Projekt eine Funktion namens handleTimestampSet, die in der Mapping-Datei BlockTs.ts definiert ist. Sie verwendet einen CallHandler, der in der Manifestdatei (project.yaml) als "kind: substrate/CallHandler" definiert ist.

Die Datei schema.graphql definiert die Variablen blockHeight und timestamp, die beide obligatorisch und vom Typ BigInt bzw. Date sind.

Wenn wir den Code in BlockTs.ts genauer untersuchen, sehen wir, dass die Funktion handleTimestampSet ein Argument vom Typ SubstrateExtrinsic entgegennimmt. Sie erzeugt dann eine neue Instanz von BlockTs, indem sie das Argument extrinsic.blockblock.header.hash als String übergibt und diesen der Variablen record zuweist.

Als nächstes wird die Blocknummer in ein BigInt konvertiert und record.blockHeight zugewiesen, das eine BlockTs-Entität ist, was bedeutet, dass auf die Felder darin mit einem Punkt zugegriffen wird.

Der Zeitstempel wird mit Hilfe der JS-Bibliothek moments aus dem ersten Argument des Extrinsic extrahiert. Anschließend wird er in ein Date-Objekt umgewandelt und dann als Zahl serialisiert, bevor er dem Feld timestamp zugewiesen wird.

Mehr über SubQuery Network:

​​​​Linktree | Website | Discord | Telegram | Twitter | Matrix | LinkedIn | YouTube