Система верификации дипломов на основе блокчейна, которая позволяет университетам выдавать цифровые дипломы, владельцам хранить их в мобильном кошельке, а верификаторам запрашивать и проверять дипломы с выборочным раскрытием информации, все закреплено в сети L2 блокчейна без раскрытия личных данных в блокчейне.
- Frontend: Next.js 16 с React 19 и Tailwind CSS 4
- Backend: Convex (база данных в реальном времени, бессерверные функции, аутентификация)
- Blockchain: Ethereum L2 (Arbitrum) со смарт-контрактами на Solidity
- Mobile: React Native с Expo (в планах)
- Development: Hardhat для разработки смарт-контрактов
mvp-blockchain/
├── app/ # Каталог приложения Next.js
│ ├── layout.tsx
│ ├── page.tsx
│ └── globals.css
├── convex/ # Backend Convex
│ ├── schema.ts # Схема базы данных
│ ├── convex.config.ts # Конфигурация Convex
│ ├── universities.ts # Функции портала университета
│ ├── wallet.ts # Функции кошелька
│ ├── verifiers.ts # Функции портала верификатора
│ ├── blockchain.ts # Интеграция с блокчейном
│ ├── batches.ts # Управление пакетами
│ ├── diplomas.ts # Запросы дипломов
│ ├── batchItems.ts # Управление элементами пакетов
│ └── cron.ts # Запланированные задачи
├── contracts/ # Смарт-контракты
│ ├── PublisherRegistry.sol # Контракт аттестации университета
│ └── BatchAnchor.sol # Контракт закрепления пакетов
├── scripts/ # Скрипты развертывания
│ └── deploy.js # Развертывание контрактов
├── hardhat.config.js # Конфигурация Hardhat
├── plans/ # Документация
│ └── mvp-implementation-plan.md
└── package.json
- universities: Информация об издателях (университетах) со статусом аттестации
- diplomas: Записи дипломов с отслеживанием статуса
- users: Аккаунты владельцев кошельков
- verifiers: Аккаунты верификаторов
- verificationRequests: Отслеживание запросов на верификацию
- batches: Записи закрепления пакетов
- batchItems: Элементы дерева Меркла для дипломов
Модуль университетов (convex/universities.ts)
getProfile- Получить профиль университетаlistDiplomas- Список выданных дипломовgetDiploma- Получить детали дипломаgetDiplomaStatus- Получить статус закрепленияgetStats- Получить статистику университетаregister- Зарегистрировать новый университетattestPublisher- Инициировать аттестацию издателяupdateAttestation- Обновить аттестацию с хешем транзакцииcreateDiploma- Создать новый диплом с хешемsendInvitation- Отправить приглашение владельцу
Модуль кошелька (convex/wallet.ts)
listDiplomas- Список принадлежащих дипломовgetDiploma- Получить детали дипломаacceptDiploma- Принять приглашение на дипломlistVerificationRequests- Список ожидающих запросов на верификациюapproveSharing- Одобрить предоставление с выборочным раскрытиемrejectSharing- Отклонить запрос на предоставлениеregisterUser- Зарегистрировать владельца кошелькаupdateUserDeviceToken- Обновить токен push-уведомлений
Модуль верификаторов (convex/verifiers.ts)
createVerificationRequest- Создать запрос на верификациюgetVerificationResult- Получить результат верификацииgetOnChainProof- Получить доказательство в блокчейнеlistVerificationRequests- Список запросов на верификациюregisterVerifier- Зарегистрировать верификатора
Модуль блокчейна (convex/blockchain.ts)
attestPublisherOnChain- Аттестовать издателя в ArbitrumcreateBatchAnchor- Создать и закрепить пакетverifyDiplomaOnChain- Проверить диплом в блокчейнеbuildMerkleTree- Построить дерево Меркла из хешейanchorBatch- Закрепить пакет в блокчейнеverifyOnChain- Проверить в блокчейне
Модуль пакетов (convex/batches.ts)
create- Создать запись пакетаupdateStatus- Обновить статус пакетаgetBatchStatus- Получить статус пакетаlistBatches- Список пакетов для университета
Модуль дипломов (convex/diplomas.ts)
getPendingForBatch- Получить дипломы, ожидающие закрепленияupdateStatus- Обновить статус дипломаgetDiplomaByHash- Получить диплом по хешу
Модуль элементов пакетов (convex/batchItems.ts)
create- Создать элемент пакета с доказательством Меркла
Модуль Cron (convex/cron.ts)
anchorPendingBatches- Закрепить ожидающие пакетыscheduleBatchAnchoring- Запланировать почасовое закрепление
PublisherRegistry (contracts/PublisherRegistry.sol)
- Аттестовать издателей университетов в блокчейне
- Хранить информацию об издателях
- Проверять статус аттестации издателя
- Функции только для администратора для управления
Ключевые функции:
attestPublisher(address, string)- Аттестовать нового издателяisPublisherAttested(address)- Проверить статус аттестацииgetPublisherInfo(address)- Получить детали издателяtransferAdmin(address)- Передать права администратора
BatchAnchor (contracts/BatchAnchor.sol)
- Закреплять пакеты хешей дипломов с использованием деревьев Меркла
- Проверять дипломы с использованием доказательств Меркла
- Отслеживать пакеты по издателям
Ключевые функции:
anchorBatch(bytes32, bytes32, uint256)- Закрепить пакетgetBatch(bytes32)- Получить информацию о пакетеverifyDiploma(bytes32, bytes32, bytes32[])- Проверить дипломgetPublisherBatches(address)- Получить пакеты издателя
- Node.js 20.9.0 или выше
- npm или yarn
- Аккаунт Convex (бесплатно на convex.dev)
- Ethereum кошелек с testnet ETH для развертывания
# Установить зависимости
npm install
# Установить Convex CLI (требуется Node 20+)
npm install -g convex# Войти в Convex
npx convex login
# Инициализировать Convex (если еще не сделано)
npx convex init
# Развернуть схему
npx convex deployВажно: Функции сервера Convex требуют установки переменных окружения в среде развертывания Convex, а не только в .env.local.
Запустите автоматизированный скрипт настройки:
npm run setup:convexИли вручную установите необходимые переменные:
# Установить PRIVATE_KEY
npx convex env set PRIVATE_KEY "your_private_key_here"
# Установить ARBITRUM_SEPOLIA_RPC_URL
npx convex env set ARBITRUM_SEPOLIA_RPC_URL "https://sepolia-rollup.arbitrum.io/rpc"
# Установить ARBISCAN_API_KEY (опционально)
npx convex env set ARBISCAN_API_KEY "your_arbiscan_api_key"Если вы столкнулись с ошибкой Missing ARBITRUM_SEPOLIA_RPC_URL or PRIVATE_KEY environment variables:
-
Проверьте, что переменные установлены в Convex:
npx convex env list
-
Установите отсутствующие переменные, используя команды выше
-
Перезапустите сервер разработки Convex:
# Остановите текущий сервер (Ctrl+C) npx convex dev -
Проверьте панель Convex:
- Перейдите на https://dashboard.convex.dev
- Перейдите в Settings → Environment Variables
- Убедитесь, что все необходимые переменные присутствуют
Для подробного устранения неполадок см. ENV_FIX_GUIDE.md.
# Установить зависимости Hardhat
npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-verify dotenv
# Создать файл .env
echo "PRIVATE_KEY=your_private_key" > .env
echo "ARBITRUM_SEPOLIA_RPC_URL=https://sepolia-rollup.arbitrum.io/rpc" >> .env
echo "ARBISCAN_API_KEY=your_arbiscan_api_key" >> .env
# Скомпилировать контракты
npx hardhat compile
# Развернуть в Arbitrum Sepolia (testnet)
npx hardhat run scripts/deploy.js --network arbitrumSepolia
# Развернуть в Arbitrum One (mainnet)
npx hardhat run scripts/deploy.js --network arbitrum# Запустить сервер разработки Next.js
npm run dev
# Запустить сервер разработки Convex (в другом терминале)
npx convex dev- Регистрация университета: Университет регистрируется → Генерируется ключ издателя → Аттестация в блокчейне
- Выдача диплома: Университет создает диплом → Вычисляется хеш → Сохраняется офлайн → Отправляется приглашение
- Принятие диплома: Владелец получает приглашение → Принимает диплом → Статус обновляется
- Закрепление пакета: Задача Cron собирает принятые дипломы → Строится дерево Меркла → Пакет закрепляется в блокчейне
- Запрос на верификацию: Верификатор создает запрос → Владелец уведомляется → Владелец одобряет предоставление
- Верификация: Верификатор получает предоставленные данные → Проверка в блокчейне → Отображается доказательство
- Офлайн: Все личные данные (PII) хранятся зашифрованными в Convex
- В блокчейне: Только хеши, корни Меркла и временные метки
- Выборочное раскрытие: Владелец выбирает, какие поля предоставлять
- Ограниченный по времени доступ: Предоставленные данные истекают после TTL
✅ Неделя 1-2: Основной поток
- Выдача диплома университетом
- Принятие диплома кошельком
- Запрос на верификацию и предоставление с согласием
✅ Неделя 3: Аттестация издателя
- Генерация ключа издателя
- Аттестация в блокчейне
- Интеграция с обозревателем блоков
✅ Неделя 4: Закрепление пакетов
- Реализация дерева Меркла
- Создание и закрепление пакетов
- Страница публичного доказательства
✅ Неделя 5: Полировка UX
- Индикаторы статуса
- Механизмы повтора
- Обработка ошибок
✅ Неделя 6: Тестирование и демонстрация
- Структура E2E тестов
- Подготовка демонстрации
- Критерии приемки
- UI портала университета
- UI портала верификатора
- Мобильный кошелек (React Native)
- Интеграция ethers.js для Arbitrum
- Мониторинг транзакций
- Оптимизация газа
- Модульные тесты для функций Convex
- Тесты смарт-контрактов
- E2E тесты с Playwright
- Развертывание Convex в продакшн
- Развертывание смарт-контрактов в testnet
- Развертывание в Vercel
- Развертывание мобильного приложения
- Все PII зашифрованы при хранении и передаче
- Никаких личных данных в блокчейне
- Ключи издателей хранятся безопасно
- Доказательства Меркла для верификации
- Выборочное раскрытие с явным согласием
MIT
Это MVP реализация. Участие приветствуется для функций, готовых к продакшн.