Биткоин – подробный разбор
Биткоин (BTC) – это первая в истории децентрализованная цифровая валюта (криптовалюта) нового поколения с одноимённой платёжной единицей, построенная на базе технологии блокчейн и функционирующая в рамках peer-to-peer сети.
Чтобы ввести вас в курс дела разберём 3 приведённых в вышеописанном определении фундаментальных понятия: децентрализация, блокчейн, peer-to-peer сеть. Биткоин имеет ещё ряд важных особенностей, но мы их рассмотрим далее.
Децентрализация
Децентрализованный, значит, не имеющий какого-либо регулирующего центра. В биткоине никто не контролирует эмиссию и оборот средств. Вся регуляция происходит в рамках внутреннего алгоритма консенсуса Proof-of-Work (будет разобрано далее).
Система не подконтрольна ни государству, ни банкам, ни каким-либо административным органам. Установить какой-либо внешний контроль невозможно в силу технических особенностей устройства сети. Данная особенность кардинально отличает биткоин от традиционных фиатных валют и делает его полностью автономной системой.
Блокчейн
Блокчейн – это технология распределённого реестра. В её основе лежит принцип создания цепочек блоков. Блок – это виртуальная сущность (элемент программы или базы данных), в которую помещается определённая информация.
Информация в оцифрованном виде может помещаться любая, но в рамках биткоина это данные о транзакциях по обмену валютой между пользователями (от кого, кому, сколько, когда и ряд служебных данных).
Сам термин блокчейн появился ещё в далёком 1991 году. Технология предназначалась для разметки разного рода цифровых документов.
Основной принцип блокчейна в том, что однажды помещённую в него информацию невозможно удалить или подменить в силу того, что он хранится на каждом узле сети и они взаимосинхронизированы.
В блок биткоина запаковывается информация примерно о 1000-15000 транзакциях. Далее создаётся следующий блок. Помимо собственных данных, в него заносится хешированная (шифрованная по специальным сложным математическим алгоритмам, взлом которых не под силу ни одному даже самому современному компьютеру) информация из предыдущего блока. Малейшее изменение (хотя бы в одном символе) ведёт к кардинальному изменению всего хеша.
Разница значений хешей по алгоритму SHA-256, применяемому в биткоине, при изменении всего одного символа:
BTC — платёжная система будущего! — 95600f851609f413e4d0d7e0c37b01cf63d3ece8932f0415c36012f7a5207249
Таким образом, за хеш предыдущего блока цепляется каждый последующий блок по принципу последовательной цепочки. Копия каждого блока отправляется для проверки на все узлы сети. Согласование её корректности происходит коллективно в автоматическом режиме, опять же, с применением сложных математических алгоритмов. Благодаря этому взломать систему невозможно.
Обратите внимание, что за всё время существования биткоина с 2009 года его ни разу никто не взломал!
Все внесённые в блокчейн данные общедоступны. Любой желающий всегда может проверить их на корректность. Любая программа-клиент (приложение биткоин-кошелька) при установке первым делом скачивает весь блокчейн системы на устройство, проверяет его и синхронизирует ос всей сетью.
В биткоине всю историю транзакций можно просмотреть вплоть до самого начала – до самой первой из них.
Peer-to-peer
P2P (пиринговая, одноранговая) сеть – это сеть, база данных в которой хранятся не в едином центре (например, на серверах банка), а на всех узлах (компьютерных или мобильных устройствах) подключённых к сети. Каждая копия такой базы на каждом узле взаимно синхронизируется с остальными копиями, то есть вся хранимая информация имеет абсолютно одинаковый вид у всех участников сети.
Связь между узлами в такой сети осуществляется напрямую без посредников. В биткоине нет единого центра как, например, в Visa, когда все финансовые операции проходят через сервера платёжной системы, и история о них хранится там же.
Таким образом, если вы отправляете кому-то деньги, информация об этом фиксируется не в одном месте, а у каждого пользователя платёжной системы. Подменить данные об отправке средств не получится, так как благодаря ранее указанному алгоритму проверки, они будут отвергнуты остальными участниками сети.
Все узлы в рамках сети абсолютно равноправны.
Ещё особенности биткоина
Криптография
Каждый аспект работы системы биткоина защищается криптографическими функциями. Практически вся информация, так или иначе используемая в биткоине, пропускается через них. Отсюда и определение — криптовалюта. Современные компьютеры какой-бы то ни было мощности не в состоянии взломать эти функции, что обеспечивает системе практически 100%-ую защиту от любых хакерских атак.
В основе криптографии лежит такое понятие, как хеширование. Его суть состоит в пропуске какой-либо информации через специальные хеш-функции (в биткоине в разных аспектах используется 3: SHA-256, RIPEMD-160, ECDSA). Любое цифровое сообщение (текстово-графическая информация) пропущенная через какую-либо хеш-функцию преобразуется в хеш-сумму (или просто хеш) фиксированной длины. Не важно это сообщение представлено в виде одной буквы или целого видеофайла, они будут преобразованы в шифр строго определённой длины.
Например, результат SHA-256-функции равен 64 символам.
Особенность любого хеширования в том, что такие функции всегда односторонни. То есть из входных данных получить выходные можно, а вот из выходных, кроме как методом случайного перебора никак. Отдалённо это напоминает нечто подобное:
5+3+2 = 10
10 = ?
Адресная структура
В биктоине нет привязки к личности и всё строится на адресах. Этих адресов может быть огромное множество. Генерируются они программой клиентом. Обмен средств осуществляется через них, то есть отправкой с одного адреса на другой посредством транзакций. Узнать кому принадлежит адрес невозможно, до момента обналичивания криптовалюты, то есть контакта системы с внешним миром.
Необратимость платежей
К сожалению, в биткоине не предусмотрен механизм возврата платежа. Если он совершён, то это необратимо ни в случае попадания доступов к адресам в руки мошенников, ни в случае нелепой случайности. При этом реализована технология мультиподписи. Для проведения транзакции можно привлечь стороннего пользователя, который будут выступать в качестве арбитра. Он подтвердит или опровергнет правомочность сделки в зависимости от соблюдения или нарушения её правил одной из сторон.
Доступность
Купить биткоин может каждый. Для этих целей предусмотрены специальные биржи, онлайн-обменники, некоторые из распространённых платёжных систем, специализированные стационарные терминалы, прямые сделки между людьми «при личной встрече». Все способы покупки делятся на анонимные и не анонимные, но об этом мы поговорим позже.
Основные недостатки биткоина
- Низкая скорость. Скорость проведения транзакции в биткоине в среднем около 10 минут. Это обусловлено алгоритмом консенсуса Proof-of-Work, отвечающего за безопасность системы. Решить проблему призваны надстройки типа Lightning Network и SegWit, но они находятся в зачаточном состоянии;
- Низкая пропускная способность. Сеть биткоина способна проводить до 8 транзакций в секунду. Для сравнения Visa – 24 000. Это ограничение мешает массовому применению системы. Надежда на всё тот же Lightning Network;
- Высокие комиссии за переводыПроведение транзакции подразумевает её включение в один из добываемых блоков. Добывают блоки узлы со специальным ПО – майнеры. Какие транзакции включать в блок они решают по своему усмотрению. Как правило, основным критерием отбора является размер устанавливаемой отправителем комиссии за проведение платежа. В силу низкой пропускной способности сети и относительно большого количества проводимых транзакций, желающим отправить средства приходится устанавливать высокие комиссии за переводы;
- Большие объёмы данных. Блокчейн биткоина на начало 2021 г. весит около 320 Гб. В день его размер растёт примерно на 150 Мб. Хранить его на обычных устройствах (компьютерах и телефонах) становится неудобно. Есть лёгкие клиенты, хранящие только заголовки блоков, но массовое их применение это удар по безопасности.
В итоге мы имеем инструмент платежей, выпуском и финансовыми потоками которого никто конкретный не управляет. Ему присуща прозрачность, так как каждый участник имеет доступ к информации о проводимых финансовых операциях между адресами. Он абсолютно анонимен и не подвержен взломам.
Конечно, не всё так радужно. Все плюсы и минусы биткоина мы будем разбирать по ходу статьи, но пока мы обозначили основную задумку всей «кухни».
Почему биткоин чего-то стоит и чем он обеспечен?
Не обеспечен ничем и стоит только потому, что люди готовы за него платить! Человек видит в своём кошельке цифру и готов отдавать товар или предоставлять услугу только для того, что эта цифра стала ещё больше. В этом и есть вся идея, а чего-то материального за биткоином не стоит вообще.
Условную ценность биткоину придаёт блокчейн. Он обеспечивает системе независимость функционирования от банков, государства и прочих административных инстанций. Пользователи получают потенциальную независимость от контролирующих органов в области электронных взаиморасчётов, при которых не будет возникать сомнений в честности и добропорядочности её участников. Однако, пока технология находится на начальной стадии развития и на её полноценное массовое внедрение уйдут годы.
Почему в биткоин хлынули деньги?
За всё время своего существования график курса биткоина демонстрировал скачкообразную динамику с постоянной тенденцией к росту. Приток малых и крупных инвестиций в отрасль, как от частных лиц, так и от целых инвестиционных фондов обеспечила потенциальная возможность системы производить независимые, анонимные и сверхбыстрые денежные переводы.
Чем больше денег поступает в биткоин, тем выше растёт его курс. Если в отрасли складывается благоприятный новостной фон и люди начинают скупать криптовалюту, идёт приток инвестиций — цена биткоина резко растёт. При неблагоприятном новостном фоне люди начинают массовую продажу цифровых активов и курс падает. Так происходит циклами с тенденцией к постоянному росту.
Этот рост обеспечивается тем, что люди не избавляются полностью от криптовалюты, даже при падении цен в разы. Многие не делают так, потому что просто боятся потерять вложения. Например, человек купить 1 BTC за $10 000. Цена упала до $5000. Продав на этом этапе, он потеряет $10 000. Отложив в долгосрок в надежде на то, что курс вырастет до $20 000, инвестор может рассчитывать на прибыль в 100%. Именно эта вера и постоянное увеличение числа держателей биткоина не даёт его курсу упасть до нуля.
Не многие верили, что после декабря 2017 г., когда цена первой криптовалюты достигла своего исторического максимума, курс снова даже приблизится к прежнему рекорду в $20 000. Однако спустя 3 года этот рубеж был преодолён.
Учитывая тот факт, что так называемого «перенасыщения» рынка в биткоине произойти не может, так как его эмиссия ограничена 21 миллионом монет, очевидно, что рост его стоимости продолжится. Вопрос только – как быстро?
История создания биткоина
Идея разработки электронной наличности появилась ещё в 1982 г. Сеть всё чаще использовалась для обмена данными в сфере биржевого трейдинга, а её пользователи начинали испытывать потребность в неком средстве платежа, позволяющем проводить быстрые расчёты за приобретённые активы.
Впервые идея электронной наличности была предложена американскими учёными Дэвидом Чаумом и Стэфаном Брендсом. Они описали её в своей совместной научной работе – «Слепые подписи и не отслеживаемые платежи». Её идея состояла в создании анонимной валюты, в которой информация о платежах скрывалась бы от третьей стороны посредством специального криптографического метода.
В 1990 г. Дэвидом Чаумом и Стэфаном Брендсом в Амстердаме была основана их совместная компания DigiCash. Благодаря репутации Чаума как учёного в проект удалось привлечь инвесторов и высококвалифицированных специалистов. В итоге была разработана анонимная платёжная система eCash. Однако из-за своей централизованности она не получила широкого распространения, и компания в 1998 г. разорилась.
В 1997 г. криптографом Адамом Баком для противодействия DDoS-атакам была разработана технология HashCash, функционировавшая на базе технологии Proof-of-Work, которая в последствии легла в основу биткоина.
В 1998 г. независимо друг от друга были опубликованы идеи двух криптовалют: b-money и bit-gold.
B-money была написана криптографом Вэй Даем имела схожие с биткоином черты. Она имела схожую логику хранения данных, которая отправлялись на все узлы сети, а безопасность обеспечивал Proof-of-Work.
Bit-gold разработал криптограф Ник Сабо. Основная идея его криптовалюты состояла в отсутствии посредников при совершении платежей. Тут также применялся Proof-of-Work. Он использовался для передачи нескольких фрагментов цифровой подписи, последний из которых применялся для генерации подписи следующей транзакции. Разработка велась до 2005 г.
Обе идеи были призваны реализовать механизм децентрализованного рыночного регулирования инфляции. Они послужили прототипом для современных криптовалют, хотя так и не были реализованы до конца.
В 2004 г. программист Хел Финни (впоследствии второй участник сети биткоина) создал первую в истории цепочку хешированных блоков с применением технологии HashCash. Реализована она была на базе одного из шифровальных чипов IBM.
15.08.2008 г. Нилом Кингом, Владимиром Оксманом, Чарльзом Брайем в Патентное бюро США была подана заявка на регистрацию патента под названием «Обновление и распространение ключей шифрования». В том же месяце они регистрируют доменное имя bitcoin.org, используя специальный сервис для анонимной регистрации доменов. Описанный в патенте алгоритм криптографии был очень схож с тем, который применяется в биктоине. Позже они отрицали какую-либо связь с разработкой биткоина и именем Сатоши Накамото (основателем системы).
31.10.2008 г. на почтовые адреса подписчиков сайта metzdowd.com была произведена рассылка со статьёй «Биткоин: Пиринговая система электронной наличности» от отправителя под ником Сатоши Накамото. В ней описывалась новая платёжная система, защищённая от любых мошеннических посягательств, обеспечивающая полную анонимность платежей и независимость от внешних регуляторов. Данная информация также была размещена на сайте bitcoin.org (домен, зарегистрированный ранее в августе).
Кто такой Сатоши Накамото – один человек или группа лиц, доподлинно неизвестно и по сей день.
Со слов разработчика процесс разработки был запущен в 2007 г.
В 2009 г. протокол биткоина был полностью закончен.
03.01.2009 г. был сгенерирован первый, так называемый «Генезис-блок», за который была начислена первая в истории награда в размере 50 биткоинов.
09.01.2009 г. января клиентская программа была выложена в сеть.
12.01.2009 г. с кошелька Сатоши Накамото были отправлены 10 биткоинов на адрес Хела Финни, так была проведена первая в истории транзакция в сети.
В сентябре 2009 г. некто Марти Малми произвёл первый в истории обмен биткоина на фиантные деньги через платёжную систему New Liberty Stantard. Он обменял 5050 BTC на 5,02 $, которые были переведены на его счёт PayPal.
В октябре 2009 New Liberty Stantard установила первый в истории курс биткоина, который равнялся 1309,03 BTC к 1 USD. Также было предложено оценивать стоимость криптовалюты в долларовом эквиваленте затрачиваемой на её майнинг электроэнергии.
В мае 2010 было произведена первая покупка чего-то материального за биткоины. Программистом из Флорида Лазло Хенчем в обмен на 2 большие пиццы стоимостью в 25$ были отправлены 10 000 BTC одному из жителей Лондона.
В конце 2010 с выпуском очередной версии программы-клиента Сатоши Накамото покидает разработку проекта Биткоин о чём он официально заявил на форуме bitcointalk.org с пояснением: «Для занятий более важными делами». Все лавры и доменное имя bitcoin.org он передал одному из ведущих разработчиков Гэвину Андерсону.
В феврале 2010 была запущена первый обменник биткоин Bitcoin Market, а в июле первая торговая биржа Mt Gox, которая базировалась в Японии.
В 2011 после постепенного и продолжительного роста курс биткоина сравнялся с долларом США.
После многих взлётов и падений знаменательным для криптовалюты оказался 2017 год, когда цена достигла своего на данный момент исторического максимума примерно в 20 000 USD, это произошло 17 декабря.
Предпосылки для создания биткоина и задачи, которые он должен решать
Изначально, весь обмен деньгами в обществе происходил непосредственно от отправителя к получателю (от покупателя к продавцу). Это было неудобно при совершении платежей на дальних расстояниях, поэтому стали появляться посредники, обеспечивавшие этот процесс. Вместо того, чтобы транспортировать переводимые средства из одного места в другое, так как это очень медленно и трудозатратно, они просто стали создавать резервные центры в различных точках. То есть покупатель принёс 100 р. в одну точку, в другой получили извещение об этом и выдали продавцу из имеющегося на месте резерва эту же сумму в 100 р. Всё, что нужно было покупателю это иметь чек, гарантирующий качество товара, а продавцу гарантию подлинности денег. Это обеспечивало безопасность переводов.
По мере развития компьютерных технологий стала появляться потребность в электронном средстве платежей, которое позволяло бы осуществлять переводы непосредственно от одного компьютера к другому. Проблема была в том, что пересылаемую таким образом информацию можно было копировать бесконечное количество раз, а следовательно, одни и те же деньги могли тратиться многократно.
Позже, в качестве одного из решений, появились традиционные платёжные системы типа Visa и MasterCard. Это было достаточно удобно для государства. Теперь не нужно было контролировать каждого плательщика, достаточно было осуществлять контроль за несколькими платёжными системами, которые надзорные функции выполняли сами и сообщали о каждой подозрительной операции. При этом за свою работу они взимали комиссию, которая порой была довольно высока.
В результате появлялись 4 проблемы, требующих решения:
- обеспечение взаимного доверия между участниками сделки и их доверия к каналу передачи;
- отказ от посредников и снижение стоимости платежей вплоть до нуля;
- увеличение скорости платежей;
- обеспечение безопасности, анонимности и защиты от мошенничества.
База биткоина позволяет все эти проблемы решить. Пока не всё так однозначно и технология требует доработки, но она даёт неплохие перспективы. Тем более, что в процессе заняты лучшие разработчики со всего мира.
Примеры успехов и неудач с биткоином
Примеры успеха | Примеры неудач |
В 2009 г. во время написания дипломной работы по криптографии норвежец Кристофер Кох купил за 150 норвежских крон 5000 BTC и продал их в 2013 г., когда курс достиг $100. За вырученные деньги он купил квартиру в центре Осло. | В 2010 г. американский программсит Ласло Хенч купил 2 большие пиццы за 10 000 BTC. |
Норвежец Кристовер Хансен в 2017 г. продал все свои акции и купил криптовалюту по курсу $2800. В результате через полгода его активы выролси в 5 раз. | Один из киберпанков в 2011 г. приобрёл 70 BTC. Ноутбук, на котором хранились доступы к кошельку, пришёл в негодность и его пришлось выкинуть. |
Не безизвестные братья Винклвосы в 2013 г. инвестировали в биткоин $11 млн. В 2017 г. их состояние выросло до $2 млрд. | Джеймсу Хоуэллсу из Уельса в 2013 г. выбросил в мусорку ноутбук, на котором хранлились доступы к 7500 BTC. В том же году позже, осознав ошибку, он узнал на какую свалку был вывезен мусор и пытался провести раскопки, но безуспешно. Про него даже репртаж для ТВ сняли. |
Павел дуров в 2013 г. купил биткоина на $1,5 млн. В 2017 г. его криптовалютный актив вырос до $40 млн. | |
В 2015 г. венчурный фонд Питера Тиля (один из учредителей Facebook) вложил в биткоин $20 млн. На каком этапе и при каом курсе это произошло неизвестно, но актив вырос кратно. |
Общая информация и некоторые технические характеристики системы биткоин
Характеристика | Значение |
Язык программирования | C++ (один из наиболее распространённых и производительных языков, особенно актуален, учитывая, что ядро у биткоина достаточно объёмное) |
Совместимые платформы | Windows, Linux, Android, Mac OS |
Доступные языки | ENG, ARA, RUS, FRA, POR, DEU, SPA, ITA, NLD |
Официальный сайт | bitcoin.org |
Лицензия | MIT (Разработана на базе Массачусетского технологического института. Допускает использование готового кода в собственных авторских проектах, в том числе в коммерческих целях, но при условии указания текста полученной лицензии в своём программном продукте. Не требует, чтобы код ПО был открытым.) |
Эмиссия биткоина
Максимальный объём выпуска биткоина составляет 21 млн монет. Данная цифра установлена программным протоколом. Человеческий фактор во влиянии на неё полностью исключён.
Каждый биткоин делится на долевые единицы – сатоши (10-8 или 1 стомиллионная BTC).
Выпуск биткоинов производится через добычу блоков. Каждому майнеру, добывшему блок, начисляется награда. Каждые 4 года (или 210 000 блоков) происходит халвинг – деление объёма награды на 2 (50 – 25 – 12,5 – 6,25 — …). Изначально размер вознаграждения составлял 50 BTC. В мае 2020 г. произошло очередное деление, после чего награда составила 6,25 BTC. Ориентировочно последний биткоин будет добыт в 2140 г. Планируется, что к тому времени основным заработком майнеров в криптосреде станут комиссии за проведение транзакций. После 2033 размер награды упадёт ниже 1 BTC.
Обоснование максимального объёма эмиссии биткоина сточки зрения математики
Лимит объёма выпуска биткоина служит механизмом регулирования инфляции. Фиатные валюты практически всегда обесцениваются ввиду их неограниченной эмиссии.
Например, во врем кризиса объём выпускаемых товаров и услуг сокращается, а количество выпускаемой валюты либо увеличивается, либо остаётся тем же. Это приводит к удорожанию товаров и услуг, соответственно и к обесцениванию валюты, ведь люди, как правило, больше зарабатывать не начинают, а купить на получаемую зарплату могут меньше.
Первоначально в качестве математического обоснования выбору 21 млн монет служило приблизительное соответствие скорости добычи золота в некоторый противовес нужде населения в нём. Биткоин часто сравнивают с золотом, так как объёмы его максимальной добычи также ограничены.
График эмиссии биткоина до 2033 года
Таблица динамики добычи биткоина
Год | № блока | Биткоинов за блок | Общая эмиссия на конец года | Доля добавленных за год биткоинов относительно максимальной эмиссии |
2009 | 0 | 50 | 10500000 | — |
2013 | 210000 | 25 | 15750000 | 50% |
2016 | 420000 | 12.5 | 18375000 | 16.66666667% |
2020 | 630000 | 6.25 | 19687500 | 7.14285714% |
2024 | 840000 | 3.125 | 20343750 | 3.33333333% |
2028 | 1050000 | 1.5625 | 20671875 | 1.61290323% |
2032 | 1260000 | 0.78125 | 20835937.5 | 0.79365079% |
2036 | 1470000 | 0.390625 | 20917968.75 | 0.39370079% |
2040 | 1680000 | 0.1953125 | 20958984.375 | 0.19607843% |
2044 | 1890000 | 0.09765625 | 20979492.1875 | 0.09784736% |
2048 | 2100000 | 0.04882812 | 20989746.0927 | 0.04887585% |
2052 | 2310000 | 0.02441406 | 20994873.0453 | 0.02442599% |
2056 | 2520000 | 0.01220703 | 20997436.5216 | 0.01221001% |
2060 | 2730000 | 0.00610351 | 20998718.2587 | 0.00610426% |
2064 | 2940000 | 0.00305175 | 20999359.1262 | 0.00305194% |
2068 | 3150000 | 0.00152587 | 20999679.5589 | 0.00152592% |
2072 | 3360000 | 0.00076293 | 20999839.7742 | 0.00076294% |
2076 | 3570000 | 0.00038146 | 20999919.88080001 | 0.00038146% |
2080 | 3780000 | 0.00019073 | 20999959.93410001 | 0.00019073% |
2084 | 3990000 | 0.00009536 | 20999979.95970001 | 0.00009536% |
2088 | 4200000 | 0.00004768 | 20999989.97250001 | 0.00004768% |
2092 | 4410000 | 0.00002384 | 20999994.97890001 | 0.00002384% |
2096 | 4620000 | 0.00001192 | 20999997.48210001 | 0.00001192% |
2100 | 4830000 | 0.00000596 | 20999998.73370001 | 0.00000596% |
2104 | 5040000 | 0.00000298 | 20999999.35950001 | 0.00000298% |
2108 | 5250000 | 0.00000149 | 20999999.67240001 | 0.00000149% |
2112 | 5460000 | 0.00000074 | 20999999.82780001 | 0.00000074% |
2116 | 5670000 | 0.00000037 | 20999999.90550001 | 0.00000037% |
2120 | 5880000 | 0.00000018 | 20999999.94330001 | 0.00000018% |
2124 | 6090000 | 0.00000009 | 20999999.96220000 | 0.00000009% |
2128 | 6300000 | 0.00000004 | 20999999.97060001 | 0.00000004% |
2132 | 6510000 | 0.00000002 | 20999999.97480001 | 0.00000002% |
2136 | 6720000 | 0.00000001 | 20999999.9769 | 0.00000001% |
2140 | 6930000 | 0.00000000 | 20999999.9769 | 0.00000000% |
По данным таблицы мы видим, что майнинг биткоина работает в соответствии с законом убывающей геометрической прогрессии, в силу чего обще количество криптовалюты никогда не сможет превысить общее количество в 21 млн.
Обоснование максимального объёма эмиссии биткоина сточки зрения экономики
В 2008 г. на момент создания биткоина, объём общей мировой денежной массы составлял 50 трлн долларов. Поделив эту цифру на 21 млн получим 2 млн 381 тыс. Таким должен был бы быть курс биткоина при идеальном сценарии развития событий, то есть если бы криповалюта заняла место абсолютного мирового финансового резерва.
Целыми биткоинами денежные расчёты вести конечно же было бы неудобно, вот для этого и были придуманы сатоши. Если предполагаемый идеальный курс разделить на 100 млн, то получится 2,381 цента, что достаточно приемлемо для любых, в том числе повседневных финансовых операций.
Тем не менее, если рассматривать 2,381 цента, за них купить тоже ничего нельзя, но острой необходимости в этом и нет. Данная величина вполне удобна для денежных расчётов при текущей ценовой ситуации, а также с расчётом на перспективу в случае возможной дефляции биткоина.
Дефляция, простыми словами – это когда товаров и услуг становится больше, чем денежной массы, за которую эти блага можно приобрести (явление обратное инфляции).
Однажды биткоин станет дефляционным по той причине, что его эмиссия лимитирована, а люди постоянно теряют доступы к своим монетам и продолжат терять. Как это скажется на криптовалюте неизвестно. Разные экономические школы придерживаются различных мнений по этому поводу. Одни говорят, что дефляция подталкивает население больше к накопительству нежели к трате денег, что поспособствует сокращению объёмов производства материальных благ в виду снижения их цен и последующему оттоку инвестиций из всего экономического сектора. Другие, наоборот, утверждают, что снижение цен подтолкнёт инвесторов к новым денежным вливаниям, что будет стимулировать рост экономики. Кто прав — покажет время, подобных прецедентов в истории пока не случалось.
Алгоритм работы биткоина
По сути, биткоин это цифровой файл, хранящий в себе историю обо всех, когда-либо совершённых в рамках сети, транзакциях в виде реплицированной базы данных. Репликация подразумевает трансляцию поступающей в БД информации на все узлы сети с последующей её синхронизацией.
Репликация «на пальцах»:
В системе есть 5 участников: Вася, Петя, Миша, Федя и Гена. Вася отправил Пете биткоины. Информация об этом отправилась им самим, а также Мише, Феде и Гене. Таким образом, извещение о проведённой операции получили все узлы. Вот, что значит репликация БД.
Ключевыми понятиями в сети биктоина являются адреса, входы и выходы.
Адрес – это своего рода счёт, на котором хранятся средства. У пользователя их может быть огромное множество.
Вход – это транзакция в виде ссылки, по которой на адрес пересылаются средства с другого адреса.
Выход – это транзакция в виде ссылки, по которой на другой адрес пересылаются средства.
Таким образом, сеть биткоина можно представить в виде адресной структуры, связанной входами и выходами, информация о передаче средств в которой хранится в реплицированной базе данных в виде блокчейна.
Каждый вход может быть расходован лишь единожды, и тратятся обязательно все, имеющиеся на нём средства, а остаток возвращается либо на текущий адрес, либо на вновь созданный, либо указанный отправителем.
Происходит примерно следующее:
Вася отправляет Пете 5 из 7 биткоинов, имеющихся на условном Адресе1. Система проверяет неизрасходованные входы, по которым на этот адрес приходили средства. Например, Вход1 – 4 BTC и Вход2 – 3 BTC. 4 BTC со Вход1 и 1 BTC со Вход2 отправляются на Адрес2, принадлежащий Пете. Оставшиеся на Вход2 2 BTC отправляются посредством новой транзакции либо обратно на Адрес1 Васе, либо на новый Адрес3, а сама транзакция становится входом для этого адреса. Это особенность биткоина, связанная с безопасностью системы.
Таким образом, инициируя транзакцию, Вася рассылает всем узлам сети сообщение о том, на сколько должен уменьшиться его баланс в виде средств с ранее полученных входов, и на сколько должен увеличиться баланс Пети в виде вновь полученных им входов, которые для Васи уже являются выходами (то есть, расходами).
Так это работает в биткоине и, на данный момент, в большинстве других криптовалют.
Из вышеописанного следует, что счёт, который в панели кошелька видит пользователь, фактически таковым не является. Цифра, отображаемая на балансе, это сумма неизрасходованных входов на закреплённых за кошельком адресах.
Приватные и публичные ключи, цифровая подпись
Вместе с каждым адресом, создаваемым через любое из доступных приложений биткоин-кошельков (Bitcoin Core, Exodus, Jaxx и т. п.), генерируется соответствующая ему пара приватный-публичный ключ (так называемое ассиметричное шифрование).
Эти ключи нужны для доступа к средствам и подтверждения подлинности транзакций.
Каждая транзакция подтверждается цифровой подписью, генерируемой с помощью приватного ключа.
Приватный ключ подтверждает, что биткоины принадлежат владельцу адреса, с которого они отправляются. Через публичный ключ все остальные участники сети проверяют соответствует ли приватный ключ указанному адресу, при этом, не имея доступа к самому приватному ключу.
Механизм следующий:
- Инициируется транзакция. В ней указывается кому и сколько отправлять биткоинов. Эта информация вместе с рядом служебных данных составляет сообщение транзакции. Приватный ключ вместе с сообщением транзакции пропускаются через хеш-функцию ECDSA, в результате чего получается цифровая подпись;
- Транзакция отправляется в так называемый мем-пул (условный контейнер, в котором хранятся транзакции, ожидающие очереди на подтверждение);
- Используя публичный ключ отправителя, узлы с применением специальной математической функции через цифровую подпись проверяют принадлежит ли ему приватный ключ от адреса, с которого отправляются средства. То есть, по сути, проверяется принадлежность отсылаемых биткоинов и права ими распоряжаться отправителю.
Генерация ключей процесс автономный и может происходить без подключения к интернету. Для этого может использоваться приложение-кошелёк либо специальный программный скрипт-генератор (например, BIP-39).
Хранятся ключи в файле wallet.dat по адресу C/Users/Username/AppData/Roaming/Bitcoin/Wallets/wallet.dat.
Хранить этот файл на компьютере необязательно, тем более что именно он часто становится объектом хакерских атак. Следует регулярно делать резервные его копии. Может получиться так, что вы сгенерировали новый адрес и получили на него биткоины, а до этого делали бэкап кошелька и решили по каким-то причинам его восстановить. После этого вы потеряете доступ к новым адресам, так как они просто перетрутся старой версией, поэтому с эти нужно очень аккуратно.
Адреса в биткоине
Адреса в биткоине необходимы для приёма, хранения и отправки средств. По сути, адрес это преобразованный специальной хеш-функцией публичный ключ в кодировке Base58. Порядок генерации следующий:
- Приватный ключ: протокол биткоина имеет встроенный генератор случайных чисел, через который генерируется набор этих самых чисел, который пропускается через хеш-функцию SHA-256;
- Публичный ключ: сгенерированный приватный ключ пропускается через функцию ECDSA с параметром secp256k1(алгоритм цифровой подписи на элиптической кривой;
- Адрес: полученный публичный ключ пропускается сначала через хеш-функцию SHA-256, а затем RIPEMD-160 и так по 2 раза.
Все эти преобразования являются односторонними и необратимыми для современных компьютеров, даже для совокупной их мощности. Специально подобрать приватный ключ к какому-то адресу невозможно, только методом случайного перебора. Вероятность успеха такого подбора стремится к нулю, во всяком случае, на это понадобятся миллиарды лет. Настолько огромные числа задействованы в процессе.
Пример биткоин-адреса: 1BQ9qza7fn9snSCyJQB3ZcN46biBtkt4ee.
Для генерации адресов не нужен интернет. Каждый из них создаётся с нулевым балансом. Пополнить адрес можно либо посредством транзакций с неизрасходованных входов (на которых есть биткоины), либо посредством майнинга через зачисление комиссий и добычу награды за решение блоков.
Каждый пользователь может иметь практически неограниченное количество биткоин-адресов. Размер адреса составляет 500 байт. Все они хранятся в файле wallet.dat и в виду их малого размера хранение не представляет каких-либо технических проблем.
Теоретически может иметь место такая вещь как хеш-коллизия – совпадение адресов у двух разных пользователей, но вероятность этого стремится к нулю. Почему? Чтобы вы понимали количество потенциально возможных для создания биткоин-адресов 1048. Если представлять абстрактно, возьмите все песчинки на планете Земля и умножьте на столько же, а биткоин-адресов всё равно будет больше! Даже если взять всю существующую компьютерную память в мире, получится примерно 1 зетабайт. В 1 йотабайте 1000 зетабайт. Чтобы хранить все возможные биткоин-адреса нужно 25 йотабайт – в 25000 раз больше чем вся существующая информация на планете!
Если вы решили подобрать такой адрес (брутфорс),например, к определённому приватному ключу, то имейте в виду, что процесс такого подбора займёт вам в 2107 раз времени больше, чем на решение нового блока.
Все адреса генерируются в виде наборов частично случайных символов. Если вы захотите создать свой определённый адрес, например, 1MySpecialBitcoinAddressWhichIUse1, технически он будет корректным, но вот подобрать к нему приватный ключ будет практически невозможно.
Тем не менее, на некоторые адреса, часто из-за ошибки вода отправителем в соответствующем поле, приходят средства, но воспользоваться ими уже невозможно. Один из таких примеров — 1BitcoinEaterAddressDontSendf59kuE, на который в результате около 300 транзакций попало в сумме примерно 13 биткоинов.
Адреса могут храниться в файлах, в виде записей на бумажных носителях, QR-кодов и других и других графических шифров, которые могут быть считаны аппаратным образом, например, с помощью смартфона.
Наборы пар ключей нужно тщательно и надёжно хранить. Если потерять приватный ключ или соответствие между парой, своими биткоинами воспользоваться уже будет невозможно. Система устроена так, что единственным доказательством права собственности на закреплённые за адресом средства является приватный ключ, других вариантов не существует.
По форматам адреса бывают двух типов: Legacy (Легаси), SegWit (Сегвит).
Legacy
Это стандартный формат адресов биткоина, предложенный Сатоши Накамото. Распознать его можно по префиксу 1, с которого он начинается. Этот формат также называют P2PKH (Pay To Public Key Hash).
Пример legacy-адреса: 1BoквHALVtNBngkdXElkbR76b53LETtpyT.
Недостатки легаси:
- чувствителен к регистру;
- большие транзакционные комиссии;
- низкая скорость;
- много весит в QR-кодах;
- неудобен для записи на смартфоны и бумажные носители.
В январе 2012 года появились усовершенствованные версии legacy P2SH-адреса (Pay to script hash). Их можно отличить по префиксу 3 в начале. Его реализация позволяет снизить комиссии за переводы у отправителя, переносить комиссионные обязательства на получателя и создавать транзакции с мультиподписью. P2SH-адреса являются SegWit-совместимыми.
Пример P2SH: 3J46K5WuPJZ93MVmbWcRKAnykKaMghFyMC
SegWit
В 2017 году появились новые адреса формата Bech32 (P2WPKH — Pay to Witness Public Key Hash, bc1) или, как их принято называть segwit -адреса. Сама технология SegWit подразумевала вынос при создании нового блока секции с подписями в отдельный от его «контейнер».
Пример segwit-адреса: kj4kg7tdh87h2tz6r3k26zytwv472jg3874lq4kad8.
Преимущества:
- вес в QR-коде меньше;
- улучшенная защита от ошибки при вводе адреса;
- низкая комиссия за транзакции;
- более высокая скорость обработки платежей.
Из недостатков только то, что пока их поддерживают не все кошельки и обменные сервисы.
SegWit является софторком (обновлением ПО), а не хардфорком (ответвлением в отдельную криптовалюту) поэтому он совместим с legacy. На уровне протокола при отправке средств проблем возникнуть не может. Трудности появляются, когда вы хотите сделать перевод с Legacy на SeGwit через какой-либо сервис или платформу, а на ней технически не реализована такая поддержка и всё работает только на старых legacy. В обратном направлении пересылка должно происходить беспроблемно.
Транзакции
Средства в биткоине передаются от одного адреса к другому. Для получения денег получатель сообщает отправителю свой адрес или публичный ключ (что, по сути, одно и то же). Имея эти данные, отправитель инициирует транзакцию, за которой закрепляется один или несколько неизрасходованных входов, на которых имеется необходимое для перевода количество средств. В транзакцию заносятся её собственные данные (кому, сколько и т. д.) и хеш или хеши предыдущих транзакций. Далее транзакция подписывается цифровой подписью и рассылается для проверки на все узлы сети (точнее, не сразу на все, а на некоторое их количество, а они по цепочки отправляют друг другу далее) для проверки своей корректности. Каждый узел через цепочку «публичный ключ – цифровая подпись – приватный ключ» проверяет корректность транзакции. Если всё нормально, транзакция отправляется в мем-пул (временное хранилище) для ожидания обработки майнерами с целью включения её в один и следующих блоков блокчейна.
Созданная транзакция становится выходом для предыдущей транзакции и в последующем может стать входом для другой операции по отправке биткоинов. Таким образом, выстраивается гигантская постоянно растущая сетка из транзакций со ссылками другие транзакции (входы и выходы). Эта сетка называется – цепочка транзакций и её не стоит путать с основным блокчейном, они существуют параллельно друг другу. Вот так абстрактно в виде некого облака блоков и ссылок можно представить себе внутреннюю структуру биткоина.
Как ранее упоминалось, каждая транзакция может быть потрачена лишь единожды. «Под капотом» у каждой транзакции всегда есть минимум 2 выхода: 1 или больше на адреса получателей и 1 для отправки оставшейся сдачи на текущий или вновь созданный адрес.
Входов и выходов у транзакции может быть бесконечное множество.
Проверка корректности транзакции
Наиболее часто приводимой аналогией блокчейна является книга бухучёта, в которой записываются все манипуляции с деньгами предприятия, подобно транзакциям в биткоине. Каждая отдельная страница – это блок цепи.
Чтобы выяснить – принадлежат ли отправителю отсылаемые им средства, необходимо проверить всю существующую цепочку блоков на предмет того, не были ли потрачены входы, на которые ссылается инициируемая транзакция. Блокчейн содержит информацию о всех когда-либо проведённых в рамках сети транзакциях, а это очень много. На этот случай существует специальный условный «контейнер» — UTXO-пул (unspent transaction output), в котором содержатся неизрасходованные входы, то есть транзакции, которые уже внесены в блокчейн, но на которые никто не ссылается (с них не переводились средства на другие транзакции). Это позволяет быстро проверять каким объёмом средств в праве воспользоваться отправитель.
Корректность транзакций контролируется с посредством проверки следующих её аспектов:
- формат (содержимое и структура);
- размер в байтах;
- сумма входов должна быть больше суммы выходов;
- проверочные скрипты отдают значение «истина» (будет пояснено далее).
Структура транзакции (вносимые данные)
Параметр | Описание | Размер |
Номер версии блокчейна (Versiion Number) | Сейчас 1 | 4 байта |
Счётчик входов (Input Counter) | Количество входов — положительное число | от 1 до 9 байт |
Перечень входов (List of Inputs) | Данные о транзакция, включённых во входы | зависит от количества транзакций |
Хеш предшествующей транзакции (Previous transation hash (Previous tx)) | 32 байта | |
Txout-индекс предшествующей транзакции (Previous transaction index (Index)) | 4 байта | |
Длина Txin-скрипта (Txin-script length) | Положительное число | от 1 до 9 байт |
Txin-script / scriptSig | 1 часть скрипта подтверждения валидности подписи | Зависит от информации зашитой в транзакцию |
Подпись (signature) | Цифровая подпись транзакции, подтверждающая подлинность владельца | Составляет около 65% от размера транзакции |
Публичный ключ (public key) | Открытый ключ пользователя использующего входы | 512 бит |
sequence_no | Более не используется, раньше можно было присваивать порядковый номер транзакции в мем-пуле на обработку майнером | 4 байта |
Счётчик выходов (Output Counter) | Количество выходов — положительное число | от 1 до 9 байт |
Перечень выходов (List of Outputs) | Информация о получателях и суммах переводов | зависит от количества выходов |
Передаваемая сумма (Value) | Количество передаваемых на выходы Сатоши — положительное число | 8 байтов |
Длина Txout-скрипта (Txout script Length) | Положительное число | от 1 до 9 байт |
Txout-script / scriptPubKey | 2 часть скрипта подтверждения валидности подписи | Зависит от информации, зашитой в транзакцию |
Время блокировки (Lock time) | Высота блока (например, вы хотите, чтобы транзакция была включена не ранее блока № 100 000, так вы и задаёте это параметр, номером нужного блока) | 4 байта |
Пример и содержание транзакции
Input:
Previous tx: f315d3684f4618509259e722ec35753f049b3fcc65747d3924e7c1b7a06c2fa6
Index: 0
scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d1090db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501
Output:
Value: 5000000000
scriptPubKey: OP_HASH160 6187926bf108c77c95594fb0bb483b2b0b16209b
OP_EQUAL OP_CHECKSIG
Выше приведена транзакция в своём стандартном формате, в котором её можно просмотреть в любом блокчейн-обозревателе (например, blockchain.com).
Что происходит?
Вход текущей транзакции (Input) резервирует из предыдущей транзакции (Previous tx: f315d3…) 50 BTC (Value – значение в сатоши) и пересылает их на выход (Output) с определённым биткоин-адресом (61879…). Если получатель в будущем захочет переслать свои биткоины, то эту транзакцию он будет использовать в качестве входа, пересылая их на другой выход.
Вход (Input)
Секция входа представляет собой ссылку на предыдущую транзакцию с которой были получены средства. Суммы принятых с этих входов биткоинов складываются и поступают на выход.
Составляющие входа:
- Previous tx – хеш предыдущей транзакции;
- Index – номер транзакции-входа;
- scriptSig – первая часть проверяющего скрипта. Состоит из двух элементов: цифровая подпись и публичный ключ отправителя. Задача этого скрипта посредством проверки валидности подписи удостовериться, что инициатор транзакции имеет право на отправку указанных средств. Как это происходит, опишем далее;
Выход (Output)
В секции выхода находятся данные для отправки биткоинов:
- Value – отправляемая сумма;
- scriptPubKey – вторая часть скрипта для проверки подлинности транзакции.
Чтобы подтвердить, что отправитель имеет право расходовать выходы предыдущей транзакции, скриптом производятся следующие действия:
- scriptSig соединяется с scriptPubKey предшествующей транзакции;
- проводится проверка на выполнение получившегося скрипта (созданного на языке программирования Scrypt) и возврат им значения true (истина).
Язык Scrypt является специальным внутренним языком сценариев биткона. На нём можно реализовывать различные варианты так называемых смарт-контрактов (или умных контрактов), в том числе мультиподписи. Однако по сравнению с тем же Solidity из Etherium, Scrypt не полон по Тьюрингу (не может реализовывать любые вычислительные функции) и к тому же он не доступен из клиентского графического интерфейса. Короче, он достаточно ограничен.
Если описывать проще, то в scriptSig зашита цифровая подпись текущей транзакции, а параметр scriptPubKey предыдущей транзакции через скрипт лишь проверяет — совпадает ли публичный ключ с приватным и валидна ли данному адресу эта подпись.
Перевод биткоинов с одного адреса на другой осуществляется основании определённых условий. В стандартной реализации этим условием является наличие соответствующей цифровой подписи.
С применением Scrypt можно реализовывать различные варианты сценариев, в том числе требовать нескольких подписантов для транзакции, или ограничить возможность перевода средств для определённого адреса только с определённого IP. Но как уже ранее говорилось Scrypt не совсем подходящий для этого язык, так как он даже не объектно-ориентированный, возможно, в будущем он будет расширен, но полной свободы действий всё равно не даст, это сделано в целях обеспечения большей безопасности системы.
Кстати, биткоины можно пересылать на IP-адрес, но это нарушает анонимность.
Комиссии
В биткоине комиссия это награда майнеру за включение транзакции в блок. В принципе она не обязательна и многие транзакции проводятся и без неё. Однако при большом объёме транзакции, когда в ней много входов и выходов, без комиссии не обойтись.
Приоритет
От значения параметра приоритета зависит вероятность приёма транзакции на обработку майнерами.
Градация приоритетов:
- низкий – без комиссии;
- стандартный – с минимальной комиссией ~0,0001 BTC;
- высший – высокая комиссия.
Формула расчёта приоритета
У транзакции есть 2 входа. На первом лежит 3 (300000000 сатоши) биткоина с 3 подтверждениями. На втором 8 (800000000 сатоши) с 2 подтверждениями.
Подтверждение – это количество созданных блоков с момента включения транзакции в цепь. Параметр определяет уровень защищённости транзакции от атаки двойной траты средств.
Размер транзакции 750 байт. По приведённым данным приоритет рассчитывается следующим образом:
(300000000 * 3 + 800000000 * 2) / 750 = 33,333,333
Чтобы избежать наложения ограничений на транзакцию, величина приоритета должна составлять не более 57,600,000. Порог лимита рассчитывается по следующей формуле:
100000000 * 144/250
- 100000000 – 1 монета биткоин;
- 144 – предполагаемое количество создаваемых в день блоков (1 в 10 минут);
- 250 – оптимальный размер транзакции в Кб.
Размер комиссии
Транзакции без комиссии (свободные) также могут нормально проводиться при соблюдении трёх условий:
- Размер транзакции не более 1000 байт;
- Сумма на каждом выходе не менее 0,01 биткоина;
- Высокий приоритет.
Если транзакция не соответствует данным критериям, она округляется до 1000 байт и за неё проведение автоматом устанавливается комиссия в 0,0001 биткоина. По превышению размера каждых 1000 байт комиссия увеличивается на 0,0001 биткоина дополнительно. Таким образом, комиссионное вознаграждение за транзакцию в 999 байт составит 0,0001 BTC, а в 1001 байт будет 0,0002 BTC. В среднем транзакция весит около 500 байт.
Внесение в блокчейн
Размер блока зависит от количества включаемых в него транзакций, которое определяется майнером. Максимально допустимый его размер ~ 1 Мб. В каждом блоке 20 000 байт выделяется под транзакции с наивысшим приоритетом, никак не зависящим от размера комиссии. Далее в блок включаются транзакции стандартного приоритета, ранжируемые по размеру комиссии.
Трансляция транзакций
Транзакция через открытый нешифрованный канал отправляется в сеть. Каждый узел проверяет подпись, одобряют обработку транзакции майнерами и отправляют её дальше по сети. После обработки каждый узел вносит в свой регистр запись об этой транзакции, а далее эти данные постепенно синхронизируются.
Некоторые компьютеры сети могут быть отключены во время включения блоков и обработки транзакций, но во время включения и подключения к интернету, программа-клиент все эти данные скачивает и актуализирует (обновляет), поэтому отставания отдельных компьютеров от сети не происходит.
Изменение комиссии
Бывают ситуации, когда вы установили размер комиссии, а транзакция не проходит и по умолчанию остаётся 2 варианта:
- ждать, когда большинством нод биткоина будет принято решение выбросить транзакцию из мем-пула и она будет отменена;
- ждать пока она будет подтверждена.
Некоторые кошельки предлагают 3-й вариант – заменить транзакцию и изменить в ней размер комиссионного вознаграждения. Такая технология называется Replace-by-fee, а комиссия динамической. Поддерживают её следующие клиенты:
- Electrum;
- Bitcoin Core 0.12 и выше;
- Coinomi;
- Mycelium (мобильный) и др.
Также, в качестве 4-ого варианта, можно воспользоваться специальными сервисами – ускорителями транзакций, но у них, как правило, стоит ограничение на количество бесплатных ускорений за определённый промежуток времени. Подобное позволяют реализовать сервис майнингового пула ViaBTC и сайт bitaccelerate.com.
Также есть сайт bitcoinfees.net. Он показывает расчётную статистику комиссий, по которой можно видеть какую величину комиссионного вознаграждения ставить, чтобы транзакция прошла быстрее.
Чуть подробнее о блокчейне
Структура блока
Блок биткоина состоит из трёх основных составляющих: заголовок, счётчик и список транзакций.
Таблица со подробными структурами каждой из секций блокчейна и их описаниями
Элемент блока | Описание |
Заголовок блока | |
Version | Версия блокчейна системы, остаётся неизменной с момента создания – 1. |
Hash | Хеш заголовка текущего блока. |
Nonce | Именно это число ищут все майнеры в сети, так как оно даёт право первому его нашедшему включить блок в блокчейн. Nonce нужно подобрать такой, чтобы Hash, начинающийся с некоторого числа нулевых бит, был меньше значения параметра Target (смотрите ниже). Записывается в заголовок блока. |
Difficulty (Difficulty Bits или просто Bits) | Параметр «сложность», представляет собой особый формат записи числа Target в тело заголовка блока. Определяет степень сложности нахождения числа Nonce, то есть решения криптографической задачи майнинга. |
Target |
Собственно само число. Target и Difficulty обратно пропорциональны друг другу, то есть чем меньше Difficulty, тем больше Target и наоборот. Изначально «сложность» равнялась 1, а Target, соответственно имел максимальное значение, это означало, что диапазон возможных значений Hash был максимально высоким. По мере роста мощности сети биткоина требовалось увеличивать сложность нахождения хеша, а для этого нужно было сократить диапазон возможных значений параметра Hash. Для этого нужно увеличивать Difficulty, что приводит к уменьшению Target в итоге, сужая этот диапазон. «Сложности» пересчитывается каждые 2 016 блоков, или 20 160 минут, что занимает ориентировочно 2 недели. |
Transaction fees | Суммарный размер комиссии, который начисляется майнеру за добычу блока. |
Estimated Transaction Volume | Ориентировочный объём стоимости всех транзакций, включаемых в блок. |
Height | Порядковый номер блока в цепочке. |
Timestamp | Дата и время включения блока в блокчейн, так называемая — временна метка. |
Relayed By | Название пула, включающего блок в цепь. |
Size | Размер блока в мегебайтах (Мб). |
Weight | Вес блока. Был введён с внедрением Segwit (Segregated Witness) и измеряется в специальных весовых единицах. |
Previous Block | Хеш предшествующего блока. |
Заголовок блока транзакций | |
Number Of Transactions | Параметр, показывающий количество транзакций, включённых в блок. |
Список транзакций | |
Merkle Root | Хеш записанных в блок транзакций, рассчитанный с применением алгоритма «дерево Меркла». |
Общий принцип работы блокчейна в биткоине
Допустим у нас есть 5 блоков. Каждый из них хранит кеш своего заголовка и кеш предыдущего блока. Это актуально для всех блоков кроме первого, так называемого «генезис-блока», у которого нет предшественника. Так блоки последовательно цепляются друг за друга. Например, мы изменим данные в третьем блоке. Как мы уже знаем, его хеш поменяется до неузнаваемости. В результате в четвёртом блоке проверка подлинности хеша предыдущего блока (то есть третьего) отдаст отрицательное значение (false). Вся цепь, следующая за третьим блоком, включая его самого разрушится. Причём произойдёт это в блокчейне каждого узла сети. В этом состоит суть алгоритма консенсуса, коим в биткоине является Proof-of-Work.
Пересчитать заранее весь блокчейн не получится. Это обусловлено ранее описанным параметром «сложность». Он автоматически пересчитывается системой каждые 2016 блоков (примерно раз в 2 недели) с учётом имеющейся мощности сети так, чтобы среднее время нахождения хеша составляло около 10 минут. Чем в сети больше устройств, тем сложнее параметр, и наоборот. Таким образом, просчитать блокчейн заранее не получится, так как осуществляющий пересчёт пользователь всегда будет на «10 * количество блоков отставания мин.» позади остальных.
Построение цепочки
После установки программы-клиента на устройство скачивается полная версия текущего блокчейна. Когда один из майнеров находит подходящий хеш, блок широковещательным запросом рассылается на все узлы сети и включается в скачанный блокчейн.
Это обеспечивает гарантию безопасности системы. В сети биткоина миллионы компьютеров и подменить данные блокчейна на каждом из них просто невозможно.
Это обеспечивает гарантию безопасности системы. В сети биткоина миллионы компьютеров и подменить данные блокчейна на каждом из них просто невозможно.
Майнинг
Майнинг – это деятельность по решению сложных математических задач, цель которых состоит в подборе правильных хешей блоков, и получении за это награды в виде определённой суммы биткоинов и комиссии, выставляемой отправителями транзакций за их обработку. «Решённые» блоки включаются в блокчейн, что обеспечивает безопасность работы системы.
Общая схема майнинга простыми словами:
- Майнеры выбирают список транзакций из мем-пула для включения в блок;
- Каждый майнер или пул, начинает подбирать хеш своего варианта блока в рамках алгоритма Proof-of-Work;
- Первый, нашедший свой хеш получает временное право на включение своего блока в блокчейн;
- Информация о включаемом блоке транслируется в сеть, и, если все узлы его подтверждают, он включается в блокчейн в качестве следующего блока;
- Происходит выпуск порции биткоинов, которые вместе с комиссией за обработку транзакций, включённых в блок, отправляются на адрес нашедшего его майнера;
- Процесс повторяется заново.
Воспользоваться полученным вознаграждением майнер сможет только через ещё 100 подтверждённых блоков (~17 часов). Так сделано из соображений безопасности в целях противодействия атакам 51%.
История майнинга
Изначально майнинг осуществлялся с помощью обычных компьютерных процессоров. В первых версиях программ-клиентов даже была кнопка для запуска майнинга. Участников в сети было немного, а шансы найти правильный хеш были пропорциональны доле мощности – чем выше, тем вероятнее.
По мере роста популярности криптовалют росло и число майнеров. Принцип построения задачи по перебору вариантов хешей позволял распараллеливать вычисления между разными узлами сети. После добавления определённого ПО было замечено, что видеокарты (GPU) для майнинга в сотни раз эффективнее ЦП. Помимо этого, широко стали применятся платы FPGA, которые по эффективности стояли на ровне с GPU, но были гораздо более энергоэффективны.
Постепенной майнеры начали объединяться в пулы, чтобы повысить шансы на решение задачи ранее остальных. В итоге майнинг на ЦП стал невыгоден. В 2013 г. китайская компания BFL анонсировала выпуск ASIC (Application-specific Integrated Circuit) – интегральных схем специального назначения, эффективность которых в 25-50 превосходила GPU и FPGA. Кроме майнинга эти схемы больше ничего не умеют. С этого момента майнинг биткоина на видеокартах также перестал быть рентабелен, он больше не отбивал затраты на электроэнергию и износ оборудования.
С 2013 г. активно начинают запускать так называемые «майнинг-фермы». В пустых складах и ангарах собирают целые стеллажи с оборудованием (ASIC), которое круглые сутки ведёт расчёты.
На 2019 г. по расчётам специалистов кембриджского университета общее потребляемое сетью биткоина количество энергии примерно равнялось тому, сколько потребляют такие страны как Израиль, Швейцария или Греция. Ежедневное потребление сети составляет 7 ГВТ, а ежегодное 61 ТВт. В процентном соотношении ко всему объёму потребляемой в мире электроэнергии на долю криптовалюты приходится 0,25%.
Для наглядного примера: такое же количество электроэнергии было потреблено всеми электрочайниками в Англии за последние 11 лет.
Распределение затрат электричества по всему миру
Майнинговые пулы
Майнинг-пулы – это специальные веб-сервисы, предназначенные для объединения мощностей майнеров с разных точек мира для повышения шансов нахождения подходящих хешей раньше остальных. За счёт распараллеливания вычислений в рамках пула каждый узел решает свою часть задачи и отсылает её обратно.
Награда каждому участнику начисляется на установленных пулом условиях.
На 2021 г. подавляющее большинство майнинговых мощностей мира сконцентрировано в Китае. Общее их количество насчитывает около 1500.
Распределение майнинговых мощностей по миру
Диаграмма распределения мощностей по пулам (Мониторить доли мощностей пулов можно через сервис btc.com/stats/pool):
Самыми популярными майнинг-пулами на 2019 год являются:
- BTC.com;
- Antpool;
- ViaBTC;
- F2Pool;
- SlushPool;
- BTC.top.
Способы майнинга
Существует 4 основных способа майнинга биткоина и других криптовалют:
- на собственной ферме;
- в составе пулы;
- облачный майнинг;
- сдача мощностей в аренду.
На собственной ферме
Майнинговая ферма – это аппаратный комплекс, включающий в себя вычислительное оборудование в виде ЦП, видеокарт или ASIC-майнеров, предназначенный для решения задач по поиску подходящего хеша. По сути, это обычный компьютер с теми же комплектующими и операционной системой, и управляемый тем же образом.
Одиночный майнинг биткоина сегодня не выгоден, но иногда при активном падении его стоимости снижается рентабельность самого процесса добычи криптовалюты, и ряд участников сети выходят из него, освобождая место для других, более мелких. К тому же, не известно, в какую сторону цена монеты пойдёт завтра, и на такой волне можно попытаться зарезервировать себе место в майнинговой сети для дальнейшего расширения.
По сути, требуется помещение, настроенное по ранее описанному принципу создания фермы оборудование, интернет и установка специального софта для майнинга.
К наиболее популярному ПО для майнинга биткоина можно отнести следующий софт:
- CGMiner;
- GUIminer;
- Nheqminer;
- Nheqminer;
- Bitcoin Core;
- Awesome Miner и др.
Установку этих утилит и сам майнинг лучше производить на отдельном компьютере, так как большинство антивирусных программ не очень хорошо относятся к подобного рода ПО.
Установку этих утилит и сам майнинг лучше производить на отдельном компьютере, так как большинство антивирусных программ не очень хорошо относятся к подобного рода ПО.
Для майнинга в составе пула необходимо закупить оборудование и собрать собственную ферму.
Для майнинга в составе пула необходимо закупить оборудование и собрать собственную ферму.
Далее нужно зарегистрироваться в пуле, подключить свои мощности (все инструкции всегда можно найти в интернете), указать необходимые данные и адрес кошелька для получения вознаграждения.
Основные критерии оценки качества пула:
- Пинг. Сервер пула должен находится к вам как можно ближе и работать как можно быстрее. Дело в том, что, если данные по решению задач будут доходить до вас с задержкой, может получиться так, что пул начал решать новый блок, а вы всё ещё решает старый, так как информация не успела обновиться. Таким образом, вы отсылаете неактуальные данные на сервер пула, соответственно и награды не получаете;
- Мощность. Хешрейт в герцах – суммарная мощность всех, подключённых к пулу, устройств. Чем этот показатель выше, тем больше шансов на нахождение подходящего хеша и получение награды;
- Репутация. Некоторые пулы используют вычислительные мощности участников и присваивают средства себе. Поэтому перед подключением к пулу стоит ознакомиться с отзывами его участников о работе с ним на профильных форумах и сайтах;
- Есть ли выплата комиссий. Некоторые пулы распределяют награду между участниками только от добытых за блок монет, комиссию за транзакции оставляют себе, а некоторые делят всю полученную сумму. При этом пул всегда берёт себе фиксированную посредническую комиссию, как правило, до 3%;
- Постоянная доступность. Возможность контролировать работу пула и своих учётных записей (воркеров) круглосуточно;
- Способ начисления выплат. Существуют разные способы выплат: PPS, PPLNS, PROP, FPPS, SMPPS, ESMPPS, CPPSRB, PPS+. Самыми популярными являются первые две.
PPS – в этом случае майнер получает фиксированную оплату за принятую пулом шару (часть решения задачи) не зависимо от того найдёт пул блок или нет. Такой способ хорошо подходит для мелких майнеров и для тех, кто часто меняет пулы. Не всегда выгоден самим пулам.
PPLNS – награда идёт за решённые блоки, точнее за промежутки времени между ними. Если блок долго не находится, то размер выплаты увеличивается. В этом случае нет фиксированной оплаты за шару, оплачиваются последние несколько шар, которые были получены пулом для решения найденного блока. Однако, так как, время его нахождения может затянуться, стоимость этих последних шар может вырастать в разы (в 2-3). PPLNS выгоден для тех у кого есть большие мощности, он готов терпеливо ждать награды (так как иногда с ней происходит затягивание) и придерживается работы с одним пулом.
Облачный майнинг
Облачный майнинг технически ничем не отличается от обычного. Для участия в нём не нужно привлекать собственных мощностей — их можно арендовать. Нужно зарегистрироваться на одном из сервисов облачного майнинга, взять в аренду некоторое количество мощностей и подключить их к пулу. Подключить их можно, как к пулу самого сервиса, так и к стороннему.
Облачный майнинг технически ничем не отличается от обычного. Для участия в нём не нужно привлекать собственных мощностей — их можно арендовать. Нужно зарегистрироваться на одном из сервисов облачного майнинга, взять в аренду некоторое количество мощностей и подключить их к пулу. Подключить их можно, как к пулу самого сервиса, так и к стороннему.
Популярные сервисы облачного майнинга:
- Genesis Mining;
- Aliencloud;
- CCG Mining;
- IQMining;
- CryptoUniverse;
- BeMine;
- Hashing 24;
- NuvooMining.
Сдача мощностей в аренду
Свои вычислительные мощности можно сдавать в аренду сервисам облачного майнинга. Вашими ресурсами будут пользоваться другие люди, а вы будете получать с этого комиссию.
Хеширование и алгоритмы шифрования биктоин
Хеширование – это процесс преобразования некоторого объёма данных в небольшую строку, представляющую собой набор определённым образом упорядоченных цифр и букв фиксированного размера. Каждый вновь генерируемый набор символов совершенно уникален.
В биткоине есть 3 основных криптографических алгоритма:
- SHA-256;
- RIPEMD-160;
- ECDSA.
SHA-256
Большая часть системы работает с применением SHA-256, так как он является одним из самых надёжных. Применяется в биткоине в трёх случаях:
- генерация приватных ключей;
- создание адресов;
- создание адресов;
RIPEMD-160
Используется совместно с SHA-256 для создания биткион-адреса из публичного ключа.
ECDSA
ECDSA – алгоритм цифровой подписи на эллиптической кривой или ассиметричное шифрование с открытым ключом. В биткоине применяется для генерации цифровой подписи, а также публичного ключа из приватного.
В основе функции ECDSA лежит принцип ассиметричного шифрования с применением открытого и закрытого ключа. Что это такое?
Предположим, Пете нужно отправить сообщение Васе. Если отправить его в обычном зашифрованном виде, то для расшифровки потребуется отправить соответствующий ключ, который сможет его расшифровать. Высока вероятность того, что и ключ, и сообщение смогут перехватить и расшифровать сторонние лица. В этой ситуации на помощь приходят закрытый и открытый ключ. Перед отправкой Вася и Петя обмениваются своими открытыми ключами. Петя шифрует сообщение с помощью публичного ключа Васи и отправляет его. Вася после получения письма сможет его расшифровать, так как имеет приватный ключ, позволяющий удостовериться в том, что публичный ключ, с помощью которого было зашифровано сообщение, соответствует Васиному приватному ключу. Таким образом, никто, в том числе и Петя, не сможет расшифровать сообщение, отправленное Васе, так как для этого необходим Васин приватный ключ.
Описание механизма работы биткоина
По своей сути, биткоин представляет собой файл с хешированной информацией обо всех когда-либо совершённых в рамках сети транзакциях, представленной в виде цепи блоков. Туда же записываются и данные о новых транзакциях.
Копия такого файла хранится на каждом узле сети. Некоторые из них хранят лишь сокращённые версии (лёгкие клиенты), в блоки которых вносятся только заголовки. Все файлы сети синхронизированы между собой и хранят одну и ту же информацию.
Разберём по порядку происходящее внутри биткоина.
Установка и создание кошелька
Для начала нужно скачать установочный файл какого-либо приложения-кошелька и установить его на компьютер или телефон. Инструкции всегда прилагаются разработчиком. Существует большое количество кошельков, но официальным ПО является Bitcoin Core. Найти его можно на сайте bitcoin.org.
После установки приложение скачивает весь блокчейн из сети (если это полный клиент) и проводит его синхронизацию (репликация), то есть проверяет историю транзакций на корректность, актуализируя хранимые данные. Процесс проводится автоматически один раз и длится около суток.
Генерация пар ключей
Пара приватный-публичный ключ генерируется при создании адреса. Из соображений безопасности многие кошельки, в том числе Bitcoin Core, предлагают генерировать новый адрес с новой парой ключей перед каждой транзакцией.
Помимо этого, генерировать адреса и ключи можно с помощью онлайн-генераторов и автономных программных скриптов.
Онлайн-сервисами, типа walletgenerator.net, пользоваться не рекомендуется, так как доступы к вашим средствам могут получить сторонние лица.
Оффлайн генерация с помощью специальных скриптов считается наиболее безопасной. Примером такого скрипта является iancoleman.io. Порядок работы с ним следующий:
1. Исходные файлы скрипта скачиваем на компьютер (на сайте на странице iancoleman.io/bip39/ есть ссылка на соответствующую директорию GitHub):
2. Отключаем интернет;
3. Устанавливаем и запускаем виртуальная машина (например, Hyper-V);
4. На виртуальной машине через любой браузер запускаем файл index.html из папки скрипта:
5. С помощью открывшегося в браузере интерфейса генерируем необходимое количество ключей и адресов, которые сохраняются в какой-нибудь текстовый файл. Выбираем количество слов для SEED-фразы (в ней хранятся ключи, и с её помощью их можно будет восстановить через какой-нибудь её поддерживающий кошелёк) и нажимаем «Generate»:
6. Прокручиваем вниз и видим список биткоин-адресов, соответствующих сгенерированной SEED-фразе:
7. После генерации все файлы скрипта удаляем с компьютера, а файл с ключами сохраняем в удобном месте (лучше на флешке);
8. Интернет подключается заново и ключами можно пользоваться.
Инициирование и отправка транзакций
Транзакция инициируется с помощью приложения-кошелька. В соответствующее поле вставляется адрес получателя, а в другом поле устанавливается сумма к отправке. С каких адресов, если их несколько отправлять средства программа решает сама. Если нужно, чтобы какой-то из адресов остался не тронутым лучше его исключить из списка доступа кошелька.
Безопасность транзакции обеспечивается цифровой подписью. Это обусловлено ассиметричным шифрованием (которое гарантирует невозможность перехвата с последующим взломом) и тем, что подписи у каждой транзакции всегда разные (к двум транзакциям одна подпись никогда не подойдёт, так как повторение сообщения транзакции, входящего в состав подписи, попросту невозможно).
В тело сообщения транзакции также входит адрес получателя, и через внутреннюю проверку пересылаемые биткоины закрепляются за ним как за владельцем, чтобы тот мог использовать их как входы для следующих операций.
Адреса получателей представляют собой скорее не баланс, а некую математическую задачу, которую может решить только получатель с помощью своего публичного адреса, а все остальные узлы могут проверить правильность решения. Эта задача генерируется с помощью внутреннего языка программирования Scrypt, который может создавать и более сложные условия её выполнения, в том числе и для так называемых escrow-транзакций с мультиподписью.
Запись транзакций в блокчейн и двойная трата
Зачем запечатывать транзакции в блокчейн?
Дело в том, что обычная цепочка транзакций фиксирует исключительно информацию о смене владельца средств для разных входов. В каждую транзакцию, хоть и заносятся данные о времени её создания, но их можно подменить.
Вася хочет купить машину у Пети. Они договариваются о сделке. Вася переводит Пете биткоины, а Петя передаёт Васе свой автомобиль. После этого Вася создаёт ещё одну транзакцию с отправкой тех же денег на свой адрес. Сигнал до разных узлов сети доходит с разной задержкой. В связи с этим существует вероятность, что вторая транзакция дойдёт на проверку первой, будет подтверждена, а первая транзакция будет отвергнута системой. В результате, Петя не сможет оспорить свою правоту в данной ситуации.
Описанная выше ситуация называется «проблемой двойной траты». Именно для её решения и нужен блокчейн, основная функция которого это фиксирование порядка создания транзакций и предотвращение возможных мошенничеств на этом фоне.
Блоки в цепи выстраиваются в соответствующем временном порядке. Включённые в отдельный блок транзакции относятся к одной временной метке, то есть считаются созданными в одно время. Остальные же, висящие в мем-пуле, относятся к неподтверждённым.
Ветвление блокчейна
В системе биткоина возможно одновременное нахождение правильных хешей блоков несколькими пользователями, хотя и очень редко. Соответственно есть вероятность и одновременного ими включения блоков в цепь. Бывают ситуации, когда включаются даже несколько блоков подряд. В этой ситуации создаётся несколько веток блокчейна, то есть он как-бы разветвляется на несколько параллельных потоков.
В системе биткоина возможно одновременное нахождение правильных хешей блоков несколькими пользователями, хотя и очень редко. Соответственно есть вероятность и одновременного ими включения блоков в цепь. Бывают ситуации, когда включаются даже несколько блоков подряд. В этой ситуации создаётся несколько веток блокчейна, то есть он как-бы разветвляется на несколько параллельных потоков.
Важно знать, что в биткоине протоколом установлено правило – блокчейн всегда переходит на более длинную ветку. То есть, в случае ветвления цепи уйдёт на ту ветку, на которой будет найден последний блок ранее других. Таким образом, блокчейн быстро стабилизируется.
Если Вася отправит биткоины Пете за покупку машины, а потом создаст более длинную ветку, он сможет вернуть свои деньги, а остальные узлы посчитают эту операцию валидной в соответствии с правилом «самой длинной ветки».
Ветвление блокчейна хоть и маловероятно, но тем не менее, создаёт угрозу безопасности. Если транзакция в результате стабилизации блокчейна окажется в короткой ветке, она потеряет легитимность и средства вернутся отправителю, а получатель их потеряет. Таким образом, отправитель получит возможность дважды расходовать одни и те же деньги. Тем не менее, защиту от подобного обеспечивает алгоритм консенсуса биткоина Proof-of-Work.
Proof-of-Work
Предварительный просчёт и построение блокчейна невозможен из-за наличия параметра «сложность», который пересчитывается каждые 2 недели с учётом уровня задействованных вычислительных мощностей в системе.
Временной отрезок в 10 минут для нахождения блока был подобран оптимально. Меньшее время создавало бы угрозу стабильности сети, а большее сильно затягивало бы и без того длительное подтверждение транзакций.
Также важно знать, что размер хеша блока должен быть меньше определённого протоколом значения. Поэтому при каждом раунде решения задачи по нахождению искомго хеша к решаемому блоку добавляется динамическая «соль» (параметр со случайным числом), и так до тех пор, пока подходящее значение не будет найдено. Найденный хеш становится уникальной меткой блока.
Если Вася захочет обмануть Петю, ему придётся начинать решение с текущего последнего блока. Если он начнёт с более раннего, например, с 5-ого блока с конца, ему необходимо будет решить 5 блоков в течение 50 минут, а за это время цепь вырастет ещё на такое же количество звеньев.
Если Вася решит считать с текущего последнего блока, ему необходимо будет, как минимум, перебить по мощности всю остальную сеть, чтобы иметь хотя бы 50% вероятности решить следующий блок, и уж тем более, на порядок больше половины, если он захочет найти целую часть цепи раньше остальных. Проворачивать такое ради машины явно нецелесообразно, а с целью обмана целой сети очень накладно.
Будь у злоумышленника хоть 1000 и больше компьютеров, фактор случайности, который обуславливается «солью» всё равно не даёт 100% гарантии на решение нескольких блоков подряд одним майнером.
В 2013 году майнинг-пул BTC Guild смог разгадать 6 блоков подряд, после чего добровольно ограничил своё присутствие в общей сети, дабы не подрывать доверие пользователей к ней. После этого случая порогом безопасности стало считаться подтверждение 6 блоков с момента подтверждения транзакции.
Из вышесказанного, следует, что чем старше транзакция, тем она надёжнее, так как вероятность их взлома понижается по мере роста цепи.
Недостатки PoW
- Уязвимость к различным типам атак 51%. Если один пользователь (или объединение пользователей) владеет большей частью мощности сети, он может либо начать добывать свои блоки, присоединяя их к уже текущему блокчейну, либо начать строить собственную цепочку параллельно основной и транслировать её в сеть в наиболее подходящий момент;
- Высокая ресурсоёмкость. В биткоине вероятность нахождения хеша блока и получения за это награды прямо пропорциональна размеру доли мощности в сети. Данное обстоятельство стимулирует участников к постоянному наращиванию ресурсов, что влечёт за собой рост и без того огромных затрат электроэнергии. В 2017 г. на проведение одной транзакции в сети биткоина требовалось 163 кВт/ч электричества. Этого количества энергии достаточно, чтобы обеспечить жизнедеятельность среднестатистической семьи из трёх человек на 5 дней вперёд. Сегодня сеть биткоина и эфириума в совокупности потребляют такое же количество электроэнергии, как вся Сирия;
- Бесполезность вычислений. Математические расчёты, производимые в рамках системы биткоин нигде, кроме как в самой системе не применимы. Неоднократные попытки применить их в чистом виде для извлечения какой-то математической или промышленной пользы пока ни к чему не привели.
Поиски возможных альтернатив Proof-of-Work с его недостатками привели к созданию Proof-of-Stake (доказательство доли) и различных гибридных гибридных модификаций на базе и первого и второго вместе.
Proof-of-Stake основан на доказательстве владения долей, то есть решение о включении блока в цеп принимает не система, а участники со статусом валидатора. Право валидации присваивается в зависимости от количества валюты на балансе по принципу — у кого больше.
Существуют и другие варианты алгоритмов консенсуса: Delegated Proof-of-Stake, Proof-of-Activity, Proof-of-Burn, Proof-of-Capacity и др.
Объёмы данных системы биткоин
Большие объёмы необходимой к хранению информации один из основных недостатков любого блокчейна, в том числе и у биткоина. Система способна работать автономно, полноценно выполняя все необходимые функции, только при наличии полной истории транзакций.
Учитывая размер блокчейна в 320 Гб на начало 2021 г. — для телефонов уже не очень удобно. Учитывая, что он продолжит расти, то в будущем и памяти компьютеров перестанет хватать. К тому же, биткоин никогда не использовался массово, и сложно представить до каких объёмов вырастет его блокчейн, если по числу транзакций криптовалюта дорастёт до какой-либо из широко применяемых платёжных систем (Visa, Master Card и т. п.).
Так называемые «лёгкие клиенты» — кошельки, которые скачивают базу, в которой содержатся только заголовки блоков (примерно 80 байт) без основных секций с транзакциями. Эти данные они берут со сторонних серверов и скачивают только по необходимости. Однако такие клиенты не подходят для майнинга. К тому же, хранение истории транзакций на чужих серверах негативно сказывается на анонимности и децентрализации.
Проверить текущий размер блокчейна можно через любой обозреватель, (например, blockchain.com/ru/charts/blocks-size).
Масштабируемость
Масштабируемость характеризуется пропускной способностью платёжной системы, то есть количеством транзакций, которое она может проводить за определённый промежуток времени. Для биткоина это больной вопрос, который по сей день остаётся нерешённым.
Сеть биткоина способна нормально пропускать не более 7-8 транзакций в секунду, что и в сравнение не идёт с 24 000 тр./сек. той же Visa. Если плотность транзакций начинает расти и превышает указанный порог, система начинает «тормозить».
Данная проблема обусловлена тем, что в биткоине максимальный размер блока ограничен 1 Мб. Такое ограничение установил в 2010 г. сам Сатоши Накамото, чтобы система могла эффективно противостоять разного рода Ddos-атакам, цель которых чаще всего заключалась в создании невероятно больших блоков и частично блокировала работу биткоина. Блоки, превышающие в размере 1 Мб, признаются невалидными и отвергаются сетью. Однако такое решение очень негативно сказалось на производительности системы.
Данная проблема обусловлена тем, что в биткоине максимальный размер блока ограничен 1 Мб. Такое ограничение установил в 2010 г. сам Сатоши Накамото, чтобы система могла эффективно противостоять разного рода Ddos-атакам, цель которых чаще всего заключалась в создании невероятно больших блоков и частично блокировала работу биткоина. Блоки, превышающие в размере 1 Мб, признаются невалидными и отвергаются сетью. Однако такое решение очень негативно сказалось на производительности системы.
Такой рост количества денежных переводов спровоцировал появление своеобразного рынка транзакций. В мае 2017 г. многие пользователи сети сетовали на то, что иногда подтверждения своих платежей им приходилось по несколько суток. Эту проблему можно было решить увеличением размеров транзакционной комиссии, однако это существенно удорожало само пользование системой, а проблему всё равно не решало. И если в первые годы существования биткоина комиссия могла составлять сотые доли цента, то сегодня она может доходить до нескольких долларов. Это привело к тому, что биткоином пользоваться стало не выгодно и не практично при совершении повседневных платежей, например, в барах, магазинах и при осуществлении других быстрых покупок.
Это похоже на ситуацию, когда вы больше платите, чтобы попасть в первые места медленно движущейся очереди. Вы проходите её быстрее, однако сама очередь от этого двигаться быстрее не начинает, и при этом постоянно растёт.
Какие были предложены варианты решения проблемы?
В качестве решений проблемы масштабируемости были предложены программные реализации обновления протокола в виде так называемых софтфорков и хардфорков.
Софтфорк – это программное обновление протокола криптовалюты без выделения на отдельную ветку. То есть, блоки в основном блокчейне продолжают выстраиваться далее по цепи, но в обновлённом программном формате и в полной совместимости с предыдущими версиями цепочки.
Хардфорк – это изменение протокола криптовалюты с выделением блокчейна в отдельную ветку. Блоки старой и новой версии в таком случае несовместимы, хотя часто происходит такое, что при хардфорке все текущие держатели криптовалюты дополнительно получают тоже количество монет по обновлённому протоколу (например, как в случае с Bitcoin и Bitcoin Cash).
Было предложено несколько стандартов решений, но их отличия состояли лишь в способе увеличения размера блока, но в целом идея была одна и та же.
Стоит отметить, что ни одно из предложений по сегодняшний день в полной мере таки и не решило проблему масштабируемости.
Одно из первых решений было предложено главным разработчиком биткоина Гевином Андерсоном и состояло в фиксированном увеличение размера блока биткоина до 20 МБ. Однако эта идея подверглась сильной критике со стороны широкого круга участников биткоин-сообщества, в том числе майнеров, разработчиков, представителей известных информационных ресурсов bitcointalk.org и Reddit, так как такая мера значительно снижала степень децентрализации криптовалюты.
В 2015 году разработчиками биткоина тем же Гэвином Андерсеном и Джеффом Гарзиком были предложены решения стандартов BIP 100 и BIP 101.
BIP (Bitcoin Improvement Proposal — «предложения по улучшению биткоина») – стандарт, который предполагает, что обновление может быть произведено только с одобрения большинством майнеров.
Идея BIP 100 состояла в том, чтобы размер блоков произвольно определялся майнерами при его создании. В BIP 101 было предложено фиксировано увеличить максимальный размер до 8 МБ.
Проблема и того, и другого состояла в том, что они были хардфорками. При их совершении старая исходная цепочка биткоина постепенно становилась неактуальной, так как новые были с ней несовместимы. Это могло привести к полному краху биткоина, что крайне негативно было воспринято сообществом.
Весь 2015 г. шли активные дискуссии по поводу того стоит ли внедрять BIP 100 и BIP 101, но ни один из них так и не был реализован.
Было подсчитано, что если размер блока достигнет объёма, необходимого для работы полноценной платёжной системы в современных реалиях, то суммарный объём памяти, занимаемой блокчейном биткоина, составит несколько петабайт. Это само собой приведёт к централизации, так как при подобных объёмах данных, хранить их и обеспечивать нормальную работоспособность сети способны исключительно крупные коммерческие дата-центры, но никак не домашние компьютеры.
Таким образом, реализации протокола с увеличением верхнего порога размера блока на несколько мегабайт являются лишь временным решением проблемы масштабируемости и не избавляют от неё сеть полностью.
SegWit
Технология SegWit (Segregated Witness – отделённый свидетель) подразумевает вынесение информации о цифровых подписях, которая занимает 65% памяти блока, за пределы блокчейна в отдельную структуру, называемую «отделённым свидетелем». Таким образом, освобождается больше места для транзакций. Активация SegWit в биткоине прошла 24 августа 2017 года.
Благодаря специальной программной обёртке P2SH SegWit-транзакции обратно совместимы с legacy-транзакциями, то есть с предыдущей их версией а биткоине без отделённого свидетеля.
В SegWit есть 2 формата адресов:
- P2SH — начинается с «3» и совместим с Legacy (пример: 3K34M3DbUVA83CNmHWvRjpageWhZokqFyNP);
- bech32 — начинается с «bc1» и совместим только с SegWit (пример: bc1gahw7etaylw2jaad7t9kabyqt9615kawrrctpbgc5).
Поэтому, если кто-то пересылает вам средства со старого ПО, отправляйте ему адрес, начинающийся с «3».
Атака «Гибкость транзакций» (malleability attack)
SegWit изначально предназначался для решения другой проблемы – «гибкости транзакций». Дело в том, что неподтверждённые операции можно подменять. Каким образом?
Любой транзакции должен быть присвоен определённый идентификатор (параметр TxID), который нужен для отслеживания состояния транзакции и того была ли она внесена в блокчейн вообще. Этот идентификатор формируется путём хеширования всей информации транзакции, включающей цифровую подпись. При этом, данные подписи имеют определённый формат, который система не всегда проверяет должным образом. Данное обстоятельство создаёт потенциальную возможность того, что в подпись неподтверждённой транзакции (когда она находится в мемпуле, а не в блокчейне) третьими лицами могут быть внесены некоторые дополнительные данные (какие-то неиспользуемые случайные постоянные значения). Они не меняют информацию сообщения транзакции (отправитель, получатель, сумма), но изменяют подпись и тем самым идентификатор. Так может быть создано несколько хешей для одной транзакции.
Может получиться так, что Вася попросит Петю отправить ему 3 биткоина. Петя создаст транзакцию и отправит её на обработку. Пока транзакция не подтверждена, Вася попытается подменить данные в транзакции изменив тем самым подпись и TxID, что создаст новую транзакцию – своеобразный дубль предыдущей. Если получится так, что подменённая транзакция будет подтверждена ранее исходной, то исходная будет отвергнута сетью. Петя скажет Васе, что он денег не получил. Вася с помощью TxId своей транзакции проверит её состояние в обозревателе блоков и увидит, что она там отсутствует, после чего попытается отправить биткоины ещё раз, потратив тем самым деньги дважды.
Таким образом, вынос секции подписей за пределы основного блока, лишил их влияния на идентификатор. Также блок в некоторой степени был разгружен, что хоть и временно, но решало проблему масштабируемости.
Устранение угрозы со стороны гибкости транзакций в достаточной степени обезопасило систему биткоина, чтобы в неё можно было внедрять разного рода надстройки – сайдчейны.
Атака «дней рождения»
Адреса с мультиподписью в биткоине реализованы с применением обёртки P2SH (Pay to Script Hash) с защитой посредством хеширования HASH160 (160-битный хеш). Если проще, то в случае завладения мошенниками хотя бы 1 из ключей, который формирует одну из подписей в списке, если учесть возможные потенциальные коллизии значений хеша, количество возможных вариантов перебора снижается до 280, что вполне подъёмно для современных систем вычисления. То есть в таком случае злоумышленник получает шанс «вскрыть» хеши подписей при помощи обычного компьютера (или нескольких).
Для усложнения проведения «атаки дней рождения» в кошельках с поддержкой мультиподписи SegWit вместо P2SH применяет другую программную обёртку для адресов — P2WSH, которая имеет дополнительную защиту SHA256 и повышают количество возможных вариантов перебора до 2128.
Lightning Network
Lightning Network является надстройкой к биткоину и представляет собой платёжный протокол, работающий на базе прямых транзакционных каналов между пользователями сети. Эти каналы позволяют проводить сверхбыстрые внутрисетевые платежи. Анонсирована технология была в сентябре 2015 г. в Монреале на биткоин-конференции Scaling Bitcoin.
Lightning Network должен решать 4 задачи:
- устранение проблем с масштабируемостью;
- обеспечение высокоскоростных взаиморасчётов между пользователями с минимальной или нулевой комиссией;
- повышение анонимности системы;
- повышение анонимности системы;
Принцип работы Lightning Network
Допустим, Вася хочет покупать кофе в своей любимой кофейне каждое утро. Для этого Вася вместе с кофейней зачисляют определённое количество биткоинов на определённый адрес с мультиподписями, открывая тем самым совместный платёжный канал.
К примеру, Вася зачислил туда 0,01 BTC, а кофейня ничего. Кофе стоит 0,001 BTC. Таким образом, Вася сможет купить себе 10 стаканов кофе, просто перечисляя каждое утро в рамках канала по 0,001 BTC на счёт кофейни. Если Вася больше не захочет покупать кофе в этой кофейне, он может просто закрыть канал и всё проведённые в его рамках транзакции отправятся на обработку майнерами, запечатаются в определённый блок и включатся в основной блокчейн.
Фактически Lightning-канал представляет собой адрес с функцией мультиподписи. Для проведения транзакций через него необходимы подписи обеих сторон.
Пропускная способность канала определяется количеством зачисленных на наго средств. То есть, пользователь не сможет провести через канал больше средств, чем есть у него на балансе. Для этого необходимо либо, чтобы второй пользователь перевёл ему средства со своего баланса, либо заводить новый канал. Открытие канала происходит посредством escrow-транзакции, в которой подписантами выступают оба узла канала. Сама транзакция называется открывающей и отправляется на обработку майнерам, после чего записывается в один из последующих блоков и попадает в основной блокчейн. Транзакции между узлами lightning-сети в основной блокчейн не попадают, а проводятся исключительно в рамках каналов.
Передача средств в lightning каналах осуществляется без их переводов между балансами. По сути, получателю передаётся право собственности на то или иное количество биткоинов баланса отправителя. Всё это осуществляется посредством смарт-контрактов, которые ведутся в рамках канала. У каждого узла своя копия такого контракта и обе взаимосинхронизированы, то есть отображают одну и ту же информацию о взаимных платежах.
Это напоминает ситуацию с сейфом, в который два человека положили по 5 золотых слитков и заперли его на кодовый замок. После определённых имущественных сделок первый передал второму право на владение двумя из его слитков, таким образом, у первого осталось 4, а у второго 6. При открытии сейфа первый по договору может забрать 4 слитка, второй, соответственно, 6. Информация о состоянии балансов после взаимной передачи биткоинов в рамках канала синхронизировано заносится в смарт-контракты. Таким образом, когда Вася с имеющихся 0,01 BTC переведёт кофейне 0,001 BTC, в обеих версиях договоров отобразится информация о том, что у Васи сейчас 0,009 BTC, а у кофейни 0,001 BTC.
В основной блокчейн отправляется информация с закрывающей транзакции. Любая из сторон в праве в любой момент по своему желанию закрыть канал.
В основной блокчейн отправляется информация с закрывающей транзакции. Любая из сторон в праве в любой момент по своему желанию закрыть канал.
Таким образом, Lighting Network взаимодействует с основным блокчейном в двух ситуациях – при открывающей и при закрывающей транзакции.
В lightning-сети допускаются посреднические транзакции. То есть Васе и кофейне необязательно создавать прямой канал друг с другом. Если у Пети есть канал с кофейней, а у Васи есть канал с Петей, Вася через Петю может покупать свой кофе с уплатой небольшой комиссии. В данном случае Петя является посредническим узлом, или – нодой. Всё, что нужно для таких транзакций, это чтобы у Пети на балансе было достаточно средств для её проведения.
Переживать Васе о том, не присвоит ли Петя себе его средства не стоит, так как механизм Lighting Network при посреднических платежах таков, что Петя не сможет получить средства от Васи, пока не отправит такую же сумму кофейне. Если Петя не будет отвечать на запрос Васи об отправке платежа, то система начнёт искать другой более короткий путь для отправки денег, если и эта попытка не увенчается успехом, Васины биткоины просто вернутся ему на баланс.
Смарт-контракты могут создавать различные условия для выполнения сделок, не только для простого реестра расчётов между узлами. Например, Вася и Петя могут поспорить о чём то, завести в канал определённую сумму, и в случае, если одни из них выиграет спор, он получить все деньги с баланса канала. На данный момент смарт-контракты биткоина пока не так функциональны как в Etherium, но над этим ведётся работа.
Lighting Network даёт возможность применения такой технологии как Atomic Swap – кроссплатформенный обмен. Это когда из одной криптовалюты, монеты можно переводить в другую. В 2017 году был произведён первый подобный обмен между Bitcoin и сетью Litecoin.
Разработка Lighting Network
Код протокола Lighting Network является открытым и любой желающий может начать разработку собственной имплементации. Есть уже реализованные решения от ряда компаний, в том силе: ACINQ, Lightning Labs, Bitfury, Blockstream и др.
Минусы Lighting Network
- Пока Lightning Network находится в beta режиме, поэтому операции с крупными суммами лучше проводить традиционным способом;
- Большие суммы проводить затруднительно ещё и потому, что пропускная способность по объёму средств lightning-сети достаточно низкая. Как мы знаем через посреднические ноды проводить крупные платежи сложно, так как в лайтнинг-каналах большие деньги не заводят, а без этого переводы проходить не будут. Проводить через прямой канал между двумя узлами транзакцию бессмысленно, так как после перевода канал придётся сразу закрывать и отправлять на подтверждение в основной блокчейн, и завод денег в lightning будет просто лишним, а возможно и не совсем безопасным движением. В начальной версии протокола даже стояло ограничение на максимальную сумму перевода, которая составляла 0,04 BTC;
- В силу того, что Lightning Network работает по принципу пиринговой сети, проведение транзакций требует, чтобы все узлы – участники перевода находились онлайн. Если проводить платёж пока отправитель или один из ключевых узлов будет в офлайне, средства просто до него не дойдут и не отобразятся на его балансе, даже когда он появится в сети;
- В силу того, что Lightning Network работает по принципу пиринговой сети, проведение транзакций требует, чтобы все узлы – участники перевода находились онлайн. Если проводить платёж пока отправитель или один из ключевых узлов будет в офлайне, средства просто до него не дойдут и не отобразятся на его балансе, даже когда он появится в сети;
- В октябре 2019 г. в Lightning Network была обнаружена уязвимость к DdoS-атакам. Если создать большое количество нод и объявить безкомиссионные переводы, большая часть посреднических транзакций будет проходить через них. В такой ситуации эти ноды смогут просто тормозить переводы;
- Также многие остерегаются возможной централизации Lightning Network биткоина, ведь в январе 2019 г. 64% всей сети контролировались 1 участником.
Состояние на сегодня
Пока Lighting Network работает в тестовом режиме, но ряд видов платежей через неё уже можно осуществлять. Например, через Bitrefill можно пополнять баланс телефона или оплатить различные подарочные сертификаты.
Пропускная способность одного lightning-канала составляет около 500 транзакций в секунду. На октябрь 2019 г. общее количество открытых каналов составило более 28000. Если сеть продолжит расти и развиваться, она с лихвой сможет составить конкуренцию по пропускной способности Visa, Master Card, PayPal и другим популярным платёжным система.
Как устанавливается нода Lighting Network – общее описание?
Установить ноду Lighting Network можно на любом компьютере. Достаточно скачать и установить специальную программу от какого-нибудь разработчика (например, Eclair от ACINQ), после чего произвести все необходимые настройки в соответствии с предоставленными инструкциями.
Первые попытки форков биткоина
Bitcoin XT
Одна из первых попыток хардфорка биткоина, предпринятая в 2015 г. Изначально подразумевал возможность постепенного увеличения размера блока до 8 Мб, но в итоге было принято решение остановиться на единовременной установке в 2 Мб. В итоге Bitcoin XT потерпел неудачу и прекратил существование 22.04.2018 г.
Bitcoin Classic
Был запущен примерно в одно время с Bitcoin XT и также являлся форком Bitcoin Core. У него размер блока сразу составлял 2 Мб. Большая часть узлов Bitcoin Classic была фейковой и размещалась у одного провайдера. Попытка плавно привести размер блока от 1 к 2 Мб также провалилась из-за того, что в конечном итоге правило ограничения этого размера из программного протокола было выведено в распоряжение майнеров и пользователей сети.
Bitcoin Unlimited
В отличие от основного ядра Bitcoin Core, ограничение размера блока в Bitcoin Unlimited не задано программно, его определяют узлы сети и майнеры посредством своеобразного внутрисетевого голосования, которое базируется на так называемой идее «возникающего консенсуса». 14 марта 2017 г. в системе был обнаружен серьёзный баг, делающий сеть сильно уязвимой к хакерским атакам, из-за которого количество узлов в системе резко сократилось в 2 раза, после чего Bitcoin Unlimited стал терять интерес аудитории.
Гонконгское соглашение
В 2016 г. в Гонконге состоялась встреча между руководством компании Blockstream, которая является разработчиком Bitcion Core, а также надстройки SegWit и представителей нескольких крупных майнинговых пулов, которые были заинтересованы в неограниченном увеличении размера блока. На встрече должен был решаться вопрос об одновременном внедрении SegWit и увеличении блока до 2 Мб. Оба решения, в принципе, не противоречили друг другу. Тем не менее, консенсуса по этому вопросу достигнуто не было, так как Blockstream не было зафиксировано увеличения блока в проекте, после чего майнеры отказались от принятия соглашения.
BIP148
Это форк активируемый пользователями (механизм UASF — User Activated Soft Fork). Его суть такова, что при поддержке большинства нод (узлов сети, на которых скачана и установлена полная версия блокчейна) обновление системы происходит в определённую дату. Отличие от софтфорка состоит в том, что для активации второго необходима поддержка большинства майнеров через механизм MASF (Miner Activated Soft Fork), то есть тех, кому принадлежат мощности, поддерживающие работоспособность сети. Таким образом, BIP 148 требует поддержки так называемого экономического большинтсва сети: биржи, обменники, обычные пользователи, провайдеры кошельков и «лёгких клиентов».
Данный стандарт был придуман для того, чтобы вынудить майнеров принять SegWit, который постоянно отвергался в силу постоянных разногласий между ними и разработчиками системы по поводу дальнейшей концепции развития биткоина, а именно по вопросу увеличения блока и решения проблемы масштабируемости. Разработчикам был необходим только SegWit без увеличения размера блока. Майнеров же интересовала в первую очередь возможность создавать как можно большего объёма блоки, так как это значительно повышало комиссионные сборы (чем больше транзакций влезает в блок, тем больше суммарная комиссия за их проведение). Для подключения надстройки необходима была поддержка более 95% майнеров.
Получалось так, что в определённый день, а именно 1 августа 2017 года, все ноды биткоин должны были переходить на новый обновлённый протокол с SegWit. Псоле того, как 80% сети принимают обновление, майнеры, оказываясь в безвыходном положении, принимают его также, так как в случае отказа и дальнейшего блокирования BIP 148, они продолжают производить никому не нужный альткоин, который уже не поддерживается новой сетью, и не принимается остальными узлами.
В конечном итоге необходимость в BIP 148 отпала, так как майнеры решили проголосовать за новый стандарт BIP 91.
BIP 91
20 июля 2017 г. 95% майнеров, выступила за внедрение BIP 91. Его суть состояла в том, что с 1 августа 2017 г. должен быть запущен протокол, включающий реализацию SegWit2x с внедрением самого SegWit, но без немедленного удвоения размера блока. Многими сторонники увеличения размера блока посчитали, что такой апдейт будет выгоден исключительно, тем, кто рассматривает биткоин как площадку для инвестиций, а не для осуществления повседневных платежей. Да, благодаря освобождению блока от секции с подписями, места для транзакций становится больше, но всё равно, увеличение объёма его памяти до 2 Мб, позволило бы расширить возможности для осуществления мелких платежей. С 1 Мб же без задержек можно проводить, по большей мере, крупные транзакции с большими комиссиями, мелкие же будут дальше тормозить из-за ожидания в очередях.
SegWit2x
SegWit2x был предложен в качестве альтернативы традиционному SegWit, так как тот не решал полностью проблему масштабируемости, что вызывало недовольство со стороны майнеров. К тому же в протоколе по-прежнему присутствовали ошибки, и система продолжала подвергаться атакам со стороны хакеров.
Суть протокола состояла в том, чтобы запустить хардфорк, который реализовывал бы то же самое, что и традиционный SegWit, плюс в течение 6 месяцев постепенно увеличить размер блока до 2 Мб, чтобы поднять пропускную способность в 2 раза.
23 мая 2017 г. в Нью-Йорке состоялась конференция поп поводу реализации SegWit2x. Во встрече участвовали представители 58 крупных компаний и майнинг-пулов из биткоин-индустрии со всего мира. Разработка велась отдельной командой, котора не имела отношения к разработчикам Bitcoin Core и SegWit. В соответствии с принятыми в рамках конференции «Нью-Йоркскими соглашениями» реализация SegWit2x планировалась на август 2017, но из-за постоянных дискуссий и конфликтов в криптовалютном сообществе обсуждение по поводу внедрения проекта было перенесено на ноябрь 2017.
Первоначально идея была поддержана большинством участников конференции, но впоследствии встретила жёсткий отпор со стороны сообщества, различных разработчиков, в том числе Bitcoin Core, и особенно среди рядовых автономных майдеров и трейдеров. Негатив был вызван следующими обстоятельствами:
- Трейдеры считали, что форк будет выгоден исключительно крупным майнинг-пулам и отнимет у частных майнеров возможность самостоятельно добывать биткоины;
- SegWit2x предусматривался как хардфорк, что вызвало бы разделение криптовалюты на 2 отдельные цепочки и тем самым раскололо бы сообщество, что поставило бы под удар само дальнейшее существование биткоина;
- В протоколе форка отсутствовала нормальная защита от двойной траты. Получалось так, что SegWit2x должен был продолжить принимать транзакции из основной цепочки с защитой от двойной траты, актуальной только для новой цепи. То есть те, кто использует старое ПО, или по каким-то причинам не может перейти на SegWit2x будут уязвимы, так как проводимые ими транзакции могут быть дублированы в новой цепи. Таким образом, пользователя основного биткоина могли бы быть подвержены случайной потере средств.
В итоге, в интернете развернулась целая кампания против запуска SegWit2x, которая носила название NO2X.
Разногласия разработчиков по поводу изменения структуры основного протокола биткоина привели к возникновению двух хардфорков, первым из которых стал Bitcoin Cash, запущенный 1 августа 2017 г., а вторым Bitcoin Gold 25 ноября. При этом если создание BCH и BTG изначально планировался как запуск отдельных валют, то SegWit2x должен был вытеснить исходную цепочку биткоина и полностью заменить её.
Таким образом, разработчикам SegWit2x никак не удавалось переманить на свою сторону большую часть сообщества. Часть компаний, поддержавших «Нью-Йоркские соглашения», наблюдая за эскалацией конфликта, предпочли выйти из них и держаться в стороне.
В итоге, в ноябре 2017 г. разработчики протокола, наблюдая за ситуацией и понимая, что речь может идти о дальнейшем существовании сети в целом, решили отменить хардфорк на неопределённый срок, мотивировав это тем, что они не могут достигнуть консенсуса по поводу нововведений с большинством сообщества.
Тем не менее, проект SegWit2x не был полностью заморожен. Есть предположения, что работы по его усовершенствованию ведутся далее, хотя и не так активно.
Хардфорк Bitcoin Cash
Хардфорк возник после того, как группа разработчиков во главе с бывшим сотрудником Facebook Амори Сечетом отказалась принимать SegWit2x и для решения проблемы масштабируемости предложила свой вариант сценария. По сути, форк является инициативой майнингового пула viaBTC и компании Bitmain.
Bitcoin Cash появился 01.08.2017 г. в результате ветвления основной цепи биткоина. До 478558 блока обе криптовалюты имеют общую цепочку и один протокол, начиная с блока 478559 и протокол, и цепочка отличаются от исходной версии.
К основным отличительным характеристикам Bitcoin Cash от биткоина относятся:
- размер блока увеличивается до 8 Мб, что значительно повышает пропускную способность и поднимает скорость платежей;
- пересчёт параметра «сложность» происходит через каждые 6 блоков, а не 2016 как в биткоине;
- свой алгоритм хеширования подписи.
В остальном отличия минимальны.
После ветвления, каждый пользователь, имевший на своих кошельках биткоины, автоматически получил такое же количество Bitcoin Cash. Такая ситуация создала проблему в чём-то схожую с двойной тратой. С одного адреса можно провести 2 разные транзакции, используя одни и те же ключи. При этом благодаря разным алгоритмам хеширования цифровых подписей и использованию различного ПО, конфликтов между двумя протоколами при осуществлении транзакций с одного не возникает, система считает, что они используют разную валюту.
Изначально ряд бирж, например, та же Coinbase, отказались обрабатывать Bitcoin Cash. Однако, впоследствии, криптовалюта получила широкое распространение, и с ней стали работать большинство обменных сервисов, в том числе Kraken, Bitfinex, Poloniex.
Майнить Bitcoin Cash с помощью процессоров и видеокарт бесполезно, это не принесёт прибыли. Майнинг имеет смысл только на ASICах, желательно с частотой не менее 300 GH/s. Если возможности купить подходящее оборудование нет, то лучше пользоваться услугами облачного майнинга.
Общий вывод по масштабированию биткоина
Проблема масштабирования в биткоине пока не решена. Ни один из софтфорков и хардфорков даже близко не приблизил биткоин по пропускной способности и безопасности к современным платёжным системам. Все решения, которые пытались внедрять, либо потерпели фиаско, либо работают только в бета-режиме. Наиболее перспективными из внедрений считаются SegWit в сочетании с Lightning Network, но на их полноценной развитие ещё уйдёт время, и сколько именно пока тяжело оценить.
Мультиподписи
В биткоине возможна реализация транзакций, которые могут быть проведены исключительно через подписание их несколькими приватными ключами, то есть пользователями. Они называются escrow-транзакциями.
Существует такое понятие как Multisignature address (адрес с мультиподписью). Это адрес, к которому одновременно привязываются несколько пар приватных и публичных ключей. Именно с таких адресов отправляются средства в мультиподписных транзакциях.
Кстати, Lightning Network также работает на multisig-адресах.
Мультиподписи используются в следующих целях:
- повышение безопасности платёжных переводов;
- разделение ответственности между держателями средств в процессе управления ими.
Escrow-транзакция может быть проведена несколькими пользователями, имеющими право доступа к битоинам, хранящимися на multisig-адресе, либо одним пользователем, который владеет двумя приватными ключами, ранее привязанными им к этому адресу в целях большей безопасности.
Принципы проведения escrow-транзакций:
- 2 из 2. Требуются подписи всех участников транзакции;
- 2 из 3. Требуются подписи только определённого заранее количества (не обязательно всех) владельцев средств на multisig-адресе.
Максимально допустимое количество подписантов в рамках системы мультиподписей биткоина — 15 из 15.
Как происходит транзакция с мультиподписью?
Из ранее описанного, мы знаем, что одним из составляющих любой транзакции в биткоине является параметр scriptSig. В нём содержатся хешированный публичный ключ и подпись отправителя, которая этим публичным ключом и проверяется.
В транзакции с мультиподписью в scriptSig будут содержаться несколько подписей и соответствующих им публичных ключей.
Генерация multisig-адреса происходит посредством хеширования сконкотенированных (соединённых) в определённом порядке публичных ключей из scriptSig, которые принадлежат владельцам (возможно нескольким) этого адреса. Потратить деньги с multisig-адреса можно только при предоставлении соответствующих этим адресам подписей, которые проверяются указанными публичными ключами соответственно.
2 из 2
Пример использования
Муж и жена собирают на машину. Они создают multisig-адрес и переводят на него собираемые средства. У каждого из них есть свой приватный ключ, привязанный к этому адресу. Так супруги могут быть уверены, что собираемые деньги не уйдут на нецелевые расходы, так как для снятия накоплений нужны подписи обоих. При накоплении достаточной суммы они коллегиально могут принять решение о покупке той или иной модели автомобиля.
Допустим, они не сошлись во мнениях касаемо модели и один на эмоциях уничтожил свою бумажку с приватным ключом. Решить эту проблему можно через методы Hash type и LockTime.
Hash type и LockTime
Hash Type – это метод покрытия транзакции подписью, позволяющий создать транзакцию, на выход которой можно подать не конкретную сумму, а ссылку на другую транзакцию, с которой эти средства будут списаны. Через Hash Type можно создать цифровую подпись транзакции, а некоторую информацию, например, о входах, можно будет внести потом. Получается, что есть способ открыть транзакцию, которая сможет потратить деньги с другой ещё не созданной транзакции и сделает это в нужный пользователям момент.
LockTime – это механизм, который позволяет отложить выполнение транзакции до определённого времени. Таким образом, муж и жена могут создать 2 транзакции через hash type с ограничением LockTime, которые в нужную минуту смогут отправить средства в заранее определённых долях на их собственные биткоин-адреса.
Таким образом, если один из ключей multisig-адреса будет утерян, через, например, 1 месяц LockTime-транзакция автоматом отправит с этого адреса деньги на адреса мужа и жены, и они никуда не пропадут.
Вышеописанный пример довольно примитивен, на самом деле язык программирования биткоина Scrypt позволяет строить гораздо более сложные сценарии.
2 из 3
Данный принцип подходит, когда, например, у компании есть несколько учредителей и общий денежный фонд, траты по которому производятся с согласия большинства держателей доли. Понятное дело, что с определёнными расходами организации не все члены совета учредителей могут соглашаться и в таком случае, необходимо проводить своего рода голосование. При этом, нужно, чтобы несогласные не могли произвольно выводить свои средства из общего фонда. Голосование происходит подписанием транзакции приватным ключом каждого из учредителей. При наборе необходимого количества подписей трата будет совершена. Мнение несогласных учитываться не будет. Своеобразная «власть большинства».
Как уже ранее упоминалось можно использовать до 15 подписей, то есть, например – 7 из 14.
Кошельки с мультиподписями
Из наиболее популярных кошельков, поддерживающих функцию multisignature, можно выделить следующие:
- Armory;
- Electrum;
- Copay;
- BitGo;
- Coinbase;
- MIST.
У каждого кошелька свой функционал и различные условия использования.
Варианты хранения приватных ключей разные:
- у самих пользователей;
- хранение одного ключа в кошельке, но без предоставления ему права совершения платежей, только для бэкапов;
- можно хранить на серверах кошелька, шифруя его предварительно паролем.