Simple blockchain with cryptocurrency implemented in JS for learning purpose.
Всю логику максимально размещаем во frontend. В backend выделяем только обработку входящих поключений.
- Создание единого интерфейса кошелька/майнера
- Необходимые элементы
- Отображение публичного и приватного ключа
- Баланс кошелька
- Форма отправки: адрес получателя, количество монет
- Сетевой статус: cписок пиров, лог полученных и отправленных сообщений.
- Chain explorer: список блоков, возможность развернуть блок и посмотреть информацию в блоке, поиск по блокам и транзакциям
- Статус майнинга: информация о новом блоке, список транзакций в потенциальном блоке, номер попытки подбора хеша и время
- Необходимые элементы
- Backend
- сокет на nodejs для получения сообщений и передачи их во frontend
- передача внутреннего ip в центральный трекер пиров
- Сетевая часть frontend
- Получение пиров из трекера
- Подключенеи к пирам
- Рассылка пирам сообщений и новых транзакциях, новых блоках и запрос получения копии блокчейна
- Генерация пары RSA ключей, цифровая подпись транзаций.
- Библиотеки node-rsa, js-sha256.
- Проверка валидности блокчейна. Передача баланса и истории во фронт
- Майнинг - система POW расчет контрольного числа для блока
- Проверка валидности нового блока
- Выделение в Webworker
- Рассылка нового блока по сети
- Для простоты блок будет содержать одну транзакцию. Майнинг начинается когда по сети от пиров приходит новая подписанная валидная транзакция
- Хеширование SHA256, cложность фиксированная. Подберем там, чтобы средний ноутбук справлялся за 5-15 секунд.
- Получение нового блока
- Проверка на вилки, ситуацию когда два майнера сгенерировали новый блок одновременно (? можно ли упростить и обойтись без неё ?)
- Валидация блока и обновление данных
- Создание транзации
- Проверка баланса, RSA подпись приватным ключом и рассылка по всем пирам.
- Frontend интерфейс - 1-2 человека
- Backend сервер - 1 человек
- Шифрование, майнинг и работа с блоками - 1 человек
- Работа с сетью на frontend - 1 человек