16.07.2025

Математика блокчейн: Математические основы биткойн-блокчейна / Блог компании Bitfury Group / Хабр

Математические основы биткойн-блокчейна / Блог компании Bitfury Group / Хабр

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

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

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

/ Изображение Hernán Piñera CC BY

Фундаментальной частью биткойна являются криптографические алгоритмы. В частности, алгоритм ECDSA — Elliptic Curve Digital Signature Algorithm, который использует эллиптические кривые (elliptic curve) и конечные поля (finite field) для подписи данных, чтобы третья сторона могла подтвердить аутентичность подписи, исключив возможность её подделки. В ECDSA для подписи и верификации используются разные процедуры, состоящие из нескольких арифметических операций.

Эллиптические кривые


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

y² = x³ + ax + b

Для коэффициентов a = 0 и b = 7 (используемых в биткойне), график функции принимает следующий вид:


Эллиптическая кривая

Эллиптические кривые имеют несколько интересных свойств, например, невертикальная линия, пересекающая две некасательные точки на кривой, пересечет третью точку на кривой. Суммой двух точек на кривой P + Q называется точка R, которая является отражением точки -R (построенной путем продолжения прямой (P; Q) до пересечения с кривой) относительно оси X.


Сумма двух точек на кривой (источник)

Если же провести прямую через две точки, имеющие координаты вида P (a, b) и Q (a, -b), то она будет параллельна оси ординат. В этом случае не будет третьей точки пересечения. Чтобы решить эту проблему, вводится так называемая точка на бесконечности (point of infinity), обозначаемая как O. Поэтому, если пересечение отсутствует, уравнение принимает следующий вид P + Q = O.

Если мы хотим сложить точку саму с собой (удвоить её), то в этом случае просто проводится касательная к точке Q. Полученная точка пересечения отражается симметрично относительно оси X.


Удвоение точки (источник)

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

Эллиптическая кривая над конечным полем


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

y² = x³ + ax + b (mod p)

Например, 9 mod 7 = 2. Здесь мы имеем конечное поле от 0 до 6, и все операции по модулю 7, над каким бы числом они ни осуществлялись, дадут результат, попадающий в этот диапазон.

Все названные выше свойства (сложение, умножение, точка в бесконечности) для такой функции остаются в силе, хотя график этой кривой не будет походить на эллиптическую кривую. Эллиптическая кривая биткойна, y² = x³ + 7, определенная на конечном поле по модулю 67, выглядит следующим образом:


Эллиптическая кривая биткойна, определенная на конечном поле по модулю 67 (источник)

Это множество точек, в которых все значения х и у представляют собой целые числа между 0 и 66. Прямые линии, нарисованные на этом графике, теперь будут как бы «оборачиваться» вокруг поля, как только достигнут барьера 67, и продолжатся с другого его конца, сохраняя прежний наклон, но со сдвигом. Например, сложение точек (2, 22) и (6, 25) в этом конкретном случае выглядит так:


Сложение точек (2, 22) и (6, 25) (источник)

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

ECDSA в биткойне


В протоколе биткойна зафиксирован набор параметров для эллиптической кривой и её конечного поля, чтобы каждый пользователь использовал строго определенный набор уравнений. Среди зафиксированных параметров выделяют уравнение кривой (equation), значение модуля поля (prime modulo), базовую точку на кривой (base point) и порядок базовой точки (order). О вычислении порядка базовой точки вы можете почитать здесь. Этот параметр подбирается специально и является очень большим простым числом.

В случае биткойна используются следующие значения:

Уравнение эллиптической кривой: y² = x³ + 7

Простой модуль: 2256— 232 — 2

9 — 28 — 27 — 26 — 24 — 1 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F

Базовая точка:

04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8

Жирным шрифтом выделена координата X в шестнадцатеричной записи. За ней сразу следует координата Y.

Порядок: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141

Этот набор параметров для эллиптической кривой известен как secp256k1 и является частью семейства стандартов SEC (Standards for Efficient Cryptography), предлагаемых для использования в криптографии. В биткойне кривая secp256k1 используется совместно с алгоритмом цифровой подписи ECDSA (elliptic curve digital signature algorithm). В ECDSA секретный ключ — это случайное число между единицей и значением порядка. Открытый ключ формируется на основании секретного: последний умножается на значение базовой точки. Уравнение имеет следующий вид:

Открытый ключ = секретный ключ * G

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

Вычисление открытого ключа выполняется с помощью тех же операций удвоения и сложения точек. Это тривиальная задача, которую обычный персональный компьютер или смартфон решает за миллисекунды. А вот обратная задача (получение секретного ключа по публичному) — является проблемой дискретного логарифмирования, которая считается вычислительно сложной (хотя строгого доказательства этому факту нет). Лучшие известные алгоритмы ее решения, вроде ро Полларда, имеют экспоненциальную сложность. Для secp256k1, чтобы решить задачу, нужно порядка 2

128 операций, что потребует времени вычисления на обычном компьютере, сопоставимого со временем существования Вселенной.

Когда пара секретный/публичный ключ получена, её можно использовать для подписи данных. Эти данные могут быть любой длины. Обычно первым шагом выполняется хеширование данных с целью получения уникального значения с числом битов, равным битности порядка кривой (256). После хеширования, алгоритм подписи данных z выглядит следующим образом. Здесь, G — базовая точка, n — порядок, а d — секретный ключ.

  • Выбирается некоторое целое k в пределах от 1 до n-1
  • Рассчитывается точка (х, у) = k * G с использованием скалярного умножения
  • Находится r = х mod n. Если r = 0, то возврат к шагу 1
  • Находится s = (z + r * d) / k mod n. Если s = 0, то возврат к шагу 1
  • Полученная пара (r, s) является нашей подписью

После получения данных и подписи к ним, третья сторона, зная публичный ключ, может их верифицировать. Шаги для проверки подписи такие (Q — открытый ключ):
  • Проверка, что и r, и s находятся в диапазоне от 1 до n-1
  • Рассчитывается w = s-1 mod n
  • Рассчитывается u = z * w mod n
  • Рассчитывается v = r * w mod n
  • Рассчитывается точка (x, y) = uG + vQ
  • Если r = x mod n, то подпись верна, иначе — недействительна

В самом деле,

uG + vQ = u + vdG = (u + vd)G = (zs-1 + rds-1)G = (z + rd) s-1G = kG

Последнее равенство использует определение s на этапе создания подписи.

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

P.S. Bitfury Group Russia в Vk и Fb.

Математика Биткойна: Теория |

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

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

С Биткойном эта простая схема не работает. Сами по себе биткойны не хранятся ни централизованно, ни локально — и поэтому нельзя сказать, кто отвечает за их доверенное хранение. Биткойны существуют лишь как записи в распределенной бухгалтерской книге, называемой блокчейном, копии которой распределены среди добровольной сети подключенных компьютеров. Быть «владельцем» биткойнов просто означает иметь возможность передать контроль над этими записями кому-то еще, зафиксировав факт этой передачи на блокчейне. Что дает вам эту способность? Эксклюзивный доступ к паре ключей ECDSA: секретному и публичному. Хорошо, но что

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

Давайте-ка попробуем заглянуть под капот.

Что это за ECDSA такая?

ECDSA — это акроним для Алгоритма Цифровой Подписи с Эллиптическими Кривыми. Это процесс, который использует эллиптические кривые и конечные поля, чтобы «подписать» данные таким образом, что третьи лица могут легко проверить подлинность подписи, но при этом сам подписывающий оставляет за собой эксклюзивную возможность создавать подписи. В случае Биткойна «данные», которые подписываются — это транзакция, которая передает право собственности на биткойны.

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

Но для начала давайте пройдем ускоренный курс молодого бойца по эллиптическим кривым и конечным полям.

Эллиптические кривые

В эллиптических кривых нет ничего сложного. Алгебраически каждая такая кривая может быть представлена как уравнение вида:

y² = x³ + ах + b

Для а = 0 и b = 7 (а это именно та версия, которую использует Биткойн) эта кривая выглядит так:

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

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

Для сложения точек, P + Q = R мы проводим через точки P и Q прямую, которая, по свойствам эллиптических кривых, пересекает кривую в некоторой третьей точке R. Затем мы находим точку на кривой, симметричную точке R относительно оси X. Именно эта точка R и будет считаться суммой P и Q. Это легче всего понять, глядя на следующую схему:

Это все хорошо, но как бы нам сложить точку саму с собой? Для этого определяется операция удвоения точки, P + P = R. При удвоении мы проводим прямую, касательную к данной эллиптической кривой в точке P, которая, согласно свойствам кривой, должна пересекать ее еще в одной точке R‘. Точка R, симметричная Rотносительно оси X, и будет считаться точкой удвоения P. На графике это выглядит следующим образом:

Эти две операции можно использовать, чтобы определить операцию скалярного умножения, R = a P, определяемую как добавление точки Р самой к себе a раз. Например:

R = 7P
R = P + (P + (P + (P + (P + (P + P)))))

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

R = 7P
R = P + 6P
R = P + 2 (3P)
R = P + 2 (Р + 2P)

Здесь операция 7P была разбита на два этапа удвоения точек и два сложения точек — в итоге, вместо 7 операций нужно произвести всего четыре.

Собственно, теперь вы знаете об эллиптических кривых все, что о них стоит знать.

Конечные поля

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

Самый простой способ проиллюстрировать это — расчет операции «остаток от целочисленного деления», или оператор модуло (MOD). Например, 9/7 дает 1 с остатком 2:

9 MOD 7 = 2

Здесь мы имеем конечное поле от 0 до 6, и все операции по модулю 7, над каким бы числом они не осуществлялись, дадут результат попадающий в этот диапазон.

Скрещиваем кривые с полями

ECDSA использует не просто эллиптические кривые, а эллиптические кривые в контексте конечного поля, что значительно меняет их ​​внешний вид. Причем, меняет его так, что теперь эти самые кривые даже родная мама не узнает. Допустим, та же самая красивая эллиптическая кривая Биткойна, y² = x³ + 7, которая изображена выше, но только определенная на конечном поле по модулю 67, выглядит как такая вот странная крякозябра:

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

Правда, процесс операций над точками: сложения и удвоения — сейчас будет немного отличаться визуально. «Прямые линии», нарисованные на этом графике, теперь будут оборачиваться «вокруг поля», как только они достигнут магического барьера 67, как в древней аркадной игре «Asteroids», и продолжаться с другого его конца, сохраняя прежний наклон, но со сдвигом. Поэтому сложение точек (2, 22) и (6, 25) в данном дискретном варианте выглядит следующим образом:

«Оборачивающаяся прямая», проходящая через эти две точки, в итоге уперлась в третью точку (47, 39), а симметричная ей «относительно оси X» будет (47, 28). Вот эта-то точка и станет результатом нашей операции.

Применим свою математическую мудрость к криптографии

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

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

Для всех этих параметров Биткойн использует очень-очень большие (ну просто офигенно невообразимо огромные) числа. Это важно. На самом деле, все практические применения ECDSA используют огромные числа. Ведь безопасность этого алгоритма опирается на то, что эти значения слишком большие, чтобы подобрать что-то простым перебором или «брутфорсом».

В случае Биткойна эти значения таковы (запись чисел дана не в десятичном, а в более компактном шестнадцатеричном виде, привычном программистам):

Уравнение эллиптической кривой: y² = x³ + 7

Простой модуль = 2256 — 232 — 29 — 28 — 27 — 26 — 24 — 1 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F

Базовая точка = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8

Порядок = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141

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

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

(Продолжение следует)

Источник: Coindesk

Aвтор: Eric Rykwalder

Поделиться ссылкой:

Related

Ресурсы для изучения блокчейн-разработки с нуля

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

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

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

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

Далее вы узнаете о таких вещах, как разработка децентрализованного приложения на Ethereum, теория игр, криптография, альтернативные блокчейны.

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

Начните разбираться с этого видео:

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

Затем перейдите к изучению конкретной технологии − Ethereum. Есть мнение, что она наиболее перспективна, несмотря на то, что находится на втором месте по капитализации после Bitcoin. Это объясняют наличием команды разработки и большого комьюнити.

Советуем почитать What is Ethereum и Mastering Ethereum.

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

Самый простой способ научиться Solidity-разработке − игра CryptoZombies. В процессе создания собственной игры с коллекционными крипто-предметами игрок учится писать смарт-контракты на Solidity. Она регулярно обновляется и учитывает последние Solidity-изменения.

В дополнение к CryptoZombies можно использовать следующие вещи:

  1. Серия Youtube-роликов для разработки dapp − объясняется всё максимально понятно, но есть минус: в систему были внесены некоторые изменения, так что могут вылезать ошибки синтаксиса. Это решается простым гуглением. А ещё с ошибками поможет справиться редактор Remix, но об этом позже.
  2. Курс Стефана Гридера − платный, но на него часто действует скидка, так что есть возможность пройти его за 10$. Контент качественный, с хорошими примерами.

После того, как покончите с Cryptozombies, неплохо бы научиться использовать Remix IDE для создания, отладки и развертывания контрактов. В этих файлах есть всё необходимое, чтобы начать.

Кроме того, следует разобраться с кошельками и клиентами Ethereum, протестировать браузерное расширение Metamask.

Уже после этого можно переходить к изучению более продвинутых вещей. Для начала почитайте документацию Solidity: там вы найдете примеры качественных децентрализованных приложений. Они также есть на Ethereum.org. Их можно копировать и проверять прямо в Remix IDE.

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

Ещё можно изучить следующие инструменты:

Теория игр во многом составляет принцип решения проблем с помощью блокчейна. Изучить основы теории можно с помощью The Great Courses Plus. У них есть месячная подписка и две пробных недели (можно уложиться и всё изучить). Просмотрев 24 получасовых лекций у вас появится четкое понимание того, что и как.

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

  • Software Engineering Daily, Blockchain − хорошо справляются с объяснением сложных тем, работают с лидерами блокчейн-тусовки
  • CryptoDisrupted − рассказывают об интересных блокчейн-проектах

Сообщество Ethereum, безусловно, наиболее крупное, а значит и разбираться с принципами работы технологии проще всего. Тем не менее было бы упущением не рассказать о других инновационных проектах:

  • Lisk − блочная цепь на JavaScript.
  • EOS − проект многосерийного блокчейн-предпринимателя, направлен на устранение недочётов Ethereum вроде масштабирования и безопасности.
  • Interchain Protocols − решения, созданные для упрощения транзакций между цепями блоков и масштабирования. Примеры − Cosmos, Polkadot, Interledger.
  • Hyperledger − работает над продвижением технологий межсетевых блок-цепей.
  • Holo − технология, решающая проблемы централизации при сохранении масштабируемости.

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

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

Источник: Ресурсы для изучения блокчейн-разработки на freeCodeCamp

Изучаем блокчейн на практике / Блог компании Цифровые Экосистемы / Хабр

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

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

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



Но для начала…


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

Если вы не совсем понимаете, что такое хэш, вам сюда.

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

Что будет нужно для работы? Проверьте, чтобы у вас был установлен Python 3.6+ (вместе с pip). Также вам нужно будет установить Flask и прекрасную библиотеку Requests:

 pip install Flask==0.12.2 requests==2.18.4 

Ах да, еще вам понадобится HTTP клиент, например, Postman или cURL. Тут подойдет любой.

Где можно посмотреть то, что получится в итоге? Исходный код доступен здесь.

Шаг первый: Делаем блокчейн


Откройте свой любимый текстовый или графический редактор, мне вот, например, нравится PyCharm. Создайте новый файл под названием blockchain.py. Мы будем работать только в этом файле, а если запутаетесь, всегда можно подсмотреть в исходный код.

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

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

class Blockchain(object):
    def __init__(self):
        self.chain = []
        self.current_transactions = []
        
    def new_block(self):
        # Creates a new Block and adds it to the chain
        pass
    
    def new_transaction(self):
        # Adds a new transaction to the list of transactions
        pass
    
    @staticmethod
    def hash(block):
        # Hashes a Block
        pass

    @property
    def last_block(self):
        # Returns the last Block in the chain
        pass

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

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

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

Вот пример того, как может выглядет отдельный блок:

block = {
    'index': 1,
    'timestamp': 1506057125.900785,
    'transactions': [
        {
            'sender': "8527147fe1f5426f9dd545de4b27ee00",
            'recipient': "a77f5cdfa2934df3954a5c7c7da5df1f",
            'amount': 5,
        }
    ],
    'proof': 324984774000,
    'previous_hash': "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"
}

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

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

Добавляем транзакции в блок

Нам нужно каким-то образом добавлять в блок новые транзакции. За это отвечает метод new_transaction(), работает он достаточно просто:

class Blockchain(object):
    ...
    
    def new_transaction(self, sender, recipient, amount):
        """
        Creates a new transaction to go into the next mined Block

        :param sender: <str> Address of the Sender
        :param recipient: <str> Address of the Recipient
        :param amount: <int> Amount
        :return: <int> The index of the Block that will hold this transaction
        """

        self.current_transactions.append({
            'sender': sender,
            'recipient': recipient,
            'amount': amount,
        })

        return self.last_block['index'] + 1

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

Помимо создания блока genesis в конструкторе, мы также распишем методы new_block(), new_transaction() и hash():

import hashlib
import json
from time import time


class Blockchain(object):
    def __init__(self):
        self.current_transactions = []
        self.chain = []

        # Create the genesis block
        self.new_block(previous_hash=1, proof=100)

    def new_block(self, proof, previous_hash=None):
        """
        Create a new Block in the Blockchain

        :param proof: <int> The proof given by the Proof of Work algorithm
        :param previous_hash: (Optional) <str> Hash of previous Block
        :return: <dict> New Block
        """

        block = {
            'index': len(self.chain) + 1,
            'timestamp': time(),
            'transactions': self.current_transactions,
            'proof': proof,
            'previous_hash': previous_hash or self.hash(self.chain[-1]),
        }

        # Reset the current list of transactions
        self.current_transactions = []

        self.chain.append(block)
        return block

    def new_transaction(self, sender, recipient, amount):
        """
        Creates a new transaction to go into the next mined Block

        :param sender: <str> Address of the Sender
        :param recipient: <str> Address of the Recipient
        :param amount: <int> Amount
        :return: <int> The index of the Block that will hold this transaction
        """
        self.current_transactions.append({
            'sender': sender,
            'recipient': recipient,
            'amount': amount,
        })

        return self.last_block['index'] + 1

    @property
    def last_block(self):
        return self.chain[-1]

    @staticmethod
    def hash(block):
        """
        Creates a SHA-256 hash of a Block

        :param block: <dict> Block
        :return: <str>
        """

        # We must make sure that the Dictionary is Ordered, or we'll have inconsistent hashes
        block_string = json.dumps(block, sort_keys=True).encode()
        return hashlib.sha256(block_string).hexdigest()

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

Разбираемся с доказательством работы

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

Чтобы стало яснее, давайте рассмотрим очень простой пример.

Допустим, хэш некоторого числа X, помноженного на другое Y, должен оканчиваться на 0. Соответственно, hash(x * y) = ac23dc…0. Для этого упрощенного примера установим x = 5. Прописываем все это на Python:

from hashlib import sha256
x = 5
y = 0  # We don't know what y should be yet...
while sha256(f'{x*y}'.encode()).hexdigest()[-1] != "0":
    y += 1
print(f'The solution is y = {y}')

Правильный ответ здесь: y = 21; именно при таком значении получается хэш с 0 в конце:
hash(5 * 21) = 1253e9373e...5e3600155e860

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

Проверить их решение для системы не составляет труда.

Пишем простое доказательство работы

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

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

import hashlib
import json

from time import time
from uuid import uuid4


class Blockchain(object):
    ...
        
    def proof_of_work(self, last_proof):
        """
        Simple Proof of Work Algorithm:
         - Find a number p' such that hash(pp') contains leading 4 zeroes, where p is the previous p'
         - p is the previous proof, and p' is the new proof

        :param last_proof: <int>
        :return: <int>
        """

        proof = 0
        while self.valid_proof(last_proof, proof) is False:
            proof += 1

        return proof

    @staticmethod
    def valid_proof(last_proof, proof):
        """
        Validates the Proof: Does hash(last_proof, proof) contain 4 leading zeroes?

        :param last_proof: <int> Previous Proof
        :param proof: <int> Current Proof
        :return: <bool> True if correct, False if not.
        """

        guess = f'{last_proof}{proof}'.encode()
        guess_hash = hashlib.sha256(guess).hexdigest()
        return guess_hash[:4] == "0000"

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

Работа над классом почти завершена и теперь мы готовы начать взаимодействие с ним при помощи HTTP запросов.

Шаг второй: Блокчейн как API


Здесь мы будем использовать Python Flask — микрофреймворк, который облегчает процесс соотнесения конечных пунктов с функциями Python, что позволяет нам осуществлять диалог с блокчейном по Сети при помощи HTTP запросов.

Создаем три метода:

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

Настраиваем Flask

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

import hashlib
import json
from textwrap import dedent
from time import time
from uuid import uuid4

from flask import Flask


class Blockchain(object):
    ...


# Instantiate our Node
app = Flask(__name__)

# Generate a globally unique address for this node
node_identifier = str(uuid4()).replace('-', '')

# Instantiate the Blockchain
blockchain = Blockchain()


@app.route('/mine', methods=['GET'])
def mine():
    return "We'll mine a new Block"
  
@app.route('/transactions/new', methods=['POST'])
def new_transaction():
    return "We'll add a new transaction"

@app.route('/chain', methods=['GET'])
def full_chain():
    response = {
        'chain': blockchain.chain,
        'length': len(blockchain.chain),
    }
    return jsonify(response), 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

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

Строка 15: Инстанцирует узел. Подробнее о Flask можно почитать здесь.
Строка 18: Создает произвольное имя для узла.
Строка 21: Инстанцирует класс Blockchain.
Строки 24-26: Создает конечную точку /mine, то есть запрос GET.
Строки 28-30: Создает конечную точку /transactions/new, то есть запрос POST, так как именно туда мы и будем отсылать данные.
Строки 32-38: Создает конечную точку /chain, который возвращает блокчейн целиком.
Строки 40-41: Запускает сервер на порту 5000.

Конечный пункт для транзакций

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

{
 "sender": "my address",
 "recipient": "someone else's address",
 "amount": 5
}

Метод класса для добавления транзакции в блок у нас уже есть, поэтому дальше все легко. Давайте напишем функцию для добавления транзакции:
import hashlib
import json
from textwrap import dedent
from time import time
from uuid import uuid4

from flask import Flask, jsonify, request

...

@app.route('/transactions/new', methods=['POST'])
def new_transaction():
    values = request.get_json()

    # Check that the required fields are in the POST'ed data
    required = ['sender', 'recipient', 'amount']
    if not all(k in values for k in required):
        return 'Missing values', 400

    # Create a new Transaction
    index = blockchain.new_transaction(values['sender'], values['recipient'], values['amount'])

    response = {'message': f'Transaction will be added to Block {index}'}
    return jsonify(response), 201

Конечный пункт для майнинга

Именно в этой конечной точке творится вся магия, но ничего особо сложного в нем нет. Она должна делать три вещи:

  1. Рассчитывать доказательство работы
  2. Выдавать майнеру (то есть нам) вознаграждение, добавляя транзакцию, с ходе которой мы получаем одну монету
  3. Встраивать новый блок в цепочку
import hashlib
import json

from time import time
from uuid import uuid4

from flask import Flask, jsonify, request

...

@app.route('/mine', methods=['GET'])
def mine():
    # We run the proof of work algorithm to get the next proof...
    last_block = blockchain.last_block
    last_proof = last_block['proof']
    proof = blockchain.proof_of_work(last_proof)

    # We must receive a reward for finding the proof.
    # The sender is "0" to signify that this node has mined a new coin.
    blockchain.new_transaction(
        sender="0",
        recipient=node_identifier,
        amount=1,
    )

    # Forge the new Block by adding it to the chain
    block = blockchain.new_block(proof)

    response = {
        'message': "New Block Forged",
        'index': block['index'],
        'transactions': block['transactions'],
        'proof': block['proof'],
        'previous_hash': block['previous_hash'],
    }
    return jsonify(response), 200

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

Шаг третий: Диалог с блокчйном


Для взаимодействия с API в рамках системы можно использовать старый-добрый cURL или Postman.

Запускаем сервер:

$ python blockchain.py
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Давайте попробуем создать блок, отправив запрос GET по адресу localhost:5000/mine:
Теперь создаем новую транзакцию, отправив запрос POST, содержащий ее структуру, по адресу localhost:5000/transactions/new:
Если вы работаете не с Postman, вот как сформулировать аналогичный запрос в cURL:
$ curl -X POST -H "Content-Type: application/json" -d '{
 "sender": "d4ee26eee15148ee92c6cd394edd974e",
 "recipient": "someone-other-address",
 "amount": 5
}' "http://localhost:5000/transactions/new"

Я перезапустил сервер и создал еще два блока, чтобы в итоге получилось три. Давайте изучим получившуюся цепочку через запрос localhost:5000/chain:
{
  "chain": [
    {
      "index": 1,
      "previous_hash": 1,
      "proof": 100,
      "timestamp": 1506280650.770839,
      "transactions": []
    },
    {
      "index": 2,
      "previous_hash": "c099bc...bfb7",
      "proof": 35293,
      "timestamp": 1506280664.717925,
      "transactions": [
        {
          "amount": 1,
          "recipient": "8bbcb347e0634905b0cac7955bae152b",
          "sender": "0"
        }
      ]
    },
    {
      "index": 3,
      "previous_hash": "eff91a...10f2",
      "proof": 35089,
      "timestamp": 1506280666.1086972,
      "transactions": [
        {
          "amount": 1,
          "recipient": "8bbcb347e0634905b0cac7955bae152b",
          "sender": "0"
        }
      ]
    }
  ],
  "length": 3
}

Шаг четвертый: Консенсус


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

Распознаем новые узлы

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

  1. /nodes/register, который будет принимать список новых узлов в URL формате
  2. /nodes/resolve для внедрения алгоритма консенсуса, который будет разрешать возникающие конфликты и отслеживать, чтобы в узле содержалась правильная цепочка.

Нам нужно подкорректировать конструктор блокчейна и обеспечить метод для регистрации узлов:
...
from urllib.parse import urlparse
...


class Blockchain(object):
    def __init__(self):
        ...
        self.nodes = set()
        ...

    def register_node(self, address):
        """
        Add a new node to the list of nodes

        :param address: <str> Address of node. Eg. 'http://192.168.0.5:5000'
        :return: None
        """

        parsed_url = urlparse(address)
        self.nodes.add(parsed_url.netloc)

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

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

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

...
import requests


class Blockchain(object)
    ...
    
    def valid_chain(self, chain):
        """
        Determine if a given blockchain is valid

        :param chain: <list> A blockchain
        :return: <bool> True if valid, False if not
        """

        last_block = chain[0]
        current_index = 1

        while current_index < len(chain):
            block = chain[current_index]
            print(f'{last_block}')
            print(f'{block}')
            print("\n-----------\n")
            # Check that the hash of the block is correct
            if block['previous_hash'] != self.hash(last_block):
                return False

            # Check that the Proof of Work is correct
            if not self.valid_proof(last_block['proof'], block['proof']):
                return False

            last_block = block
            current_index += 1

        return True

    def resolve_conflicts(self):
        """
        This is our Consensus Algorithm, it resolves conflicts
        by replacing our chain with the longest one in the network.

        :return: <bool> True if our chain was replaced, False if not
        """

        neighbours = self.nodes
        new_chain = None

        # We're only looking for chains longer than ours
        max_length = len(self.chain)

        # Grab and verify the chains from all the nodes in our network
        for node in neighbours:
            response = requests.get(f'http://{node}/chain')

            if response.status_code == 200:
                length = response.json()['length']
                chain = response.json()['chain']

                # Check if the length is longer and the chain is valid
                if length > max_length and self.valid_chain(chain):
                    max_length = length
                    new_chain = chain

        # Replace our chain if we discovered a new, valid chain longer than ours
        if new_chain:
            self.chain = new_chain
            return True

        return False

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

resolve_conflicts() — метод, который прорабатывает все соседние узлы: скачивает их цепочки и проверяет их описанным выше способом. Если при этом найдена валидная цепочка длиннее, чем наша, производится замена.

Давайте введем в наш API две конечные точки, один для добавления соседних узлов, другой для разрешения конфликтов:

@app.route('/nodes/register', methods=['POST'])
def register_nodes():
    values = request.get_json()

    nodes = values.get('nodes')
    if nodes is None:
        return "Error: Please supply a valid list of nodes", 400

    for node in nodes:
        blockchain.register_node(node)

    response = {
        'message': 'New nodes have been added',
        'total_nodes': list(blockchain.nodes),
    }
    return jsonify(response), 201


@app.route('/nodes/resolve', methods=['GET'])
def consensus():
    replaced = blockchain.resolve_conflicts()

    if replaced:
        response = {
            'message': 'Our chain was replaced',
            'new_chain': blockchain.chain
        }
    else:
        response = {
            'message': 'Our chain is authoritative',
            'chain': blockchain.chain
        }

    return jsonify(response), 200

На данном этапе, если хотите, можете привлечь другие машины и насоздавать разных узлов для вашей системы. Или добиться того же используя разные порты на одной машине. Я создал новый узел на другом порте той же машины, и позволил исходному узлу его распознать. Таким образом, получилось два узла: localhost:5000 и localhost:5001.
В узел номер два я добавил побольше блоков, чтобы цепочка получилась однозначно длиннее. После чего вызвал GET /nodes/resolve в первом узле — и алгоритм консенсуса заменил его цепочку на цепочку второго.
Ну, вот и все. Теперь собирайте друзей и тестируйте вам блокчейн совместными усилиями.

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

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

Материалы и курсы, которые помогут понять, что такое блокчейн — Образование на vc.ru

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

Список составлен на основе материала инвестора Криса Диксона.

Создание блоков и основы

  • Что такое блокчейн, и какие проблемы решает эта технология: краткое руководство от генерального директора фонда Authorito Capital Мохита Мамория.
  • Как на самом деле работает биткоин (и другие криптовалюты): видео проекта 3Blue1Brown.
  • Майкл Нильсен рассказывает, как работает протокол биткоина.
  • «Эфир за 25 минут», лекция Виталика Бутерина.
  • Блокчейн-инженер Преети Касиредди без сложной математики объяснил, как функционирует эфир на техническом уровне.
  • Расшифровка криптографии: от биткоина и блочной цепи до ICO. Размышления инвестора и сооснователя фонда Andreessen Horowitz Алекса Рэмпелла.
  • Функция криптографического хэширования информации: что это, и какие у неё характеристики. Материал от Академии Хана.
  • Основы блокчейна: характеристики реестра. Авторы: Крис Берг, Синклер Дэвидсон и Джейсон Поттс.
  • Инженер-программист в компании-производителе ПО Wavelet Health Мэтт Кондон — о базовой терминологии по эфиру: от «газа» до распределенных приложений.
  • Несколько коротких и простых определений из мира блокчейна.

Основы и история создания

  • Техническая документация по биткоину за 2009 год: пиринговая электронная платёжная система. Автор Сатоши Накамото.
  • Документация по эфиру за 2013 год: «умные» контракты следующего поколения и платформы для децентрализованных приложений. Авторы: Виталик Бутерин и другие.
  • «Проблема византийских военачальников», 1982 год. Авторы: Лесли Лэмпорт, Роберт Шостак и Маршалл Пиз.
  • Серия статей об агорических системах, 1988 год. Авторы Марк Миллер и Эрик Дрекслер.
  • «Понятие умного контракта», 1997 год, статья учёного Ника Сзабо.
  • «Почему биткоин имеет значение», 2014 год, материал соучредителя венчурной компании Andreessen Horowitz Марка Андриссена.
  • «Академический послужной список биткоина», 2017 год. Авторы Арвинд Нарайянян и Джереми Кларк.

Ключевые концепты и руководства для начинающих

  • «Что стоит за пузырём биткоина», Стивен Джонсон.
  • «Криптотокены: прорыв в разработке открытых сетей», Крис Диксон.
  • «Криптотокены и грядущая эпоха инновационных протоколов», Альберт Венгер.
  • Обзор fat-протоколов от Джоэля Монегро.
  • Криптовалюты, протокол AppCoins и инвестиции в протоколы: подкаст с Олафом Карсоном-Ви, Крисом Диксоном и Соналом Чокши.
  • Как вложить приложения в руки людей: подкаст с Хуаном Бенетом и Крисом Диксоном.
  • «Как правительство США использовало блокчейн для борьбы

Блокчейн для «чайников»: основы. Распределённая сеть и гримасы майнинга

В конце декабря компания Opera представила браузер Opera 50 со встроенной защитой от скрытого майнинга криптовалют. Эта функция получила название NoCoin — она защищает пользователя от скрытых майнеров криптовалют, которые сейчас всё чаще «тайно» встраиваются хакерами в сайты.

Читать далее…

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

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

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

Это самое простое определение блокчейна. Но и самое неполное.

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

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

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

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

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

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

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

В случае биткоина размер блока информации составляет 1 Мб, в других сетях размер блока может сильно отличаться, и это становится предметом активного обсуждения в криптосообществах.

Стремление изменить размер блока становится поводом для создания форков или даже новых блокчейнов. Например, в августе 2017-го появился форк Bitcoin Cash, у которого размер блока сети составляет 8 Мб и может динамически изменяться.

Сам блокчейн также существует в самых разных видах.

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

2. Другой вариант — частный блокчейн. В данном случае существует некий центр (эмитент токенов), и только он имеет право вносить записи в цепочку блокчейна. Такие блокчейны реализуются при проведении ICO, на них основаны некоторые (немногие) криптовалюты (например, Ripple), также частные блокчейны используются, например, для ведения внутреннего учета в компаниях, государственных кадастров недвижимости, учёта облигаций и других ценных бумаг и так далее… Нередко (как в случае с учётом прав на землю, например) частный блокчейн предусматривает возможность общедоступного чтения цепочки, но при этом право записи по-прежнему принадлежит только держателю блокчейна.

3. Некий промежуточный вариант — т.н. «консорциумный блокчейн», он создаётся в ситуациях, когда собственная закрытая сеть необходима нескольким компаниям или, скажем, госструктурам. Здесь сеть на равных правах контролируют несколько узлов — они имеют свои параметры консенсуса для проверки и записи блоков данных в основную цепочку, а также параметры доступа к сети.

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

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

Слово «майнинг» (mining) в переводе с английского означает «добыча при помощи шахты». Слово «майнер» (miner) изначально переводилось как шахтёр.

Сравнение не случайно: аналогичным образом майнеры получают вознаграждение за каждый новый созданный (найденный) блок. Процесс майнинга предусматривает создание новых блоков с занесением в них пользовательских транзакций. В процессе создания нового блока компьютер майнера производит определённые математические вычисления с использованием данных, которые пришли от других узлов сети. Какие конкретно вычисления — определяется используемым в данном блокчейне алгоритмом (их существует не так много). Но такие вычисления требуют значительных усилий и затрат, ведь у технологии блокчейн есть важная особенность: сложность задачи по вычислению очередного блока зависит от объёма используемых вычислительных мощностей, задействованных для её решения. Грубо говоря, «больше народа — меньше кислорода», то есть новых монет.

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

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

Конкретно в сети биткоина алгоритм так подбирает текущую сложность вычислений, чтобы транзакции внутри сети биткоина формировались в новый блок каждые 10 минут. Тем не менее, алгоритм SHA-256 уже явно устарел и не способен обслуживать колоссальную нагрузку на сеть биткоина. Как результат, транзакции первой криптомонеты проходят очень долго, а комиссия за них — очень высока. Практически все прочие актуальные сейчас криптовалюты используют другие алгоритмы — от сильно доработанных версий SHA-256 до принципиально иных (типа lyra2z). Соответственно, транзакции проходят очень быстро, а комиссия невелика.

Посмотреть информацию о блоках, список транзакций и майнеров обрабатывающих блокчейн биткоина можно на сайте blockchain.info. А для белорусского Талера аналогичный сервис действует по адресу taler-explorer.online:8090

При этом биткоин — живая иллюстрация того, как происходит усложнение майнинга, поскольку уже добыто 80% из 21 миллиона биткоинов, которые вообще могут существовать. В самом начале, в 2009-2010 годах, награда за новые найденные блоки составляла 50 биткоинов; с ростом цепочки блоков и майнинговых мощностей награда снизилась до 25 BTC, а сегодня составляет и вовсе 12,5 биткоинов.

Ещё несколько лет назад майнинг был вполне доступен владельцам домашних ПК с 2- и 4-ядерными CPU производительностью от единиц до десятков kH/s (килохэш в секунду). Затем этого стало недостаточно, и «домашние» майнеры начали использовать новейшие игровые и профессиональные видеокарты NVIDIA либо AMD. Суть тут в том, процессоры видеокарт изначально ориентированы на выполнение очень сложных математических вычислений.

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

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

На следующем витке эволюции появились в разы более производительные устройства ASIC (Application Specific Integrated Circuit, т.е. интегрированные схемы, ориентированные на приложения). Они разрабатывались специально для майнинга и поэтому не пригодны для иного использования, зато имеют производительность от сотен mH/s и выше. Сегодня обычный «асик»-блог выполнен в виде мобильного ящика и потребляет мегаватт электроэнергии и больше.

Оборудование для майнинга BTC выпускают три основных производителя ASIC-чипов — Bitfury, Bitmain, Avalon. Самый большой из них — именно китайский Bitmain, вложивший в данную индустрию огромные средства. (Например, разработка чипа для асика стоит около $20 млн, то есть порог входа на этот рынок очень высок).

Такие «асики» объединяют в огромные фермы, в чём сегодня наиболее преуспели китайцы. В Китае построены огромные цеха, которые потребляют около 15000 кВтч, плата за электричество для них достигает $100 тысяч в месяц, но в день такая ферма приносит 10-15-20 биткоинов. При этом на добычу одной новой монеты биткоина (ВТС) нужно потратить одного только электричества не менее чем на $1000.

В 2015 году суммарные затраты электроэнергии майнинговыми станциями составляли полтора тераватта, что эквивалентно потреблению огромного города. Теперь же, если бы майнеры одного только биткоина во всём мире создали некое государство, то они заняли бы 61-е место по потреблению электроэнергии, оставив позади 159 стран. К такому выводу пришли аналитики британского сервиса Power Compare. Генерирование биткоинов уже требует больше электричества, чем обеспечение светом всей Ирландии, Исландии или Нигерии. А ведь капитализация биткоина — менее 40% от всех криптовалют.

Сегодня за новые криптомонеты борются огромные майнинг-пулы (объединения майнеров), с мощностями оборудования изменяющимися в петахэшах; другое сильное направление майнинга — создание всё более мощных и специализированных майнинг-ферм в регионах с дешёвой электроэнергией (в последнее время этим активно промышляют китайцы и россияне).

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

Кроме того, ряд криптовалют в своём блокчейне использует такие алгоритмы, которые делают невыгодным майнинг на «асиках» и фермах, зато дают возможность заниматься майнингом на видеокартах и CPU. Это, например, Monero, LBRY, Decred, Pascal, Zcoin, тот же белорусский Талер.

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

Но всё же более распространена практика создания майнинг-пулов — когда для нахождения блока объединяются ПК сразу многих майнеров. Награда за блок, добытый пулом, распределяется среди всех участников. Технически майнинг-пул — это сервер, который делит задачу по вычислению подписи блока на небольшие «подзадачи», которые раздаёт подключенным компьютерам. Вклад каждого майнера в общую работу пула оценивается в так называемых «шарах» (от английского «share»). Сервер пула собирает «шары» от майнеров и проверяет их валидность. Как только какая-то «шара» удовлетворяет текущим значениям сложности, сервер пула объявляет о подписании блока. Далее пул получает награду за блок и распределяет между майнерами пропорционально количеству переданных «шар», причём неважно, была ли среди них подписавшая блок.

Создание и поддержание пулов — одна из форм майнингового бизнеса. Создатель пула зарабатывает на комиссии с добытых участниками монет, её размер обычно от 0,3% до 1-2%. Для создания самостоятельного пула требуется только выделенный сервер с несложным специализированным ПО. Намного сложнее — провести организационную работу, что есть собрать в пул достаточно много первичных участников.

Последнее, о чём нужно сказать в этой статье — это о двух базовых механизмах, определяющих вероятность формирования узлом сети очередного блока в блокчейне. Эти механизмы, соответственно, — «доказательство выполнения работы» (Proof of Work, PoW) и «доказательство доли владения» (Proof of Stake, PoS).

Механизм Proof of Work пока наиболее распространён, он используется в алгоритмах блокчейнов большинства современных криптовалют. Исторически он был первым, применяется в системе Bitcoin — там в качестве доказательства выполнения вычислительной работы используется многоуровневое хэширование: как я уже описывал, хэш предыдущего блока становится составной частью следующего блока. Именно это не позволяет изменить блок без изменения хэшей во всех последующих блоках. Хэш признаётся истинным только в том случае, если значение хэш-суммы меньше значения специального параметра, определяющего сложность майнинга. Для поиска такой хэш-суммы требуется её многократный пересчёт с перебором произвольных значений параметра nonce — в этом и состоит суть выполняемой работы.

Механизм Proof of Stake — альтернатива PoW. В этом случае вероятность формирования узлом сети очередного блока в блокчейне пропорциональна доле, которую составляют принадлежащие этому участнику расчётные единицы данной криптовалюты от их общего количества. Исторически это более новый протокол, впервые он был реализован в 2012 году в криптовалюте PeerCoin. Его преимущество — в том, что нет нужды тратить большое количество электричества для формирования блокчейна. Недостаток — PoS даёт дополнительную мотивацию к накапливанию средств в одних руках, что может привести к централизации сети.

Поскольку ни PoW, ни PoS не могут в полной мере удовлетворить создателей криптовалют и бизнес-блокчейнов, создаются гибридные схемы, которые совмещают идеи механизмов. У таких криптовалют блокчейн состоит из блоков обоих типов, что делает переписывание историй транзакций непростой задачей. Обычно в таких алгоритмах PоW-блоки становятся показателями реальной работы (это даёт дополнительную гарантию надёжности при работе с транзакциями), и их можно использовать для эмиссии валюты, а PоS-блоки — рассматривать как потенциальный доход.

На практике смешанные варианты формирования новых блоков используются в криптовалютах EmerCoin, NovaCoin, YaCoin, а также PeerCoin и Reddcoin. Например, метод PoW может использоваться для формирования цепочки блоков, а PoS — для подтверждения транзакций.

 

Текст: Денис Лавникевич

Объяснения блокчейна и биткоина на примерах

Есть множество объяснений биткоинов и блокчейна. Но вам нужны интересные и понятные объяснения на примерах. «Афиша Daily» нашла семь удачных аналогий, которые описывают блокчейн и биткоины с разных сторон, и пересказала их своими словами.

Как быстро разобраться в устройстве блокчейна

Человек скачивает фильм с помощью торрент-файла и программы BitTorrent. У фильма есть особенность — он еще не снят. Каждые десять минут кто-то снимает новый кадр и добавляет его к остальному видео. Значит, каждые десять минут человек скачивает на свой жесткий диск еще один кадр и обновляет фильм. Хоть фильм и не снят, человек все равно может посмотреть его с самого начала. Если кто-то решил поменять сюжет фильма, то у него не получится просто так заменить один кадр — он не будет сочетаться с остальными. Чтобы подменить один кадр, ему нужно переписать весь последующий сюжет, а это очень сложно.

Как это понимать

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

Подробности по теме

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

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

Как понять, что такое хэш

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

Как это понимать

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

Подробности по теме

Как русский программист Виталик Бутерин собирается изменить мировую экономику

Как русский программист Виталик Бутерин собирается изменить мировую экономику

Как объяснить, зачем блокчейн хранится в разных местах

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

Как это понимать

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

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

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

Как это понимать

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

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

Камень раи

© Wikimedia Commons

На островах Яп в Микронезии живут япцы (это реальное племя). Помимо американских долларов они пользуются собственной валютой — раи, огромными дисками, выточенными из известняка. Диски имеют отверстие по центру и в диаметре могут достигать до трех метров. Япцам не хотелось таскать камни в соседний двор, поэтому они придумали устную систему обмена. Когда япец покупал лодку, он объявлял всем в деревне, что передает часть раи продавцу. Известняковый диск оставался у него, хотя формально его часть уже принадлежала рыбаку. Каждый житель деревни становился хранителем информации о покупке.

Как это понимать

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

Как понять, почему биткоины — ненастоящие деньги

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

Как это понимать

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

Подробности по теме

Познакомьтесь с человеком, который чуть не потерял $2000 из-за краха криптобиржи

Познакомьтесь с человеком, который чуть не потерял $2000 из-за краха криптобиржи

Как объяснить плюсы блокчейна

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

Как это понимать

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

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

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

Как это понимать

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

Как понять работу майнеров

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

Как это понимать

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

Ресурсы для изучения блокчейн-разработки с нуля

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

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

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

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

Далее вы узнаете о таких вещах, как разработка децентрализованного приложения на Ethereum, теория игр, криптография, альтернативные блокчейны.

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

Начните разбираться с этого видео:

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

Затем перейти к изучению конкретной технологии — Ethereum.Есть мнение, что она наиболее перспективна, несмотря на то, что находится на втором месте по капитализации после Биткойн. Это объясняют наличием команды разработки и большого комьюнити.

Советуем почитать, что такое Ethereum и освоение Ethereum.

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

Самый простой способ научиться Solidity-разработка — игра CryptoZombies.В процессе создания собственной игры с коллекционными крипто-предметами игрок учится писать смарт-контракты на Solidity. Она регулярно обновляется и учитывает последние изменения Solidity.

В дополнение к CryptoZombies можно использовать следующие вещи:

  1. Серия Youtube-роликов для разработки dapp — объясняется всё максимально понятно, но есть минус: в систему были внесены некоторые изменения, так что могут вылезать ошибки синтаксиса. Это решается простым гуглением.А ещё с ошибками поможет справиться редактор Remix, но об этом позже.
  2. Курс Стефана Гридера — платный, но на нем часто действует скидка, так что есть возможность пройти его за 10 $. Контент качественный, с хорошими примерами.

После того, как покончите с Cryptozombies, неплохо бы научиться использовать Remix IDE для создания, отладки и развертывания контрактов. В этих файловх есть всё необходимое, чтобы начать.

Кроме того, следует разобраться с кошельками и клиентами Ethereum, протестировать браузерное расширение Metamask.

Уже после этого можно переходить к изучению более продвинутых вещей. Для начала почитайте документацию Solidity: там вы найдете качественные децентрализованных приложений. Они также есть на Ethereum.org. Их можно копировать и проверять прямо в Remix IDE.

После того, как вы начнёте хорошо разбираться в Solidity и смарт-контрактах, к приложениям с открытым исходным кодом, Crypto Kitties, например (код контракта можно увидеть на любом Ethereum-адресе через etherscan.io).

Ещё можно изучить следующие инструменты:

Теория игр во многом составляет принцип решения проблем с помощью блокчейна. Изучить основы теории можно с помощью The Great Courses Plus. У них есть месячная подписка и две пробных недели (можно уложиться и всё изучить). Формарев 24 получасовых лекций у вас появится четкое понимание того, что и как.

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

.
  • Software Engineering Daily, Blockchain — хорошо справляются с объяснением сложных тем, работают с лидерами блокчейн-тусовки
  • CryptoDisrupted — рассказывают об интересных блокчейн-проектов

Сообщество Ethereum, безусловно, наиболее крупное, а значит и разбираться с принципами работы технологии проще всего.Тем не менее было бы упущением не рассказать о других инновационных проектах:

  • Lisk — блочная цепь на JavaScript.
  • EOS — проект многосерийного блокчейн-предпринимателя, направлен на устранение недочётов Ethereum вроде масштабирования и безопасности.
  • Interchain Protocols — решения, созданные для упрощения транзакций между блоками и масштабирования. Примеры — Космос, Полкадот, Интерледжер.
  • Hyperledger — работает над продвижением технологий межсетевых блок-цепей.
  • Holo-технология, решающая проблемы централизации при сохранении масштабируемости.

. Ознакомьтесь с данными новыми изменениями, а не новости для манипуляции рынком.

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

Источник: Ресурсы для изучения блокчейн-разработки на freeCodeCamp

.

Блокчейн технология, Применение Blockchain, Проекты — BitcoinWiki

Это утверждённая версия страницы. Она же — наиболее свежая версия.

Понравилась статья? Поделись:

Блокчейн ( blockchain или blockchain «цепочка блоков» ) — публичная база всех транзакций, когда-либо совершенных в системе Bitcoin. Используя эту базу, каждый пользователь имеет возможность узнать, какое количество биткойнов принадлежит какому-либо конкретному адресу в определенном отрезке времени.База данных с помощью распределенных данных майнеров.

Технология Блокчейн [править]

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

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

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

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

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

Алгоритм Блокчейн [править]

Блокчейн — что это такое? Для чего нужна технология Blockchain, проекты на цепочке блоков

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

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

История [править]

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

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

Блоки, которые не являются главной главной цепочкой блоков, не используются. Так же за них не начисляется награда. Такие блоки называются «orphan-блоки» («орфаны»). Так как в блоке может быть ссылка только на один предшествующий блок, объединить 2 различные цепи невозможно.

Блокчейн-проекты [править]

  • Ethereum — распределенная вычислительная платформа с открытым исходным кодом, основанная на блокчейне функциональных возможностей смарт-контрактов.С ее помощью можно создать децентрализованные онлайн-сервисы. Концепцию единой децентрализованной виртуальной машины в 2013 году российско-канадский программист Виталик Бутерин. Сеть работает с 30 июня 2015 года после краудфандинговой кампании, которая позволила привлечь $ 18 439 млн.
  • Waves Platform — это криптовалютный проект, запущенный российским предпринимателем Александром Ивановым в 2016 году. Кампания по запуску Блокчейн-платформа Waves собрала 16 миллионов долларов, достигнув крупнейшего по привлечению средств через краудфандинг.

Классификация блокчейнов [править]

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

Такие трансформации позволяют говорить о разных блокчейна:

  • публичный блокчейн;
  • блокчейн, который принадлежит консорциуму;
  • полностью частный блокчейн (классификация создателя платформы Ethereum Виталика Бутерина).

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

Публичный блокчейн [править]

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

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

Такие системы обычно считаются «полностью децентрализованными».

Блокчейн, принадлежащий консорциуму [править]

Консорциумные блокчейны (блокчейны консорциума) контролирует заранее выбранным набором узлов. Виталик Бутерин в качестве примера приводит систему из 15 финансовых учреждений, которые утверждают каждый блок, чтобы его признали действительным и добавили в цепь.

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

Такие цепи можно назвать «частично децентрализованными».

Частный блокчейн [править]

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

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

Применение технологии [править]

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

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

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

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

Технология распределенного регистра уже сегодня активно используется в разных государствах. С помощью блочной решимости самые серьезные задачи. Ведь некоторые отрасли внедрения блокчейна уже сегодня преобразованы, более эффективными и безопасными.
В первую очередь, блокчейн был испытан в сфере государственных услуг и документооборота. Флорида ведомство, занимающееся сборми налогов, с платформой BitPay начала осуществления транзакций в Биткоинах и Bitcoin Cash. Таким образом, граждане США могут оплатить сборы за водительские права, имущество и другие документы в цифровых монетах.

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

Крупную сделку осуществили голландский банк ING Bank и международный финансовый конгломерат HSBC. При доставке товара из Аргентины в Малайзию была применена технология блокчейн в платформе R3 Corda. Это разрешить исключить оформление каких-либо разрешений и документов. В России подобную сделку осуществили Альфа-банк и авиаперевозчик S7.Благодаря мгновенному обновлению информации в сети финансовых операций безопасней и безопасней.

Поделиться информацией в сети Интернет сегодня привычное дело для каждого. Однако, когда дело осуществления валютных операций или передачи каких-либо других ценностей, мы обращаемся к централизованной финансовой системе — банкам. И, несмотря на то, что сегодня существуют различные электронные способы оплаты (PayPal, WebMoney, ЯндексДеньги), использовать их в отрыве банковской системы не представить возможным — для обналичивания денежных средств вам всё равно понадобится кредитная карта или расчётный счёт.

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

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

См. также на BitcoinWiki [править]

https://blog.ethereum.org/2015/08/07/on-public-and-private-blockchains/

https: // www.gov.uk/government/uploads/system/uploads/attachment_data/file/492972/gs-16-1-distributed-ledger-technology.pdf

http://www.coinfox.ru/novosti/obzory/5473-kakie-byvayut-blokchejny-i-pochemu-vazhno-ikh-razlichat
https://24paybank.org/news/blokchejn-mir-gde-primenjajut-decentralizovannuju-tehnologiju-na-segodnjashnij-den-.html

.

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

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

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

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

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

Блокчейн с нуля

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

Написание с нуля кода блокчейн-ноды напоминает создание собственной базы данных с механизмом надежной сетевой репликации.Всего вы поищете, сколько таких БД было создано за последние десятилетия, найдите максимум сотню проектов. Огромной долей рынка владеют всего несколько компаний (Oracle, MS SQL Server, MySQL, PostgreSQL), а разработчики ядра таких систем ценятся крайне высоко.

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

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

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

Готовые блокчейн-движки

Я намеренно назвал раздел «движки», так как этот термин в области ПО часто используется обозначения комплексов разнопланового ПО, предназначенного для решения конкретных задач.Например, «поисковый движок» или «графический движок» — это не только код, но и вспомогательное ПО, дополнительные утилиты описания алгоритмов и многое другое. Учитывая наличие нескольких основных ядер блокчейнов, на базе которых построены уже укрепляющие сети, будет удобно называть их движками (например, «построен на движке Ethereum»).

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

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

Эфириум

Этот комплекс ПО построен на базе публичного блокчейна Ethereum. Публичный Ethereum использует консенсус типа Proof-of-Work, его многочисленные тестовые сети — различные виды Proof-of-Authority и Proof-of-Stake консенсусов. ПО соответствует самым строгим критериям безопасности, проверено в десятках работающих сетей, на мой взгляд, является наиболее развитым для создания блокчейнов любыми видами консенсусов и полноценными, многофункциональными смарт-контрактами.

Нужно отметить роль проекта POA Network, чьи разработчики проделали огромную работу и запустили уже несколько быстрых и надежных сетей. Сеть POA обеспечивает более оригинальную работу Ethereum, но обладает той же стойкостью и универсальностью для заключения любых сделок, роль валидаторов (майнеров) исполняют компьютеры. Эту сеть можно считать эталоном для запуска корпоративных блокчейнов на базе Ethereum.

Код блокчейн-ноды и консенсус

Существуют две основные имплементации кода ноды Ethereum: на языке Rust (код, название: poa-parity (старое) или openethereum (новое)) и на Go (код, название: geth).

На момент написания PoA-сети на geth (Go) вам будет доступен только консенсус Clique — это простейший и небезопасный протокол без финализации, который можно использовать только в тестовых целях.

Консенсус, реализованный в poa-parity (Rust), состоит из двух алгоритмов: расписание валидаторов Aura и гаджет окончательности GRANDPA. Именно этот вариант, проверенный и безопасный, работает в POA-сетях на базе Ethereum. POA Network работают также над имплементацией перспективного BFT-консенсуса HoneyBadger.

Отдельное упоминания заслуживает новая блокчейн-нода Nethermind, написанная на C # для платформы .NET Core. Она полностью поддерживает Ethereum, большое число операционных систем и является отличным выбором для компаний, использующих .NET Core.

Смарт-контракты и управление сетью

POA Ethereum использует виртуальную машину EVM и смарт-контракты, которые лучше всего писать на языке Solidity. EVM давно стала стандартом для виртуальных машин с большим количеством готового кода и паттернов разработки.Кодов контрактов под EVM отвечает за большие суммы криптовалюты, и любая найденная уязвимость вызывает мощную реакцию сообщества и СМИ, поэтому безопасность контрактов EVM на текущий момент крайне высока.

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

Дополнительное ПО

С Ethereum можно использовать JavaScript-библиотеку web3.js, вне зависимости от консенсуса, валидаторов и ее расположения.

Для POA Ethereum существует репозитарий для автоматизации операций по развертыванию готовой сети — сценарии развертывания.

Если вы планируете запускать POA Ethereum, викорите эту инструкцию. Она проведет вас от создания ключей валидаторов к запуску первых нод, развертыванию системных контрактов и запуску интерфейса валидаторов и обозревателя блоков.

Готовая POA-сеть Ethereum присутствует в AWS, но я все же рекомендую контролировать запуск своими руками. Вы должны понимать, какие сервисы вы запускаете и как они работают.

EOS и его форки

Вторым по гарантии работоспособности и безопасности будет EOS.«OS» в его названии появилась не случайно.

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

Если Ethereum имеет простую систему адресов, то в EOS сразу же используется иерархическая система аккаунтов и права на различные действия. Все это делает EOS похожей по дизайну на операционную программную систему — «программу для запуска других».

В качестве межкорпоративной платформы EOS позволяет из коробки получить удобную систему управления аккаунтами и быстрый консенсус, а также легко интегрировать практически любой функционал при помощи плагинов на C ++ и смарт-контрактов на C ++ / WebAssembly (например, можно добавить другую криптографию).

Дизайн консенсуса в EOS и быстрые блоки достижения очень быстрого ответа пользователю, крайне важны для построения приложений со сложным функционалом (например, проекты Cyberway, Golos.io или соцсеть Commun). Cyberway произвела сложнейшую миграцию всей бизнес-логики из предыдущего блокчейна прозрачно для пользователей, что лишний раз доказывает гибкость и универсальность EOS.

Код блокчейн-ноды и консенсус

Код EOS написан на C ++ и развивался на основе опыта, полученного разработчиками при работе над движками Graphene, Bitshares, Steemit. Используется собственный вариант DPoS-консенсуса.

Сейчас почти все проекты, использующие DPoS, строят свои алгоритмы очень похожим на EOS: это аккаунты, «голосующие» балансирующий токена за топ валидаторов.Валидаторы подписывают блоки по расписанию, но каждый в назначенный квант времени, согласноанию. Затем они коллективно фиксируют так называемый Last Irreversible Block (LIB), на котором собирается 2/3 + 1 подписей от валидаторов.

Многие форки EOS пытаются улучшить это консенсус. Например, наш вариант Haya использует для фиксации LIB другой гаджет финальности — RANDPA, чтобы достичь времени финальности в 2-3 секунды.

Переход к корпоративному POA-консенсусу не вызывает затруднения, так как список валидаторов управляется системными смарт-контрактами.

Смарт-контракты и управление сетью

Смарт-контракты в EOS используют модифицированную виртуальную машину WebAssembly, обычно пишутся на языке C ++ и могут создаваться и говорить любым аккаунтом. Писать смарт-контракты не сложно, во многом они перекликаются с Solidity.

В EOS, как и в POA Ethereum, управление сетью, основным токеном (или токены) и типами транзакций можно реализовать в системе смарт-контрактаx (вот, например, системный токен). Интересной особенностью контрактов EOS является использование абстракции таблицы для хранения данных контракта.В Ethereum в основном используется сопоставление (ассоциативный массив).

Еще одна особенность смарт-контрактов в EOS — возможность обновления. Владелец контракта может заменить его, обновив логику или исправив ошибку. Это сильно отличается от Ethereum.

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

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

Дополнительное ПО

BOSCore, Telos, Haya и еще десяток форков EOS доказывают, что это ПО интересно большому количеству проектов.Для EOS существует достаточно инструментов, и вам не придется с нуля реализовывать сопутствующее ПО.

Eosjs — аналог web3.js, позволяет работать с контрактами любой сети на базе EOS из и любых приложений.

EOSTracker — обозреватель блоков с открытым кодом и децентрализованными приложениями для голосований за валидаторов.

У EOS нет одного большого и мощного интегратора, как сеть POA для Ethereum, поэтому каждый проект строит собственное решение.Тем не менее, основной код ноды стабилен и работает под серьезными нагрузками без сбоев.

Подложка с контролем четности

Substrate создается команда компании Parity. Разработано огромное количество ПО: кошельки, блокчейн-ноды, системы смарт-контрактов, компиляторы, виртуальные машины.

Parity Substrate позволяет достаточно легко разработать свой вариант блокчейна из готовых модулей со сложным консенсусом и логикой обработки транзакций. Субстрат — это конструктор блокчейнов, на котором, к примеру, можно сделать блокчейн-ноду Ethereum или биткоина.

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

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

Код блокчейн-ноды и консенсус

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

Что касается консенсуса, то можно выбрать из нескольких готовых вариантов или написать свой собственный. В большинстве случаев это PoA или DPoS, что в случае использования субстрата означает использование алгоритма Aura и GRANDPA.

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

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

Смарт-контракты и управление сетью

Субстрат, в отличие от Ethereum и EOS, обрабатывает транзакции при помощи кода, который размещается валидаторами, а не пользователями. Это код «runtime» и исполняется представленной машиной WebAssembly.

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

Особого упоминания заслуживают модули пользовательских смарт-контрактов: WASM и EVM. Они дают возможность пользователям размещать свои смарт-контракты, поэтому запуск универсального блокчейна на Substrate тоже возможен.

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

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

Дополнительное ПО

Для Substrate есть ряд полезных решений: polkascan — обозреватель блоков и комплекс программ на JS для работы с Polkadot и сетями на базе Substrate. Возможно, вам пригодятся подходящие сценарии для развертывания готового кластера на базе Субстрат, который мы использовали для тестирования Polkadot.

У Substrate нет богатого выбора универсального ПО, кошельков и обозревателей блоков, как у Ethereum или EOS, так как цепочки могут сильно отличаться между собой.Проект активно развивается, множественный параллельный сопутствующее ПО.

Cosmos SDK

Cosmos — это проект на базе одной основной цепочки и множества дочерних блокчейнов, называемых «зонами». Дочерние цепочки строятся на основе Cosmos SDK — набора ПО для построения блокчейнов.

Cosmos — это продолжение проекта Tendermint, из консольных технологий является надежныменсус и концепция Приложение, сходная с временем выполнения в Substrate.

Как и в случае Polkadot + Substrate, блокчейн, созданный с помощью Cosmos SDK, может жить отдельно или подключиться к экосистеме Cosmos как дочерняя цепочка.

Весь комплекс ПО Cosmos написан на Go и отлично структурирован и активно используется. На его основе уже работают несколько проектов, среди которых Binance Chain.

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

Код блокчейн-ноды и консенсус

Главная концепция Космос называется Приложение. Любой блокчейн представляет собой машину состояний, и в Cosmos она оказывает в отдельную часть кода.

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

Консенсус в Cosmos построен на базе консенсуса Tendermint, крайне близкого к pBFT. Его особенность в том, что подтверждения валидаторов собираются на каждый блок, что означает мгновенную финальность, как только блок принят сетью. Этот алгоритм требует много сообщений между валидаторами, и в случае проблем с сетью этот консенсус будет медленнее финализировать цепочку.

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

Смарт-контракты и управление сетью

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

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

Для транзакций в Cosmos, как в Ethereum, используется газ. Исполняя транзакцию, валидаторы вычисляют ее стоимость в условных единицах «газ».Отправляя транзакцию, пользователь указывает цену, которую он готов платить за единицу газа и лимит, который он готов потратить. Это является основанием для вычислений цены за транзакцию.

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

Дополнительное ПО

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

На JavaScript я нашел несколько полезных библиотек: js-cosmos, cosmosjs и универсальную js-abci, реализующую интерфейс ABCI. Их удобно использовать, если взаимодействие с вашим блокчейном планируется из. ABCI позволяет создавать приложения на разных языках, среди которых Java, C ++, Python. Проект lotion, например, позволяет создать блокчейн полностью на Javascript.

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

Подписывайтесь на канал Forklog в YouTube!

Нашли ошибку в тексте? Выделите ее и нажмите CTRL + ENTER

.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *