Любой человек знает, что от квартиры полагается иметь запасной ключ, а от неприятностей – запасной план. У воинов Древнего Рима были запасной меч и дополнительные дротики. Запасной парашют и два двигателя в самолете – это тоже примеры страховки методом дублирования. Или взять космическую ракету. Она стоит миллионы. Поэтому все основные узлы в ней имеют дублеров. И если вдруг один узел не срабатывает, то тут же включается второй, причем без задержки, практически одновременно с первым. Чем больше таких дублирующих блоков, тем надежнее ракета.
Дублирование делает надежнее, безотказнее не только технические системы, но и информационные, такие как блокчейн. И тут возникает вопрос: сколько нужно дублирующих блоков, чтобы система работала без сбоев? Можно ли сделать вывод, что в целом система работает корректно, если часть блоков работает неправильно?
Представим, что есть распределенная сеть, т. е. несколько компьютеров, серверов, которые находятся в абсолютно разных точках земного шара, объединенных в одну цепь. От каждого из них должно быть разослано какое-то сообщение всем остальным компьютерам. А те, получив его, в свою очередь тоже продолжат рассылку. Но некоторые из них могут принадлежать злоумышленникам, а некоторые просто не работать. Спрашивается: какая часть серверов должна функционировать нормально, чтобы те инструкции, что содержатся в рассылаемом сообщении, были выполнены правильно, несмотря на противодействие и сбои? Ведь распределенная сеть компьютеров, участвующих в блокчейне, не должна зависеть от злого умысла или халатности одного или ряда участников. Есть ли математически доказанное решение, как обеспечить консенсус в условиях децентрализации и отсутствия доверия между участниками системы? Такое решение позволило бы участникам достигнуть единства относительно того, какие транзакции считать верными.
Оказалось, что эта задача не нова. Как логическая дилемма она была придумана в 1982 году и получила название «Задача византийских генералов». Суть