NFTs

IPFS: So werden NFTs gespeichert

IPFS: So werden NFTs gespeichert

In diesem Artikel beschäftigen wir uns mit der weitverbreitetsten Methode zur Speicherung von NFTs: nämlich mit dem Interplanetary File System (kurz IPFS). Als Grundlage für dieses Thema setzen wir ein grundlegendes Verständnis von NFTs (Non Fungible Token) voraus, welches mithilfe dieses Artikels erlangt werden könnte. Des Weiteren ist es wichtig zu erwähnen, dass IPFS nicht für den Anwendungsfall von NFTs entwickelt wurde – IPFS gab es schon einige Zeit vor den NFTs und verfolgt als Ziel die Verwirklichung eines dezentralen Internets.

Wenn wir der Frage nachgehen, wo NFTs gespeichert werden, meinen wir natürlich nicht den Token an sich, sondern das Bild, Video oder was auch immer der NFT repräsentieren soll. Der NFT selbst beinhaltet dieses digitale Objekt nämlich gar nicht direkt, da dies zu viel zu hohen Datenmengen auf der Blockchain des NFTs führen würde. Der NFT und das Objekt, welches er repräsentiert, sind also aus technischer Sicht zwei verschiedene Sachen und in aller Regel wird lediglich der NFT auf der Blockchain selbst gespeichert. 

Wenn du den zuvor erwähnten Artikel gelesen hast, dann weißt du bereits, dass ein NFT sogenannte Metadaten hat. Die Metadaten des NFTs sind die Verbindung zu dem eigentlich Objekt, welches der NFT repräsentiert (zum Beispiel einem Foto). Zunächst können wir uns die Metadaten also wie einen Link zu einem Bild auf einem Server vorstellen. 

Nun stellen wir uns einmal vor, der NFT würde mit mittels eines Links auf ein Bild einer Instagram-Seite verweisen; jetzt ist der NFT selbst zwar durch die Blockchain dezentral und unveränderbar gespeichert, jedoch könnte das Bild jeder Zeit von dem Besitzer der Instagram-Seite gelöscht werden, womit der NFT wertlos würde, weil man nicht mehr nachvollziehen könnte, welches Objekt er repräsentiert. Auch wenn das Bild nicht auf einer Instagram-Seite gespeichert wäre, sondern auf einer super sicheren Cloud, könnte nicht gewährleistet werden, dass die Cloud für immer existieren wird und niemand das Bild verändern kann. Solange das Bild (oder jedes andere denkbare digitale Objekt) also von einer zentralen Instanz (z. B. einem Cloud Anbieter) aufbewahrt wird, bringt auch ein dezentraler NFT nichts, wenn letztendlich sowieso alles von der zentralen Autorität abhängt, die dieses Objekt speichert.

Für das Speichern des zu repräsentierenden Objekts eines NFTs lassen sich also folgende Kriterien festhalten:

  • Daten dürfen nicht verändert werden
  • Es darf keine zentrale Autorität geben, die Daten löschen kann

IPFS glaubt diesen Kriterien gerecht zu werden.

Location Addressing vs. Content Addressing

Das Internet bzw. das Web von heute nutzt ein System namens Location Addressing, wohingegen IPFS sogenanntes Content Addressing verwendet. 

Hier zwei Analogien, um die jeweiligen Verfahren zu veranschaulichen:

  1. Bob empfiehlt Alice ein Buch. Damit Alice sich das Buch kaufen kann, gibt Bob ihr die folgende Anleitung: Gehe in den Buchladen “Bücherwelt1234” in der Löwenberg Straße 11. Dort findest du das Buch in der zweiten Etage, in dem dritten Regal, 80 cm über dem Boden und 30 cm von dem zweiten Bücherregal entfernt. 
  2. Einige Zeit später empfiehlt Alice Bob ein Buch und gibt ihm die folgenden Anweisungen, wie das Buch zu erhalten sei: Gehe in einen Buchladen deiner Wahl und frag nach dem Buch mit der ISBN “123456789”.

Hast du eine Idee, welche der beiden Geschichten für das Content Addressing und für das Location Addressing steht?

Wenn wir im Internet auf einen Link klicken, passiert eigentlich genau dasselbe wie in der ersten Geschichte von Bob und Alice. Zunächst führt uns ein Link auf einen Server (die Adresse des Buchladens), mit dem wir uns verbinden sollen; zum Beispiel “www.beispielSeite.com”. Wenn wir uns nun durch die Website klicken, ändert sich der Link zum Beispiel zu “www.beispielSeite.com/news”; jetzt sucht unser Browser auf dem Server der Website nach der /news Seite und – falls vorhanden – öffnet diese (in dem ersten Beispiel entspricht dies der Ortsbeschreibung des Buches innerhalb des Buchladens). Das erste Beispiel beschreibt also das Location Addressing, da wir die Daten, die wir abrufen wollen, über die Ortsbeschreibung (den Link) erreichen. Beim Location Addressing suchen wir also gar nicht nach konkreten Dateien, sondern nach Speicherpunkten, an denen sich die gewünschten Daten (hoffentlich) befinden.

Anders ist dies beim Content Addressing – also bei dem zweiten Beispiel von Alice und Bob. Dabei spielt der Speicherort (der Buchladen) keine Rolle, sondern nur die Daten (das Buch), die wir abrufen möchten.

Was für Vorteile hat nun Content Addressing gegenüber dem Location Addressing?

Vielleicht hast du dir bei dem ersten Beispiel von Bob und Alice schon gedacht, dass dies eine eher unsichere Methode ist, um zu gewährleisten, dass Alice auch das richtige Buch kauft. Denn Bob kann nicht wissen, ob an der von ihm beschriebenen Stelle in dem Buchladen nicht ein anderes Buch steht als das, welches Alice eigentlich kaufen sollte. Beziehen wir dieses Problem nun auf die Welt des Webs, so könnte derselbe Link plötzlich zu anderen Daten führen. Da der Link nichts mit den eigentlichen Daten zutun hat, sondern nur auf einen konstanten Speicherort verweist, könnten die Daten an diesem Speicherort verändert werden, ohne dass dies durch den Link erkennbar wird. Im schlimmsten Fall könnten durch solche veränderten Daten versucht werden, schädliche Software auf den Abrufer zu übertragen. Somit geht also mit jedem Klicken auf einen Link ein gewisses Vertrauen einher, dass der Link auch wirklich dorthin führt, wohin er führen soll. 

Da hingegen beim Content Addressing nach ganz konkreten Daten gesucht wird, kann die Suche entweder genau zu diesen Daten führen oder zu gar keinen. Wie genau diese Suche funktioniert, schauen wir uns im weiteren Verlauf noch an.

IPFS

Eingangs haben wir zwei Kriterien definiert, die für das Speichern von Dateien für NFTs relevant sind. Das erste Kriterium war, dass Daten nicht verändert werden können. Da IPFS Content Addressing nutzt, ist dieses Kriterium somit schon mal weitgehend erfüllt. Unser zweites Kriterium lautete, dass es keine zentrale Autorität geben darf, die die Daten speichert und diese somit löschen könnte. Was wir also brauchen, ist ein dezentraler Speicher, der von keiner einzelnen Institution gesteuert werden kann.

Um auch diesem Kriterium gerecht zu werden, besteht IPFS nicht aus einem zentralen Server, sondern aus vielen verschiedenen Speicherorten, die zusammen die gesamten Daten des Netzwerks speichern. Diese dezentralen Speicherorte heißen Nodes. Jeder kann mit seinem Computer eine IPFS Node erstellen und somit Daten auf dem IPFS-Netzwerk speichern und abrufen. Wenn du dies einmal selbst ausprobieren möchtest, empfehlen wir dir den IPFS Desktop-Client, da dieser mittels einer grafischen Oberfläche sehr einfach und intuitiv zu bedienen ist (hier kannst du den Desktop Client herunterladen und mehr darüber erfahren).

Die gesamten Daten des Netzwerks werden nicht von jeder einzelnen Node gespeichert, da dies zu viel zu großen Anforderungen für die einzelnen Nodes führen würde, da sonst jede Node Unmengen von Daten speichern müsste. Stattdessen speichert eine Node nur die Daten, die sie selbst “hochgeladen” hat und die, die sie von anderen Nodes abgerufen hat. Wichtig zu bemerken ist auch, dass sich jede Node wann immer sie will, abschalten kann und ihre gespeicherten Daten löschen kann. Das heißt also, wenn eine bestimmte Datei nur auf einer einzigen Node gespeichert wird, ist diese Datei nur solange verfügbar, bis sich die Node abschaltet oder sie die Datei löscht. Idealerweise würde die Datei jedoch immer wieder von anderen Nodes abgerufen werden, welche die Datei somit auch bei sich speichern würden (zumindest solange bis sie sich wiederum selbst abschalten oder die Datei löschen). Möchte man sichergehen, dass eine Datei für “immer” gespeichert wird, gibt es sogenannte “Pinning Services”; gegen eine Gebühr stellen diese sicher, dass ausgewählte Dateien immer auf ausreichend vielen Nodes gespeichert werden (kleinere Datenmengen sind oft kostenlos). 

Die Blockchain und Kryptowährung Filecoin ist zum Beispiel eine Art dezentraler Pinning Service. Über die Filecoin-Blockchain können gegen eine festgelegte Gebühr in der Filecoin Kryptowährung Dateien auf dem IPFS-Netzwerk gespeichert und “gepinned” werden. Im Vergleich zu herkömmlichen Cloud Anbietern liegt der Preis pro Gigabyte gespeicherter Daten teilweise bei nur 0,01%. 

Wenn du also ein eigenes NFT Projekt entwickeln möchtest, solltest du unbedingt überlegen, ob du auf einen Pinning Service zurückgreifen möchtest, um sicherstellen zu können, dass dein digitales Kunstwerk auch wirklich für immer erhalten bleibt.

Wie findet man Dateien in IPFS und mittels Content Addressing?

Eine Frage, die bislang unbeantwortet blieb, ist, wie man in IPFS oder in Systemen die Content Addressing nutzen nun Dateien finden kann. Anders als beim Location Addressing, wo der genaue Ort festgelegt wird, an dem eine Datei zu finden ist, wird beim Content Addressing nach einer bestimmten Datei gesucht, ohne dass man deren Speicherort kennt. Dies mag paradox klingen, denn wenn man eine Datei abrufen möchte, tut man dies, weil man sie noch nicht besitzt; woher soll man dann also wissen, welche Datei man abrufen soll, wenn man diese offensichtlicherweise zuvor noch nicht hatte? Die Antwort darauf ist, dass man auch beim Content Addressing eine Art Link braucht, der jedoch nicht auf einen Speicherort verweist (da die Datei an dem Speicherort geändert werden könnte, ohne dass sich der Link ändert), sondern konkret mit einer Datei verknüpft ist. Diese Art von Links werden CIDs genannt. CID steht für Content Identifier (übersetzt: Content Identifizierer) und wird lediglich auf Basis einer Datei (dem Content) erzeugt und kann auch nur eine einzelne Datei repräsentieren. Dies funktioniert mittels Hashes (in unserem Artikel zum Thema Hashes kannst du mehr darüber erfahren). Etwas vereinfacht gesagt ist ein Hash eine Zeichenkette fixer Länge, die auf Basis eines beliebig großen Datensatzes mittels einer Hashfunktion generiert wird. Verändert sich auch nur ein einziger Bit des Datensatzes, verändert sich der gesamte Hash. Außerdem erzeugen zwei verschiedene Datensätze nie denselben Hash (auch “Kollisionsresistenz” genannt).

Einen Hash können wir uns also auch wie den Fingerabdruck einer Datei vorstellen. Wenn wir nun den Hash einer Datei haben, können wir diesen mit den Hashes sämtlicher Dateien des IPFS-Netwerks abgleichen und können so unsere gesuchte Datei finden.

Content Identifiers (CIDs)

Ein CID besteht jedoch nicht nur aus dem Hash einer Datei, sondern gibt auch zusätzliche Informationen über die Version des CIDs und des Hashes selbst. Zusätzliche Informationen über den Hash selbst sind äußerst wichtig, denn es gibt verschiedenen Hashfunktionen, die verschiedene Hashes derselben Datei erzeugen. Deswegen ist es wichtig zu wissen, mit welcher Hashfunktion der Hash eines CIDs erzeugt wurde, um verifizieren zu können, dass ein bestimmter Hash auch mit einer bestimmten Datei generiert wurde (die Kombination von Hash, Hash Funktion und der Größe des Hashs wird auch “Multihash” genannt). Wie zuvor erwähnt, definiert der CID auch seine Version. IPFS hat zwei Versionen von CIDs: einmal CIDv0 und CIDv1. Wenn man sich einen IPFS CID anschaut, kann die beiden leicht auseinanderhalten: CIDs der ersten Version (CIDv0) beginnen immer mit “Qm” und die zweite Version (CIDv1) meistens mit “b”. Für die Praxis braucht man CIDs jedoch nicht bis ins letzte Detail zu verstehen, da der Umgang damit größtenteils der Computer übernimmt. Sollte man doch einen CID genauer analysieren müssen, kann man dies auch mittels eines CID Inspectors tun, der sämtliche Informationen über den CID auswertet und veranschaulicht.

Einen NFT über IPFS finden

Repräsentiert ein NFT eine Datei auf dem IPFS-Netzwerk, so muss der NFT den CID (also den “Link”) von der Datei speichern. Im Folgenden schauen wir uns jetzt einmal an, wie wir eine echte IPFS-Datei von einem NFT finden können. Damit du das auch selbst ausprobieren kannst, werden wir uns einen NFT der “Bored Ape Yacht Club” Kollektion anschauen. Dazu nutzen wir als Ausgangspunkt den größten NFT-Handelsplatz, Open Sea. Auf Open Sea kannst du sowohl NFTs kaufen als auch verkaufen – oder dich einfach umschauen und dich mit der “NFT-Welt” vertraut machen, so wie wir es jetzt tun. 

Wie bereits erwähnt, schauen wir uns jetzt an, wie wir die Datei eines NFTs aus der “Bored Ape Yacht Club” Kollektion finden können; dazu nehmen wir einfach den ersten NFT aus der Kollektion, der aktuell zum Verkauf steht (hier findest du die genaue Seite, auf die wir uns gerade berufen). Zum aktuellen Zeitpunkt ist das dieser NFT:

Als Nächstes schauen wir uns den Reiter “Details” genauer an:

Wenn du unseren eingangs erwähnten Artikel Thema NFTs bereits gelesen hast, dann weißt du, dass wir die Metadaten des NFTs benötigen, um die eigentliche Datei des NFTs zu finden. Hier macht es uns Open Sea relativ einfach, indem uns ein Link zu den Metadaten bereitgestellt wird (siehe Screenshot). Wir schauen uns zunächst den Weg über diesen Link an und später noch einen universellen Weg, falls die Metadaten nicht angegeben werden.

Öffnet man den Link zu den Metadaten, öffnet sich folgendes Fenster:

Unter dem Punkt “image” sehen wir den CID des Bildes des NFTs. Bevor wir uns jetzt die Datei anschauen, betrachten wir zunächst den Link dieser Metadaten etwas genauer:

“ipfs.io/ipfs/QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/9419”

Tatsächlich öffnen wir mit diesem Link bereits eine Datei auf dem IPFS-Netzwerk; und zwar über ein sogenanntes “Public Gateway”. Möchte man eine Datei öffnen, die über IPFS gespeichert wird, kann man dies entweder über eine eigene IPFS-Node tun oder über ein Public Gateway. Ein Public Gateway kann man sich wie eine öffentliche IPFS-Node vorstellen, über die man ganz einfach über den Browser IFPS-Dateien abrufen kann. In diesem Fall haben wir die Metadaten über das Public Gateway “ipfs.io” (siehe Link) geöffnet. Der CID der Datei (also der Metadaten) ist:

QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq”

Hier findest du eine Liste aller Public Gateways – einige davon Laden den angefragten Content schneller als andere.

Zurück zu den Metadaten “unseres” NFTs: Wie bereits erwähnt, finden wir unter dem Punkt “image” den CID des Bildes, das wir suchen. 

“”image”:”ipfs://QmUKwWGnuPjALWcDjqJawVdy4mcqgHXrhzVLZevrxLvLew“”

Das “ipfs.//” sagt uns, dass es sich hierbei um einen IPFS-CID handelt, woraufhin der eigentliche CID folgt. Diesen CID können wir nun in der Suchleiste mit dem der Metadaten austauschen, um das Bild des NFTs zu öffnen (hier auch der fertige Link). Nach kurzer Wartezeit sehen wir das Bild des NFTs:

Wie findet man die Metadaten eines NFTs?

Schauen wir uns noch einmal das “Details”-Feld auf Open Sea an:

Wie wir zuvor gesehen haben, können wir ganz einfach den Link zu den Metadaten öffnen und kommen so an das Bild des NFTs; was ist jedoch, wenn einem die Metadaten nicht einfach so präsentiert werden?

NFTs werden ja mit Smart Contracts erstellt, also mit programmierten Programmen auf der Blockchain; den Smart Contract, mit dem der NFT erstellt wurde, den wir uns gerade anschauen, sehen wir ganz oben in den Details. Konkret sehen wir da jedoch noch nicht den Smart Contract selbst, sondern nur seine Adresse (“Contract Address”). Da dieser NFT auf der Ethereum Blockchain erstellt wurde, können wir uns sämtliche Smart Contracts über einen sogenannten “Block Explorer” anschauen. Der größte und performanteste Block Explorer für die Ethereum Blockchain ist “Etherscan”, dort finden wir auch den angegebenen Smart Contract unseres NFTs (Link). Hier finden wir eine Vielzahl von Informationen über den Smart Contract und über die Transaktionen der Bored Ape NFTs. Wir können aber auch selber Funktionen des Smart Contracts ausführen; dazu öffnen wir den Code des Smart Contracts:

Um nun die Funktion des Smart Contracts auszuführen, mit der wir die Metadaten des NFTs erhalten, müssen wir das Fenster “Read Contract” öffnen:

Hier sehen wir alle Funktionen des Smart Contracts, die wir einfach so ausführen können, um beispielsweise den Besitzer eines NFTs zu erfahren etc. Ebenfalls können wir hier die Metadaten eines bestimmten NFTs abrufen, der mit diesem Smart Contract erstellt wurde.

Dazu benutzen wir die 20. Funktion namens “Token URI” (die Token URI ist der Verweis eines NFTs auf seine Metadaten):

Dort geben wir in das Eingabefeld die Token ID des NFTs ein, dessen Token URI wir bekommen möchten (die Token URI findest du in den Details auf Open Sea, siehe Screenshots zuvor). Mit einem Klick auf den “Query”-Button erhalten wir nun den folgenden Output:

ipfs://QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/9419

Kommt dir das bekannt vor? Richtig, das ist derselbe Link, mit dem wir zuvor auch die Metadaten über Open Sea geöffnet haben. Jetzt können wir auf dieselbe Weise wie zuvor verfahren, um das Bild des NFTs zu öffnen. 

Mit diesem Weg kannst du jetzt immer verifizieren, dass ein NFT auch wirklich das Objekt repräsentiert, welches er verspricht. Wichtig ist nur, dass du den richtigen Smart Contract des NFTs nutzt; den Smart Contract den wir in diesem Beispiel genutzt haben, funktioniert nur für die NFTs, die mit diesem erstellt wurden (also die NFTs der Bored Ape Yacht Club Kollektion).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert