Skip to content

Latest commit

 

History

History
42 lines (38 loc) · 3.52 KB

File metadata and controls

42 lines (38 loc) · 3.52 KB

jsw-rnd-javascript-crypto-task

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 человек