Сергей Иванов, Александр Кочетков
На деле результат будет оптимален, если каждый член группы
сделает как лучше для себя и для других *
Часть 1
Еженедельные неформальные встречи любителей Javascript
Отправная точка
Учебный blockchain проект
на создание MVP
Ожидания против реальности
Самая дорогая операция
Много заинтересованных, мало контрибьюторов
Часть написанного кода отправилась в корзину
На погружение в спецификации не всегда есть время
Весь интерфейс на одной странице
На самом деле это просто (Нет)
Часть 2
Блоки содержат данные и связаны через хеш
Непрерывная последовательная цепочка блоков
В блоках записаны истории транзакций
Баланс считается суммой прихода и расхода
from: MEgCQQCVjANn/rmmX75eUPiSJyObigG7DOpub0s8EEY6TofP7gyFWdFcJSYwrzrG3Xj4rdwlDMKojuq9sgCeMxoGPpVjAgMBAAE=
to: MEgCQQDrpV0KEHfUiAMaZE72lWwh6X4wLPHrl+Sq4Q7R+nPAmuQvaVnI4zDaXuh6KxiK7odiU77iL5dpTINeYEY3v18BAgMBAAE=
amount: 5
time: 1517728637428
hash: 5ad0763f0270168e34961a6427e747c635dc8e2d3356b3035a7a482ce76325ca
signature: hGRPj9uCkRLNd/2KSP3QPZ7sYo8SqLbWlGDgEIidW4NZy4pAfdvfXvKT0Ynta5o17uyUhvzkvhWPl45EGCY84A==
(Rivest–Shamir–Adleman)
Пара private key / public key
From и to - адрес кошелька, то есть public key
Signature - цифровая подпись
Можно использовать любое ассиметричное шифрование
для проверки авторства
После создания транзакция отправляется
в mempool каждому узлу
Транзакция выбираются из mempool и пакуются в блок
Зачем майнить, где прибыль?
Награда за блок = эмиссия монет
Легко проверить, сложно подобрать
sha256('JS is awesome') = 1010100101001110110000101101011110100110011111100110001010110000000111111011111011100000001001110111111001010010111010110101010011001000111111111000010100111001110010001001100111001001100001111000110001011011011000010100011001110001101001000100111000100111
sha256('JS is awesome 99828987') = 1111111111111111111111010011011101000010000100001111100111101011110010110110111011111101011000100101101100011100101001000001111011000111000011111000111111010010110100101101010100001010111101111010110000000000110011001010001111010111111000100010011110110001
Репликационная распределенная база данных
На каждом узле своя копия блокчейна и свой mempool
Сеть состоит из независимых узлов
Два типа сообщений: транзакции и блоки
Пришедшая по сети транзакция попадает в локальный mempool
Пришедшие валидные блоки заменяют локальные,
если их длина больше
Соединяем все воедино
Часть 3
на создание MVP
Вспоминаем что ресурсы ограничены
Множество компонентов для отображения работы blockchain:
VueJS имеет низкий порог входа для новых участников
блоки, просмотр блока, транзакции, кошелек, mempool, статистика и тд
Для нас подойдет любое доступное хранилище в браузере
Необходимо установить постоянное peer-to-peer соединение
Способ простого абстрагирования над WebRTC
Предоставляет сигнальный сервер
Не блокирует UI
В браузере отсутствуют крипто-API *
localStorage
Blockchain data #1
Установление peer-to-peer соединение
localStorage
Blockchain data #1
localStorage
Blockchain data #1
mempool
transaction #1
Создание транзакции
localStorage
Blockchain data #1
mempool
not set
Broadcast transaction
message
Blockchain API
Blockchain API
localStorage
Blockchain data #1
mempool
transaction #1
Обновление mempool для каждого peer
localStorage
Blockchain data #1
mempool
transaction #1
Blockchain API
Blockchain API
localStorage
Blockchain data #1
mempool
transaction #1
Майнинг блока
localStorage
Blockchain data #1
mempool
transaction #1
WebWorker
Blockchain API
Blockchain API
localStorage
Blockchain data #1
mempool
transaction #1
Майнинг блока
Blockchain API
localStorage
Blockchain data #2
mempool
not set
Blockchain API
localStorage
Blockchain data #1
mempool
transaction #1
Отправка обновленного blockhain
Blockchain API
localStorage
Blockchain data #2
mempool
not set
Blockchain API
Broadcast blockchain
message
localStorage
Blockchain data #2
mempool
not set
Обновлене blockchain для каждого peer
Blockchain API
localStorage
Blockchain data #2
mempool
not set
Blockchain API
Приветствуются issues и merge requests
Сергей Иванов, @xufocoder
Александр Кочетков, kochetkov.online
Андрей Антонов, github.com/p9gehka
Денис Марокко, top@graine.ru
Ивахненко Дмитрий
Екатерина Куянец
Благодарность WIS Software
за предоставленное рабочее пространство
и освещение проекта в сети
Frontend, WebSocket peers, WebRTC peers
Blockchain
Frontend, WebSocket peers
Frontend
Frontend
Логотип JS Coin