Cosmos Blockchain SDK: Eigene Nodes und Apps erstellen

Cosmos ist ein Blockchain-Protokoll, mit dem auch interoperable Aktionen zwischen verschiedenen Blockchain-Lösungen möglich sind. Das ist das herausragende Merkmal von Cosmos.

Das System ermöglicht den Aufbau verschiedener Blockchains, inklusive der Zusammenarbeit zwischen den Blockchains. Wir zeigen in diesem Beitrag, wie mit dem Cosmos SDK und zusätzlichen Tools eigene Blockchains, Nodes und Apps entwickelt werden können.

In anderen Protokollen und Plattformen sind die Blockchains voneinander isoliert. Cosmos hat im Fokus ein weltweites Netzwerk von Blockchains zu schaffen, die unabhängig voneinander interagieren, aber dennoch miteinander interagieren können. Entwickler können eigene Blockchains erstellen und in den Blockchains auch eigene dApps betreiben.

Ein prominentes Beispiel für den Einsatz von Cosmos ist die Lending-Plattform Kava. Diese setzt auf Cosmos und ermöglicht ebenfalls den Datenaustausch zwischen verschiedenen Blockchains. Cosmos (ATOM) steht auch als Token zur Verfügung und kann auf verschiedenen Plattformen gekauft werden.

Mit dem Cosmos SDK erstellen Entwickler eigene Blockchains und dApps, die miteinander kommunizieren
Mit dem Cosmos SDK erstellen Entwickler eigene Blockchains und dApps, die miteinander kommunizieren

Mehrere Blockchains parallel einsetzen

Cosmos ermöglicht den Aufbau von verschiedenen Blockchains, die unabhängig miteinander zum Einsatz kommen können, aber auch ermöglichen Daten auszutauschen und interoperabel miteinander zu interagieren. Die Entwickler stellen für die Entwicklung eigener Blockchains auf Basis von Cosmos ein Software Development Kit (SDK) zur Verfügung.

Beim SDK handelt es sich um ein Set von Tools für verschiedene Aufgaben, einschließlich des Hostings einer dApp im Cosmos Hub-Ökosystem. Auch der Aufbau von Unternehmens-Blockchains ist mit dem Cosmos SDK möglich. Ein weiterer Vorteil von Cosmos ist die schnelle Bereitstellung der eigenen Blockchain und die schnell verfügbare Entwicklungsoberfläche.

Der Vorteil von Cosmos im Vergleich zu Ethereum und Co.

Noch ein Vorteil von Cosmos, im Vergleich zu anderen Blockchain-Lösungen wie Ethereum, ist die Geschwindigkeit von dApps. Anwendungen, die in einer Cosmos-Blockchain laufen, können mehr Transaktionen pro Sekunde (TPS) ausführen, als zum Beispiel bei Ethereum.

Der Vorteil von Cosmos mehrere Blockchains parallel betreiben zu können, ist gleichzeitig der Nachteil von anderen Blockchain-Protokollen und Plattformen. Diese laufen oft in einer Sandbox und ermöglichen kaum Kommunikation mit anderen Bereichen.

Das gilt auch für die Ethereum Virtual Machine (EVM), in der dApps in der Ethereum-Blockchain zum Einsatz kommen. Das macht den Einsatz wesentlich unflexibler und weniger gut skalierbar, als bei der Verwendung von Cosmos.

Blockchains auf Basis von Cosmos ermöglichen es Entwicklern, Blockchains zu erstellen und eine Kommunikation zwischen den Blockchains einzurichten. Diese Kommunikation ist nicht notwendig, sie ist nur eine weitere Möglichkeit Blockchains zu skalieren und weitere Dienste einzubinden.

Cosmos SDK, IBC und Tendermint ermöglichen die Entwicklung eigener dApps

Mit Open-Source-Tools ist es möglich Blockchains, dApps und Nodes für Cosmos zu erstellen. In den meisten Fällen kommen dazu Cosmos SDK, IBC (Inter-Blockchain Communication Protocol) und Tendermint zum Einsatz. Der erste Schritt erfolgt mit Cosmos SDK, das von den Betreibern des Projektes kostenlos zur Verfügung gestellt wird.

Beim Entwickeln von Lösungen auf Basis des Cosmos-Protokolls kommt in den meisten Fällen zunächst das Cosmos SDK zum Einsatz. Das SDK bietet auch Vorlagen, mit denen sich dApps schneller entwickeln und bereitstellen lassen. Die Entwicklung findet komplett im SDK statt. Alle notwendigen Hintergrundaktionen für das SDK für den Entwickler aus.

Lite Nodes und Full Nodes mit dem Cosmos SDK und Starport

Die Kompilierung des Codes erfolgt auch über das SDK. Dieses kann danach auch noch einen Daemon mit REST-API-Zugang und einer Konsolenschnittstelle erstellen und aktivieren. Parallel stellt das SDK auch Tools für das Staking, den Betrieb von Lite-Clients oder vollständigen Nodes zur Verfügung.

Die komplette Einrichtung übernimmt das Cosmos-SDK. In der selbst programmierten Blockchain lassen sich natürlich auch Tokens definieren und das Cosmos-Token ATOM nutzen.

Dazu lassen sich beliebige Wallets einbinden, die ATOM unterstützen. Die Abwicklungen der Transaktionen laufen über Cosmos. Der Tendermint BFT-Konsens stellt gleichzeitig sicher, dass die Blockchain nur gültige Daten speichert.

Das Cosmos Developer Kit stellt den Einstieg in die Entwicklung von Apps mit Cosmos dar. Dazu kommen Golang, Ruby-on-Rails for Blockchain und Tendermint zum Einsatz. Mit einer Beispiel-App für Cosmos lassen sich die Möglichkeiten des Cosmos SDK leichter erlernen. Dazu ist das Starport-Tool von Cosmos notwendig. Der Quellcode dafür steht auch auf Github zur Verfügung.

Starport ist die All-in-One-Plattform von Cosmos zum Erstellen, Starten und Verwalten beliebiger Blockchain-Anwendungen. Das Tool bietet eine Schnittstelle zum Cosmos SDK. Starport generiert den Code, sodass sich Entwickler auf das Schreiben der Geschäftslogik konzentrieren können. Starport kann entweder installiert oder direkt im Browser geöffnet werden. Der Betrieb im Browser erfolgt auf Basis eines neuen Containers über Gitpod.

Starport ermöglicht den Aufbau einer eigenen Blockchain auf Basis von Cosmos auch im Webbrowser.
Starport ermöglicht den Aufbau einer eigenen Blockchain auf Basis von Cosmos auch im Webbrowser.

Starport kann natürlich auch lokal installiert werden. Dazu wird der folgende Befehl genutzt:

curl https://get.starport.network/starport! | bash

Der Befehl installiert Starport in das Verzeichnis „/usr/local/bin“. Erscheint eine Meldung, dass Berechtigungen für das Verzeichnis fehlen, helfen die beiden folgenden Befehle:

curl https://get.starport.network/starport | bash

sudo mv starport /usr/local/bin/

Die installierte Starport-Version lässt sich wiederum mit dem folgenden Befehl überprüfen:

starport version

Installation von Starport auf einem Linux-Rechner.
Installation von Starport auf einem Linux-Rechner.

Es ist auch möglich, Starport in einer fest definierten Version zu installieren. Einige Blockchain-Apps hängen von der verwendeten Version ab. Um etwa Version 0.18.0 zu installieren, lässt sich die folgende Syntax nutzen:

curl https://get.starport.network/[email protected]! | bash

Die Installation von Starport ist auch auf macOS möglich. In diesem Fall erfolgt die Installation über Homebrew mit:

brew install tendermint/tap/starport

Erstes Modul mit Cosmos SDK bauen – Die eigene Blockchain erstellen

Um ein erstes Modul mit dem Cosmos SDK zu bauen, ist Starport der richtige Einstieg. Starport verfügt über eine Reihe Standardbefehlen, welche die Entwicklung erleichtern. Dazu gehört auch die Erstellung einer neuen Cosmos SDK-Blockchain. Diese muss nicht selbst erstellt werden. Um ein Blockchain-Fundament zu erstellen, kann der folgende Befehl verwendet werden:

starport scaffold chain

Der Befehl kann auch gleich eine Anwendung integrieren. Hier stellt Cosmos eine „Hello-World“-Anwendung zur Verfügung, die mit dem folgenden Befehl startet:

starport scaffold chain github.com/cosmonaut/hello

Erstellen einer eigenen Blockchain mit Cosmos
Erstellen einer eigenen Blockchain mit Cosmos

Mit dem Befehl erstellt das Cosmos SDK eine neue Blockchain mit der Bezeichnung „hello“. Die Daten dazu sind im Verzeichnis mit dem gleichen Namen zu finden. Eine weitere Beispielanwendung für Cosmos ist auf der Seite „How to build a blockchain app with Cosmos SDK“ zu finden.

In der neuen Blockchain sind automatisch verschiedene Module verfügbar. Dazu gehören „staking“, „bank“, „gov“ und weitere Module. Mit „staking“ ist delegiertes Proof-of-Stake umsetzbar. Das Modul „bank“ ermöglicht den Transfer von Tokens zwischen Konten, „gov“ bietet On-Chain-Governance.

Generell bietet Starport auch umfangreiche Hilfen für jeden Befehl an. Die Blockchain kann in diesem Beispiel mit den beiden folgenden Befehlen erstellt werden:

cd hello

starport chain serve

In der Dokumentation von Starport sind ausführliche Informationen für die einzelnen Optionen zu finden. Mit dem Parameter „–help“ zeigt Starport eine Hilfe für den jeweiligen Befehl an.

Anzeigen der Hilfe für Starport-Befehle.
Anzeigen der Hilfe für Starport-Befehle.

Für jede Blockchain legt das Cosmos SDK eine eigene Verzeichnisstruktur an. In diesem Fall kann mit „cd hello“ in die neue Blockchain gewechselt werden. Mit „ls“ zeigt das Terminal den Inhalt an. Die wichtigsten Verzeichnisse und Dateien in einem Blockchain-Verzeichnis mit Cosmos sind:

App – Diese Daten halten die Blockchain zusammen und verbinden die einzelnen Komponenten miteinander. Die wichtigste Datei in diesem Verzeichnis ist „app.go“. Dabei handelt es sich um die Typdefinition der Blockchain und Funktionen zu ihrer Erstellung und Initialisierung.

Cmd – Hier ist die CLI der kompilierten Binärdatei zu finden.

Docs – Verzeichnis für die Dokumentation des Projektes. Standardmäßig wird eine OpenAPI-Spezifikation erstellt.

Proto – Protokollpufferdateien, welche die Datenstruktur beschreiben

Testutil – Hilfsfunktionen für das Testen

Vue – Hier findet sich eine Vue3-Webanwendungsvorlage

x – Cosmos SDK-Module und benutzerdefinierte Module

config.yml – Konfigurationsdatei zum Anpassen der Blockchain

Blockchain bereitstellen und Nodes installieren

Die Chain steht generell erst dann zur Verfügung, wenn sie im Terminal mit dem folgenden Befehl gestartet wird:

starport chain serve

Wenn mehrere Chains erstellt werden, erstellt das SDK für jede Blockchain ein eigenes Verzeichnis. Der Start der jeweiligen Blockchain erfolgt im Verzeichnis, in dem sich die Systemdateien der Blockchain befinden.

Durch den Befehl lädt das Cosmos SDK die notwendigen Abhängigkeiten herunter und der Quellcode der Blockchain wird kompiliert. In diesem Zusammenhang erstellt das SDK in diesem Beispiel eine ausführbare Datei, für die in diesem Text erstellte Beispiel-Blockchain.

Die Binärdatei trägt die Bezeichnung „hellod“. Die Blockchain lässt sich auch beenden (STRG+C) und erneut starten (starport chain serve). In diesem Fall nutzt das Cosmos SDK die bereits vorhandenen Daten weiter und bindet Änderungen automatisch ein.

Generell verwendet Starport immer den Namen des Projektes und hängt ein „d“ an den Namen für die Erstellung der Binärdatei. Natürlich lässt sich dieses Verhalten auch mit den Parametern des SDK steuern. Die erstellte Binärdatei ist der zentrale Weg, um Befehle in der Blockchain auszuführen.

Hierüber ist es auch möglich, Validierungsknoten zu initialisieren und Nodes zu starten. Standardmäßig werden zwei API-Endpunkte erstellt:

http://localhost:26657 – Tendermint-API auf niedriger Ebene

http://localhost:1317 – High-Level-Blockchain-API

Das Cosmos SDK stellt auch API-Endpunkte für eine Blockchain zur Verfügung.
Das Cosmos SDK stellt auch API-Endpunkte für eine Blockchain zur Verfügung.

Um die Blockchain anzuhalten, kann die Tastenkombination STRG+C verwendet werden. Änderungen am Projekt speichert das Cosmos SDK im Projektverzeichnis und führt die Neuerungen aus, wenn die Blockchain mit „starport chain serve“ neu startet.

Damit die Blockchain auch Aktionen ausführt, zum Beispiel beim Starten, sind Änderungen an den Konfigurationsdateien notwendig. Eine Abfrage lässt sich zum Beispiel mit dem folgenden Befehl erstellen:

starport scaffold query posts –response title,body

Der Parameter „query“ benötigt einen Namen für die Abfrage. In diesem Beispiel ist der Name „posts“. Es gibt noch weitere Parameter, die in diesem Fall nicht zum Einsatz kommen. Die Antwortfelder lassen sich mit dem Parameter „–response“ definieren, in diesem Fall „body“ und „title“. Der Abfragebefehl in diesem Beispiel hat mehrere Dateien erstellt und geändert:

proto/hello/query.proto

x/hello/keeper/grpc_query_posts.go

x/hello/client/cli/abfrage.go

x/hello/client/cli/abfrage_posts.go

Mit einem Text-Editor lässt sich jetzt die Datei „x/hello/keeper/grpc_query_posts.go“ bearbeiten. Am Ende der Keeper-Funktion kann der Text angepasst werden, den die Blockchain anzeigen soll, zum Beispiel:

func (k Keeper) Posts(c context.Context, req *types.QueryPostsRequest) (*types.QueryPostsResponse, error) {

  //…

  return &types.QueryPostsResponse{Title: „Hello!“, Body: „Starport“}, nil

}

Kommt die Web-IDE für Cosmos zum Einsatz, kann hier zum Beispiel auch der Editor „vi“ genutzt werden. Danach muss noch die Datei „x/hello/module.go“ angepasst werden. Bei installierten Versionen von Starport stehen natürlich alle gewünschten Editoren zur Verfügung, welche auf dem jeweiligen Betriebssystem genutzt werden können.

 import (

  //…

  „context“

)

 func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {

  types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx))

}

Anschließend kann die Blockchain neu gestartet werden, und führt die Befehle aus. Mehr Informationen sind auf der Webseite von Starport zu finden. Beispiele für das Schreiben von Daten in die Blockchain ist auf der Seite „Build a Blog“ zu finden. Die Entwickler stellen auch Tutorials zur Verfügung, welche den Umgang mit Cosmos ausführlich erklären.

Praxis: Umfrage-App in der Blockchain erstellen

Mit einer Umfrage-App in einer Blockchain lassen sich mit Cosmos transparente und fälschungssichere Abfragen erstellen. Eine Vorlage steht auf GitHub zur Verfügung. Die dazugehörige Blockchain kann mit folgendem Befehl erstellt werden:

starport scaffold chain github.com/cosmonaut/voter

Wie bei der Hello-World-Blockchain, erstellt Starfold auch hier ein eigenes Verzeichnis und eine eigene Blockchain. Für den Start der Blockchain ist ein Wechsel in das Verzeichnis „voter“ notwendig. Danach erfolgt der Start dieser Blockchain wieder mit „starport chain serve“. Zur Vorlage gehören auch bereits einige Benutzer, mit denen die Umfrage getestet werden kann.

Erstellen einer Umfrage-App in der Blockchain mit Cosmos.
Erstellen einer Umfrage-App in der Blockchain mit Cosmos.

In einem neuen Terminal kann die aktuell noch leere Vorlage an die eigenen Anforderungen angepasst werden. Dazu lassen sich Titel und Optionen hinzufügen, zum Beispiel mit:

starport scaffold list poll title options

Danach lassen sich Anpassungen an der Umfrage vornehmen.

Erstellen einer Umfrage in der Beispiel-App für die Cosmos-Blockchain.
Erstellen einer Umfrage in der Beispiel-App für die Cosmos-Blockchain.

Für Blockchain-Anwendungen ist es auch möglich, Webinterfaces zu erstellen. Dazu stehen in Cosmos bereits Grundlagen zur Verfügung. Um einen Webserver für die vorher erstellte Umfrage zu erstellen, werden die folgenden Befehle verwendet:

cd vue

npm install

npm run serve

Die Webseite steht standardmäßig über die URL http://localhost:8080 zur Verfügung. Im Frontend ist es möglich, sich mit den Beispielbenutzern anzumelden, etwa dem Benutzer „Alice“. Danach lässt sich die Umfrage auch anpassen. Wie das geht, ist auf der Seite der Cosmos SDK Tutorials zu finden.

Fazit

Cosmos macht es Entwicklern sehr einfach, eigene Blockchains zu erstellen und auch dApps in den Blockchains bereitzustellen. Durch die Möglichkeit verschiedene Blockchains auf Basis von Cosmos miteinander zu vernetzen, sind die Blockchains sehr skalierbar und bieten flexible Einsatzmöglichkeiten.

Der Einstieg in das Cosmos SDK ist einfach und sogar ohne Installation in wenigen Minuten möglich. In der Web-IDE lassen sich produktive dApps und Blockchains entwickeln, aber auch bei lokalen Installationen auf Basis von Windows (mit dem Windows-Subsystem für Linux), Linux und macOS.

Antworten

Schreibe einen Kommentar

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