Pull to refresh

Comments 11

Я не пойму, почему в статье противопоставляется биткоин и BFT, при том что сам биткоин реализован на основе BFT.

Это не совсем так. Если коротко, то проблема Византийских генералов заключается в том, чтобы распределенные участники системы могли принять одинаковое решение, прежде чем что-то предпринять. Т.е. определить корректность информации, полученной от одного из них, прежде чем действовать. Решение этой задачи в алгоритмах семейства BFT происходит посредством раунда согласований.

Алгоритм Биткоина позволяет получить консистентное состояние на всех узлах, но не решает эту задачу здесь и сейчас. Он откладывает ее решение в будущее. Если информация полученная одной частью сети отличается от информации другогой части, они продолжают строить независимые цепочки (форк), пока одна из цепочек не станет длиннее. Пока этого не произойдет, система находится в неопределеном состоянии.

Именно в этом заключается противопоставление. И речь не о том, что алгоритм Биткоина чем-то плох - со своей задачей он прекрасно справляется. Речь о том, чтобы найти алгоритм, решающий определенные задачи в заданных условиях.

А как по вашему определяется какая цепочка будет выбрана за основную если не методом BFT?

Узлы Биткоина не выбирают самую длинную цепочку в ходе каких-либо обсуждений. Это в целом не задача распределенного согласования, где необходимо решать византийскую проблему. Это локальный процесс для каждого узла.

Как только нода узнает что где-то существует цепочка с высотой, большей чем ее собственная, в интересах ноды получить эту цепочку, провалидировать и начать добавлять блоки именно в нее. Иначе она будет тратить свои ресурсы впустую.

А узнают узлы о новых блоках (и соответственно обо всех цепочках) путем рассылки сообщений друг другу по принципу "best effort basis". Т.е. никакой попытки договориться о содержании блока тут тоже нет.

Простите, но в BFT никто ни о чем не договаривается. Ночь, генералы, шпиоы, потеря связи - никаких условий для обсуждений, а на утро надо решить да или нет.

Простите, но нельзя принять совместное решение не договариваясь )) Чтобы расширить понимание BFT за рамки метафоры про "генералов в ночи" предлагаю ознакомиться вот с этой очень хорошей статьей.

В этом и есть прелесть PoW - он позволяет принять совместное решение не договариваясь и благодаря этому свойству у него нет ограничения по масштабируемости сети. Во всех остальных консенсусах придется мириться с небольшим количеством валидаторов из за необходимости физической коммуникации между ними. Можно сказать, что в PoW сначала происходит принятие решения (нахождение nonce) и потом происходит общение между узлами, а в других консенсусах наоборот, сначала узлы договариваются между собой, того глядишь еще и голосуя по несколько раз и только потом фиксируют изменения. Переверните порядок действий и получите масштабируемый консенсус

Нет ) В PoW вообще не принимается "совместное решение". В PoW самостоятельное решение принимает каждый отдельный узел, получив новый блок. А дальше мы молимся что тот же самый блок примет большинство. Если нет - выбрасываем свою цепочку.

Ну и назвать сеть обрабатывющую 7 (семь) транзакций в секунду "масштабируемой" - довольно смело. В понимании айтишников, "масштабируемость" это не про количество серверов ))

Посмотрите под другим углом. Совместное решение состоит в том, что узлы считают правильной информацией ту для которой есть вычисленный nonce. К консенсусу же пришли, значит договорились. И в данном случае узлам не имеющим вычисленный nonce не нужно отправлять свою версию блоков в сеть и голосовать за неё т.к. заранее известно, что она будет всеми отклонена.

За принятие блока другими узлами свечку ставить не обязательно :D Он будет принят в любом случае, но да, возможно у кого-то больше вычислительной мощности и на короткое время появится форк который будет считаться основной веткой либо же будет отброшен. В прочем для пользователя эти детали мало интересны т.к. его транзакция попадет в ту или иную ветку при этом тысячи майнеров даже не заметили и не всплакнули из за отклонения их ветки т.к. уже давно пользуются пулами. Это конечно приводит к тому что придется подождать еще N блоков что бы ветка стала достаточно длинной и её не отклонили, но никто и не говорит, что консенсус идеальный.

Айтишники разные бывают, а вот масштабируемость может относиться к любому параметру системы. В контексте децентрализации, криптовалюта основанная на блокчейне с "двадцатью", прости господи, валидаторами это - скам. В таком случае могли бы не мучаться и сделать классический бэкенд без функционала изменения данных, но видимо так отделу продаж тяжело работать. Вероятно есть варианты использования блокчейна где количество участников (валидаторов) ограничено, например 5 организаций - вот только зачем там блокчейн не представляю, выглядит как хайп.

А что касается PoW то предполагаю, что существует более простой способ однозначного (а значит и быстрого) отображения множества транзакций на временную шкалу без затрат на электроэнергию и оборудование но с сохранением неограниченности количества участников сети

Это неправильный угол ) найденый nonce не имеет отношения к "согласованию", это просто заявка на право выпустить блок. Для PoA алгоритмов эта операция еще проще - "майним по порядку!", но это не значит что пришли к консенсусу.

После того как майнер нашел правильный хэш он напихивает в блок всякого, может накосячить. Остальным надо проверить что он все сделал как надо. Каждый майнер будет валидировать блок самостоятельно, никому об этом не скажет. Свечку никто ставить не будет, но если следующий майнер этот блок не принял, он начнет строить альтернативную цепочку - это и есть процесс согласования. Каждый новый майнер, выпуская блок поверх предыдущего, подтверждает что он согласен с историей - это и есть "консенсус". Только в нем нет финальности, когда мы можем 100% сказать что вот этот блок уже никуда не денется.

Про неограниченность PoW - консенсус состоит из нескольких частей - а) определить кто будет выпускать блок б) определить что он не накосячил в) опционально - зафиналить. Быстро, однозначно, без затрат энергии, неограниченные участники, много транзакций - все эти требования по разному влияют на каждую отдельную часть консенсуса. Рассматривать их приходится в совокупности и искать баланс под конкретную задачу, а не в вакууме - "one consensus to rule them all"!!! ))

Про масштабируемость, децентрализацию и отдел продаж - тема отдельной статьи ) Но честно, продавать классический бэкенд гораздо проще блокчейна. И блокчейн точно не нужен где ни попадя, но он так же не везде "хайп", местами позволяет делать что-то интересное (и полезное).

Для PoA не проще, что бы "майнить по порядоку" надо что бы этот порядок кто-то установил (и о нем еще надо договариваться если список участников не фиксированный).

Да, можно сказать, что Nonce это право выпустить блок, но в этом и есть соглашение - принимаются все блоки у которых есть доказательство "права выпуска". И если "примерно в одно время" доказательство было вычислено несколькими майнерами то в сети будет 2 блока и они оба будут считаться валидными. Кто то начнет майнить с блока A, кто то с B, но в конце концов у одной из ветвей будет больше вычислительной мощности, она станет длиннее другой и будет принята каждым узлом (кто то может конечно и не принять, но это уже его проблема). Можно сказать, что в PoW (в оригинальном, про другие не знаю) нет консенсуса в привычном понимании т.к. нет накладных сетевых расходов для передачи данных о голосах, наборах валидаторов, раундах и т.д., есть передача примерно раз в 10 минут собранных и в основном валидных блоков из которых каждый узел наращивает ветви - это и имел ввиду под "другим углом".

PoW как альтернатива "досудебного решения конфликта" позволяет избавиться от лишних коммуникаций и ограничения на кол-во участников сети за счет того что решение принимается "вне сети". Принимать решения можно так же вне сети, например детерминированным отображением одного множества в другое и если учесть соотношение мощности множеств к реально присутствующему кол-ву их элементов, то вероятность конфликтов, а значит, ветвлений и откатов будет достаточно мала. Т.к. чистая функция отображения без подбора доказательства не требует много энергии то и не требуется дорогое оборудование, а поскольку порядок детерминирован (т.е. консенсус по поводу того что будет принято, а что нет достигнут заранее, остается только строить ветви (в основном одну)) то и пропускная способность ограничена физическими ресурсами (сеть, процессор и т.д.). От PoW здесь в принципе ничего не остается т.к. нет никакой 'W'.

PoW мог бы быть быстрее и менее энергозатратным, но при его ускорении увеличивается количество ветвлений и их длинна, в общем получается шило на мыло. Это из за не очень эффективного способа распределения "права на выпуск" блока, но сам по себе подход оказался прорывным.

Про продажи в принципе это на совести отдела продаж, а вот про полезные примеры и почему их нельзя реализовать классическим способом было бы интересно узнать. Пока из полезного в блокчейне вижу несколько вещей

  • отпадает необходимость в третьей стороне (привет банкирам с их увядающей монополией) для обеспечения корректности транзакций

  • как протокол взаимодействия между приложениями - очень удобно, но есть опасения на счет резиновости систем хранения данных

Sign up to leave a comment.