Вы когда-нибудь чувствовали себя потерянными в криптоджунглях, пытаясь понять, как создать структуру каталогов сертификатов для вашего проекта Hyperledger Fabric? Не бойся, мой друг, потому что я здесь, чтобы провести тебя через пустыню!
Приведенный ниже пример кода используется для создания необходимой структуры каталогов, необходимой для процесса создания сертификата. Он создает базовую структуру сертификата организации, рекурсивную структуру узлов организации и рекурсивную структуру пользователей организации.
const fs = require('fs'); function CreateBaseOrganizationCertStructure(orgName, domain, nodeType) { const baseDirectories = [ `crypto-config/${orgName}.${domain}`, `crypto-config/${orgName}.${domain}/msp`, `crypto-config/${orgName}.${domain}/msp/cacerts`, `crypto-config/${orgName}.${domain}/msp/tlscacerts`, `crypto-config/${orgName}.${domain}/users`, `crypto-config/${orgName}.${domain}/${nodeType}s` ]; for (let dir of baseDirectories) { try { fs.mkdirSync(dir, { recursive: true, mode: 0o755 }); } catch (err) { return false; } } return true; } // [orgName: Org1] [nodeType: orderer, peer] [domain: example.com]
Функция CreateBaseOrganizationCertStructure
создает базовую структуру каталогов для файлов сертификатов вашей организации. Это похоже на строительство прочного фундамента дома, но вместо бетона и кирпичей у вас есть каталоги и файлы.
А кто не любит каталоги и файлы, верно? Я имею в виду, что в них не нравится? Они похожи на строительные блоки современных технологий, строительные блоки нашей цифровой жизни.
const fs = require('fs'); function CreateRecursiveOrganizationNodeStructure(orgName, domain, nodeType, nodeCount) { const nodeDirectories = [ `crypto-config/${orgName}.${domain}/${nodeType}s/`, ]; for (let i = 0; i < nodeCount; i++) { let nodeName; if (nodeType === 'orderer') { nodeName = `${nodeType}${i}.${domain}`; } else { nodeName = `${nodeType}${i}.${orgName}.${domain}`; } nodeDirectories.push(`crypto-config/${orgName}.${domain}/${nodeType}s/${nodeName}`); nodeDirectories.push(`crypto-config/${orgName}.${domain}/${nodeType}s/${nodeName}/msp`); nodeDirectories.push(`crypto-config/${orgName}.${domain}/${nodeType}s/${nodeName}/msp/cacerts`); nodeDirectories.push(`crypto-config/${orgName}.${domain}/${nodeType}s/${nodeName}/msp/signcerts`); nodeDirectories.push(`crypto-config/${orgName}.${domain}/${nodeType}s/${nodeName}/msp/keystore`); nodeDirectories.push(`crypto-config/${orgName}.${domain}/${nodeType}s/${nodeName}/tls`); } for (let dir of nodeDirectories) { try { fs.mkdirSync(dir, { recursive: true, mode: 0o755 }); } catch (err) { return false; } } return true; } // [nodeType: orderer, peer] [ domain: example.com] [nodeCount: 2]
Двигаясь дальше, функция CreateRecursiveOrganizationNodeStructure
генерирует структуру каталогов для конкретного узла. Думайте об этом как о создании отдельных комнат в вашем доме. У каждого узла есть своя комната с определенными файлами и каталогами, адаптированными к его потребностям.
const fs = require('fs'); function createRecursiveOrganizationUserStructure(orgName, domain, userCount) { const nodeDirectories = [ `crypto-config/${orgName}.${domain}/users`, `crypto-config/${orgName}.${domain}/users/admin.${orgName}.${domain}/msp/`, `crypto-config/${orgName}.${domain}/users/admin.${orgName}.${domain}/msp/cacerts`, `crypto-config/${orgName}.${domain}/users/admin.${orgName}.${domain}/msp/signcerts`, `crypto-config/${orgName}.${domain}/users/admin.${orgName}.${domain}/msp/keystore`, `crypto-config/${orgName}.${domain}/users/admin.${orgName}.${domain}/tls/`, ]; for (let i = 0; i < userCount; i++) { nodeDirectories.push(`crypto-config/${orgName}.${domain}/users/user${i}.${orgName}.${domain}`); nodeDirectories.push(`crypto-config/${orgName}.${domain}/users/user${i}.${orgName}.${domain}/msp/`); nodeDirectories.push(`crypto-config/${orgName}.${domain}/users/user${i}.${orgName}.${domain}/msp/cacerts`); nodeDirectories.push(`crypto-config/${orgName}.${domain}/users/user${i}.${orgName}.${domain}/msp/signcerts`); nodeDirectories.push(`crypto-config/${orgName}.${domain}/users/user${i}.${orgName}.${domain}/msp/keystore`); nodeDirectories.push(`crypto-config/${orgName}.${domain}/users/user${i}.${orgName}.${domain}/tls/`); } for (const dir of nodeDirectories) { try { fs.mkdirSync(dir, { recursive: true, mode: 0o755 }); } catch (err) { return false; } } return true; } // [nodeType: orderer, peer] [domain: example.com] [userCount: number of users per organization */]
Наконец, функция CreateRecursiveOrganizationUserStructure
создает пользовательскую структуру каталогов. Это как построить гостевую комнату в своем доме, но для пользователей. У каждого пользователя есть своя комната с определенными файлами и каталогами, адаптированными к его потребностям.
И давайте не будем забывать о пользователе-администраторе, самом важном госте из всех. Эта функция даже дает пользователю-администратору собственный каталог со специальным именем «admin». Это как расстелить красную ковровую дорожку для королевской семьи!
async function main() { const ca = await createCA('my-ca', 'mydomain.com'); if (ca) { console.log('CA created successfully!'); } else { console.error('Error creating CA'); return; } const org = await createOrg('my-org', 'mydomain.com', 'my-ca', 'ca.mydomain.com'); if (org) { console.log('Organization created successfully!'); } else { console.error('Error creating organization'); return; } const userStructureCreated = createRecursiveOrganizationUserStructure('my-org', 'mydomain.com', 5); if (userStructureCreated) { console.log('User structure created successfully!'); } else { console.error('Error creating user structure'); return; } } main();
И это последняя функция, завершающая создание каталога.
Итак, у вас есть это, люди. Создание самозаверяющих сертификатов для вашего проекта Hyperledger Fabric похоже на строительство дома для вашей цифровой семьи с уникальными именами, личностями и гостевыми комнатами.