Prise en charge de la segmentation en jetons à l'aide de Blockchain App Builder
Vous pouvez utiliser Blockchain App Builder pour gérer le cycle de vie complet d'un jeton. Vous pouvez créer des jetons pour les ressources existantes et générer automatiquement des classes de jetons et des méthodes à utiliser pour la gestion du cycle de vie des jetons.
Segmentation en sèmes
La segmentation en jetons est un processus où les actifs physiques ou numériques sont représentés par des jetons, qui peuvent être transférés, suivis et stockés sur une blockchain. En représentant les immobilisations en tant que jetons, vous pouvez utiliser le registre de chaîne de blocs pour établir l'état et la propriété d'une immobilisation, et utiliser les fonctions standard de la plate-forme de chaîne de blocs pour transférer la propriété d'une immobilisation.
Blockchain App Builder inclut la prise en charge de la segmentation en jetons : les classes et les méthodes de jeton sont générées automatiquement, et des méthodes de jeton supplémentaires sont fournies afin que les développeurs puissent créer une logique métier complexe pour les jetons. Le projet généré automatiquement contient des classes de cycle de vie et des fonctions de jeton, des méthodes CRUD et des méthodes SDK de jeton supplémentaires, et prend en charge la validation automatique des arguments, la sérialisation/désérialisation et la capacité de persistance transparente. Vous pouvez utiliser ces méthodes de contrôleur pour initialiser des jetons, contrôler l'accès, configurer des comptes, gérer des rôles et gérer le cycle de vie des jetons.
Le diagramme suivant présente l'architecture de jeton implémentée par Blockchain App Builder, y compris l'API de jeton et le SDK de jeton.
- API de jeton générée automatiquement
- Blockchain App Builder génère automatiquement des méthodes pour prendre en charge les jetons et les cycles de vie des jetons. Vous pouvez utiliser ces méthodes pour initialiser les jetons, gérer les rôles et les comptes et effectuer d'autres tâches de cycle de vie des jetons sans codage supplémentaire.
- Kit SDK de jeton
- Le SDK Token inclut des méthodes qui vous aident à développer une logique métier complexe pour les applications de token.
- Optimisation MVCC (Multiversion Concurrency Control)
- L'optimisation MVCC pour le code chaîne de jeton peut réduire les erreurs pour les opérations de transfert, de mise en attente, de gravure et de mise en attente.
Jetons et modèle de compte/solde
Blockchain App Builder prend en charge les jetons fongibles et non fongibles. Les jetons fongibles ont une valeur interchangeable. Toute quantité de jetons fongibles a la même valeur que toute autre quantité égale de la même classe de jetons. Les jetons non fongibles sont uniques. Les jetons peuvent également être entiers ou fractionnaires. Les jetons fractionnaires peuvent être subdivisés en parties plus petites, en fonction d'un nombre spécifié de décimales.
Les jetons peuvent également être décrits par des comportements. Les comportements pris en charge pour les jetons fongibles sont les suivants : mintable
, transferable
, divisible
, holdable
, burnable
et roles
(minter
, burner
et holder
). Les comportements pris en charge pour les jetons non fongibles sont les suivants : mintable
, transferable
, singleton
, indivisible
, burnable
et roles
(minter
et burner
).
La fonctionnalité de segmentation en jetons utilise un modèle de compte/solde pour représenter les actifs segmentés en jetons en tant que soldes dans un compte. Les comptes sont similaires aux comptes bancaires standard, où les dépôts et les transferts et autres transitions d'état affectent le solde d'un compte. Le solde de chaque compte fait l'objet d'un suivi global afin de garantir la validité des montants de transaction. Le solde en attente (pour les jetons fongibles) et l'historique des transactions sont également suivis.
Tout utilisateur qui possède des jetons ou effectue des opérations liées aux jetons à tout moment doit avoir un compte sur le réseau. Chaque compte est identifié par un ID unique (account_id
). L'ID de compte est créé en combinant un nom utilisateur ou un ID de courriel (user_id
) du propriétaire de l'instance ou de l'utilisateur connecté à l'instance avec l'ID de fournisseur de services d'appartenance (org_id
) de l'utilisateur dans l'organisation réseau en cours. Des méthodes prêtes à l'emploi sont fournies pour la création de comptes. Etant donné que l'ID de compte inclut l'ID d'organisation, les utilisateurs peuvent être pris en charge dans plusieurs organisations.
Normes des jetons
Blockchain App Builder étend les normes et les classifications du Token Taxonomy Framework, de la norme ERC-721 et de la norme ERC-1155 pour définir l'anatomie et le comportement des jetons. ERC-1155 est une norme qui prend en charge les jetons fongibles et non fongibles (NFT). ERC-721 est une norme pour les NFT. Le cadre de taxonomie par jeton a été développé par l'initiative de taxonomie par jeton. Pour plus d'informations, reportez-vous à la section Token Taxonomy Framework.
Standard | Types de jeton pris en charge |
---|---|
Structure de taxonomie de jeton |
|
MODÈLE:ERC-721 |
|
MODÈLE:ERC-1155 |
|
Flux de création de jetons
Comme Blockchain App Builder prend en charge la création de jetons en étendant la syntaxe du fichier de spécification d'entrée, vous créez des projets spécifiques aux jetons de la même manière que vous créez d'autres projets, soit à l'aide de la CLI, soit dans Visual Studio Code. Pour plus d'informations, reportez-vous à Fichier de spécification d'entrée.
![Diagramme de workflow de jeton Diagramme de workflow de jeton](img/token_workflow.png)
- Déterminez la norme de jeton à utiliser.
- Déterminez les comportements de jeton à indiquer (
mintable
,transferable
,divisible
,indivisible
,singleton
,holdable
,burnable
etroles
). - Définissez la ressource de jeton et ses propriétés dans le fichier de spécification d'entrée.
- Mettez à l'échelle le projet de code chaîne à partir du fichier de spécification d'entrée. Cela crée un projet échafaudé, y compris un modèle qui contient la définition de la ressource de jeton et ses propriétés, ainsi qu'un contrôleur qui contient le comportement et les méthodes du jeton.
- Déployez et testez le projet de code chaîne.
- Un code chaîne de jeton est déployé et les utilisateurs de la liste transmis à la méthode d'initialisation deviennent des utilisateurs
Token Admin
du code chaîne. - Une ressource avec jeton est initialisée, ce qui crée
token_id
, un identificateur unique pour cette instance particulière de jeton. - Des comptes doivent être créés pour chaque utilisateur qui possédera des jetons ou effectuera des opérations liées aux jetons.
- Si le comportement
roles
est indiqué pour le jeton, des rôles doivent être ajoutés aux utilisateurs avant de pouvoir effectuer les opérations liées au jeton. - Les méthodes de cycle de vie des jetons peuvent ensuite être utilisées, en fonction des comportements spécifiés pour la ressource de jeton. Par exemple, vous pouvez appeler une méthode pour obtenir des jetons pour un compte.
Contrôle d'accès
Token Admin
ou Token Minter
. Avec le contrôle basé sur la propriété, vous pouvez empêcher les utilisateurs d'accéder à des ressources qu'ils ne possèdent pas. Avec le contrôle d'accès basé sur la propriété, des méthodes spécifiques peuvent être appelées par les utilisateurs propriétaires des ressources, tels que Token Owner
ou Account Owner
. Pour obtenir des informations spécifiques sur le contrôle d'accès des méthodes, reportez-vous aux entrées individuelles des méthodes documentées dans les rubriques suivantes :
- Projet de jeton TypeScript échafaudé pour ERC-1155
- Projet de jeton Go échafaudé pour ERC-1155
- Échafaudé TypeScript Projet NFT pour ERC-721
- Projet d'échafaudage Go NFT pour ERC-721
- Projet TypeScript échafaudé pour le cadre de taxonomie par jeton
- Projet Go échafaudé pour le framework de taxonomie par jeton
- Administrateur de jetons
- Les utilisateurs
Token Admin
peuvent être affectés lorsqu'un code chaîne de jeton est déployé. Les informations utilisateurToken Admin
sont enregistrées dans la base de données d'état. Un utilisateurToken Admin
peut accorder et enlever des privilègesToken Admin
pour d'autres utilisateurs. Un utilisateurToken Admin
ne peut pas enlever ses propres privilègesToken Admin
. Un utilisateurToken Admin
peut affecter le rôleOrg Admin
, minter, burner ou notary à n'importe quel utilisateur. - Administration des organisations
- Les méthodes étendues de structure de taxonomie par jeton prennent en charge le rôle
Org Admin
. Un utilisateurToken Admin
peut affecter le rôleOrg Admin
à n'importe quel utilisateur. Les utilisateursOrg Admin
disposent de privilèges d'administration, mais uniquement au sein de leur organisation. Ils peuvent créer des comptes ou voir les soldes des comptes, mais uniquement pour les utilisateurs de leur organisation. Les utilisateursOrg Admin
disposant d'un rôle de mineur, de graveur ou de notaire peuvent affecter ce rôle à d'autres utilisateurs de leur organisation. - Minterjeton
- Un utilisateur auquel le rôle minter est affecté est un utilisateur
Token Minter
et peut affecter des jetons. - Burner de jetons
- Un utilisateur auquel le rôle de brûleur est affecté est
Token Burner
et peut graver des jetons. - Notaire de jeton
- Un utilisateur auquel le rôle notaire est affecté est un utilisateur
Token Notary
. UnToken Notary
agit en tant que tiers dans les transactions entre les payeurs et les bénéficiaires. Un élémentToken Notary
peut soit déclencher la fin d'un transfert de jeton d'un payeur vers un bénéficiaire, soit renvoyer les jetons vers le compte du payeur. - Gestionnaire de pannes
- L'utilisateur auquel le rôle de coffre est affecté est
Vault Manager
.Vault Manager
peut déverrouiller une NFT verrouillée. Le rôle de coffre-fort s'applique uniquement aux normes étendues ERC-721 et ERC-1155. L'affectation du rôle d'archivage sécurisé à un utilisateur est une condition préalable au verrouillage des NFT. Le rôle de coffre ne peut être affecté qu'à un seul utilisateur par code chaîne.
Certaines méthodes combinent également le contrôle d'accès basé sur les rôles et le contrôle d'accès basé sur la propriété. Par exemple, le contrôle d'accès basé sur les rôles permet à un utilisateur doté du rôle de mineur de créer des jetons. Avec le contrôle d'accès basé sur la propriété, un propriétaire de jeton non fongible peut modifier les propriétés personnalisées d'un jeton, mais ne peut pas modifier les métadonnées du jeton. Lorsqu'un utilisateur doté du rôle minter crée un jeton non fongible (NFT), il devient le propriétaire du NFT. En tant que propriétaire de ce NFT, ils peuvent modifier les propriétés personnalisées (pour un jeton de collection d'art, le prix du jeton est une propriété personnalisée). Une fois que le créateur du jeton a transféré la NFT à un autre utilisateur, le deuxième utilisateur devient le propriétaire et l'utilisateur qui a créé le jeton n'est plus le propriétaire du jeton. En raison du contrôle d'accès basé sur la propriété, le nouveau propriétaire peut désormais mettre à jour une valeur de propriété personnalisée, mais le propriétaire précédent ne le peut plus. En raison du contrôle d'accès basé sur les rôles, le propriétaire précédent peut toujours effectuer une opération NFT, mais le nouvel utilisateur ne le peut pas.
Vous pouvez également écrire vos propres fonctions de contrôle d'accès ou désactiver le contrôle d'accès. Le code généré automatiquement qui contrôle l'accès est illustré dans les exemples suivants.
await this.Ctx.<Token Standard>Auth.checkAuthorization(...)
auth, err := t.Ctx.<Token Standard>Auth.CheckAuthorization(...)
Remarques :
Pour enlever la fonction de contrôle d'accès générée automatiquement, enlevez la ligne de code précédente de votre projet TypeScript ou Go.Optimisation MVCC
Les bases de données Hyperledger Fabric utilisent le contrôle de simultanéité d'accès multiversion (MVCC) pour éviter les doubles dépenses et les incohérences de données. Lorsque le même état est mis à jour, une nouvelle version de l'enregistrement écrase l'ancienne version. Si des demandes simultanées de mise à jour de la même clé dans un bloc existent, une erreur MVCC_READ_CONFLICT peut être générée.
Afin de réduire les erreurs MVCC pour les opérations de transfert, de mise en veille, de gravure et de mise en attente, vous pouvez activer l'optimisation MVCC pour le code chaîne de jeton. Cette optimisation fonctionne uniquement sur Oracle Blockchain Platform. Par défaut, l'optimisation est désactivée. Pour activer l'optimisation, effectuez l'étape suivante applicable.
- CLI : indiquez le paramètre booléen
-m
ou--enable_mvcc_optimization
à l'aide de la commandeochain init
. La valeur par défaut estfalse
. Pour activer l'optimisation, ajoutez-m true
à la ligne de commandeochain init
. - Visual Studio Code : lorsque vous créez un code chaîne, sélectionnez Activer l'optimisation MVCC dans la fenêtre Créer un code chaîne.
Pour utiliser l'optimisation avec le code chaîne créé dans les versions précédentes de Blockchain App Builder, procédez comme suit :
- Après avoir installé la dernière version de Blockchain App Builder, mettez à niveau le code chaîne comme décrit dans Mise à niveau des projets de code chaîne dans l'interface de ligne de commande et Mise à niveau des projets de code chaîne dans Visual Studio Code.
- Modifiez le fichier
.ochain.json
dans le dossier racine du code chaîne pour définirenableMvccOptimization
surtrue
. - Synchronisez le code chaîne, ce qui ajoute l'optimisation et crée deux dossiers dans le dossier racine du code chaîne :
statedb
ettokens
. Pour plus d'informations sur la synchronisation, voir Synchroniser les modifications de fichier de spécification avec le code source généré et Synchroniser les modifications de fichier de spécification avec le code source généré.
D'autres méthodes pour contourner les erreurs MVCC_READ_CONFLICT, notamment les demandes de nouvelle tentative de l'application client lorsque cette erreur est générée ou l'utilisation d'une file d'attente pour capturer les demandes simultanées avant leur envoi au réseau de chaîne de blocs. Pour plus d'informations, reportez-vous à la section Read-Write set semantics dans la documentation Hyperledger Fabric.
Remarques :
L'optimisation MVCC ne fonctionne pas sur les réseaux hybrides qui incluent à la fois des homologues Oracle Blockchain Platform et Hyperledger Fabric, ni pour les tests sur un réseau Hyperledger Fabric local. N'activez pas l'optimisation MVCC sur les réseaux hybrides, car cela pourrait entraîner des incohérences entre les pairs.