Я разрабатываю цепной код, написанный на Typescript, используя fabric-contract-api
и плагин IBM Blockchain Platform для кода Visual Studio. Мой ресурс называется Order
, и хотя тесты проходят отлично, я не могу его создать. Я получаю следующую ошибку:
[6/3/2020 10:51:34] [INFO] fabricvscodelocalfabric-Org1Peer1-06-chaincode-1.0.0|{ [Error: can't resolve reference Object from id Order#]
[6/3/2020 10:51:34] [INFO] fabricvscodelocalfabric-Org1Peer1-06-chaincode-1.0.0| message: 'can\'t resolve reference Object from id Order#',
[6/3/2020 10:51:34] [INFO] fabricvscodelocalfabric-Org1Peer1-06-chaincode-1.0.0| missingRef: 'Object',
[6/3/2020 10:51:34] [INFO] fabricvscodelocalfabric-Org1Peer1-06-chaincode-1.0.0| missingSchema: 'Object' }
Я думаю, что журнал недостаточно ясен, и я не могу найти проблему. Как я понимаю в других вопросах, я понимаю, что проблема связана с тем, что fabric-contract-api
не может обрабатывать такие типы, как any
или Object
. Однако я не использую это в своем коде. Все объявлено.
Я начал комментировать функцию кода функцией, чтобы найти проблему, и, например, я получаю эту ошибку, если эта функция не прокомментирована:
@Transaction()
public async createAsset(ctx: Context, assetConfigStringified: string): Promise<string> {
const assetConfig: IAssetConfig = JSON.parse(assetConfigStringified);
const assetId: string = await this.generateInternAssetId(ctx);
const exists = await this.assetExists(ctx, assetId);
if (exists) {
throw new Error(`The asset ${assetId} already exists`);
}
const asset: Asset = new Asset(assetConfig);
const buffer: Buffer = Buffer.from(JSON.stringify(asset));
await ctx.stub.putState(assetId, buffer);
return assetId;
}
Это объявления используемых интерфейсов:
@Object
export interface IComplexType {
propertyA: string;
propertyB: string;
propertyC: string;
propertyD: number;
propertyE?: string;
}
@Object
export interface IAssetConfig {
propertyA: string;
propertyB: IComplexType;
propertyC: IComplexType;
propertyD: string;
propertyE?: string;
}
И это класс активов:
@Object()
export class Asset {
@Property()
public propertyA: string;
@Property()
public propertyB: IComplexType;
@Property()
public propertyC: IComplexType;
@Property()
public propertyD: string;
@Property()
public propertyE?: string;
constructor(assetConfig: IAssetConfig) {
this.propertyA = assetConfig.propertyA;
this.propertyB = assetConfig.propertyB;
this.propertyC = assetConfig.propertyB;
this.propertyD = assetConfig.propertyD;
if (assetConfig.hasOwnProperty('propertyE')) {
this.propertyE = assetConfig.propertyE;
}
}
}
Большое спасибо.