Как запустить блокчейн на необитаемом острове

0
ПОДЕЛИТЬСЯ

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

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

Давайте вернемся к оригинальной истории и пройдем весь путь с нашими бесстрашными героями, которые потерпели крушение и оказались на необитаемом острове где-то в южной части Тихого океана — Хьюго, Сойер, Кейт и Джек.

Краткий обзор: группа ребят пытается реализовать IslandCoin — революционную новую валюту, которая положит конец разрушенной экономике бартера на острове. Все согласились, что будет справедливо, если изначально у каждого будет 100 монет. Поскольку у них нет металла для чеканки монет, они должны cделать их с помощью нескольких листов бумаги. Столкнувшись с проблемой доверия, группа не смогла договориться о том, чтобы один человек следил за остатками. Их единственный вариант — поддерживать балансы всем вместе.

Мы начнем с того, что наш случай использования на острове, вероятно, является самой простой реализацией блокчейна. В будущих статьях мы можем исследовать другие реализации и привязать их к таким понятиям, как «Proof of Work» и «Proof of Stake», что поможет нам увидеть их преимущества и недостатки. Но пока давайте начнем так просто, как это получится.

Что мы пытаемся достичь? На самом деле всё очень просто — мы пытаемся поддерживать простую таблицу балансов на листе бумаги. В этой таблице будет показано, сколько монет у каждого из наших героев. Хитрость заключается в том, что у нас не будет единственного листа бумаги, который бы служил источником истины — нам нужно чтобы они все были одинаковыми, при этом позволить каждому в команде поддерживать свою собственную версию — это децентрализованная часть. И, естественно, мы надеемся, что все 4 листа бумаги в конечном итоге будут показывать одно и то же — это консенсусная часть.

Итак, как будет выглядеть этот лист бумаги?

День 1.

У Хьюго сейчас 100 монет,

у Сойера 100 монет,

у Кейт 100 монет,

у Джека 100 монет.

 

Подписано Хьюго, подписано Сойером, подписано Кейт, подписано Джеком.

Этот лист является первым, с которым все согласны, поэтому его обозначили как день 1. Откуда взялись эти балансы? Ранее мы согласились, что будет честно, если у каждого изначально будет 100 монет. Нам также понадобится один из оставшихся в живых, чтобы написать эту бумагу. На самом деле не важно кто, давайте возьмем Хьюго. Он обнародует эту бумагу для всех и убедится, что каждый сохранил себе копию (на острове есть удивительная копировальная машина, о которой я забыл упомянуть).

Поскольку ожидается, что баланс монет будет меняться, мы будем создавать обновленный лист в конце каждого дня. Возможно, не всегда именно Хьюго будет публиковать обновления — мы хотим, чтобы всё было как можно честнее.

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

Сколько людей должно подписать документ, чтобы он считался окончательным и утвержденным? Нам нужно достичь консенсуса, поэтому подписать должно большинство. Поскольку у нас всего 4 человека, большинство из них – это хотя бы 3 из 4. Бумага, приведенная выше, была подписана всеми четырьмя, значит она безусловно окончательная. Почему мы не требуем всех четырех подписей на всех бумагах? Потому что это позволит одному человеку подвергнуть опасности весь процесс. Если Сойер отправится на рыбалку на несколько дней, команда не сможет обновить балансы, пока он не вернётся — это даёт одному человеку слишком много власти. Почему же нам нужно большинство? Почему недостаточно 2 из 4 подписей? Потому что, если мы требуем только 2 из 4, мы можем в итоге получить ситуацию, когда два человека (например, Хьюго и Сойер) подпишут одну версию балансов, а другие 2 человека (Кейт и Джек) подпишут другую версию, которая не соответствует первой. Мы не можем получить две противоречивых версии, которые считаются окончательными.

Утром второго дня Кейт хочет купить помидор. Хьюго продает помидоры по 2 монеты за штуку. Она хочет передать 2 монеты Хьюго. Кейт берет новый лист бумаги и записывает перевод на него:

Кейт действие 1: перевод 2 монеты Хьюго — подписано Кейт

Это первое действие Кейт, поэтому она так его и назвала. Кроме того, Кейт подписала этот документ. У нас должна быть её подпись, чтобы никто не мог подделать перевод с её счета.

Приближается конец второго дня, и команда хочет обнародовать обновленный набор балансов. Хьюго публиковал документ в первый день и собрал все подписи. Имеет смысл делать это по очереди. Команда соглашается использовать простой ротационный порядок: Хьюго, Сойер, Кейт, Джек, Хьюго, Сойер и т. д. Это означает, что за обнародование документа о статусе на второй день ответственным будет Сойер. В представленном им документе отражается трансфер Кейт:

День 2.

Кейт действие 1: перевод 2 монеты Хьюго — подписано Кейт
Теперь у Хьюго сейчас 102 монеты,

у Сойера 100 монет,

у Кейт 98 монет,

у Джека 100 монет.

Подписано Сойером.

Этот документ, который сделал Сойер, ещё не окончательный, потому что он подписан только Сойером. Ему нужно собрать больше подписей. Сойер проходит через команду и просит каждого проверить (верифицировать) и подписать его. Этот документ очень легко проверить. Во-первых, верификатор должен посмотреть в своих документах бумагу статуса, которая показывает балансы за предыдущий день (в данном случае – день 1). Далее, верификатор должен просмотреть новый список транзакций. В этом случае у нас есть только перевод Кейт. Эту транзакцию легко проверить: мы можем убедиться, что она действительно подписана Кейт, и мы можем убедиться, что у Кейт действительно есть монеты на её балансе, чтобы отдать эту сумму Хьюго.

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

День 2.

Кейт действие 1: перевод 2 монеты Хьюго — подписано Кейт
Теперь у Хьюго 102 монеты,

у Сойера 100 монет,

у Кейт 98 монет,

у Джека 100 монет.

Подписано Хьюго, подписано Сойером, подписано Кейт, подписано Джеком.

Наступает день 3. Система работает хорошо, и все с удовольствием тратят свои монеты. Хьюго хочет купить дрова у Сойера за 10 монет. Сойер хочет получить таблетки от Джека за 25 монет, а Джек голодный и хочет заплатить 2 монеты Хьюго чтобы купить помидор. Каждый из них создаёт лист бумаги, в котором подробно описывается их трансфер:

Хьюго действие 1: перевод 10 монет Сойеру — подписано Хьюго

Сойер действие 1: перевод 25 монет Джеку — подписано Сойером

Джек действие 1: перевод 2 монеты Хьюго -подписано Джеком.

Приближается вечер. Сегодняшние балансы публикует Кейт. Чтобы быть уверенным, что Кейт включит эти переводы в своё предложение документа, каждый из них должен предоставить ей копию своего поручения о переводе. На самом деле имеет смысл давать копии всем, потому что человек, желающий выполнить перевод, не обязательно помнит, чья очередь сегодня публиковать обновление. Джек задерживается с передачей копии его поручения Кейт, и к тому времени, когда он приносит его, баланс за день уже написан:

День 3.

Хьюго действие 1: перевод 10 монет Сойеру — подписано Хьюго

Сойер действие 1: перевод 25 монет Джеку — подписано Сойером

Теперь у Хьюго 92 монеты,

у Сойера 85 монет,

у Кейт 98 монет,

у Джека 125 монет.

Подписано Кейт.

Джек разочарован тем, что этот баланс не включает его трансфер. Это означает, что Хьюго не получит плату Джека за помидор и не даст Джеку помидор на ужин. Сегодня Джек будет спать голодным. Он злой уходит искать что-то ещё, чтобы поесть, и не подписывает предложенный Кейт документ за этот день. К счастью, Кейт может получить достаточное количество подписей от остальных членов команды:

День 3.

Хьюго действие 1: перевод 10 монет Сойеру — подписано Хьюго

Сойер действие 1: перевод 25 монет Джеку — подписано Сойером

Теперь у Хьюго 92 монеты,

у Сойера 85 монет,

у Кейт 98 монет,

у Джека 125 монет.

Подписано Кейт, подписано Сойером, подписано Хьюго.

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

День 4, и никто не знает, где Джек. Он ловил рыбу накануне, попал в шторм и не вернулся в лагерь. Это может быть проблемой, потому что сегодня очередь Джека опубликовать обновление баланса. Кейт хочет сделать пару платежей сегодня, она пишет их на листе бумаги и даёт копию всем:

Кейт действие 2: перевод 10 монет Сойеру — подписано Кейт
Кейт действие 3: перевод 2 монеты Хьюго — подписано Кейт

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

День 5, и сегодня Хьюго ответственный за публикацию ежедневного обновления. Уже несколько дней шёл дождь, и Хьюго хочет, чтобы спать было теплее. Он просит Сойера построить ему небольшую деревянную хижину. Сойер хочет 200 монет за работу. Это проблема для Хьюго, потому что у него только 92 монеты. У Хьюго появляется сумасшедшая идея: он тот, кто публикует баланс сегодня, почему бы не добавить безумный трансфер этой суммы Сойеру в любом случае?

Хьюго действие 2: перевод 200 монет Сойеру — подписано Хьюго

Сегодня нет других переводов. У Хьюго есть трансферы Кейт со вчерашнего дня, и трансфер Джека от позавчера, который так не был произведён. Он добавляет все это вместе со своим новым безумным переводом:

День 5 (день 4 пропущен).

Кейт действие 2: перевод 10 монет Сойеру — подписано Кейт

Кейт действие 3: перевод 2 монеты Хьюго — подписано Кейт

Хьюго действие 2: перевод 200 монет Сойеру — подписано Хьюго

Джек действие 1: перевод 2 монеты Хьюго -подписано Джеком.

Теперь у Хьюго 0 монет,

у Сойера 295 монет,

у Кейт 86 монет,

у Джека 123 монеты.

Подписано Хьюго.

Хьюго подписывает это обновление, хотя его трансфер на самом деле не имеет смысла. Чтобы сделать это обновление статуса окончательным, ему нужно собрать ещё 2 подписи. Когда он подходит к Сойеру и Кейт, они замечают, что на предыдущем окончательном балансе (с 3-го дня) у Хьюго было 92 монеты. Как он может отправить 200 монет Сойеру? Они отказываются подписывать этот баланс, пока он не исправит эту ошибку и не удалит этот недействительный трансфер. Хьюго неохотно соглашается и публикует новый баланс, который является правильным. Они в итоге подписывают его:

День 5 (день 4 пропущен).

Кейт действие 2: перевод 10 монет Сойеру — подписано Кейт

Кейт действие 3: перевод 2 монеты Хьюго — подписано Кейт

Джек действие 1: перевод 2 монеты Хьюго -подписано Джеком.

Теперь у Хьюго 96 монет,

у Сойера 95 монет,

у Кейт 86 монет,

у Джека 123 монеты.

Подписано Хьюго, подписано Кейт, подписано Сойером.

Это обновление баланса является окончательным, поскольку содержит 3 подписи.

Утром 6 дня Джек наконец-то возвращается в лагерь. У него была тяжелая пара дней со штормом и прочими неприятностями. Он не участвовал в обсуждениях за последние два дня и пропустил объявления о новых трансферах и публикациях новых обновлений баланса. Он действительно не знает, сколько монет у него есть. Он просит первого выжившего, которого он встретил, дать ему последние обновления, которые он пропустил. Ему дали окончательное обновление на 5-й день и утвержденное обновление Кейт, опубликованное в 3-й день.

Для Джека легко синхронизироваться с остальной частью группы. Он может убедиться, что эти обновления баланса действительно были подписаны как минимум 3 раза, поэтому он может быть относительно спокоен, что они в порядке. Он также может выполнить вычисления самостоятельно на основе этих обновлений и последнего обновления, которое у него есть (от второго дня). Это позволит Джеку участвовать в сегодняшних трансферах так, как будто он ничего не пропустил.

Система работает хорошо. Правда, она немного упрощена, но этого достаточно для потребностей островных жителей. Ну и конечно же, у нас не может быть функционального блокчейна без White Рaper! Команда садится и празднует достижение, опубликовав этот замечательный документ:

Island Coin White Paper

Почему это можно считать блокчейном? Во-первых, каждый лист бумаги, опубликованный ежедневно, представляет собой блок. Каждый блок пронумерован и указывает на предыдущий, образуя цепочку блоков. Чтобы проверить текущее состояние остатков, любой наблюдатель должен начинать с начала цепи (день 1 – Генезис-блок) и проверять каждый из блоков один за другим подряд. Балансы строятся один за другим.

Это идеальная реализация блокчейна? Возможно, нет. Его можно во многом улучшить. Например, он обслуживает только этих четырёх жителей. Что произойдет, если кто-то ещё потерпит крушение на острове? Будет ли этот протокол приспособлен и к ним? Кроме того, в настоящее время этот протокол эксклюзивный; как мы можем превратить его в инклюзивный? Что делать, если мы хотим изменить его, с использованием Proof of Work или, возможно, Proof of Stake?

Мы рассмотрим эти идеи в следующих статьях этой серии.

Источник

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here