Coin Lab

0 28805 5
Ethereum — Глава 4 (Майнинг)

 

 

Майнинг

Что такое майнинг?

Так что же такое майнинг? Подобно всем блокчейн технологиям, Ethereum Frontier использует стимулирующую модель безопасности. Согласованность основывается на выборе блока с высочайшей тотальной трудностью highest total difficulty. Майнеры производят блоки, которые другие проверяют на пригодность. Среди других критериев соответствия присутствует то, что блок является пригодным, только если он содержит доказательство работы  (PoW) данной трудности. Имейте в виду, что в Ethereum 1.1, это, скорее всего, будет заменено доказательством стековой модели. [Применимое доказательство работы (POW) алгоритма называется Ethash (модифицированная версия Dagger-Hashimoto включает обнаружение nonce-входа в алгоритм, так чтобы результат был ниже определенного порога, в зависимости от трудности. Главное в алгоритмах PoW – это то, что не существует лучшей стратегии нахождения такого случайного числа Nonse, чем перечисление возможностей, тогда как подтверждение решения является простым и дешевым. Если выходы имеют одинаковое распределение, то мы можем гарантировать, что в среднем время, необходимое для обнаружения случайного числа nonce зависит от порога трудности, т.е. можно контролировать время обнаружения нового блока, манипулируя трудностью. Трудность динамично регулируется, т.о., в среднем, один блок производится всей сетью за 12 секунд (т.е. время блока составляет 12с). Данный интервал, по существу, перемежает синхронизацию состояния системы и гарантирует , что поддержка ветки (позволяющая двойные затраты double spend) или переписывание истории невозможны, если взломщик не обладает более чем половиной майнинговой мощности сети (так называемая 51% атака).

Любая нода, участвующая в сети, может быть майнером, и их ожидаемая прибыль от майнинга будет прямо пропорциональна их (соответствующей) майнинговой мощности либо размером хэша, т.е. количеством случайных чисел nonce, опробованных за секунду, нормализованных общим размером хэша сети. Ethash PoW – это твердая память, делающая его ASIC-устойчивым. Это означает, что подсчет PoW требует выбора подмножеств фиксированного ресурса, зависимого от случайного числа nonce и заголовка блока. Этот ресурс (данные размером в несколько гигабайт) называется DAG. DAG  бывает совершенно разным в каждых 30000 блоках (100–часовое окно, называемое epoch (эпоха) и на его генерацию требуется время. Т.к. DAG зависит только от высоты блока, его можно сгенерировать предварительно, но если это не выполнено, клиенту необходимо будет ждать окончания процесса для производства блока. Пока клиенты фактически кешируют dags заблаговременно, сеть может испытывать массивную задержку блоков при каждом интервале транзакции. Обратите внимание, что у DAG нет необходимости генерации для подтверждения PoW, которое необходимо для подтверждения низкого CPU и маленькой памяти. В особых случаях, когда вы запускаете ноду из временного файла, майнинг начнется только, когда DAG создан для текущего интервала.

CPU-майнинг при помощи geth

Майнинг при помощи Geth

ПРИМЕЧАНИЕ: Убедитесь, что блокчейн полностью синхронизован с главной цепочкой (чейном) до начала майнинга, иначе вы не сможете осуществлять майнинг в главном чейне.

При запуске ноды ethereum при помощи geth это не является майнингом по умолчанию. Для запуска в режиме майнинга используйте опцию командной строки —mine . Параметр -minerthreads можно использовать для настройки числа параллельных потоков (по умолчанию – общее количество ядер процессора).

[box]geth —mine —minerthreads=4[/box]

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

[box]> admin.miner.start()
true
> admin.miner.stop()
true[/box]

Чтобы заработать эфиры (ether) вам необходимо наличие набора адресов базы монет (coinbase)  (или ether-базы (etherbase)). Эта ether-база по умолчанию обращается к вашему основному аккаунту. Если у вас нет набора адресов ether- базы, то  geth –mine не запустится.

[box]> eth.coinbase
‘0x’
> admin.newAccount()
The new account will be encrypted with a passphrase.
Please enter a passphrase now.
Passphrase:
Repeat Passphrase:
‘ffd25e388bf07765e6d7a00d6ae83fa750460c7e’
> eth.coinbase
‘0xffd25e388bf07765e6d7a00d6ae83fa750460c7e'[/box]

Имейте в виду, что ваша база монет (coinbase) не обязательно должна совпадать с адресом локального аккаунта, просто он должен быть существующим.

[box]geth —etherbase ‘0xa4d8e9cae4d04b093aac82e6cd355b6b963fb7ff’ —mine console 2>>geth.log[/box]

Имеется опция добавления дополнительных Данных (с пределом в 1Kb) в ваши блоки майнинга. По договоренности это интерпретируется как уникальная последовательность, так что вы имеете возможность настраивать свое уникальное устройство.

[box]admin.miner.setExtra(«ΞTHΞЯSPHΞЯΞ»)

admin.debug.printBlock(131805)
BLOCK(be465b020fdbedc4063756f0912b5a89bbb4735bd1d1df84363e05ade0195cb1): Size: 531.00
B TD: 643485290485 {
NoNonce: ee48752c3a0bfe3d85339451a5f3f411c21c8170353e450985e1faab0a9ac4cc
Header:
[

Coinbase: a4d8e9cae4d04b093aac82e6cd355b6b963fb7ff
Number: 131805
Extra: ΞTHΞЯSPHΞЯΞ

}[/box]

Рамер хэша можно проверить при помощи admin.miner.hashrate , результаты находятся в H/s (Хэш операции за секунду).

[box]> admin.miner.hashrate()
712000[/box]

После успешного майнинга нескольких блоков вы можете проверить ether-баланс своего аккаунта базы монет. Теперь, при условии, что ваша база монет является локальным аккаунтом:

[box]> eth.getBalance(eth.coinbase).toNumber();
‘34698870000000’[/box]

Чтобы потратить свой заработок в gas на транзакции, вам понадобится разблокировать данный аккаунт.

[box]> admin.unlock(eth.coinbase)
Please enter a passphrase now.
Passphrase:
true[/box]

Вы можете проверить, какие именно блоки замайнил определенный майнер (адрес) при помощи следующего фрагмента кода на консоли:

[box]function minedBlocks(lastn, addr) {
addrs = [];
if (!addr) {
addr = eth.coinbase
limit = eth.blockNumber — lastn
for (i = eth.blockNumber; i >= limit; i—) {
if (eth.getBlock(i).miner == addr) {
addrs.push(i)
}
}
return addrs
}
// scans the last 1000 blocks and returns the blocknumbers of blocks mined by your coinbase
// (more precisely blocks the mining reward for which is sent to your coinbase).
minedBlocks(1000, eth.coinbase);
// [352708, 352655, 352559] [/box]

Успех майнинга зависит от трудности набора блока. Трудность блока динамически регулирует каждый блок, чтобы регулировать мощность хэшинга сети для производства 12-секундного времени блока (block time). Т.о., ваши шансы нахождения блока следуют из соответствующей трудности размера хэша. Время, необходимое вам для ожидания, за которое вы должны найти блок, можно подсчитать следующим кодом:

ПРОВЕРКА НА ОШИБКИ

[box]etm = eth.getBlock(«latest»).difficulty/admin.miner.hashrate(); // estimated time in seconds
Math.floor(etm / 3600.) + «h » + Math.floor((etm % 3600)/60) + «m » + Math.floor(etm% 60) + «s»; // 1h 3m 30s[/box]

При наличии трудности в 3 миллиарда, типичный CPU мощностью 800KH/s должен находить по одному блоку каждые  (предложение не закончено в оригинале)

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

Награды за майнинг

Помните, что майнинг «реальных» Ether начинается с релиза Frontier. В тестовой сети Olympics, предварительном релизе Frontier , замайненные ether не имеют ценности.

Плата за транзакции

Uncles

Et-hash использует DAG (направленный ациклический граф) для доказательства работы алгоритма, это создается для каждой эпохи (epoch), т.е. для каждых 30000 блоков (100 часов). Для генерации DAG требуется длительное время. Т.к. клиенты генерируют его только по запросу, вы можете наблюдать длительное ожидание в каждом транзите эпохи (epoch), пока не будет обнаружен первый блок эпохи. Тем не менее, DAG зависит только от количества блоков, поэтому его МОЖНО и НУЖНО подсчитывать заблаговременно, чтобы избежать длинного ожидания при каждом транзите эпохи.

[box]geth makedag <block number> <outputdir>[/box]

Например: geth makedag 360000 ~/.ethash. Обратите внимание, что et-hash использует  ~/.ethash (Mac/Linux) или~/AppData/Ethash (Windows) для DAG, чтобы иметь возможность поделить его между клиентами.

 

GPU-майнинг

Оборудование

Алгоритмом является твердая память, и чтобы встроить DAG в память, ему необходимо 1-2GB RAM для каждого GPU. Если вы видите сообщение Error GPU mining. GPU memory fragmentation? Значит, у вас недостаточно памяти. GPU-майнер воплощен в OpenCL, т.о., майнеры AMD GPU будут «быстрее», чем относящиеся к этой же категории майнеры NVIDIA GPU. fglrx a cudacl  — это ваши друзья.

ASIC и FPGA – относительно неэффективны и поэтому не рекомендуются.

При получении openCL для своего набора микросхем и платформы, попробуйте:

На Ubuntu

AMD

[box]apt-get install fglrx
// wget, tar, opencl
aticonfig —adapter=all —initial[/box]

Nvidia

Следующие инструкции, в большей части, относятся ко всем системам, использующим Ubuntu 14.04 иa Nvidia GPU. Настройка EC2 примера для майнинга

На MacOSx

[box]wget
http://developer.download.nvidia.com/compute/cuda/7_0/Prod/local_installers/cuda_7.0.29_mac.pkg
sudo installer -pkg ~/Desktop/cuda_7.0.29_mac.pkg -target /
brew update
brew tap ethereum/ethereum
brew reinstall cpp-ethereum —with-gpu-mining —devel —headless —build-from-source[/box]

Проверка статуса охлаждения cooling status:

[box]aticonfig —adapter=0 —od-gettemperature[/box]

ПО для майнинга

В настоящее время geth поддерживает по умолчанию только CPU-майнер. Мы работаем на GPU-майнере, но он может оказаться непригодным для релиза Frontier. Тем не менее, можно использовать Geth , вместе с  ethminer, используя автономный майнер в качестве рабочих workers и geth в качестве планировщика, общающихся через JSON-RPCВоплощение Ethereum C++  (официально не выпущено), тем не менее, имеет GPU-майнер. Его можно использовать из eth, AlethZero (GUI) и ethMiner (автономный майнер). Это можно установить через ppa в linux, присоединившись к сети на MacOS или из источника.

В MacOS:

[box]brew install cpp-ethereum —with-gpu-mining —devel —build-from-source[/box]

В Linux:

[box]apt-get install cpp-ethereum[/box]

В Windows:

GPU-майнинг при помощи eth-майнера

Для майнинга при помощи eth:

[box]eth -m on -G -a <coinbase> -i -v 8 //[/box]

Чтобы установить ethminer из источника:

[box]cd cpp-ethereum
cmake -DETHASHCL=1 -DGUI=0
make -j4
make install[/box]

Чтобы настроить GPU-майнинг вам необходим аккаунт базы монет (coinbase). Аккаунт можно создать локально или удаленно.
Использование eth-майнера с geth

[box]geth account new
geth —rpccorsdomain localhost 2>> geth.log &
ethminer -G // -G for GPU, -M for benchmark
tail -f geth.log[/box]

ethminer обменивается данными с geth в порте 8545 (по умолчанию RPC-порт в geth). Это можно изменить путем добавления —rpcport опции  в geth. Eth-майнер обнаружит geth в любом порте. Обратите внимание, что вам необходимо настроить заголовок CORS при помощи —rpccorsdomain localhost. Вы также можете настроить порт в ethminer при помощи -F http://127.0.0.1:3301

Также имейте в виду, что вам не нужно добавлять в geth опцию —mine или запускать майнер в консоли до тех пор, пока вы не захотите заняться CPU- майнингом вверху (TOP) GPU-майнинга. Если значение по умолчанию для ethminer не работает, попробуйте определить устройство OpenCL при помощи: —opencl-device Xwhere X is 0, 1, 2, etc. При запуске ethminer с -M (эталонный тест) вы должны увидеть что-то типа:

[box]Benchmarking on platform: { «platform»: «NVIDIA CUDA», «device»: «GeForce GTX 750 Ti», «version»: «OpenCL 1.1 CUDA» }[/box]

или

[box]Benchmarking on platform: { «platform»: «Apple», «device»: «Intel(R) Xeon(R) CPU E5- 1620 v2 @ 3.70GHz», «version»: «OpenCL 1.2 » }[/box]

Для отладки geth:

[box]geth —rpccorsdomain «localhost» —verbosity 6 2>> geth.log[/box]

Для отладки майнера:

[box]make -DCMAKE_BUILD_TYPE=Debug -DETHASHCL=1 -DGUI=0
gdb —args ethminer -G -M
eth-майнер и eth[/box]

ethminer можно использовать в соединении с eth через rpc

[box]eth -i -v 8 -j // -j for rpc
ethminer -G -M // -G for GPU, -M for benchmark tail -f geth.log[/box]

либо вы можете использовать eth , чтобы GPU осуществлял майнинг самостоятельно:

[box]eth -m on -G -a <coinbase> -i -v 8 //[/box]


вернуться к оглавлению

 

Теги

Блокчейн глазами IBM: зачем нужен проект HyperLedger и когда мир перейдёт на новую технологию В четверг, 10 ноября, IT-гигант IBM представит своё видение того,…
admin by admin
0 3624 0
Взгляд Microsoft на блокчейн-технологию: от слов к коду Представляем одного из ключевых спикеров Blockchain & Bitcoin Conference Russia…
admin by admin
0 2191 0
Блокчейн в банковской системе: взгляд Сбербанка Сбербанк России – один из лидеров банковского рынка по внедрению…
admin by admin
0 4070 0

5 comments on “Ethereum — Глава 4 (Майнинг)”

  1. tau     07.09.2015

    Подойдут ли Radeon R9 390 для майнинга?

    1. admin
      admin     19.04.2016

      Конечно подойдут, выдают в среднем 27-30 Мхш

  2. Максим Максимов     11.01.2016

    подойдет ли R7 370 для майнинга etcereum, сколько она будет выдавать,может посоветуете какую видео карту приобрести? Я в первый раз планирую заняться майнингом.
    Заранее спасибо.

    1. admin
      admin     19.04.2016

      Подойдут, но насколько знаю у них всего 2 Гб видеопамяти, что может в ближайшей перспективе негативно сказаться на загрузке dag файла, т.е. майнить не будет. По картам, если бюджетно — осветую искать 7970, r9-280X, r9-290

  3. Igor S. Pelykh     19.04.2016

    Эфириум майнинг пул
    https://ethereumpool.co/stats/
    приглашает майнеров к совместной добычи Эфириума

    Краткая инструкция по подключению на русском языке:
    https://eth.pp.ua/ru/how/

Leave a Reply

Войти
Регистрация
Отправить сообщение