Пишем свой блокчейн


Оглавление (нажмите, чтобы открыть):

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

Как создать свой блокчейн: код блокчейна в 100 строк

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

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

С технической точки зрения, блокчейн – это распределенная база данных со специальными функциями, такими как проверка, хранение и синхронизация данных. С точки зрения бизнеса, это концепция, которая позволяет проводить эффективные и надежные одноранговые транзакции, не требуя центральной точки контроля. Впрочем, существуют некоторые отличия блокчейна по сравнению с распределенной базой данных. В Blockchain можно только добавить информацию, затем данные проверяются и подписываются. Но как же создать блокчейн? В данном материале мы рассмотрим как запрограммировать свой блокчейн примерно в 100 строках кода, используя язык программирования javascript.

Программная архитектура блокчейна

Blockchain – это цепочка блоков. Чтобы было все как можно проще, но не слишком простым, каждый блок включает в себя наиболее необходимые элементы: индекс, временную метку, данные, хэш и предыдущий хэш. И каждый новый блок, который должен быть добавлен в цепочку, также должен быть проверен.

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

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

Изучите блокчейн, построив его

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

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

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

Для кого предназначен этот гайд? Вам необходимо хотя бы на базовом уровне освоить Python и понимать работу HTTP-запросов.

Что нам понадобится из программного обеспечения: Python 3.6, (включая pip), HTTP-клиент (например Postman или Curl) и Flask. Ну и, само собой, без одной чудесной библиотеки никуда — Requests.

Шаг 1. Построение блокчейна

Для начала нужно создать в наиболее удобном для вас текстовом редакторе файл blockhaine.py.

Представляя блокчейн

Мы создадим Blockchain класс, а его конструктор организует два списка (пока что пустых): один для самого блокчейна и второй — в нем будут сохраняться все транзакции.

Как выглядят блоки?

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

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

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

Сохранение транзакций — как это устроить?

Для начала создаем метод new_transaction()

new_transaction() при сохранении транзакции указывает индекс следующего блока. Именно в него будет помещена транзакция.

Как работает механизм создания блоков

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

Нам понадобятся методы new_block(), new_transaction() и hash()

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

Представление блокчейна почти закончено, но вам, наверняка интересен процесс майнинга.

Что такое “доказательство работы”?

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

Для примера мы возьмем максимально простую задачу.

Скажем, нужно найти целые числа x и y, хэшированное произведение которых будет заканчиваться на ноль: hash(x * y) = ac23dc. 0 . Для нашей “учебной” задачи примем, что x = 5. В коде это выглядит так:

Решение в данном случае: y = 21

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

Сеть при этом способна легко проверить решения.

Внедрение базового доказательства работы

Давайте внедрим сходный алгоритм в наш блокчейн. Наша задача будет звучать так:

“Найдите такое число p, хэш произведения которого и решения из предыдущего блока будет начинаться с 4 нулей”.

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

Шаг 2. Блокчейн в качестве API

Нам очень сильно поможет Python Flask Framework. Это микро-фреймворк, благодаря чему с его помощью удобно размечать конечные точки функций “питона”.

Мы зададим следующие методы:

  • /transactions/new — будет добавлять транзакции
  • /mine — дает команду нашему серверу начать майнинг блоков
  • /chain — возвращает к полному блокчейну

Устанавливаем Flask

Запустим узел сети блокчейна


Конечная точка транзакций

Запрос, отправляемый серверу пользователем, выглядит так:

Функция записи транзакций выглядит следующим образом:

Конечная точка майнинга

Наша конечная точка майнинга — это та часть, где происходит вся “магия”. И “магия” довольно простая, поскольку от нее требуется:

  1. Вычислять PoW
  2. Вознаграждать майнера (нас)
  3. Сохранять новосозданные блоки

Вот теперь можно начинать работать со своим блокчейном.

Шаг 3. Работа с блокчейном

Работать с API удобнее всего с помощью клиента Postman.

Запуск сервера осуществляется следующей командой:

Майнинг запустится по запросу GET на https://localhost:5000/mine

Запрос GET на https://localhost:5000/transactions/new создаст новую транзакцию.

Никто. кстати, не заставляет использовать Postman, с этой задачей прекрасно справится и Curl.

Давайте посмотрим всю цепочку блоков, используя https://localhost:5000/chain

Шаг 4. Консенсус

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

Создаем реестр узлов

Сперва нужно сообщить своему узлу о “коллегах” в сети.

Для хранения на каждом узле сети реестра других, требуются дополнительные конечные точки:

  1. /nodes/register — создает список URL-адресов других узлов
  2. /nodes/resolve — гарантирует, что на узле хранится верная цепочка

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

Set()., который мы использовали — это простой способ добиться того, чтобы ни один узел не сохранялся более 1 раза.

Приводим сеть к консенсусу

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

Valid_chain() просматривает все блоки и проверяет как их хэши, так и сохраненные доказательства.

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

Новые конечные точки нужно прописать в нашем API

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

https://localhost:5000 и https://localhost:5001.

Затем я намайнил несколько блоков на втором узле, чтобы создать более длинную версию цепочки. Затем на узле 1 я обратился к GET /nodes/resolve и при помощи алгоритма консенсуса заменил цепочку на моем узле.

В общем-то, на этом все. Теперь можете собирать друзей и совместно тестировать собственный блокчейн.

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

PS. Я намерен опубликовать продолжение посвященное валидации транзакций и тому, как можно заработать на своем блокчейне.

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

Несмотря на стремительный рост популярности как криптовалют, так и технологи, которую они используют для своего функционирования, до сих пор многие не имеют представления о том, что такое блокчейн и каков принцип его работы. Люди, чья профессиональная деятельность связана с данной революционной технологией, зачастую неспособны объяснить доступным языком её суть. Чтобы разобраться в чем-либо, часто практикуется способ «воссоздать это собственными руками». Поэтому попробуем разобраться в вопросе «как сделать свой блокчейн», сформировать концептуальную модель блочной сети собственными руками. В итоге будет получен простой, но работоспособный блокчейн.

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

Что такое хэш и какова его роль

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

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

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

Подготовка к созданию своего блокчейн

С хэш-функциями разобраться удалось, но какую роль играют хэши в блокчейн? Сама технология представляет собой огромную базу данных, информация в которой хранится в специальных контейнерах, называемых блоками, которые связаны между собой, образуя цепочку. Это и обуславливает её название: blockchain – цепочка блоков.

Если блок является контейнером для информации, то какие данные в нём хранятся? В каждом содержатся:

  • индекс хранилища;
  • временная метка;
  • сами данные;
  • хэш предыдущего контейнера.

Для создания блокчейн можно использовать любой язык программирования с поддержкой ООП, например, Python или C#.

Класс, описывающий блок

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


Выше была описана структура каждого блока, начиная со второго, но у первого отсутствует хэш предыдущего, в чём и состоит его отличие от всех остальных. Такой контейнер для данных имеет название genesis. Его добавление в блокчейн производится вручную или написанием дополнительной функции. Например, если в C# для создания второго и последующих объектов было бы достаточно записи «newBlock(параметры)», где вместо слова «параметры» нужно указать сами данные, то для генерации genesis-блока можно написать отдельный метод (функцию). Его реализация очень простая, и содержит лишь код создания нового объекта класса Block, однако входные параметры индекса и хэша предыдущего объекта должны иметь значения по умолчанию 0 и «0» соответственно.

Цепочка блоков и проверка целостности

Выше были описаны объекты самого первого (genesisblock) и последующих объектов, но для создания блокчейн этого недостаточно. Требуется функция, которая будет генерировать блоки. В качестве параметра она будет принимать созданный ранее предыдущий объект, модифицировать значение его индекса (для простоты – увеличивать значение на единицу), добавлять произвольные данные и хэш предыдущего блока. Результатом её выполнения будет новый объект класса Block с изменёнными параметрами на входе.

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

Генерация блокчейн

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

Первым делом в коде функции должна содержаться строка, отвечающая за создание первого (genesis) блока. Затем следует указать переменную, которая хранит общее число объектов. Данная переменная определяет число итераций цикла, в котором будут создаваться блоки. В теле цикла за каждую итерацию вызывается конструктор класса Block, создающий новый объект, который впоследствии добавляется в массив. Для наглядности, средствами языка можно выводить данные о появлении нового блока в блокчейн, созданного своими руками.

Функционирование реального блокчейн

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

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

Преимущества блокчейн состоят в следующем:

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

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

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

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

Блокчейн и майнинг своими руками

Читатель TJ объясняет, что такое блокчейн, как он работает и что можно построить на основе этих идей.

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

Я не разделяю этот подход. Считаю, что знание деталей технической реализации есть залог доверия к инструменту в целом, а умение воссоздать нечто подобное — лучший критерий глубокого понимания. Поэтому сегодня с вами кружок «очумелые ручки» и мы будем строить свой, простейший, концептуальный, но тем не менее полностью рабочий блокчейн. Прямо у вас на компьютере, без начальной подготовки, буквально вручную мышкой.

Я покажу, что на самом деле всё там очень просто, и доступно даже пятикласснику. Не верите? Просто читайте дальше. Но для этого сначала нужно пояснить, что такое хэш. Без этого никак, увы.

Мастер Йода рекомендует:  Сжатие данных в целях экономии места и ускорения работы Oracle

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

Генерирует при этом так, что одинаковые файлы всегда дают в результате одинаковый хэш, а разные — в идеале, разный (случай, когда две разных последовательности входных данных дают одинаковые хэши, называется коллизией криптографической функции и считается уязвимостью).

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

А теперь, чтобы стало ещё понятнее, продемонстрирую на практике. Вбейте в гугле «sha256 онлайн» (именно эту функцию мы будем использовать во всех примерах). Поиграйте с ней, вбивая разные данные.

Например, хэш от слова TJournal:

А вот от tjournal:

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

Сделай сам

Всё. Этих знаний уже достаточно чтобы создать простой блокчейн. Удивительно, правда? Блокчейн — цепочка криптографически связанных блоков.

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

Открываем ваш любимый блокнот и создаём первый файл:

Маша → Ваня :: 10 рублей

Ваня → Лиза :: 20 рублей

Маша → Саша :: 50 рублей

Хэш тут не для чего считать, поэтому всё. Сохраняем его с именем 1.txt в специальной папочке (FYI: в блокчейне криптовалют такой блок называется Genesis block, и да, там его тоже прописывают вручную). Сохранили? Идём на один из прежде нагугленных сайтов (можно догадаться, что настоящие блокчейны ни на какие сайты не ходят, а вызывают заранее запрограмированные в них функции, но для нашего простейшего случая сделаем всё вручную), и считаем хэш для этого файла.

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

Теперь создайте следующий файл и назовите его 2.txt. Запишите в него несколько новых «транзакций»:

Таня → Катя :: 10 рублей

Макс → Витя :: 10 рублей

И последней строчкой добавьте результат хэширования предыдущего файла. Вот так:

Таня → Катя :: 10 рублей

Макс → Витя :: 10 рублей

Готово? Сохраняем, и считаем хэш уже от этого, нового файла ЦЕЛИКОМ. У меня получилось db45d94b529fbf8c5fb1decd89f5d0ff62bbca86a02bc4f943eac42ff33dd486.

По аналогии создаём третий файл:

Митя -> Тёма :: 90 рублей

Жора -> Вася :: 10 рублей

Анна -> Люда :: 60 рублей


И все последующие. Их может быть сколько угодно. В блокчейне биткоина по состоянию на 27.06.17 находится 473011 блоков, в которых записана информация о почти 250 миллионах транзакций. Это много. В 250 раз больше, чем комментов на TJ с момента его основания.

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

И снова к нашим баранам. Можете создать все файлы самостоятельно, а можете скачать мой архив из 10 файлов и контрольного, содержащего только хэш последнего «блока» и ничего больше.

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

Я сделал наипримитивнейший скриптик с пояснениями, можете посмотреть его по ссылке, а без пояснений он включён в вышеуказанных архив. Написан он на самом популярном в терминах проникновения языке в мире — баше, а значит у пользователей GNU/Linux, MacOS, Android (окружение Termux) — не возникнет проблем с запуском.

Пользователям Windows можно посоветовать установить cygwin или Linux subsystem for windows, появившийся в Windows 10.

Итак, после запуска скрипта должны получить что-то вроде:

chain is flawless

final hash = 23cbc83ca6a2cf2e75ae5ca76fb087ef11ff36fb0065c301557c8152a5bc530f

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

chain is corrupted

Верните всё на место и цепь будет снова проходить проверку. Магия? Магия.

Майнинг

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

Я тоже нихрена не понимаю, но в моей голове это выглядит так. Есть монетка, она спрятана в коробочку, коробку можно открыть, если решить пример, который написан на коробочке, но таких коробочек миллиард, а монетка лежит только в одном. Собственно для того, чтобы найти монетку, нам нужен миллион китайцев с калькуляторами, которые будут «майнить» монетку.

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

Маша -> Ваня :: 10 Рублей

Ваня -> Лиза :: 20 Рублей

Маша -> Саша :: 5 Рублей

Теперь идём на наш сайт и снова считаем хэш. У меня получилось 361d413d08c614ff63290943bb184aadaaaae84171caef4bfb2344a3223cd104. Но он не подходит. Как так? А вот так. В официальной документации биткоина (допустим) сказано, что для первых десяти блоков принимаются только хэши, начинающиеся с нуля, а остальные не подходят, и все, включая саму программу bitcoin core, сочтут нас за жуликов, если мы сгенерируем такое.

Ну ладно, говорим мы, и добавляем единичку к нашему числу (мы не можем предсказать заранее, какой хэш получится на выходе, кто сможет — получит нобелевку, так что самый тупой выход здесь одновременно и единственно верный). Получается 0000000001. Идём и хэшируем снова. 44364a819eca9616dd56c21f6ba9a570d8a27ca54b95f67585cd36da2e4bf9f6. Чёрт. Это может затянуться.

Как хорошо, что мы снова можем написать перебирающий скрипт! В нём две главные переменные: LENGTH — количество цифр подряд с начала, которые должны соответствовать критерию, и GOAL — чему именно эти цифры должны быть равны. Сложность подбора при этом растёт вместе с количеством символов экспоненционально.

Запустите скрипт: ./block_mine.sh 1.txt и он отработает довольно быстро. Измените LENGTH на 3, и GOAL на 000, и вы заметите бегущие циферки. Замените LENGTH на 10, и GOAL на 0000000000 — и вы результатов выполнения на своём компьютере уже не дождётесь.

Я «намайнил» вам для примера цепь со «сложностью», соответствующей правилу «три нуля в начале каждого хэша». Попробуйте подделать или подменить так, чтобы итоговый хэш непременно начинался с 000, и цепь при этом проходила проверку, не перемайнивая всю цепь от начала до конца. Отпишитесь о результатах в комментариях. Бгг.

Именно таким примитивным действом и является майнинг. «Профессиональные» блокчейны отличаются только количеством разных данных, которые хранятся в блоке, алгоритмом хэширования, и набором правил, которым должен соответствовать хэш. Всё.

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

Значит, это легко подделать

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

При чём тут биткоин

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

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

То есть воспринимать как игрушку, а не как средство накопления, быть готовым к обвалу в 2-10 раз меньше чем за сутки (или аналогичному взлёту, тут уж как повезёт), сглаживать риски портфелями, и так далее (да вы всё и без меня знаете, если работаете в сфере финансов или увлекаетесь игрой на бирже, а если не работаете и не увлекаетесь, лучший совет: не лезть, ждать стабилизации курса). Это не пост пиара биткоина, это ликбез по блокчейну, так что могу себе позволить сказать всё как есть, лол.

Зачем это нужно

Тут по порядку, иначе совсем запутаемся.

В: Зачем нужно разбивать цепь на блоки, если можно с сопоставимой степнью надёжности считать хэш прямо от всего большого файла?

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

В: Зачем вообще этот хэш? Разве просто передать данные недостаточно?

О: Гугл: Задача византийских генералов. Вкратце, это когда нужно убедиться, что данные не повреждены и не изменены в условиях скомпрометированного канала их передачи. Ещё полвека назад эта задача считалась концептуально нерешаемой, а сейчас ЭЦП в паре с секретным ключом — стандарт даже в консервативной сфере госуслуг. То есть эти «хэши» давно прочно проникли в нашу жизнь, им доверяют и ими пользуются. Если вы ещё не в курсе, что оно и как работает, это только ваша проблема.

В: Хорошо-хорошо, а где используется блокчейн, кроме нашумевших криптовалют?

О: Распределённые базы данных, виртуальный каталог книг project Alexandria, социальные сети, платформы для голосования (согласитесь, приятно было бы знать, что подтасовка результатов выборов невозможна математически), и даже эксперимент по имплементации подобия госуслуг и государства Bitnation. Венчурные проекты появляются как грибы после дождя.

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

Большинcтво из них умрут (как уже умерла краудфандинговая платформа Koinify, как с треском провалилась из-за найденной уязвимости инвестиционная платформа The DAO, как умерло большинство известных на заре интернета сайтов). Однако это перспективная отрасль, которая сделала возможными некоторые ранее немыслимые вещи, и вполне вероятно, блокчейн-лихорадка — новый виток прогресса, похожий на историю упомянутого ранее, и сегодня всеми любимого World Wide Web.

В: Зачем мне это всё, я не программист?

О: Для меня этот вопрос звучит так же странно, как и «Зачем мне читать и писать, я не писарь?». Программирование — это не профессия и не особый талант, это всего лишь немного более гибкий и мощный способ использования вашего компьютера — вот и всё. Его не нужно бояться или избегать, как чего-то «сложного». И да, я считаю, что в будущем, не таком далёком как кажется, сама идея специального человека, набирающего код, станет такой же абсурдной, как идея специального человека, переписывающего от руки книги. Это будут во-первых, уметь все с первого класса школы, во-вторых появятся более эффективные инструменты для профессиональной реализации нужных идей.

В: Зачем было всё это писать?

Послесловие

Как и в прошлый раз, тема не раскрыта полностью по причине tl;dr, моей лени, обширности самой темы, да и всего в общем сразу. Что заинтересовало, что не понятно, заметили ошибку — пишите в комментариях. Я, как обычно, отвечаю на все вопросы, и признаю/исправляю ошибки. Все мы люди, все имеем на них право.

P.S: Спасибо за моральную и информационную поддержку Alex Kotenko, спасибо за проверку текста на понятность обывателю Musalav Alibekov. Без этих ребят всё было бы намного хуже.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы рассказать свою историю.

Как создать блокчейн: наглядное пособие


Блокчейн: суть и история

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

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

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

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

Их задание подобрать хэш, который сформирует заголовок нового блока. В него входит хэш прошлого блока, сумма хэшей транзакций за 10 минут и случайное число.

Miner, который справится задачей быстрее остальных, получит в награду криптовалюту. Блоки в сети Биткоин формируются с частотой раз в 10 минут. Размер блока BTC ограничен 1 МБ. В других сетях этот параметр может отличаться. Например, после майского обновления Bitcoin Cash перешел на блоки объемом в 32 МБ.

Созданный Накамото распределенный реестр не стал последней стадией развития технологии. В 2013 году программист Виталик Бутерин заинтересовался функцией смарт-контрактов, но считал, что Биткоин плохо подходит для ее использования. Поэтому он создал платформу Эфириум. Смарт-контракты на Эфириуме упростили процесс создания токенов. Это сделало Ethereum площадкой для проведения ICO.

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

Также в этот список мы можем включить Ripple и Stellar. Они используют распределенную сеть, похожую на blockchain.

Особенности платформы блокчейн

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

Выделяют ряд алгоритмов консенсуса:

  • Proof of Work или PoW (доказательство работы) — его принцип работы неплохо описан выше на примере Биткоина. Суть PoW в том, что для записи транзакции в блок он требует от участника решения сложной алгоритмической задачи. Вероятность создать следующий блок выше у владельца более мощного оборудования. Поэтому, чтобы стать майнером придется потратить тысячи долларов на создание собственной фермы. PoW использует Биткоин, Эфириум и ряд других известных криптовалют.
  • Proof of Stake или PoS (доказательство доли) — в отличие от предыдущего вероятность сформировать блок и записать его в цепочку зависит от доли принадлежащих участнику монет. PoS не заставляет пользователей сети, обзаводится дорогостоящим оборудованием. Но есть и недостатки. Система провоцирует участников копить капитал для обретения большей власти внутри сети. Его используют Dash, NEO и другие монеты. Также в 2020 году на этот алгоритм должен перейти Эфириум.
  • Delegated Proof of Stake или DPoS (делегированное доказательство доли) — участники сети выбирают делегатов, которые будут создавать блоки. Этим механизмом пользуется Lisk, Bitshares и другие проекты.
  • Proof of Activity (доказательство активности) — так называемая гибридная система соединяющая в себе сильные стороны PoW и PoS. Формированием блоков занимаются и майнеры, и владельцы достаточного количества монет или стейкхолдеры. Сначала майнер формирует заголовок блока, который затем рассылается в сеть. Эту заготовку должны подписать стейкхолдеры, после чего создается блок.
  • Proof of Burn (доказательство сжигания) — оригинальный алгоритм в основе, которого лежит «сжигание» монет. Некоторое количество альтернативной цифровой валюты отправляют на адрес, с которого ее нельзя потратить или вернуть на свой счет. От того сколько монет сжег пользователь зависит шанс сформировать следующий блок. Также за этот шаг участник получает право на пожизненную добычу монет.
  • Proof of Capacity (доказательство ресурсов) — в отличие от предыдущего этот алгоритм требует от узла свободное место на жестком диске. Механизм генерирует определенное количество решений задачи, которые сохраняются на компьютере участника. Затем начинается процесс добычи и тот майнер, у которого есть подходящее значение хэш, формирует блок и получает награду. От места на диске, выделенного под добычу, зависят шансы на успех. Подобный метод подбора хэш часто сравнивают с лотереей. Чем больше у владельца билетов (вариантов хэша), тем выше вероятность создания блока.

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

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

Также эту технологию применяют на ICO. Для создания токенов используются смарт-контракты на Эфириум, NEM или других платформах. В таком контракте указывается эмиссия монет и другие условия. В период ICO компания указывает номер счета и при поступлении на него средств, покупатель с помощью смарт-контракта получает токены по заданному курсу.

Мастер Йода рекомендует:  Цикл while в Javascript

Зачем нужен собственный блокчейн

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

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

Каким проектам может понадобится собственный блокчейн:

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

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

  1. Прозрачность — транзакции в публичном блокчейне нельзя спрятать. К ним может получить доступ каждый.
  2. Децентрализация — управление сетью находится в руках не централизованных структур, а самих пользователей.
  3. Возможность проводить транзакции в любое время суток без выходных.
  4. Отсутствие посредников.
  5. Нельзя изменять и удалять данные из сети.

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

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

К преимуществам частных блокчейнов относят:

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

За все эти преимущества приходится расплачиваться полным отсутствием демократичности присущей публичным платформам.

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

Как сделать свой блокчейн

Создание собственного распределенного реестра нужно не каждому проекту. Но если без этого не обойтись, то понадобится разработчик, знающий один или несколько языков программирования — C, C++, Python, Java, Golang, Scala. В принципе, пригодятся знания любых технологий в этой сфере, ведь считается, что такую инфраструктуру можно создать на любом языке.

Если же слова mine, init, json, get, sender, amount, genesis block и другие вам ничего не говорят, то можно нанять разработчика или попытаться самому разобраться, как сделать свой блокчейн. Для этого существует достаточно книг и курсов.

В качестве эксперимента мы разберемся, как создать свой блокчейн. Начнем со скачивания и установки компилятора языка Python. Сделать это мы можем на официальном сайте. После установки в гайде советуют установить библиотеки Flask и Request. Для этого заходим мы командную строку Windows — cmd.exe. Появится консоль, в которой нужно выполнить команду: pip install Flask==0.12.2 requests==2.18.4.

Затем мы устанавливаем среду разработки PyCharm (или любую другую, на ваш выбор). Скачать его можно здесь. После прохождения регистрации мы заходим в PyCharm. Поскольку Python — непростой язык программирования, на объяснение всех тонкостей работы с ним мы потратим слишком много времени.

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

import hashlib
import os
import json
import datetime as date

class Block(object):
def __init__(self, dictionary):
»’
We’re looking for index, timestamp, data, prev_hash, nonce
»’
for k, v in dictionary.items():
setattr(self, k, v)

if not hasattr(self, ‘nonce’):
#we’re throwin this in for generation
self.nonce = ‘None’
if not hasattr(self, ‘hash’): #in creating the first block, needs to be removed in future
self.hash = self.create_self_hash()

def header_string(self):
return str(self.index) + self.prev_hash + self.data + str(self.timestamp) + str(self.nonce)

def create_self_hash(self):
sha = hashlib.sha256()
sha.update(self.header_string())
return sha.hexdigest()

def self_save(self):
chaindata_dir = ‘chaindata’
index_string = str(self.index).zfill(6) #front of zeros so they stay in numerical order
filename = ‘%s/%s.json’ % (chaindata_dir, index_string)
with open(filename, ‘w’) as block_file:
json.dump(self.__dict__(), block_file)

def __dict__(self):
info = <>
info[‘index’] = str(self.index)
info[‘timestamp’] = str(self.timestamp)
info[‘prev_hash’] = str(self.prev_hash)
info[‘hash’] = str(self.hash)
info[‘data’] = str(self.data)
info[‘nonce’] = str(self.nonce)
return info
def __str__(self):
return «Block» % (self.prev_hash, self.hash)

def create_first_block():
# index zero and arbitrary previous hash
block_data = <>
block_data[‘index’] = 0
block_data[‘timestamp’] = date.datetime.now()
block_data[‘data’] = ‘First block data’
block_data[‘prev_hash’] = »
block_data[‘nonce’] = 0 #starting it at 0
return Block(block_data)


if __name__ == ‘__main__’:
#check if chaindata folder exists.
chaindata_dir = ‘chaindata/’
if not os.path.exists(chaindata_dir):
#make chaindata dir
os.mkdir(chaindata_dir)
#check if dir is empty from just creation, or empty before
if os.listdir(chaindata_dir) == []:
#create and save first block
first_block = create_first_block()
first_block.self_save()

Это относительно простой код blockchain, но в нем прописаны все необходимые параметры.

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

Для этого переходим по ссылке на Github и скачиваем этот проект. Затем, распаковываем файлы и запускаем PyCharm. Открываем файл «Block». После этого нажимаем на вкладке «Run» и выбираем опцию с аналогичным названием. Но даже на этом этапе мы можем допустить ряд ошибок.

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

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

  • Stratis — одно из преимуществ проекта в том, что клиентам не придется тратить ресурсы и время на поддержку сети. Платформа создает децентрализованные приложения используя сайдчейны (боковые цепочки). Это позволяет ей подстраиваться под нужды конкретного клиента при этом сохраняя безопасность и надежность родительской цепи. Используя боковую цепочку Stratis снижает нагрузку и размер баз данных.
  • Hyperledger Fabric — проект созданный консорциумом Hyperledger. Важную роль в разработке сыграла IBM. К преимуществам платформы относят конфиденциальность, гибкость, масштабируемость и отказоустойчивость. В то же время Hyperledger отличается от других платформ тем, что требует от участников идентификации. Система проверяет подлинность пользователей и присваивает им специальные открытые ключи. Hyperledger Fabric популярная платформа поэтому найти обучающие гайды и курсы не составит труда. Так на платформе Edx есть бесплатный курс «Блокчейн для бизнеса» от Linux Foundation.

Выводы

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

В работе сильно поможет знание одного или нескольких языков программирования: С, С++, Python, Java, Golang, Scala. Также следует пройти доступные в сети онлайн-курсы, изучить дополнительную литературу и гайды. Отличный выход использование платформ для создания блокчейн-приложений. Это позволит сэкономить время и при этом создать эффективное решение, подходящее под бизнес.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Что нужно знать начинающему блокчейн-разработчику

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

Читайте в статье

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

Понимание основ

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

Если вы совсем новичок, есть определенные термины, которые нужно знать:

  • блокчейн — цепочка блоков, где каждый блок содержит неизменные криптографически зашифрованные данные без какого-либо контроля с третьей стороны. Смотрите отличие блокчейна от традиционной базы данных.
  • децентрализация — отсутствие центрального органа управления, который контролирует что-либо, блокчейн является распределенным реестром, то есть децентрализованным.
  • механизм консенсуса — механизм, с помощью которого децентрализованная сеть достигает согласия: PoW и PoS, DPoS, PoI.
  • майнинг и майнеры: процесс добычи криптовалюты и пользователи, которые отдают свои вычислительные мощности под это

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

Также настоятельно рекомендуем уделить внимание экономическим аспектам блокчейна: разработчики могут разбираться в крипто, но знаний в финансовом аспекте не хватает. Иногда это критично, особенно, если проект выходит на ICO своими силами, имея технологичный продукт, но совершенно глупую бизнес-модель.

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

Если вы хотите углубиться в криптографию, начните с этого и ищите серьезные книги по теме.

После этого рекомендуем узнать, как работает биткоин, «отец криптовалют». Неплохо прочитать технический документ Сатоши Накамото, white paper биткоина. Сейчас много валют и новых особенностей, но это является неким эталоном, первым стандартом.

знакомимся с терминами,

идем по техническим аспектам,

читаем Белую бумагу Биткоина.

Знакомство с процессом

Многие начинающие «разработчики» не имеют реального опыта в использовании криптовалюты.

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

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

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

Узнаем, как работают биржи.
Знакомимся с кошельками.

Кодинг

Создание и поддержание публичного блокчейна — непростая работа по ряду причин:

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

Управление ресурсами — продуктивность кода особенно важна, т.к ваш проект должен выдерживать большую нагрузку.

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

Изоляция — сначала вспомним о детерминированном поведении: Если A + B = C, то независимо от обстоятельств A + B всегда будет равным C. Хэш-функции детерминированы, то есть хэш Х всегда будет H (A). Все транзакции и смарт-контракты должны быть детерминированы, изолированы от недетерминированных элементов.

Этим требованиям соответствуют несколько языков программирования. Если вы разработчик на блокчейне, обязательно иметь базовые знания о C ++ и JavaScript.

Хотя C ++ может показаться устаревшим, но он прекрасно удовлетворяет всем функциям, которые описаны выше. Сатоши Накамото написал исходный код биткоина на C ++.

JavaScript используется для создания высоко интерактивных веб-страниц.

Давайте на практике посмотри, как создать простой блокчейн с использованием JavaScript.

Каждый блок должен иметь:

  • Index (номер блока),
  • Timestamp (время создания),
  • Data (то, что внутри блока),
  • Previous Hash (хэш предыдущего блока),
  • Hash (свой хэш).


Создание блока

В первой строке кода мы подключили библиотеку crypto-js, т. к. хэш-функция sha256 недоступна в JavaScript.

Затем мы вызываем конструктор для присвоения начальных значений свойствам.

Функция calculateHash() берет содержимое блока и получает его хэш. Используем функцию JSON.stringify, чтобы превратить данные блока в строку хэша.

Когда есть готовый блок, можно соединить их в цепь:

Для удобства анализа рассмотрим код по секциям:

Section 1. Генезис-блок. В момент создания цепи возникает этот блок. Он не ссылается на предыдущий. В функцию createGenesisBlock() данные подставляются вручную: return new Block(0, «01/01/2020», «Genesis block», «0»);

Section 2. Добавление блоков. Чтобы узнать последний блок, мы используем функцию getLatestBlock(). Когда блок добавляется, он проходит проверку: в нем содержится хэш предыдущего блока, и если хэш старого блока совпадает с хэшем внутри нового, блок встраивается в цепь.

Section 3. Проверка цепи. Мы используем цикл «for» для перехода от блока 1 к последнему блоку. Блок генезиса — это блок 0. Если «previousHash» текущего блока не равен «Hash» предыдущего блока, функция вернет False, если совпадает, вернет True.

Теперь блокчейн можно использовать для создания токенов.

Вот и вся технология.

Весьма непросто: нужно знать один из подходящих языков программирования, типа C++, Javascript, C#, Go.

Изучить смарт-контракты

Это тема отдельной статьи. Познакомиться с философией умных контрактов и написать простейший контракт поможет эта статья.

Если вам интересна разработка в экосистеме Ethereum, то важно изучать Solidity (язык для смарт-контрактов Эфириума).

Куда податься

Если вы боитесь претендовать на должности в компаниях (а только на HH вакансий по блокчейну более 300), можно набираться опыта в:

  • форумах на Reddit,
  • страницах проектов на Gitbub,
  • StackExchang,
  • предлагайте выполнить небольшие задачи на UpWork и подобных сервисах.

Главное, быть в курсе новостей технологии и смотреть, какие тенденции есть на этом рынке.

Итоги

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

Blockchain — создаем свой

Не смотря на то, что некоторые считают blockchain чем-то, что приведет к проблемам, никто не сомневается, что эта новая технология является, своего рода, чудом информационных технологий. Но что же на самом деле такое, этот блокчейн?

Блокчейн:

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

Благодаря технологии blockchain, стало возможным распространение новых, цифровых валют, таких как Bitcoin или Litecoin, которые не эмитируются и не управляются каким-либо центральным управляющим органом или организацией. Это дает большие возможности людям, которые считают сегодняшние банковские системы мошенническими или чем-то, от чего следует отказаться. Блокчейн также произвел революцию в распределенных вычислениях, что вылилось в появление таких технологий как Etherium, который представил интересные концепции, такие как умные контракты (smart contracts).

В этой статье я создам простой блокчейн в менее, чем 50 строк на языке Python 2. Он будет называться SnakeCoin.

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

Ниже приведен код блока:

Итак, у нас есть структура блока, но мы делаем цепочку блоков. Поэтому нам нужно начать формировать ее, добавляя в нее блоки. Как я сказал ранее, для каждого блока требуется информация из предыдущего блока. Если принять во внимание все вышесказанное, то возникает вопрос: откуда возьмется первый блок цепочки? Первый блок, или изначальный блок (genesis block), это особенный блок. В большинстве случаев, он добавляется вручную или имеет особую логику, позволяющую его добавить.

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

Теперь, когда мы можем создать изначальный блок, нам нужна функция, которая сгенерирует последующие блоки в цепочке. Это функция будет принимать в качестве параметра предыдущий блок, создавать новый блок со всеми необходимыми данными и возвращать его. Когда новые блоки содержат хэш информации из предыдущих блоков — целостность всей цепочки возрастает с каждым новым блоком. Если бы мы этого не сделали, то «злоумышленникам» было бы проще «подделать прошлое» и подменить нашу цепочку своей. Такая цепочка хэшей выступает в качестве криптографического подтверждения (cryptographic proof) и позволяет убедиться в том что, как только блок добавлен в блокчейн, он не может быть изменен или удален.

Большая часть тяжелой работы сделана. Теперь мы можем создать наш blockchain! В нашем случае, blockchain представляет собой список (list) языка Python. Первый элемент списка это изначальный блок. И, конечно, нам нужно добавить последующие блоки. Поскольку, SnakeCoin это самый маленький блокчейн, мы добавим только 20 новых блоков. Мы можем сделать это с помощью цикла for.

Давайте протестируем, что у нас получилось:

Результат работы нашего blockchain

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

Мастер Йода рекомендует:  Онлайн радио для Android пошаговое руководство

Пока это все, что может предложить SnakeCoin. Чтобы приблизить его к масштабам актуальных сегодня блокчейнов, нам нужно было бы добавить больше функций, в частности серверный слой для отслеживания изменений цепочки на нескольких машинах, и алгоритм подтверждения работы (proof-of-work), чтобы ограничить количество блоков, добавляемых в указанный период времени.

Если вам хочется больше технической информации, то вы можете изучить оригинальную документацию Bitcoin. Желаю удачи в изучении!

Спасибо за внимание!

Это перевод статьи «Let’s Build the Tiniest Blockchain», оригинал которой находится здесь. Автор статьи: Gerald Nash.

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

Если вы мечтаете создать свою криптовалюту, научиться писать смарт-контракты и блокчейн-приложения, но не разбираетесь в программировании, или же вы давно занимаетесь разработкой, но только узнали о криптовалютах и хотите переквалифицироваться, то это возможно, считает преподаватель Moscow Coding School Александр Суханов. Он рассказал, как стать блокчейн-разработчиком путем самостоятельного изучения вопроса, какие знания пригодятся и где их искать. Также мы собрали несколько курсов, которые помогут быстрее разобраться в блокчейн-разработке.

Александр Суханов

Преподаватель Moscow Coding School

Какая база нужна для блокчейн-разработки

Если мы говорим о разработке смарт-контрактов на какой-то из платформ, например, Ethereum, то тогда «база» не нужна. Нужно только умение пользоваться поисковиками и немного терпения. Сами смарт-контракты задумывались именно для того, чтобы их могли создавать люди, не особо знакомые с кодингом. Единственная сложность, которая может возникнуть, — нехватка обучающих материалов, потому что эта технология очень молодая.

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


Какие знания стоит приобрести

Чтобы понять, как стать блокчейн-разработчиком, главное — разобраться в том, как работает сама технология. Большинство ограничений в блокчейн-разработке связаны именно с особенностями технологии, которая не позволяет использовать некоторые паттерны проектирования. С этим же связаны первые сложности, которые возникают на этапе погружения. Однако после того, как у вас появится понимание самой технологии, проблем с тем, чтобы освоить один из языков программирования для написания смарт-контрактов, уже не возникнет. Кроме того, я бы рекомендовал внимательно прочитать White Paper той криптовалюты, на базе которой вы собираетесь писать смарт-контракты.

Возможно ли обучиться самостоятельно или лучше пройти специальные курсы

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

Какие нужны языки программирования

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

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

Как стать блокчейн-разработчиком: полезные источники для начинающего специалиста

Я рекомендую книги разработчика Андреаса Антонопулоса. Также, как я уже говорил, нужно прочитать White Paper той криптовалюты, на базе которой собираетесь разрабатывать. После того, как поймете саму технологию, переходите к чтению документации. Я бы не рекомендовал сразу начинать с выполнения тысячи и одного туториала, так как из-за того, что технология достаточно молодая, в качестве единственного достоверного источника может служить только официальная документация.

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

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

Онлайн и офлайн курсы

Ответ на вопрос о том, как стать блокчейн-разработчиком, помогут найти в том числе образовательные онлайн и офлайн курсы.

Видео-лекции «Введение в блокчейн-технологии»

Преподаватель казанского университета «Иннополис» Александр Колотов записал 69 лекций в которых пошагово разбирает блокчейн-технологии на примере платформы Ethereum. На видео — первая лекция, по ссылке можно найти полный курс.

Онлайн-курс «Программирование блокчейн-приложений»

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

Курсы «Blockchain Developer» [Москва]

Так как стать блокчейн-разработчиком непросто без достаточного количества практики, организаторы предлагают 9-недельный интенсивный технический курс, полное погружение в блокчейн-разработку, овладение навыками работы с криптографическими средствами и системами, создание смарт-контрактов. Занятия начинаются 30 января 2020 года. Курс платный.

Пишем свой блокчейн. Хранение данных

Когда-то давно в одном из постов @golosmedia была ссылка на очень полезный материал Блокчейн и майнинг своими руками.
Я все эти месяцев думал о нём и хотел освоить всё, что в нём написано. Наконец добрался:)
В данном материале не будет сетей на базе Ethereum, форков Голоса, поднятия ноды или запуска демона. Разберём именно суть алгоритма блокчейна и реализуем его на PHP+MySQL. Проще уж некуда(@denis-skripnik, ООП тоже не будет:) ).
Если вы знаете что такое print_r и select * from blablabla — смело читайте дальше, вам всё будет понятно.

Немного теории, кратко

В блокчейне каждая запись зависит от предыдущей. Чтобы явно хранить эту зависимость — формируется хэш каждой записи блокчейна, с учётом предыдущей.
Запись в блокчейне называем блоком. Пусть в нашем абстрактном блокчейне каждый блок будет хранить в себе

  • номер блока (id)
  • автора блока (author)
  • данные (data)
  • время создания (timestamp)
  • хэш блока (hash)

Сразу уточню

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

Хранить блоки будем в таблице базы данных MySQL. Всё наглядно и удобно.

Таблица простейшая, её колонки я пояснил чуть выше.

Формирование хэша блока

В своём блокчейне я решил формировать хэш так: хэшировать в sha256 массив из автора блока, данных в нём(data), времени создания и хэша предыдущего блока.
Схематично это выглядит следующим образом:

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

Весь код я помещу в четырёх файлах:

  • config.php — подключение к БД
  • create_block.php — создание блока
  • functions.php — функции для работы блокчейна
  • verify.php — проверка целостности цепочки блокчейна

Листинг config.php

В этом файле только подключение к БД.

Листинг functions.php

Данные для записи в блок я буду генерировать случайным образом. Вы можете брать данные из отправленной вебформы, брать из RSS/API или парсить откуда-нибудь.

Для нахождения последнего блока просто берём последнюю строчку в БД.

Формируем контрольную сумму блока.

Тут уже непосредственно сохраняем блок в БД. Уже сформированные данные просто записываем в базу в виде строки таблицы.

Листинг create_block.php

Тут всё просто. Используя функции из файла functions.php формируем «блок» и сохраняем его в БД.
Для добавления блока в свой блокчейн просто обновите эту страницу несколько раз и всё, или добавьте в неё строку и браузер будет «создавать блок» каждую секунду, пока страница открыта в браузере.

Листинг verify.php

В этом файле мы просто считаем все блоки и проверим правильность сформированных хэшэй.
Если вы сформируете несколько блоков и откроете verify.php — то увидите, что все блоки корректны. Если после этого вы вручную исправите что-то в таблице blocks — то увидите, что блок испорчен. Что именно вы исправили — уже не выяснить. Важен именно сам факт того, что было произведено исправление и «доверять» такому блокчейну(а именно битому блоку) нельзя.

Давайте проверим

Я создал 10 блоков.

И проверил целостность цепочки(verify.php).

Теперь я внесу изменения в пятый блок, а именно — заменю имя автора с amber на shmamber.


И проверяем целостность цепочки(verify.php).

Как видите — сверка хэшей не прошла! Значит данные в пятом блоке исправлены.

Скачать код

А как же майнинг?

С ним я тоже разобрался. Правда как прикрутить его к нашей таблице blocks пока незнаю. Алгоритм майнинга будет в одной из следующих статей, с такими-же примерами.

Друзья, если я где-то принципиально не прав — буду рад вашим поправкам.

Почему вы никогда не запустите свой блокчейн: часть 1

Аргумент №1: Скорость blockchain

Максимальная теоретическая производительность транзакции нода Ethereum составляет чуть более 1000 транзакций в секунду. К сожалению, это не фактическая пропускная способность из-за «gas limit», который в настоящее время составляет около 6,7 миллионов газа в среднем для каждого блока. C текущим 6,7 миллионами gas limit и текущим, средним показателем газа, используемым для стандартной транзакции приблизительно 21K, мы получаем приблизительно 300 стандартных транзакций в каждом блоке. Текущее среднее время блока составляет 20 секунд, что в лучшем случае составляет примерно 15 транзакций в секунду (300/20 = 15). Количество транзакций становится намного ниже при более сложных транзакциях (например, median gas, используемый смарт-контрактами, составляет 50 тыс., что означает примерно 7 транзакций в секунду).

Именно поэтому, выбирая платформу для токенов, я остановился на Waves, у которых производительность несравнимо выше. Хотя, рядовому ICO инвестору, который свято верит в “смарт-контракт” и “erc20” сложно объяснить, тот факт, что мы обязаны использовать самые надежные и быстрые технологии.

Используя любую SQL базу, можно добиться в 5000-15000 раз большей производительности.

Аргумент №2: Один blockchain — только один blockchain

Исследовав все известные blockchain сети (Apla, Ethereum, Hyperledger, Tezos, EOS), мы выяснили, что все они имеют одну схожую особенность: один блокчейн.

Это означает, что используя такую платформу для реализации задач beeqb, мы будем вынуждены либо добавлять множество join запросов и бессмысленно детализировать каждый блок blockchain’а, увеличивая до 20-50Mb каждый блок. Либо для каждого бизнес-процесса каждой компании, каждого сотрудника компании будем вынуждены создавать собственный классический blockchain, а эта бессмысленная идея слишком дорога и слишком нелогична.

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

Аргумент №3: Смарт-контракт — это код

Самая большая глупость, которую я встречал в мире — это попытка создать свой собственный язык программирования для реализации программного решения, которое ограничено платформой, которая написана на другом языке программирования. Cмарт-контракты Ethereum пишутся на Solidity, APLA предлагает изучить Simvolio…

А я считаю, что смарт-контракт — это замечательная штука, создание которого можно и нужно автоматизировать до заполнения форму на сайте или коммуникации с чат-ботом (Как это сделал https://thetokenfactory.com/#/ )

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

Анализируя все это, разрабатывая возможные теории, я пришел к неутешительному для себя выводу: BeeQB невозможно реализовать без blockchain, но как blockchain реализовать в BeeQB я не знаю. Хотя… И вот об этом “ХОТЯ” я и хочу вам рассказать.

Проведя большую исследовательскую работу, проведя сотни часов в общении с экспертами и гуру рынка, я разработал очень смелый и амбициозный, я бы даже сказал ИННОВАЦИОННЫЙ вариант реализации blockchain, абсолютно новый консенсус и, окончательно утвердился в мысле, что BeeQB невозможен без использования blockchain, только «другого blockchain».

Инновация №1: Мультитред

Любой бизнес работает по двум классическим технологиям: 1. BPM (Business Process Management); 2. PM (Project Management). Без одной технологии нет другой. Но везде одна из технологий менеджмента является главенствующей. Toyota, Bloomberg, Tesla, Valve, IBM используется BPM метод. Apple, VW Group, CAT, Oracle, Amazon — главенствующим сделали PM метод. В принципе, абсолютно не важно, какую из технологий вы выберите, важно, чтобы вы ее выбрали.

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

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

Это «картина» не дает никакой детализации, более того, она никак не помогает принимать управленческие решения.

Ккартинка должна быть такой:

То есть, у вашей компании есть корневой blockchain (Компания #1). При этом есть блокчейн “сотрудника” (Сотрудник #1 и #2) , в котором записываются его ключевые точки роста: время прихода на работу, поставленные задачи, план продаж, факт продаж, скорость сделки, выплата зарплаты и так далее (Сделка #1 и #2 . ). При этом, следует понимать, что у blockchain’а нет «собственника» но у него есть инициаторы, всегда две стороны, которые и заключают смарт-контракт.

К примеру Выплата зарплаты:

Продавец получает ЗП в зависимости от цифры, заложенной в смартконтракте, и указанных KPI. Бухгалтер выплачивает зарплату, исходя из суммы, которая рассчитана смарт-контрактом и исходя из наличия средств на счету. То есть, при нулевом значении одной из сторон смарт-контракт не может быть начат, равно как и реализован. При этом результат блокчейна станет частью персонального блокчейна обоих участников и компании.

Инновация №2: Blockchain для Смарт-контрактов, а не смарт-контракт для блокчейна

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

Именно поэтому в BeeQB мы реализовываем три типа смарт-контрактов: товарно-сервисный, кредитный и долевой. Суть контракта исходит из его названия, но есть одно важное уточнение. Компания может использовать автоматические контракты, настроить шаблонные или создать новые. Автоматические контракты (на примере товарно-сервисного смарт-контракта):

Пример: Компания продает в розницу телевизоры. Процедура сделки, регулируется государством (количество дней для возврата покупки, срок гарантии, данные на чеке и так далее). Система распознает тип сделки и создает блокчейн сделки на основании такого смарт-контракта. Разумеется, компания может изменить контракт для такого типа сделки, но это уже другая история. Важно то, что блокчейн этой сделки будет инициирован смарт-контрактом и он будет более чем стандартизирован, а следовательно, может считать эталоном для бизнеса и государства.

Существует еще один вопрос, на который следует дать четкий ответ: что инициирует смарт-контракт?

Инновация №3: Proof of Event

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

К примеру, началом корневого блокчейна компании должен послужить смарт-контракт создания этой компании через форму на сайте. При этом предшествующее событие — это клик по кнопке “Создать компанию”.

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

Давайте предположим, что вы покупаете у меня тысячу коробок спичек. Я — производственная компания. Мы с вами инициируем смарт-контракт в котором говорим:

Я: Я, поставлю тебе 1000 коробок спичек на протяжении 5 дней, при условии 50% предоплаты и 50% оплаты в момент отгрузки.

Вы: Ок, но предоплата поступит только при наличии товара на складе и готовности к отгрузке.

BeeQB прогнозирует, что данный товарный смарт-контракт будет являться следующей последовательностью блоков:

  1. Хеджирование 50% суммы;
  2. Проверка наличия товара на складе;
  3. Отправка 50% суммы предоплаты за товар;
  4. Проверка наличия других 50%;
  5. Инициация протокола отгрузки товара.
  6. Хеджирование других 50% суммы;
  7. Отслеживание доставки товара на ваш склад;
  8. Двойной апрув сдачи и приемки товара;
  9. Перевод денег поставщику.

Система создает blockchain и начинает проверку каждого звена:

  1. Есть ли деньги у компании клиента? — Есть — Захеджировали (смарт-контракт “заглянул” в “финансовый” блокчейн клиента)
  2. Есть товар на складе? — Нет (смарт-контракт “заглянул» в блокчейн “Склад” поставщика)
  3. Есть ли товар в каталоге? — Есть (смарт-контракт “заглянул» в блокчейн “Торговый каталог” поставщика)
  4. Вероятность появления необходимого количества товара на складе? — Низкая, потому что среднее время производства одной коробки спичек — 1 час (смарт-контракт “заглянул» в блокчейн “Скорость выполнения задачи” сотрудника поставщика).
  5. Система дает предупреждение о том, что вероятность выполнения контракта ничтожна, потому что товара нет и произвести его в нужном количестве компания не может.
  6. Деньги вернулись клиенту… Смарт-контракт расторгнут. Рейтинг продавца понижен.

Все… Вот и вся суть консенсуса — наличие подтверждающего события. Есть событие — контракт запустится, блокчейн создастся, бизнес-процесс пройдет так, как запланировано.

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

В следующей части я расскажу о Fututre-proofing, Future-proofing Events, о прогнозировании течения смарт-контракта и блокчейна — принципах работы нейронной сети «А».

Кстати, осталось несколько дней до завершения preICO. И у вас есть последняя возможность инвестировать в beeqb c крутым бонусом.

Добавить комментарий