Я успешно добавил сбор личных данных в свою сеть.Ниже приведена процедура, которой я следовал.Я хочу 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.У меня есть следующие вопросы:
- Должен ли я что-то изменить в коде цепочки для поддержки этой новой коллекции?Надеюсь нет.Пожалуйста, исправьте меня, если я ошибаюсь.
- Как я могу реализовать добавление данных и логику запросов в моем клиентском приложении 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();
Я не использую никакой биологической пластины.
Ценю ваш вклад по этому вопросу.Заранее спасибо.