GoToChain: как школьники блокчейн в деревне писали

    Был жаркий август. Шла очередная летняя школа. На направлении функционального программирования все было неспокойно: вместо пота с нас капали монады, и в небе пролетала хмурая тень Coq-а.


    Школа проходила вполне обычно, как и все детские лагеря. После накоживания чисел Пеано на Хаскелле мы пилили компиляторы и интерпретаторы разных сортов и размеров (от самопального до LLVM), писали своё ядро на Rust и обсуждали теорию групп, проводя аналогии с лёгкими французскими романами в общем, было задорно.


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



    Ну что же, пришла пора познакомиться. Мы команда питерских и московских школьников, реализовавших нижеописанное “чудо”. Мы узнали о механизмах работы блокчейна и первый раз услышали слово “смарт контракт” за день до хакатона, поэтому опыт был крайне занимательный. Но, обо всём по порядку.


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


    Концепции менялись одна за другой: от криптографии на решетках (ведь без этого не может существовать ни один уважающий себя лагерь) и формально верифицированного замка для Боинга мы пришли к идее интегрировать блокчейн в жизнь GoTo. “Что же полезного он будет делать?”, — спросил один из членов нашей команды. Так как в тот момент наши неискушенные умы находились под большим впечатлением от всего происходящего, мы немедленно закидали его камнями. И продолжили.


    Но вот мы поумерили пыл и решили всё-таки подумать: зачем лагерю блокчейн?


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



    ”Ликбез”

    Ликбез


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


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


    Тогда люди решили привлечь третью независимую сторону, которая бы давала гарантии — после произведения обмена никаких проблем не будет. Эту роль в нашей жизни играют банки, государственные реестры и прочие организации, получающие деньги за поддержку прекрасных человеческих отношений. От махинаций эти организации сдерживали желание сохранить репутацию и иметь стабильный доход от этой работы, а также государственный контроль.
    Однако достаточно давно стало очевидно, что такого рода посредники обладают рядом недостатков:


    1. Вам всё равно приходится полностью доверять одной стороне. Любой государственный контроль при должной сноровке можно обойти, да и желание крупного единовременного пополнения своего банковского счёта легко может пересилить желание стабильного дохода
    2. Третьи лица требуют платы (часто достаточно крупной) за свои услуги, а кто бы не хотел отказаться от лишних расходов
    3. Появление сторонних лиц и бюрократии, стремящейся удержать эти самые лица в узде, крайне замедлило процесс обмена, так как любое действие теперь сопровождается прохождением миллиарда инстанций и подписанием триллиона документов.
    4. Третьи лица не застрахованы от непредвиденных ситуаций: банк всегда может обанкротиться, квартирный реестр забыть сделать бэкап или же тётя Люда из патентного бюро может забыть ваши документы на вечный двигатель в маршрутке.

    Канонический пример такого посредника — центры сертификации (Certificate Authority) в инфраструктуре открытых ключей (PKI), связывающие публичные ключи со сторонами, которым они принадлежат.


    Самым известным применением ЦС являются TLS-сертификаты, благодаря которым работает HTTPS. Однако, как показывает практика, эти “профессионалы, продающие доверие” иногда позволяют себе давать сертификаты для произвольных доменов произвольным людям, или давать кому-то сертификат для google.com.


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


    В этом им может помочь блокчейн.


    Что за блокчейн?

    Блокчейн


    Блокчейн — распределённая база данных, позволяющая поддерживать между участниками сети единую для всех версию списка транзакций. Транзакции могут быть совершенно разные: денежные переводы, передача имущества, регистрация авторских прав и тому подобные вещи.


    Транзакции объединяются в так называемые блоки. Каждый блок хранит в себе хэш предыдущего, благодаря чему данные о прошлом невозможно изменить, так как это повлечёт изменения хэшей всех последующих блоков. Эти блоки хэшами объединяются в связанный список, или же метафорическую цепь, которую сложно разорвать или переделать… В chain… Цепь блоков… BLOCKCHAIN!!! Кхм, ну вы поняли.


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


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


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



    Поэтому если злой хакер Вася захочет перевести себе миллиард биткойнов задним числом / стереть информацию о своей задолженности / <insert другое злодеяние>, ему придётся уговаривать всю сеть перейти на новую версию цепи с совершенно другими хэшами.


    Остаётся вопрос, кто собирает эти записи в блоки?


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


    В публичном блоки может собрать любой участник сети, однако для того, чтобы система приняла его блок, желающему необходимо решить вычислительно сложную задачу (proof of work), или же например вероятность создания блока будет прямо пропорциональна имеющимся у них средствам (proof of stake).


    Метод выбора создателей новых блоков крайне важен, так как он может поставить под угрозу функционирование системы. Так, например, сейчас большая часть вычислительной мощности биткойна находится в Китае, поэтому если вдруг все “майнинг-фермы” государства решат объединится (будь то по велению государства, или же в едином коммунистическом порыве), то они смогут какое-то время контролировать всю цепь (до первого хард форка конечно). Даже если этого не произойдёт централизованность указывает на очевидные проблемы.


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


    Итак, что нужно вынести из этих строк?


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


    Что за cмарт контракты?

    Смарт контракты


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


    Официальное определение смарт контракта (aka определение из Википедии) — алгоритм для контроля исполнения обязательств двух или более сторон, использующий для фиксирования действий всех сторон блокчейн.


    Можно сказать, что “создание смарт контракта” — благозвучный термин для добавления бизнес-логики в блокчейн. Т.е. добавление некоторых правил, влияющих на поведение системы.


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


    Благодаря этому “НовокузнецкийКоворкинг” может спокойно везти вам свой уголь, не сомневаясь, что работа будет оплачена, а вы можете не переживать, что вам ничего не привезут в случае перевода предоплаты.


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


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


    P.S. Если вам интересно продолжить изучение всего вышеперечисленного, то в интернете существует огромное количество литературы и достаточно популярными становятся обучающие программы… Вот GoTo, например.


    Что мы делаем


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


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


    Зачем мы это делаем


    Блокчейн обеспечивает общедоступность и неизменность данных о заявках и их проверке, что позволит партнёрам и участникам следить за процессом проведения конкурса и создаст верифицируемые пункты портфолио для всех конкурсантов.


    После объявления победителей участникам становятся доступны решения друг друга — это позволит наладить знакомство и дальнейшее взаимодействие внутри сообщества. Также это даёт возможность участникам контролировать честность проведения конкурса, так как они могут посмотреть был ли выделен грант человеку с нормальным решением или же был выбран двоюродный брат сестры мужа брата собаки директора.


    Немаловажным является и то, что проект позволит привлечь больше внимания будущих участников школ к блокчейн технологиям. Так как грантовые конкурсы являются лишь частью платформы, они смогут расширять её своими смарт контрактами, что дает большое поле для практики.


    Логика контракта


    Логика, реализованная в нашем смарт контракте, достаточно проста.


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


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


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


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


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


    После подписания этого соглашения конкурс официально считается закрытым.


    Как делаем


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


    Естественно, первой мыслью было реализовать блокчейн с нуля на Хаскелле. Однако, посмотрев пару реализаций, мы пришли к выводу, что ещё не готовы к аппликативным функторам, монад-трансформерам и написанию Paxos.


    В качестве более реалистичного и безопасного варианта реализации (по советам великого, ужасного и милого wldhx) мы решили использовать вышедший в июле, Exonum.


    В этой платформе (написанной на Rust’е, кстати) разработчикам уже реализованы блокчейн-хранилище, общение между нодами и другие полезные механизмы, вроде анкоринга для предотвращения переписывания истории транзакций аудиторами и “лёгкие клиенты” для предоставления информации обычным пользователям. В терминах платформы смарт контракты называются Сервисами, именно разработкой сервиса нам и предстояло заняться.


    В конечном итоге мы вполне удачно продрались через Rust и документацию Exonum’а, по пути даже немного расширив дефолтный функционал “лёгких клиентов”.



    Это мы поддерживаем друг друга в процессе разработки


    Что делаем дальше


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


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


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


    Пара слов о команде


    Дмитрий Волков aka wldhx — the man, the myth, the legend. Техлид. Просвещающий, карающий и умиляющий.



    Степан Кузнецов — Rust-разработчик. Без него ничего бы не работало.



    Александр Данилов — JS-разработчик, который делал геометрию.



    Максим МанайненТехнический евангелист и биоинформатик. Автор великолепных статей с кучей указательных местоимений и воды. Ну, без него никуда.


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



    Андрей Творожков — Frontend-разработчик. Без него всё бы работало, но вы не могли бы этим пользоваться.


    Андрей Косоруков — тоже Frontend-разработчик. Без него первая версия платформы была бы консольным приложением.


    Эпилог


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



    А теперь, если у вас есть желание и это позволяет сделать ваш возраст, — милости просим протестировать платформу лично и попробовать свои силы в конкурсе осенней школы в ИТМО.


    Кстати, в течение школы командам предстоит продолжить работу над расширением функционала GoToChain, дополнив ее системой саморегуляции сообщества и верификации портфолио. Будут предложены и исследовательские задачи: например, по обеспечению безопасности контрактов, ускорению прохождения транзакций и использованию нелинейных структур данных. Будут и задачи от партнеров: система для благотворительного фонда и кейсы в рамках госуслуг от ВЭБ. Кроме того, поговорим о верификации данных и статическом анализе контрактов, архитектуре распределенных систем, алгоритмах консенсуса и линеаризации, современных криптографических методах. Изучим блокчейн-платформы Exonum и Ethereum, техники формального анализа, тема обеспечения информационной безопасности на уровне как приложения, так и платформы, транспорта и более низких.

    Проектная школа программирования GoTo
    83,70
    Образовательный проект для юных программистов
    Поделиться публикацией

    Комментарии 3

      +1
      Итак, тренды 2017: ехать на гироскутере вращая спиннер, повивая смузи, дымить и при этом еще писать свой очередной блокчейн.
        0
        дымить
        Правильно писать — «парить». И про свитшот ничего не написано.
          0
          А еще писать годный код, ботать лямбда-исчисление и теорию групп в 16, самим разбираться с неоднозначными темами, не бояться писать об этом на Хабр с самоиронией.

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.