Историк для конкретного участника

Есть ли способ получить Historian для конкретного участника в hyperledger-composer с помощью API узла?

Я разрабатываю приложение на основе Hyperledger-composer с использованием Node API. Я хочу показать историю транзакций конкретного участника в его профиле. Я создал для этого permission.acl, и он отлично работает на детской площадке. Но когда я обращаюсь к историку из API узла, он дает полный историк сети. Я не знаю, как отфильтровать это для участника.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
432
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы можете возвращать результаты вызовов REST API, начиная с версии 0.20, вызывающему клиентскому приложению, поэтому будет работать что-то вроде следующего (не тестировалось, но вы поняли). ПРИМЕЧАНИЕ: вы можете просто вызвать конец REST API (/ GET Trader) напрямую через REST с вашим параметром (или любыми конечными точками, которые вы создаете для своей собственной бизнес-сети - пример ниже - trade-network), а не пример использования 'ТОЛЬКО ДЛЯ ЧТЕНИЯ 'Конечная точка процессора транзакций, описанная ниже, для возврата больших наборов результатов вашему клиентскому приложению. См. подробнее об этом в документации

Клиент NODE JS с использованием API:


    const BusinessNetworkConnection = require('composer-client').BusinessNetworkConnection;

    const rp = require('request-promise');

    this.bizNetworkConnection = new BusinessNetworkConnection();
    this.cardName ='admin@mynet';
    this.businessNetworkIdentifier = 'mynet';

    this.bizNetworkConnection.connect(this.cardName)
    .then((result) => { 

    //You can do ANYTHING HERE eg.

    })
    .catch((error) => {
    throw error;
    });

    // set up my read only transaction object - find the history of a particular Participant - note it could equally be an Asset instead !

    var obj = {
        "$class": "org.example.trading.MyPartHistory",
        "tradeId": "P1"
    };


    async function callPartHistory() {

    var options = {
        method: 'POST',
        uri: 'http://localhost:3000/api/MyPartHistory',
        body: obj,
        json: true 
    };

    let results = await rp(options);
    //    console.info("Return value from REST API is " + results);
    console.info(" ");
    console.info(`PARTICIPANT HISTORY for Asset ID:  ${results[0].tradeId} is: `); 
    console.info("============================================ = ");

    for (const part of results) {
         console.info(`${part.tradeId}             ${part.name}` );
    }
   }

   // Main

   callPartHistory();

// МОДЕЛЬНЫЙ ФАЙЛ


@commit(false)
@returns(Trader[])
transaction MyPartHistory {
o String tradeId
}

ТОЛЬКО ДЛЯ ЧТЕНИЯ КОД ПРОЦЕССОРА ОПЕРАЦИЙ (в 'logic.js'):


/**
 * Sample read-only transaction
 * @param {org.example.trading.MyPartHistory} tx
 * @returns {org.example.trading.Trader[]} All trxns  
 * @transaction
 */


async function participantHistory(tx) {

    const partId = tx.tradeid;
    const nativeSupport = tx.nativeSupport;
    // const partRegistry = await getParticipantRegistry('org.example.trading.Trader')

    const nativeKey = getNativeAPI().createCompositeKey('Asset:org.example.trading.Trader', [partId]);
    const iterator = await getNativeAPI().getHistoryForKey(nativeKey);
    let results = [];
    let res = {done : false};
    while (!res.done) {
        res = await iterator.next();

        if (res && res.value && res.value.value) {
            let val = res.value.value.toString('utf8');
            if (val.length > 0) {
               console.info("@debug val is  " + val );
               results.push(JSON.parse(val));
            }
        }
        if (res && res.done) {
            try {
                iterator.close();
            }
            catch (err) {
            }
        }
    }
    var newArray = [];
    for (const item of results) {
            newArray.push(getSerializer().fromJSON(item));
    }
    console.info("@debug the results to be returned are as follows: ");

    return newArray; // returns something to my NodeJS client (called via REST API)
}

Другие вопросы по теме