[Туториал] Как устроен майнинг

Тема в разделе "Майнинг (общий раздел)", создана пользователем bblizard, 3 фев 2014.

  1. bblizard

    bblizard Космонавт

    Я расскажу и покажу как работает основа генерации денег в криптовалютах — майнинг. Как создается первый блок, новые блоки и как появляются деньги из ниоткуда.
    Чтобы было проще понять, мы напишем свой импровизированный майнер для импровизированной криптовалюты HabraCoin.

    Сначала упрощенный ликбез, куда без него.

    Кошельки

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

    Транзакция

    Это запись о том, с какого кошелька на какой какая сумма переводятся. А так же, время и дата операции. Эта запись (её хэш) подписывается закрытым ключом отправителя и рассылается всем в округе в ожидании подтверждения.

    Подтверждение

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

    Блок

    Это служебные данные + список транзакций + номер кошелька майнящего + волшебное число.

    Цепочка блоков

    Последовательность, в которой каждый следующий блок включает в себя Id предыдущего.

    Начало

    Итак, есть некоторое количество народа, можно один. Назовём его Хаброша. Он решает запустить свою систему криптовалюты HabraCoin.

    Поскольку выделенных серверов у этой валюты нет, то все её участники равноправны и должны как-то договариваться о валидности транзакций. То есть, нужен механизм, который обеспечит:
    1. Неотвратимость транзакций.
    2. Возможность любому проверить их валидность.


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

    Так же, в алгоритме HabraCoin указаны следующие вещи.
    1. Желательно, чтобы новые блоки создавались раз в 10 минут. Если через какое то время мы посмотрим, и окажется, что их больше чем надо было, то рассчитать новуюсложность их генерации каждые 100 блоков
    2. За то, что кто-то создает валидный блок, ему полагается награда в 50 HabraCoins +комиссия
    3. «Побеждает» тот блок, в котором больше всех транзакций
    Ограничение скорости

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

    В криптовалютах используется способ ограничения сложности, который заключается впроблеме вычисления хэша заданного значения. Если быть точнее, то меньше определенного значения.
    Если кто не в курсе, хэш, например f7c9f52d1ebf8c6aef8986fb127ba1bdeec58521f7eb46f026b708df26a40912 — это какое никакое, а число. В десятичной системе оно выглядит как 112078102004378042284884826242280406284022042488488848628408208468422468268028. То есть, хэши можно сравнивать, складывать вычитать и всё такое.
    Так вот. Чтобы все признали блок валидным, его хэш должен быть меньше максимально возможного минус определеного всеми значения, называемогосложностью.
    Например, хэш у нас 4 байта, максимально возможное значение его FFFFFFFF. А сложность, допустим, 100 . Вычитаем одно из другого, получается, наш хэш должен быть меньше чем FFFFFF9B

    Как этого добиться?

    Если помните, все блоки состоят из нескольких полей. Мы берем эти поля, конкатенируем, получаем из них массив байт. Это массив байт отдаем хэш функции, получаем результат и смотрим: меньше то, что получилось с учетом текущей сложности, или нет?
    Если нет, то изменяем этот массив байт до тех пор, пока не получим нужное значение. А именно:

    В каждом блоке есть поле, называемое nonce. Это число размером несколько байт, которое нужно увеличивать на единицу, дописывать к блоку и опять считать от него хэш. Поскольку хорошие хэш функции выдают более-менее равновероятностные значения, то мы не знаем заранее, сколько раз придется повторять процесс. Может 1-2 раза, а может миллиарды.

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

    Block1->Block2->Block3A
    Block1->Block2->Block3B

    то победит та, для которой 4й блок найдут раньше времени. А меньшая цепочка выкидывается и её транзакции снова попадают в очередь на подтверждение.

    Комиссия


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

    Источник: http://habrahabr.ru/post/204008/
     
    Последнее редактирование: 5 фев 2014
  2. bblizard

    bblizard Космонавт

    К слову доказательство выполненной работы заключается в том, что нашедший нужный хэш майнер рассылает этот хэш и nonce, зная эти данные легко подтвердить правильность проделанной работы!
     
  3. valentin1981

    valentin1981 Новичок

    Я вот наверное куплю необходимое оборудование, чтобы майнить биткоины, но мне нужно кое что узнать. Если я буду иметь в распоряжении ~100Ghash/s., реально будет вообще заработать и если да, то в каких тогда размерах? Очень интересно узнать
     
  4. bblizard

    bblizard Космонавт

    Ну
    http://btcsec.com - 12$ в день при текущей сложности, которая как ненормальная растет, майните лучше скрипт валюты