Void
Виртуозы
- Регистрация
- 2 Фев 2013
- Сообщения
- 528,854
Bitcoin (от англ. bit — бит и coin — монета) — пиринговая система электронной наличности, использующая одноимённую цифровую валюту, которую часто называют криптовалютой или виртуальной валютой. Сеть полностью децентрализована, не имеет центрального администратора или какого-либо его аналога.
Bitcoin могут использовать для оплаты товаров или услуг у продавцов, готовых их принимать. Есть возможность обмена на обычные деньги через специализированные площадки для торгов или обменники.
Одна из особенностей — эмиссия новых bitcoin. Она децентрализованная, лимитирована по объёму и времени, распределяется относительно случайно среди желающих, которые используют вычислительные мощности своего оборудования для защиты платёжной системы методом proof-of-work от повторного расходования средств. Деятельность по обслуживанию системы с возможностью получить вознаграждение в форме эмитированных bitcoin и комиссионных сборов получила название майнинга (от англ. mining — добыча полезных ископаемых).
Базовым элементом этой платёжной системы является программа-клиент с открытым исходным кодом. С помощью сетевого протокола прикладного уровня запущенные на множестве компьютеров клиенты соединяются между собой в одноранговую сеть.
Для обеспечения функционирования и защиты системы используются криптографические методы.
История создания
Идеи криптовалюты «b-money» описал в 1998 году Вэй Дай (англ. Wei Dai) в рассылке шифропанков. Также свои предложения сделал Ник Сабо (англ. Nick Szabo) под названием «Bitgold».
В 2008 году человеком или группой лиц под псевдонимом[13] Сатоси Накамото[en] (англ. Satoshi Nakamoto) был опубликован файл с описанием протокола и принципа работы одноранговой сети. По словам Сатоси, разработка началась в 2007 году. В 2009 году он закончил разработку протокола и опубликовал клиент, после чего сеть была запущена.
Дальнейшую разработку организует и координирует Гэвин Андресен[en] (англ. Gavin Andresen).
Описание
Платёжное средство, используемое в системе Bitcoin, представляет собой цифровые монеты — криптографическую сущность, отвечающую определённым требованиям.
Котировка bitcoin основана на доверии к нему, формируется исключительно балансом спроса и предложения, не привязана к какой-либо валюте или другому активу. В отличие от фиатных денег, bitcoin не имеет органа (центробанка или государства), который бы стремился обеспечить ликвидность на заданном уровне, обязался сам и/или обязывал других принимать оплату в bitcoin-монетах или мог бы искусственно снизить его покупательную способность путём дополнительной эмиссии. Bitcoin является электронной наличностью, а не долговым обязательством эмитента, что отличает его от традиционных электронных денег и безналичных расчётов.
Часто утверждается, что ограничение эмиссии является защитой от инфляции. Ряд авторов считают, что ограниченное количество bitcoin не является достаточным условием для гарантирования тенденции роста курса, так как ещё одним необходимым условием для этого является увеличение объёма предложения товаров и услуг за bitcoin и сервисов, связанных с ним. То есть неспекулятивная ценность bitcoin напрямую зависит от объёма только тех товаров и услуг, которые можно будет за них приобрести, а не общемировой товарной массы.
Эмиссия и оборот bitcoin полностью децентрализованы, не зависят от какого-либо регулирующего органа, объём эмиссии известен заранее. Данные о перемещении и эмиссии bitcoin хранятся в распределённой базе данных. Bitcoin-монеты могут быть отправлены любому другому пользователю системы. При этом можно использовать любые дробные суммы с точностью до восьмого знака после десятичной запятой. Все транзакции находятся в открытом доступе, но без раскрытия информации о реальном владельце. Каждый пользователь может создать себе неограниченное количество адресов. Для повышения анонимности рекомендуется делать новый адрес получателя для каждой транзакции. Секретные ключи асимметричных пар ключей адресов пользователя хранятся в его файле кошелька wallet.dat, а соответствующие им публичные ключи используются для формирования bitcoin-адресов.
Гипотетически есть ненулевая вероятность, что цепочка блоков будет аннулирована и в системе главной будет признана другая цепочка блоков. Вероятность такого события резко понижается с ростом длины цепочки. Но если контролировать более половины вычислительной мощности всей сети, то такая подмена возможна для любой цепочки, что гипотетически позволяет реализовать двойную трату одних и тех же bitcoin.
Принцип одноранговой сети и отсутствие административного центра делает невозможным государственное или частное регулирование системы, а также манипуляции с изменением суммарного количества bitcoin.
Эмиссия осуществляется автоматически: новые bitcoin-монеты в качестве вознаграждения получают относительно случайным образом те, кто использует вычислительные мощности своего оборудования для поддержания работы системы Bitcoin (для создания новых блоков базы). Объём эмиссии алгоритмически ограничен так, чтобы общее количество эмитированных bitcoin не превысило 21 миллиона. Первоначально размер вознаграждения за каждый созданный блок составлял 50 bitcoin-монет. После формирования каждых 210000 блоков (приблизительно раз в 4 года) размер вознаграждения будет уменьшаться вдвое. 28 ноября 2012 года произошло первое уменьшение эмиссионной составляющей награды с 50 до 25 bitcoin. На 6930000 блоке (примерно в 2131 году) эмиссия будет остановлена вовсе (размер вознаграждения 50 → 25 → 12.5 → … → 0).[21] Формирование блоков продолжится и далее, но за них уже не будет начисляться вознаграждение эмитированными bitcoin. Система предусматривает возможность взимать комиссию за обработку транзакций с участников. На сегодня уплата такой комиссии возможна в добровольном порядке, но не является обязательной. Предполагается, что когда вознаграждение за новый блок в форме эмиссии существенно сократится, основным источником стимулирования станут комиссионные сборы.
Деятельность по созданию новых блоков с возможностью получить вознаграждение в форме эмитированных bitcoin и комиссионных сборов получила название «майнинг» (от англ. mining — добыча полезных ископаемых). Производимые вычисления требуются для обеспечения защиты от повторного расходования одних и тех же bitcoin, а связь майнинга с эмиссией стимулирует людей расходовать свои вычислительные мощности и поддерживать работу сети.
Майнингом можно заниматься как в одиночку (соло-майнинг), так и совместно, воспользовавшись услугами специализированных веб-служб, которые называют «пулами» (от англ. pool — общий фонд). Пользователи предоставляют пулу свои вычислительные мощности. Особенность задачи позволяет применить максимальное распараллеливание вычислений, когда каждый участник ищет свой вариант решения без увязки его результатов с решениями других. В свою очередь, пул, осуществляя соло-майнинг, распределяет полученные им bitcoin между пользователями, в соответствии с установленными владельцем пула правилами. Основная причина объединения в пулы — уменьшение риска длительного неполучения награды. Вероятность получения награды соло-майнером в произвольный десятиминутный период приблизительно равна соотношению его вычислительной мощности к вычислительной мощности всей сети. И если это соотношение очень маленькое, то вероятность получения награды даже за длительный промежуток времени также будет низкой. В первых версиях клиента была кнопка «сгенерировать новые биткойны», но после создания программного обеспечения для майнинга на видеокартах и FPGA используемый в клиенте майнинг при помощи центрального процессора оказался нерентабельным из-за слишком малой вероятности получить вознаграждение, и кнопку убрали. В настоящее время майнинг на видеокартах также стал нерентабельным, и в сети используются специально разработанные для майнинга интегральные схемы.
Передача bitcoin-монет осуществляется напрямую, без посредничества каких-либо финансовых организаций. Отмена стандартных транзакций невозможна, однако возможно использование мультиподписей, в том числе для сделок с участием арбитра. Нет обязательной комиссии, однако комиссия может быть уплачена добровольно для ускорения обработки операций.
Технические подробности
Терминология
С Bitcoin сталкиваются как IT-специалисты, так и менее квалифицированные пользователи. В связи с этим, с одной стороны, сформировалась система бытовых терминов, используемая обычными пользователями, а с другой стороны, сформировалась система терминов для специалистов, которая в основном исходит от разработчиков Bitcoin-qt и Bitcoind. Расхождения касаются наиболее часто используемых терминов. Перечислим их:
Хранение данных
БД публично хранит в незашифрованном виде информацию о всех транзакциях, подписываемых с помощью асимметричного шифрования. Для предотвращения многократной траты одной и той же суммы используются метки времени, реализованные путём разбиения БД на цепочку специальных блоков, каждый из которых, в числе прочего, содержит в себе хеш предыдущего блока и свой порядковый номер. Каждый новый блок осуществляет подтверждение транзакций, информацию о которых содержит и дополнительное подтверждение транзакций во всех предыдущих блоках цепочки. Для уменьшения размера БД используется древовидное хеширование.
Для более наглядного объяснения механизма работы платёжной системы Сатоси Накамото ввёл понятие «цифровая монета»[28], определив его как цепочку цифровых подписей. Исходя из данного определения, каждая монета имеет свой собственный номинал. Каждому bitcoin-адресу может сопоставляться любое количество монет. При помощи транзакций монеты можно делить и объединять, при этом их суммарный номинал за вычетом комиссии сохраняется.
Транзакции
Когда один пользователь передаёт некую сумму другому пользователю, он создаёт новую транзакцию, которая содержит хеш предыдущей транзакции, подписанный им, и публичный ключ следующего владельца. Затем эта информация широковещательным запросом отправляется в сеть. Остальные узлы сети проверяют подписи, прежде чем принять транзакцию к обработке.
Транзакции поддерживают множественные входы (результаты предыдущих транзакций) и выходы (указания о получателях). В общем случае транзакция может содержать произвольное количество выходов (возможны случаи, когда необходимо передать средства нескольким получателям с помощью одной транзакции, что позволит сэкономить на комиссионных сборах). Транзакция также может содержать множество входов, которые могут являться даже совпадающими bitcoin-адресами. Такое может иметь место, когда было несколько входящих транзакций на один адрес. Каждая первая и только первая транзакция в блоке не имеет входов и зачисляет вознаграждение за создание данного блока. Такая транзакция должна получить 120 подтверждений, чтобы полученные с помощью неё bitcoin могли быть использованы. Значения со всех входов суммируются, и сумма распределяется по выходам. Разница между суммой на входе и суммой на выходе считается комиссией за осуществление транзакции. Размер вознаграждения, зачисляемого первой транзакцией, является суммой всех комиссий у транзакций, включённых в блок, и фиксированного значения, изначально равного 50 и уменьшающегося вдвое каждые 210000 блоков.
Транзакции обязательно содержат указания о получателях, например, bitcoin-адреса или иные условия.
Большинство транзакций, имеющих входы, имеют минимум два выхода: с указателем получателя монеты с номиналом, равным отправленной сумме, и указателя на отправителя для «сдачи» — монеты с номиналом, который остался от суммарного номинала на входе за вычетом комиссии. «Bitcoin-qt» отправляет каждую сдачу на новый bitcoin-адрес из резерва заранее созданных и скрытых от пользователя адресов. Информация о том, какая именно монета является сдачей, отсутствует в БД.
Ключи
Каждый пользователь системы может генерировать неограниченное количество пар ключей, которые хранятся в специальном файле (кошельке). Для создания новых пар ключей используется алгоритм ECDSA с параметрами secp256k1. Размер закрытого ключа — 256 бит, а соответствующего ему открытого ключа — 512 бит. Создание новой пары ключей автономно и не требует соединения с сетью.
Адресация
Передача bitcoin происходит с выставлением условий для получателя. Воспользоваться суммой сможет тот, кто сможет выполнить все условия. Стандартным условием является использование bitcoin-адреса. Но условия могут быть и другими, например, последовательное использование нескольких bitcoin-адресов и/или привязка к определённому IP-адресу. Bitcoin-адрес генерируется на основе преобразования публичного ключа пользователя. Секретные (приватные) ключи авторизуют владельца. Bitcoin-адреса не содержат персональной информации о владельце. Человек может иметь множество адресов, создавая их по собственной инициативе, для чего даже не требуется подключение к интернету. Создание адреса лишь для одной транзакции или одного корреспондента помогает сохранить анонимность.
Bitcoin-адрес в текстовой форме представляет собой строку Base 58 длиной до 34 символов, состоящую из букв латинского алфавита и цифр, например 175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W. Существуют варианты представления адресов в виде QR-кодов и других двухмерных штрихкодов, пригодных для считывания мобильными устройствами.
Цепочка блоков
Любые транзакции не считаются легитимными (не считаются «подтверждёнными»), пока информация о них не будет сгруппирована в специальные структуры — блоки. Структура и информация в блоках подчиняется заданным правилам и её можно быстро проверить. Каждый блок всегда содержит информацию об одном предыдущем блоке. Это позволяет все существующие блоки выстроить в одну цепочку, которая представляет собой распределённую базу данных и содержит информацию о всех совершённых когда-либо операциях с bitcoin.
Блоки одновременно создают множество майнеров. Регулярно возникают ситуации, когда один и тот же блок является предыдущим для двух новых блоков. В каждом из новых блоков могут встречаться как одинаковые транзакции, так и разные, то есть вошедшие только в один из них. Через некоторое время появляются очередные блоки, цепочка может раздвоиться. Каждая из ветвей равноправна до тех пор, пока одна из них не получит более длинное продолжение. Обычно, при равенстве длины, предпочтение отдаётся той цепочке, конечный блок которой появился раньше. Система автоматически легитимной считает более длинную цепочку, не обращая внимание на время создания последнего блока. Транзакции, вошедшие исключительно в менее длинную ветку (в том числе по выплате вознаграждения), теряют статус подтверждённых. Если это транзакция по передаче bitcoin, то она может быть включена в очередной блок. Транзакции получения вознаграждения за создание отсечённых блоков не дублируются в другой ветке, то есть «лишние» bitcoin за отсечённые блоки не получают дальнейших подтверждений и «утрачиваются».
Таким образом, цепочка блоков содержит историю владения, с которой можно ознакомиться, например, на специализированных сайтах.
Атака «Double Spending»
Если пользователь попытается использовать ранее потраченные bitcoin-монеты снова, сеть не примет его транзакцию как действительную. Но в параллельных ветках блоков могут находиться транзакции, которые по разному расходуют одни и те же начальные средства. Вероятность существования параллельных цепочек блоков крайне мала и экспоненциально уменьшается с ростом длины цепочки и количества независимых майнеров. Таким образом, чем больше подтверждений имеет транзакция, тем менее вероятна отмена транзакции из-за отмирания содержащей её цепочки блоков. Однако при наличии у злоумышленника контроля над достаточно большой долей суммарной мощности майнинга существует ненулевая вероятность «тайного» выстраивания длинных параллельных цепочек блоков. После их публикации в сети главной будет признана более длинная цепочка. Отмена цепочки блоков может приводить к признанию недействительными транзакций даже подтвержденных несколькими блоками и последующей повторной трате средств.
При наличии в одних руках свыше 50 % суммарной мощности майнинга такая ситуация возможна на любом уровне подтверждения (атака «Double Spending» или «атака 51 %»)[32]. Если подконтрольная мощность меньше 50 %, то вероятность успеха экспоненциально снижается с каждым подтверждением.
Проведение успешной атаки не позволяет:
На начало 2013 года мощность сети составляла менее 25 THash/s, но за последующие 3 месяца выросла до 55 за счет массового распространения специализированных процессоров (ASIC), разработанных специально для майнинга в сети Bitcoin. В середине июля 2013 года мощность сети превысила 210,46 THash/s. К сентябрю мощность превысила 1000 THash/s, в октябре мощность удвоилась[34], а на 1 декабря 2013 года превысила 6000 THash/s . При этом пользователь с наибольшей производительностью имеет менее 100 THash/s.
Структура блока
Блок состоит из заголовка и списка транзакций. Заголовок блока включает в себя свой хеш, хеш предыдущего блока, хеши транзакций и дополнительную служебную информацию. Первой транзакцией в блоке всегда записывается генерация новых bitcoin-монет, которые в случае успешной генерации блока станут наградой пользователю за созданный блок. Далее идут все или некоторые из последних транзакций, которые ещё не были записаны в предыдущие блоки.
Созданный блок будет принят остальными пользователями, если числовое значение хеша заголовка равно или ниже определённой цели, величина которой периодически корректируется. Если блок не удовлетворяет цели, то изменяется блок служебной информации в заголовке и хеш пересчитывается. Обычно требуется большое количество попыток, так как результат хеширования (функции SHA-256) практически непредсказуем. Когда вариант найден, узел рассылает полученный блок другим подключенным узлам. Другие узлы проверяют блок. Если ошибок нет, то блок считается добавленным в цепочку и следующий блок должен включить в себя его хеш.
Величина целевого числа, с которым сравнивается хеш, корректируется через каждые 2016 блоков. Запланировано, что вся сеть будет тратить на генерацию одного блока примерно 10 минут, на 2016 блоков — около двух недель. Если 2016 блоков сформированы быстрее, то цель немного уменьшается и достичь её становится труднее, в противном случае цель увеличивается. Изменение сложности вычислений не влияет на надёжность сети Bitcoin и требуется лишь для того, чтобы система генерировала блоки почти с постоянной скоростью, не зависящей от мощности сети.
Эмиссия
Bitcoin предусматривает только одну возможность для дополнительной эмиссии — новые bitcoin-монеты начисляются в качестве вознаграждения тому, кто сгенерировал очередной блок, получивший 120 подтверждений.
Первоначально эмиссия составляла 50 bitcoin в каждом блоке. После 2012-11-28 15:24:38 UTC значение уменьшилось до 25 bitcoin, в соответствии с алгоритмом. На май 2014 года в обращении находилось 12,7 миллионов bitcoin, что составляет более половины их максимально возможного предельного количества в 21 миллион.
Желающие получить возможно большее вознаграждение стремились задействовать как можно большие вычислительные мощности. Особенность задачи позволяла применить максимальное распараллеливание вычислений. В силу специфики строения, для этого хорошо подошли графические процессоры (GPU) с небольшой дополнительной программой (в сотни раз производительнее CPU[39]) и платы с FPGA (производительность сравнима с видеокартами, но превосходят их по энергоэффективности). Затем были выпущены специализированные процессоры (ASIC), выполняющие только вычисление хешей для Bitcoin, более производительные чем GPU и FPGA.
Сложность
За требование к хешам блоков отвечает специальный параметр, называемый «сложность». Так как вычислительные мощности сети непостоянны, этот параметр пересчитывается клиентами сети через каждые 2016 блоков таким образом, чтобы поддерживать среднюю скорость формирования распределённой БД на уровне 2016 блоков в две недели. Таким образом 1 блок должен создаваться примерно раз в десять минут. После создания 210 000 блоков (на что требуется примерно 4 года) вдвое уменьшается размер эмиссионного вознаграждения майнеров (снижается скорость эмиссии). На практике, когда вычислительная мощность сети растёт — соответствующие временные промежутки короче, а когда снижается — длиннее. Перерасчёт сложности с привязкой ко времени возможен благодаря наличию в заголовках блоков времени их создания. Оно записано в Unix-формате и взято по системным часам автора блока (если блок создан в пуле, то из системных часов сервера этого пула)
Пулы
Для уменьшения влияния фактора удачи и более равномерного и предсказуемого получения bitcoin майнеры используют пулы. Часто выплаты майнеру рассчитываются исходя из отправленных им пулу шар (shares) (блоков с хешем, который подошёл бы при сложности равной единице). В среднем нужно 232 операций хеширования для нахождения одной шары. Для нахождения блока в среднем требуется количество шар, равное текущей сложности.
Существуют 3 основных типа начисления наград:
У этих типов начисления есть следующие популярные варианты:
Подтверждение транзакций
Обычно при получении bitcoin-монет новый владелец не может сразу же передать их. Для уменьшения вероятности двойного использования, любая транзакция должна получить некоторое количество подтверждений. Одним подтверждением считается один новый блок, начиная с того, в котором упакована транзакция. Необходимое число подтверждений зависит от программы-клиента либо от указаний принимающей стороны.
Bitcoin-монеты, полученные за создание блока, протокол разрешает использовать после 120 подтверждений. Если учесть, что скорость появления блоков поддерживается на уровне 1 блок в 10 минут, воспользоваться комиссией можно через 20 часов после успешного начисления. Полученные от других пользователей bitcoin-монеты клиент «Bitcoin-qt» позволяет использовать сразу, но у большинства получателей по умолчанию выставлено требование 6 подтверждений, то есть реально воспользоваться полученным обычно можно через час. Различные онлайн-сервисы часто устанавливают свой порог подтверждений.
Комиссионные сборы
В системе Bitcoin не предусмотрено обязательных комиссионных сборов. Пользователи могут добровольно включать в платёж произвольную сумму комиссионного сбора, подавая на вход транзакции больше средств, чем на выход, что повышает приоритет обработки такой транзакции. Различные программы-клиенты имеют свои правила относительно размера и объекта комиссионных сборов.
Комиссионный сбор достаётся узлу, сгенерировавшему блок с такой транзакцией. Генерирующий новый блок пользователь может по своему усмотрению добавлять в него транзакции из очереди. Например, он может отобрать только транзакции с комиссионным сбором.
Объём данных
В программах-клиентах была добавлена система, организующая записи транзакции таким образом, что пользователь может локально удалять данные из своей базы, которые ему точно не понадобятся. После того, как все транзакции с какими-то средствами были упакованы в блоки и подтверждены, предыдущие транзакции с этими средствами можно отбросить для экономии места на диске. Для того, чтобы это можно было осуществить без изменения хеша блока, транзакции хешируются с помощью TTH, и в заголовок блока помещается только результат данного хеширования.
Сейчас все пользователи официального клиентского ПО после запуска программы в первый раз получают полную базу данных (блоки без индексации и оптимизации). По состоянию на май 2014 её размер составлял более 20 ГБ.
Заголовок блока имеет объём около 80 байт. Так как блоки генерируются примерно каждые 10 минут, то за год будет накапливаться около 4,2 Мб заголовков блоков.
Программный интерфейс
Программное обеспечение сетевого узла существует в двух видах: приложение с графическим интерфейсом и фоновое приложение. В обоих случаях оно может управляться через программный интерфейс по протоколу JSON-RPC (RFC 4627).Это позволяет достаточно просто решить такие задачи, как:
Майк Хёрн (Mike Hearn), сотрудник компании Google, в рамках программы «20 % рабочего времени сотрудника» реализовал программное обеспечение узла Bitcoin на языке Java — BitcoinJ[50]. Эта реализация ограничена лишь пользовательскими функциями (такой узел не может проверять транзакции и блоки, создавать блоки, а может лишь создавать новые транзакции). Это является шагом в сторону мобильных приложений, использующих Bitcoin.
Источник: http://ru.wikipedia.org/wiki/Bitcoin
Bitcoin могут использовать для оплаты товаров или услуг у продавцов, готовых их принимать. Есть возможность обмена на обычные деньги через специализированные площадки для торгов или обменники.
Одна из особенностей — эмиссия новых bitcoin. Она децентрализованная, лимитирована по объёму и времени, распределяется относительно случайно среди желающих, которые используют вычислительные мощности своего оборудования для защиты платёжной системы методом proof-of-work от повторного расходования средств. Деятельность по обслуживанию системы с возможностью получить вознаграждение в форме эмитированных bitcoin и комиссионных сборов получила название майнинга (от англ. mining — добыча полезных ископаемых).
Базовым элементом этой платёжной системы является программа-клиент с открытым исходным кодом. С помощью сетевого протокола прикладного уровня запущенные на множестве компьютеров клиенты соединяются между собой в одноранговую сеть.
Для обеспечения функционирования и защиты системы используются криптографические методы.
История создания
Идеи криптовалюты «b-money» описал в 1998 году Вэй Дай (англ. Wei Dai) в рассылке шифропанков. Также свои предложения сделал Ник Сабо (англ. Nick Szabo) под названием «Bitgold».
В 2008 году человеком или группой лиц под псевдонимом[13] Сатоси Накамото[en] (англ. Satoshi Nakamoto) был опубликован файл с описанием протокола и принципа работы одноранговой сети. По словам Сатоси, разработка началась в 2007 году. В 2009 году он закончил разработку протокола и опубликовал клиент, после чего сеть была запущена.
Дальнейшую разработку организует и координирует Гэвин Андресен[en] (англ. Gavin Andresen).
Описание
Платёжное средство, используемое в системе Bitcoin, представляет собой цифровые монеты — криптографическую сущность, отвечающую определённым требованиям.
Котировка bitcoin основана на доверии к нему, формируется исключительно балансом спроса и предложения, не привязана к какой-либо валюте или другому активу. В отличие от фиатных денег, bitcoin не имеет органа (центробанка или государства), который бы стремился обеспечить ликвидность на заданном уровне, обязался сам и/или обязывал других принимать оплату в bitcoin-монетах или мог бы искусственно снизить его покупательную способность путём дополнительной эмиссии. Bitcoin является электронной наличностью, а не долговым обязательством эмитента, что отличает его от традиционных электронных денег и безналичных расчётов.
Часто утверждается, что ограничение эмиссии является защитой от инфляции. Ряд авторов считают, что ограниченное количество bitcoin не является достаточным условием для гарантирования тенденции роста курса, так как ещё одним необходимым условием для этого является увеличение объёма предложения товаров и услуг за bitcoin и сервисов, связанных с ним. То есть неспекулятивная ценность bitcoin напрямую зависит от объёма только тех товаров и услуг, которые можно будет за них приобрести, а не общемировой товарной массы.
Эмиссия и оборот bitcoin полностью децентрализованы, не зависят от какого-либо регулирующего органа, объём эмиссии известен заранее. Данные о перемещении и эмиссии bitcoin хранятся в распределённой базе данных. Bitcoin-монеты могут быть отправлены любому другому пользователю системы. При этом можно использовать любые дробные суммы с точностью до восьмого знака после десятичной запятой. Все транзакции находятся в открытом доступе, но без раскрытия информации о реальном владельце. Каждый пользователь может создать себе неограниченное количество адресов. Для повышения анонимности рекомендуется делать новый адрес получателя для каждой транзакции. Секретные ключи асимметричных пар ключей адресов пользователя хранятся в его файле кошелька wallet.dat, а соответствующие им публичные ключи используются для формирования bitcoin-адресов.
Гипотетически есть ненулевая вероятность, что цепочка блоков будет аннулирована и в системе главной будет признана другая цепочка блоков. Вероятность такого события резко понижается с ростом длины цепочки. Но если контролировать более половины вычислительной мощности всей сети, то такая подмена возможна для любой цепочки, что гипотетически позволяет реализовать двойную трату одних и тех же bitcoin.
Принцип одноранговой сети и отсутствие административного центра делает невозможным государственное или частное регулирование системы, а также манипуляции с изменением суммарного количества bitcoin.
Эмиссия осуществляется автоматически: новые bitcoin-монеты в качестве вознаграждения получают относительно случайным образом те, кто использует вычислительные мощности своего оборудования для поддержания работы системы Bitcoin (для создания новых блоков базы). Объём эмиссии алгоритмически ограничен так, чтобы общее количество эмитированных bitcoin не превысило 21 миллиона. Первоначально размер вознаграждения за каждый созданный блок составлял 50 bitcoin-монет. После формирования каждых 210000 блоков (приблизительно раз в 4 года) размер вознаграждения будет уменьшаться вдвое. 28 ноября 2012 года произошло первое уменьшение эмиссионной составляющей награды с 50 до 25 bitcoin. На 6930000 блоке (примерно в 2131 году) эмиссия будет остановлена вовсе (размер вознаграждения 50 → 25 → 12.5 → … → 0).[21] Формирование блоков продолжится и далее, но за них уже не будет начисляться вознаграждение эмитированными bitcoin. Система предусматривает возможность взимать комиссию за обработку транзакций с участников. На сегодня уплата такой комиссии возможна в добровольном порядке, но не является обязательной. Предполагается, что когда вознаграждение за новый блок в форме эмиссии существенно сократится, основным источником стимулирования станут комиссионные сборы.
Деятельность по созданию новых блоков с возможностью получить вознаграждение в форме эмитированных bitcoin и комиссионных сборов получила название «майнинг» (от англ. mining — добыча полезных ископаемых). Производимые вычисления требуются для обеспечения защиты от повторного расходования одних и тех же bitcoin, а связь майнинга с эмиссией стимулирует людей расходовать свои вычислительные мощности и поддерживать работу сети.
Майнингом можно заниматься как в одиночку (соло-майнинг), так и совместно, воспользовавшись услугами специализированных веб-служб, которые называют «пулами» (от англ. pool — общий фонд). Пользователи предоставляют пулу свои вычислительные мощности. Особенность задачи позволяет применить максимальное распараллеливание вычислений, когда каждый участник ищет свой вариант решения без увязки его результатов с решениями других. В свою очередь, пул, осуществляя соло-майнинг, распределяет полученные им bitcoin между пользователями, в соответствии с установленными владельцем пула правилами. Основная причина объединения в пулы — уменьшение риска длительного неполучения награды. Вероятность получения награды соло-майнером в произвольный десятиминутный период приблизительно равна соотношению его вычислительной мощности к вычислительной мощности всей сети. И если это соотношение очень маленькое, то вероятность получения награды даже за длительный промежуток времени также будет низкой. В первых версиях клиента была кнопка «сгенерировать новые биткойны», но после создания программного обеспечения для майнинга на видеокартах и FPGA используемый в клиенте майнинг при помощи центрального процессора оказался нерентабельным из-за слишком малой вероятности получить вознаграждение, и кнопку убрали. В настоящее время майнинг на видеокартах также стал нерентабельным, и в сети используются специально разработанные для майнинга интегральные схемы.
Передача bitcoin-монет осуществляется напрямую, без посредничества каких-либо финансовых организаций. Отмена стандартных транзакций невозможна, однако возможно использование мультиподписей, в том числе для сделок с участием арбитра. Нет обязательной комиссии, однако комиссия может быть уплачена добровольно для ускорения обработки операций.
Технические подробности
Терминология
С Bitcoin сталкиваются как IT-специалисты, так и менее квалифицированные пользователи. В связи с этим, с одной стороны, сформировалась система бытовых терминов, используемая обычными пользователями, а с другой стороны, сформировалась система терминов для специалистов, которая в основном исходит от разработчиков Bitcoin-qt и Bitcoind. Расхождения касаются наиболее часто используемых терминов. Перечислим их:
- BTC — сокращенное название единиц учёта. Используется вместо слова «Bitcoin» для однозначного указания, что имеется в виду сама цифровая валюта, а не сеть, набор алгоритмов или какая-либо другая сущность, относящаяся к данной тематике.
- bitcoind — программа (демон), в которой реализован протокол Bitcoin, используемая посредством командной строки или удаленного вызова процедур (JSON-RPC).
- Bitcoin-qt — первая программа с графическим интерфейсом Qt, совместимая с bitcoind. Bitcoin можно также использовать и через другие программы.
- Пара ключей — публичный и приватный ключ. Используется для генерации адреса и подписывания транзакции на перевод BTC.
- Адрес — является идентификатором, содержащим около 33 алфавитно-цифровых символов. Используется как для получения, так и для отправки BTC. Представляет собой 160-битный хэш от открытого ключа ECDSA ключевой пары.
- Кошелёк — образное название для личного хранилища BTC (account) или всё аккаунты внутри wallet.dat. Account — понятие в протоколе Bitcoin для упрощения создания онлайн-сервиса с помощью bitcoind. Содержит некоторое количество ключевых пар и служебную информацию. Данные об аккаунтах и адресах хранятся в файле «wallet.dat». В Bitcoin-qt аккаунты отображаются как метки. Не следует путать кошелёк как весь wallet.dat, аккаунт и адрес.
- Транзакция — запись о переводе BTC с одной группы адресов (0 и более) на другую группу адресов (1 и более). Содержит подписанный отправителем хеш транзакции с помощью которой отправитель ранее получил BTC и адреса получателей BTC.
- Блок — запись в цепочке блоков(базе данных), которая содержит в себе множество ожидающих подтверждения транзакций и подтверждает их.
Хранение данных
БД публично хранит в незашифрованном виде информацию о всех транзакциях, подписываемых с помощью асимметричного шифрования. Для предотвращения многократной траты одной и той же суммы используются метки времени, реализованные путём разбиения БД на цепочку специальных блоков, каждый из которых, в числе прочего, содержит в себе хеш предыдущего блока и свой порядковый номер. Каждый новый блок осуществляет подтверждение транзакций, информацию о которых содержит и дополнительное подтверждение транзакций во всех предыдущих блоках цепочки. Для уменьшения размера БД используется древовидное хеширование.
Для более наглядного объяснения механизма работы платёжной системы Сатоси Накамото ввёл понятие «цифровая монета»[28], определив его как цепочку цифровых подписей. Исходя из данного определения, каждая монета имеет свой собственный номинал. Каждому bitcoin-адресу может сопоставляться любое количество монет. При помощи транзакций монеты можно делить и объединять, при этом их суммарный номинал за вычетом комиссии сохраняется.
Транзакции
Когда один пользователь передаёт некую сумму другому пользователю, он создаёт новую транзакцию, которая содержит хеш предыдущей транзакции, подписанный им, и публичный ключ следующего владельца. Затем эта информация широковещательным запросом отправляется в сеть. Остальные узлы сети проверяют подписи, прежде чем принять транзакцию к обработке.
Транзакции поддерживают множественные входы (результаты предыдущих транзакций) и выходы (указания о получателях). В общем случае транзакция может содержать произвольное количество выходов (возможны случаи, когда необходимо передать средства нескольким получателям с помощью одной транзакции, что позволит сэкономить на комиссионных сборах). Транзакция также может содержать множество входов, которые могут являться даже совпадающими bitcoin-адресами. Такое может иметь место, когда было несколько входящих транзакций на один адрес. Каждая первая и только первая транзакция в блоке не имеет входов и зачисляет вознаграждение за создание данного блока. Такая транзакция должна получить 120 подтверждений, чтобы полученные с помощью неё bitcoin могли быть использованы. Значения со всех входов суммируются, и сумма распределяется по выходам. Разница между суммой на входе и суммой на выходе считается комиссией за осуществление транзакции. Размер вознаграждения, зачисляемого первой транзакцией, является суммой всех комиссий у транзакций, включённых в блок, и фиксированного значения, изначально равного 50 и уменьшающегося вдвое каждые 210000 блоков.
Транзакции обязательно содержат указания о получателях, например, bitcoin-адреса или иные условия.
Большинство транзакций, имеющих входы, имеют минимум два выхода: с указателем получателя монеты с номиналом, равным отправленной сумме, и указателя на отправителя для «сдачи» — монеты с номиналом, который остался от суммарного номинала на входе за вычетом комиссии. «Bitcoin-qt» отправляет каждую сдачу на новый bitcoin-адрес из резерва заранее созданных и скрытых от пользователя адресов. Информация о том, какая именно монета является сдачей, отсутствует в БД.
Ключи
Каждый пользователь системы может генерировать неограниченное количество пар ключей, которые хранятся в специальном файле (кошельке). Для создания новых пар ключей используется алгоритм ECDSA с параметрами secp256k1. Размер закрытого ключа — 256 бит, а соответствующего ему открытого ключа — 512 бит. Создание новой пары ключей автономно и не требует соединения с сетью.
Адресация
Передача bitcoin происходит с выставлением условий для получателя. Воспользоваться суммой сможет тот, кто сможет выполнить все условия. Стандартным условием является использование bitcoin-адреса. Но условия могут быть и другими, например, последовательное использование нескольких bitcoin-адресов и/или привязка к определённому IP-адресу. Bitcoin-адрес генерируется на основе преобразования публичного ключа пользователя. Секретные (приватные) ключи авторизуют владельца. Bitcoin-адреса не содержат персональной информации о владельце. Человек может иметь множество адресов, создавая их по собственной инициативе, для чего даже не требуется подключение к интернету. Создание адреса лишь для одной транзакции или одного корреспондента помогает сохранить анонимность.
Bitcoin-адрес в текстовой форме представляет собой строку Base 58 длиной до 34 символов, состоящую из букв латинского алфавита и цифр, например 175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W. Существуют варианты представления адресов в виде QR-кодов и других двухмерных штрихкодов, пригодных для считывания мобильными устройствами.
Цепочка блоков
Любые транзакции не считаются легитимными (не считаются «подтверждёнными»), пока информация о них не будет сгруппирована в специальные структуры — блоки. Структура и информация в блоках подчиняется заданным правилам и её можно быстро проверить. Каждый блок всегда содержит информацию об одном предыдущем блоке. Это позволяет все существующие блоки выстроить в одну цепочку, которая представляет собой распределённую базу данных и содержит информацию о всех совершённых когда-либо операциях с bitcoin.
Блоки одновременно создают множество майнеров. Регулярно возникают ситуации, когда один и тот же блок является предыдущим для двух новых блоков. В каждом из новых блоков могут встречаться как одинаковые транзакции, так и разные, то есть вошедшие только в один из них. Через некоторое время появляются очередные блоки, цепочка может раздвоиться. Каждая из ветвей равноправна до тех пор, пока одна из них не получит более длинное продолжение. Обычно, при равенстве длины, предпочтение отдаётся той цепочке, конечный блок которой появился раньше. Система автоматически легитимной считает более длинную цепочку, не обращая внимание на время создания последнего блока. Транзакции, вошедшие исключительно в менее длинную ветку (в том числе по выплате вознаграждения), теряют статус подтверждённых. Если это транзакция по передаче bitcoin, то она может быть включена в очередной блок. Транзакции получения вознаграждения за создание отсечённых блоков не дублируются в другой ветке, то есть «лишние» bitcoin за отсечённые блоки не получают дальнейших подтверждений и «утрачиваются».
Таким образом, цепочка блоков содержит историю владения, с которой можно ознакомиться, например, на специализированных сайтах.
Атака «Double Spending»
Если пользователь попытается использовать ранее потраченные bitcoin-монеты снова, сеть не примет его транзакцию как действительную. Но в параллельных ветках блоков могут находиться транзакции, которые по разному расходуют одни и те же начальные средства. Вероятность существования параллельных цепочек блоков крайне мала и экспоненциально уменьшается с ростом длины цепочки и количества независимых майнеров. Таким образом, чем больше подтверждений имеет транзакция, тем менее вероятна отмена транзакции из-за отмирания содержащей её цепочки блоков. Однако при наличии у злоумышленника контроля над достаточно большой долей суммарной мощности майнинга существует ненулевая вероятность «тайного» выстраивания длинных параллельных цепочек блоков. После их публикации в сети главной будет признана более длинная цепочка. Отмена цепочки блоков может приводить к признанию недействительными транзакций даже подтвержденных несколькими блоками и последующей повторной трате средств.
При наличии в одних руках свыше 50 % суммарной мощности майнинга такая ситуация возможна на любом уровне подтверждения (атака «Double Spending» или «атака 51 %»)[32]. Если подконтрольная мощность меньше 50 %, то вероятность успеха экспоненциально снижается с каждым подтверждением.
Проведение успешной атаки не позволяет:
- изменить размер вознаграждения за генерацию блока
- получить неограниченное количество bitcoin
- уничтожить сеть
- потратить bitcoin, которые ранее не принадлежали злоумышленнику.
На начало 2013 года мощность сети составляла менее 25 THash/s, но за последующие 3 месяца выросла до 55 за счет массового распространения специализированных процессоров (ASIC), разработанных специально для майнинга в сети Bitcoin. В середине июля 2013 года мощность сети превысила 210,46 THash/s. К сентябрю мощность превысила 1000 THash/s, в октябре мощность удвоилась[34], а на 1 декабря 2013 года превысила 6000 THash/s . При этом пользователь с наибольшей производительностью имеет менее 100 THash/s.
Структура блока
Блок состоит из заголовка и списка транзакций. Заголовок блока включает в себя свой хеш, хеш предыдущего блока, хеши транзакций и дополнительную служебную информацию. Первой транзакцией в блоке всегда записывается генерация новых bitcoin-монет, которые в случае успешной генерации блока станут наградой пользователю за созданный блок. Далее идут все или некоторые из последних транзакций, которые ещё не были записаны в предыдущие блоки.
Созданный блок будет принят остальными пользователями, если числовое значение хеша заголовка равно или ниже определённой цели, величина которой периодически корректируется. Если блок не удовлетворяет цели, то изменяется блок служебной информации в заголовке и хеш пересчитывается. Обычно требуется большое количество попыток, так как результат хеширования (функции SHA-256) практически непредсказуем. Когда вариант найден, узел рассылает полученный блок другим подключенным узлам. Другие узлы проверяют блок. Если ошибок нет, то блок считается добавленным в цепочку и следующий блок должен включить в себя его хеш.
Величина целевого числа, с которым сравнивается хеш, корректируется через каждые 2016 блоков. Запланировано, что вся сеть будет тратить на генерацию одного блока примерно 10 минут, на 2016 блоков — около двух недель. Если 2016 блоков сформированы быстрее, то цель немного уменьшается и достичь её становится труднее, в противном случае цель увеличивается. Изменение сложности вычислений не влияет на надёжность сети Bitcoin и требуется лишь для того, чтобы система генерировала блоки почти с постоянной скоростью, не зависящей от мощности сети.
Эмиссия
Bitcoin предусматривает только одну возможность для дополнительной эмиссии — новые bitcoin-монеты начисляются в качестве вознаграждения тому, кто сгенерировал очередной блок, получивший 120 подтверждений.
Первоначально эмиссия составляла 50 bitcoin в каждом блоке. После 2012-11-28 15:24:38 UTC значение уменьшилось до 25 bitcoin, в соответствии с алгоритмом. На май 2014 года в обращении находилось 12,7 миллионов bitcoin, что составляет более половины их максимально возможного предельного количества в 21 миллион.
Желающие получить возможно большее вознаграждение стремились задействовать как можно большие вычислительные мощности. Особенность задачи позволяла применить максимальное распараллеливание вычислений. В силу специфики строения, для этого хорошо подошли графические процессоры (GPU) с небольшой дополнительной программой (в сотни раз производительнее CPU[39]) и платы с FPGA (производительность сравнима с видеокартами, но превосходят их по энергоэффективности). Затем были выпущены специализированные процессоры (ASIC), выполняющие только вычисление хешей для Bitcoin, более производительные чем GPU и FPGA.
Сложность
За требование к хешам блоков отвечает специальный параметр, называемый «сложность». Так как вычислительные мощности сети непостоянны, этот параметр пересчитывается клиентами сети через каждые 2016 блоков таким образом, чтобы поддерживать среднюю скорость формирования распределённой БД на уровне 2016 блоков в две недели. Таким образом 1 блок должен создаваться примерно раз в десять минут. После создания 210 000 блоков (на что требуется примерно 4 года) вдвое уменьшается размер эмиссионного вознаграждения майнеров (снижается скорость эмиссии). На практике, когда вычислительная мощность сети растёт — соответствующие временные промежутки короче, а когда снижается — длиннее. Перерасчёт сложности с привязкой ко времени возможен благодаря наличию в заголовках блоков времени их создания. Оно записано в Unix-формате и взято по системным часам автора блока (если блок создан в пуле, то из системных часов сервера этого пула)
Пулы
Для уменьшения влияния фактора удачи и более равномерного и предсказуемого получения bitcoin майнеры используют пулы. Часто выплаты майнеру рассчитываются исходя из отправленных им пулу шар (shares) (блоков с хешем, который подошёл бы при сложности равной единице). В среднем нужно 232 операций хеширования для нахождения одной шары. Для нахождения блока в среднем требуется количество шар, равное текущей сложности.
Существуют 3 основных типа начисления наград:
- Proportional — После нахождения пулом блока награда делится пропорционально вкладу каждого участника.
- PPS — Вознаграждается каждая присланная шара. Оценивается как текущее вознаграждение за блок, деленные на текущую сложность.
- Score — Оценочная система вознаграждения шар, алгоритм определяется организатором пула.
У этих типов начисления есть следующие популярные варианты:
- SMPPS — Аналогично PPS, но пул никогда не передаёт пользователям больше, чем реально получил сам. Разница между реальным получением награды пулом и вознаграждением шары в PPS, если таковая есть, компенсируется постепенно.
- ESMPPS — Аналогично SMPPS, но уравнивает приоритеты вознаграждения постоянным и новым участникам пула.
- RSMPPS — Аналогично SMPPS, но первыми в очереди на вознаграждение ставятся новые пользователи.
- PPLNS — Аналогично Proportional, но деление награды осуществляется пропорционально вкладу в последние сложность присланных на пул шар, умноженному на N, где N обычно равно 2.
Подтверждение транзакций
Обычно при получении bitcoin-монет новый владелец не может сразу же передать их. Для уменьшения вероятности двойного использования, любая транзакция должна получить некоторое количество подтверждений. Одним подтверждением считается один новый блок, начиная с того, в котором упакована транзакция. Необходимое число подтверждений зависит от программы-клиента либо от указаний принимающей стороны.
Bitcoin-монеты, полученные за создание блока, протокол разрешает использовать после 120 подтверждений. Если учесть, что скорость появления блоков поддерживается на уровне 1 блок в 10 минут, воспользоваться комиссией можно через 20 часов после успешного начисления. Полученные от других пользователей bitcoin-монеты клиент «Bitcoin-qt» позволяет использовать сразу, но у большинства получателей по умолчанию выставлено требование 6 подтверждений, то есть реально воспользоваться полученным обычно можно через час. Различные онлайн-сервисы часто устанавливают свой порог подтверждений.
Комиссионные сборы
В системе Bitcoin не предусмотрено обязательных комиссионных сборов. Пользователи могут добровольно включать в платёж произвольную сумму комиссионного сбора, подавая на вход транзакции больше средств, чем на выход, что повышает приоритет обработки такой транзакции. Различные программы-клиенты имеют свои правила относительно размера и объекта комиссионных сборов.
Комиссионный сбор достаётся узлу, сгенерировавшему блок с такой транзакцией. Генерирующий новый блок пользователь может по своему усмотрению добавлять в него транзакции из очереди. Например, он может отобрать только транзакции с комиссионным сбором.
Объём данных
В программах-клиентах была добавлена система, организующая записи транзакции таким образом, что пользователь может локально удалять данные из своей базы, которые ему точно не понадобятся. После того, как все транзакции с какими-то средствами были упакованы в блоки и подтверждены, предыдущие транзакции с этими средствами можно отбросить для экономии места на диске. Для того, чтобы это можно было осуществить без изменения хеша блока, транзакции хешируются с помощью TTH, и в заголовок блока помещается только результат данного хеширования.
Сейчас все пользователи официального клиентского ПО после запуска программы в первый раз получают полную базу данных (блоки без индексации и оптимизации). По состоянию на май 2014 её размер составлял более 20 ГБ.
Заголовок блока имеет объём около 80 байт. Так как блоки генерируются примерно каждые 10 минут, то за год будет накапливаться около 4,2 Мб заголовков блоков.
Программный интерфейс
Программное обеспечение сетевого узла существует в двух видах: приложение с графическим интерфейсом и фоновое приложение. В обоих случаях оно может управляться через программный интерфейс по протоколу JSON-RPC (RFC 4627).Это позволяет достаточно просто решить такие задачи, как:
- Подключить к одному узлу несколько программ-майнеров, создав собственный пул;
- Интегрировать узел с веб-сайтом, на котором используется Bitcoin[49];
Майк Хёрн (Mike Hearn), сотрудник компании Google, в рамках программы «20 % рабочего времени сотрудника» реализовал программное обеспечение узла Bitcoin на языке Java — BitcoinJ[50]. Эта реализация ограничена лишь пользовательскими функциями (такой узел не может проверять транзакции и блоки, создавать блоки, а может лишь создавать новые транзакции). Это является шагом в сторону мобильных приложений, использующих Bitcoin.
Источник: http://ru.wikipedia.org/wiki/Bitcoin
Последнее редактирование: