ブロックチェーン・アプリケーション・ビルダーは、仕様ファイルから入力を受け取り、完全に機能しているスキャフォールド済チェーンコード・プロジェクトを生成します。このプロジェクトには、自動的に生成されたクラスと関数、CRUDメソッド、SDKメソッド、引数の自動検証、マーシャリング/アンマーシャリングおよび透過的永続性機能(ORM)が含まれます。
チェーンコード・プロジェクトでTypeScript言語を使用する場合、スキャフォールド済プロジェクトには次の3つのメイン・ファイルが含まれます:
main.ts
<chaincodeName>.model.ts
<chaincodeName>.controller.ts
必要なすべてのライブラリがインストールされ、パッケージ化されています。
tsconfig.json
ファイルには、TypeScriptプロジェクトのコンパイルおよびビルドに必要な構成が含まれています。
model
サブディレクトリの<chaincodeName>.model.ts
ファイルには複数のアセット定義が含まれ、controller
サブディレクトリの<chaincodeName>.controller.ts
ファイルにはアセットの動作とCRUDメソッドが含まれます。
model.ts
およびcontroller.ts
のデコレータは、引数の自動検証、引数の整列化/非整列の化、透過的永続性機能(ORM)およびリッチ問合せのコールなどの機能をサポートしています。
モデル
すべてのモデル・クラスは、OchainModel
クラスを拡張します。このクラスには、assetType
という追加の読取り専用プロパティがあります。このプロパティは、このタイプのアセットのフェッチにのみ使用できます。このプロパティへの変更は、アセットの作成および更新時に無視されます。デフォルトのプロパティ値は<modelName>
です。
OchainModel
クラスは、クラスのプロパティに対してデコレータの動作を強制します。
@Id('supplierId')
export class Supplier extends OchainModel<Supplier> {
public readonly assetType = 'supplier';
@Mandatory()
@Validate(yup.string())
public supplierId: string;
デコレータ
-
クラス・デコレータ
@Id(identifier)
- このデコレータは、基礎となるアセットを一意に定義するプロパティを識別します。このプロパティは、チェーンコードの状態でこのアセットを表すレコードのキーとして使用されます。このデコレータは、新しいTypeScriptプロジェクトがスキャフォールドされると自動的に適用されます。デコレータの
identifier
引数は、仕様ファイルから値を取得します。@Id('supplierId')
export class Supplier extends OchainModel{
...
}
-
プロパティ・デコレータ
- 複数のプロパティ・デコレータを使用できます。デコレータは上から下の順に解決されます。
@Mandatory()
- このデコレータは、次のプロパティを必須としてマークします。これにより、元帳への保存中にスキップできません。スキップすると、エラーがスローされます。
@Mandatory()
public supplierID: string;
@Default(param)
- このデコレータは、次のプロパティにデフォルト値があることを示します。台帳への保存中にプロパティがスキップされると、引数(
param
)のデフォルト値が使用されます。@Default('open for business')
@Validate(yup.string())
public remarks: string;
@Validate(param)
- このデコレータに続くプロパティは、パラメータで指定されたスキーマに対して検証されます。引数
param
はyupスキーマを使用し、複合検証を追加するために複数のスキーマ・メソッドをまとめることができます。詳細は、https://www.npmjs.com/package/yupを参照してください。@Validate(yup.number().min(3))
public productsShipped: number;
@ReadOnly(param)
- このプロパティ・デコレータは、基礎となるプロパティを読取り専用値としてマークします。引数内の値(paramなど)は、プロパティが台帳に保存されるときに使用されます。一度値を設定すると、編集や削除はできません。
@ReadOnly('digicur')
public token_name: string;
@Embedded(PropertyClass)
- このプロパティ・デコレータは、基礎となるプロパティを埋込み可能アセットとしてマークします。埋込み可能クラスをパラメータとして使用します。このクラスは、
EmbeddedModel
クラスを拡張する必要があります。この要件はデコレータによって検証されます。
- 次の例では、
Employee
クラスには、Employee
アセット内に埋め込まれるAddress
タイプのaddress
というプロパティが含まれます。これは、@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;
}
Address
クラスの新しいインスタンスが作成されると、Address
クラスのすべてのプロパティが@Validate()
デコレータによって自動的に検証されます。Address
クラスには、assetType
プロパティまたは@Id()
クラス・デコレータがありません。このアセットとそのプロパティは、レジャーに個別に保存されませんが、Employee
アセットとともに保存されます。埋込みアセットは、値タイプとして機能するユーザー定義クラスです。このクラスのインスタンスは、含まれているオブジェクト(OchainModel
アセット)の一部としてのみレジャーに格納できます。前述のデコレータはすべて、プロジェクトのスキャフォールド時に入力ファイルに基づいて自動的に適用されます。
@Derived(STRATEGY, ALGORITHM, FORMAT)
- このデコレータは、他のプロパティから導出された属性を定義するために使用します。このデコレータには、次の2つの必須パラメータがあります:
STRATEGY
: CONCAT
またはHASH
の値を取得します。HASH
が指定されている場合は、追加のパラメータALGORITHM
が必要です。デフォルトのアルゴリズムはsha256
で、md5
もサポートされています。
FORMAT
: 戦略で使用される仕様文字列と値の配列を取得します。
@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;
-
メソッド・デコレータ
@Validator(…params)
- このデコレータは、メイン・コントローラ・クラスのメソッドに適用されます。このデコルタは、引数を解析し、すべてのプロパティ・デコレータに対して検証し、モデル/タイプ・オブジェクトを返す際に重要です。コントローラ・メソッドを呼び出すには、このデコレータが必要です。複数のユーザーで作成されたモデルまたはyupスキーマをパラメータとして使用します。
- パラメータの順序は、メソッド内の引数の順序とまったく同じである必要があります。
- 次の例では、メソッド引数の
asset
タイプに対応するパラメータでSupplier
モデル参照が渡されます。実行時に、デコレータはメソッド引数を解析してJSONオブジェクトに変換し、Supplier
バリデータに対して検証し、検証に成功すると、JSONオブジェクトをSupplier
オブジェクトに変換してasset
変数に割り当てます。その後、基礎となるメソッドが最終的にコールされる。@Validator(Supplier)
public async createSupplier(asset: Supplier) {
return await this.Ctx.Model.save(asset);
}
- 次の例では、複数のアセット参照が渡されます。これらはメソッド引数のオブジェクト・タイプに対応しています。パラメータの順番に注意してください。
@Validator(Supplier, Manufacturer)
public async createProducts(supplier: Supplier, manufacturer: Manufacturer) {
}
- アセット参照とは別に、YUPスキーマ・オブジェクトも渡すことができます(引数は基本型の場合)。次の例では、
supplierId
およびrawMaterialSupply
はそれぞれstring
およびnumber
型であるため、同様の型および正しい順序のyupスキーマがデコレータに渡されます。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
透過的永続性機能または簡略化されたORMは、コンテキスト(Ctx
)オブジェクトのModel
クラスで取得されます。モデルが次のSDKメソッドのいずれかをコールする場合は、this.Ctx.Model
を使用してアクセスします。
次のSDKメソッドは、ORMを実装します。
save
は、Hyperledger FabricのputState
メソッドをコールします。
get
は、Hyperledger FabricのgetState
メソッドをコールします。
update
は、Hyperledger FabricのputState
メソッドをコールします。
delete
は、Hyperledger FabricのdeleteState
メソッドをコールします。
history
は、Hyperledger FabricのgetHistoryForKey
メソッドをコールします。
getByRange
は、Hyperledger FabricのgetStateByRange
メソッドをコールします。
getByRangeWithPagination
は、Hyperledger Fabric getStateByRangeWithPagination
メソッドをコールします。
詳細は、
「SDKメソッド」を参照してください。
SDKメソッド
ノート:
バージョン21.3.2以降、ORMメソッドへのアクセス方法が変更されました。
ochain --version
コマンドを実行して、ブロックチェーン・アプリケーション・ビルダーのバージョンを確認します。
以前のリリースでは、ORMメソッドはOchainModel
クラスから継承されていました。バージョン21.3.2以降では、メソッドはContext (Ctx
)オブジェクトのModel
クラスで定義されます。これらのメソッドをコールするには、this.Ctx.Model.<method_name>
を使用してアクセスします。
次の例は、以前のリリースのメソッド・コールを示しています:
@Validator(Supplier)
public async createSupplier(asset: Supplier){
return await asset.save();
}
次の例は、バージョン21.3.2以降のメソッド・コールを示しています:
@Validator(Supplier)
public async createSupplier(asset: Supplier) {
return await this.Ctx.Model.save(asset);
}
バージョン21.3.2にアップグレードした後、以前のバージョンのブロックチェーン・アプリケーション・ビルダーで作成したすべてのチェーンコード・プロジェクトで、この変更を行います。sync
コマンドを使用して仕様ファイルとソース・コードの間の変更を同期すると、変更はすぐに使用できるメソッドのコントローラに自動的にを反映されます。競合を手動で解決する必要があります。
-
save
save
メソッドは、コール元のasset
詳細をレジャーに追加します。
- このメソッドは、Hyperledger Fabricの
putState
を内部的にコールします。整列化/非整列化はすべて内部的に処理されます。save
メソッドは、Ctx
オブジェクトを使用してアクセスするModel
クラスの一部です。
-
Ctx.Model.save(asset: <Instance of Asset Class> , extraMetadata?: any) : Promise <any>
- パラメータ:
extraMetadata : any
(オプション)– アセットとは別にメタデータをレジャーの保存に使用します。
- 戻り値:
Promise<any>
- 完了時にpromiseを返します。
- 次に例を示します:
@Validator(Supplier)
public async createSupplier(asset: Supplier) {
return await this.Ctx.Model.save(asset);
}
-
get
get
メソッドは、{chaincodeName}.model.ts
の具現モデル・クラスによって継承されるOchainModel
クラスのstaticメソッドです。get
メソッドは、Ctx
オブジェクトを使用してアクセスするModel
クラスの一部です。
- 指定された
id
からアセットを返すには、汎用コントローラ・メソッドgetAssetById
を使用します。
-
Ctx.Model.get(id: string, modelName: <Model Asset Class Name>) : Promise<asset>
- パラメータ:
id : string
- レジャーにデータを保存するために使用されるキー。
modelName: <Model Asset Class Name>
– (オプション)返すモデル・アセット・クラス。
- 戻り値:
Promise: <Asset>
- modelName
パラメータが指定されておらず、データが台帳に存在する場合は、Promise<object>
が返されます。id
パラメータが台帳に存在しない場合は、エラー・メッセージが返されます。modelName
パラメータが指定されている場合は、<Asset>
タイプのオブジェクトが返されます。指定されたid
を持つアセットが台帳から返されても、このメソッドはコール元Asset
タイプにキャストされます。台帳から返されたアセットがAsset
タイプでない場合、メソッドはエラーをスローします。このチェックは、Model
クラスの読取り専用assetType
プロパティによって行われます。
- 次に例を示します:
@Validator(yup.string())
public async getSupplierById(id: string) {
const asset = await this.Ctx.Model.get(id, Supplier);
return asset;
}
この例では、asset
はSupplier
タイプです。
-
update
update
メソッドは、レジャーのコール元asset
の詳細を更新します。このメソッドは、promiseを返します。
- このメソッドは、Hyperledger Fabricの
putState
を内部的にコールします。整列化/非整列の化はすべて内部的に処理されます。update
メソッドは、Model
クラスの一部であり、Ctx
オブジェクトを使用してアクセスできます。
-
Ctx.Model.update(asset: <Instance of Asset Class> , extraMetadata?: any) : Promise <any>
- パラメータ:
extraMetadata : any
(オプション)– アセットとは別にメタデータをレジャーの保存に使用します。
- 戻り値:
Promise<any>
- 完了時にpromiseを返します。
- 次に例を示します:
@Validator(Supplier)
public async updateSupplier(asset: Supplier) {
return await this.Ctx.Model.update(asset);
}
-
delete
- これにより、
id
で指定されたレジャーからアセットが削除されます(存在する場合)。このメソッドは、Hyperledger FabricのdeleteState
メソッドを内部的にコールします。delete
メソッドは、Model
クラスの一部であり、Ctx
オブジェクトを使用してアクセスできます。
-
Ctx.Model.delete(id: string): Promise <any>
- パラメータ:
id : string
– データをレジャーに保存するために使用されるキー。
- 戻り値:
Promise <any>
- 完了時にpromiseを返します。
- 次に例を示します:
@Validator(yup.string())
public async deleteSupplier(id: string) {
const result = await this.Ctx.Model.delete(id);
return result;
}
-
history
history
メソッドは、Model
クラスの一部であり、Ctx
オブジェクトを使用してアクセスできます。このメソッドは、台帳からid
によって指定されたアセット履歴を返します(存在する場合)。
- このメソッドは、Hyperledger Fabricの
getHistoryForKey
メソッドを内部的にコールします。
-
Ctx.Model.history(id: string): Promise <any>
- パラメータ:
id : string
– データをレジャーに保存するために使用されるキー。
- 戻り値:
Promise <any[]>
- 完了時に任意の[]を返します。
- 例
@Validator(yup.string())
public async getSupplierHistoryById(id: string) {
const result = await this.Ctx.Model.history(id);
return result;
}
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
getByRange
メソッドは、{chaincodeName}.model.ts
の具象Model
クラスによって継承されるOchainModel
クラスの静的メソッドです。
- このメソッドは、
startId
からendId
の範囲のアセットのリストを返します。このメソッドは、Hyperledger FabricのgetStateByRange
メソッドを内部的にコールします。
modelName
パラメータが指定されていない場合、メソッドはPromise<Object [ ] >
を返します。modelName
パラメータが指定されている場合、メソッドはコール元のModel
タイプへのキャストを処理します。次の例では、結果の配列はSupplier
型です。台帳から返されたアセットがModel
タイプでない場合、リストには含まれません。このチェックは、Model
クラスの読取り専用のassetType
プロパティによって行われます。
startId
からendId
の範囲のすべてのアセットを返すには、汎用コントローラ・メソッドgetAssetsByRange
を使用します。
-
Ctx.Model.getByRange(startId: string, endId: string, modelName: <Asset Model Class Name> ): Promise <any>
- パラメータ:
startId : string
– 範囲の開始キー(範囲に含まれます)。
endId : string
– 範囲の終了キー。範囲から除外されます。
modelName: <Model Asset Class Name>
– (オプション)返すモデル・アセット・クラス。
- 戻り値:
Promise< Asset[ ] >
- 完了時に<Asset>
の配列を返します。
- 次に例を示します:
@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
getByRangeWithPagination
メソッドは、{chaincodeName}.model.ts
の具象Model
クラスによって継承されるOchainModel
クラスの静的メソッドです。
- このメソッドは、
startId
からendId
の範囲のアセットのリストを返します。このメソッドは、Hyperledger FabricのgetStateByRangeWithPagination
メソッドを内部的にコールします。
modelName
パラメータが指定されていない場合、メソッドはPromise<Object [ ] >
を返します。modelName
パラメータが指定されている場合、メソッドはコール元のModel
タイプへのキャストを処理します。次の例では、結果の配列はSupplier
型です。台帳から返されたアセットがModel
タイプでない場合、リストには含まれません。このチェックは、Model
クラスの読取り専用のassetType
プロパティによって行われます。
- ページ・サイズおよびブックマークでフィルタされた、
startId
からendId
の範囲のすべてのアセットを返すには、汎用コントローラ・メソッド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[]>
- パラメータ:
startId : string
– 範囲の開始キー(範囲に含まれます)。
endId : string
– 範囲の終了キー。範囲から除外されます。
pageSize : number
- 問合せのページ・サイズ。
bookmark : string
- 問合せのブックマーク。出力はこのブックマークから始まります。
modelName: <Model Asset Class Name>
– (オプション)返すモデル・アセット・クラス。
- 戻り値:
Promise< Asset[ ] >
- 完了時に<Asset>
の配列を返します。
-
getId
- アセットに
Id
として導出キーがある場合、このメソッドを使用して導出IDを取得できます。このメソッドは、導出キーに%t
(タイムスタンプ)が含まれている場合にエラーを返します。
- パラメータ:
object
– オブジェクトは、導出キーが依存しているすべてのプロパティを含む必要があります。
- 戻り値:
- 次に例を示します:
@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);
}
トークンSDKメソッドについては、「ブロックチェーン・アプリケーション・ビルダーを使用したトークン化のサポート」のトピックを参照してください。
コントローラ
メイン・コントローラ・クラスは、OchainController
クラスを拡張します。メインコントローラは1つのみです。
export class TSProjectController extends OchainController{
任意の数のクラス、関数またはファイルを作成できますが、メイン・コントローラ・クラスで定義されたメソッドのみが外部から呼出し可能で、残りのメソッドが非表示になります。
自動生成されたメソッド
「入力仕様ファイル」で説明されているように、生成するCRUDメソッドを指定ファイルで指定できます。たとえば、すべてのメソッドの生成を指定した場合、結果は次のようになります:
@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;
}
コントローラ・メソッドの詳細
以前のモデルのCRUDおよびCRUD以外の方法とは別に、Blockchain App Builderは、次のHyperledger Fabricメソッドについてコントローラからすぐに使用できるサポートを提供します。
getAssetById
getAssetsByRange
getAssetHistoryById
query
queryWithPagination
generateCompositeKey
getByCompositeKey
getTransactionId
getTransactionTimestamp
getChannelID
getCreator
getSignedProposal
getArgs
getStringArgs
getMspID
getNetworkStub
ノート:
これらのメソッドは、
OChainController
クラスを拡張するクラスの
this
コンテキストで使用できます。
たとえば:
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
getAssetById
メソッドは、指定されたIDに基づいてアセットを返します。これは汎用メソッドであり、任意のタイプの資産を取得するために使用できます。
this.getAssetById(id: string): Promise<byte[]>
- パラメータ:
id : string
– データをレジャーに保存するために使用されるキー。
- 戻り値:
Promise <byte [ ]>
- 完了時にpromiseを返します。byte[]
をオブジェクトに変換する必要があります。
-
getAssetsByRange
getAssetsByRange
メソッドは、アセット・タイプに関係なく、startId
(これを含む)からendId
(これを含まない)までのすべてのアセットを返します。これは汎用メソッドであり、任意のタイプのアセットを取得するために使用できます。
this.getAssetsByRange(startId: string, endId: string):
Promise<shim.Iterators.StateQueryIterator>
- パラメータ:
startId : string
– 範囲の開始キー(範囲に含まれます)。
endId : string
– 範囲の終了キー。範囲から除外されます。
- 戻り値:
Promise< shim.Iterators.StateQueryIterator>
- 完了時にイテレータを返します。これに対して反復する必要があります。
-
getAssetHistoryById
getAssetHistoryById
メソッドは、指定されたIDのアセットの履歴イテレータを返します。
this.getAssetHistoryById(id: string):
Promise<shim.Iterators.HistoryQueryIterator>
- パラメータ:
id : string
– データをレジャーに保存するために使用されるキー。
- 戻り値:
Promise<shim.Iterators.HistoryQueryIterator>
- 履歴問合せイテレータを返します。これに対して反復する必要があります。
-
query
query
メソッドは、元帳に対してリッチなSQL/Couch DB問合せを実行します。この方法は、Oracle Blockchain Platform上のリモート・デプロイメントでのみサポートされます。これは、元帳でSQL問合せを実行するための一般的な方法です。
this.query(queryStr: string):
Promise<shim.Iterators.StateQueryIterator>
- パラメータ:
queryStr : string
- リッチSQL/Couch DB問合せ。
- 戻り値:
Promise<shim.Iterators.StateQueryIterator>
- 状態問合せイテレータを返します。これに対して反復する必要があります。
-
queryWithPagination
- このメソッドで台帳に対して豊富なSQL/Couch DB問合せが実行され、ページ・サイズおよびブックマークでフィルタされます。この方法は、Oracle Blockchain Platform上のリモート・デプロイメントでのみサポートされます。これは、元帳でSQL問合せを実行するための一般的な方法です。
-
public async queryWithPagination(query: string, pageSize: number, bookmark?: string)
- パラメータ:
query : string
- リッチSQL/Couch DB問合せ。
pageSize : number
- 問合せのページ・サイズ。
bookmark : string
- 問合せのブックマーク。出力はこのブックマークから始まります。
- 戻り値:
Promise<shim.Iterators.StateQueryIterator>
- 状態問合せイテレータを返します。これに対して反復する必要があります。
-
generateCompositeKey
- このメソッドは、
indexName
および引数で指定された属性に基づいてコンポジット・キーを生成して返します。
this.generateCompositeKey(indexName: string, attributes:
string[]): string
- パラメータ:
indexName : string
- 元帳へのデータの保存に使用されるキーのオブジェクト・タイプ。
attributes: string[ ]
- 作成されるコンポジット・キーに基づく属性。
- 戻り値:
-
getByCompositeKey
- このメソッドは、コンポジット・キーの作成時に、属性パラメータで指定されたキーおよび列に一致するアセットを返します。
indexOfId
パラメータは、スタブ・メソッドSplitCompositeKey
の配列で返されるキーの索引を示します。内部的には、このメソッドはHyperledger FabricのgetStateByPartialCompositeKey
、splitCompositeKey
およびgetState
を呼び出します。
this.getByCompositeKey(key: string, columns: string[],
indexOfId: number): Promise<any []>
- パラメータ:
key: string
– データをレジャーに保存するために使用されるキー。
columns: string[ ]
- キーの生成に基づく属性。
indexOfId: number
- キーから取得される属性の索引。
- 戻り値:
Promise< any [ ]
- 完了時に任意の[]
を返します。
-
getTransactionId
- 現在のチェーンコード呼出しリクエストのトランザクションIDを返します。トランザクションIDは、チャネルのスコープ内でトランザクションを一意に識別します。
this.getTransactionId(): string
- パラメータ:
- 戻り値:
string
- 現在のチェーンコード呼出しリクエストのトランザクションIDを返します。
-
getTransactionTimestamp
- トランザクションが作成されたときのタイムスタンプを返します。これはトランザクション
ChannelHeader
から取得されるため、クライアントのタイム・スタンプを示し、すべてのエンドーサで同じ値になります。
this.getTransactionTimestamp(): Timestamp
- パラメータ:
id : string
– データをレジャーに保存するために使用されるキー。
- 戻り値:
Timestamp
- トランザクションが作成されたときのタイム・スタンプを返します。
-
getChannelID
- チェーンコードが処理する提案のチャネルIDを返します。
this.getChannelID(): string
- パラメータ:
- 戻り値:
-
getCreator
- チェーンコード呼出しの発行者のアイデンティティ・オブジェクトを返します。
this.getCreator(): shim.SerializedIdentity
- パラメータ:
- 戻り値:
shim.SerializedIdentity
- アイデンティティ・オブジェクトを返します。
-
getSignedProposal
- 署名済トランザクション提案の完全にデコードされたオブジェクトを返します。
this.getSignedProposal():
shim.ChaincodeProposal.SignedProposal
- パラメータ:
- 戻り値:
shim.ChaincodeProposal.SignedProposal
- 署名済トランザクション提案のデコードされたオブジェクトを返します。
-
getArgs
- チェーンコード呼出しリクエストから引数を文字列の配列として返します。
this.getArgs(): string[]
- パラメータ:
- 戻り値:
string [ ]
- チェーンコード呼出しから文字列の配列として引数を返します。
-
getStringArgs
- チェーンコード呼出しリクエストから引数を文字列の配列として返します。
this.getStringArgs(): string[]
- パラメータ:
- 戻り値:
string [ ]
- チェーンコード呼出しから文字列の配列として引数を返します。
-
getMspID
- 呼出し側アイデンティティのMSP IDを返します。
this.getMspID(): string
- パラメータ:
- 戻り値:
string
- 呼出し側アイデンティティのMSP IDを返します。
-
getNetworkStub
- このメソッドをコールすると、shimスタブにアクセスできます。これは、アセットを直接操作する独自の実装を記述するのに役立ちます。
this.getNetworkStub(): shim.ChaincodeStub
- パラメータ:
- 戻り値:
shim.ChaincodeStub
- チェーンコード・ネットワーク・スタブを返します。
-
invokeCrossChaincode
- チェーンコードでこのメソッドを使用して、別のチェーンコード内の関数をコールできます。両方のチェーンコードが同じピアにインストールされている必要があります。
-
this.invokeCrossChaincode(chaincodeName: string, methodName: string, args: string[], channelName: string): Promise<any>
- パラメータ:
chaincodeName
– コールするチェーンコードの名前。
methodName
- チェーンコードでコールするメソッドの名前。
arg
- コール元メソッドの引数。
channelName
- コールするチェーンコードがあるチャネル。
- 戻り値:
Promise<any>
- 3つのフィールドを含むJSONオブジェクトを返します:
isValid
- コールが有効な場合はtrue
。
payload
- クロスチェーンコード・コールによってJSONオブジェクトとして返される出力。
message
- クロスチェーンコード・コールによって返されるメッセージ(UTF-8形式)。
-
invokeChaincode
- このメソッドは、別のチェーンコード内の関数を呼び出します。両方のチェーンコードが同じピアにインストールされている必要があります。
-
this.invokeChaincode(chaincodeName: string, methodName: string, args: string[], channelName: string): Promise<any>
- パラメータ:
chaincodeName
– コールするチェーンコードの名前。
methodName
- チェーンコードでコールするメソッドの名前。
arg
- コール元メソッドの引数。
channelName
- コールするチェーンコードがあるチャネル。
- 戻り値:
Promise<any>
- 3つのフィールドを含むJSONオブジェクトを返します:
isValid
- コールが有効な場合はtrue
。
payload
- クロスチェーンコード・コールによってJSONオブジェクトとして返される出力。
message
- クロスチェーンコード・コールによって返されるメッセージ(UTF-8形式)。
カスタム・メソッド
このサンプル仕様ファイルから、次のカスタム・メソッドが生成されました。
executeQuery
メソッドは、SQLリッチ問合せのコール方法を示しています。引数に対するバリデータは、仕様ファイルで指定された引数のタイプに基づいてブロックチェーン・アプリケーション・ビルダーによって自動的に追加されます。
/**
*
* 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() {
}
初期化メソッド
カスタムのinit
メソッドが、空の定義でコントローラに提供されます。ブロックチェーン・アプリケーション・ビルダーを使用してデプロイまたはアップグレードする場合、init
メソッドが自動的にコールされます。Oracle Blockchain Platformコンソールからデプロイまたはアップグレードする場合は、init
メソッドを手動でコールする必要があります。Postmanなどのサードパーティ・ツールを使用して、init
メソッドを手動でコールできます。
export class TestTsProjectController extends OchainController {
public async init(params: any) {
return;
}
このメソッドを使用して、すべてのアプリケーションの状態を初期化できます。