Разработка системы верификации дипломов и сертификатов на блокчейне

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1306 услуг
Разработка системы верификации дипломов и сертификатов на блокчейне
Средний
~3-5 дней
Часто задаваемые вопросы

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

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

Последние работы

  • 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

Разработка системы верификации дипломов и сертификатов на блокчейне

Верификация диплома — конкретная бизнес-задача: работодатель или учебное заведение должны за минуты убедиться в подлинности документа без длинной переписки с университетом. Блокчейн здесь работает как immutable notary: факт выдачи диплома зафиксирован и доступен для проверки любым желающим.

Минимально необходимая архитектура

Для верификации дипломов не нужны сложные VC или DID системы. Достаточно простой схемы: университет хранит хеш диплома в блокчейне, при верификации сравниваем хеш предъявленного документа с on-chain записью.

contract DiplomaVerification {
    struct DiplomaRecord {
        bytes32 documentHash;   // SHA-256 hash PDF документа
        address institution;
        string recipientName;   // имя — НЕ адрес, students часто без wallets
        string degree;
        uint256 issuedAt;
        bool revoked;
    }
    
    // documentHash => DiplomaRecord
    mapping(bytes32 => DiplomaRecord) public diplomas;
    
    // Авторизованные учебные заведения
    mapping(address => bool) public authorizedInstitutions;
    mapping(address => string) public institutionNames;
    
    event DiplomaIssued(bytes32 indexed documentHash, address indexed institution, string recipientName);
    event DiplomaRevoked(bytes32 indexed documentHash, string reason);
    
    function issueDiploma(
        bytes32 documentHash,
        string calldata recipientName,
        string calldata degree
    ) external onlyAuthorized {
        require(diplomas[documentHash].issuedAt == 0, "Already issued");
        
        diplomas[documentHash] = DiplomaRecord({
            documentHash: documentHash,
            institution: msg.sender,
            recipientName: recipientName,
            degree: degree,
            issuedAt: block.timestamp,
            revoked: false
        });
        
        emit DiplomaIssued(documentHash, msg.sender, recipientName);
    }
    
    function verifyDiploma(bytes32 documentHash) external view returns (
        bool isValid,
        string memory institution,
        string memory recipientName,
        string memory degree,
        uint256 issuedAt
    ) {
        DiplomaRecord memory record = diplomas[documentHash];
        return (
            record.issuedAt != 0 && !record.revoked,
            institutionNames[record.institution],
            record.recipientName,
            record.degree,
            record.issuedAt
        );
    }
}

QR-код верификация

Удобный UX для работодателей: диплом содержит QR-код, при сканировании открывается страница верификации.

// Генерация QR-кода при выдаче диплома
function generateDiplomaQR(documentHash: string, chainId: number): string {
  const verificationUrl = `https://verify.university.edu/diploma?hash=${documentHash}&chain=${chainId}`;
  return QRCode.toDataURL(verificationUrl);
}

// Страница верификации
async function verifyDiploma(documentHash: string): Promise<VerificationResult> {
  const provider = new ethers.JsonRpcProvider(RPC_URL);
  const contract = new ethers.Contract(DIPLOMA_CONTRACT, ABI, provider);
  
  const [isValid, institution, recipientName, degree, issuedAt] = 
    await contract.verifyDiploma(documentHash);
  
  return { isValid, institution, recipientName, degree, issuedAt: new Date(issuedAt * 1000) };
}

Batch выдача

Для университетов — выдача сотен дипломов после graduation:

function issueDiplomaBatch(
    bytes32[] calldata documentHashes,
    string[] calldata recipientNames,
    string[] calldata degrees
) external onlyAuthorized {
    require(documentHashes.length == recipientNames.length, "Length mismatch");
    
    for (uint i = 0; i < documentHashes.length; i++) {
        diplomas[documentHashes[i]] = DiplomaRecord({
            documentHash: documentHashes[i],
            institution: msg.sender,
            recipientName: recipientNames[i],
            degree: degrees[i],
            issuedAt: block.timestamp,
            revoked: false
        });
    }
    
    emit BatchDiplomasIssued(msg.sender, documentHashes.length, block.timestamp);
}

Либо более экономичный вариант — Merkle tree: хранить только root hash всего batch, верификация через Merkle proof.

Хранение сетей

Для максимальной надёжности и долгосрочности — деплой на нескольких сетях или использование L2 с calldata публикуемой на Ethereum.

Сеть Плюсы Минусы
Ethereum mainnet Максимальная надёжность Высокий gas
Polygon Дёшево, быстро Менее decentralized
Arbitrum L2 надёжность, дёшево Требует знакомства с L2

Рекомендация: Polygon для MVP, Arbitrum для надёжности в production.

Разработка системы верификации дипломов (контракт + admin portal для университета + верификационная страница) — 3-5 недель.