Тал Кол, создатель Orbs.com, широкомасштабной инфраструктуры публичного блокчейна для пользовательских приложений, на примере сериала Lost («Остаться в живых») рассказывает о том, как можно в условиях необитаемого острова наладить торговлю с помощью технологии блокчейн. Предлагаем вам перевод второй статьи из этого цикла, оригинал которой опубликован на сайте Hacker Noon.
Если вам выпадет судьба оказаться на необитаемом острове, знание о том, как наладить работу децентрализованного консенсуса (иначе говоря, вручную управлять очень простым блокчейном) может принести немалую пользу. Всё, что для этого нужно, — энное число других обитателей острова, данная статья и несколько листков бумаги.
Если вы не уверены, что этот навык полезен для выживания, непременно прочтите первую статью о том, как можно с помощью блокчейна значительно улучшить жизнь на острове.
Давайте вернёмся к изначальной истории и пункт за пунктом разберём процесс, в котором принимают участие наши бесстрашные герои, чей самолёт потерпел крушение где-то в южной части Тихого океана: Хьюго, Сойер, Кейт и Джек.
Краткое содержание первой статьи: обитатели острова пытаются наладить обращение революционно новой монеты IslandCoin, призванной покончить с ущербной бартерной островной экономикой. Члены группы соглашаются, что будет справедливо, если первоначальный запас, принадлежащий каждому, составит 100 монет. Поскольку им недоступен металл для чеканки физических денег, они вынуждены обходиться листками бумаги. Из-за недостатка взаимного доверия члены группы не могут договориться о том, кто станет вести бухгалтерский учёт. Единственное, что остаётся, — делать это совместно.
Мы начнём с модели, которая будет, возможно, самым примитивным внедрением блокчейна в рамках нашего островного сценария использования. В будущих статьях мы изучим другие модели внедрения и привяжем их к концептам доказательства выполнения работы (PoW) и доказательства доли владения (PoS), что поможет нам понять их преимущества и недостатки. Однако начнём мы с самого простого.
Чего мы пытаемся достичь? На самом деле задача очень проста: вести учёт остатка денежных средств на листке бумаги. Этот табель будет показывать, сколько у каждого из наших героев монет. Секрет в том, что у нас нет одного листка бумаги, играющего роль единственного источника истины: мы намерены сохранять объективность, давая каждому участнику возможность поддерживать собственную версию, — в этом и состоит децентрализация. Естественно, мы надеемся, что все четыре листка бумаги в конечном счёте будут показывать один результат — это консенсус.
Как будет выглядеть листок бумаги?
Это первый листок с данными, относительно которых мы приходим к согласию, поэтому он маркирован как день 1. Откуда взялись эти цифры? Мы уже согласились, что будет справедливо, если каждый член группы получит по 100 монет. Кроме того, чтобы составить списки, нам понадобится помощь одного из членов группы. Не имеет значения, кто это будет, поэтому мы назначаем на эту роль Хьюго. С помощью замечательного ксерокса, о существовании которого на острове я забыл упомянуть, он распечатает списки и обеспечит каждого копией.
По мере изменения баланса в конце каждого нового дня мы будем создавать обновлённую версию документа. Однако не всегда этим будет заниматься Хьюго, ведь мы хотим создать максимально честную и прозрачную систему.
Другое важное условие состоит в том, что из-за недостатка взаимного доверия каждый член группы должен в индивидуальном порядке подтверждать обновление статуса. Этого легко можно достичь, позволив каждому обитателю острова подписывать каждую бумагу, но только в том случае, если все согласны с тем, что в ней написано.
Сколько человек должны подписать бумагу, чтобы она имела силу действительного документа? Нам необходим консенсус, поэтому речь идёт о большинстве. Поскольку всего у нас четыре человека, большинство — это как минимум трое. Бумагу (выше) подписали все четверо, поэтому она явно имеет законную силу. Почему мы не требуем поставить подписи от всех участников? Потому что это может поставить под угрозу весь процесс. Если Сойер на несколько дней отлучится на рыбалку, во время его отсутствия члены группы не смогут обновлять баланс, что предоставит одному человеку чрезмерную власть. Зачем нам вообще нужно большинство?
Почему недостаточно двух из четырёх подписей? Если бы их было достаточно, то вышло бы так, что два человека (скажем, Хьюго и Сойер) подписывают одну версию баланса, а другие (Кейт и Джек) — иную. Невозможно две противоречащие друг другу версии реальности считать окончательными.
Утром второго дня Кейт желает купить помидор. Хьюго продаёт помидоры по две монеты за штуку. Кейт хочет перевести Хьюго две монеты. Она берёт новый листок бумаги и записывает на нём трансфер:
Это первое действие Кейт, и она обозначает его таковым. Кроме того, Кейт ставит подпись, которая служит гарантией того, что никто не сумеет подделать просьбу о трансфере от её имени.
Второй день близок к завершению, и члены группы хотят опубликовать обновлённую версию документа с данными по остатку на счетах. Хьюго опубликовал документ за первый день и собрал подписи всех участников. Есть смысл делать это поочерёдно. Члены группы соглашаются установить простой порядок ротации: Хьюго, Сойер, Кейт, Джек, Хьюго, Сойер и так далее. Это значит, что за публикацию отчёта за второй день отвечает Сойер. Документ, который он публикует, отражает трансфер Кейт:
Однако документ не носит окончательного характера, поскольку его подписал только Сойер. Ему нужно собрать больше подписей. Сойер обращается ко всем остальным участникам с просьбой проверить документ и подписать его. Верифицировать его очень легко. Прежде всего верифицирующий должен обратиться к собственной коллекции бумаг и найти документ, демонстрирующий состояние счёта в предыдущий день (день 1 в этом случае). Затем верифицирующий должен перейти к новому списку трансферов. В нашем случае мы имеем только один трансфер, осуществляемый Кейт. Его очень легко проверить: мы можем гарантировать, что документ действительно подписала Кейт, у которой достаточно монет на счету, чтобы передать требуемое количество Хьюго.
Когда все обитатели острова завершают процесс верификации и подписывают бумагу, у Сойера наконец-то есть окончательный вариант документа за второй день, который теперь можно опубликовать для всеобщего обозрения. Каждый делает копию, и все, довольные, расходятся спать.
Наступает день 3. Система работает отлично, и всех радует возможность потратить монеты. Хьюго хочет купить у Сойера дрова за 10 монет. Сойер желает купить у Джека несколько таблеток за 25 монет, а Джеку хочется помидоров, и он готов отдать Хьюго две монеты за одну штуку. Каждый из них на отдельном листке бумаги записывает свой трансфер:
Приближается вечер, и баланс сегодняшнего дня предстоит опубликовать Кейт. Чтобы убедиться, что Кейт включает эти трансферы в список заявок, каждый должен передать ей копию просьбы. Есть смысл раздать копии всем, поскольку человек, желающий осуществить трансфер, не обязательно помнит, чья сегодня очередь публиковать очередное обновление.
Джек медлит с тем, чтобы передать Кейт копию заявки на трансфер, и к тому времени, когда он её всё-таки приносит, она уже записала состояние баланса дня:
Джек недоволен тем, что в документ не включён его трансфер. Это значит, что Хьюго не получит от Джека платёж за помидор, а Джек останется без ужина. Разгневанный, он покидает коллектив и отправляется на поиски другой еды. Таким образом, в этот день он не подписывает документ Кейт с заявками. К счастью, Кейт может собрать достаточно подписей от остальных членов группы:
Кейт сумела заполучить три подписи, каждая из которых подтверждает, что балансы соответствуют трансферам и балансам предыдущего дня. У нас есть большинство, поэтому данный отчёт считается окончательным.
День 4, и никто не знает, где Джек. Накануне вечером он отправился на рыбалку, однако началась буря и он не сумел вернуться в лагерь. Из-за этого могут возникнуть проблемы, поскольку сегодня очередь Джека публиковать обновлённый баланс.
Сегодня Кейт хочет осуществить пару трансферов; она записывает их на листке бумаги и раздаёт каждому по копии:
Приближается вечер, но Джек ещё не вернулся. Члены группы уже согласились с тем, что сегодня его очередь публиковать ведомость, но Джека нигде нет, поэтому члены группы вынуждены пропустить обновление за этот день.
Наступил пятый день, и сегодня Хьюго отвечает за публикацию обновления. Несколько дней идут дожди, и Хьюго хочет найти более тёплое место для сна. Он просит Сойера построить для него маленькую деревянную хижину. За работу Сойер хочет получить 200 монет. Однако у Хьюго есть только 98. Тут Хьюго осеняет: сегодня он публикует ведомость, так почему ему не вписать в неё требуемое число?
Других трансферов на сегодня нет, однако Хьюго нужно включить в список трансферы Кейт и Джека, заявки на которые были сделаны накануне. Он добавляет все прошлые заявки, а также новый безумный трансфер:
Хьюго подписывает обновление, хотя его собственный трансфер выглядит абсурдно. Ему необходимы ещё две подписи, чтобы придать обновлению окончательный характер. Когда он обращается к Сойеру и Кейт, они замечают, что, согласно прошлой ведомости (от дня 3), у Хьюго было 92 монеты. Как он мог передать Сойеру 200 монет? Они отказываются подписывать ведомость до тех пор, пока он не исправит ошибку и не удалит из списка недействительный трансфер. Хьюго неохотно соглашается. В конце концов они подписывают документ:
Обновление баланса утверждено, есть три подписи.
Утром шестого дня Джек наконец-то возвращается в лагерь. И-за бури ему пришлось пережить пару трудных дней. Он не принимал участия в дискуссиях последних двух дней и пропустил объявления о новых трансферах и публикации новых отчётов. Он не знает в точности, сколько у него монет. Он расспрашивает первого встречного о пропущенных им обновлениях. Ему сообщают данные обновления за день 5 и данные одобренного всеми обновления, которые Кейт опубликовала в день 3.
Джеку легко свериться с остальными членами группы. Он видит, что обновления баланса были подписаны как минимум три раза, поэтому он может быть относительно уверен в том, что они соответствуют действительности. Он также может самостоятельно произвести расчёты, опираясь на данные этих обновлений и своего собственного последнего обновления (за день 2). Таким образом, Джек сможет участвовать в сегодняшних трансферах так, словно он ничего не пропустил.
Похоже, что система работает эффективно. Несомненно, она несколько примитивна, но её вполне достаточно для нужд жителей острова. Но функционирующему блокчейну полагается иметь white paper! Члены группы присаживаются и приводят проект в окончательный вид, публикуя гениальный технический документ (PDF).
Почему эта схема считается блокчейном? Для участников каждый список, вывешиваемый ежедневно, представляет блок. Каждый блок пронумерован и указывает на предыдущий, формируя цепочку блоков. Чтобы верифицировать текущее состояние балансов, нужно начать с начала цепи (день 1 — генезис-блок), после чего последовательно проверять каждый блок в цепочке. Размеры балансов постепенно увеличиваются.
Можно ли назвать подобную модель примером идеального внедрения блокчейна? Пожалуй, нет. Её можно улучшить во многих отношениях. Например, она обслуживает только четырёх обитателей острова. Как быть, если на острове появится ещё один выживший? Сумеет ли этот протокол учесть и его нужды? Кроме того, этот протокол в настоящее время контролируем, но как можно превратить его в не требующий контроля? Что если мы захотим модифицировать его с тем, чтобы он работал на основе доказательства выполнения работы или доказательства доли владения?
Мы попытаемся найти ответы на эти вопросы в следующих статьях данной серии.