Hyperledger Fabri c Node.js Цепной код: Ошибка: не удается разрешить ссылочный объект из - PullRequest
0 голосов
/ 06 марта 2020

Я разрабатываю цепной код, написанный на 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;
        }
    }
}

Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...