Tokenisierungsunterstützung mit Blockchain App Builder

Mit Blockchain App Builder können Sie den gesamten Lebenszyklus eines Tokens verwalten. Sie können vorhandene Assets tokenisieren und automatisch Tokenklassen und -methoden generieren, die für das Tokenlebenszyklusmanagement verwendet werden sollen.

Tokenisierung

Tokenisierung ist ein Prozess, bei dem physische oder digitale Assets durch Token dargestellt werden, die in einer Blockchain übertragen, verfolgt und gespeichert werden können. Indem Sie Assets als Token darstellen, können Sie das Blockchain-Ledger verwenden, um den Zustand und das Eigentum an einem Asset zu bestimmen, und standardmäßige Blockchain-Plattformfunktionen verwenden, um das Eigentum an einem Asset zu übertragen.

Blockchain App Builder unterstützt die Tokenisierung: Tokenklassen und -methoden werden automatisch generiert, und es werden zusätzliche Tokenmethoden bereitgestellt, damit Entwickler komplexe Geschäftslogik für Token erstellen können. Das automatisch generierte Projekt enthält Tokenlebenszyklusklassen und -funktionen, CRUD-Methoden und zusätzliche Token-SDK-Methoden und unterstützt die automatische Validierung von Argumenten, das Marshalling/Unmarshalling und die transparente Persistenzfunktion. Mit diesen Controllermethoden können Sie Token initialisieren, den Zugriff kontrollieren, Konten einrichten, Rollen verwalten und den Lebenszyklus von Token verwalten.

Das folgende Diagramm zeigt die von Blockchain App Builder implementierte Tokenarchitektur, einschließlich der Token-API und des Token-SDK.Tokenarchitekturdiagramm

Automatisch generierte Token-API
Blockchain App Builder generiert automatisch Methoden zur Unterstützung von Token und Tokenlebenszyklen. Mit diesen Methoden können Sie Token initialisieren, Rollen und Accounts verwalten und andere Tokenlebenszyklusaufgaben ohne zusätzliche Codierung abschließen.
Token-SDK
Das Token-SDK enthält Methoden, mit denen Sie komplexe Geschäftslogik für Tokenanwendungen entwickeln können.
Multiversion Concurrency Control (MVCC)-Optimierung
Die MVCC-Optimierung für Token Chaincode kann Fehler bei Übertragungs-, Minz-, Burn- und Hold-Vorgängen reduzieren.

Token und das Konto-/Saldenmodell

Blockchain App Builder unterstützt fungible und nicht fungible Token. Fungible Token haben einen austauschbaren Wert. Jede Menge fungibler Token hat den gleichen Wert wie jede andere gleiche Menge derselben Tokenklasse. Nicht fungible Token sind eindeutig. Token können auch ganz oder teilweise sein. Bruch-Token können in kleinere Teile unterteilt werden, basierend auf einer bestimmten Anzahl von Dezimalstellen.

Token können auch durch Verhaltensweisen beschrieben werden. Unterstützte Verhaltensweisen für fungible Token umfassen: mintable, transferable, divisible, holdable, burnable und roles (minter, burner und holder). Zu den unterstützten Verhaltensweisen für nicht fungible Token gehören: mintable, transferable, singleton, indivisible, burnable und roles (minter und burner).

Das Tokenisierungsfeature verwendet ein Konto-/Saldenmodell, um tokenisierte Anlagen als Salden in einem Konto darzustellen. Konten ähneln typischen Bankkonten, bei denen Einzahlungen und Überweisungen und andere staatliche Übergänge den Saldo eines Kontos beeinflussen. Der Saldo jedes Kontos wird global verfolgt, um sicherzustellen, dass Transaktionsbeträge gültig sind. Der gesperrte Saldo (für fungible Token) und die Transaktionshistorie werden ebenfalls verfolgt.

Jeder Benutzer, der Token besitzt oder zu irgendeinem Zeitpunkt tokenbezogene Vorgänge abschließt, muss über ein Konto im Netzwerk verfügen. Jedes Konto wird durch eine eindeutige ID (account_id) identifiziert. Die Account-ID wird erstellt, indem ein Benutzername oder eine E-Mail-ID (user_id) des Instanzeigentümers oder der bei der Instanz angemeldete Benutzer mit der Mitgliedschaftsserviceprovider-ID (org_id) des Benutzers in der aktuellen Netzwerkorganisation kombiniert wird. Für die Accounterstellung werden einsatzbereite Methoden bereitgestellt. Da die Konto-ID die Organisations-ID enthält, können Benutzer über mehrere Organisationen hinweg unterstützt werden.

Tokenstandards

Blockchain App Builder erweitert die Standards und Klassifizierungen des Token Taxonomy Framework, des ERC-721-Standards und des ERC-1155-Standards, um die Anatomie und das Verhalten von Token zu definieren. ERC-1155 ist ein Standard, der sowohl fungible als auch nicht fungible Token (NFTs) unterstützt. ERC-721 ist ein Standard für NFTs. Das Token Taxonomy Framework wurde von der Token Taxonomy Initiative entwickelt. Weitere Informationen finden Sie unter Token Taxonomy Framework.

In der folgenden Tabelle werden die Tokentypen beschrieben, die Blockchain App Builder unterstützt:
Standard Unterstützte Tokentypen
Token Taxonomie-Framework
  • Fraktionierte fungible Token
ERC-721
  • ganze nicht fungible Token
ERC-1155
  • ganze fungible Tokens
  • Fraktionierte fungible Token
  • ganze nicht fungible Token
  • Bruchteil der nicht fungiblen Token

Tokenisierungsablauf

Da Blockchain App Builder die Tokenisierung durch Erweiterung der Syntax der Eingabespezifikationsdatei unterstützt, erstellen Sie tokenspezifische Projekte genauso wie andere Projekte, entweder mit der CLI oder in Visual Studio Code. Weitere Informationen finden Sie unter Eingabespezifikationsdatei.

Tokenworkflowdiagramm
Ein typischer Tokenisierungsablauf führt die folgenden grundlegenden Schritte aus:
  • Entscheiden Sie, welcher Tokenstandard verwendet werden soll.
  • Legen Sie fest, welches Tokenverhalten angegeben werden soll (mintable, transferable, divisible, indivisible, singleton, holdable, burnable und roles).
  • Definieren Sie das Tokenasset und seine Eigenschaften in der Eingabespezifikationsdatei.
  • Scaffold das Chaincode-Projekt aus der Eingabespezifikationsdatei. Dadurch wird ein Gerüstprojekt erstellt, einschließlich eines Modells, das die Tokenassetdefinition und ihre Eigenschaften enthält, und eines Controllers, der das Verhalten und die Methoden des Tokens enthält.
  • Stellen Sie das Chaincode-Projekt bereit, und testen Sie es.
Nachdem Sie ein tokenbasiertes Projekt bereitgestellt haben, führt der typische Ablauf zum Erstellen von Token und zum Abschließen von Lebenszyklusvorgängen folgende Schritte aus:
  • Ein Token Chaincode wird bereitgestellt, und die Benutzer in der Liste, die an die Initialisierungsmethode übergeben werden, werden zu Token Admin-Benutzern des Chaincodes.
  • Ein tokenisiertes Asset wird initialisiert, wodurch die token_id erstellt wird, eine eindeutige ID für diese bestimmte Tokeninstanz.
  • Konten müssen für jeden Benutzer erstellt werden, der Token oder tokenbezogene Vorgänge besitzt.
  • Wenn das Verhalten roles für das Token angegeben ist, müssen Benutzer Rollen hinzugefügt werden, bevor sie tokenbezogene Vorgänge abschließen können.
  • Tokenlebenszyklusmethoden können dann basierend auf den Verhaltensweisen verwendet werden, die für das Tokenasset angegeben wurden. Beispiel: Sie können eine Methode aufrufen, um Token für ein Konto zu kennzeichnen.

Zugriffskontrolle

Die Tokenisierungsunterstützung umfasst ein Zugriffskontrollfeature, das sowohl rollenbasierte als auch eigentumsbasierte Kontrollmechanismen unterstützt. Mit rollenbasierter Steuerung können Benutzer bestimmte Methoden mit einer verknüpften Rolle aufrufen, wie Token Admin oder Token Minter. Mit eigentumsbasierter Kontrolle können Sie Benutzern den Zugriff auf Assets einschränken, für die sie nicht verantwortlich sind. Mit der eigentumsbasierten Zugriffskontrolle können bestimmte Methoden von den Benutzern aufgerufen werden, die Eigentümer der Assets sind, wie Token Owner oder Account Owner. Spezifische Informationen zur Zugriffskontrolle für Methoden finden Sie in den einzelnen Einträgen für die Methoden, die in den folgenden Themen dokumentiert sind:
Die rollenbasierte Zugriffskontrolle unterstützt die folgenden Personas:
Tokenadministrator
Token Admin-Benutzer können zugewiesen werden, wenn ein Token Chaincode bereitgestellt wird. Die Benutzerinformationen Token Admin werden in der Statusdatenbank gespeichert. Ein Token Admin-Benutzer kann Token Admin-Berechtigungen für andere Benutzer erteilen und entfernen. Ein Token Admin-Benutzer kann seine eigenen Token Admin-Berechtigungen nicht entfernen. Ein Token Admin-Benutzer kann jedem Benutzer die Rolle Org Admin, den Minter, den Burner oder den Notar zuweisen.
Organisationsadministrator
Die erweiterten Token Taxonomy Framework-Methoden unterstützen die Rolle Org Admin. Ein Token Admin-Benutzer kann jedem Benutzer die Rolle Org Admin zuweisen. Org Admin-Benutzer verfügen über Administratorberechtigungen, jedoch nur innerhalb ihrer Organisation. Sie können Konten erstellen oder Kontensalden anzeigen, jedoch nur für Benutzer in ihrer Organisation. Org Admin-Benutzer mit einer Minter-, Burner- oder Notarrolle können diese Rolle anderen Benutzern in ihrer Organisation zuweisen.
Tokenminter
Ein Benutzer, dem die Minter-Rolle zugewiesen ist, ist ein Token Minter und kann Token neu definieren.
Token-Burner
Ein Benutzer, dem die Brennerrolle zugewiesen ist, ist eine Token Burner und kann Token brennen.
Token-Notar
Ein Benutzer, dem die Notarrolle zugewiesen ist, ist eine Token Notary. Eine Token Notary fungiert als Drittanbieter bei Transaktionen zwischen Zahlern und Zahlungsempfängern. Eine Token Notary kann entweder den Abschluss einer Tokenübertragung von einem Zahler zu einem Zahlungsempfänger auslösen oder die Token stattdessen auf das Konto des Zahlers zurückgeben.
Vault-Manager
Ein Benutzer, dem die Vault-Rolle zugewiesen ist, ist die Vault Manager. Die Vault Manager kann eine gesperrte NFT entsperren. Die Tresorrolle gilt nur für die erweiterten ERC-721- und ERC-1155-Standards. Die Zuweisung der Vault-Rolle zu einem Benutzer ist eine Voraussetzung für das Sperren von NFTs. Der Vault-Rolle kann nur ein Benutzer pro Chaincode zugewiesen werden.
Die eigentumsbasierte Zugriffskontrolle unterstützt die folgenden Personas:
Firmeneigentümer
Jeder Benutzer mit einem Account ist ein Account Owner.
Tokenverantwortlicher
Jeder Benutzer, der derzeit Eigentümer eines nicht fungiblen Tokens ist, ist die Token Owner dieses Tokens.

In einigen Methoden werden auch rollenbasierte Zugriffskontrolle und eigentumsbasierte Zugriffskontrolle kombiniert. Beispiel: Mit der rollenbasierten Zugriffskontrolle können Benutzer mit der Minter-Rolle Token erstellen. Mit der eigentumsbasierten Zugriffskontrolle kann ein nicht fungibler Tokeneigentümer die benutzerdefinierten Eigenschaften eines Tokens ändern, die Tokenmetadaten jedoch nicht ändern. Wenn ein Benutzer mit der Minter-Rolle ein nicht fungibles Token (NFT) erstellt, wird er Eigentümer der NFT. Als Eigentümer dieser NFT können sie die benutzerdefinierten Eigenschaften ändern (bei einem Kunstsammel-Token ist der Tokenpreis eine benutzerdefinierte Eigenschaft). Nachdem der Tokenersteller die NFT an einen anderen Benutzer übertragen hat, wird der zweite Benutzer der Eigentümer, und der Benutzer, der das Token erstellt hat, ist nicht mehr der Eigentümer des Tokens. Aufgrund der eigentumsbasierten Zugriffskontrolle kann der neue Eigentümer jetzt einen benutzerdefinierten Eigenschaftswert aktualisieren. Der vorherige Eigentümer kann dies jedoch nicht mehr. Aufgrund der rollenbasierten Zugriffskontrolle kann der vorherige Eigentümer eine NFT beibehalten, der neue Benutzer jedoch nicht.

Sie können auch eigene Zugriffskontrollfunktionen schreiben oder die Zugriffskontrolle deaktivieren. Der automatisch generierte Code, der den Zugriff steuert, wird in den folgenden Beispielen dargestellt.

TypeScript:
await this.Ctx.<Token Standard>Auth.checkAuthorization(...)
Start:
auth, err := t.Ctx.<Token Standard>Auth.CheckAuthorization(...)

Hinweis:

Um die automatisch generierte Zugriffskontrollfunktion zu entfernen, entfernen Sie die vorherige Codezeile aus dem TypeScript- oder Go-Projekt.

MVCC-Optimierung

Hyperledger Fabric-Datenbanken verwenden die Multi-Version Concurrency Control (MVCC), um Doppelausgaben und Dateninkonsistenz zu vermeiden. Wenn derselbe Status aktualisiert wird, überschreibt eine neue Version des Datensatzes die alte Version. Wenn Hintergrundanforderungen zum Aktualisieren desselben Schlüssels in einem Block vorhanden sind, wird möglicherweise ein Fehler in MVCC_READ_CONFLICT generiert.

Um MVCC-Fehler bei Übertragungs-, Minz-, Burn- und Hold-Vorgängen zu reduzieren, können Sie die MVCC-Optimierung für Token Chaincode aktivieren. Diese Optimierung funktioniert nur auf Oracle Blockchain Platform. Standardmäßig ist die Optimierung deaktiviert. Um die Optimierung zu aktivieren, führen Sie den folgenden Schritt aus.

  • CLI: Geben Sie den booleschen Parameter -m oder --enable_mvcc_optimization mit dem Befehl ochain init an. Standardmäßig ist der Parameter auf false festgelegt. Um die Optimierung zu aktivieren, fügen Sie der Befehlszeile ochain init -m true hinzu.
  • Visual Studio-Code: Wenn Sie einen Chaincode erstellen, wählen Sie im Fenster Chaincode erstellen die Option MVCC-Optimierung aktivieren aus.

Gehen Sie folgendermaßen vor, um die Optimierung mit Chaincode zu verwenden, der in früheren Versionen von Blockchain App Builder erstellt wurde:

  1. Nachdem Sie die neueste Version von Blockchain App Builder installiert haben, aktualisieren Sie den Chaincode wie unter Chaincode-Projekte in der CLI upgraden und Chaincode-Projekte in Visual Studio Code upgraden beschrieben.
  2. Bearbeiten Sie die Datei .ochain.json im Root-Ordner des Chaincodes, um enableMvccOptimization auf true zu setzen.
  3. Synchronisieren Sie den Chaincode, der die Optimierung hinzufügt und zwei neue Ordner im Stammordner des Chaincodes erstellt: statedb und tokens. Weitere Informationen zur Synchronisierung finden Sie unter Änderungen an Spezifikationsdateien mit generiertem Quellcode synchronisieren und Änderungen an Spezifikationsdateien mit generiertem Quellcode synchronisieren.

Andere Methoden zur Umgehung von MVCC_READ_CONFLICT-Fehlern, einschließlich der Wiederholungsanforderungen der Clientanwendung, wenn dieser Fehler generiert wird, oder der Verwendung einer Queue zur Erfassung von nebenläufigen Anforderungen, bevor sie an das Blockchain-Netzwerk gesendet werden. Weitere Informationen finden Sie unter Set-Semantik lesen und schreiben in der Hyperledger Fabric-Dokumentation.

Hinweis:

Die MVCC-Optimierung funktioniert nicht in hybriden Netzwerken, die sowohl Oracle Blockchain Platform- als auch Hyperledger Fabric-Peers umfassen, oder zum Testen in einem lokalen Hyperledger Fabric-Netzwerk. Aktivieren Sie die MVCC-Optimierung in hybriden Netzwerken nicht, da dies zu Inkonsistenzen zwischen Peers führen kann.