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







