Разработка системы цифровых сертификатов на блокчейне
Блокчейн-сертификаты решают главную проблему традиционных цифровых документов: верификацию. PDF диплом можно подделать. Блокчейн-сертификат верифицируется за секунды — проверить подлинность может кто угодно без обращения к издателю.
Архитектура системы
Issuer (университет, платформа, компания) выпускает сертификат, подписывает и записывает хэш on-chain.
Recipient получает сертификат (PDF + JSON) и ссылку для верификации.
Verifier (работодатель, другой университет) проверяет подлинность — хэш документа совпадает с 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;
}
function revoke(bytes32 certHash) external {
require(certificates[certHash].issuer == msg.sender, "Not issuer");
certificates[certHash].revoked = true;
emit CertificateRevoked(certHash);
}
}
Стандарт Blockcerts
Blockcerts — открытый стандарт для blockchain certificates (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": "Bachelor of Computer Science",
"description": "...",
"image": "ipfs://QmHash"
}
},
"proof": {
"type": "MerkleProof2019",
"merkleRoot": "0xabc123",
"txId": "0xTransactionHash",
"targetHash": "0xCertificateHash"
}
}
Batch Issuance через Merkle Tree
Выдать 1000 дипломов одной транзакцией:
Merkle дерево из хэшей всех сертификатов. Только merkle root записывается on-chain. Каждый сертификат содержит свой merkle proof — путь от листа до корня. Верификация: вычислить хэш сертификата → проверить merkle proof → сравнить с on-chain root.
Экономия: 1 транзакция вместо 1000. Стоимость верификации — локальные вычисления.
Разработка системы цифровых сертификатов — 3-6 недель для базовой системы с web UI для выдачи и верификации.







