Вы когда-нибудь чувствовали себя потерянными в криптоджунглях, пытаясь понять, как создать структуру каталогов сертификатов для вашего проекта 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 похоже на строительство дома для вашей цифровой семьи с уникальными именами, личностями и гостевыми комнатами.