Cycles sind für den Internet Computer wie Gas für Ethereum oder Credits für AWS. Sie dienen als Rechenressourcen, haben jedoch darüber hinaus noch viel weitreichendere Nutzungsmöglichkeiten, Funktionen und Aufgabenbereiche. Denn bei einem technologisch fortschrittlichen Projekts dieser Größenordnung bringt besondere Herausforderungen mit sich, die bei der Entwicklung der Cycles berücksichtigt wurden.
Was sind Cycles?
Um eine Aufgabe auf einer Blockchain auszuführen, werden grundsätzlich Rechenressourcen benötigt. Dabei kann es sich um eine einfache Transaktion oder zum Beispiel die Ausführung eines Smart Contracts handeln. Der Internet Computer von Dfinity basiert mit seinen Knoten und Subnets auf der Blockchain-Technologie. Daher ist für die Aufrechterhaltung der Blockchain und Ausführung ebenfalls auf Rechenressourcen angewiesen.
Grundsätzlich verbrauchen die Canister, eine Weiterentwicklung von Smart Contracts, dabei ganz unterschiedliche Ressourcen. Für die Ausführung eines Canisters sind CPU-Einheiten nötig, das Routing von Nachrichten erfordert Bandbreite und das Speichern von persistenten Daten verbraucht Speicherplatz. Beim Internet Computer werden diese Berechnungskosten für Rechnerressourcen in Cycles ausgedrückt. Canisters besitzen einen Kontostand, um alle oben genannten Kosten für die Kommunikation, Berechnung und den verbrauchten Speicherplatz zu bezahlen.
Die tatsächlichen Betriebskosten, zu denen unter anderem auch die physische Hardware, Energiekosten, Speichergeräte und Bandbreite gehören, werden beim Internet Computer in Cycles-Einheiten ausgedrückt. Eine dieser Einheiten entspricht damit den Kosten für die Ausführung einer einzelnen WebAssembly-Anwendung. Da der Internet Computer nach dem Alles-oder-nichts-Prinzip arbeitet, müssen die dezentralen Anwendungen (DApps) einen ausreichend gedeckten Kontostand für eine vollständige Ausführung besitzen.
Wie funktionieren Cycles?
Der Internet Computer Protocol (ICP) Token ist die systemeigenen Währung des Internet Computers. Nutzer können einen ICP Token innerhalb eines Neurons halten, um an der Network Nervous System (NNS) Governance teilzunehmen, oder in Cycles umwandeln, um Software im Netzwerk auszuführen.
Jeder Canister auf dem Internet Computer muss über ein Konto mit Cycles verfügen, um die Kosten für Kommunikation, Berechnung und Speicherung zu decken. Entwickler können ICP-Token in Cycle umwandeln und auf das jeweilige Canister Konto übertragen. Die Internet Computer Plattform legt jedoch Grenzen dafür fest, wie viele Cycle-Einheiten ein Canister halten und verbrauchen kann. Diese Begrenzung soll verhindern, dass bösartiger oder fehlerhafte Programme unnötig Ressourcen verbrauchen.
Obwohl ICP Token genutzt werden, ist ein Cycle selbst keine Währung und haben somit keine Liquidität oder einen Vermögenswert. Ein Rücktausch von Cycle in Token ist ebenfalls nicht möglich. Ungenutzte Einheiten können aber von einem Canister auf einen anderen übertragen werden.
Dieses Konzept bringt außerdem einige Vorteile. Die Betriebskosten sind relativ stabil, das erleichtert es Entwicklern vorherzusagen, wie viele Cycle-Einheiten für ihr Programm erforderlich sind. Vermutlich werden die Betriebskosten im Laufe der Zeit weiter sinken, weil zum Beispiel der Speicherplatz günstiger wird oder Rechenkosten durch effizientere Hardware minimiert werden können.
Verwaltung und Verteilung von Cycle-Einheiten
Im Gegensatz zu ICP-Token sind Cycles nur dem jeweiligen Canister und nicht dem Benutzer oder Entwickler zugeordnet. Nutzer und Entwickler können die Verteilung und den Besitz ihrer Cycle-Einheiten daher nur über einen bestimmten Canister-Typ verwalten. Diesen Canister bezeichnet man als Cycles-Wallet. Da es die Cycles enthält, die unter anderem für das Erstellen neuer Canister und andere Vorgänge nötig sind, werden diese Abläufe standardmäßig mit der Kanister-ID und nicht der Nutzer Internet Identität verknüpft.
Dfinity möchte die Entwicklung und den Umgang so einfach wie möglich gestalten. Daher erstellt das Dfinity Canister SDK für jedes Projekt automatisch ein Standard-Cycles-Wallet im Hintergrund läuft. Das Wallet registriert für den Nutzer dann die erforderlichen Canister-IDs und stellt die Canister im lokalen Netzwerk bereit.
Das erleichtert die Arbeit erheblich. Wenn ein Entwickler außerhalb der Canister SDK Umgebung arbeitet, muss er viele Schritte, die innerhalb der SDK automatisch für ihn erledigt werden, selbst ausführen. Einige dieser Aufgaben können mit dem standardmäßigen Wallet im Webbrowser ausgeführt werden. Dazu gehören:
- Ein Cycle-Wallet registrieren
- ICP-Token in Cycle-Einheiten umwandeln.
- Die Cycles auf die neuen Canister übertragen.
- Principals benennen, die dann entweder nur als Verwalter (Custodian) auftreten dürfen, oder Eigentumsrechte besitzen (Controller).
Wenn ein Nutzer mehrere Identitäten für den Internet Computer erstellt hat, sollte er bedenken, dass Aufrufe und Befehle für den Cycle-Wallet-Canister mit der Wallet-ID ausgeführt werden. Diese Wallet-ID ist wiederum einer Benutzeridentität zugeordnet. Je nachdem, welche ID der Nutzer aktuell verwendet und ob diese als Controller oder Custodian für das Wallet eingetragen wurde, wirkt sich das auf das angezeigten Informationen oder die Zugriffsmöglichkeiten des Nutzers und seine Rechte an dem Canister-Wallet aus. Denn Controller und Custodian haben sehr unterschiedliche Rollen und Möglichkeiten.
Der Controller hat den größten Einflussbereich und kann unter anderem folgende Aufgaben ausführen:
- Andere Principals als Controller hinzufügen oder entfernen.
- Bestimmen wer Custodian-Rechte besitzen darf und bei Bedarf diese Rechte auch wieder entziehen.
- Einträge in das Cycles-Wallet Adressbuch hinzufügen.
- Auf das Guthaben des Wallet und alle anderen Wallet-bezogenen Informationen zugreifen.
- Cycles an andere Canister senden oder von ihnen empfangen.
- Weitere Canister und Cycles-Wallets erstellen.
- Das Cycles-Wallet umbenennen.
Die Custodian-Rolle ist hingegen ihn ihren Verwaltungsaufgaben und Rechten was das Cycles-Wallet betrifft deutlich eingeschränkt. Dem Custodian stehen nur folgende Rechte und Einflussmöglichkeiten offen:
- Auf das Guthaben und andere Wallet-bezogene Informationen zugreifen.
- Cycles von anderen Canisters empfangen oder auf diese übertragen.
- Einen neuen Canister erstellen.
Wenn ein Canister erstellt und ein Wallet eingerichtet wird, sollten Nutzer daher unbedingt diese Punkte beachten.
Die zentrale Programmiersprache des Internet Computers ist Motoko, obwohl prinzipiell auch SDKs für andere Programmiersprachen existieren oder aktuell entwickelt werden. In Motoko können Controller oder Custodian Cycles selektiv über Messages senden und empfangen. Bei diesen Messages handelt es sich um Shared Message Calls. Der Caller kann damit eine von ihm vorher festgelegte Menge Cycles übertragen. Der Empfänger kann dann entscheiden ob er diese annehmen möchte oder nicht. Ohne ausdrückliche Anweisung und Bestätigung von Sender und Empfänger ist eine Übertragung nicht möglich.
Der Empfänger hat außerdem die Möglichkeit entweder alle ihm gesendeten Einheiten anzunehmen oder nur eine Teilmenge. Alle übrigen Einheiten gehen wieder an den Sender zurück. Sollte eine Shared Message Call vor Abschluss der Übertragung abbrechen, werden alle zugehörigen Einheiten automatisch und ohne Verlust an den Sender zurückgeschickt.
Fleek erleichtert Einstieg für Entwickler
Mit dem Cycles Faucet können qualifizierte Entwickler Cycles im Wert von 100 US-Dollar als Fördermittel für ihre erstellten Anwendung auf dem Internet Computer erhalten. Das Projekt ist eine Gemeinschaftsarbeit von Fleek und der DFINITY Foundation. Sie soll den Entwicklern den Zugang zum Internet Computer erleichtern und so die Entwicklung von neuen DApps für das offene Internet fördern. Der Cycles Faucet wird von der DFINITY Foundation finanziert.
Entwickler haben beim Zugriff und die Verwaltung ihrer Cycles zwei Möglichkeiten. Sie können entweder das bereits beschriebene Standard-Cycles-Wallet nutzen oder Dank. Der neue Service wurde von Fleek und Dfinity entwickelt. Die Besonderheit von Dank ist, dass er auf Canister-Basis ausgeführt wird. Entwickler müssen damit nicht mehr zuerst ICP Token in Cycles umwandeln oder ein Canister-Wallet einrichten. Sie können Anwendungen und Dienste so in wenigen, einfachen Schritten veröffentlicht.
Fleek ermöglicht es dem Benutzer außerdem, ein Gleichgewicht seines Cycle-Guthabens auf alle mit seiner Haupt-Identität verbundenen Canister zu gewährleisten. Die Anwendung verfügt über ein Canister- und Cycles-Management, das im Hintergrund agiert und dem Entwickler die Arbeit abnimmt. Der von Fleek mitentwickelte Service kann sogar automatisch Cycles nachfüllen, wenn sich das Guthaben dem Ende neigt. Ein weiterer Aspekt, der den Einstieg erleichtern und die Entwicklung von neuen Programmen und Diensten für den Internet Computer fördern soll.