Розробка системи academic credentials на блокчейні

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка системи academic credentials на блокчейні
Середній
~1-2 тижні
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Розробка системи academic credentials на блокчейні

Academic credentials — це не лише диплом. Це мікросертифікати, badge-и, підтвердження участі у конференціях, спеціалізації, професійні ліцензії. Система повинна підтримувати весь цей спектр і бути сумісною з міжнародними стандартами — перш за все W3C Verifiable Credentials та IMS Open Badges 3.0.

ERC-1155 для credential портфоліо

На відміну від диплома (один документ), credential портфоліо — колекція badge-ів різних типів. ERC-1155 multi-token стандарт краще підходить ніж ERC-721: один контракт обслуговує всі типи credentials, batch transfer для видачі кількох badge-ів одночасно.

contract AcademicCredentials is ERC1155, AccessControl {
    bytes32 public constant ISSUER_ROLE = keccak256("ISSUER_ROLE");
    
    struct CredentialType {
        string name;
        string description;
        string category;        // "DEGREE", "CERTIFICATE", "BADGE", "MICROCREDENTIAL"
        uint256 totalIssued;
        bool active;
    }
    
    // tokenId => CredentialType
    mapping(uint256 => CredentialType) public credentialTypes;
    
    // tokenId => recipient => metadata (виключає дублікати)
    mapping(uint256 => mapping(address => bytes32)) public credentialMetadata;
    
    // SBT: запобігання передачі credentials
    function safeTransferFrom(address, address, uint256, uint256, bytes memory)
        public pure override 
    {
        revert("Credentials are non-transferable");
    }
    
    function safeBatchTransferFrom(address, address, uint256[] memory, uint256[] memory, bytes memory)
        public pure override 
    {
        revert("Credentials are non-transferable");
    }
    
    function issueCredential(
        address recipient,
        uint256 credentialTypeId,
        bytes32 metadataHash
    ) external onlyRole(ISSUER_ROLE) {
        require(credentialTypes[credentialTypeId].active, "Credential type inactive");
        require(credentialMetadata[credentialTypeId][recipient] == 0, "Already issued");
        
        _mint(recipient, credentialTypeId, 1, "");
        credentialMetadata[credentialTypeId][recipient] = metadataHash;
        credentialTypes[credentialTypeId].totalIssued++;
        
        emit CredentialIssued(recipient, credentialTypeId, metadataHash);
    }
    
    // Batch видача кількох типів credentials одному отримувачу
    function batchIssueCredentials(
        address recipient,
        uint256[] calldata credentialTypeIds,
        bytes32[] calldata metadataHashes
    ) external onlyRole(ISSUER_ROLE) {
        uint256[] memory amounts = new uint256[](credentialTypeIds.length);
        for (uint i = 0; i < credentialTypeIds.length; i++) {
            amounts[i] = 1;
        }
        _mintBatch(recipient, credentialTypeIds, amounts, "");
    }
}

Metadata стандарт

IPFS metadata для кожного credential по Open Badges 3.0 схемі:

{
  "@context": ["https://www.w3.org/2018/credentials/v1", "https://w3id.org/openbadges/v3"],
  "type": ["VerifiableCredential", "OpenBadgeCredential"],
  "name": "Advanced Solidity Developer",
  "description": "Завершення курсу Advanced Solidity з оцінкою ≥ 85%",
  "image": "ipfs://QmBadgeImage...",
  "criteria": {
    "narrative": "Завершити всі модулі, пройти фіналь екзамен з оцінкою ≥ 85%"
  },
  "credentialSubject": {
    "achievement": {
      "achievementType": "Certificate",
      "creator": { "id": "did:ethr:0xIssuerAddress", "name": "Blockchain Academy" },
      "name": "Advanced Solidity Developer"
    }
  },
  "issuanceDate": "2024-01-15T10:00:00Z"
}

Верифікація роботодавцем

Спрощений flow для HR:

async function verifyCredentialPortfolio(
  candidateAddress: string,
  requiredCredentials: string[]
): Promise<PortfolioVerification> {
  
  const tokenIds = await Promise.all(
    requiredCredentials.map(name => getTokenIdByName(name))
  );
  
  const balances = await credentialsContract.balanceOfBatch(
    tokenIds.map(() => candidateAddress),
    tokenIds
  );
  
  const verifiedCredentials = await Promise.all(
    tokenIds.map(async (tokenId, index) => {
      if (balances[index].eq(0)) return { name: requiredCredentials[index], valid: false };
      
      const metadataHash = await credentialsContract.credentialMetadata(tokenId, candidateAddress);
      const metadata = await fetchFromIPFS(metadataHash);
      
      return {
        name: requiredCredentials[index],
        valid: true,
        issuedAt: metadata.issuanceDate,
        issuer: metadata.credentialSubject?.achievement?.creator?.name,
      };
    })
  );
  
  return {
    candidateAddress,
    verifiedCredentials,
    allRequirementsMet: verifiedCredentials.every(c => c.valid),
  };
}

Система academic credentials з ERC-1155, Open Badges 3.0 metadata та HR портальм верифікації — 4-6 тиж розробки. Додання W3C VC підписів і DID інтеграції — ще 2-3 тиж.