Понимая Биткоин
Перевод подготовлен биткоинером Tony ₿
Предисловие
Около года назад вышла книга “Понимая Биткоин” (Grokking Bitcoin) моего друга Калле Розенбаума. Я сразу же связался с ним с предложением перевести ее на русский. К сожалению права на книгу принадлежат не автору, а издателю Manning Publications, которые с молниеносной скоростью успели продать права на перевод неизвестному заинтересованному лицу. В общем, ждем выхода русской версии.
Но есть еще хорошие новости: Калле оставил за собой право выложить бесплатную версию книги для свободного доступа (https://rosenbaum.se/book/grokking-bitcoin.html), а раз перевод книги затянулся, я решил поделиться с вами переводом краткого содержания книги.
Встречайте: “Понимая Биткоин. Основные тезисы”
Глава 1: Введение в Биткоин
> Биткоин — это глобальные деньги, не подверженные влиянию государственных границ, которые может использовать любой, у кого есть подключение к интернету.
> Многие различные субъекты используют Биткоин, включая скопидомов, мерчантов и разнообразных торговцев с различными целями, такими как платежи, денежные переводы и сбережения.
> Сеть компьютеров (сеть Биткоин) проверяет и ведет учет всех платежей.
> Транзакция проходит следующие этапы: отправка транзакции, проверка транзакции, добавление транзакции в блок и уведомление кошельков получателя и отправителя.
> Биткоин решает проблемы, вызванные инфляцией, наличием границ, разделением и повышает уровень приватности его участников, путем обеспечения ограниченного предложения, децентрализации и отсутствия границ.
> Помимо Биткоина существует несколько альтернативных криптовалют, таких как Ethereum, Zcash и Namecoin.
> Полезность (крипто) валюты растет по мере того, как ей начинает пользоваться все большее количество юзеров. Это называется сетевым эффектом.
Глава 2: Криптографические хеш-функции и цифровые подписи
> Биткоины создаются в качестве вознаграждения нодам, обеспечивающим безопасность блокчейна.
> Вознаграждение уменьшается вдвое каждые 210,000 блоков (примерно четыре года), с целью ограничения эмиссии.
> Вы можете использовать криптографические хеш-функции для обнаружения изменений в файле или в сообщении.
> Вы не можете вычислить входные данные (pre-image) криптографического хеша. Pre-image - это вход, который имеет определенный известный выход.
> Цифровые подписи полезны для подтверждения подлинности платежа. Только законный владелец биткоинов может потратить монеты.
> Проверяющий цифровую подпись не обязан знать, кто сделал эту подпись. Необходимо знать лишь то, что подпись была сделана с помощью приватного ключа, на который она ссылается.
> Чтобы получить биткоины или любые другие токены, нужен публичный ключ. Сначала вы создаете приватный ключ для собственного использования. Затем из этого приватного ключа вы генерируете публичный ключ.
> Для хранения приватных ключей доступно несколько стратегий, от незашифрованного хранения на мобильном телефоне до способов, включающих разделение и шифрование на нескольких оффлайн устройствах.
> Как правило, чем лучше приватный ключ защищен от кражи, тем легче его случайно потерять, и наоборот.
Глава 3: Адрес
> Приватность важна для каждого, а не только для преступников.
> Использование хеша публичного ключа (PKH) вместо личных имен в качестве идентификаторов получателей платежей важно для обеспечения приватности и повышения уровня безопасности.
> Кодирование PKH в качестве Биткоин-адреса снижает риск отправки денег в никуда, благодаря контрольной сумме в адресе.
> Биткоин-адреса важны лишь пользователям сети. Сеть Биткоин имеет дело с обычными PKH.
> Вы можете обладать столькими Биткоин-адресами, сколькими захотите. Использование нескольких адресов (желательно нового на каждую полученную оплату) улучшает вашу приватность.
Глава 4: Кошельки
> Для отправки и получения биткоинов обычно используется мобильное приложение, называемое кошельком.
> Кошелек генерирует и хранит ключи, сканирует или показывает платежные реквизиты, отправляет платежи, показывает ваш баланс и делает резервные копии ключей. Пользователю не нужно делать ничего из этого вручную.
> Осуществить резервное копирование правильно — нелегкая задача. Резервные копии, защищенные паролем, страдают от проблем, связанных с забытыми паролями, улучшениями технологии, а также от того, что люди — попросту никудышные генераторы случайных чисел.
> С помощью HD-кошельков вы можете создавать резервные копии и хранить их в безопасном месте. Сделайте это всего один раз (и забудьте об этой проблеме).
> Сид-фраза может быть зашифрована с помощью мнемонической фразы, что облегчает ее хранение.
> HD-кошельки генерируют несколько приватных ключей из сид-фразы и организовывают их в древовидную структуру с целью улучшения приватности.
> Дерево публичных ключей (или любая из его ветвей) может быть сгенерировано из xPub. Это полезно для небезопасных сред, таких как веб-серверы.
> Укрепленные производные приватных ключей хранят "учетные записи" в разрозненном виде. Это ограничивает злоумышленника в пределах одной учетной записи.
Глава 5: Транзакции
> Транзакции имеют входы и выходы, поэтому вы можете потратить несколько "монет" и заплатить нескольким получателям в рамках одной транзакции.
> Выходы операций являются "программируемыми". Кошелек отправителя решает, какие инструкции вставить в выходные данные. Это определяет действия, необходимые для траты средств.
> Любой может проверить весь реестр, потому что все подписи являются общедоступными. Это значительно снижает требуемое доверие к Лизе (персонаж, выступающий в качестве примера майнера).
> Скрипты могут быть использованы для активации возможностей мультисиг, например, 3-из-7. Это — отличное решение для компаний и благотворительных организаций.
> Новый тип адреса — p2sh адрес, начинающийся с “3”, используется для упрощения процесса оплаты для многих изысканных типов платежей, таких как мультисиг.
> Все транзакции происходят от одной или нескольких транзакций coinbase. Трансакции coinbase - это единственный способ создания новых биткоинов.
> Создание денег проверяется любым участником, чтобы убедиться, что Лиза создает ровно столько, сколько согласовано: 7,200 токенов в день и уменьшает это число вдвое каждые четыре года.
> Лиза может цензурировать и возвращать транзакции вспять. Пользователям все равно приходится доверять ей эту работу.
Глава 6: Блокчейн
> Транзакции помещаются в блоки, которые подписывает Лиза, чтобы оставить за ней ответственность, если она попытается удалить транзакции.
> Каждая подпись блока приводит к фиксации транзакций в этом блоке и всех предыдущих блоках, поэтому история не может быть изменена без повторной подписи подделываемого и всех последующих блоков.
> Транзакции в блоке коллективно хешируются в структуре дерева меркл для создания корня меркл, который заносится в заголовок блока. Это позволяет создавать облегченные (lightweight) кошельки.
> Облегченные кошельки повышают пропускную способность путем экономии места, но жертвуют при этом безопасностью.
> Облегченные кошельки снижают безопасность, потому что такие кошельки не могут полностью проверить транзакцию, а также потому, что полная нода может скрывать транзакции от таких кошельков.
> Единственный способ быть абсолютно уверенным в соблюдении правил блока - это запустить свою собственную полную ноду.
> Безопасность облегченного кошелька может быть улучшена путем подключения к нескольким полным нодам или доверенной ноде.
> Лиза все еще может цензурировать транзакции.
Глава 7: Доказательство проделанной работы (Proof of Work)
> Наличие большого количества майнеров препятствует центральному органу, способному в противном случае цензурировать транзакции.
> Доказательство проделанной работы (далее PoW) используется для определения участника, который получит возможность создать следующий блок.
> PoW позволяет любому заняться майнингом, не спрашивая ничьего разрешения.
> Целевое число автоматически калибруется каждые 2,016 блоков, чтобы поддерживать заданный темп эмиссии.
> Транзакционные комиссии выступают в роли стимула, чтобы майнеры включили транзакцию в свой блок.
> Чтобы снизить риск двойного расходования, получатель монет выбирает, сколько подтверждений необходимо, чтобы транзакция считалась принятой.
> Майнер, участвующий в пуле, получает такой объем вознаграждений за созданный блок, какой он заслуживает. Чем больше хешрейта он предоставляет системе, тем большую долю вознаграждения он получает.
> Чем крепче цепочка, тем большим объемом PoW она располагает и, соответственно, тем сложнее ее изменить.
Глава 8: Пиринговая (p2p) сеть
> Пиринговая сеть делает блоки устойчивыми к цензуре.
> Нода соединяется с несколькими пирами, чтобы понизить уровень уязвимости к сокрытию информации.
> Протокол сети Биткоин - это "язык", на котором ноды общаются между собой.
> Транзакции транслируются по одноранговой (p2p) сети Биткоин, чтобы как можно быстрее достичь как майнеров, так и получателей средств.
> Новые ноды синхронизируются с сетью Биткоин, чтобы быть в курсе работы других нод. Это может занять от нескольких часов до нескольких дней.
> Нодам не нужно быть онлайн 24/7. Они могут выпадать, возвращаться и вновь синхронизироваться, чтобы быть в курсе последних событий.
> Для старых блоков проверку подписи можно пропустить. Это ускорит первоначальную синхронизацию. Это полезно, если вы знаете, что конкретный блок валиден.
Глава 9: Транзакции — копаем глубже
> Транзакции могут быть залочены по времени или высоте блока в зависимости от ваших потребностей. Блокировки могут быть как абсолютными, так и относительными.
> Вывод транзакции может потребовать блокировки траты по времени. Это полезно во многих цифровых контрактах.
> Атомарные свопы — полезный способ обмена криптовалютами между двумя не доверяющими друг другу сторонами.
> Произвольные данные, например, токен собственности на автомобиль, могут храниться в выходных данных OP_RETURN, не обременяя тем самым набор UTXO.
> Транзакция может быть помечена как заменяемая. Это позволяет заменить транзакцию в случае, если она не подтвердится в течение ожидаемого времени.
> Подписи могут относиться к различным частям транзакции, используя шесть комбинаций типов SIGHASH. Это может быть полезно в некоторых цифровых контрактах
Глава 10: Segregated Witness (SegWit)
> SegWit перемещает данные скриптов подписей из транзакций для решения проблем, связанных с гибкостью транзакций.
> SegWit использует новый алгоритм хеширования подписей, который ускоряет проверку транзакций. Это помогает нодам оставаться в курсе событий, задействуя меньшее количестве ресурсов.
> Приватность облегченных кошельков растет, не жертвуя объемами трафика и не загружая свидетельские данные.
> p2wsh упрощает улучшение скриптового языка в случае апгрейда.
> Мы можем несколько увеличить максимальный размер блока, делая скидку на байты свидетеля (за счет их переноса из транзакций).
> Новый формат адресов помогает кошелькам отличать старые платежи от платежей SegWit.
> SegWit может быть "встроен" в адреса старого формата p2sh, чтобы старые кошельки могли отправлять деньги на SegWit-кошельки.
Глава 11: Биткоин-апгрейды
> Разделение цепочки крайне нежелательно в случае форка, так как это приведет к сбою в Биткоин-экономике.
> Хард форк — это изменение правил консенсуса, которые требуют обновления каждого майнера. В противном случае, блокчейн разделится.
> Софт форк — это изменение правил консенсуса, которые не требуют одновременного апгрейда всей сети.
> Во время разделения цепочки через хард форк, вам нужна защита от стирания, чтобы убедиться, что старые ноды не обновят новую ветку.
> При разделении блокчейна необходима защита от изменений, чтобы выбирать, к какой ветке будут применяться те или иные транзакции.
> Активированный майнерами софт форк, например, с использованием BIP9 для развертывания, позволяет майнерам развернуть софт форк без каких-либо разногласий.
> Активированный пользователями софт форк позволяет пользователям внедрять софт форк. Если за этой версией следуют майнеры, обладающие большинством хешрейта, софт форк успешно срабатывает без долговременного разделения цепочки.