Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

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

.pdf
Скачиваний:
6
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
61
Это отдельное автономное приложение, которое позволяет хранить свою собственную криптовалюту и использовать браузер DApp, кон­тролируемый вами и только вами. Это означает, что закрытые ключи (которые представляют право собственности на криптовалюту) вашего кошелька хранятся непосредственно на вашем мобильном устройстве, а не на централизованном устройстве обмена информацией, таком как Coinbase.com. Для использования приложения CoinbaseWallet вам не нужна учетная запись Coinbase. Тем не менее есть те, которые готовы обменять это на удобство того, что их биткоины всегда под рукой через простой в использовании веб-сайт.
С другой стороны, такие кошельки, как Mycelium и Electrum, не хранят чьи-либо личные ключи в облаке. Пользователи владеют соб­ственными закрытыми ключами и несут ответственность за свои сред­ства. В случае потери закрытого ключа у этих сервисов нет никаких прав. Преимущество, конечно, в безопасности, поскольку никто, кроме вас, не контролирует ваши личные ключи. Однако это огромная ответ­ственность и бремя, особенно для случайных пользователей биткоинов. В конце концов выбор кошелька зависит только от вас.
Независимо от того, предпочитаете ли вы удобные функции, та­кие как оплата с помощью смартфона и QR-коды, модные кошельки с несколькими подписями, или делаете все возможное, чтобы исполь­зовать аппаратный кошелек, распечатаете на бумаге ваш закрытый ключ или запомните его, все сводится к вашим личным потребностям.
Вы можете подумать: хорошо, мы много говорили о биткоин-ко­шельках и о том, как управлять закрытыми ключами, но как мне вообще получить биткоин? Во-первых, можно воспользоваться биткоин-банко­матом. Сначала вы сканируете свой QR-код из приложения-кошелька для смартфона или любого другого устройства (или листа бумаги), ко­торое может отображать QR-код. Важно то, что этот QR-код содержит ваш биткоин-адрес. Некоторые биткоин-банкоматы работают немного по-другому и, вместо того чтобы сканировать QR-код, они просто рас­печатывают бумажный кошелек для вас, как только вы заплатили экви­валентную сумму наличными, дебетовой или кредитной картой. Также можете получить биткоин через биржу, где вы можете торговать между различными типами традиционной валюты и криптовалютами. Напри­мер, вы можете переводить биткоины в доллары США и, естественно, из долларов США в биткоины. Биржи важны, потому что они устанав­ливают цену биткоина, в связи с тем что они определяют рыночную стоимость. Существует множество бирж, среди которых есть более
62
авторитетные. Поэтому важно проявить должную осмотрительность при выборе биржи. Например, есть различие между централизован­ными и децентрализованными биржами. Централизованные биржи просты в использовании и к ним легко получить доступ, но они пред­ставляют больший риск для ваших средств.
За прошедшие годы произошло несколько печально известных хакерских инцидентов: взлом и банкротство биржи Mt.Gox, а также не­давний взлом BitFinex, в результате которого было украдено около 120 000 биткоинов. Как правило, хранить деньги на биржах в долго­срочной перспективе небезопасно. Многие пренебрегают этим прави­лом и в итоге теряют все свои средства, когда происходит взлом.
Естественно, в силу тенденции децентрализации всего по сообра­жениям безопасности теперь у нас есть децентрализованные биржи. Они не полагаются на сторонние службы для хранения средств клиента или выполнения какой-либо критически важной внутренней работы. Вместо этого сделки происходят только напрямую между пользовате­лями (вспомните P2P). Обычно это делается путем создания прокси-то­кенов или активов, которые представляют собой определенное количе­ство фиатной валюты или криптовалюты. Прокси-токен – это электрон­ное представление базового актива, такого как биткоин в блокчейн Ethereum, совместимое со смарт-контрактами на этой платформе. Дер­жатели токенов могут удобно торговать прокси-токенами, представля­ющими различные активы в цепочке.
Некоторые примеры децентрализованных бирж: Bitsquare, Bitshares, Openledger, NXT, CounterParty и т. д.
Децентрализованные биржи не обязательно лучше централизо­ванных, тем более что крупные централизованные биржи, как правило, поддерживаются мощными компаниями, которые могут инвестировать в высокий уровень безопасности, но, конечно, всегда лучше проявить необходимую осмотрительность.
Теперь мы знаем, что кошельки помогают управлять вашей иден­тификацией, т. е. вашими публичными и закрытыми ключами. Мало что можно добавить, когда вы просто напишите или распечатаете ко­пию своего закрытого ключа или используете мнемонику как способ вспомнить свой закрытый ключ. Но когда дело доходит до программ­ного обеспечения кошелька, все немного сложнее. Сейчас поговорим о некоторых механизмах кошелька и о том, как они активируют функ­ции вашего любимого приложения – биткоин-кошелька.
63
Почему, когда пользователь системы биткоин использует про­граммное обеспечение своего кошелька, ему не нужно загружать всю це­почку биткоинов? За это нужно поблагодарить SPV, которое расшифро­вывается как Simple Payment Verification. И это метод проверки того, включены ли определенные транзакции (в частности, ваши собственные транзакции) в блок, путем загрузки только заголовков каждого блока, а не всего блока, который включает все транзакции. Это особенно по­лезно для клиентов, которые ограничены емкостью хранилища, по­скольку теперь они могут работать, не сохраняя полную цепочку блоков. Представьте себе типичный биткоин-кошелек для смартфона. У вас не хранится весь блокчейн. Вместо этого у вас есть кошелек для отслежи­вания ваших ключей и компонент сетевой маршрутизации, который поз­воляет вам подключаться к протоколу биткоин Р2Р. Все это делается без полной цепочки блоков, и по этой причине клиенты, на которых выпол­няется SPV, называются легковесными или тонкими клиентами. В SPV, имея заголовки блоков, вы можете просто запустить доказательство включения дерева Меркла, которое мы рассматривали ранее.
Одно из основных предположений, которое вы должны сделать при использовании SPV, заключается в том, что заголовки входящих блоков не из ложной цепочки. Если заголовки блоков, которые вы по­лучаете, являются поддельными или недействительными, то транзак­ция, которую вы считаете действительной, на самом деле может не быть таковой, и кто-то потенциально может удвоить ваши расходы. К сча­стью, в целом нормально предположить, что заголовки входящих бло­ков не из ложной цепочки.
Пока вы подключаетесь к множеству разных узлов, вероятность того, что каждый из них будет контролироваться одним злоумышлен­ником, значительно снижается. И пока вы подключены к множеству уз­лов, в долгосрочной перспективе цепочка, которую вы видите, будет честной. Это основное предположение, которое мы делаем в биткоине с самого начала. И действительно, мы не можем позволить себе разме­стить всю цепочку блоков на наших телефонах или других легких устройствах, поэтому наличие тонкого клиента с SPV – вполне достой­ный компромисс.
Мы упоминали мультиподпись в предыдущем разделе в отноше­нии оплаты хеша скрипта. Но чтобы еще раз объяснить и уточнить его потенциальное использование, мы обобщаем, говоря, что мультипод­пись позволяет так называемые транзакции M-of-N. Проще говоря, мультиподписи – это способ криптографического обмена ключами
64
между участниками, который служит для распределения точек отказа. Представьте, хотите ли вы поделиться кошельком со своей семьей или даже с собой. Например, рассмотрим мультиподписи 2 из 3.
К примеру, у меня есть мультиподпись 2 из 3 с моими друзьями Денисом и Галиной. Только двое из нас должны подписать транзакцию, чтобы ее отправить. Но никто не может просто сбежать с нашим битко­ином, так как вам нужно как минимум два из трех ключей. Вместо того чтобы потерять свой закрытый ключ, а затем впоследствии потерять все свои средства, у меня есть несколько точек отказа. После потери одного закрытого ключа у меня все еще осталось два из трех общих ключей, поэтому у меня все еще достаточно ключей для доступа к моим сред­ствам по схеме с мультиподписью 2 из 3.
Вот другой пример. Некоторые биржи и компании-производи­тели программных кошельков предоставляют услуги с мультиподпи­сью 2 из 3 или 3 из 5. В случае с мультиподписью 2 из 3 вы сохраняете два своих ключа, а третий ключ – доверенная третья сторона, такая как компания или биржа. Биржа не может использовать ваши средства, по­скольку у нее есть только один ключ. Но, если вы когда-нибудь потеря­ете один из своих ключей, компания может вмешаться и предложить свой ключ, чтобы помочь вам вернуть свои средства. Как вы понимаете, это работает аналогично для мультиподписи 3 из 5 или любой другой мультиподписи M-of-N.
Обычно рекомендуется никогда не использовать псевдонимы по­вторно. А значит, требуется создание новой пары открытого и закры­того ключей для каждой совершаемой вами транзакции. Это нужно сде­лать, чтобы было сложнее определить, сколько биткоинов у вас есть и на что вы их потратили. Кроме того, представьте, что вы не создавали новую пару открытого и закрытого ключей для каждой транзакции, а все ваши средства были связаны с одним идентификатором. Как только вы потеряете соответствующий закрытый ключ, все ваши сред­ства исчезнут. Лучше всего распределять средства между несколькими учетными записями. В конце концов, ваши закрытые ключи – это про­сто случайные числа, между которыми нет никакой связи, поэтому ком­прометация одного ключа не зависит от других.
И открытые, и закрытые ключи в любом случае легко сгенериро­вать с вычислительной точки зрения. Так почему бы вам не создавать новые открытые и закрытые ключи для каждой транзакции? Это не­большое усилие, которое потенциально может помочь сохранить ваш опыт работы с биткоинами. Программное обеспечение кошелька, как
65
правило, справится с этим в любом случае, что значительно упрощает соблюдение лучших практик.
Теперь, если вы учитываете вопрос безопасности и генерируете новый открытый и закрытый ключи для каждой транзакции, естествен­ный вопрос: как управлять увеличивающимся количеством ключей? Это особенно актуально, если совершаете частые транзакции. Количе­ство ключей, которыми вы управляете, может быстро стать огромным.
Традиционный способ отслеживания ключей заключается в ис­пользовании так называемых кошельков JBOK, где JBOK является аб­бревиатурой словосочетания «просто связка ключей». Идея кошельков JBOK в том, что после каждой транзакции вы должны делать новую резервную копию новой пары ключей, которую вы генерируете. В ка­честве альтернативы вы также можете начать с заранее созданной группы ключей. Однако, после того как вы израсходуете все эти ключи, у вас все равно будет та же проблема, связанная с необходимостью со­здания дополнительных ключей. Кошельки JBOK не слишком удобны, потому что вам нужно хранить каждую пару ключей.
В случае с биржой проблема возрастает, поскольку постоянно торгуют тысячи пользователей, а значит, придется иметь дело с таким количеством ключей и даже с большим количеством резервных копий. Это было бы довольно неуправляемо. Так что, вместо того чтобы иметь просто связку ключей, давайте попробуем что-нибудь более умное. Что если бы мы могли вместо этого придумать способ получения ключей из исходного начального значения?
Это идея HD-кошельков или иерархических детерминированных кошельков. Итак, начинаем со случайно сгенерированного начального значения. Вместо того чтобы с этого момента создавать резервную ко­пию каждого отдельного ключа, мы могли бы просто детерминировано сгенерировать новую пару ключей, если известно исходное начальное значение. Можем рассматривать эту пару ключей как главный ключ.
Сначала генерируем наш главный ключ. И для каждого последу­ющего ключа, который хотим сгенерировать, можем просто взять хеш главного ключа с некоторым счетчиком или номером индекса, а затем придем к нашему производному дочернему ключу. Например, если я хочу сгенерировать свой третий дочерний ключ, я бы добавил 3 к мо­ему главному ключу и хешировал все это.
Мы можем рассматривать главный ключ как родительский ключ, а любые ключи, которые сгенерированы из него, являются его дочер­ними ключами. И чтобы сделать вещи более интересными, также
66
можем использовать дочерние ключи в качестве родительских ключей для создания еще большего количества дочерних ключей.
Генерируя ключи известным способом, а не случайным образом, мы значительно уменьшаем нагрузку на кошельки, которые должны от­слеживать все ваши ключи, особенно если вы имеете дело с тысячами ключей, как это делают биржи. Конечно, биржи могут использовать ко­шельки HD, чтобы значительно снизить свою нагрузку, но кошельки HD также могут быть полезны и в других местах.
Представим себе организацию с иерархической структурой, в ко­торой руководитель контролирует наш главный ключ. Из главного ключа мы можем сгенерировать дочерние ключи для каждого из руко­водителей отдела. А из ключей руководителей отделов мы можем снова сгенерировать дочерние ключи для каждого из сотрудников отдела. По­скольку ключи выводятся иерархически, кто-то, контролирующий ро­дительский ключ, может получить дочерний ключ и использовать его.
Если бы у всех в нашей иерархической организации был кошелек HD, как было определено ранее, тогда руководители отделов могли бы тратить деньги из кошельков сотрудников в своем отделе, поскольку ключи сотрудников были сгенерированы из ключей главы отдела. Каж­дый ключ каким-то образом происходит от главного ключа руководи­теля организации, поэтому руководитель сможет тратить деньги из лю­бого кошелька.
Мы говорили о консенсусе и Proof-of-Work, но на самом деле не говорили о реализации майнинга в биткоинах. Далее подробно рассмот- рим, как майнинг проявляется в реальном мире и как даже гениальный Сатоши Накамото не мог представить себе будущее майнинга. Рассмот­рим, что на самом деле делает майнер для проверки блоков.
Сначала рассмотрим общие шаги для майнинга как полного узла.
Шаг 0 (предварительный шаг для майнинга) – загрузка всей це­почки биткоинов. Это позволяет нам знать историю, чтобы можно было проверить будущие транзакции. Примечание: этот шаг не является обя­зательным, если вы майните в пуле для майнинга, но об этом позже.
Шаг 1 (следующий шаг) – проверка действительности транзак­ций, которыми мы заполняем наш блок.
Шаг 2 – создание блока с помощью данных транзакции и всех необходимых метаданных, таких как время, версия и цель.
Шаг 3 – поиск доказательства работы, или действительный одно­разовый номер, который решает задачу хеширования прообраза (вве­денных данных).
67
Шаг 4 – трансляция своего блока в систему, если мы еще не ви­дели блоки конкурентов.
Шаг 5 – получение прибыли, если ваш блок попадает в самую длинную цепочку.
Подробно рассмотрим, как проходит каждый из этих шагов.
Шаг 0. Скачиваем историю транзакций. Этот шаг нужно сделать только один раз по двум причинам. Если у вас есть полная история це­почки биткоинов, вам нет необходимости повторно загружать эту ин­формацию, а необходимо только отслеживать входящие блоки от дру­гих майнеров. Если вы майнер с узлом SPV, вам нужно только хранить заголовки блоков и запрашивать информацию у полных узлов для про­верки транзакций по мере необходимости. Это означает, что этот шаг не является обязательным. Если хотите стать полноценным независи­мым майнером, этот шаг необходим. Затем, когда у нас есть полная ис­тория, можно приступить к майнингу.
Шаг 1. Проверим транзакции. Пользователи биткоина каждую секунду отправляют транзакции в сеть биткоин, и задача майнеров за­ключается в проверке действительности этих транзакций. Когда тран­закции поступают к майнерам, они сохраняют их в «мемпуле», где «мем» означает «память», а «пул» – «поставку» (относится к поставке транзакций). Здесь находятся все ожидающие транзакции, прежде чем они попадут в блок. Затем майнеры выберут транзакции для подтвер­ждения на основе их комиссии за транзакцию, о чем речь далее. Они проверяют действительность каждого из них, запустив скрипт разбло­кировки. Если этот фрагмент кода может успешно разблокировать предыдущие биткоины, транзакция проходит.
После проверки всех этих транзакций пора сгенерировать блок. Как упоминалось ранее, для создания блока требуется несколько частей информации, например корень Меркла, который мы генерируем из нашего списка транзакций. После построения данных блока наконец можно приступить к работе над самой дорогостоящей частью процесса майнинга – этапом, за который весь этот процесс Proof-of-Work полу­чил название майнинга: поиск действительного одноразового номера. Как упоминалось ранее, каждому майнеру необходимо найти одноразо­вый номер, который делает хэш заголовка блока меньше некоторого це­левого значения.
Вот как реализуется Proof-of-Work в биткоинах и любой другой криптовалюте. Обнаружив одноразовый номер, мы преобразовали энер­гию, потраченную на вычисления, непосредственно в силу голосования
68
в протоколе консенсуса Proof-of-Work. Существует два разных однора­зовых номера: одноразовый номер заголовка и одноразовый номер базы данных. Следует иметь в виду, что одноразовый номер в заголовке – это достаточно небольшое число, размером всего 32 бита. Это означает, что мощное устройство может определить все возможные варианты Nonce за секунду. Если мы не находим правильного варианта, тогда меняем од­норазовый номер coinbase, поле внутри транзакции coinbase. Изменяя этот одноразовый номер, мы меняем корень Меркла, и таким образом мы можем получить больше вариантов ответа. Проходим эти циклы, пока наконец не найдем правильный одноразовый номер.
После нахождения одноразового номера типичный майнер пере­дает его как можно скорее, чтобы другие майнеры знали, что блок был найден. Эти майнеры проверят блок для себя, прежде чем принять его в свою цепочку, а затем снова его транслировать. Если сначала транс­лировать блок, другие майнеры откажутся от своих предыдущих бло­ков и начнут майнить в этой новой, самой длинной цепочке. По крайней мере на это есть надежда: есть вероятность, что кто-то перед вами транслировал блок, которого вы еще не видели. Только если ваш блок попадет в самую длинную цепочку, вы получите вознаграждение. Итак, как мы можем этого добиться? На самом деле не можем. Все, что мы можем сделать, – это надеяться, что нам повезет. Вот и все, что на са­мом деле лежит в основе Proof-of-Work, а именно случайная лотерея.
Предполагая, что наш блок попал в самую длинную цепочку, мы получаем прибыль. Мы получаем как вознаграждение за блок, пред­ставленное транзакциями базы монет, так и комиссию за транзакцию. Все транзакции в этом блоке добавляются в историю транзакций. Ситу­ация, когда наш блок не входит в самую длинную цепочку, – это когда наш блок конкурирует с другим блоком, который был отправлен в сеть в то же время. В этом случае майнеры скорее всего случайным образом выберут одно из двух, например наш блок, что означает, что нам снова повезло. Если наш блок не выбрали или он находится в форке (перевод слова fork дословно звучит как «вилка»), который не является самой длинной цепочкой, вы не получите прибыли.
Цепочка транзакций обычно является непрерывной и прямоли­нейной, т. е. обычно она не разветвляется, Но это не значит, что в прин­ципе не может быть разветвлений. Форк – это явление в системе, при котором одна большая цепь разветвляется на две цепи, которые после разделения продолжают работать уже независимо друг от друга.
69
На самом деле мы никогда не будем на 100 % уверены, что наш блок находится в самой длинной цепочке. Мы просто предполагаем, что вероятность возникновения форка со временем снижается. Погово­рим об этом подробнее, когда рассмотрим теорию игр применительно к технологии блокчейн и криптовалютам.
Как вы интуитивно понимаете, все, что кто-либо делает, делается с расчетом на получение некоторой прибыли. У каждого человека свое определение прибыли, но в биткоин оно довольно простое: больше де­нег означает больше прибыли. Фактически любой тип механизмов сти­мулирования в протоколах блокчейн сосредоточен на согласовании личной прибыли с общей прибылью. Разберем различные составляю­щие прибыли в биткоин.
Во-первых, начнем с обсуждения вознаграждения за блок – наиболее значительного источника прибыли для майнеров в настоящее время. Вознаграждение за блок – это награда, которая достается май­неру, блок которого входит в самую длинную цепочку. Как упомина­лось ранее, майнер включает специальную транзакцию, а именно тран­закцию coinbase. Эта транзакция позволяет чеканить биткоины и, что более важно, стимулирует участников проверять блоки. Чтобы лучше понять обоснование вознаграждения за блок, надо помнить, что при­быль является основным мотиватором для любой деятельности и что более высокий стимул к честному поведению ведет к более безопасной сети. Однако мы не можем напрямую наказывать нечестное поведение: все анонимны и нет эффективных способов принуждения к наказанию. Вывод таков: если мы не можем наказывать за нечестное поведение, мы можем вознаградить и за честное поведение!
Поскольку майнеры получают вознаграждение за производство блоков, у них появляется стимул производить больше блоков. Однако они получают вознаграждение только в биткоинах. Это означает, что если майнеры не видят ценности в биткоинах, они с меньшей вероятно­стью будут тратить деньги на электричество и оборудование, чтобы по­лучить биткоины.
Как уже отмечали, количество биткоинов ограниченно и состав­ляет 21 миллион. Это связано с тем, что вознаграждение за блок умень­шается вдвое каждые 210 000 (двести десять тысяч) блоков, что состав­ляет примерно 4 года. Когда биткоин только появился, вознаграждение за блок начиналось с 50 биткоинов, затем упало до 25 через первые два года и с тех пор сокращается вдвое. С помощью геометрического ряда предел предложения рассчитывается в 21 миллион биткоинов. Одно предостережение: не все 21 миллион биткоинов будут ликвидными.
70
Например, примерно 1 миллион принадлежит Сатоши Накамото, и вполне возможно, что эти биткоины никогда не переместятся. Кроме того, некоторые закрытые ключи были утеряны, а некоторые биткоины были сожжены, что уменьшило допустимый предел запаса.
Теперь, когда мы обсудили все источники дохода майнеров, мо­жем перейти к расходам. Начнем с обсуждения постоянных затрат, а за­тем перейдем к переменным затратам.
Как вы все знаете, оборудование – это то, что позволяет пользо­вателям майнить, а стоимость оборудования фиксирована. Это разовая покупка. Существует несколько различных типов оборудования – от обычных вычислительных устройств до специализированного оборудо­вания для майнинга. Вначале для майнинга использовали центральный процессор (CPU – central processing unit) компьютера, но это оказалось неэффективно, поскольку на поиск блока при майнинге с помощью CPU уходило много времени. Это связано с тем, что процессоры пред­назначены для выполнения общих вычислений, но они не очень хороши для конкретного вычисления хэшей.
Некоторые члены игрового сообщества быстро осознали, что в их руках есть более мощные вычислительные устройства, а именно графи­ческие процессоры. Графические процессоры (GPU – graphics processing unit) – это устройства, обычно используемые для обработки мультимедиа, например видеоигр. Эти устройства также являются уни­версальными вычислительными устройствами, поскольку они могут обрабатывать множество различных типов вычислений, включая хеши­рование. Когда дело доходит до вычислений, они на порядок быстрее процессоров, а значит, могут хешировать в 10 раз быстрее. Однако не­которые из недостатков использования графических процессоров свя­заны с их компонентами, не имеющими отношения к майнингу.
Например, для майнинга не требуются числа с плавающей запя­той, поэтому лишние компоненты бесполезны, но все равно включены в стоимость оборудования графического процессора. Кроме того, они не предназначены для работы на оборудовании майнеров бок о бок, по­этому сложно управлять крупномасштабной установкой майнинга на GPU. Именно здесь вступают в игру программируемые вентильные матрицы (FPGA – field-programmable gate array). Это были первые формы специализированного оборудования для майнинга в биткоинах. Эти устройства были оптимизированы для майнинга биткоинов, но не утратили общей вычислительной мощности. Причина такого компро­мисса заключалась в том, что по-прежнему существовала некоторая не­определенность в отношении будущего успеха биткоина,
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]