Почему эта история? Когда я изучал блокчейн через открытые источники, такие как Википедия, информация казалась фрагментарной и бессвязной.
Прошло время, прежде чем это сложилось в целостную картину.
Думаю, я знаю, в каком порядке и какими словами описать введение в блокчейн, чтобы любой профессиональный разработчик смог понять общую картину за 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. Инфраструктура местами сырая (не очень удобно пользоваться), но вполне надежная.Вот набор ссылок, по которым я изучал написание и безопасность смарт-контрактов (Не забывайте о безопасности! На кону деньги!).
Рекомендую читать в таком порядке:
- Биткойн: одноранговая электронная денежная система — разделы 1—8
- Достаточно биткойнов для Эфириума
- Технический документ по Эфириуму
- Если вы хотите сразу немного попрактиковаться: Путеводитель по смарт-контрактам в Ethereum для путешествующих автостопом
- Документация Solidity
- Формат спецификации Ethereum Natural
- контракты/в Цеппелин Солидити
- Вперед с безопасностью смарт-контрактов Ethereum
- Методы и советы по обеспечению безопасности контрактов Ethereum
- Актуально только с Хакерство, Распределенное
-
N900 Глазами Яблочного Человека
19 Oct, 24 -
Google Voice В России
19 Oct, 24