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.
- 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.
Standard | Unterstützte Tokentypen |
---|---|
Token Taxonomie-Framework |
|
ERC-721 |
|
ERC-1155 |
|
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 Tokenworkflowdiagramm](img/token_workflow.png)
- Entscheiden Sie, welcher Tokenstandard verwendet werden soll.
- Legen Sie fest, welches Tokenverhalten angegeben werden soll (
mintable
,transferable
,divisible
,indivisible
,singleton
,holdable
,burnable
undroles
). - 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.
- 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
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:
- Tokenadministrator
Token Admin
-Benutzer können zugewiesen werden, wenn ein Token Chaincode bereitgestellt wird. Die BenutzerinformationenToken Admin
werden in der Statusdatenbank gespeichert. EinToken Admin
-Benutzer kannToken Admin
-Berechtigungen für andere Benutzer erteilen und entfernen. EinToken Admin
-Benutzer kann seine eigenenToken Admin
-Berechtigungen nicht entfernen. EinToken Admin
-Benutzer kann jedem Benutzer die RolleOrg Admin
, den Minter, den Burner oder den Notar zuweisen.- Organisationsadministrator
- Die erweiterten Token Taxonomy Framework-Methoden unterstützen die Rolle
Org Admin
. EinToken Admin
-Benutzer kann jedem Benutzer die RolleOrg 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
. EineToken Notary
fungiert als Drittanbieter bei Transaktionen zwischen Zahlern und Zahlungsempfängern. EineToken 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
. DieVault 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.
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.
await this.Ctx.<Token Standard>Auth.checkAuthorization(...)
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 Befehlochain init
an. Standardmäßig ist der Parameter auffalse
festgelegt. Um die Optimierung zu aktivieren, fügen Sie der Befehlszeileochain 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:
- 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.
- Bearbeiten Sie die Datei
.ochain.json
im Root-Ordner des Chaincodes, umenableMvccOptimization
auftrue
zu setzen. - Synchronisieren Sie den Chaincode, der die Optimierung hinzufügt und zwei neue Ordner im Stammordner des Chaincodes erstellt:
statedb
undtokens
. 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.