Введение
в блокчейн
и алгоритмы
консенсуса
Филипп Филиппак
О чём мы сегодня не будем говорить
• выгодно ли майнить?
• стоит ли покупать Bitcoin?
• данные — у одного участника
• он сам может менять правила
• нам нужно ему доверять
В централизованных системах:
В блокчейне:
• данные — у всех участников
• данные неизменны
В блокчейне:
• правила меняются коллективно
• размер комиссии — тоже
В блокчейне:
• доверие заменяется математикой
• сложность атаки существенно возрастает
Проблемы блокчейна: сложность
• баги из-за децентрализации
Проблемы блокчейна: сложность
• баги из-за децентрализации
• уязвимости консенсуса
Проблемы блокчейна: сложность
• баги из-за децентрализации
• уязвимости консенсуса
• специфика типа смарт-контрактов
Проблемы блокчейна: объём
• десятки гигабайт в крупных блокчейнах
Проблемы блокчейна: объём
• десятки гигабайт в крупных блокчейнах
• хранятся у каждого участника сети
Проблемы блокчейна: объём
• десятки гигабайт в крупных блокчейнах
• хранятся у каждого участника сети
• в Bitcoin ~12000 активных нод
Размеры блокчейнов, GB
Bitcoin Ethereum Monero
142
165
72
127
18
31
Частичное хранение
• можно хранить только:
Частичное хранение
• можно хранить только:
• последние N блоков
Частичное хранение
• можно хранить только:
• последние N блоков
• блоки с максимальной сложностью
Проблемы блокчейна: скорость
• сетевые задержки при синхронизации
Проблемы блокчейна: скорость
• сетевые задержки при синхронизации
• ожидание подтверждения транзакций
Mempool, или UTX pool
• блок не может быть слишком большим
Mempool, или UTX pool
• блок не может быть слишком большим
• размер блока в Bitcoin ~1 MB
Mempool, или UTX pool
• блок не может быть слишком большим
• размер блока в Bitcoin ~1 MB
• транзакции ожидают своей очереди в mempool
Транзакции в mempool сети Bitcoin
Bitcoin-NG
• генерируем блок
Bitcoin-NG
• генерируем блок
• добавляем туда транзакции
Bitcoin-NG
• генерируем блок
• добавляем туда транзакции
• и так, пока не будет следующего блока
Waves-NG
• первая прикладная реализация
Waves-NG
• первая прикладная реализация
• завтра можно будет протестировать
Waves-NG
• первая прикладная реализация
• завтра можно будет протестировать
• просто погуглите “waves ng”
Транзакция
1 7 5 4 3 … 4 2 5 0 2 0 0 1 0 9 9 … 9 9
тип транзакции
адрес получателя
сумма
комиссия
метаданные
Синхронизация транзакций
Синхронизация транзакций
Синхронизация транзакций
Синхронизация транзакций
Синхронизация транзакций
Блок
• хранит в себе транзакции
Блок
• хранит в себе транзакции
• ссылается на предыдущий блок
Блок
• хранит в себе транзакции
• ссылается на предыдущий блок
• приносит прибыль тому, кто его сгенерировал
Блок
timestamp
Блок
timestamp
hash from previous block
Блок
timestamp
other metadata
hash from previous block
Блок
timestamp
other metadata
hash from previous block
Блок
timestamp
other metadata
hash from previous block
generator’s signature
Блок
timestamp nonce
other metadata
hash from previous block
generator’s signature
Цепочка блоков
timestamp nonce
other metadata
hash from previous block
generator’s signature
Цепочка блоков
timestamp nonce
other metadata
hash from previous block
generator’s signature
timestamp nonce
other metadata
hash from previous block
generator’s signature
Цепочка блоков
timestamp nonce
other metadata
hash from previous block
generator’s signature
timestamp nonce
other metadata
hash from previous block
generator’s signature
Цепочка блоков
timestamp nonce
other metadata
hash from previous block
generator’s signature
timestamp nonce
other metadata
hash from previous block
generator’s signature
timestamp
other metada
hash from previou
generator’s sign
Синхронизация блоков
• блок весит сравнительно много
Синхронизация блоков
• блок весит сравнительно много
• синхронизация не мгновенна
Синхронизация блоков
• блок весит сравнительно много
• синхронизация не мгновенна
• блоки могут появиться одновременно
Форк
22 23 24
Форк
22 23 24 25b
25a • генерация — раз в N секунд
Форк
22 23 24 25b
25a • генерация — раз в N секунд
• случайное событие
Форк
22 23 24 25b
25a • генерация — раз в N секунд
• случайное событие
• вероятность падает
Форк
22 23 24 25b
25a
26 27 …
Кто сгенерирует следующий блок?
Кто сгенерирует следующий блок?
Это решается посредством консенсуса:
Кто сгенерирует следующий блок?
Это решается посредством консенсуса:
• Proof-of-Work
• Proof-of-Stake
• Proof-of-Activity
• Proof-of-Burn
• другие экспериментальные протоколы
Proof-of-Work
• борьба со спамом
Proof-of-Work
• борьба со спамом
• Bitcoin
Proof-of-Work
• борьба со спамом
• Bitcoin
• улучшения и альткоины
Proof-of-Work: майнинг
timestamp nonce
other metadata
hash from previous block
generator’s signature
• слегка меняем блок
Proof-of-Work: майнинг
timestamp nonce
other metadata
hash from previous block
generator’s signature
• слегка меняем блок
• берём от него хэш
Proof-of-Work: майнинг
timestamp nonce
other metadata
hash from previous block
generator’s signature
• слегка меняем блок
• берём от него хэш
• проверяем на соответствие
некоему критерию
Proof-of-Work: майнинг
timestamp nonce
other metadata
hash from previous block
generator’s signature
• слегка меняем блок
• берём от него хэш
• проверяем на соответствие
некоему критерию
• N нулей в начале хэша
Proof-of-Work: майнинг
Proof-of-Work: майнинг
timestamp 1
other metadata
hash from previous block
…
000197f82d
Proof-of-Work: майнинг
timestamp 1
other metadata
hash from previous block
…
timestamp 2
other metadata
hash from previous block
…
000197f82d 002d81b533
Proof-of-Work: майнинг
timestamp 1
other metadata
hash from previous block
…
timestamp 2
other metadata
hash from previous block
…
timestamp
other m
hash from p
000197f82d 002d81b533 7305f
Proof-of-Work: майнинг
Proof-of-Work: майнинг
timestamp 1001
other metadata
hash from previous block
…
a0d58910dd
Proof-of-Work: майнинг
timestamp 1001
other metadata
hash from previous block
…
timestamp 1002
other metadata
hash from previous block
…
a0d58910dd 00001a2fb3
Майнинг в Proof-of-Work
• вероятность пропорциональна мощности железа
Майнинг в Proof-of-Work
• вероятность пропорциональна мощности железа
• больше видеокарт — больше хэшей
Майнинг в Proof-of-Work
• вероятность пропорциональна мощности железа
• больше видеокарт — больше хэшей
• и больше счета за электроэнергию
Энергопотребление растёт
~25 TWh
8 окт 14 окт 20 окт 26 окт 1 ноя
Proof-of-Stake
Proof-of-Stake
• не требует ресурсов на вычисления
Proof-of-Stake
• не требует ресурсов на вычисления
• сложнее в реализации
Proof-of-Stake
• не требует ресурсов на вычисления
• сложнее в реализации
• есть атаки на наивный алгоритм
Proof-of-Stake
• не требует ресурсов на вычисления
• сложнее в реализации
• есть атаки на наивный алгоритм
• у нас в Waves — как раз он
Отличия в структуре блока
• сложность
timestamp target
other metadata
generating signature
generator’s signature
Отличия в структуре блока
• сложность
• генерирующая подпись
timestamp target
other metadata
generating signature
generator’s signature
Майнинг в Proof-of-Stake
• сложность рассчитывается для каждого участника
Майнинг в Proof-of-Stake
• сложность рассчитывается для каждого участника
• базовая сложность
Майнинг в Proof-of-Stake
• сложность рассчитывается для каждого участника
• базовая сложность * баланс
Майнинг в Proof-of-Stake
• сложность рассчитывается для каждого участника
• базовая сложность * баланс * время с прошлого блока
Майнинг в Proof-of-Stake
• сложность рассчитывается для каждого участника
• базовая сложность * баланс * время с прошлого блока
• чем выше это значение, тем меньше сложность
Майнинг в Proof-of-Stake
• случайное значение тоже считается индивидуально
Майнинг в Proof-of-Stake
• случайное значение тоже считается индивидуально
• это хэш от:
Майнинг в Proof-of-Stake
• случайное значение тоже считается индивидуально
• это хэш от:
• генерирующей подписи прошлого блока
Майнинг в Proof-of-Stake
• случайное значение тоже считается индивидуально
• это хэш от:
• генерирующей подписи прошлого блока
• публичного ключа участника
Майнинг в Proof-of-Stake
• случайное значение тоже считается индивидуально
• это хэш от:
• генерирующей подписи прошлого блока
• публичного ключа участника
• чем меньше это значение, тем больше шансы
Майнинг в Proof-of-Stake
• каждый участник “играет в лотерею”
Майнинг в Proof-of-Stake
• каждый участник “играет в лотерею”
• если его хэш:
Майнинг в Proof-of-Stake
• каждый участник “играет в лотерею”
• если его хэш:
• попадает в сложность (меньше, чем target)
Майнинг в Proof-of-Stake
• каждый участник “играет в лотерею”
• если его хэш:
• попадает в сложность (меньше, чем target)
• раньше всех по времени
Майнинг в Proof-of-Stake
• каждый участник “играет в лотерею”
• если его хэш:
• попадает в сложность (меньше, чем target)
• раньше всех по времени
• то он генерирует блок
Майнинг в Proof-of-Stake
timestamp target
other metadata
generating signature
generator’s signature
Node 1 Node 2 Node 3
Майнинг в Proof-of-Stake
timestamp target
other metadata
generating signature
generator’s signature
50000
Node 1 Node 2 Node 3
Майнинг в Proof-of-Stake
timestamp target
other metadata
generating signature
generator’s signature
50000
Node 1
70000
Node 2 Node 3
Майнинг в Proof-of-Stake
timestamp target
other metadata
generating signature
generator’s signature
50000
Node 1
70000
Node 2
60000
Node 3
Майнинг в Proof-of-Stake
timestamp target
other metadata
generating signature
generator’s signature
50000
Node 1
70000
Node 2
60000
Node 3
Hash(s, p)
Майнинг в Proof-of-Stake
timestamp target
other metadata
generating signature
generator’s signature
50000
Node 1
70000
Node 2
60000
Node 3
Hash(s, p)
140000
Майнинг в Proof-of-Stake
timestamp target
other metadata
generating signature
generator’s signature
50000
Node 1
70000
Node 2
60000
Node 3
Hash(s, p)
90000140000
Майнинг в Proof-of-Stake
timestamp target
other metadata
generating signature
generator’s signature
50000
Node 1
70000
Node 2
60000
Node 3
Hash(s, p)
3000090000140000
Майнинг в Proof-of-Stake
timestamp target
other metadata
generating signature
generator’s signature
50000
Node 1
70000
Node 2
60000
Node 3
3000090000140000
Grinding attacks
• атакующий ищет перебором оптимальную цепочку
Grinding attacks
• атакующий ищет перебором оптимальную цепочку
• и перекидывает баланс с адреса на адрес
Grinding attacks: защита
• минимальный генерирующий баланс
Grinding attacks: защита
• минимальный генерирующий баланс
• задержка в обновлении этого баланса
Гибридные алгоритмы консенсуса
Гибридные алгоритмы консенсуса
• Proof-of-Activity
• TwinsCoin
• Ouroboros
Филипп Филиппак,
Waves Platform
github.com/xenohunter

Введение в блокчейн и алгоритмы консенсуса / Филипп Филиппак (Waves Platform)