Это статья на доступном языке для неспециалистов. Если вы мните себя хотя бы «айтишником», можете смело читать PDF’ку от Сатоши.
Откуда эти биткоины вообще добываются?
Добыча («майнинг») биткоинов — фраза, которая несколько сбивает с толку. Биткоины выдаются за успешное решение математической задачи. Чем больше таких решений, тем более устойчивой будет сеть, потому что для того, чтобы обрушить сеть, хакерам понадобится потратить столько же времени, сколько потратили его совокупно все «майнеры». Для этого понадобятся невероятные вычислительные мощности, потому что даже мощнейший суперкомпьютер мира в 14 раз слабее, чем все компьютеры сети bitcoin в совокупности.
Чтобы понять, что именно происходит при генерации биткоинов, нужно разобраться с некоторыми понятиями.
Хеш
Это такая функция, которая берет на вход какую-то последовательность и выводит другую последовательность фиксированные длины, которая призвана быть уникальной для каждой входной последовательности.
Вот так, например, вычисляется md5-хеш слова «хеш»:
$ echo ‘хеш’ | md5sum
6962fab449d4a713c8189dba4025d405 –
А вот это — хеш песни «Fly Into The Night» группы «Darkseed»:
$ md5sum ‘music/Darkseed/2003 – Astral Adventures/02 – Fly Into The Night.mp3’
aad61cd8736c953c5fe617f3c780cc2f music/Darkseed/2003 – Astral Adventures/02 – Fly Into The Night.mp3
Подбор хеша
А вот взять хеш aad61cd8736c953c5fe617f3c780cc2f и получить из него обратно песню не получится. Все дело в том, что хеш-функции специально спроектированы таким образом, чтобы можно было быстро посчитать хеш исходной последовательности, а вот обратно — никак. В худшем случае придется просто перебирать все возможные варианты. Выглядит это, например, вот так:
$ echo ‘aaaaaaaaaaaaaaaaaa’ | md5sum
34446078bc933d4300dca0057e7193ae –
$ echo ‘aaaaaaaaaaaaaaaaab’ | md5sum
ced1e1638b956a382166aa1dae4e7dc0 –
$ echo ‘aaaaaaaaaaaaaaaabb’ | md5sum
82baf37d76cc893286c061eb71084c72 –
$ echo ‘aaaaaaaaaaaaaaabbb’ | md5sum
459c7a87cde5df2b808c42a316bca959 –
И так пока мы не встретим нужный нам хеш. Очень долго и утомительно.
Подбор bitcoin-блоков
Слово «блок» вы можете увидеть в программе-клиенте. Блок — это набор данных, который включает в себя:
- хеш предыдущего блока;
- некоторое количество новых транзакций;
- «соль» (nonce) — последовательность битов, которую можно свободно менять.
И главное условие: хеш блока должен содержать должен содержать заданное число нулей в начале.
Само собой, не каждый блок будет содержать заданное число нулей в начале хеша. А так как изменяемая часть блока только одна — это «соль» — мы будем перебирать все возможные варианты «соли», пока не получим нужный хеш. По правилам сети, за нахождение нового блока клиенту дается 50 биткоинов (дальше меньше, каждые 4 года, вознаграждение за посчитаный блок уменьшается в 2 раза).
Вот этот перебор и называется «майнингом» — генерацией биткоинов.
А от числа необходимых нулей в хеше зависит сложность генерации биткоинов. Со временем нулей нужно все больше, и сложность майнинга возрастает.
Как нагенерировать много биткоинов. Сколько это займет времени.
Для начала запустите программу-клиент и разрешите ей генерировать биткоины. Через некоторое время она покажет вам скорость подбора в хешах в секунду. Вот эту скорость введите в специальный калькулятор. Не забудьте про то, что вводить нужно мега-хеши в секунду, то есть введенная единица означает миллион хешей в секунду.
Если калькулятор выдал приемлемый для вас промежуток времени, то поздравляю — вам не о чем беспокоиться. Просто генерируйте биткионы как раньше. Но скорее всего вы просто забыли перевести килохеши в мегахеши.
Если же вы не можете ждать столько лет, читайте дальше.
Экономическая целесообразность
Вообще, курс биткоина в каждый момент времени курс примерно равен расходу электроэнергии, затраченной для его генерации на обычном процессоре. Кому нужно покупать биткоины, если их можно нагенерировать на компьютере, в которых недостатка в современном мире нет?
Существует три способа сделать генерацию биткоинов экономически целесообразной:
- использовать более эффективные процессоры для расчетов;
- генерировать в надежде, что курс поднимется и генерация биткоинов окупится;
- использовать время простоя компьютеров и воспринимать биткоины как небольшие дармовые деньги.
Первое нынешние майнеры усвоили хорошо и генерируют биткоины в основном на графических процессоров видеокарт, в частности видеокарт ATI. Их «калькуляторы» позволяют вычислять хеши быстрее, чем центральные процессоры компьютера.
Генерация биткоинов также может представлять чисто спекулятивную ценность. Вдруг завтра за каждый будут давать миллион долларов? Вообще, генерировать их в таком случае не обязательно — можно просто купить.
Третий вариант мне кажется наиболее разумным. Вы используете простаивающие мощности своего компьютера для поддержания стабильности сети, в награду получаете немного биткоинов. Генерация по этой схеме будет всегда приносить прибыль, так как затраты на генерацию будут равны нулю. Ну а если они выше, то это уже не «использование простаивающих мощностей».
Мне придется генерировать биткоины пять лет и получить сразу пачку на 50 штук?
В общем случае — да.
Чтобы не остаться совсем ни с чем, люди объединяются в пулы, например, deepbit.net. Пул — это множество клиентов, каждый из которых подбирает блоки. Но как только блок будет найден, «призовые» 50 биткоинов делятся на всех, кто участвовал в его подборе.
Откуда мы можем знать, что программа не подбирает пароли пентагона вместо блоков?
Ну, все алгоритмы работы программы описаны в ее исходном коде. Прежде чем программа станет исполняемым файлом, который вы можете запустить кликом мышки, программист должен написать ее на каком-нибудь языке программирования. Затем этот код пропускается через специальную программу-компилятор и только потом может быть запущена.
Биткоин-клиент написан на языке C++, исходные коды вы можете скачать с bitcoin.org. Вы можете показать исходники знакомому программисту и попросить его выяснить, что программа делает. Даже если вы боитесь, что исполняемый файл может быть заражен вирусом или чем-нибудь еще, вы можете скомпилировать программу самостоятельно и быть уверенным в том, что она делает только то, что описано в ее исходном коде.
Примечания
На июнь 2011 года мощнейший суперкомпьютер мира — K computer — «выжимает» 8 162 терафлопа. Вычислительная же мощность сети bitcoin — 114 445 терафлоп (см. “Network Hashrate, TeraFLOP/s” на bitcoinwatch.com).