Розробка системи цифрових сертифікатів на блокчейні
Блокчейн-сертифікати вирішують головну проблему традиційних цифрових документів: верифікацію. PDF диплом можна підробити. Блокчейн-сертифікат верифікується за секунди — будь-хто може перевірити подлинність без звернення до видавця.
Архітектура системи
Видавець (університет, платформа, компанія) видає сертифікат, підписує і записує хеш on-chain.
Отримувач отримує сертифікат (PDF + JSON) та посилання для верифікації.
Верифікатор (роботодавець, інший університет) перевіряє подлинність — хеш документу збігається з on-chain записом.
On-Chain зберігання: хеші, не дані
Зберігання повних даних on-chain дорого і порушує приватність. Правильний підхід: зберігати тільки хеш сертифікату.
contract CertificateRegistry {
mapping(bytes32 => CertificateRecord) public certificates;
struct CertificateRecord {
address issuer;
uint256 issuedAt;
bool revoked;
string metadataURI; // IPFS CID з метаданими
}
event CertificateIssued(bytes32 indexed certHash, address indexed recipient, address indexed issuer);
event CertificateRevoked(bytes32 indexed certHash);
function issueCertificate(
bytes32 certHash,
address recipient,
string calldata metadataURI
) external onlyAuthorizedIssuer {
require(certificates[certHash].issuedAt == 0, "Already issued");
certificates[certHash] = CertificateRecord({
issuer: msg.sender,
issuedAt: block.timestamp,
revoked: false,
metadataURI: metadataURI
});
emit CertificateIssued(certHash, recipient, msg.sender);
}
function verifyCertificate(bytes32 certHash) external view
returns (bool valid, address issuer, uint256 issuedAt) {
CertificateRecord memory record = certificates[certHash];
valid = record.issuedAt > 0 && !record.revoked;
issuer = record.issuer;
issuedAt = record.issuedAt;
}
}
Стандарт Blockcerts
Blockcerts — відкритий стандарт для blockchain сертифікатів (MIT + Learning Machine). Описує JSON-LD формат та процес верифікації.
{
"@context": ["https://www.w3.org/2018/credentials/v1", "https://w3id.org/blockcerts/v3"],
"type": ["VerifiableCredential", "BlockcertsCredential"],
"issuer": "did:ethr:0xIssuerAddress",
"issuanceDate": "2024-01-15T00:00:00Z",
"credentialSubject": {
"id": "did:ethr:0xRecipientAddress",
"achievement": {
"name": "Бакалавр комп'ютерних наук"
}
},
"proof": {
"type": "MerkleProof2019",
"merkleRoot": "0xabc123",
"txId": "0xTransactionHash",
"targetHash": "0xCertificateHash"
}
}
Batch видача через Merkle Tree
Видача 1000 дипломів в одній транзакції:
Merkle tree з хешів всіх сертифікатів. Тільки merkle root зберігається on-chain. Кожен сертифікат містить merkle proof — шлях від листа до кореня. Верифікація: обчислити хеш сертифікату → перевірити merkle proof → порівняти з on-chain root.
Економія: 1 транзакція замість 1000. Вартість верифікації — локальні обчислення.
Розробка системи цифрових сертифікатів — 3-6 тиж для базової системи з web UI для видачі та верифікації.







