Blockchain App Builder prend l'entrée de votre fichier de spécification et génère un projet de code de chaîne entièrement fonctionnel. Le projet contient des classes et des fonctions générées automatiquement, des méthodes CRUD, des méthodes SDK, la validation automatique des arguments, la conversion de paramètres/déconversion de paramètres et la capacité de persistance transparente (ORM).
Si le projet de code de chaîne utilise le langage TypeScript, le projet échafaudé contient trois fichiers principaux :
main.ts
<chaincodeName>.model.ts
<chaincodeName>.controller.ts
Toutes les bibliothèques nécessaires sont installées et packagées. Le fichier
tsconfig.json
contient la configuration nécessaire pour compiler et créer le projet TypeScript.
Le fichier <chaincodeName>.model.ts
dans le sous-répertoire model
contient plusieurs définitions de ressource et le fichier <chaincodeName>.controller.ts
dans le sous-répertoire controller
contient le comportement des ressources et les méthodes CRUD.
Les différents décorateurs dans model.ts
et controller.ts
prennent en charge des fonctions telles que la validation automatique des arguments, la conversion des paramètres/déconversion des paramètres des arguments, la capacité de persistance transparente (ORM) et l'appel des interrogations enrichies.
Informations de référence :
Modèles
Chaque classe de modèle étend la classe OchainModel
, qui comporte une propriété en lecture seule supplémentaire appelée assetType
. Cette propriété peut être utilisée pour extraire uniquement les ressources de ce type. Toute modification de cette propriété est ignorée lors de la création et de la mise à jour de la ressource. La valeur de propriété par défaut est <modelName>
.
La classe
OchainModel
applique les comportements de décorateur aux propriétés de la classe.
@Id('supplierId')
export class Supplier extends OchainModel<Supplier> {
public readonly assetType = 'supplier';
@Mandatory()
@Validate(yup.string())
public supplierId: string;
Décorateurs
-
Décorateurs de classe
@Id(identifier)
- Ce décorateur identifie la propriété qui définit de manière unique l'immobilisation sous-jacente. Cette propriété est utilisée comme clé de l'enregistrement, qui représente cette ressource dans l'état du code de chaîne. Ce décorateur est automatiquement appliqué lorsqu'un nouveau projet TypeScript est échafaudé. L'argument 'identifier' du décorateur extrait la valeur du fichier de spécification.
@Id('supplierId')
export class Supplier extends OchainModel{
...
}
-
Décorateurs de propriété
- Plusieurs décorateurs de propriétés peuvent être utilisés. Les décorateurs sont résolus dans l'ordre de haut en bas.
@Mandatory()
- Cela marque la propriété suivante comme obligatoire et ne peut donc pas être ignorée lors de l'enregistrement dans le livre. S'il est ignoré, une erreur est générée.
@Mandatory()
public supplierID: string;
@Default(param)
- Cette propriété peut avoir une valeur par défaut. La valeur par défaut de l'argument (
param
) est utilisée lorsque la propriété est ignorée lors de l'enregistrement dans le livre.@Default('open for business')
@Validate(yup.string())
public remarks: string;
@Validate(param)
- La propriété suivante est validée par rapport au schéma présenté dans le paramètre. L'argument
param
prend un schéma yup et de nombreuses méthodes de schéma peuvent être chaînées ensemble. De nombreuses validations complexes peuvent être ajoutées. Pour plus de détails, consultez la page https://www.npmjs.com/package/yup.@Validate(yup.number().min(3))
public productsShipped: number;
@ReadOnly(param)
- Ce décorateur de propriétés marque la propriété sous-jacente comme ayant une valeur en lecture seule. La valeur de l'argument, par exemple param, est utilisée lorsque la propriété est enregistrée dans le livre. Une fois la valeur définie, elle ne peut pas être modifiée ni supprimée.
@ReadOnly('digicur')
public token_name: string;
@Embedded(PropertyClass)
- Ce décorateur de propriété marque la propriété sous-jacente comme une immobilisation intégrable. Il prend la classe intégrable en tant que paramètre. Cette classe doit étendre la classe
EmbeddedModel
. Ceci est validé par le décorateur.
- Dans cet exemple,
Employee
a une propriété nommée address
de type Address
, qui doit être intégrée à la ressource Employee
. Cela est indiqué par le décorateur @Embedded()
.
export class Employee extends OchainModel<Employee> {
public readonly assetType = 'employee';
@Mandatory()
@Validate(yup.string())
public emplyeeID: string;
@Mandatory()
@Validate(yup.string().max(30))
public firstName: string;
@Mandatory()
@Validate(yup.string().max(30))
public lastName: string;
@Validate(yup.number().positive().min(18))
public age: number;
@Embedded(Address)
public address: Address;
}
export class Address extends EmbeddedModel<Address> {
@Validate(yup.string())
public street: string;
@Validate(yup.string())
public city: string;
@Validate(yup.string())
public state: string;
@Validate(yup.string())
public country: string;
}
- Lorsqu'une nouvelle instance de la classe
Address
est créée, toutes les propriétés de la classe Address
sont automatiquement validées par le décorateur @Validate()
. Notez que la classe Address
n'a pas la propriété assetType
ou le décorateur de classe @Id()
. Cette ressource et ses propriétés ne sont pas enregistrées séparément dans le livre, mais sont enregistrées avec la ressource Employee
. Les ressources intégrées sont des classes définies par l'utilisateur qui fonctionnent comme des types de valeur. L'instance de cette classe ne peut être stockée dans le grand livre que dans le cadre de l'objet contenant (ressources OchainModel
). Tous les décorateurs ci-dessus sont appliqués automatiquement en fonction du fichier d'entrée lors de l'échafaudage du projet.
@Derived(STRATEGY, ALGORITHM, FORMAT)
- Ce décorateur est utilisé pour définir l'attribut dérivé d'autres propriétés. Ce décorateur a deux paramètres obligatoires :
STRATEGY
: Prend les valeurs CONCAT
ou HASH
. Nécessite un paramètre supplémentaire ALGORITHM
si HASH
est sélectionné. L'algorithme par défaut est sha256
; md5
est également pris en charge.
FORMAT
: Prend un tableau de chaînes de spécification et de valeurs à utiliser par la stratégie.
@Id('supplierID')
export class Supplier extends OchainModel<Supplier> {
public readonly assetType = 'supplier';
@Mandatory()
@Derived(STRATEGY.HASH.'sha256',['IND%1IND%2','license','name'])
@Validate(yup.string())
public supplierID: string;
@Validate(yup.string().min(2).max(4))
public license: string;
@Validate(yup.string().min(2).max(4))
public name: string;
-
Décorateurs de méthode
@Validator(…params)
- Ce décorateur est appliqué sur les méthodes de la classe de contrôleur principale. Ce décorateur est important pour l'analyse des arguments, la validation par rapport à tous les décorateurs de propriété et le retour d'un objet modèle/type. Les méthodes de contrôleur doivent avoir ce décorateur pour pouvoir être appelées. Il utilise plusieurs modèles créés par l'utilisateur ou des schémas yup comme paramètres.
- L'ordre des paramètres doit être exactement le même que celui des arguments de la méthode.
- Dans l'exemple suivant, la référence de modèle
Supplier
est transmise dans le paramètre qui correspond au type asset
dans l'argument de méthode. Lors de l'exécution, le décorateur analyse et convertit l'argument de méthode en objet JSON, valide les validateurs Supplier
et, après validation réussie, convertit l'objet JSON en objet Supplier
et l'affecte à la variable asset
. La méthode sous-jacente est finalement appelée.@Validator(Supplier)
public async createSupplier(asset: Supplier) {
return await this.Ctx.Model.save(asset);
}
- Dans l'exemple suivant, plusieurs références d'immobilisation sont transmises; elles correspondent aux types d'objet des arguments de méthode. Notez l'ordre des paramètres.
@Validator(Supplier, Manufacturer)
public async createProducts(supplier: Supplier, manufacturer: Manufacturer) {
}
- Outre les références de ressource, les objets de schéma yup peuvent également être transmis si les arguments sont de types de base. Dans l'exemple suivant,
supplierId
et rawMaterialSupply
sont de type string
et number
respectivement, de sorte que le schéma yup de type similaire et d'ordre correct est transmis au décorateur. Notez l'enchaînement des méthodes de schéma yup.@Validator(yup.string(), yup.number().positive())
public async fetchRawMaterial(supplierID: string, rawMaterialSupply: number) {
const supplier = await this.Ctx.Model.get(supplierID, Supplier);
supplier.rawMaterialAvailable = supplier.rawMaterialAvailable + rawMaterialSupply;
return await this.Ctx.Model.update(supplier);
}
ORM
La capacité de persistance transparente ou ORM simplifiée est saisie dans la classe Model
de l'objet Context (Ctx
). Si votre modèle appelle l'une des méthodes de trousse SDK suivantes, accédez-y à l'aide de this.Ctx.Model
.
Les méthodes de trousse SDK qui mettent en oeuvre ORM sont les suivantes :
save
- Appel de la méthode Hyperledger Fabric putState
get
- Appel de la méthode Hyperledger Fabric getState
update
- Appel de la méthode Hyperledger Fabric putState
delete
- Appel de la méthode Hyperledger Fabric deleteState
history
- Appel de la méthode Hyperledger Fabric getHistoryForKey
getByRange
- Appel de la méthode Hyperledger Fabric getStateByRange
getByRangeWithPagination
- Appel de la méthode Hyperledger Fabric getStateByRangeWithPagination
Pour plus d'informations, voir :
Méthodes de clé SDK.
Méthodes SDK
Note :
Depuis la version 21.3.2, la façon d'accéder aux méthodes ORM a changé. Exécutez la commande
ochain --version
pour déterminer la version du générateur d'applications Blockchain.
Dans les versions précédentes, les méthodes ORM étaient héritées de la classe OchainModel
. Dans les versions 21.3.2 et ultérieures, les méthodes sont définies sur l'objet de classe de contexte Model
(Ctx
). Pour appeler ces méthodes, accédez-y à l'aide de this.Ctx.Model.<method_name>
.
L'exemple suivant montre un appel de méthode dans les versions précédentes :
@Validator(Supplier)
public async createSupplier(asset: Supplier){
return await asset.save();
}
L'exemple suivant montre un appel de méthode à partir de la version 21.3.2 et des versions ultérieures :
@Validator(Supplier)
public async createSupplier(asset: Supplier) {
return await this.Ctx.Model.save(asset);
}
Après la mise à niveau vers la version 21.3.2, apportez cette modification à tous les projets de code de chaîne que vous avez créés avec une version antérieure de Blockchain App Builder. Si vous utilisez la commande sync
pour synchroniser les modifications entre le fichier de spécification et votre code source, les modifications sont automatiquement apportées à votre contrôleur pour les méthodes prêtes à l'emploi. Vous devez toujours résoudre manuellement les conflits.
-
save
- La méthode
save
ajoute les détails de l'appelant asset
au livre.
- Cette méthode appelle Hyperledger Fabric
putState
en interne. Toutes les opérations de tri et de déconversion sont traitées en interne. La méthode save
fait partie de la classe Model
, à laquelle vous accédez à l'aide de l'objet Ctx
.
-
Ctx.Model.save(asset: <Instance of Asset Class> , extraMetadata?: any) : Promise <any>
- Paramètres :
extraMetadata : any
(facultatif) - Pour enregistrer les métadonnées en dehors de l'immobilisation dans le livre.
- Retourne :
Promise<any>
- Retourne une promesse à l'achèvement
- Exemple :
@Validator(Supplier)
public async createSupplier(asset: Supplier) {
return await this.Ctx.Model.save(asset);
}
-
get
- La méthode
get
est une méthode de la classe OchainModel
héritée des classes de modèle concrètes de {chaincodeName}.model.ts
. La méthode get
fait partie de la classe Model
, à laquelle vous accédez à l'aide de l'objet Ctx
.
- Si vous souhaitez retourner une ressource au moyen de la valeur
id
indiquée, utilisez la méthode de contrôleur générique getAssetById
.
-
Ctx.Model.get(id: string, modelName: <Model Asset Class Name>) : Promise<asset>
- Paramètres :
id : string
- Clé utilisée pour enregistrer les données dans le livre.
modelName: <Model Asset Class Name>
- (Facultatif) Classe de ressource de modèle à retourner.
- Retourne :
Promise: <Asset>
- Si le paramètre modelName
n'est pas fourni et que des données existent dans le livre, Promise<object>
est retourné. Si le paramètre id
n'existe pas dans le livre, un message d'erreur est retourné. Si le paramètre modelName
est fourni, un objet de type <Asset>
est retourné. Même si une ressource avec la valeur id
indiquée est retournée à partir du livre, cette méthode s'occupe de la conversion dans le type d'appelant Asset
. Si l'immobilisation retournée à partir du livre n'est pas de type Asset
, une erreur est générée. Cette vérification est effectuée par la propriété assetType
en lecture seule dans la classe Model
.
- Exemple :
@Validator(yup.string())
public async getSupplierById(id: string) {
const asset = await this.Ctx.Model.get(id, Supplier);
return asset;
}
Dans l'exemple, asset
est du type Supplier
.
-
update
- La méthode
update
met à jour les détails de l'appelant asset
dans le livre. Cette méthode renvoie une promesse.
- Cette méthode appelle Hyperledger Fabric
putState
en interne. Toutes les opérations de tri et de déconversion sont traitées en interne. La méthode update
fait partie de la classe Model
, à laquelle vous pouvez accéder à l'aide de l'objet Ctx
.
-
Ctx.Model.update(asset: <Instance of Asset Class> , extraMetadata?: any) : Promise <any>
- Paramètres :
extraMetadata : any
(facultatif) - Pour enregistrer les métadonnées en dehors de l'immobilisation dans le livre.
- Retourne :
Promise<any>
- Retourne une promesse à l'achèvement
- Exemple :
@Validator(Supplier)
public async updateSupplier(asset: Supplier) {
return await this.Ctx.Model.update(asset);
}
-
delete
- Cette action supprime l'immobilisation du livre indiqué par
id
si elle existe. Cette méthode appelle la méthode Hyperledger Fabric deleteState
en interne. La méthode delete
fait partie de la classe Model
, à laquelle vous pouvez accéder à l'aide de l'objet Ctx
.
-
Ctx.Model.delete(id: string): Promise <any>
- Paramètres :
id : string
- Clé utilisée pour enregistrer les données dans le livre.
- Retourne :
Promise <any>
- Retourne une promesse à l'achèvement.
- Exemple :
@Validator(yup.string())
public async deleteSupplier(id: string) {
const result = await this.Ctx.Model.delete(id);
return result;
}
-
history
- La méthode
history
fait partie de la classe Model
, à laquelle vous pouvez accéder à l'aide de l'objet Ctx
. Cette méthode retourne l'historique des immobilisations fourni par id
à partir du livre, s'il existe.
- Cette méthode appelle la méthode Hyperledger Fabric
getHistoryForKey
en interne.
-
Ctx.Model.history(id: string): Promise <any>
- Paramètres :
id : string
- Clé utilisée pour enregistrer les données dans le livre.
- Retourne :
Promise <any[]>
- Retourne tout [] à l'achèvement.
- Exemple
@Validator(yup.string())
public async getSupplierHistoryById(id: string) {
const result = await this.Ctx.Model.history(id);
return result;
}
- Exemple de l'historique des ressources retournées pour
getSupplierHistoryById
:[
{
"trxId": "8ef4eae6389e9d592a475c47d7d9fe6253618ca3ae0bcf77b5de57be6d6c3829",
"timeStamp": 1602568005,
"isDelete": false,
"value": {
"assetType": "supplier",
"supplierId": "s01",
"rawMaterialAvailable": 10,
"license": "abcdabcdabcd",
"expiryDate": "2020-05-28T18:30:00.000Z",
"active": true
}
},
{
"trxId": "92c772ce41ab75aec2c05d17d7ca9238ce85c33795308296eabfd41ad34e1499",
"timeStamp": 1602568147,
"isDelete": false,
"value": {
"assetType": "supplier",
"supplierId": "s01",
"rawMaterialAvailable": 15,
"license": "valid license",
"expiryDate": "2020-05-28T18:30:00.000Z",
"active": true
}
}
]
-
getByRange
- La méthode
getByRange
est une méthode statique de la classe OchainModel
héritée des classes Model
concrètes de {chaincodeName}.model.ts
.
- Cette action retourne une liste des ressources comprises entre
startId
et endId
. Cette méthode appelle la méthode Hyperledger Fabric getStateByRange
en interne.
- Si le paramètre
modelName
n'est pas fourni, la méthode retourne Promise<Object [ ] >
. Si le paramètre modelName
est fourni, la méthode traite la conversion dans le type d'appelant Model
. Dans l'exemple suivant, le tableau de résultats est de type Supplier
. Si l'immobilisation retournée à partir du livre n'est pas de type Model
, elle ne sera pas incluse dans la liste. Cette vérification est effectuée par la propriété assetType
en lecture seule dans la classe Model
.
- Pour retourner toutes les ressources comprises entre
startId
et endId
, utilisez la méthode de contrôleur générique getAssetsByRange
.
-
Ctx.Model.getByRange(startId: string, endId: string, modelName: <Asset Model Class Name> ): Promise <any>
- Paramètres :
startId : string
- Clé de démarrage de l'intervalle. Inclus dans l'intervalle.
endId : string
- Clé de fin de l'intervalle. Exclu de l'intervalle.
modelName: <Model Asset Class Name>
- (Facultatif) Classe de ressource de modèle à retourner.
- Retourne :
Promise< Asset[ ] >
- Retourne le tableau de <Asset>
à l'achèvement.
- Exemple :
@Validator(yup.string(), yup.string())
public async getSupplierByRange(startId: string, endId: string) {
const result = await this.Ctx.Model.getByRange(startId, endId, Supplier);
return result;
}
-
getByRangeWithPagination
- La méthode
getByRangeWithPagination
est une méthode statique de la classe OchainModel
héritée des classes Model
concrètes de {chaincodeName}.model.ts
.
- Cette action retourne une liste des ressources comprises entre
startId
et endId
. Cette méthode appelle la méthode Hyperledger Fabric getStateByRangeWithPagination
en interne.
- Si le paramètre
modelName
n'est pas fourni, la méthode retourne Promise<Object [ ] >
. Si le paramètre modelName
est fourni, la méthode traite la conversion dans le type d'appelant Model
. Dans l'exemple suivant, le tableau de résultats est de type Supplier
. Si l'immobilisation retournée à partir du livre n'est pas de type Model
, elle ne sera pas incluse dans la liste. Cette vérification est effectuée par la propriété assetType
en lecture seule dans la classe Model
.
- Pour retourner toutes les ressources comprises entre
startId
et endId
, filtrées par taille de page et signets, utilisez la méthode de contrôleur générique getAssetsByRange
.
-
public async getByRangeWithPagination<T extends OchainModel<T>>(startId: string, endId: string, pageSize: number, bookmark?: string, instance?: new (data: any, skipMandatoryCheck: boolean, skipReadOnlyCheck: boolean) => T): Promise<T[]>
- Paramètres :
startId : string
- Clé de démarrage de l'intervalle. Inclus dans l'intervalle.
endId : string
- Clé de fin de l'intervalle. Exclu de l'intervalle.
pageSize : number
- Taille de page de l'interrogation.
bookmark : string
- Signet de l'interrogation. La sortie commence à partir de ce signet.
modelName: <Model Asset Class Name>
- (Facultatif) Classe de ressource de modèle à retourner.
- Retourne :
Promise< Asset[ ] >
- Retourne le tableau de <Asset>
à l'achèvement.
-
getId
- Lorsque la ressource a une clé dérivée
Id
, vous pouvez utiliser cette méthode pour obtenir un ID dérivé. Cette méthode retournera une erreur si la clé dérivée contient %t
(horodatage).
- Paramètres :
object
- L'objet doit contenir toutes les propriétés dont dépend la clé dérivée.
- Retourne :
- Retourne la clé dérivée sous forme de chaîne.
- Exemple :
@Validator(yup.string(), yup.string())
public async customGetterForSupplier(license: string, name: string){
let object = {
license : license,
name: name
}
const id = await this.Ctx.Model.getID(object);
return this.Ctx.Model.get(id);
}
Pour les méthodes de trousse SDK de jeton, voir les rubriques sous Prise en charge de la tokenisation à l'aide du générateur d'applications Blockchain.
Contrôleur
La classe de contrôleur principale étend OchainController
. Il n'y a qu'un seul contrôleur principal.
export class TSProjectController extends OchainController{
Vous pouvez créer n'importe quel nombre de classes, de fonctions ou de fichiers, mais seules les méthodes définies dans la classe de contrôleur principale peuvent être appelées de l'extérieur, le reste étant masqué.
Méthodes générées automatiquement
Comme décrit dans Fichier de spécification d'entrée, vous pouvez spécifier les méthodes CRUD à générer dans le fichier de spécification. Par exemple, si vous avez choisi de générer toutes les méthodes, le résultat sera similaire à ce qui suit :
@Validator(Supplier)
public async createSupplier(asset: Supplier) {
return await this.Ctx.Model.save(asset);
}
@Validator(yup.string())
public async getSupplierById(id: string) {
const asset = await this.Ctx.Model.get(id, Supplier);
return asset;
}
@Validator(Supplier)
public async updateSupplier(asset: Supplier) {
return await this.Ctx.Model.update(asset);
}
@Validator(yup.string())
public async deleteSupplier(id: string) {
const result = await this.Ctx.Model.delete(id);
return result;
}
@Validator(yup.string())
public async getSupplierHistoryById(id: string) {
const result = await this.Ctx.Model.history(id);
return result;
}
@Validator(yup.string(), yup.string())
public async getSupplierByRange(startId: string, endId: string) {
const result = await this.Ctx.Model.getByRange(startId, endId, Supplier);
return result;
}
Détails de la méthode du contrôleur
En dehors des méthodes CRUD et non CRUD ci-dessus, Blockchain App Builder fournit une prise en charge prête à l'emploi d'autres méthodes Hyperledger Fabric de notre contrôleur. Ces méthodes sont les suivantes :
getAssetById
getAssetsByRange
getAssetHistoryById
query
queryWithPagination
generateCompositeKey
getByCompositeKey
getTransactionId
getTransactionTimestamp
getChannelID
getCreator
getSignedProposal
getArgs
getStringArgs
getMspID
getNetworkStub
Note :
Ces méthodes sont disponibles avec le contexte
this
dans toute classe qui étend la classe
OChainController
.
Par exemple :
public async getModelById(id: string) {
const asset = await this.getAssetById(id);
return asset;
}
@Validator(yup.string(), yup.string())
public async getModelsByRange(startId: string, endId: string) {
const asset = await this.getAssetsByRange(startId, endId);
return asset;
}
public async getModelHistoryById(id: string) {
const result = await this.getAssetHistoryById(id);
return result;
}
-
getAssetById
- La méthode
getAssetById
retourne la ressource en fonction de id
fournie. Il s'agit d'une méthode générique qui est utilisée pour obtenir une immobilisation de tout type.
this.getAssetById(id: string): Promise<byte[]>
- Paramètres :
id : string
- Clé utilisée pour enregistrer les données dans le livre.
- Retourne :
Promise <byte [ ]>
- Retourne la promesse à l'achèvement. Vous devez convertir byte[]
en objet.
-
getAssetsByRange
- La méthode
getAssetsByRange
retourne toutes les ressources présentes de startId
(incluses) à endId
(exclusives), quels que soient les types de ressource. Il s'agit d'une méthode générique qui peut être utilisée pour obtenir des immobilisations de tout type.
this.getAssetsByRange(startId: string, endId: string):
Promise<shim.Iterators.StateQueryIterator>
- Paramètres :
startId : string
- Clé de démarrage de l'intervalle. Inclus dans l'intervalle.
endId : string
- Clé de fin de l'intervalle. Exclu de l'intervalle.
- Retourne :
Promise< shim.Iterators.StateQueryIterator>
- Retourne un itérateur à l'achèvement. Vous devez itérer dessus.
-
getAssetHistoryById
- La méthode
getAssetHistoryById
retourne l'itérateur d'historique d'une ressource pour id
fournie.
this.getAssetHistoryById(id: string):
Promise<shim.Iterators.HistoryQueryIterator>
- Paramètres :
id : string
- Clé utilisée pour enregistrer les données dans le livre.
- Retourne :
Promise<shim.Iterators.HistoryQueryIterator>
- Retourne un itérateur d'interrogation d'historique. Vous devez itérer dessus.
-
query
- La méthode
query
exécutera une interrogation de base de données SQL/Couch enrichie sur le livre. Cette méthode n'est prise en charge que pour le déploiement à distance sur Oracle Blockchain Platform. Il s'agit d'une méthode générique pour exécuter des interrogations SQL sur le grand livre.
this.query(queryStr: string):
Promise<shim.Iterators.StateQueryIterator>
- Paramètres :
queryStr : string
- Interrogation SQL/Couch DB enrichie.
- Retourne :
Promise<shim.Iterators.StateQueryIterator>
- Retourne un itérateur d'interrogation d'état. Vous devez itérer dessus.
-
queryWithPagination
- Cette méthode exécute une interrogation de base de données SQL/Couch enrichie sur le grand livre, filtrée par taille de page et signets. Cette méthode n'est prise en charge que pour le déploiement à distance sur Oracle Blockchain Platform. Il s'agit d'une méthode générique pour exécuter des interrogations SQL sur le grand livre.
-
public async queryWithPagination(query: string, pageSize: number, bookmark?: string)
- Paramètres :
query : string
- Interrogation SQL/Couch DB enrichie.
pageSize : number
- Taille de page de l'interrogation.
bookmark : string
- Signet de l'interrogation. La sortie commence à partir de ce signet.
- Retourne :
Promise<shim.Iterators.StateQueryIterator>
- Retourne un itérateur d'interrogation d'état. Vous devez itérer dessus.
-
generateCompositeKey
- Cette méthode génère et retourne la clé composite en fonction de
indexName
et des attributs indiqués dans les arguments.
this.generateCompositeKey(indexName: string, attributes:
string[]): string
- Paramètres :
indexName : string
- Type d'objet de la clé utilisée pour enregistrer les données dans le livre.
attributes: string[ ]
- Attributs basés sur la clé composite qui sera formée.
- Retourne :
string
- Retourne une clé composite.
-
getByCompositeKey
- Cette méthode retourne la ressource qui correspond à la clé et à la colonne données dans le paramètre d'attribut lors de la création de la clé composite. Le paramètre
indexOfId
indique l'index de la clé retournée dans le tableau de la méthode stub SplitCompositeKey
. En interne, cette méthode appelle getStateByPartialCompositeKey
, splitCompositeKey
et getState
de Hyperledger Fabric.
this.getByCompositeKey(key: string, columns: string[],
indexOfId: number): Promise<any []>
- Paramètres :
key: string
- Clé utilisée pour enregistrer les données dans le livre.
columns: string[ ]
- Les attributs basés sur la clé sont générés.
indexOfId: number
- Index d'attribut à extraire de la clé.
- Retourne :
Promise< any [ ]
- Retourne toute valeur []
à l'achèvement.
-
getTransactionId
- Retourne l'ID transaction pour la demande d'appel de code de chaîne courante. L'ID transaction identifie de manière unique la transaction dans la portée du canal.
this.getTransactionId(): string
- Paramètres :
- Retourne :
string
- Retourne l'ID transaction pour la demande d'appel de code de chaîne courante.
-
getTransactionTimestamp
- Retourne l'horodatage auquel la transaction a été créée. Ceci est tiré de la transaction
ChannelHeader
, donc il indiquera l'horodatage du client, et aura la même valeur pour tous les endossants.
this.getTransactionTimestamp(): Timestamp
- Paramètres :
id : string
- Clé utilisée pour enregistrer les données dans le livre.
- Retourne :
Timestamp
- Retourne l'heure à laquelle la transaction a été créée.
-
getChannelID
- Retourne l'ID canal à traiter pour la proposition de code de chaîne.
this.getChannelID(): string
- Paramètres :
- Retourne :
string
- Retourne l'ID canal.
-
getCreator
- Retourne l'objet d'identité de l'émetteur de l'appel de chaîne.
this.getCreator(): shim.SerializedIdentity
- Paramètres :
- Retourne :
shim.SerializedIdentity
- Retourne l'objet d'identité.
-
getSignedProposal
- Retourne un objet entièrement décodé de la proposition de transaction signée.
this.getSignedProposal():
shim.ChaincodeProposal.SignedProposal
- Paramètres :
- Retourne :
shim.ChaincodeProposal.SignedProposal
- Retourne l'objet décodé de la proposition de transaction signée.
-
getArgs
- Retourne les arguments en tant que tableau de chaînes à partir de la demande d'appel du code de chaîne.
this.getArgs(): string[]
- Paramètres :
- Retourne :
string [ ]
- Retourne les arguments en tant que tableau de chaînes à partir de l'appel du code de chaîne.
-
getStringArgs
- Retourne les arguments en tant que tableau de chaînes à partir de la demande d'appel du code de chaîne.
this.getStringArgs(): string[]
- Paramètres :
- Retourne :
string [ ]
- Retourne les arguments en tant que tableau de chaînes à partir de l'appel du code de chaîne.
-
getMspID
- Retourne l'ID MSP de l'identité appelante.
this.getMspID(): string
- Paramètres :
- Retourne :
string
- Retourne l'ID MSP de l'identité appelante.
-
getNetworkStub
- L'utilisateur peut accéder au talon de cale en appelant la méthode
getNetworkStub
. Cela aidera l'utilisateur à écrire sa propre implémentation de travailler directement avec les ressources.
this.getNetworkStub(): shim.ChaincodeStub
- Paramètres :
- Retourne :
shim.ChaincodeStub
- Retourne le talon de réseau de code de chaîne.
-
invokeCrossChaincode
- Vous pouvez utiliser cette méthode dans un code de chaîne pour appeler une fonction dans un autre code de chaîne. Les deux codes de chaîne doivent être installés sur le même pair.
-
this.invokeCrossChaincode(chaincodeName: string, methodName: string, args: string[], channelName: string): Promise<any>
- Paramètres :
chaincodeName
- Nom du code de chaîne à appeler.
methodName
- Nom de la méthode à appeler dans le code de chaîne.
arg
- Argument de la méthode appelante.
channelName
- Canal sur lequel se trouve le code de chaîne à appeler.
- Retourne :
Promise<any>
- Retourne un objet JSON qui contient trois champs :
isValid
- true
si l'appel est valide.
payload
- Sortie retournée par l'appel inter-code, en tant qu'objet JSON.
message
- Message retourné par l'appel inter-code, au format UTF-8.
-
invokeChaincode
- Vous pouvez utiliser cette méthode dans un code de chaîne pour appeler une fonction dans un autre code de chaîne. Les deux codes de chaîne doivent être installés sur le même pair.
-
this.invokeChaincode(chaincodeName: string, methodName: string, args: string[], channelName: string): Promise<any>
- Paramètres :
chaincodeName
- Nom du code de chaîne à appeler.
methodName
- Nom de la méthode à appeler dans le code de chaîne.
arg
- Argument de la méthode appelante.
channelName
- Canal sur lequel se trouve le code de chaîne à appeler.
- Retourne :
Promise<any>
- Retourne un objet JSON qui contient trois champs :
isValid
- true
si l'appel est valide.
payload
- Sortie retournée par l'appel inter-code, en tant qu'objet JSON.
message
- Message retourné par l'appel inter-code, au format UTF-8.
Méthodes personnalisées
Les méthodes personnalisées suivantes ont été générées à partir de notre exemple de fichier de spécification.
executeQuery
montre comment les interrogations riches en SQL peuvent être appelées. Les validateurs par rapport aux arguments sont ajoutés automatiquement par Blockchain App Builder en fonction du type d'argument spécifié dans le fichier de spécification.
/**
*
* BDB sql rich queries can be executed in OBP CS/EE.
* This method can be invoked only when connected to remote OBP CS/EE network.
*
*/
@Validator(yup.string()}
public async executeQuery(query: string) {
const result = await OchainController.query(query);
return result;
}
@Validator(yup.string(), yup.number()}
public async fetchRawMaterial(supplierId: string, rawMaterialSupply: number) {
}
@Validator(yup.string(), yup.string(), yup.number())
public async getRawMaterialFromSupplier(manufacturerId: string, supplierId: string, rawMaterialSupply: number) {
}
@Validator(yup.string(), yup.number(), yup.number())
public async createProducts(manufacturerId: string, rawMaterialConsumed: number, productsCreated: number) {
}
public async sendProductsToDistribution() {
}
Méthode d'initialisation
Une méthode init
personnalisée est fournie dans le contrôleur avec une définition vide. Si vous utilisez le générateur d'applications de chaîne de blocs pour déployer ou mettre à niveau, la méthode init
est appelée automatiquement. Si vous déployez ou effectuez une mise à niveau à partir de la console Oracle Blockchain Platform sur la plate-forme Hyperledger Fabric v1.4.7, la méthode init
est également appelée automatiquement. Si vous déployez ou effectuez une mise à niveau à partir de la console Oracle Blockchain Platform sur la plate-forme Hyperledger Fabric v2.x, vous devez appeler la méthode init
manuellement. Vous pouvez utiliser un outil tiers tel que Postman pour appeler manuellement la méthode init
.
export class TestTsProjectController extends OchainController {
public async init(params: any) {
return;
}
Si vous souhaitez initialiser n'importe quel état d'application à ce stade, vous pouvez utiliser cette méthode pour ce faire.