Blockchain App Builder는 사양 파일에서 입력을 가져와 완전한 기능을 갖춘 비계 체인 코드 프로젝트를 생성합니다. 프로젝트에는 자동으로 생성된 클래스 및 함수, CRUD 메소드, SDK 메소드, 인수의 자동 검증, 마셜링/마셜링 해제 및 ORM(투명한 지속성 기능)이 포함됩니다.
체인코드 프로젝트에서 TypeScript 언어를 사용하는 경우 스캐폴드 프로젝트에는 세 개의 기본 파일이 포함됩니다.
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(투명한 지속성 기능) 및 풍부한 질의 호출과 같은 기능을 지원합니다.
모델
모든 모델 클래스는 assetType
이라는 추가 읽기 전용 속성이 있는 OchainModel
클래스를 확장합니다. 이 속성은 이 유형의 자산만 인출하는 데 사용할 수 있습니다. 이 속성에 대한 모든 변경사항은 자산을 생성 및 업데이트하는 동안 무시됩니다. 기본적으로 등록정보 값은 <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
클래스의 새 인스턴스가 생성되면 @Validate()
데코레이터가 Address
클래스의 모든 속성을 자동으로 검증합니다. Address
클래스에 assetType
속성 또는 @Id()
클래스 데코레이터가 없습니다. 이 자산 및 해당 속성은 원장에 별도로 저장되지 않지만 Employee
자산과 함께 저장됩니다. 포함된 자산은 값 유형으로 작동하는 사용자 정의 클래스입니다. 이 클래스의 인스턴스는 포함된 객체(OchainModel
자산)의 일부로 원장에만 저장할 수 있습니다. 위의 모든 데코레이터는 프로젝트를 스캐폴딩하는 동안 입력 파일에 따라 자동으로 적용됩니다.
@Derived(STRATEGY, ALGORITHM, FORMAT)
- 이 데코레이터는 다른 속성에서 파생된 속성을 정의하는 데 사용됩니다. 이 데코레이터에는 두 가지 필수 매개변수가 있습니다.
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 스키마를 매개변수로 사용합니다.
- 파라미터의 순서는 메소드의 인수 순서와 정확히 동일해야 합니다.
- 다음 예에서
Supplier
모델 참조는 메소드 인수의 asset
유형에 해당하는 매개변수로 전달됩니다. 런타임 시 데코레이터는 메소드 인수를 구문분석하고 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
를 사용하여 해당 메소드에 액세스합니다.
ORM을 구현하는 SDK 메소드는 다음과 같습니다.
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 Methods을 참조하십시오.
SDK 메소드
주:
버전 21.3.2부터 ORM 메소드에 액세스하는 방법이 변경되었습니다.
ochain --version
명령을 실행하여 Blockchain App Builder의 버전을 확인합니다.
이전 릴리스에서는 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로 업그레이드한 후 이전 버전의 Blockchain App Builder로 생성한 모든 체인코드 프로젝트에서 이와 같이 변경합니다. sync
명령을 사용하여 사양 파일과 소스 코드 간의 변경사항을 동기화하면 즉시 사용 가능한 메소드에 대한 변경사항이 컨트롤러에 자동으로 적용됩니다. 계속해서 충돌을 수동으로 해결해야 합니다.
-
save
save
메소드는 호출자 asset
세부정보를 원장에 추가합니다.
- 이 메소드는 내부적으로 Hyperledger Fabric
putState
을 호출합니다. 모든 마셜링/마셜링 해제는 내부적으로 처리됩니다. save
메소드는 Model
클래스의 일부이며, Ctx
객체를 사용하여 액세스합니다.
-
Ctx.Model.save(asset: <Instance of Asset Class> , extraMetadata?: any) : Promise <any>
- 매개변수:
extraMetadata : any
(선택 사항) - 자산과 별도로 메타데이터를 원장에 저장합니다.
- 반환값:
Promise<any>
- 완료 시 약속 반환
- 예제:
@Validator(Supplier)
public async createSupplier(asset: Supplier) {
return await this.Ctx.Model.save(asset);
}
-
get
get
메소드는 {chaincodeName}.model.ts
의 실제 모델 클래스에 의해 상속되는 OchainModel
클래스의 메소드입니다. get
메소드는 Model
클래스의 일부이며, Ctx
객체를 사용하여 액세스합니다.
- 지정된
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>
- 완료 시 약속 반환
- 예제:
@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>
- 완료 시 약속을 반환합니다.
- 예제:
@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
를 확장합니다. 하나의 주 컨트롤러만 있습니다.
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 [ ]>
- 완료 시 반품 약속입니다. 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
메소드는 원장을 통해 Rich 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
- 이 방법은 원장별로 페이지 크기 및 책갈피별로 필터링된 Rich 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
매개변수는 stub 메소드 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
- 체인코드 호출 제출자의 ID 객체를 반환합니다.
this.getCreator(): shim.SerializedIdentity
- 매개변수:
- 반환값:
shim.SerializedIdentity
- ID 객체를 반환합니다.
-
getSignedProposal
- 서명된 트랜잭션 제안의 완전히 디코딩된 객체를 반환합니다.
this.getSignedProposal():
shim.ChaincodeProposal.SignedProposal
- 매개변수:
- 반환값:
shim.ChaincodeProposal.SignedProposal
- 서명된 트랜잭션 제안의 디코딩된 객체를 반환합니다.
-
getArgs
- 인수를 체인코드 호출 요청의 문자열 배열로 반환합니다.
this.getArgs(): string[]
- 매개변수:
- 반환값:
string [ ]
- 인수를 체인코드 호출에서 문자열 배열로 반환합니다.
-
getStringArgs
- 인수를 체인코드 호출 요청의 문자열 배열로 반환합니다.
this.getStringArgs(): string[]
- 매개변수:
- 반환값:
string [ ]
- 인수를 체인코드 호출에서 문자열 배열로 반환합니다.
-
getMspID
- 호출 ID의 MSP ID를 반환합니다.
this.getMspID(): string
- 매개변수:
- 반환값:
string
- 호출 ID의 MSP ID를 반환합니다.
-
getNetworkStub
- 사용자는
getNetworkStub
메소드를 호출하여 shim stub에 액세스할 수 있습니다. 이렇게 하면 사용자가 자산과 직접 작업하는 자체 구현을 작성하는 데 도움이 됩니다.
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>
- 세 개의 필드를 포함하는 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>
- 세 개의 필드를 포함하는 JSON 객체를 반환합니다.
isValid
- 호출이 적합한 경우 true
입니다.
payload
- 교차 체인 코드 호출에 의해 JSON 객체로 반환된 출력입니다.
message
- 체인 코드 간 호출에 의해 UTF-8 형식으로 반환된 메시지입니다.
사용자정의 방법
예제 사양 파일에서 생성된 사용자정의 메소드는 다음과 같습니다.
executeQuery
는 SQL 서식 있는 질의를 호출하는 방법을 보여줍니다. 인수에 대한 검증자는 사양 파일에 지정된 인수의 유형에 따라 Blockchain App Builder에 의해 자동으로 추가됩니다.
/**
*
* 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
메소드가 컨트롤러에 빈 정의와 함께 제공됩니다. Blockchain App Builder를 사용하여 배포 또는 업그레이드하는 경우 init
메서드가 자동으로 호출됩니다. Hyperledger Fabric v1.4.7 플랫폼의 Oracle Blockchain Platform 콘솔에서 배포하거나 업그레이드하는 경우 init
메소드도 자동으로 호출됩니다. Hyperledger Fabric v2.x 플랫폼의 Oracle Blockchain Platform 콘솔에서 배포하거나 업그레이드하는 경우 init
메소드를 수동으로 호출해야 합니다. Postman과 같은 타사 도구를 사용하여 init
메소드를 수동으로 호출할 수 있습니다.
export class TestTsProjectController extends OchainController {
public async init(params: any) {
return;
}
이 시점에서 응용 프로그램 상태를 초기화하려면 이 방법을 사용하면 됩니다.