Пример кода для добавления данных и запросов из частной коллекции - PullRequest
0 голосов
/ 08 июля 2019

Я успешно добавил сбор личных данных в свою сеть.Ниже приведена процедура, которой я следовал.Я хочу Org1 и Org3 в этой коллекции.У меня есть следующее collection_config.json

[
 {
    "name": "collectionOrg1Org3",
    "policy": "OR('Org1MSP.member', 'Org3MSP.member')",
    "requiredPeerCount": 0,
    "maxPeerCount": 3,
    "blockToLive":1000000,
    "memberOnlyRead": true
 }
]

Затем я добавил эту коллекцию, когда запускаю код цепочки в коллекции.Я использовал collections-config параметр следующим образом.

 docker exec \
      -e CORE_PEER_LOCALMSPID=Org1MSP \
      -e CORE_PEER_MSPCONFIGPATH=${Org1_MSPCONFIGPATH} \
      cli \
      peer chaincode instantiate \
        -o orderer.bc4scm.de:7050 \
        -C mychannel \
        -n scmlogic \
        -l "$CC_RUNTIME_LANGUAGE" \
        -v 1.0 \
        -c '{"Args":[]}' \
        -P "OR('Org1MSP.member','Org3MSP.member')" \
        --tls \
        --cafile ${ORDERER_TLS_ROOTCERT_FILE} \
        --peerAddresses peer0.org1.bc4scm.de:7051 \
        --tlsRootCertFiles ${Org1_TLS_ROOTCERT_FILE} \
        --collections-config ${CC_SRC_PATH}/collection_config.json

Это не дало мне никакой ошибки.Поэтому я надеюсь, что он добавлен правильно.

Следующая задача - добавить данные в эту коллекцию авторизованным узлом и запросить данные из коллекции.Я искал пример кода, который я могу сослаться, чтобы сделать это, но я не смог найти тот, написанный на Nodejs.Официальная документация содержит пример с использованием машинописного текста, но не на javascript.У меня есть следующие вопросы:

  1. Должен ли я что-то изменить в коде цепочки для поддержки этой новой коллекции?Надеюсь нет.Пожалуйста, исправьте меня, если я ошибаюсь.
  2. Как я могу реализовать добавление данных и логику запросов в моем клиентском приложении nodejs, чтобы сделать это?

Я использую следующий код для добавления данныхв канал пользователем Org1, который работает должным образом.Пожалуйста, предоставьте мне обновления, которые я должен сделать.

'use strict';

const { FileSystemWallet, Gateway } = require('fabric-network');
const path = require('path');

const ccpPath = path.resolve(__dirname, '..', '..', 'network', 'connection-org1.json');

async function main() {
    try {

        const walletPath = path.join(process.cwd(), 'wallet');
        const wallet = new FileSystemWallet(walletPath);
        console.log(`Wallet path: ${walletPath}`);

        // Check to see if we've already enrolled the user.
        const userExists = await wallet.exists('user1');
        if (!userExists) {
            console.log('An identity for the user "user1" does not exist in the wallet');
            console.log('Run the registerUser.js application before retrying');
            return;
        }

        // Create a new gateway for connecting to our peer node.
        const gateway = new Gateway();
        await gateway.connect(ccpPath, { wallet, identity: 'user1', discovery: { enabled: true, asLocalhost: true } });

        // Get the network (channel) our contract is deployed to.
        const network = await gateway.getNetwork('iboretailerchannel');

        // Get the contract from the network.
        const contract = network.getContract('scmlogic');

        // Submit the specified transaction.
        // createCar transaction - requires 5 argument, ex: ('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom')
        // changeCarOwner transaction - requires 2 args , ex: ('changeCarOwner', 'CAR10', 'Dave')
        await contract.submitTransaction('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom');
        console.log('Transaction has been submitted');

        // Disconnect from the gateway.
        await gateway.disconnect();

    } catch (error) {
        console.error(`Failed to submit transaction: ${error}`);
        process.exit(1);
    }
}

main();

и следующий - мой клиентский код для запроса данных от пользователя из Org3

'use strict';

const { FileSystemWallet, Gateway } = require('fabric-network');
const path = require('path');

const ccpPath = path.resolve(__dirname, '..', '..', 'network', 'connection-org3.json');

async function main() {
    try {
        let user = 'user4';
        // Create a new file system based wallet for managing identities.
        const walletPath = path.join(process.cwd(), 'wallet');
        const wallet = new FileSystemWallet(walletPath);
        console.log(`Wallet path: ${walletPath}`);


        // Check to see if we've already enrolled the user.
        const userExists = await wallet.exists(user);
        if (!userExists) {
            console.log('An identity for the user ' + user + ' does not exist in the wallet');
            console.log('Run the registerUser.js application before retrying');
            return;
        }

        const gateway = new Gateway();

        await gateway.connect(ccpPath, { wallet, identity: user, discovery: { enabled: true, asLocalhost: true } });


        const result = await contract.evaluateTransaction('queryAllCars','BR0');

        console.log(`Transaction has been evaluated, result is: ${result.toString()}`);

    } catch (error) {
        console.error(`Failed to evaluate transaction: ${error}`);
        process.exit(1);
    }
}

main();

Я не использую никакой биологической пластины.

Ценю ваш вклад по этому вопросу.Заранее спасибо.

1 Ответ

1 голос
/ 08 июля 2019

Должен ли я что-то изменить в коде цепочки для поддержки этой новой коллекции?Надеюсь нет.Пожалуйста, исправьте меня, если я ошибаюсь.

Из приведенных выше фрагментов кода вызова / запроса кажется, что имя коллекции не передается в качестве параметра.

Так что я думаю, что вы моглижестко закодировал имя коллекции в самом коде цепи в функциях заглушки PutPrivateData и getPrivateData .

Так что да, вам придется снова и снова редактировать код цепи для новых коллекций, которые выдобавлять.Решение для этого - просто передать имя коллекции с остальными параметрами / аргументами из клиентского приложения.

Как я могу реализовать добавление данных и логику запросов в моем клиентском приложении nodejs для этого?

Вы просто должны добавить параметр имя коллекции в submitTransaction и valuTransaction с остальными параметрами / аргументами, остальные изКод остается прежним.

, если есть какие-либо сомнения, прокомментируйте.

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