Блокчейн Глазами Разработчика



Блокчейн глазами разработчика

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

Прошло время, прежде чем это сложилось в целостную картину.

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

В тексте будут некоторые упрощения.

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

Давай начнем.

Асимметричная криптография существует уже давно.

Напомню, что существуют публичные и приватные ключи.

Шифрование открыто, расшифровка закрыта.

Или наоборот. Невозможно получить одно от другого.

Таким образом, уже используя только асимметричную криптографию, я могу отправить кому-нибудь сообщение, например: «Я перевел 100 рублей», и все будут знать, что это я его отправил и что оно доставлено в неизменном виде.

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

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

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

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

Таким образом, все входящие и исходящие транзакции являются обязательными.

Отсюда и публичный реестр.

Это позволит вам сказать, сможет ли человек отправить 300 тысяч.



Биткойн: начало

Остается одна проблема: что, если я отправлю все свои деньги двум людям одновременно? Это двойные траты, или двойные траты.

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

А еще им неудобно выяснять между собой, кто получил выплату.

Следовать по временным меткам (видеть, кому я отправлял деньги раньше) ненадежно.

Решение есть: оптимизировать транзакции.

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

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

В банке говорят, кому ушли мои деньги.

В блокчейне нет ни одного доверенного лица.

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

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

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

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

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

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

Порядок транзакций внутри блока определяет один участник сети — тот, кто формирует блок (майнер).

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

Алгоритмы консенсуса существуют уже довольно давно.

Например, алгоритмы Паксос И Плот в мультимастерных системах NoSQL. Но для сети с миллионом равноправных участников они вряд ли подойдут. Биткойн предложил революционный для того времени алгоритм — консенсус через доказательство работы (PoW).

Новые блоки формируются одновременно многими участниками сети — майнерами.

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

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

Блок (вместе с увеличенным числом, nonce) хешируется до тех пор, пока хеш, рассматриваемый как большое число, не будет удовлетворять определенным условиям, например, иметь 10 ведущих нулей.

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

А проверить корректность работы очень легко: достаточно одного хеширования.

Важно понимать, что работа подобрана так, чтобы во всей сети (т. е.

среди тысяч майнеров!) в среднем за десять минут появлялся только один блок (средний интервал появления блоков в Биткойне).

В таких условиях вероятность коллизий, т. е.

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

Однако вероятность столкновений все еще сохраняется.

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

На самом деле существует не цепочка, а ориентированный граф без циклов (DAG) со множеством ветвей и цепочек, причем цепочку обычно называют «общей историей» — цепочкой с наибольшей длиной.

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

Чтобы быть уверенным, что вас не потратят дважды, вы обычно ждете шесть блоков (в Биткойне — час, в Эфириуме — несколько минут).

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

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

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

Отдавать деньги на майнинг кажется логичным и приемлемым решением.

Кстати о майнинге.

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

Биткойн использует хэш SHA-256, Ethereum использует хэш Keccak-256. Если вы будете майнить в одиночку, вам придется жить на рисе и воде в среднем очень долго, прежде чем вы получите блок (блок — раз в десять минут, сотни тысяч конкурентов!).

Поэтому майнеры объединяются в пулы.

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

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

То есть и риск, и польза «размазываются».

Когда время стремится к бесконечности, приятель.

ожидание прибыли от майнинга в пуле (если пренебречь комиссией пула) равно мат. ожидание прибыли от соло-майнинга.

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

И мы не будем его трогать.

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

Итак, у нас есть технология блокчейна Биткойн.



Смарт-контракты и ICO

Вперед, продолжать.

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

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

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

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

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

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

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

Например, он не может запускать Web API в децентрализованном стиле (есть решения, так называемые оракулы, но там все не просто, и это отдельная тема).

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

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

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

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

Когда деньги отправляются в контракт как на счет (т.е.

просто на адрес), срабатывает точка входа по умолчанию: резервная функция.

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

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

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

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

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

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

Многие криптовалюты, или так называемые токены, основаны на смарт-контрактах Ethereum. Да, обычно такая криптовалюта представляет собой просто контракт Ethereum (один!).

Балансы — это записи в хранилище контракта в виде карты, а перевод валюты из одного в другой — это:

map[Alice] –= payment;



map[Bob] += payment;

Им не нужен собственный майнинг и собственная сеть: они используют инфраструктуру Ethereum. ICO/ITO на Ethereum — это обмен эфира (криптовалюты сети Ethereum) на криптовалюту (токены).

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

Дальнейшее развитие

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

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

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

В этом случае, очевидно, я буду передавать только 10 байт из 1 ГБ, о чем, вероятно, уже знает доверяющая сторона.

Поскольку шифрование RSA выполняет возведение в степень и

Блокчейн глазами разработчика

Оказывается, что

Блокчейн глазами разработчика

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

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

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

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

Тезос .

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



Заключение

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

) Несколько слов о блокчейн-ландшафте.

Уже было сказано, что существует множество криптовалют, которые являются контрактами Ethereum, то есть используют блокчейн Ethereum. Но есть проекты и помимо Биткойна и Эфириума — они могут отличаться как в деталях (например, форки), так и достаточно сильно, пытаясь создать принципиально новые блокчейны, например ЭОС .



Бонус

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

Вот набор ссылок, по которым я изучал написание и безопасность смарт-контрактов (Не забывайте о безопасности! На кону деньги!).

Рекомендую читать в таком порядке:

Теги: #blockchain #bitcoin #Ethereum #ico #криптовалюты #децентрализация #криптография #открытый исходный код #программирование #алгоритмы
Вместе с данным постом часто просматривают: