Bitcoin майнинг от А до Я

bitcoin moja prelestМайнинг и как он работает: матчасть
Я расскажу и покажу как работает основа генерации денег в криптовалютах — майнинг. Как создается первый блок, новые блоки и как появляются деньги из ниоткуда.
Чтобы было проще понять, мы напишем свой импровизированный майнер для импровизированной криптовалюты HabraCoin.
Кошельки
Каждый кошелек — это случайно сгенерированная пара ключей. Собственно, адрес кошелька — это хэш от публичного ключа. Так его можно однозначно идентифицировать. 
Транзакция
Это запись о том, с какого кошелька на какой какая сумма переводятся. А так же, время и дата операции. Эта запись (её хэш) подписывается закрытым ключом отправителя и рассылается всем в округе в ожидании подтверждения.
Подтверждение
Чтобы о транзакции узнали и все себе её записали, необходимо её подтверждение, которое получается в результате создания нового блока.

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

Начало

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

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

Ограничение скорости

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

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

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

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

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

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

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

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

Комиссия

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

Давайте смоделируем ситуацию и поможем Хаброше скрафтить какой нибудь блок.
<code class="java">package com.paranoim.money;
import java.math.BigInteger;
import java.util.Arrays;
import junit.framework.TestCase;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.crypto.util.Pack;
import org.bouncycastle.math.ec.ECPoint;
import com.paranoim.TestsAll;
import com.paranoim.crypto.assymetric.ECDSA;
import com.paranoim.crypto.digest.SHA3_512;
import com.paranoim.crypto.utils.ByteUtils;
public class MiningTest extends TestCase
{
    
    private byte[] counter = new byte[4];
    private byte[] getAddressFromPublicKey(ECPublicKeyParameters publicKey)
    {
        ECPoint q = publicKey.getQ();
        byte[] encoded = q.getEncoded(true);
        return SHA3_512.process(encoded); // reciever's address is it's pubkic key hash
    }
    
    public void testMining()
    {
        ECPublicKeyParameters fromKey = (ECPublicKeyParameters) TestsAll.ALICE.getPublic();
        ECPublicKeyParameters toKey = (ECPublicKeyParameters) TestsAll.BOB.getPublic();
        
        
        byte[] from = getAddressFromPublicKey(fromKey);
        byte[] to = getAddressFromPublicKey(toKey);
        
        int amount = 100; //100 HabraCoin
        long now = System.currentTimeMillis();
        
        //compose the message for signing
        
        byte[] fromTo = ByteUtils.concat(from, to);
        
        byte[] bAmount = Pack.intToBigEndian(amount);
        byte[] bTime = Pack.longToBigEndian(now);
        
        byte[] amountAndTime = ByteUtils.concat(bAmount, bTime);
        
        byte[] msg = ByteUtils.concat(fromTo, amountAndTime);
        
        BigInteger[] sigCoords = ECDSA.signDigest(TestsAll.ALICE.getPrivate(), SHA3_512.process(msg));
        byte[] signature = ByteUtils.concat(sigCoords[0].toByteArray(), sigCoords[1].toByteArray());
        
        // MSG contains from, to, amount, time and signature
        msg = ByteUtils.concat(msg, signature); 
        
        
        ECPublicKeyParameters minersKey = (ECPublicKeyParameters) TestsAll.ALICE1.getPublic();
        byte[] bminersKey = getAddressFromPublicKey(minersKey);
        
        //msg = msg + miner's address
        msg = ByteUtils.concat(msg, bminersKey);
        
        byte[] hash = doTheMining(msg);
        
        msg = ByteUtils.concat(msg, counter);
        
        assertTrue(Arrays.equals(hash, SHA3_512.process(msg)));
                
    }
    private byte[] doTheMining(byte[] msg)
    {
        byte[] hash = SHA3_512.process(ByteUtils.concat(msg, counter));
        
        while(hash[0] != 0 || hash[1] != 0 )
        {
            incrementCounter();
            hash = SHA3_512.process(ByteUtils.concat(msg, counter));
        }
        
        return hash;
    }
    
    private  void incrementCounter()
    {
        for (int i = 0; i < counter .length; i++)
        {
            counter[i]++;
            if (counter[i] != 0)
                break;
        }
    }
}
</code>
Пример получившегося блока:

1824B9ADF09908222CF65069FDE226D32F165B3CF71B7AA0039FDFEF75EAA61610909EBFFBAC023480FC87FCF640C4A
009B82C4A6D25A0F4B8A732AE54EF733E792681137BA378577DFDC2732D192DAF323966EAD4ADC9635D7A12EDD50E34
9F660622D186AF3C03BF7D265F2AA7EB125056F4BF45BE519E8B22B845B28065110000006400000142E5D667CB01CEE
EDD0AC15EC4C491819A99030BD5FEF7CD2B469F2B90BA13D7981EDCD0708353D13390B8564F496C44FAC2777B0AF79D
C94CBF36D0CC0F047E807889F34C4DC5FEB724699C257391F84F3DDD70B84F841D115F4EFEAF4E58779042F35257E5C
035046037DE740718D199A8F06AD7A58E37CCCD4CC5E95295DCC2C5F3C70847BD59FA57BCC5FF4B208F93948FCFD763
EC1E5C85B61C43EB64B77A9F53B28785D7DE2335333003260A0839D53927976751A8D8967B2BB325909D86E82BC4125
2A28ECF6F0E7476BB99B29585EB0E75410000

И хэш для него:
000008ACF935A8E3E453AC538706F560155943C6B0A77E5F5FCA7939D5FFE589676A6B3CD7AC78845786C50449D1A6F
91003EDCA7B5D8B12AC36CCA36A00844A

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

Bitcoin mining: «кто все эти люди?»

Для начала попробуем ответить на вопрос, а кто, собственно, занимается добычей биткоинов. Ниже перечислены основные категории людей, добывавших или добывающих биткоины, с учетом хронологии их появления на сцене. 
1) Школьники и студенты, имеющие доступ к дешевому (или вовсе бесплатному) электричеству и hardware, за счет своих родителей и университетов.
2) Геймеры, использующие свои игровые ПК для добычи биткоинов в перерывах между компьютерными баталиями.
3) Гики, покупающие несколько ПК для майнинга, и которых обычно останавливает только исчерпание ресурсов электроснабжения/охлаждения/свободного места (ну или терпения родных и соседей)
4) Хакеры, развертывающие ботнеты и использующие для майнинга украденные вычислительные мощности.
5) Сообщества, организующиеся для совместной покупки оборудования и добычи биткоинов, с последующим разделением полученной выгоды.
6) Компании, которым удалось получить финансирование от энтузиастов, через аналог IPO на онлайн-биржах, ведущих торги за bitcoin. Такие компании разрабатывают специализированное hardware (ASIC) для последующей добычи bitcoin и распределяют дивиденды.
Как видно, довольно разношерстная компания.


Добыча Bitcoin

Суть добычи биткоинов сводится к решению некой сложной криптозадачи, для которой неизвестно лучшего подхода чем брутфорс.
Биткоины добываются не по одному, а «пачками», или блоками. Первоначально размер блока равнялся 50 BTC, но он уменьшается вдвое после каждых 210 тыс. добытых блоков. Сейчас добыто уже больше 250 тыс. блоков, а значит, один блок приносит 25 BTC. Новый блок добывается примерно каждые 10 минут. Из-за периодического уменьшения награды за блок вдвое, общее количество BTC никогда не превысит 21млн, ~55% всех BTC уже добыто и, по прогнозам, эта цифра достигнет 99% к 2032 году.
Периодически, через каждые 2016 добытых блоков, происходит корректировка сложности их добычи. Корректировка основывается на скорости добычи в последний период и нужна для сохранения среднего интервала добычи блоков у отметки в 10 минут.
Если количество компьютеров, занятых одновременной добычей биткоинов, в целом растет, то ежедневная награда (равная 24*6*25 = 3600 BTC) остается неизменной. А значит, на каждый компьютер приходится всё меньшая доля общего «пирога».
Добыча биткоинов имеет смысл только до тех пор, пока стоимость добытых BTC превосходит затраты на оборудование и электроэнергию. Т.к. сложность добычи BTC неуклонно увеличивается, да и курс USD/BTC подвержен колебаниям, наименее энергоэффективные средства добычи BTC постепенно исключаются из процесса. Хотя, резкий рост курса USD/BTC может сделать рентабельным их возвращение в строй.


(В этот раз совсем) немного истории

Bitcoin стал результатом развития идей, заложенных в существовавшие ранее криптовалюты. А впервые он появляется на сцене в ноябре 2008го, когда пользователь под псевдонимом Сатоши Накамото (Satoshi Nakamoto) публикует статью, описывающую систему новой валюты. Уже в январе 2009го система начинает функционировать, а её популярность сначала растет медленно, но вскоре переходит в экспоненциальный рост. Известен случай, когда один человек заплатил за пиццу 10тыс. BTC (несколько миллионов $ по нынешнему курсу). Накамото исчезает в апреле 2011, и его личность до сих пор остается загадкой.


Курс USD/BTC


Рисунок 1. Динамика курса USD/BTC и сложности майнинга (источник данных)

На рисунке 1 показана динамика курса обмена USD/BTC с течением времени. Начиная с 2010го года курс резко пошел вверх. Если в июле 2010 1 BTC стоил $0.05, то к августу 2013 уже преодолел отметку $105. В этом интервале наблюдается два скачка – один в июне 2011го, когда биткоин стоил $31.5 и в апреле 2013го, когда курс подскочил до $266 (а сейчас и до $1000). Резкие скачки и обвалы курса чаще всего связаны с периодами пристального внимания СМИ и расцвета страхов/слухов об уязвимостях протокола или взломах организаций, отвечающих за обмен BTC на другие валюты. Подобные слухи каждый раз сопровождаются волной желающих продать биткоины и обвалом курса.
Основная причина, делающая BTC столь привлекательным для спекуляций – верхний предел на количество BTC, равный 21млн. Если когда-нибудь BTC всё-таки заменит золото как эталон для хранения сбережений, то, приравняв стоимость мирового золотого запаса к общей стоимости биткоинов, можно сказать что один BTC будет стоить $71000 – гораздо больше, чем сейчас (практически, на два порядка, даже с учетом последних спекуляций).


Сложность майнинга BTC

На рисунке 1 также показано как менялась сложность майнинга биткоинов с течением времени. За неполные 4 года сложность возросла в 50млн. раз. Если в начале сложность соответствовала 4-8 процессорным ядрам общего назначения, способным перебрать примерно 7 млн. хэшей в секунду (MH/s), то сейчас скорость совместных усилий по брутфорсу превосходит 7 петахэшей в секунду (PH/s).Такому росту способствовали 2 фактора. Первое – рост курса USD/BTC позволяет покрыть расходы на эксплуатацию большего количества оборудования для майнинга. Второе – за это время произошли значительные изменения как в программном, так и в аппаратном обеспечении для майнинга биткоинов. Опять-таки, точки падения сложности добычи BTC соответствуют местам обвала курса USD/BTC.


Инновации в hardware и software для майнинга

Прогресс шел невероятно быстро, изменения следовали одно за другим. 
В сентябре 2010 появляется первый общедоступный CUDA miner. Уже в октябре 2010 за ним последовал первый майнер для OpenCL. 
Практически сразу после этого, в ноябре 2010, возникло такое явление как pooled mining, когда группа компьютеров выполняет распределенный перебор хэшей, а, при добыче блока биткоинов, делит награду между участниками пропорционально их вкладу в общее дело. Подобные пулы очень быстро выросли до размера тысяч участников, позволив последним получать небольшие суммы каждый день, а не большие (50 или 25 BTC) каждые несколько месяцев. 
На тот момент сложность добычи блока биткоинов равнялась примерно месяцу работы одного Hi-End GPU. Одной из ключевых инноваций, сделавшей возможным существование mining pool'ов, стала возможность убедиться, что компьютер действительно провел работу по перебору хэшей, которую он заявил как выполненную, и исключение возможности того, что пользователь «сбежит», когда его компьютеру в ходе перебора посчастливится наткнуться на ответ. 
К сожалению, mining pools служат своего рода «концентраторами», что противоречит распределенной природе bitcoin и потенциально ставит под угрозу процесс подтверждения транзакций.
В июне 2011 появился первый open source miner для FPGA. А затем в январе 2013 появляется первый ASIC майнер и множество улучшений последовавших за этим. На графике сложности добычи BTC показаны даты появления этих технологий.


производительность и энергоэффективность

Hi-End CPU (вроде Core i7 990x), подвергнутые оверклокингу, достигли производительности 33 MH/s, а Hi-End GPU от NVidia (вроде GTX 570) 155 MH/s. В то же время GPU от AMD (вроде 7970 за $450) выступали гораздо убедительнее, на уровне 675 MH/s.
Следующий шаг эволюции связан с появлением FPGA майнеров, которые хоть и немного проигрывали видеокартам от AMD в стоимости железа на единицу производительности ($/MH/s), но зато потребляли 60W вместо 200W. Компания под названием Butterfly Labs (BFL) начала продавать FPGA майнеры, которые в итоге могли бы постепенно вытеснить GPU за счет меньшего энергопотребления. 
Но тут на сцену выходят ASIC майнеры, дающие выигрыш на порядки, по сравнению с FPGA. За счет их использования суммарная производительност взлетает до небес, а вместе с ней и сложность добычи блоков, что неизбежно оставляет не у дел и GPU и FPGA.


Рисунок 2. Установка для майнинга биткоинов на основе FPGA (источник)


Стратегия майнинга

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

Чтобы ответить на этот вопрос, необходимо оценить возврат средств за счет майнинга в биткоинах. В условиях экспоненциального роста сложности добычи новых биткоинов, способность железа к добыче биткоинов падает также экспоненциально. При росте сложности примерно в 1.2 раза каждые две недели, 66% биткоинов, которые «железо» способно добыть за время своей эксплуатации, приходится на первый квартал работы. 22% на второй квартал, 7% на третий, а на всё оставшееся время приходится лишь 4%. При этом в первый день работы будет добыто ~1/80 всех биткоинов, что можно добыть на этом девайсе за время его эксплуатации.
Прибыль от использования аппаратуры для майнинга биткоинов получается суммированием экспоненциально убывающих сумм добываемых биткоинов в единицу времени, минус расходы на эксплуатацию и приобретение, плюс цена, по которой аппаратура может быть продана после завершения её жизненного цикла в качестве майнера биткоинов.

Некоторые из этих параметров известны в момент покупки; например, цена аппаратуры, курс USD/BTC на этот момент и расходы на эксплуатацию. Также легко оценить количество биткоинов, добываемых за первый день работы, т.к. сроки поставки аппаратуры легко оценить (только не надо тут вспоминать про Почту России), а производительность тех же GPU в GH/s – первое, чем пользователи начинают меряться на соответствующих форумах. Расходы на обслуживание напрямую вытекают из спецификации оборудования и счетов за электричество. Оценка того, за какую сумму в будущем удастся продать железо, делается (хоть и приблизительно) изучая сайты вроде e-bay. 

Основной риск кроется в динамике курса USD/BTC. Если курс растет – растет и прибыль от добываемых биткоинов, а также имеет смысл оставить оборудование в строю на больший срок. Если курс перестает расти или обваливается, добыча биткоинов становится менее привлекательной, а также для максимизации прибыли имеет смысл отключить оборудование и попытаться продать его раньше.

Изменение цены оборудования со временем ведет себя различным образом для разных типов устройств. Цена на GPU от AMD за год эксплуатации снижается весьма незначительно. В то время, как ситуация со специализированным оборудованием прямо противоположная, т.к. единственное его назначение – майнинг. Специализированные решения на основе FPGA или ASIC имеют гораздо более высокие риски, связанные с датой поставок оборудования – цена, за которую их готовы купить, и то, сколько на них можно заработать, напрямую зависит о даты их ввода в процесс майнинга. Управление этим риском – важная часть майнинга биткоинов.

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


Отключение оборудования


Рисунок 3. Дневная прибыль от добычи биткоинов и соответствующие расходы на электроэнергию. (источник данных)

Рисунок 3 показывает дневную прибыль на 1 GH/s, которую приносил майнинг биткоинов с 2010го года. Данный график комбинирует исторические данные о сложности майнинга и курсе USD/BTC. Резкий обвал в районе ноября 2012 года соответствует уменьшению награды за блок с 50 BTC до 25 BTC. Горизонтальные линии показывают расходы на электроэнергию на 1 GH/s за день для: CPU (Core i5), GPU (AMD 7970), FPGA (Bitforce SHA256) и 110nm ASIC (AvalonBatch 1). Когда прибыль на 1 GH/s опускается ниже этой линии, майнинг становится убыточным и соответствующее оборудование выключается.
 
Bitcoin: история развития, от CPU до FPGA

CPU: Первое поколение майнеров

Если заглянуть в исходный код майнера биткоинов, то окажется, что он на удивление прост. Основная часть выглядит примерно следующим образом:
<code class="cpp">while (1)
{
  HDR[kNoncePos]++;
  IF (SHA256(SHA256(HDR)) < (65535 << 208)/ DIFFICULTY)
    return;
}</code>

Вычисление SHA256 выполняется над 512-битными блоками данных и включает в себя 64 раунда шифрования, требующих множества 32-битных сложений, сдвигов и битовых операций. Каждый последующий раунд шифрования зависит от результатов предыдущего, создавая цепочку зависимостей. Хотя выполнение отдельных раундов шифрования не может быть распараллелено, проверка каждого отдельного хэша может выполняться параллельно, что делает вычисления прекрасно поддающимися параллелизации.
Производительность таких майнеров достигает 33 MH/s на процессор (Core i7 990x). Больше добавить особенно нечего.


GPU: Второе поколение майнеров

В октябре 2010 был опубликован код первого open-source OpenCL майнера, после чего тот был быстро адаптирован и оптимизирован стараниями энтузиастов сообщества. Подобные майнеры состояли из реализации bitcoin-протокола на языке вроде Java или Python и алгоритма перебора в виде OpenCL-файла, который надлежало скомпилировать под ISA соответствующего GPU.

Огромное разнообразие OpenCL-реализаций объяснялось попытками выжать из компиляторов всё, на что те были способны, в погоне за улучшением качества кода. Кроме того, часть кода, не относящаяся к OpenCL напрямую, отвечала за вызов OpenCL API с целью перепроверки результатов или управления параметрами GPU в ответ на температурный режим и пользовательские настройки.
Поскольку предполагалось, что подобное оборудование будет работать месяцами, пользователи пускались во все тяжкие, играя с напряжением питания (понижая, чтобы снизить стоимость накладных расходов на майнинг, или повышая вместе с частотой, чтобы увеличить производительность), ядром GPU и такими параметрами кода, как число потоков. Всё ради того, чтобы увеличить пропускную способность в рамках разумной стабильности работы и температуры.

Т.к. добыча биткоинов не требует особой нагрузки на оперативную память или операций с плавающей точкой, большое число критических путей в электрической схеме или узких мест в архитектуре GPU никак себя не проявляют. Однако, с течением времени могла возникать потребность в перенастройке параметров, т.к. системы электропитания и охлаждения со временем деградируют в своих характеристиках.
Типовые GPU от AMD имеют тенденцию показывать большую производительность, чем GPU от NVidia, если речь идет о GH/s на $, отчасти благодаря системе команд, хорошо подходящей для вычислений SHA256, и архитектуре VLIW, которая содержит большее количество ALU, работающих параллельно, пусть и на слегка меньшей частоте. В частности, операции сдвига и битового выбора могут быть реализованы единственной инструкцией AMD ISA.
Встроенная графика, в частности от Intel, уже сейчас имеет лучшие показатели производительности на ватт, но для CPU характерны гораздо более скромные power-бюджеты — 200W, типичные для GPU, совершенно неприемлемы для CPU, который, вообще говоря, еще и не только графикой занят. Кроме того, к одному компьютеру не удастся подключить столько CPU, сколько можно было бы подключить видеокарт (про это дальше). Да и амортизация оборудования не настолько быстра для CPU. Поэтому встроенная графика — это не выбор майнера.

Основной код майнера, написанный на OpenCL, а не ассемблере или в машинных кодах, после компиляции нередко патчился с целью использования инструкций GPU, напрямую не поддерживаемых OpenCL. 
Реализация на OpenCL представляет собой один большой блок кода, который в начале выбирает ряд параметров, на основе id потока, а затем выполняет все 64 раунда хэширования в одном развернутом цикле.


A Datacenter In My Garage

Потратив $300-600 на оборудование для майнинга на основе GPU, которое, практически буквально, печатает деньги, и потратив немало времени за настройкой его параметров, следующим шагом закономерно встаёт идея о наращивании масштабов катастрофывычислительных мощностей.

Купив ещё один такой же GPU и повторив настройки, вы удвоите свою прибыль. На самом деле, если монетки добываются столь быстро и столь же стремительно растут в цене, возможно, имеет смысл купить десять или даже двадцать GPU! Правда, это может привести к катастрофе — из-за группового поведения майнеров, закупившихся видеокартами, до небес подскочит сложность добычи и так же стремительно упадет прибыльность майнинга. К счастью, катастрофы не произошло, благодаря росту курса USD/BTC затраты на покупку видеокарт всё же окупились.
GPU оказались гораздо более доступны для конечных пользователей, чем FPGA. Их использование для майнинга хоть и требует навыков сборки ПК и многочасового чтения форумов, но можно быть полным профаном в параллельном программировании, не говоря об инструментах для работы с FPGA. Однако для GPU характерно несколько ключевых ограничений:
1. GPU не работает сам по себе. Каждый GPU должен быть включен в 8x или 16x PCI-E разъем, которых на материнских платах сравнительно мало.
2. Материнская плата, процессор, жесткий диск и ОЗУ в GPU майнинге практически не используются, но удорожают систему, т.е. увеличивают стоимость майнинга на единицу производительности. У типичного пользователя под рукой есть единственный PC, куда можно установить 1-2 GPU, но не более того.
3. Каждый GPU потребляет 200-300W, что очень быстро превышает возможности блока питания и требует апгрейда.
4. Стандартные корпуса не рассчитаны на охлаждение нескольких GPU. Особенно, если «несколько» — это более двух.
5. Использование многих GPU быстро достигает пределов электроснабжения, охлаждения и уровня шума, допустимых в большинстве жилых районов.
6. Из-за каких-то проблем (вероятно, в программной части) реализации, для работы OpenCL может потребоваться, чтобы к GPU был подключен дисплей. Хотя сама технология подобных требований не выдвигает.
7. Типовой GPU занимает два слота в корпусе ПК, не давая подключить к ПК большое число видеокарт.

Для решения этих проблем появилось следующее решение. Во первых, т.к. майнинг биткоинов толком не использует пропускную способность интерфейса с материнской платой, то PCI-E 1x имеет достаточно пропускной способности, а GPU работает и подключенным в 1х слот. Простой кабель, продаваемый за $8, позволяет подключить 16x GPU в 1х слот. Правда это означает, что видеокарта не может находиться в корпусе ПК, что побудило энтузиастов к созданию стоек, предназначенных исключительно для монтажа GPU. Использование правильной материнской платы, с большим числом дешевых 1x слотов, решило проблему с подключением большого числа GPU. Отказ от привычного корпуса позволил решить проблему отвода тепла более эффективно. А резистор, воткнутый в DVI разъем, успешно имитирует подключение монитора, если таковое потребуется для OpenCL.
Используя такой подход, одна материнская плата, CPU, и RAM может обслуживать 5-6 GPU, тем самым повышая экономическую эффективность затеи.




примеры того, как может выглядеть машина для добычи биткоинов на основе GPU (источник фото)

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

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




Bitcoin-miner, содержащий 69 GPU (источник фото)


FPGA: Третье поколение майнеров

Июнь 2011 принес общественности первую open-source реализацию биткоин-майнера для FPGA. FPGA хороши как для операций сдвига, так и для битовых операций, составляющих ядро алгоритма майнинга. Интересным испытанием для разработчиков FPGA-майнеров стала разработка такого дизайна, который позволил бы эффективно использовать различные FPGA, как hi-end, так и low-end. 

Решение оказалось весьма элегантным – майнер состоит из нескольких экземпляров SHA256-модуля, который параметризуется глубиной развертывания. С полным развертыванием, модуль создает отдельные аппаратные узлы для каждого из 64 раундов хэширования, разделенные регистрами – своего рода конвейер. Такая реализация позволяет достичь производительности 1хэш/такт/модуль. Меньшая глубина развертывания приводит к тому, что конвейер получается короче, и полное вычисление хэша требует нескольких проходов по его ступеням. Если FPGA достаточно велика, то в неё может уместиться несколько таких конвейеров. Выбор между глубиной развертывания и числом копий конвейера есть предмет для оптимизации.

Основной проблемой для FPGA-майнеров стало то, что их энергопотребление гораздо выше, чем для типичных случаев использования FPGA. Это объясняется практически постоянной активностью логических элементов в процессе вычислений. В результате большинство готовых плат с FPGA, таких как, например, обучающие наборы, легко доступные студентам, не могли предоставить ни достаточное питание ни достаточное охлаждение. Причем для hi-end микросхем проблема стояла в разы острее.

В результате появились специализированные платы, которые минимизировали расходы, отказавшись ото всей избыточной периферии (RAM, I/O, и т.д.), и которые конструировались с единственной целью – обеспечить необходимое питание и температурный режим для FPGA. Платы на основе FPGA Spartan XC6SLX150 позволили достигнуть производительности 860MH/s, при частоте 215 MHz, энергопотреблении 39W и стоимости $1060. Проприетарная разработка компании Butterfly Labs (BFL), расположенной в Канзасе, показала похожую производительность 830 MH/s при цене $599. Топовое решение от той же компании на основе FPGA Altera показало производительность 25.2 GH/s при цене $15K (650-750 MH/s на чип).
На настоящий момент BFL была и остается самой успешной коммерческой биткоин-компанией.

К сожалению, FPGA было трудно конкурировать с GPU – последние стоили на ~30% меньше и имели больший потенциал для перепродажи после завершения своего пути как майнера биткоинов. Не помогло и то, что GPU обгоняли FPGA на лестнице техпроцесса, нередко используя более современный и энергоэффективный техпроцесс. Тем не менее, основное преимущество FPGA заключается в почти пятикратном выигрыше энергопотребления, что делает их столь же привлекательными как и GPU, при условии эксплуатации в течение года или двух. В частности, наиболее продвинутые FPGA, например, производимые Intel для Altera по новейшим 22нм и 14нм техпроцессам, оказываются крайне выгодными с точки зрения энергопотребления, но имеют сравнительно высокую цену.




500GH/s майнер от BFL на основе ASIC, в окружении четырёх FPGA-майнеров на 25.2 GH/s. Можно заметить два кабеля электропитания – майнер потребляет ~2700W. (источник фото: James Gibson)

Правление FPGA оказалось кратким, потому как на свет появилось новое поколение аппаратуры, ASIC, дающее выигрыш на порядки и в энергоэффективности и в производительности. Усилия на разработку FPGA не оказались напрасны, т.к. многое, от Verilog описания майнера и до компановки печатных плат было переиспользовано.
Bitcoin: история развития, ASIC

Butterfly Labs (BFL)

BFL были первой компанией анонсировавшей свой майнер на основе ASIC. Уверенность в успехе во многом была основана на предыдущих достижениях этой компании в области FPGA-майнеров.
В июне 2012 BFL начала принимать предзаказы на три типа майнеров: $149 за Jalapenos, производительностью 4.5 GH/s; $1299 за SC Singles при 60GH/s; и за $30K можно было предзаказать монструозный SC MiniRigs с производительностью1500GH/s.
При такой цене эти майнеры могли добывать в 20-50 раз больше биткоинов на доллар инвестиций, чем GPU или FPGA майнеры. Сумма предзаказов только за первый день привысила $250K и активность заказчиков еще долгое время оставалось высокой. Этого оказалось более чем достаточно, чтобы покрыть существенные расходы на проектирование микросхем и изготовление литографических масок для 65нм техпроцесса, которые оцениваются в $500K.
Каждый чип производства BFL содержит 16 полностью развернутых конвейеров для вычисления SHA256, что по производительности эквивалентно 16 mid-hi-end FPGA, умещенным в 1 ASIC. При этом размер чипа составлял всего лишь 10х10мм в BGA корпусе.

Но тут ВНЕЗАПНО!... Первоначально BFL планировала начать поставки майнеров в начале ноября. Однако сроки многократно сдвигались из-за задержек связанных с производством на фабрике, сборкой и проблемами самой BFL. Также, энергопотребление на уровне 0.8W на GH/s за месяц до появления внезапно подскочило до 1.2W, а корпус сменился с QFN на BGA.
Энергоэффективность микросхем в итоге стала их основной проблемой. Энергопотребление оказалось в 4-8 раз выше планируемого, что вынудило снизить тактовую частоту вдвое с 500MHz до 250MHz. Из-за этого также пришлось вносить изменения во всё оборудование, которое проектировалось под эти чипы. Например, майнер Jalapenos изначально должен был использовать единственный ASIC чип, но, для достижения заявленной производительности в 4.5GH/s, потребовалось использование двух чипов. А итоговое энергопотребление составило ~6W на 1GH/s.
А еще оказалось, что только у 60% функционируют все 16 конвейеров, еще у 20% — 15 конвейеров, у 15% — 14, а оставшиеся 5% могут похвастаться лишь 12-13 работающими конвейерами.


Страсти в интернетах

Совершенно ожидаемо, что, в свете этих событий, на интернет-форумах развернулась нешуточная драма. Заказчики, которые профинансировали компанию миллионами долларов, требовали объяснений задержкам поставок. Разнообразные срывы сроков и уточнение спецификаций привели к тому, что клиенты получили первые образцы оборудования только в апреле 2013го. На пять месяцев позже запланированных сроков и почти год после момента фактической оплаты. Огромная задержка поставок существовала до августа 2013.
Клиенты BFL небезосновательно считали, что их покупки стремительно устаревают, даже еще до того, как они успели получить их в руки. Однако изначальные прогнозы относительно сроков разработки, изготовления и масштабных поставок были весьма оптимистичными с самого начала. Особенно, если учесть, что это первый ASIC продукт для BFL. Фактические сроки оказались вполне типичными для данной индустрии, ведь, например, у Intel уходит около года с появления первых тестовых образцов и до начала поставок.
А вот что совсем нетипично, так это уровень прозрачности, который обеспечивала BFL для своих клиентов на протяжении этого времени. Возможно, это объясняется моделью финансирования, основанной на предзаказах. С другой стороны это привело к росту раздражения и злобы среди клиентов, с тревогой следящих за графиком сложности майнинга BTC и гадающих, не поставили ли они не на ту лошадку…


ASICMINER

Деятельность этой компании началась в июле, после того как BFL начала принимать предзаказы на свои майнеры. Компания была основана тремя гражданами Китая и одной из их мотиваций было создать конкуренцию для BFL и не дать той стать единственным поставщиком майнеров. Подход ASICMINER к ведению дел сильно отличался от использованного BFL, поскольку они не располагали тем доверием, что заработала последняя на поставках FPGA-майнеров.
Также примечательно, что сбор средств был проведен исключительно через интернет форумы. Основатели подробно излагали свои планы по разработке ASIC и отвечали на сотни вопросов от онлайн сообщества, многие из которых касались глубоко технических деталей их бизнес модели технических решений и финансовой благонадежности.

К 18 июля была зарегистрирована компания, юридически расположенная в городе Шенжень на юге Китая, был подписан контракт c производителем микросхем и получены технологические файлы, необходимые для того, чтобы начать проектирование микросхемы. Уже к 29 июля была готова первая версия дизайна, которая должна была обеспечить производительность 1.25GH/s на каждый чип, при техпроцессе 130нм, площади чипа 17.5 мм кв. и энергопотреблении 13.3W. Техпроцесс 130нм был выбран по причине низких капитальных затрат на разработку – приблизительно $150K. Согласно постам, использовался стандартный промышленный маршрут проектирования: Verilog, имитационное моделирование в VCS, синтез на основе Verdi, IC Compiler для трассировки и размещения, Calibre для проверки правил проектирования (DRC) и т.д. Набор лицензий на эти средства стоил бы немалых денег где-нибудь в США или Европе, но в Китае и лицензии, как и рабочая сила, оказались гораздо дешевле.

В начале августа, когда была завершена первая итерация проектирования, размещения и трассировки, компании удалось привлечь средства через IPO, проведенное на онлайн-бирже GLBSE, осуществлявшей торги в bitcoin. Было предложено продавать 1 из 400 тыс. акций компании за 0.1 BTC, при этом акционерам отходило не более 200 тыс. акций. Бизнес план предполагал начать майнинг на своём собственном оборудовании с общей производительностью 12TH/s, а затем начать прямые продажи чипов или оборудования покупателям. Прибыль должна была распределяться между акционерами, пропорционально их доле в компании.

IPO завершилось 27 августа, всего было продано 163.962 акции, что на тот момент примерно равнялось $160К. Интересен тот факт, что голоса акционеров уже на этом этапе использовались для того, чтобы принять решение о конвертации 8000BTC, из собранных в ходе IPO, в привычную валюту, чтобы минимизировать риски связанные с курсом биткоина и необходимостью оплаты услуг фабрики-производителя чипов.
22 сентября была опубликована финальная спецификация чипа: 1.05V, 335MHz, 6x6 мм. и 4.2W на GH/s производительности. Дизайн чипа практически повторял открытый дизайн, используемый ранее для FPGA-майнеров, но с большей частотой, меньшим энергопотреблением и во много раз дешевле.

6го октября биржа GLBSE закрылась из-за взлома и разногласий среди её основателей. Поскольку информация об акционерах хранилась биржей анонимно, представители ASICMINER больше не знали кто их акционеры. Ситуацию усугубил и тот факт, что часть средств, привлеченных в ходе IPO, застряла на счетах биржи. Со временем, на основе электронной почты и других документов, удалось восстановить владельцев примерно 150 тыс. акций. На это ушло два месяца.
К 14 октября был запущен процесс производства и к 31 октября первые вафли добрались до стадии металлизации, за которой следует разрезание вафли на отдельные чипы. Однако фабрика задержала производство, в интересах других, более крупных заказов, и первые готовые чипы появились только 28 декабря.

14 февраля общая вычислительная мощность майнеров, которую ввёл в строй ASICMINER, достигла отметки 2TH/s. В дальнейшем мощность только увеличивалась, но не без всевозможных проблем.
Наконец компания приступила к прямым продажам оборудования. Сначала было продано около 60 «лезвий», чипы которых давали 10.7GH/s @ 83W при цене 50-75 биткоинов (примерно $5K-7.5K). Затем компания разработала майнер в стиле USB-стика под названием Block Erupter. Майнер, содержащий единственный ASIC чип, изначально продавался по 2BTC и стремительно падал в цене. Сейчас его можно найти на Amazon в районе $50-60.


USB-хаб с целым массивом Block Erupter'ов, каждый из которых дает 330 MH/s или примерно половину производительности GPU AMD 7970. (источник)


Avalon

Еще одна компания, которой удалось привлечь инвестиции путем прямых предпродаж через интернет. Её история не столь интересна, поэтому не буду тратить на неё много времени. ASIC выпускаемые этой компанией используют 110нм TSMC-техпроцесс, каждый чип размером 4х4 мм содержит единственный SHA256 конвейер, а типовая поставка представляет собой 300 чипов, смонтированых на поверхности трех «лезвий» в 4U форм-факторе. Как и ASICMINER, компания расположена в Китае.
Первоначально заказы размещались на майнеры, производительностью 66GH/s @ 600W и ценой $1299. Затем появились майнеры в формате USB-stick. А сейчас компания ведет разработку ASIC на технологии 55nm.


Bitcoin Hardware Scaling

На текущий момент многим энтузиастам майнинга удалось предзаказать майнеры, которые будут изготовлены по технологии 28 и менее нанометров. Это вызывает закономерный вопрос – насколько чипы биткоин-майнеров масштабируются в соответствии с техпроцессом. Из-за проблем тёмного кремния, улучшения в производительности следующего поколения микросхем оказываются ограниченными энергоэффективностью на уровне ~1.4x на каждый шаг техпроцесса. Логика биткоин-майнера представляет собой едва ли не худший для тёмного кремния случай, еще более худший чем Multicore или GPU, по причине практически полного отсутствия накристальной памяти и высокой активности всех элементов схемы. Т.е. если, допустим, прогресс остановится на 10нм, то можно ожидать лишь ~6.5х улучшения производительности, по сравнению с 65нм чипами. История когда BFL пришлось снижать частоту своих чипов из-за ограничений энергопотребления лишь еще раз показывает к чему сейчас приводят попытки вылезти за рамки «дозволенного» тёмным кремнием.

После того, как стремительная смена поколений майнеров перешла к переходу на ASIC, разница между последующими поколениями майнеров будет не настолько велика, чтобы быстро отправить на пенсию старое железо. Полная аналогия с ПК – если в середине 90х рост производительности превращал топовое железо в хлам за 2-3года, то сейчас и 5-летнее железо выглядит очень даже неплохо. Для производителей ASIC это будет означать погоню за энергоэффективностью, а не производительностью. А среди групп энтузиастов майнинга наибольшую выгоду получит тот, у кого будет доступ к наиболее дешевой электроэнергии. Уже сейчас известны случаи, когда скупалось старое оборудование для майнинга и возвращалось в строй, скажем, вблизи электростанций, где тарифы на электроэнергию намного ниже городских.


Оптимизация энергоэффективности

Чипы от BFL по технологии 65нм потребляют ~5.5W на GH/s. Для 130нм-ASICMINER и 110нм-Avalon чипов эти цифры составляют 8W и 9W соответственно. Согласно закону Деннарда, при переходе на 14нм можно ожидать 65/14 = 4.6x снижение энергопотребления, примерно до уровня 1W на GH/s.
Правда, т.к. первые поколения ASIC-майнеров ставили своей целью перейти от FPGA в эпоху ASIC, то, вероятно, есть огромный простор для дальнейших оптимизаций архитектуры и схемотехники с целью сократить энергопотребление, не ухудшив производительность и не увеличивая площадь. Среди таких оптимизаций может оказаться использование нескольких уровней напряжения, замена триггеров на latches или даже использование самосинхронной схемотехники, чтобы сэкономить энергию, которая тратится на тактирование. Согласно экспертным оценкам, есть еще по крайней мере четырехкратная возможность снижения энергопотребления в рамках используемого техпроцесса.

Помимо базовых оптимизаций существует много улучшений, характерных для тёмного кремния, и для которых ASIC-майнер отлично подходит. Например, использование уровней напряжения, близких к порогу срабатывания (NTV – Near Threshold Voltage). Отсутствие статической памяти и необходимости передавать сигналы на большое расстояние внутри чипа позволяет ожидать здесь еще 5х снижения энергопотребления.
Также, поскольку аппаратная реализация SHA256 очень проста, то можно представить специализированный техпроцесс изготовления для майнеров, по аналогии с разными процессами, применяемыми для чипов памяти и логики сегодня.


Вместо заключения

Развитие bitcoin-майнеров привело к появлению специализированных решений на основе ASIC. Без всякой поддержки со стороны крупных компаний. Пользователи самоорганизовались, сами профинансировали разработку программной и аппаратной части, преодолели риски и недоверие, оценили бизнес-планы и справились с задачей создания дорогих чипов при невероятно малом бюджете. Это неслыханное дело в наше время, где оценка усилий по созданию микросхем последнего поколения начинается с отметки $100млн., а количество специализированных чипов падает год от года.
Какие из этого можно извлечь уроки? При каких условиях создание чипов под конкретную задачу действительно возможно? Несколько мыслей на этот счет.

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

Если вычисления обладают высоким параллелизмом, а специализированная реализация гораздо меньше чем эквивалентный ей код для системы общего назначения, то ASIC – хороший выбор для того, чтобы сделать скачок в производительности.

Как ни странно, но исследования, проводимые в университетах, сыграли весьма скромную роль в разработке ASIC-майнеров. Для этого есть объяснение. Во-первых, университетские исследования направлены на новейшие технологии производства, которые из-за своей нестабильности не подходят для быстрого использования. Во-вторых, у университетов есть бесплатный доступ к САПР, стоимостью десятки миллионов долларов, лицензированным только для некоммерческого использования. Это означает, что выпускник университета просто не знает как делать «железо» дешево, не разорившись на лицензиях.

Время выхода на рынок обратно пропорционально новизне используемого техпроцесса. 130нм появится первым, 65нм появится потом. В тех случаях, где использование ASIC действительно дает выигрыш, нет большой разницы в том, какой техпроцесс используется. Зато очень важно время.

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

Машины для майнинга биткоинов имеют очень сильное и понятное людям объяснение своей ценности – «вы покупаете майнер и он приносит вам много денег». Кроме того, эта идея уже была проверена на предыдущих поколениях майнеров.

Две из компаний-разработчиков оказались из Китая и там же вели свою деятельность. Хоть Кремниевая Долина и известна тем, что стоит на острие прогресса, большая часть работы в условиях малых бюджетов выполняется в Азии. Дешевый доступ к рабочей силе и лицензиям играет важную роль. Маршрут проектирования, использованный ASICMINER, в США обошелся бы в $400K за лицензии на каждого разработчика.

Для того, чтобы добиться инноваций в железе, необходимо перепробовать множество новых идей, при малых затратах. Но современная полупроводниковая индустрия отошла от этого направления в сторону дорогих и очень дорогих чипов. В результате «полупроводниковые» стартапы практически не существуют, и практически нет областей, где можно было бы исследовать рискованные инновационные идеи. Не потому что нет идей, а потому, что уж очень дорого. В то же время сокращается спрос на hardware-engineer'ов на рынке труда, а молодые специалисты уходят в софтверные компании за более высокими зарплатами.
Источники:
http://habrahabr.ru/post/204008/
http://habrahabr.ru/company/intel/blog/205524/
http://habrahabr.ru/company/intel/blog/205530/
http://habrahabr.ru/company/intel/blog/205554/

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.