Генерация биткоинов

Это статья на доступном языке для неспециалистов. Если вы мните себя хотя бы «айтишником», идите читать PDF’ку от Сатоши.

Если вы не знаете, о чем здесь речь — читайте мою обзорную статью про биткоины.

  1. Генерация биткоинов
    1. Откуда эти биткоины вообще берутся?
      1. Хеш
      2. Подбор хеша
      3. Подбор bitcoin-блоков
    2. Как нагенерировать много биткоинов
      1. Сколько это займет времени
      2. Экономическая целесообразность
      3. Мне придется генерировать биткоины пять лет и получить сразу пачку на 25 штук?
    3. Откуда мы можем знать, что программа не подбирает пароли пентагона вместо блоков?
    4. Смотрите также
    5. Примечания

Откуда эти биткоины вообще берутся?

Добыча («майнинг») биткоинов — фраза, которая несколько сбивает с толку. Биткоины образуются из успешного решения сложной математической задачи. На этих решениях основывается устойчивость всей сети. Чтобы ее обрушить, хакерам понадобится потратить столько же времени, сколько потратили его в совокупности «майнеры». Для этого понадобятся невероятные вычислительные мощности, потому что даже мощнейший суперкомпьютер мира в 1837 раз слабее, чем все компьютеры сети bitcoin вместе взятые.1

Чтобы понять, что именно происходит при генерации биткоинов, нужно разобраться с некоторыми понятиями.

Хеш

Хеш — это, грубо говоря, такая штука, которая на совершенно любую строчку выдает другую, фиксированной длины.

Вот так, например, вычисляется 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-блоков

Слово «блок» вы можете увидеть в программе-клиенте. Блок — это набор данных, который включает в себя:

И главное условие: хеш блока должен содержать заданное число нулей в начале. Это делается не для того, чтобы усложнить задачу, а наоборот — чтобы упростить.

Само собой, не каждый блок будет содержать заданное число нулей в начале хеша. А так как изменяемая часть блока только одна — это «соль» — мы будем перебирать все возможные варианты «соли», пока не получим нужный хеш. По правилам сети, на текущий момент за нахождение нового блока клиенту дается 25 биткоинов.

Вот этот перебор и называется «майнингом» — генерацией биткоинов.

Сложность — это еще одно условие для нахождения блока. От сложности зависит такое число, меньше которого должен быть хеш. Каждые 2016 блоков сложность меняется. Это нужно для того, чтобы блоки появлялись раз в 10 минут, не чаще и не реже, несмотря на возрастающую или падающую мощность сети. Если мощность сети растет — сложность пересматривается и растет, если падает — падает и сложность.

Как нагенерировать много биткоинов

Отвечаю на часто задаваемый вопрос.

Сколько это займет времени

Для начала запустите программу-клиент и разрешите ей генерировать биткоины. Через некоторое время она покажет вам скорость подбора в хешах в секунду. Вот эту скорость введите в специальный калькулятор. Не забудьте про то, что вводить нужно мега-хеши в секунду, то есть введенная единица означает миллион хешей в секунду. Посчитали?

Если калькулятор выдал приемлемый для вас промежуток времени, то поздравляю — вам не о чем беспокоиться. Просто генерируйте биткионы как раньше. Но скорее всего вы просто забыли перевести килохеши в мегахеши.

Если же вы не можете ждать столько лет, читайте дальше.

Экономическая целесообразность

Смотрите статью «Сколько можно заработать на майнинге биткоинов»

Вообще, курс биткоина в каждый момент времени курс примерно равен расходу электроэнергии, затраченной для его генерации на обычном процессоре. Кому нужно покупать биткоины, если их можно нагенерировать самому?

Существует три способа сделать генерацию биткоинов экономически целесообразной:

Первое нынешние майнеры усвоили хорошо и стали генерировать биткоины в на графических процессоров видеокарт, а затем — на специально разработанных чипах. Такие «калькуляторы» позволяют вычислять хеши на порядки быстрее, чем центральные процессоры компьютера.

Генерация биткоинов также может представлять чисто спекулятивную ценность. Вдруг завтра за каждый будут давать миллион долларов? Вообще, генерировать их в таком случае не обязательно — можно просто купить.

Третий вариант мне кажется наиболее разумным. Вы используете простаивающие мощности своего компьютера для поддержания стабильности сети, в награду получаете немного биткоинов. Генерация по этой схеме будет всегда приносить прибыль, так как затраты на генерацию будут равны нулю. Ну а если они выше, то это уже не «использование простаивающих мощностей».

Мне придется генерировать биткоины пять лет и получить сразу пачку на 25 штук?

В общем случае — да.

Чтобы не остаться совсем ни с чем, люди объединяются в пулы, например, deepbit.net. Пул — это множество клиентов, каждый из которых подбирает блоки. Но как только блок будет найден, «призовые» 25 биткоинов делятся на всех, кто участвовал в его подборе.

Откуда мы можем знать, что программа не подбирает пароли пентагона вместо блоков?

Ну, все алгоритмы работы программы описаны в ее исходном коде. Прежде чем программа станет исполняемым файлом, который вы можете запустить кликом мышки, программист должен написать ее на каком-нибудь языке программирования. Затем этот код пропускается через специальную программу-компилятор и только потом может быть запущена.

Биткоин-клиент написан на языке C++, исходные коды вы можете скачать с bitcoin.org. Вы можете показать исходники знакомому программисту и попросить его выяснить, что программа делает. Даже если вы боитесь, что исполняемый файл может быть заражен вирусом или чем-нибудь еще, вы можете скомпилировать программу самостоятельно и быть уверенным в том, что она делает только то, что описано в ее исходном коде.

Смотрите также

Примечания

1 На ноябрь 2013 года мощнейший суперкомпьютер мира — Tianhe-2 — «выжимает» 33 862 терафлопа в секунду. Вычислительная же мощность сети bitcoin — 62 229 000 терафлоп в секунду (см. "Network Hashrate, TeraFLOP/s" на bitcoinwatch.com).