Верифікація дипломів на блокчейні: як позбутися підробок за 2 секунди
Паперовий диплом можна підробити: достатньо хорошого принтера та пари годин. Навіть PDF з підписом — не гарантія, адже файл редагується. Роботодавці витрачають дні на перевірку: запит до вишу, очікування відповіді, бюрократія. Наша команда вирішує це завдання за допомогою смарт-контрактів: хеш документа зберігається в блокчейні, і будь-хто може перевірити автентичність за секунди. За 5 років ми реалізували 20+ проєктів верифікації для університетів і бізнесу, і ось як це працює.
Які проблеми вирішуємо?
Підробка дипломів — бич багатьох галузей. Паперовий диплом легко скопіювати або змінити. Навіть PDF з підписом можна сфабрикувати. Блокчейн робить підробку економічно невигідною: хеш документа зберігається в мережі, і будь-яка розбіжність з оригіналом одразу помітна. Ризик підробки знижується на 90%.
Довга перевірка — запит до університету, очікування відповіді днями або тижнями. Наша система видає результат за 2 секунди: достатньо відсканувати QR-код на дипломі.
Відкликання застарілих дипломів — якщо студента позбавлено ступеня, виш може анулювати запис у контракті. При верифікації буде показано статус revoked.
Як ми це робимо: реальний кейс
Один із клієнтів — регіональний університет із 50 000 студентів. Щороку вони випускають 8 000 дипломів. Раніше перевірка автентичності займала до 10 днів. Ми розгорнули систему на Polygon (газ ~$0.01 за видачу) з batch-функцією та Merkle tree. Тепер усі дипломи випускаються за одну транзакцію, а кожна верифікація коштує копійки. Впровадження зайняло 4 тижні, включно з інтеграцією з їхньою CRM.
Мінімальна архітектура:
contract DiplomaVerification { struct DiplomaRecord { bytes32 documentHash; // SHA-256 hash PDF документа address institution; string recipientName; // ім'я — НЕ адреса, студенти часто без wallets string degree; uint256 issuedAt; bool revoked; } 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-код, при скануванні відкривається сторінка верифікації.
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. Це знижує газ на видачу на 80% порівняно з індивідуальним зберіганням кожного диплома.
Яку мережу обрати?
Якщо бюджет обмежений, Polygon — оптимальний вибір для MVP: газ $0.01 за видачу, швидкість висока. Для production із максимальною надійністю — Arbitrum: використовує безпеку Ethereum, але газ дешевший ($0.10). Ethereum mainnet дає найвищий захист, але газ може бути суттєво дорожчим. Ми деплоїмо контракти в кілька мереж для резервування і рекомендуємо комбінацію Polygon + Arbitrum.
| Мережа | Газ за видачу | Швидкість | Надійність |
|---|---|---|---|
| Polygon | ~$0.01 | 2 сек | Середня (ZK rollup) |
| Arbitrum | ~$0.10 | 5 сек | Висока (Optimistic rollup) |
| Ethereum mainnet | ~$0.50–$5 | 12 сек | Максимальна |
Процес роботи
- Аналітика — обговорюємо вимоги: обсяг випуску, інтеграція з CRM вишу, терміни.
- Проєктування — обираємо мережу, архітектуру (Merkle або прямий storage), дизайн QR-сторінки.
- Розробка смарт-контракту — Solidity 0.8.x з тестами на Foundry (fuzz, unit). Аудит за допомогою Slither і Mythril.
- Backend і frontend — admin-панель для вишу (випуск, відкликання, перегляд) + публічна сторінка верифікації з QR.
- Деплой — deploy на обрані мережі, налаштування DNS, випуск тестового диплома.
- Підтримка — передаємо доступи, документацію, навчаємо адміністраторів.
Що входить у розробку?
| Компонент | Опис |
|---|---|
| Смарт-контракт | DiplomaVerification з тестами, verified на Etherscan |
| Admin-портал | React + ethers.js для випуску/відкликання дипломів |
| Сторінка верифікації | Публічна з QR-кодом і перевіркою за 2 секунди |
| Batch-видача | Опціонально з Merkle tree (економія газу до 80%) |
| Deploy-скрипти | Міграції на кілька мереж |
| Документація | Технічна інструкція для адміністраторів |
| Гарантійна підтримка | 1 місяць після запуску |
Типові помилки при впровадженні
- Зберігати в контракті весь PDF, а не хеш — дорого й небезпечно. Використовуйте лише хеш.
- Використовувати лише одну мережу — при форку або проблемах верифікація зупиниться. Дублюйте дані мінімум на 2 мережі.
- Не відкликати застарілі дипломи — функція revoke обов'язкова.
- Ігнорувати oracle для перевірки статусу вишу — при зміні ключів адміністрації можна втратити доступ.
Терміни реалізації
Типовий проєкт (контракт + admin portal + сторінка верифікації) — від 3 до 5 тижнів залежно від складності інтеграції. При використанні Merkle tree — +1 тиждень.
Замовте консультацію — ми проаналізуємо ваші вимоги та запропонуємо оптимальне рішення. Оцінимо ваш проєкт безкоштовно. Напишіть нам — розкажемо, як впровадити блокчейн-верифікацію у вашому університеті без зайвих витрат. Гарантуємо прозорість і повну документацію.







