Блокчейн. Мягкое погружение. Часть 3. Хочу свой аккаунт в блокчейне

Плод больной фантазии нейросети, но красиво, зараза...
Плод больной фантазии нейросети, но красиво, зараза...

Освежаем память

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

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

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

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

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

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

Главный постулат децентрализации

В БЛОКЧЕЙНЕ НИКТО НЕ ДОВЕРЯЕТ НИКОМУ

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

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

Что из себя представляет счет/аккаунт в блокчейне

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

Но пора бы перейти от аналогии с именами к реальному блокчейну. В банке есть номера счетов. У карт физических лиц – тоже номера. Даже просто по номеру телефона можно перевести деньги. Здесь все просто и понятно. А на какой номер отправить деньги в блокчейне? Снова на помощь приходит математика.

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

Эти числа называются открытым ключом и закрытым ключом (также их называют публичный и приватный ключи). Связаны они друг с другом математической функцией. Еще больше уточняем: открытый (публичный) ключ получается из закрытого (приватного) ключа по некоторой формуле. Если у вас есть знания в области математики (или если вы считаете себя лютым хардкорщиком и способны разобраться в любой теме самостоятельно), можете уделить время крайне увлекательному чтиву о том, как это происходит в следующей книге в главе Keys, Addresses. Public keys:

Mastering Bitcoin. Andreas M. Antonopoulos.
Mastering Bitcoin. Andreas M. Antonopoulos.

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

В результате, мы получаем нечто такое:

Hex

1e99423a4ed27608a15a2616a2b0e9e52ced330ac530edcc32c8ffc6a526aedd

WIF

5J3mBbAH58CpQ3Y5RNJpUKPE62SQ5tfcvU2JpbnkeyhfsYB1Jcn

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

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

Лирическое отступление. Разница между кодированием, шифрованием и хешированием

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

Функция - это некий объект, который имеет вход и выход. Давайте визуализируем:

Подаем на вход некоторое число x, а в результате её работы получаем некоторое число y
Подаем на вход некоторое число x, а в результате её работы получаем некоторое число y

Любимый школьный пример:

У нас есть x, равный 2, который подставляется в функцию, и мы получаем y, равный 4
У нас есть x, равный 2, который подставляется в функцию, и мы получаем y, равный 4

Изобразим функцию FaceID:

Как видите, входом является ваше лицо, которое получает модуль FaceID. А выходом будет либо разблокировка, либо отказ
Как видите, входом является ваше лицо, которое получает модуль FaceID. А выходом будет либо разблокировка, либо отказ

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

Функция корень из y - это обратная функция для f(x) = x^2
Функция корень из y - это обратная функция для f(x) = x^2

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

Так вот, возвращаясь к нашим терминам:

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

Кидаем на вход функции любую строку, получаем строку ВСЕГДА ФИКСИРОВАННОЙ длины - хэш
Кидаем на вход функции любую строку, получаем строку ВСЕГДА ФИКСИРОВАННОЙ длины - хэш

!!! Для хэш-функций не существует обратной функции, т.е. по хэшу b655d1ec07c709...d2df мы не сможем получить данное четверостишье.

2) Шифрование.

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

Берем исходную строку (в данном случае Investment Hollow) и открытый ключ получателя, отправляем на вход алгоритма и получаем зашифрованный текст
Берем исходную строку (в данном случае Investment Hollow) и открытый ключ получателя, отправляем на вход алгоритма и получаем зашифрованный текст

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

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

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

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

3) Кодирование. Самый простой пример кодирования информации известен каждому – это QR-коды.

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

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

Собственно, получаете информацию из QR-кода вы именно на этом этапе!
Собственно, получаете информацию из QR-кода вы именно на этом этапе!

Получается, кодирование просто видоизменяет исходную информацию таким образом, чтобы это было удобно использовать, хранить или передавать, но это вовсе не означает, что это способ сокрытия данных, т.к. если вы видите белиберду из черных квадратиков на белом фоне – это не означает, что информация злонамеренно скрыта от вас. Вовсе нет! Это лишь способ УДОБНО хранить информацию. Ведь вам нужно лишь навести камеру на этот QR-код, и по несложному алгоритму вы получаете уже что-то доступное человеческому восприятию.

Разрушители мифов

Блокчейн. Мягкое погружение. Часть 3. Хочу свой аккаунт в блокчейне

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

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

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

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

Открытый ключ НЕ ИСПОЛЬЗУЕТСЯ для отправки средств. В реальности мы должны совершить с ним еще несколько манипуляций, чтобы получить адрес, который и будет номером, на который вам скинут бабки :)

Работает это следующим образом:

  • у нас есть открытый ключ, например, 025c0de3b9c8ab18dd04e3511243ec2952002dbfadc864b9628910169d9b9b00ec
  • Мы применяем к нему последовательно две разные хэш-функции и получаем результирующий хэш
  • Дальше закидываем в функцию кодировки, и
  • Вуаля, получаем биткоин адрес 14cxpo3MBCYYWCgF74SWTdcmxipnGUsPw3
  • Если обратите внимание, то открытый ключ ни капли не похож на биткоин адрес!

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

Превращение публичного ключа в биткоин адрес
Превращение публичного ключа в биткоин адрес

bc1qnlvds4zmmqyt5xsmg3p25pz3x00akrf3u4yr73

А вот это уже, кстати, реальный адрес биткоин кошелька нашего сообщества (донаты приветствуются 😂).

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

Однако если кто-то украл у вас закрытый ключ (вирус, который вы подхватили на свой ПК, или кто-то нашел в вашей тумбочке бумажку, на которой этот ключ записан) – он получит полный контроль над вашими средствами. Бдительность и безопасность превыше всего!

Транзакции

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

Блокчейн. Мягкое погружение. Часть 3. Хочу свой аккаунт в блокчейне

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

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

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

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

  • После подписи транзакции она отправляется в так называемый «пул неподтвержденных транзакций»

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

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

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

Типичная схема отправки биткоинов выглядит следующим образом:

Блокчейн. Мягкое погружение. Часть 3. Хочу свой аккаунт в блокчейне

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

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

Эти входящие транзакции называются input’ами. То есть «входами» в блок. А список исходящих транзакций – output’ами. И в один блок помещается много инпутов и аутпутов. Поэтому транзакция в блокчейне выглядит примерно так: вот мои 1 биткойн+1,5 биткойна+0,3 биткойна, переведи на данный адрес 2,6 биткойна, из оставшихся средств вычти 0,0003 биткойна на комиссию, а сдачу в 0.1997 верни назад. Но опять же, это лишь демонстрация принципов работы, ваше реальное взаимодействие с сетью не будет этим осложнено. Но зато когда вы зайдете на обозреватель блоков в блокчейне, чтобы узнать, как там продвигается подтверждение вашей транзакции, вы не упадете в обморок от увиденного.

Подведем итоги

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

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

Увидимся в следующей статье, где мы на практике создадим с вами несколько криптовалютных кошельков 😉

Investment Hollow - компания единомышленников, которая видит в криптоиндустрии будущее, а также хороший источник заработка. Ежедневно анализируем рынок в поисках интересных проектов для инвестиций.

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

3939
12 комментариев

Интересный стиль изложения. жаль, что в эпоху тиктокеров до конца вряд ли кто-то дочитает 🤣🤣🤣

6
Ответить

ага, на середине статьи хотел свайпнуть, но не получилось

6
Ответить

согласна 😅, но мне зашло

4
Ответить

Наконец-то путевая статья на vc

7
Ответить

Хоть я уже и знаю что-то о блокчейне, но это ммм неплохо

5
Ответить

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

4
Ответить

читается на изи, спс

3
Ответить