Осваиваем биткойн

Тема в разделе "Все о криптовалютах", создана пользователем Pill for Greediness, 7 май 2018.

  1. Pill for Greediness

    Pill for Greediness Administrator Команда форума

    Сообщения:
    2.765
    Симпатии:
    146
    Осваиваем биткойн

    [​IMG]

    АННОТАЦИЯ

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

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

    Биткойн – это первая в своем роде децентрализованная цифровая валюта, которая, однако, все еще находится на ранней стадии развития, но своим появлением уже создавшая многомиллиардную глобальную экономку. Эта экономика покорится каждому, у кого достанет знаний и энтузиазма, а книга “Осваиваем биткойн” откроет путь.


    Оригинальное название:

    "Mastering Bitcoin"

    Оригинальный правообладатель:
    "O'Reilly"

    Автор: Антонопулос А.
    Дата выхода: апрель 2018 года
    Формат: 165 * 235 мм
    Бумага: офсетная
    Обложка: Твердый переплет
    Объем, стр.: 428
    ISBN: 978-5-94074-965-3
    Вес, гр.: 800
    Оглавление и отрывки из глав


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

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

    Биткойн – это первая в своем роде децентрализованная цифровая валюта, которая, однако, все еще находится на ранней стадии развития, но своим появлением уже создавшая многомиллиардную глобальную экономку. Эта экономика покорится каждому, у кого достанет знаний и энтузиазма, а книга “Осваиваем биткойн” откроет путь.
    Содержание Предисловие ......................................................................................................14 Благодарности ...................................................................................................19 Глава 1. Введение..............................................................................................24 Что такое биткойн ................................................................................................24 История создания биткойна ................................................................................27 Варианты использования биткойнов, пользователи и их истории ..................29 Начинаем обучение..............................................................................................30 Выбор биткойн-кошелька................................................................................31 Сразу переходим к делу ...................................................................................33 Получаем свой первый биткойн......................................................................35 Поиск информации о текущей стоимости биткойна.....................................36 Отправка и получение биткойна.....................................................................37 Глава 2. Как работает биткойн.......................................................................40 Транзакции, блоки, майнинг и блокчейн ...........................................................40 Общий обзор биткойн-системы......................................................................40 Покупка чашки кофе ........................................................................................41 Транзакции биткойна ..........................................................................................43 Входные и выходные данные транзакции......................................................43 Цепочки транзакций ........................................................................................44 Получение сдачи...............................................................................................45 Общие формы транзакций ..............................................................................46 Создание транзакции...........................................................................................47 Формирование правильных входных данных................................................48 Формирование выходных данных ..................................................................49 Добавление транзакции в реестр ....................................................................51 Майнинг биткойнов .............................................................................................52 Майнинг транзакций в блоках.............................................................................54 Расходование транзакции....................................................................................56 Глава 3. Bicoin Core: эталонная реализация...............................................58 Среда разработки биткойна.................................................................................59 6  Содержание Компиляция Bitcoin Core из исходных кодов .....................................................60 Выбор версии Bitcoin Core ...............................................................................60 Конфигурирование компилируемой версии Bitcoin Core .............................61 Сборка выполняемых файлов Bitcoin Core .....................................................64 Запуск узла Bitcoin Core........................................................................................65 Самый первый запуск Bitcoin Core..................................................................67 Конфигурирование узла Bitcoin Core ..............................................................67 Прикладной программный интерфейс (API) Bitcoin Core .................................72 Получение информации о состоянии клиента Bitcoin Core ..........................73 Обработка и расшифровка транзакций ..........................................................74 Исследование блоков........................................................................................76 Использование программного интерфейса Bitcoin Core...............................77 Прочие клиенты, библиотеки и инструментальные пакеты.............................80 C/C++..................................................................................................................80 JavaScript ...........................................................................................................80 Java.....................................................................................................................81 Python................................................................................................................81 Ruby ...................................................................................................................81 Go.......................................................................................................................81 Rust ....................................................................................................................81 C# .......................................................................................................................81 Objective-C.........................................................................................................82 Глава 4. Ключи и адреса..................................................................................83 Введение................................................................................................................83 Криптография с открытым ключом и криптовалюта....................................84 Секретный ключ и открытый ключ.................................................................85 Секретные ключи..............................................................................................86 Открытые ключи ..............................................................................................88 Криптография с использованием эллиптических кривых............................89 Генерация открытого ключа ............................................................................91 Биткойн-адреса ....................................................................................................93 Форматы кодирования Base58 и Base58Check................................................94 Форматы ключей ..............................................................................................99 Реализация ключей и адресов на языке Python ...............................................105 Усовершенствованные ключи и адреса.............................................................108 Зашифрованные секретные ключи (BIP-38).................................................109 Адреса скриптов Pay-to-Script Hash (P2SH) и адреса мультиподписей .............................................................................................110 «Престижные» адреса.....................................................................................112 Содержание  7 Глава 5. Кошельки...........................................................................................121 Общий обзор технологии кошельков................................................................121 Недетерминированные кошельки (со случайным выбором ключей) ........122 Детерминированные кошельки (с источником) ..........................................123 HD-кошельки (BIP-32/BIP-44)........................................................................123 Источники и мнемонические коды (BIP-39) ................................................125 Оптимальные практические методики технологии кошельков .................125 Практическое использование биткойн-кошелька .......................................126 Подробности технологии кошельков ................................................................128 Мнемонические кодовые слова (BIP-39).......................................................128 Создание HD-кошелька из источника...........................................................134 Использование расширяемого открытого ключа в веб-магазине ..............139 Глава 6. Транзакции ........................................................................................146 Введение..............................................................................................................146 Транзакции в подробностях ..............................................................................146 Транзакции – что внутри...............................................................................147 Входные и выходные данные транзакции........................................................148 Выходные данные транзакции......................................................................150 Входные данные транзакции.........................................................................153 Оплата транзакций.........................................................................................156 Добавление сумм оплаты в транзакции .......................................................160 Скрипты транзакций и язык Script ...................................................................161 Неполнота по Тьюрингу.................................................................................162 Верификация без сохранения состояния......................................................162 Формирование структуры скрипта (Lock + Unlock)......................................162 Скрипт Pay-to-Public-Key-Hash (P2PKH).......................................................167 Цифровые подписи (ECDSA)..............................................................................169 Как работают цифровые подписи .................................................................170 Проверка цифровых подписей ......................................................................172 Типы хэш-значений подписи (SIGHASH) .....................................................172 Математическое обоснование алгоритма ECDSA........................................175 Важность фактора случайности в цифровых подписях...............................176 Биткойн-адреса, балансы и прочие абстракции ..............................................177 Глава 7. Более сложные транзакции и скрипты ......................................181 Введение..............................................................................................................181 Мультиподписи...................................................................................................181 Скрипт Pay-to-Script-Hash (P2SH)......................................................................183 8  Содержание Адреса P2SH ....................................................................................................186 Преимущества механизма P2SH....................................................................186 Погашающий скрипт и проверка корректности ..........................................187 Запись выходных данных (RETURN) .................................................................188 Блокировки по времени (timelocks)..................................................................190 Блокирование транзакции по времени (nLocktime)....................................190 Check Lock Time Verify (CLTV) ........................................................................191 Относительные блокировки по времени......................................................193 Относительные блокировки по времени, устанавливаемые полем nSequence ........................................................................................................194 Относительные блокировки по времени с применением параметра CSV................................................................................................196 Median-Time-Past............................................................................................196 Защита блокировок по времени от нелегального получения отчислений......................................................................................................197 Скрипты с управлением потоком выполнения (условные выражения).........198 Условные выражения с применением оператора VERIFY...........................200 Использование средств управления потоком выполнения в скриптах .....201 Пример сложного скрипта .................................................................................202 Глава 8. Сеть биткойна ...................................................................................205 Архитектура пиринговой сети...........................................................................205 Типы и роли узлов ..............................................................................................206 Расширенная биткойн-сеть ...............................................................................207 Сеть Bitcoin Relay Network..................................................................................209 Обследование биткойн-сети..............................................................................211 Полноценные узлы .............................................................................................215 Взаимная «инвентаризация» .............................................................................216 Узлы с упрощенной проверкой платежей (SPV)...............................................218 Фильтр Блума......................................................................................................221 Как работает фильтр Блума ...........................................................................221 Как SPV-узлы применяют фильтры Блума........................................................225 SPV-узлы и приватность.....................................................................................227 Зашифрованные и защищенные соединения ..................................................227 Tor Transport....................................................................................................227 Аутентификация и шифрование в пиринговой сети...................................228 Пулы транзакций................................................................................................229 Глава 9. Блокчейн............................................................................................231 Введение..............................................................................................................231 Содержание  9 Структура блока ..................................................................................................233 Заголовок блока ..................................................................................................233 Идентификаторы блока: хэш-значение заголовка блока и высота блока......234 Первичный блок .................................................................................................235 Связывание блоков в структуру данных блокчейна.........................................236 Деревья Меркле ..................................................................................................237 Деревья Меркле и упрощенная верификация платежей (SPV) .......................244 Тестовые структуры блокчейна в биткойн-системе ........................................244 Testnet – «песочница» для тестирования биткойнов...................................245 Segnet – тестовая сеть для функции Segregated Witness..............................247 Regtest – локальная структура данных блокчейна .......................................247 Использование тестовых структур блокчейна для разработки.......................248 Глава 10. Майнинг и консенсус ....................................................................249 Введение..............................................................................................................249 Экономика биткойна и создание валюты.....................................................251 Децентрализованный консенсус .......................................................................253 Независимая верификация транзакций ...........................................................254 Узлы майнинга....................................................................................................256 Объединение транзакций в блоки.....................................................................257 Coinbase-транзакция......................................................................................258 Вознаграждение coinbase и отчисления за транзакции ..............................260 Структура coinbase-транзакции ....................................................................261 Данные coinbase..............................................................................................262 Формирование заголовка блока ........................................................................264 Майнинг блока....................................................................................................265 Алгоритм доказательства выполнения работы (PoW).................................266 Представление целевого значения ...............................................................272 Изменение целевого значения для регулирования уровня сложности......273 Успешный майнинг блока..................................................................................276 Проверка корректности нового блока...............................................................276 Формирование и выбор цепочек блоков ..........................................................278 Разветвления структуры данных блокчейна ................................................279 Майнинг и конкуренция в хэш-вычислениях ..................................................287 Решение с расширением диапазона дополнительных значений nonce.....289 Пулы майнинга ...............................................................................................290 Атаки на механизм консенсуса..........................................................................295 Изменение правил консенсуса ..........................................................................299 Устойчивые разветвления..............................................................................299 Устойчивые разветвления: ПО, сеть, майнинг и цепочка ...........................301 10  Содержание Разделение майнеров и уровень сложности.................................................303 Спорные устойчивые разветвления..............................................................303 Неустойчивые разветвления .........................................................................304 Критика неустойчивых разветвлений ..........................................................306 Оповещение о неустойчивом разветвлении с помощью поля версии блока ....................................................................................................................307 Оповещение и активация по стандарту BIP-34............................................307 Оповещение и активация по стандарту BIP-9..............................................308 Разработка программного обеспечения для механизма консенсуса .............311 Глава 11. Обеспечение безопасности биткойн-системы ......................313 Основы обеспечения безопасности ..................................................................313 Разработка защищенных биткойн-систем...................................................315 Основа доверительных отношений ..............................................................316 Наиболее эффективные практические методики защиты пользователей.....................................................................................................317 Физические средства хранения биткойнов..................................................318 Аппаратные кошельки ...................................................................................319 Разумный баланс защиты и рисков ..............................................................319 Диверсификация рисков................................................................................319 Мультиподпись и управление .......................................................................320 Жизнеспособность .........................................................................................320 Резюме.................................................................................................................321 Глава 12. Приложения блокчейна...............................................................322 Введение..............................................................................................................322 Базовые элементы ..............................................................................................323 Приложения, создаваемые из базовых элементов...........................................325 Цветные монеты.................................................................................................326 Использование цветных монет .....................................................................327 Выпуск цветных монет...................................................................................327 Транзакции цветных монет...........................................................................328 Counterparty ........................................................................................................331 Каналы платежей и каналы состояний .............................................................332 Каналы состояний – основные концепции и терминология.......................333 Пример простого канала платежей...............................................................335 Создание каналов без доверительных отношений......................................338 Асимметричные отменяемые обязательства ...............................................341 Контракты Hash Time Lock Contracts (HTLC) ................................................346 Каналы платежа с маршрутизацией (Lightning Network) ................................347 Содержание  11 Простой пример работы Lightning Network..................................................348 Механизмы передачи и маршрутизации в сети Lightning Network............351 Преимущества сети Lightning Network .........................................................354 Резюме.................................................................................................................355 Приложение А. Статья о биткойне Сатоши Накамото ...........................356 Биткойн – пиринговая система электронных денег ........................................356 Введение..........................................................................................................357 Транзакции .....................................................................................................357 Сервер меток времени ...................................................................................359 Доказательство выполнения работы.............................................................359 Сеть..................................................................................................................360 Стимул.............................................................................................................361 Требуемое дисковое пространство................................................................362 Упрощенная верификация платежей............................................................363 Объединение и разделение сумм транзакций .............................................364 Приватность....................................................................................................364 Вычисления.....................................................................................................365 Резюме.............................................................................................................368 Ссылки.............................................................................................................369 Лицензия.............................................................................................................369 Приложение Б. Операторы, константы и символы скриптового языка для транзакций Script...............................................371 Приожение В. Предложения по улучшению биткойна (Bitcoin Improvement Proposals) .................................................................377 Приложение Г. Функция Segregated Witness (Segwit)...........................383 Зачем нужен механизм Segregated Witness ......................................................384 Как работает механизм Segregated Witness ......................................................385 Неустойчивое разветвление (обратная совместимость) .................................386 Примеры использования выходных данных Segregated Witness в транзакциях .....................................................................................................386 Обновление ПО для использования Segregated Witness..............................390 Новый алгоритм подписи в механизме Segregated Witness........................394 Экономические стимулы для использования механизма Segregated Witness ..........................................................................................394 12  Содержание Приложение Д. Bitcore...................................................................................398 Список функциональных возможностей Bitcore..............................................398 Примеры использования библиотеки Bitcore ..................................................398 Предварительные сведения...........................................................................398 Примеры кошелька, использующего bitcore-lib...........................................399 Приожение Е. Библиотека pycoin, утилиты ku и tx ................................401 Утилита для работы с ключами ku (Key Utility) ................................................401 Утилита для работы с транзакциями (tx)......................................................407 Приложение Ж. Команды проводника биткойна bx..............................410 Примеры практического использования команд проводника bx...................412 Предметный указатель..................................................................................415 Об авторе ..........................................................................................................427 Посвящается моей маме Терезе (1946–2017). Она научила меня любить книги и не принимать на веру мнение авторитетов. Спасибо, мама! Предисловие Как я писал книгу о биткойне Про биткойн я впервые услышал в середине 2011 года. Первое впечатление было приблизительно таким: «Пфф! Деньги для умников-ботаников», – и я за- был об этом на следующие шесть месяцев, не оценив важности этого явления. Впоследствии подобную реакцию я часто видел у многих умнейших людей, знакомых мне, и это немного утешает. Когда я встретился с биткойном во вто- рой раз при обсуждении в списке рассылки, я решил прочитать документ с тех- ническим описанием, написанный Сатоши Накамото (Satoshi Nakamoto), что- бы изучить авторитетный источник и понять, о чем вообще идет речь. До сих пор помню тот момент, когда я прочитал эти девять страниц, когда осознал, наконец, что биткойн – это не просто цифровые деньги, а сеть доверия, кото- рая могла бы также стать основой для гораздо большего. Осознание того, что «биткойн – это не деньги, а децентрализованная сеть доверия», стало исход- ным пунктом для четырехмесячного исследования, во время которого я жадно поглощал каждый фрагмент информации о биткойне, который мне попадался. Эта тема овладела моим умом, я полностью увлекся ею, не отходя от компью- тера по 12 и более часов в сутки, читал, писал, программировал, изучал все, что мог. Из этого состояния отрешенности от действительности я вышел, похудев на 20 фунтов (около 9 кг) из-за недостаточно полноценного питания, твердо решив вплотную заняться работой с биткойном. Два года спустя, после создания нескольких небольших стартапов, использу- ющих разнообразные сервисы и продукты, связанные с технологией биткойна, я решил, что пришло время для того, чтобы написать свою первую книгу. Бит- койн как неисчерпаемый источник вдохновения занимал все мои мысли, эта технология стала самой значимой со времени появления Интернета. Настало время поделиться моей увлеченностью, моими знаниями об этой великолеп- ной технологии с более широкой аудиторией. Для кого предназначена эта книга Эта книга предназначена в основном для программистов-кодеров. Если вы мо- жете писать программы на каком-либо языке программирования, то из этой книги вы узнаете, как работают криптографические валюты, как их использо- вать и как разрабатывать программное обеспечение (ПО) для работы с ними. Кроме того, несколько первых глав можно рассматривать как подробное вве- дение в технологию биткойна для тех, кто не занимается программированием, но пытается понять внутреннее устройство и функционирование биткойна и криптографических валют. Условные обозначения и соглашения, принятые в книге  15 Почему на обложке изображены насекомые? Муравей-листорез относится к биологическим видам, демонстрирующим чрезвычайно сложное поведение в колонии социальных насекомых (суперор- ганизме), но каждый отдельный муравей действует в соответствии с набором простых правил, соответствующих принципам социального взаимодействия и основанных на обмене химическими ароматическими веществами (феромо- нами). Цитата из Википедии: «Муравьи-листорезы образуют самые крупные и самые сложные сообщества живых организмов на Земле, если не считать лю- дей». В действительности муравьи-листорезы не едят листья, но используют их для разведения особого вида грибов, являющегося основным источником пи- тания для колонии. Вы понимаете? Муравьи занимаются сельскохозяйствен- ным производством! Несмотря на то что муравьи образуют кастовое сообщество и у них имеет- ся матка-королева для производства потомства, все же у них нет централи- зованного органа управления или лидера всей муравьиной колонии. Высокий интеллект и разумное поведение, демонстрируемое многомиллионной коло- нией, является так называемым эмерджентным свойством (emergent property), системным эффектом, возникающим или проявляющимся как следствие взаи- модействия отдельных членов социальной сети. Природа наглядно показывает, что децентрализованные системы могут быть весьма гибкими и проявлять эмерджентную (приобретенную, а не врож- денную) сложность и невероятную изощренность поведения без обязательно- го наличия в них центрального органа управления, иерархии или сложных со- ставных частей. Биткойн – это чрезвычайно разумная и изощренная децентрализованная сеть доверия, которая может поддерживать огромное количество финан- совых процессов. При этом каждый узел сети биткойн следует нескольким простым математическим правилам. Такое взаимодействие множества уз- лов как раз и приводит к формированию разумного поведения при отсут- ствии, казалось бы, неизбежной сложности или доверия к отдельно взятому узлу. Подобно муравьиной колонии, сеть биткойн является гибкой сетью простых узлов, соблюдающих простые правила, и эти узлы, объединенные в сеть, могут делать удивительные вещи без какой-либо централизованной координации. Условные обозначения и соглашения, принятые в книге В книге используются следующие типографские соглашения: Курсив Используется для смыслового выделения важных положений, новых терми- нов, имен команд и утилит, а также имен и расширений файлов и каталогов. 16  Предисловие Моноширинный шрифт Используется для листингов программ, а также в обычном тексте для обо- значения имен переменных, функций, типов, объектов, баз данных, пере- менных среды, операторов, ключевых слов и других программных кон- струкций и элементов исходного кода. Моноширинный полужирный шрифт Используется для обозначения команд или фрагментов текста, которые пользователь должен ввести дословно без изменений. Моноширинный курсив Используется для обозначения в исходном коде или в командах шаблонных меток-заполнителей, которые должны быть заменены соответствующими контексту реальными значениями. Такая пиктограмма обозначает совет или рекомендацию. Такая пиктограмма обозначает указание или примечание общего характера. Эта пиктограмма обозначает предупреждение или особое внимание к потенциально опасным объектам. Отзывы и пожелания Мы всегда рады отзывам наших читателей. Расскажите нам, что вы думаете об этой книге – что понравилось или, может быть, не понравилось. Отзывы важны для нас, чтобы выпускать книги, которые будут для вас максимально полезны. Вы можете написать отзыв прямо на нашем сайте www.dmkpress.com, зайдя на страницу книги, и оставить комментарий в разделе «Отзывы и рецензии». Также можно послать письмо главному редактору по адресу [email protected], при этом напишите название книги в теме письма. Если есть тема, в которой вы квалифицированы, и вы заинтересованы в написа- нии новой книги, заполните форму на нашем сайте по адресу http://dmkpress.com/ authors/publish_book/ или напишите в издательство по адресу [email protected]. Скачивание исходного кода примеров Скачать файлы с дополнительной информацией для книг издательства «ДМК Пресс» можно на сайте www.dmkpress.com или www.дмк.рф на странице с опи- санием соответствующей книги. Список опечаток Хотя мы приняли все возможные меры для того, чтобы удостовериться в ка- честве наших текстов, ошибки все равно случаются. Если вы найдете ошибку Как связаться с автором  17 в одной из наших книг — возможно, ошибку в тексте или в коде, — мы будем очень благодарны, если вы сообщите нам о ней. Сделав это, вы избавите других читателей от расстройств и поможете нам улучшить последующие версии этой книги. Если вы найдете какие-либо ошибки в коде, пожалуйста, сообщите о них главному редактору по адресу [email protected], и мы исправим это в сле- дующих тиражах. Нарушение авторских прав Пиратство в Интернете по-прежнему остается насущной проблемой. Изда- тельства «ДМК Пресс» и Packt очень серьезно относятся к вопросам защиты авторских прав и лицензирования. Если вы столкнетесь в Интернете с неза- конно выполненной копией любой нашей книги, пожалуйста, сообщите нам адрес копии или веб-сайта, чтобы мы могли применить санкции. Пожалуйста, свяжитесь с нами по адресу электронной почты [email protected] gmail.com со ссылкой на подозрительные материалы. Мы высоко ценим любую помощь по защите наших авторов, помогающую нам предоставлять вам качественные материалы. Адреса биткойн-систем и транзакций в книге Почти все адреса биткойн-систем, транзакций, ключей, QR-кодов и данных блокчейна, используемых в этой книге, являются реальными. Это означает, что вы можете просматривать структуры данных блокчейна, изучать транзакции, предлагаемые как примеры, использовать их в собственных скриптах и про- граммах и т. д. Но следует отметить, что секретные ключи, использованные для формиро- вания адресов, либо опубликованы в этой книге, либо уже «засвечены» (таким образом, секретными уже не являются). И если вы отправите деньги на любой из этих адресов, то деньги будут безвозвратно потеряны или в некоторых слу- чаях кто-то, прочитавший данную книгу, сможет присвоить их, воспользовав- шись опубликованными здесь секретными ключами. Не посылайте деньги по какому-либо адресу, приведенному в этой книге. Деньги будут присвоены другим читателем или исчезнут безвозвратно. Как связаться с автором С автором книги Андреасом М. Антонопулосом можно связаться через его лич- ный сайт: https://antonopoulos.com/. Информация о книге «Mastering Bitcoin», а также о платформе Open Edition и переводах книги на другие языки доступна на сайте: https://bitcoinbook.info/. Автор в соцсети Facebook: https://facebook.com/AndreasMAntonopoulos. 18  Предисловие Автор в Twitter: https://twitter.com/aantonop. Автор в Linkedin: https://linkedin.com/company/aantonop. Автор благодарит всех, кто поддерживает его работу ежемесячными безвоз- мездными взносами. Страница автора на сайте Patreon: https://patreon.com/aantonop. Благодарности Эта книга представляет собой результат труда многих людей, внесших свой вклад. Я благодарен за всю помощь, которую я получил от друзей, коллег и даже совершенно незнакомых людей, подключившихся к моей работе над полноценной технической книгой о криптографических валютах и биткойне. Невозможно отделить технологию биткойна от биткойн-сообщества, по- этому книга о технологии биткойна появилась во многом благодаря биткойнсообществу, которое вдохновляло, поддерживало и поощряло мою работу от начала до конца. Эта книга, как ничто другое, позволила мне стать частью за- мечательного сообщества на два года, за что я безмерно ему благодарен. Очень трудно назвать по именам всех людей, с которыми я беседовал на конференци- ях, мероприятиях, семинарах, неформальных встречах, вечеринках и неболь- ших частных собраниях, а также всех, кто общался со мной через Twitter, Reddit, на форуме bitcointalk.org и на GitHub, в общем, всех, кто так или иначе оказал влияние на эту книгу. Все идеи, аналогии, вопросы, ответы и объяснения, кото- рые вы найдете в этой книге, были в той или иной степени предложены, про- верены или улучшены с помощью сообщества. Спасибо всем за поддержку, без вас эта книга не появилась бы на свет. Я бесконечно благодарен вам. Разумеется, путь к написанию книг начался гораздо раньше. Моим первым языком (в школе) был греческий, поэтому пришлось пройти коррективный курс английского письменного на первом курсе университета. Я выражаю бла- годарность Диане Кордас (Diana Kordas), моему преподавателю английского письменного, которая помогла мне обрести уверенность и прочные навыки в течение того года. Позже, уже как профессионал, я развил свои навыки техни- ческого писателя, публикуя статьи о центрах данных в журнале Network World. Благодарю Джона Дикса (John Dix) и Джона Галланта (Jon Gallant), предоста- вивших мне первую рабочую должность обозревателя-колумниста в Network World, редактора Майкла Куни (Michael Cooney) и коллегу Джона Тилл Джон- сон (Johna Till Johnson), которые редактировали мои обзоры и готовили их к публикации. 500 слов в неделю в течение четырех лет дали мне достаточный опыт, и я окончательно решил заняться написанием книг. Спасибо также тем, кто поддержал меня, когда я предложил свою книгу изда- тельству O’Reilly. Отдельная благодарность Джону Галланту (John Gallant), Гре- гори Нессу (Gregory Ness), Ричарду Стиннену (Richard Stiennon), Джоелю Снай- деру (Joel Snyder), Эдаму Б. Ливайну (Adam B. Levine), Сандре Гиттлин (Sandra Gittlen), Джону Диксу (John Dix), Джоне Тилл Джонсон (Johna Till Johnson), Роджеру Веру (Roger Ver) и Йону Матонису (Jon Matonis). Особая благодарность Ричарду Кэгэну (Richard Kagan) и Таймону Маттошко (Tymon Mattoszko) за об- зоры и рецензии ранних версий книги и Мэтью Тэйлору (Matthew Taylor) за редактуру и корректуру. 20  Благодарности Спасибо Крикет Лью (Cricket Liu), автору книги DNS и BIND, который пред- ставил меня издательству O’Reilly. Также благодарю Майкла Лукидеса (Michael Loukides) и Элисон Макдоналд (Allyson MacDonald) из O’Reilly, которые в те- чение нескольких месяцев помогали моей книге появиться на свет. Элисон проявила особое терпение и такт, когда сроки выпуска книги оказывались под угрозой и повседневная жизнь с ее проблемами вмешивалась в издатель- ские планы. За работу над вторым изданием благодарю Тимоти МакГоверна (Timothy McGovern) за общее руководство процессом, Ким Кофер (Kim Cofer) за внимательное и тщательное редактирование, а также Ребекку Панцер (Rebecca Panzer) за создание иллюстраций для множества новых схем. Черновые наброски нескольких первых глав были самыми трудными, пото- му что биткойн – трудная тема сама по себе. Когда я начинал описывать один аспект технологии биткойна, неизбежно приходилось распутывать целый клу- бок взаимосвязанных аспектов. Приходилось многократно останавливать ра- боту в слегка подавленном настроении, когда я безуспешно пытался упростить для понимания и доступно изложить такую обширную техническую тему. В конце концов, я решил рассказать историю биткойна с помощью рассказов людей, использующих технологию биткойна, и работать над книгой стало за- метно легче. Я благодарю своего друга и наставника Ричарда Кэгэна (Richard Kagan), который помог распутать этот клубок проблем и преодолеть сложные моменты застоя. Спасибо Памеле Морган (Pamela Morgan), которая проверяла первые черновики каждой главы как в первом, так и во втором издании и зада- вала сложные вопросы, чтобы книга стала лучше. Также благодарю разработчи- ков из группы San Francisco Bitcoin Developers Meetup, Таарика Льюиса (Taariq Lewis) и Дениз Терри (Denise Terry) за помощь в проверке первого чернового материала. Спасибо Эндрю Ноглеру (Andrew Naugler) за дизайн инфографики. Во время написания книги я открыл доступ к первым черновикам на серви- се GitHub и предложил всем желающим их прокомментировать. В ответ было получено более ста замечаний, предложений, исправлений и дополнений. Бла- годарю всех откликнувшихся на мое предложение, а их полный список можно посмотреть ниже, в разделе «Первый черновик (вклад сообщества на GitHub)». Особая благодарность – добровольным редакторам на GitHub Мин Т. Нгуену (Minh T. Nguyen) (1-е издание) и Уиллу Биннсу (Will Binns) (2-е издание), ко- торые без устали регулировали, управляли и обрабатывали предложения, со- общения об ошибках и неточностях, а также исправляли ошибки непосред- ственно на GitHub. После создания чернового варианта книги она прошла через несколько эта- пов технического редактирования и рецензирования. Спасибо Крикет Лью (Cricket Liu) и Лорне Ланц (Lorne Lantz) за тщательное рецензирование, ком- ментарии и поддержку. Несколько разработчиков, использующих технологию биткойна, прислало примеры кода, отзывы, комментарии и всячески поддерживало мою работу. Спасибо Амиру Тааки (Amir Taaki) и Эрику Воскуилу (Eric Voskuil) за предо- Первый черновик (вклад сообщества на GitHub)  21 ставленные фрагменты кода для примеров и множество полезных замечаний, Крису Клеешульте (Chris Kleeschulte) за материал, включенный в приложение по Bitcore, Виталику Бутерину (Vitalik Buterin) и Ричарду Киссу (Richard Kiss) за помощь с математикой эллиптических кривых и предоставление фрагментов кода, Гэвину Андресену (Gavin Andresen) за исправления, комментарии и под- держку, Михалису Каргакису (Michalis Kargakis) за комментарии, предложения и описание btcd, Робину Инге (Robin Inge) за поиск опечаток и ошибок, что несомненно улучшило печатное издание. При работе над вторым изданием я снова получил огромную помощь от многих разработчиков Bitcoin Core, в том числе от Эрика Ломброзо (Eric Lombrozo), открывшего тайны Segregated Witness, от Люка-младшего (Luke-Jr), который помог улучшить главу о транз акциях, от Джонсона Лау (Johnson Lau), рецензировавшего Segregated Witness и другие главы, и от многих других. Благодарю Джозефа Пуна (Joseph Poon), Тадже Драйа (Tadge Dryja) и Олаолува Осантокана (Olaoluwa Osuntokun), кото- рые предоставили описание сети Lightning Network, рецензировали мои мате- риалы, отвечали на вопросы, которые вызывали у меня затруднения. Своей любовью к печатному слову и к книгам я обязан моей матери Терезе, вырастившей меня в доме, в котором книжные полки и шкафы стояли букваль- но у каждой стены. Моя мама купила мне самый первый компьютер в 1982 году, хотя сама считала себя технофобом. Мой отец, Менелаос, инженер-строитель, который недавно опубликовал свою первую книгу в возрасте 80 лет, научил меня логическому и аналитическому мышлению и любви к науке и технике. Спасибо всем за поддержку на протяжении всего этого пути. Первый черновик (вклад сообщества на GitHub) Многие люди внесли свой вклад, предлагая комментарии, исправления и до- полнения в самую первую черновую версию книги на GitHub. Благодарю всех за участие в создании этой книги. Ниже приведен список самых активных участников процесса подготовки первой версии книги на GitHub с указанием в скобках идентификаторов их учетных записей:  Алекс Уотерс (Alex Waters, alexwaters);  Эндрю Доналд Кеннеди (Andrew Donald Kennedy, grkvlt);  bitcoinctf;  Брайан Гмырек (Bryan Gmyrek, physicsdude);  Кейси Флинн (Casey Flynn, cflynn07);  Чэпмэн Шуп (Chapman Shoop, belovachap);  Кристи Д'Анна (Christie D'Anna, avocadobreath);  Коди Скотт (Cody Scott, Siecje);  coinradar;  Крэджин Годли (Cragin Godley, cgodley);  dallyshalla; 22  Благодарности  Диего Виола (Diego Viola, diegoviola);  Дирк Якель (Dirk Jäckel, biafra23);  Димитрис Цапакидис (Dimitris Tsapakidis, dimitris-t);  Дмитрий Маракасов (Dmitry Marakasov, AMDmi3);  drstrangeM;  Эд Айкхолт (Ed Eykholt, edeykholt);  Эд Лиф (Ed Leafe, EdLeafe);  Эдвард Поснак (Edward Posnak, edposnak);  Элиас Родригес (Elias Rodrigues, elias19r);  Эрик Воскуил (Eric Voskuil, evoskuil);  Эрик Уинчелл (Eric Winchell, winchell);  Эрик Вальстрём (Erik Wahlström, erikwam);  effectsToCause (vericoin);  Эстебан Ордано (Esteban Ordano, eordano);  ethers;  fabienhinault;  Франк Хёгер (Frank Höger, francyi);  Гаурав Рана (Gaurav Rana, bitcoinsSG);  genjix;  halseth;  Хольгер Шинцель (Holger Schinzel, schinzelh);  Иоаннис Керувим (Ioannis Cherouvim, cherouvim);  Айш От, младший (Ish Ot Jr., ishotjr);  Джеймс Эддисон (James Addison, jayaddison);  Джеймсон Лопп (Jameson Lopp, jlopp);  Джейсон Бистерфельдт (Jason Bisterfeldt, jbisterfeldt);  Хавьер Рохас (Javier Rojas, fjrojasgarcia);  Джереми Бокобца (Jeremy Bokobza, bokobza);  JerJohn15;  Джо Бауэрс (Joe Bauers, joebauers);  joflynn;  Джонсон Лау (Johnson Lau, jl2012);  Джонатан Кросс (Jonathan Cross, jonathancross);  Jorgeminator;  Кай Баккер (Kai Bakker, kaibakker);  Май-Суан Чиа (Mai-Hsuan Chia, mhchia);  Marzig (marzig76);  Максимилиан Райхель (Maximilian Reichel, phramz);  Михалис Каргакис (Michalis Kargakis, kargakis);  Микаэль С. Ипполито (Michael C. Ippolito, michaelcippolito);  Михаил Руссу (Mihail Russu, MihailRussu);  Мин Т. Нгуен (Minh T. Nguyen, enderminh);  Нагарай Хубли (Nagaraj Hubli, nagarajhubli); Первый черновик (вклад сообщества на GitHub)  23  Nekomata (nekomata-3);  Роберт Ферс (Robert Furse, Rfurse);  Ричард Кисс (Richard Kiss, richardkiss);  Рубен Александер (Ruben Alexander, hizzvizz);  Сэм Ричи (Sam Ritchie, sritchie);  Сергей Котляр (Sergej Kotliar, ziggamon);  Сейичи Учида (Seiichi Uchida, topecongiro);  Симон де ла Рувьер (Simon de la Rouviere, simondlr);  Стефан Усте (Stephan Oeste, Emzy);  takaya-imai;  Тьяго Арраис (Thiago Arrais, thiagoarrais);  venzen;  Уилл Биннс (Will Binns, wbnns);  wintercooled;  wjx;  Войцех Лангиевич (Wojciech Langiewicz, wlk);  yurigeorgiev4. Глава 1 Введение Что такое биткойн Биткойн (bitcoin) – это набор концепций и технологий, которые формируют основу цифровой денежной экосистемы. Денежные единицы, называемые биткойнами, используются для хранения и передачи ценности в денежном вы- ражении между членами биткойн-сети. Пользователи биткойн-системы обме- ниваются информацией друг с другом, используя для этого протокол биткой- на, работающий в основном через Интернет, хотя могут применяться и любые другие транспортные сетевые протоколы. Стек протоколов биткойна, доступ- ный в виде ПО с открытыми исходными кодами, может быть реализован на многочисленных типах устройств, в том числе на ноутбуках и смартфонах, что существенно увеличивает массовую доступность этой технологии. Пользователи могут передавать биткойны по сети, чтобы выполнять с ними практически те же операции, что с традиционными денежными средствами, в том числе покупать и продавать товары, пересылать деньги людям и орга- низациям или предоставлять кредит. Биткойны можно покупать, продавать и обменивать на другие валюты на специализированных валютных биржах. В некотором смысле биткойн является идеальной формой денег для Интерне- та благодаря скорости операций с ним, защищенности и безграничности об- ласти его применения. В отличие от обычных денежных единиц, биткойн абсолютно виртуален. Не существует ни физических денежных знаков, ни даже цифровых денежных знаков для биткойна. Воображаемые денежные единицы участвуют в транзак- циях, которые передают какие-либо ценности (в стоимостном выражении) от отправителя к получателю. Пользователи биткойна владеют ключами, кото- рые позволяют им подтверждать обладание биткойнами в биткойн-сети. С по мощью этих ключей пользователи могут подписывать (заверять) транзакции для получения доступа к своей валюте и ее расходования посредством переда- чи новому владельцу. Ключи часто хранятся в цифровом кошельке на компью- тере или смартфоне каждого пользователя. Обладание ключом, с помощью которого можно заверить транзакцию, является единственным предваритель- Что такое биткойн  25 ным условием для операций с биткойнами, при этом управление полностью передается каждому пользователю. Биткойн представляет собой распределенную пиринговую (peer-to-peer) (или одноранговую) систему. Это означает, что в ней нет «центрального» сервера или какого-либо пункта управления. Биткойны создаются с помощью процесса, называемого майнингом (mining), который подразумевает конкуренцию в по- иске решений для математической задачи при обработке транзакций биткой- нов. Любой член биткойн-сети (то есть любой, использующий устройство, на котором работает полный стек протоколов биткойна) может выступить в роли майнера (miner), используя вычислительные мощности своего компьютера для проверки и фиксации транзакций. В среднем через каждые 10 минут кто-то побеждает в состязании за право подтверждения корректности транзакций, выполненных за эти прошедшие 10 минут, и вознаграждается за это новым биткойном. По существу, майнинг биткойнов способствует децентрализации функций клиринга и выпуска денежных знаков центральным банком и факти- чески исключает необходимость в каком-либо центральном банке. Протокол биткойна включает встроенные алгоритмы, которые управляют функцией майнинга в сетевой среде. Сложность вычислительной задачи, ко- торую обязательно должны выполнить майнеры, регулируется динамически, поэтому в среднем через каждые 10 минут кто-то достигает успеха вне за- висимости от количества майнеров (и от количества обрабатываемых задач), конкурирующих в текущий момент. Кроме того, протокол предусматривает уменьшение наполовину скорости создания новых биткойнов через каждые 4 года и ограничивает общее количество созданных биткойнов фиксирован- ной величиной, которая не должна превышать сумму в 21 миллион единиц. Таким образом, количество биткойнов, находящихся в обращении, весьма точ- но описывается легко прогнозируемой кривой, которая достигнет значения 21 миллион к 2140 году. Благодаря такому уменьшению скорости «эмиссии» в течение длительного интервала времени биткойн представляет собой деф- ляционную валюту. Более того, биткойн не подвержен инфляции в форме «пе- чатания» новых денежных купюр сверх предполагаемой эмиссионной нормы. Если заглянуть поглубже, то биткойн также можно определить как название протокола, пиринговой сети и новой технологии распределенной обработки данных. Биткойн как денежная единица действительно представляет собой самое первое практическое приложение этой новой технологии. Биткойн яв- ляется суммарным результатом многолетних исследований в области крипто- графии и распределенных систем и включает четыре главные инновации, объ- единенные в единственную в своем роде мощную комбинацию. Основными компонентами технологии биткойна являются:  децентрализованная пиринговая сеть (протокол биткойна);  общедоступный реестр транзакций (блокчейн (blockchain));  набор правил для независимой проверки (валидации) транзакций и эмиссии (выпуска) денежных единиц (правила консенсуса); 26  Введение  механизм для достижения глобального децентрализованного (распреде- ленного) консенсуса при проверке корректности (валидации) блокчейна (алгоритм доказательства выполнения работы, Proof-of-Work algorithm). Как разработчик я считаю биткойн системой, очень похожей на «Интернет денег» (Internet of money), то есть на сеть для распространения ценностей и для защиты права владения цифровыми активами, функционирующую на основе распределенных вычислений. При этом роль биткойна гораздо более значи- мая, чем кажется на первый взгляд. В этой главе мы начнем изучение некоторых основных концепций и опреде- лений, познакомимся с необходимым программным обеспечением (ПО) и по- пробуем использовать биткойн для простых транзакций. В следующих главах будут рассматриваться более глубокие уровни технологии, которая сделала возможным появление биткойна, а также внутренние функциональные воз- можности и особенности сети и протокола биткойна. Цифровые деньги до биткойна Появление жизнеспособных цифровых денег тесно связано с разработками в об- ласти криптографии. Поэтому вполне естественно считать основополагающей главной задачей использование битов для представления стоимостной ценности, которую можно обменивать на товары и услуги. Все желающие пользоваться циф- ровыми деньгами должны ответить на три ключевых вопроса: 1. Могу ли я быть уверенным в том, что цифровые деньги достоверны (и закон- ны) и не являются поддельными (фальшивыми)? 2. Могу ли я быть уверенным в том, что цифровые деньги можно потратить толь- ко один раз (эта проблема известна под названием «двойное расходование» (double spending))? 3. Могу ли я быть уверенным в том, что никто другой не сможет заявить, что эти деньги принадлежат ему, а не мне? Организации, ведающие выпуском бумажных денег, ведут непрерывную борьбу с проблемой подделки купюр, используя для этого всё более сложные степени за- щиты бумаги и технологии печати. Бумажные деньги решают проблему двойного расходования очень просто, потому что один и тот же лист бумаги не может на- ходиться в двух местах одновременно. Разумеется, и привычные всем нам деньги часто можно хранить и передавать в цифровой форме. В этих случаях проблемы подделки и двойного расходования устраняются с помощью процедуры клирин- га (безналичных взаимных расчетов) всех электронных транзакций в централи- зованной системе компетентных органов, осуществляющих общий мониторинг всех денежных средств, находящихся в обращении. Для цифровых денег, которые не могут воспользоваться преимуществами невидимой типографской краски или голографических полосок, криптография предлагает основное средство для соз- дания уверенности в законности объявляемой пользователем ценности. Точнее говоря, криптографические цифровые подписи позволяют пользователю заверить (собственной подписью) цифровые активы или транзакцию, подтверждающую История создания биткойна  27 право владения этим активом. При использовании соответствующей архитектуры цифровые подписи также могут применяться для устранения проблемы двойного расходования. С началом более широкой доступности и более глубокого понимания методов криптографии в конце 1980-х гг. многие исследователи попытались использовать криптографию для создания цифровых валют. Самые первые проекты в этой об- ласти генерировали цифровые деньги, обычно обеспечиваемые национальной валютой или драгоценными металлами, например золотом. Несмотря на то что эти первые цифровые деньги действительно функциониро- вали, они оставались в рамках централизованных систем, поэтому представля- ли собой легкую мишень для нападений государственных органов и хакеров. Первые цифровые деньги использовали централизованную расчетную палату для регулирования выполнения всех транзакций с регулярными интервалами точно так же, как в обычной банковской системе. К сожалению, в большинстве случаев эти находящиеся в ранней стадии становления цифровые деньги при- влекали особое внимание встревоженных правительственных органов и в ко- нечном итоге уничтожались в судебном порядке. Иногда крах цифровых валют становился заметным явлением, когда поддерживающие их компании внезапно ликвидировались. Чтобы стать устойчивыми к воздействиям противников, будь то официальные правительственные органы или криминальные элементы, де- централизованные цифровые деньги должны были непременно избавиться от единственной уязвимой для атак точки. Биткойн является именно такой системой, децентрализованной по своей сущности изначально и свободной от каких-либо центральных органов авторизации или пунктов управления, которые можно ата- ковать и вывести из строя. История создания биткойна Биткойн был создан в 2008 году, о чем сообщала статья «Bitcoin: A Peer-to-Peer Electronic Cash System»1 , опубликованная под псевдонимом Сатоши Накамото (Satoshi Nakamoto) (см. приложение А). Накамото объединил несколько более ранних инноваций, таких как b-money и HashCash, для создания полностью децентрализованной электронной системы денежных расчётов, в основе ко- торой не имелось какого бы то ни было центрального органа авторизации для эмиссии денежных единиц или для регулирования и проверки корректности транзакций. Главным нововведением стало использование распределенной системы вычислений (названной алгоритмом доказательства выполнения ра- боты, Proof-of-Work algorithm) для проведения всеобщих «выборов» через каж- дые 10 минут, что позволяло в децентрализованной сети достигать консенсуса (consensus) по текущему состоянию транзакций. Такой подход изящно решил 1 «Bitcoin: A Peer-to-Peer Electronic Cash System», Satoshi Nakamoto (https://bitcoin.org/ bitcoin.pdf). 28  Введение проблему двойного расходования, при возникновении которой одна денежная единица может быть потрачена дважды. До этого проблема двойного расходо- вания была явным недостатком цифровых денег и решалась операциями кли- ринга всех транзакций через центральную расчётную палату. Биткойн-сеть начала свою работу в 2009 году на основе реализации, описан- ной в статье Накамото и с тех пор многократно улучшенной многими другими программистами. Реализация алгоритма доказательства выполнения работы (майнинга), обеспечивающего защиту и жизнеспособность биткойна, посто- янно наращивала свою мощь и в настоящее время превосходит суммарную вычислительную мощность самых лучших суперкомпьютеров мира. Общая рыночная стоимость биткойна временами превышает сумму в 20 миллиардов долларов США в зависимости от текущего курса обмена биткойна на доллар. До сего момента самой крупной транзакцией, проведенной в биткойн-сети, была сумма в 150 миллионов долларов США, переведенная мгновенно и обработан- ная без каких-либо отчислений. Сатоши Накамото отстранился от активной деятельности в апреле 2011 го да и передал ответственность за разработку программного кода и развитие сети преуспевающей группе добровольцев. Настоящее имя человека или груп- пы людей, придумавших биткойн, остается неизвестным. В любом случае, ни Сатоши Накамото, ни кто-либо другой не пытался лично управлять всей биткойн-системой в целом. Функциональность биткойн-системы основана на совершенно ясных математических принципах, на открытых исходных ко- дах и на консенсусе (согласовании) между членами системы. Само по себе это изобретение стало прорывом и уже породило новую область науки на стыке таких дисциплин, как распределенная обработка данных, экономика и эконо- метрика (математическая экономика). Решение проблемы распределенной обработки данных Изобретение Сатоши Накамото, кроме всего прочего, представляет собой практи- ческое и совершенно новое решение одной из задач распределенной обработ- ки данных, известной под названием «Задача византийских генералов». Краткое объяснение задачи: попытаться согласовать образ действий или состояние систе- мы посредством обмена информацией в ненадежной и потенциально опасной сетевой среде. Решение Сатоши Накамото, использующее концепцию доказатель- ства выполнения работы для достижения консенсуса без центрального органа управления, заслуживающего доверия, является настоящим прорывом в области распределенной обработки данных, а область применения этого решения не ограничивается финансовой сферой. Эту технологию можно применять для до- стижения консенсуса в децентрализованных сетях для доказательства честности и корректности процедур голосования при выборах, результатов тиражей лоте- рей, реестров имущества (активов, фондов и т. п.), цифровых нотариальных свиде- тельств и многого другого. Варианты использования биткойнов, пользователи и их истории  29 Варианты использования биткойнов, пользователи и их истории Биткойн – это инновация в древней технологии денежного оборота. По своей сути деньги просто обеспечивают обмен разнообразными ценностями между людьми. Поэтому, чтобы полностью понять биткойн и его практическое при- менение, мы начнем знакомство с этой технологией с точки зрения людей, использующих ее. Каждый из упомянутых ниже людей и соответствующих рассказов о них показывает один или несколько конкретных вариантов ис- пользования. Мы будем возвращаться к ним на протяжении всей книги: Розничная торговля дешевыми товарами в Северной Америке Алиса (Alice) живет в области залива в Северной Калифорнии. Она услышала о биткойне от своих друзей-технарей и хочет использовать его. Мы будем следить за тем, как Алиса изучает биткойн, зарабатывает несколько биткой- нов, затем тратит несколько биткойнов на чашку кофе в кафе Боба в Пало Алто. Эта история познакомит нас с программным обеспечением, с проце- дурами обмена и с основными простыми транзакциями с точки зрения по- требителя розничных товаров. Розничная торговля дорогостоящими товарами в Северной Америке Кэрол (Carol) – владелица художественной галереи в Сан-Франциско. Она продает дорогостоящие картины за биткойны. В этой истории будет описана опасность атак типа 51 процент при достижении консенсуса для розничных продавцов дорогостоящих товаров. Услуги по офшорному контракту Боб (Bob), владелец кафе в Пало Алто, создает новый веб-сайт. Он заключил контракт с веб-разработчиком Гопешем (Gopesh), который живет в Банга- лоре (Индия). Гопеш согласен получить оплату в биткойнах. Эта история демонстрирует возможности биткойна в области аутсорсинга, при получе- нии услуг по контракту и при выполнении международных денежных пере- водов. Веб-магазин Габриэль (Gabriel) – предприимчивый юноша из Рио-де-Жанейро, органи- зовал небольшой веб-магазин, в котором продаются футболки, кофейные кружки и наклейки с логотипом биткойна. Габриэль слишком молод, что- бы открыть личный счет в банке, но родители всячески поощряют его тягу к предпринимательству. Благотворительная деятельность, пожертвования Эухения (Eugenia) – директор детского благотворительного учреждения на Филиппинах. Недавно она узнала при биткойн и хочет воспользоваться им для охвата новой крупной группы зарубежных и местных жертвователей, 30  Введение чтобы организовать сбор средств для своей благотворительной деятельно- сти. Кроме того, она изучает способы применения биткойна для быстрой передачи денежных средств нуждающимся. Эта история продемонстриру- ет использование биткойна для организации сбора денежных средств без учета различий валют и государственных границ, а также использование общедоступного реестра для честного ведения дел в благотворительных ор- ганизациях. Импорт/экспорт Мохаммед (Mohammed) – импортер электроники в Дубаи. Он пытается ис- пользовать биткойн для покупки электроники в США и Китае для импор- та в ОАЭ, чтобы ускорить процедуру оплаты импортируемых товаров. Эта история покажет, как можно использовать биткойн для крупных междуна- родных бизнес-платежей, связанных с материальными товарами. Майнинг биткойнов Цзин (Jing) – студент, изучающий компьютерную инженерию в Шанхае. Он собрал стойку с блоками майнинга для зарабатывания биткойнов, используя свои инженерные навыки и знания для обеспечения прибыли. В этой исто- рии будет рассматриваться «промышленная» основа биткойна: специали- зированное оборудование, применяемое для защиты биткойн-сети и для генерации новых денежных единиц. В каждой из этих историй фигурируют реальные люди, предприятия и орга- низации, использующие в настоящее время биткойн для создания новых рын- ков, новых отраслей промышленности и современных эффективных решений проблем глобальной экономики. Начинаем обучение Биткойн (bitcoin) – это протокол, доступ к которому можно получить с по- мощью клиентского приложения, говорящего на языке этого протокола. Биткойн-кошелек (bitcoin wallet) представляет собой наиболее часто исполь- зуемый пользовательский интерфейс к биткойн-системе, точно так же, как веб-браузер является наиболее часто используемым пользовательским ин- терфейсом к протоколу HTTP. Существует множество реализаций и вариантов биткойн-кошельков, подобно множеству вариантов веб-браузеров (например, Chrome, Safari, Firefox, Internet Explorer, Яндекс-браузер). У каждого есть свой любимый браузер (я за Mozilla Firefox) и свой «отрицательный герой» (я против Internet Explorer), так и биткойн-кошельки различаются по качеству, произво- дительности, защищенности, уровню секретности (приватности) и надежно- сти. Существует также эталонная реализация протокола биткойна, известная как Satoshi Client или Bitcoin Core, производная от исходной реализации, на- писанной Сатоши Накамото. Начинаем обучение  31 Выбор биткойн-кошелька Биткойн-кошельки являются наиболее активно разрабатываемыми прило- жениями в экосистеме биткойна. Здесь существует жесткая конкуренция, и, несмотря на то что очередной новый кошелек, возможно, разрабатывается прямо сейчас, несколько кошельков, появившихся в прошлом году, уже не имеет активной поддержки. Многие кошельки предназначены для конкрет- ных платформ или для специальных вариантов использования, некоторые больше подходят для начинающих, тогда как другие предоставляют полный набор функциональных возможностей для более опытных пользователей. Вы- бор кошелька абсолютно индивидуален и зависит от способа использования и практического опыта пользователя. Таким образом, невозможно пореко- мендовать конкретное название или конкретный проект кошелька. Тем не менее можно провести классификацию биткойн-кошельков в соответствии с поддерживаемыми платформами и функциональными возможностями и внести определенную ясность в информацию о различных типах существу- ющих кошельков. Хорошо, что перемещение денег между кошельками произ- водится просто, дешево и быстро, поэтому лучше всего попробовать несколь- ко разных кошельков, чтобы выбрать тот, который больше всего соответствует вашим требованиям. По поддерживаемым платформам можно классифицировать биткойн-ко- шельки следующим образом:  кошелек для десктопа (desktop wallet) – первый тип биткойн-кошелька, созданный как эталонная реализация, и многие пользователи работа- ют с кошельками для десктопа (настольного компьютера), выбирая их за функциональные возможности, автономность и полноту управления, которые предлагает этот тип кошельков. Но работа под управлением операционных систем общего назначения, таких как Windows и MacOS, имеет свои недостатки, связанные с недостаточной защищенностью, так что десктоп-платформы зачастую не могут обеспечить надлежащий уро- вень защиты и соответствующую конфигурацию;  мобильный кошелек (mobile wallet) – наиболее часто используемый тип биткойн-кошелька. Работающие под управлением операционных си- стем для смартфонов, таких как Apple iOS и Android, эти кошельки чаще всего являются наилучшим выбором для новых пользователей. Многие из них спроектированы таким образом, чтобы обеспечить максималь- ную простоту использования, но есть и полнофункциональные мобиль- ные кошельки для опытных пользователей;  веб-кошелек (web wallet) – доступен через веб-браузер, а сам пользова- тельский кошелек хранится на сервере, принадлежащем третьей сто- роне. Это похоже на организацию веб-почты, полностью основанной на использовании стороннего сервера. Некоторые из этих сервисов ис- пользуют для работы код на стороне клиента, выполняемый в браузере пользователя, что позволяет сохранить управление ключами биткойна 32  Введение в руках пользователя. Но большинство сервисов предлагает компромисс, принимая на себя управление ключами биткойна в обмен на простоту использования. И всё же я не рекомендую хранить большой объем бит- койнов на сторонних системах;  аппаратный кошелек (hardware wallet) – устройство, обеспечивающее за- щиту биткойн-кошелька, хранящегося на специализированных аппа- ратных средствах. Такое устройство может работать вместе с десктоп- ным веб-браузером, обмениваясь данными через порт USB или через ближнюю бесконтактную связь (near-field-communication (NFC)) на мо- бильном устройстве. Благодаря обработке всех операций с биткойнами на специализированной аппаратуре этот тип кошельков считается очень хорошо защищенным и вполне подходящим для хранения крупных сумм в биткойнах;  бумажный кошелек (paper wallet) – ключи, управляющие биткойном, также могут быть распечатаны для долговременного хранения. Это называют бумажным кошельком, несмотря на то что печать может производить- ся и на других материалах (дерево, металл и т. д.). Бумажные кошельки предлагают низкотехнологичные, но весьма защищенные средства хра- нения биткойнов в течение длительного времени. Офлайн-хранилище также часто называют «холодильным хранением» (cold storage). Другой способ классификации биткойн-кошельков – по степени их неза- висимости (возможности автономного функционирования) и по способу их взаимодействия с биткойн-сетью:  полноценный клиент (full client), или «полноценный узел» (full node), – это клиент, который хранит полную хронологию транзакций биткойнов (каждую транзакцию, когда-либо выполненную любым пользовате- лем), управляет кошельками пользователей и может непосредственно начать выполнение транзакций в биткойн-сети. Полноценный клиент имеет дело со всеми аспектами протокола и способен независимо про- верять корректность всей структуры блокчейна и любой транзакции. Полноценный клиент потребляет довольно-таки существенные ресурсы компьютера (например, более 125 Гб дисковой памяти, 2 Гб оперативной памяти), но при этом обеспечивает полную автономию и независимую верификацию транзакций;  упрощенный клиент (lightweight client) – также известен под названием «клиент с упрощенной проверкой платежей» (simple-payment-verification (SPV) client), соединяется с полноценным узлом биткойн-сети (описан- ным выше) для доступа к информации о транзакциях биткойнов, но хра- нит пользовательский кошелек локально и независимо создает, прове- ряет и пересылает транзакции. Упрощенные клиенты взаимодействуют с биткойн-сетью напрямую, без каких-либо посредников; Начинаем обучение  33  клиент с прикладным программным интерфейсом (API) стороннего произ- водителя (third-party API client) – взаимодействует с биткойн-сетью через систему прикладных программных интерфейсов (API) стороннего про- изводителя (третьей стороны) вместо прямого соединения с биткойнсетью. Кошелек может храниться у самого пользователя или на сторон- них серверах, но все транзакции выполняются через посредника (третью сторону). Многие биткойн-кошельки попадают сразу в несколько групп классифика- ции, поскольку в них объединены различные классификационные характерис тики, но наиболее часто встречаются три комбинации: настольный (десктоп) полноценный клиент, мобильный упрощенный кошелек и веб-кошелек с при- кладным программным интерфейсом от стороннего производителя. Чаще всего границы между описанными выше категориями слабо различимы, так как многие кошельки работают на нескольких платформах и могут взаимодей- ствовать с сетью разнообразными способами. В этой книге мы рассмотрим использование разнообразных загружаемых биткойн-клиентов, от эталонной реализации (Bitcoin Core) до мобильных и веб-кошельков. В некоторых примерах потребуется применение эталонной реализации Bitcoin Core, которая, будучи полноценным клиентом, кроме того, предоставляет прикладные программные интерфейсы (API) к кошельку, сети и сервисам выполнения транзакций. Если вы намерены глубже исследовать программные интерфейсы в биткойн-системе, то вам необходима работаю- щая эталонная реализация Bitcoin Core или один из альтернативных клиентов (см. раздел «Альтернативные клиенты, библиотеки и инструментальные паке- ты разработчика» в главе 3). Сразу переходим к делу Алиса, с которой мы познакомились немного раньше, в разделе «Варианты ис- пользования биткойнов, пользователи и их истории», – пользователь с мини- мумом технических знаний. Она совсем недавно узнала о биткойне от своего друга Джо (Joe). Как-то на вечеринке Джо в очередной раз с энтузиазмом рас- сказывал о биткойне всем присутствующим и даже предлагал продемонстри- ровать работу с ним. Заинтригованная его рассказом, Алиса спросила, с чего начать использование биткойна. Джо ответил, что для новичков лучшим выбо- ром будет мобильный кошелек, и порекомендовал несколько предпочтитель- ных, с его точки зрения, вариантов. Алиса загрузила программу Mycelium для платформы Android и установила ее на своем мобильнике. Когда Алиса впервые запускает Mycelium, то, как и большинство биткойнкошельков, это приложение автоматически создает новый кошелек для нового пользователя. Алиса видит на экране этот кошелек, выглядящий так, как пока- зано на рис. 1.1 (примечание: не посылайте биткойны на адрес из этого при- мера, вы потеряете их навсегда). 34  Введение Рис. 1.1  Мобильный кошелек Mycelium Самая важная часть изображения на показанном экране – биткойн-адрес (bitcoin address) Алисы, который выглядит как длинная строка букв и цифр: 1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK. Справа от биткойн-адреса кошелька распо- ложен QR-код, особая форма штрихового кода, содержащая ту же информа- цию в формате, который может быть отсканирован видеокамерой смартфо- на. QR-код представляет собой квадрат с рисунком, составленным из черных и белых точек. Алиса может скопировать биткойн-адрес или QR-код в буфер обмена простым касанием (tapping) изображения QR-кода или кнопки Receive (Принять). В большинстве кошельков касание QR-кода также увеличивает его изображение, чтобы упростить его сканирование камерой смартфона. Биткойн-адреса начинаются с цифр 1 или 3. Как и адреса электронной почты, биткойн- адреса можно сообщать другим пользователям биткойн-системы, которые воспользу- ются ими для пересылки биткойнов непосредственно в ваш кошелек. С точки зрения безопасности распространение своего биткойн-адреса не связано с каким-либо риском. Биткойн-адрес можно публиковать везде без угрозы для своей учетной записи. В отличие от адресов электронной почты, новые биткойн-адреса можно создавать без ограничений, и все они будут направлять денежные средства в ваш кошелек. В действи- тельности многие новейшие версии кошельков автоматически создают новый адрес для каждой очередной транзакции в целях обеспечения максимальной секретности. Коше- лек – это просто набор адресов и ключей, открывающих доступ к хранящимся в нем денежным средствам. Начинаем обучение  35 Теперь Алиса готова к получению цифровых денег. Прикладная програм- ма кошелька случайным образом сгенерировала секретный ключ (private key) (более подробно секретный ключ будет описан в разделе «Секретные ключи» главы 4) вместе с соответствующим ему биткойн-адресом. В этот момент ее биткойн-адрес неизвестен в биткойн-сети и не «зарегистрирован» в какойлибо части биткойн-системы. Этот биткойн-адрес – пока просто число, соот- ветствующее ключу, который Алиса может использовать для управления до- ступом к своим денежным средствам. Биткойн-адрес сгенерирован кошельком автономно без обращения или регистрации на каком-либо сервисе. В действи- тельности большинство кошельков не устанавливает никакой связи между биткойн-адресом и какой-либо внешней идентифицируемой информацией, включая данные, подтверждающие личность пользователя. До того момента, когда этот адрес определяется как получатель денежных единиц в результате транзакций, зафиксированных в реестре биткойна, он является просто частью огромного набора возможных адресов, допустимых в биткойн-системе. Только после связывания такого адреса с некоторой транзакцией он становится ча- стью списка известных адресов в биткойн-сети. Итак, Алиса готова начать практическое использование своего нового бит- койн-кошелька. Получаем свой первый биткойн Первой и зачастую самой сложной задачей для новых пользователей является получение хотя бы нескольких биткойнов. В отличие от иностранных валют, невозможно купить биткойны в банке или в пункте обмена валют. Биткойн-транзакции необратимы. Трансферы в большинстве электрон- ных платежных сетевых систем, таких как кредитные карты, дебетовые кар- ты, PayPal и банковские счета, являются обратимыми. Для любого продавца биткойнов это различие создает вполне реальную опасность, состоящую в том, что покупатель может отозвать свой электронный платеж после того, как по- лучит биткойны, то есть, в сущности, обманет продавца. Чтобы как-то умень- шить риск, компании, принимающие обычные электронные платежи в обмен на биткойны, обычно требуют от покупателей пройти процедуры проверки подлинности личности и подтверждения платежеспособности, которые могут продолжаться от нескольких дней до нескольких недель. Это означает, что как новый пользователь вы не имеете возможности мгновенно купить биткойны с помощью кредитной карты. Но немного терпения и творческого мышления – и такой способ вам не понадобится. Ниже описаны некоторые методы получения биткойнов новыми пользова- телями:  найдите друга (знакомого), у которого есть биткойны, и купите у него несколько единиц. Многие пользователи биткойн-систем начинали именно таким способом, потому что он наименее сложный. Найти лю- 36  Введение дей с биткойнами можно на неформальной встрече местной группы бит- койн-пользователей, о которых сообщается на сайте Meetup.com;  воспользуйтесь надежным сервисом, например localbitcoins.com, что- бы найти продавца в вашем регионе и купить биткойны за наличные с оплатой при личной встрече;  заработайте биткойны, продавая продукцию или услуги. Если вы про- граммист, продавайте свои навыки и умения. Если вы парикмахер, стри- гите людей за биткойны;  воспользуйтесь биткойн-банкоматом в вашем городе. Биткойн-банко- мат – это устройство, которое принимает наличные деньги и пересыла- ет биткойны в ваш биткойн-кошелек на смартфоне. Найти ближайший биткойн-банкомат можно с помощью онлайновой карты на сайте Coin ATM Radar (http://coinatmradar.com);  воспользуйтесь обменным пунктом биткойнов, связанным с вашим бан- ковским счетом. Сейчас во многих странах существуют обменные пун- кты, поддерживающие рынок покупателей и продавцов, обменивающих биткойны на местную валюту. В списках обменных курсов, например BitcoinAverage (https://bitcoinaverage.com), часто указываются обменные пункты, обменивающие биткойны на конкретную валюту. Одним из преимуществ биткойна перед другими платежными системами, если использо- вать его правильно, является то, что биткойн обеспечивает гораздо бóльшую секретность для пользователей. Приобретение, хранение и расходование биткойнов не требуют раз- глашения личной информации и своих идентификационных данных или передачи таких данных кому бы то ни было. Но там, где биткойн имеет дело с обычными системами, например с валютными биржами или обменными пунктами, часто применяются государ- ственные или международные законодательные нормы. Для обмена биткойнов на де- нежные единицы вашей страны от вас наверняка потребуют подтвердить свою личность и доказать подлинность банковской информации. Пользователи должны знать о том, что после одной операции с биткойнами, при которой была идентифицирована их личность, все последующие транзакции биткойнов будут так же легко идентифицироваться и про- слеживаться. Это одна из причин, по которой многие пользователи предпочитают иметь учетные записи, предназначенные специально для обменных операций и не связанные напрямую с их кошельками. Алисе рассказал о биткойнах ее друг, поэтому у нее есть возможность без за- труднений приобрести свой первый биткойн. Далее мы увидим, как она поку- пает биткойн у своего друга Джо и как Джо пересылает этот биткойн в кошелек Алисы. Поиск информации о текущей стоимости биткойна Прежде чем Алиса сможет купить биткойн у Джо, они должны договориться об обменном курсе (exchange rate) между биткойном и долларами США. При этом у всех новичков возникает вполне естественный вопрос: «Кто устанавливает цену биткойна?» Короткий ответ: цена устанавливается рынком. Начинаем обучение  37 Биткойн, как и большинство других валют, имеет плавающий обменный курс (floating exchange rate). Это означает, что цена биткойна по отношению к любой другой валюте постоянно изменяется в зависимости от спроса и пред- ложения на различных рынках, где имеет хождение биткойн. Например, «цена» биткойна в долларах США вычисляется отдельно на каждом рынке на основе самых последних операций по обмену биткойнов на доллары США. Таким об- разом, цена может изменяться несколько раз в секунду, и эти изменения сле- дуют непрерывно. Информационные валютные сервисы объединяют данные о ценах с нескольких рынков и вычисляют средневзвешенное (с учетом объ- емов операций) значение, представляющее общерыночный обменный курс для конкретной пары валют (например, BTC/USD). Существуют сотни приложений и веб-сайтов, на которых можно узнать те- кущий рыночный обменный курс. Ниже перечислены наиболее известные и посещаемые веб-сайты:  Bitcoin Average (http://bitcoinaverage.com) – сайт предлагает легкочитае- мый простой обзор средневзвешенных обменных курсов для каждой ва- люты;  CoinCap (http://coincap.io) – сервис предоставляет списки рыночных оце- нок (капитализации) и обменные курсы для сотен криптовалют, включая и биткойн;  Chicago Mercantile Exchange Bitcoin Reference Rate (http://www.cmegroup. com/trading/cf-bitcoin-reference-rate.html) – ставка-ориентир (reference rate), которая может использоваться для институциональной и договор- ной ставки, являющейся частью данных об инвестиционных выплатах CME. Помимо разнообразных сайтов и приложений, большинство биткойн-ко- шельков автоматически вычисляет соотношение между биткойном и другими валютами. Джо воспользуется своим кошельком для автоматического преоб- разования цены перед отправкой биткойна Алисе. Отправка и получение биткойна Алиса решила поменять 10 долларов США на биткойн, чтобы не слишком рис ковать своими деньгами при использовании этой новой для нее технологии. Она отдала Джо 10 долларов наличными, открыла свой кошелек (приложение Mycelium) и нажала кнопку Receive (Принять). После этого появился QR-код, представляющий первый биткойн-адрес Алисы. Далее Джо нажал кнопку Send (Отправить) в своем кошельке на смартфоне, после чего появился экран с двумя полями ввода:  биткойн-адрес получателя;  отправляемая сумма в биткойнах (BTC) или в местной валюте (USD). В поле ввода для биткойн-адреса есть маленькая пиктограмма, выглядящая как QR-код. Это позволяет Джо сканировать штриховой код с помощью видео камеры смартфона, чтобы не вводить вручную достаточно длинный и слож- 38  Введение ный биткойн-адрес Алисы. Касанием значка QR-кода Джо активизирует каме- ру смартфона и сканирует QR-код с экрана смартфона Алисы. Теперь у Джо есть биткойн-адрес Алисы, определенный как получатель. Джо вводит сумму 10 долларов США, и кошелек выполняет автоматическое преобра- зование с учетом самого свежего обменного курса, полученного с онлайн-серви- са. На тот момент обменный курс составляет 100 долларов США за биткойн, так что 10 долларов равны 0.10 биткойна (BTC), или 100 миллибиткойнам (mBTC), как показано на снимке с экрана мобильного кошелька Джо (см. рис. 1.2). Рис. 1.2  Экран отправки денег мобильного биткойн-кошелька Airbitz Затем Джо внимательно проверяет, правильно ли он ввел передаваемую сум- му, поскольку после передачи денег ошибку исправить будет уже невозможно. После тщательнейшей проверки адреса и суммы Джо нажимает кнопку Send (Отправить), чтобы начать транзакцию. Мобильный биткойн-кошелек Джо создает транзакцию, которая передает 0.10 BTC на адрес, указанный Алисой, изымая денежные средства из кошелька Джо и подписывая текущую транз акцию с помощью секретных ключей Джо. Биткойн-сеть оповещается о том, что Джо выполнил авторизацию процедуры передачи определенной денежной суммы на новый адрес Алисы. Так как транзакция передается по пиринговому (peer-to-peer) протоколу, она быстро распространяется по биткойн-сети. Ме- нее чем за секунду большинство надежно связанных между собой узлов этой сети принимает информацию о совершаемой транзакции и впервые видит адрес Алисы. Тем временем кошелек Алисы постоянно «прослушивает» все транзакции, объявляемые в биткойн-сети, в поисках транзакции, целевой адрес которой совпадает с адресами кошельков Алисы. Через несколько секунд кошелек Джо завершает проведение транзакции, а в кошельке Алисы появляется оповеще- ние о получении 0.10 биткойна (BTC). Начинаем обучение  39 Подтверждения Сначала адрес Алисы обозначается в транзакции, выполняемой Джо, как «Unconfirmed» (Неподтвержденный). Это означает, что транзакция уже распростра- нена по сети, но пока еще не записана в реестр транзакций биткойна, известного как блокчейн (blockchain). Для подтверждения транзакция обязательно должна быть включена в блок и добавлена в структуру данных блокчейна, а эта операция выполняется в среднем каждые 10 минут. В более привычных финансовых терми- нах такая операция называется клирингом (clearing). Более подробно операции распространения, проверки (валидации) и клиринга (подтверждения) будут рас- сматриваться в главе 10. Теперь Алиса стала законной владелицей 0.10 биткойна, которые она может расходовать. В следующей главе мы рассмотрим ее первую покупку на биткой- ны и более подробно разберемся в технологиях, являющихся основой меха- низмов транзакций и распространения информации по сети.
    Автор: Антонопулос А.
    Дата выхода: апрель 2018 года
    Формат: 165 * 235 мм
    Бумага: офсетная
    Обложка: Твердый переплет
    Объем, стр.: 428
    ISBN: 978-5-94074-965-3
    Вес, гр.: 800
    Скан - PDF
    Продающий сайт:
    http://dmkpress.com/catalog/computer/blokchejn-i-kriptovalyuty/978-5-94074-965-3/

    Цена автора на его сайте: 999 руб.
    Наша цена в розницу: $5

    Автор:
    Антонопулос А.
    Год выпуска курса: 2018

    Сколько весит курс: 84,4 Мб

    Скачать книгу Осваиваем биткойн
    Все более чем 1.500 курсов сайта можно купить оптом за $299.95. Вечный доступ в клуб + все последующие обновления навсегда бесплатно.
    Также этот курс можно купить и в розницу по цене 15% от цены на продающем сайте (но не дешевле чем $5).
    Также можно поменяться курс на курс.
    Стоимость любой розничной покупки можно впоследствии вычесть из стоимости вечного доступа.
    FAQ по всему что касается этого сайта (читаем все очень внимательно, чтобы не задавать потом глупых вопросов в саппорт).
    Пишите на мыло [email protected] Курсы других тематик тут www.glavsliv.com
     
    Последнее редактирование: 28 май 2018

Поделиться этой страницей