Abbildung 1: Ein NFT enthält Metadaten. Wie können wir sie leicht lesen?
Abbildung 1: Ein NFT enthält Metadaten. Wie können wir sie leicht lesen?
Veröffentlicht die 2022-12-23
Veröffentlicht die 2022-12-23

Mit einem geschätzten Marktvolumen von über 11 Milliarden US-Dollar sind NFTs immer präsenter und werden immer häufiger genutzt. Viele Anwendungen entwickeln sich um sie herum. Dennoch gibt es verschiedene, mehr oder weniger schwierige Wege, mit ihnen zu interagieren. In diesem Artikel werden wir die verschiedenen Möglichkeiten zum Abrufen von Metadaten aus einem NFT beschreiben. Wir werden die "Web 2"-Methode näher erläutern, indem wir die verschiedenen Dienste vergleichen, die eine Programmierschnittstelle für NFTs auf der Ethereum-Blockchain anbieten. Anschliessend werden wir verschiedene Beispiele für die Implementierung dieser Dienste durch eine Android- und iOS-Anwendung vorschlagen.

Wie kann man ein NFT abrufen und lesen?

Das Akronym NFT steht für "Non-Fungible Token", ein Wort, das für die meisten Menschen sehr unklar ist. Die Definition von fungibel lautet wie folgt: 

"Bezeichnet Dinge, die durch Gebrauch verbraucht werden und die durch Dinge derselben Art, Qualität und Menge ersetzt werden können (z. B. Lebensmittel, Bargeld)." (Larousse).  

Nicht fungibel ist das Gegenteil dieser Definition. Ein NFT ist also ein einzigartiges, nicht veränderbares Token, das ein Objekt in der Blockchain repräsentiert; ein Zertifikat der Zugehörigkeit sozusagen. Es ist wichtig zu verstehen, dass sich die "nicht fungiblen" Eigenschaften auf das Token beziehen und nicht auf das Objekt, das es repräsentiert. Wir können ein Bild, das durch ein Token zertifiziert ist, leicht kopieren, aber das Token ist einzigartig in der Blockchain und existiert nur durch diese. Das NFT ist also Teil des Ökosystems einer Blockchain. Um mit dem Token zu interagieren, muss man mit der Blockchain interagieren.

Abbildung 2: Das NFT ist ein einzigartiges Token in der Blockchain.
Abbildung 2: Das NFT ist ein einzigartiges Token in der Blockchain.

Nachdem wir nun die Verbindung zwischen der Blockchain und dem NFT hergestellt haben, stellt sich die Frage, wie die Verbindung zwischen dem NFT und dem Objekt, das es repräsentiert, aussieht. Dies hängt vom "Standard" ab, den das Token verwendet. Es gibt verschiedene Standards, die die Metadaten definieren, die in das Token geschrieben werden. Der ERC-721-Standard enthält eine eindeutige Kennung, die verwendet werden kann, um beispielsweise ein Bild von einer App abzurufen. Der Standard ERC-1155 fügt einen URI (Uniform Resource Identifier) hinzu, mit dem Metadaten auf der Grundlage des eindeutigen Identifikators abgerufen werden können. Diese Metadaten können z.B. einen Titel oder den URI eines Bildes enthalten.

Wie können wir diese Metadaten leicht abrufen?

Da diese Metadaten über den URI und die eindeutige Kennung der NFT zugänglich sind, geht es nun darum, sie zu beschaffen. Wie oben erwähnt, werden sie in die Blockchain geschrieben. Man muss also mit der Blockchain interagieren, um die Informationen, die das NFT enthält, zu erhalten. Da die Blockchain, vereinfacht gesagt, ein grosses, dezentralisiertes Register ist, muss dieses teilweise oder vollständig auf ein Buch kopiert werden, das gehostet und mit dem Rest der Blockchain vernetzt wird. Dieses Buch, das wir im Jargon als Knoten bezeichnen, wird der Einstiegspunkt sein, um mit der Blockchain zu interagieren und die Metadaten zu lesen (siehe Abbildung 3). 

Abbildung 3: Beispiel für eine App mit ihrem Knoten, um mit der Blockchain zu interargieren.
Abbildung 3: Beispiel für eine App mit ihrem Knoten, um mit der Blockchain zu interargieren.

Kompliziert, sagen Sie? Ja, der ganze Prozess wird in einem späteren Artikel ausführlich beschrieben. Glücklicherweise gibt es eine einfachere Lösung! Verschiedene Dienste bieten die Verwaltung des Knotens an und stellen eine Programmierschnittstelle (API) zur Verfügung, um mit der Blockchain zu interagieren (siehe Abbildung 4).

Abbildung 4: Ein Dritter stellt eine API zur Verfügung, um über seinen Knoten mit der Blockchain zu interagieren.
Abbildung 4: Ein Dritter stellt eine API zur Verfügung, um über seinen Knoten mit der Blockchain zu interagieren.

Im Folgenden werden wir die verschiedenen Dienste vergleichen, die eine API für die Interaktion mit der Blockchain und insbesondere mit deren NFTs anbieten. Anschliessend werden wir Beispiele für die Implementierung einer NFT-API in eine Android- und eine iOS-Anwendung vorschlagen.

Top 10 APIs für die Ethereum-Blockchain.

Wir haben die aus unserer Sicht 10 besten Dienste ausgewählt, die eine API für die Interaktion mit NFTs auf der Ethereum-Blockchain anbieten. Die wichtigsten bewerteten Merkmale sind die Einfachheit des Zugangs zu NTFs über die verschiedenen Schnittstellen, die Begrenzung der Aufrufe bei einem kostenlosen Konto, der Support und die Community rund um den Dienst.

Tabelle 1. Rangfolge der APIs, die eine Interaktion mit NFTs ermöglichen, am 10.11.2022

Der Dienst Alchemy gewinnt die Rangliste aufgrund seiner Zugänglichkeit, seiner umfassenden Dokumentation und seiner starken Community. Besonders erwähnen möchten wir NFTPort, der trotz seines noch jungen Dienstes eine sehr benutzerfreundliche und umfassende API bietet. Diese Ergebnisse sind als Richtwerte zu verstehen. Wir möchten Sie dazu ermutigen, die verschiedenen Dienste selbst zu testen, um denjenigen auszuwählen, der Ihren Bedürfnissen am besten entspricht.

Praktisches Beispiel

Android

Wir werden okhttp verwenden, um die Implementierung von http-Anfragen zu vereinfachen. Darum müssen wir die Bibliothek in unsere Abhängigkeiten aufnehmen:

// app/build.gradle

dependencies {

...

   implementation("com.squareup.okhttp3:okhttp:4.10.0")

...

}

Als Nächstes initialisieren wir den http-Client, mit dem wir die Abfragen durchführen können:

private val client = OkHttpClient()

In diesem Beispiel verwenden wir die Alchemy-API, um die verschiedenen NFTs eines Kontos zu lesen.

Wir werden die getNFTs-Abfrage verwenden. Dazu müssen wir in der Variable "path" die Adresse des Kontos und natürlich den Schlüssel angeben, den Sie von Ihrem Alchemy-Konto abrufen können.

So sieht die Vorbereitung der Abfrage aus:

val request = Request.Builder()

.url("https://eth-mainnet.g.alchemy.com/v2/$API_KEY/getNFTs/?owner=${ethAddress}")

.build()

Anschliessend muss die Abfrage in einer Coroutine ausgeführt werden, damit die Benutzeroberfläche nicht blockiert wird. 

scope.launch {

   var response = withContext(Dispatchers.Default) {

       client.newCall(request).execute()

   }.body?.string()

}

Die oben genannte Variable response enthält die verschiedenen Informationen über die NFTs des Kontos. Diese sind normalerweise im JSON-Format und müssen daher "geparst" werden, um sie zu verwenden.

Das vollständige Beispiel einer Anwendung, die eine Anfrage sendet, um die NFTs eines Kontos zu finden, können Sie auf unserem Github entdecken.

iOS

Zur Durchführung der HTTP-Anfrage an die Alchemy-API können Sie die in Swift integrierte URLRequest-Struktur verwenden. Sie brauchen keine zusätzlichen Bibliotheken von Drittanbietern.

Sie beginnen mit der Erstellung der URL unter Verwendung unseres Alchemy-API-Schlüssels und der Ziel-ETH-Wallet-Adresse.

// Create the proper URL using the private Alchemy API key and the specified ETH address

let nftsRequestUrl = URL(string: "https://eth-mainnet.g.alchemy.com/v2/\(ALCHEMY_API_KEY)/getNFTs?owner=\(ethWalletAddress)&excludeFilters[SPAM,AIRDROPS]")

Anschließend können Sie eine URLRequest-Struktur erstellen und die HTTP-Anforderung mit der Klasse URLSession durchführen.

let nftsRequest = URLRequest(url: nftsRequestUrl)

let (data, response) = try await URLSession.shared.data(for: nftsRequest)

guard (response as? HTTPURLResponse)?.statusCode == 200 else { throw "Request failed" }

Die Datenvariable enthält die Antwortdaten in Form eines Rohbytepuffers Data. Der Inhalt liegt im Allgemeinen im JSON-Format vor und muss geparst werden.

Um zu erfahren, wie die Antwort geparst wird, und um das vollständige Beispiel anzusehen, besuchen Sie das Repository nfscene/ios-fetch-nfts-example auf unserem GitHub.

Schlussfolgerung

In diesem Artikel konnten wir die Umrisse dessen, was ein NFT ist, und insbesondere seine Verbindung zur Blockchain, definieren. Um mit dem NFT interagieren zu können, muss man zwangsläufig über die Blockchain gehen. Eine NFT gehört zu einem Konto und enthält verschiedene Daten. Im zweiten Teil unseres Artikels haben wir zwei Möglichkeiten definiert, wie man NFTs abrufen und mit ihnen interagieren kann: entweder direkt mit einem Knoten in der Blockchain oder über eine API. Anschliessend haben wir die TOP 10 der besten APIs zum Abrufen einer Liste von NFTs, die zu einem Konto gehören, definiert. Der Alchemy-Dienst, der leicht zugänglich ist, eine umfassende Dokumentation bietet und von einer starken Community unterstützt wird, steht an der Spitze der Rangliste. Schliesslich haben wir ein konkretes Beispiel für die Implementierung der Alchemy-API vorgeschlagen, mit Code für eine Android- und eine iOS-Anwendung. APIs ermöglichen eine einfache Interaktion mit NFTs, ohne dass man sich um die Bereitstellung eines ganzen Knotens kümmern muss. Diese Dienste vereinfachen die Erstellung einer DApp, nehmen aber der Dezentralisierung der DApps ihren Sinn. Denn bei der Verwendung einer API laufen alle Interaktionen mit den NFTs über einen Zugangspunkt, was dem eigentlichen Sinn der Dezentralisierung und der Technologie widerspricht.