Розробка системи верифікації дипломів і сертифікатів на блокчейні
Верифікація диплома — конкретна бізнес-задача: роботодавець або навчальна установа повинна перевірити подлинність документу за хвилини без довгого листування з університетом. Блокчейн тут працює як immutable нотаріус: факт видання диплома зафіксований і доступний для перевірки кожному.
Мінімально необхідна архітектура
Верифікація диплома не вимагає складних VC або DID систем. Достатньо простої схеми: університет зберігає хеш диплома у блокчейні, при верифікації порівнюємо хеш представленого документу з on-chain записом.
contract DiplomaVerification {
struct DiplomaRecord {
bytes32 documentHash; // SHA-256 хеш PDF документу
address institution;
string recipientName; // ім'я — НЕ адреса, студенти часто без гаманців
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 видача
Для університетів — видача сотень дипломів після випуску:
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 хеш batch, верифікація через Merkle proof.
Розгортання на мережах
Для максимальної надійності і довголіття — розгортання на кількох мережах або використання L2 з calldata опублікованим на Ethereum.
| Мережа | Переваги | Недоліки |
|---|---|---|
| Ethereum mainnet | Максимальна надійність | Високий gas |
| Polygon | Дешево, швидко | Менше децентралізовано |
| Arbitrum | L2 надійність, дешево | Вимагає знайомства з L2 |
Рекомендація: Polygon для MVP, Arbitrum для production надійності.
Розробка системи верифікації дипломів (контракт + портал адміна університету + сторінка верифікації) — 3-5 тиж.







