• Forum has been upgraded, all links, images, etc are as they were. Please see Official Announcements for more information

Dash Java Mining

sergey461

Member
Доброе время суток!

Заинтересовался данной валютой (спасибо пропаганде некого alex_ru :) ). Попробовал поискать ПО для майнинга ... Хм ...есть только ПО, которое может собрать спец по C/C++ на определенной платформе.

Собственно вопрос: есть ли докуметация, описывающая алгоритм майнинга для DASH? Я сам являюсь специалистом на Java ... пока есть мысль/желание реализовать майнинг на Java ..... а там посмортим ...

Спасибо за помошь .... и за критику
 
Приветствую,

Алгоритм аналогичен биткоину, так что, думаю, проще всего начальные вещи взять там. В целом же - берете getblocktemplate (https://en.bitcoin.it/wiki/BIP_0022), формируете на его основе хэдер и хэшируете (https://en.bitcoin.it/wiki/Block_hashing_algorithm). Если хэш меньше target, то мы нашли блок - делаем submitblock, если нет - меняем nonce и ищем дальше, если кончилась размерность nonce, берем свежую дату и стартуем nonce с 0. И так пока не найден блок, потом все по новой. Отличие от биткоина - алгоритм X11 - просто вместо двойного sha256 нужно последовательно хэшировать через 11 хэш-функций (https://github.com/dashpay/dash/blob/master/src/hash.h#L295-L337)

EDIT: есть у меня правда сомнения, что на java можно переплюнуть c++ по скорости майнинга, но это, возможно, религиозное :tongue:

Могу посоветовать по тонкостям еще поспрашивать тут https://dashtalk.org/forums/questions-and-help.70/ (англ.) и тут https://forum.bits.media/index.php?/topic/5740-dash-darkcoin/page-156 (там как раз много русскоязычных майнеров тусуется, насколько я понимаю)
 
Last edited by a moderator:
Приветствую!

Как я понимаю, сейчас майер, по сути, является клиентом для какого-нибуть пула. Т.е. не solo mining, а pooled mining. Сейчас для pooled mining используется протокол stratum , а сервер, работающий по данному протоколу, уже сам работает с пуллом.

Практически, задача сводится к тому чтобы написать клиента для stratum сервера.

Я .... на правильном пути?
 
И еще просьба в догонку .... можете дать реальный getblocktemplate ?

Попробовал поиграться ....
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package ru.schernolyas.sha256test;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.time.Instant;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;

/**
*
* @author Sergey Chernolas
*/
public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
System.out.println("SHA-256 Algorith found");
long unixTimestamp = Instant.now().getEpochSecond();
System.out.println("unixTimestamp : "+Long.toHexString(unixTimestamp));
StringBuilder headerStr = new StringBuilder();
String version="01000000";
headerStr.append(version);
headerStr.append("81cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000");
headerStr.append("e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc122b");
headerStr.append(Long.toHexString(unixTimestamp));
headerStr.append("f2b9441a");
headerStr.append("42a14695");
byte[] bytes = Hex.decodeHex(headerStr.toString().toCharArray());
long start = System.currentTimeMillis();
for (int i = 0; i < (1024*1000); i++) {
for (int x11Index = 0;x11Index<11;x11Index++) {
byte byteData[] = md.digest();
md.update(bytes);
}
}
long stop = System.currentTimeMillis();
System.out.println(" dur: " + (stop - start));

} catch (NoSuchAlgorithmException | DecoderException e1) {
e1.printStackTrace();
}
}

}

на Intel Core i7 результат получился
--- exec-maven-plugin:1.2.1:exec (default-cli) @ sha256test ---
SHA-256 Algorith found
unixTimestamp : 55d98e85
dur: 12104 mc

..... это ... совсем детский сад?
 
sergey461, для теста можете зарегистрироваться на любом пуле - чтобы проверить идут ли shares на него.
Если нигде не хочется регистрироваться - можно использовать p2pool => например http://p2pool.pl

> сейчас майер, по сути, является клиентом для какого-нибуть пула
Да, майнеры добывают DASH на пулах.
https://github.com/sgminer-dev/sgminer => исходники майнера для AMD.
https://github.com/sp-hash/ccminer => исходники майнера для NVIDIA.
 
Понял. Спасибо за помощь.

Зарегистрировался на coinmine точка pl .... пока играюсь ...
 
Всем привет!!!

Нашел статью,описывающую Litecoin mining через Stratum. Взял первые попавшиеся данные, которые вернул Stratum -сервер.
Написал алгоритм по статье (scrypt заменил на X11) .... Вау!!!! Я попал ниже target !!!! :confused::smile:

Клевая сказка ... но так не бывает.

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

Нашел статью,описывающую Litecoin mining через Stratum. Взял первые попавшиеся данные, которые вернул Stratum -сервер.
Написал алгоритм по статье (scrypt заменил на X11) .... Вау!!!! Я попал ниже target !!!! :confused::smile:

Клевая сказка ... но так не бывает.

Помогите пожалуйста разобраться с алгоритмом. Статью и исходник вышлю по почте ...
Зачем секретничать/скромничать, выкладывай ссылки тут. Коллективный разум завсегда больше подскажет :wink:
Исходник можно на github, а если он небольшой, то и в pastebin сойдет.
Почтой народ делиться не особо любит, кмк.
 
Зачем секретничать/скромничать, выкладывай ссылки тут. Коллективный разум завсегда больше подскажет :wink:
Исходник можно на github, а если он небольшой, то и в pastebin сойдет.
Почтой народ делиться не особо любит, кмк.

Привет!!

Хорошо. Я тогда подготовлю подробное описание того, что я там натворил и исходники приведу в читаемый и понятный вид. А то .... пока как у Винокура "тут играть а тут не играть.а тут рыбу заворачивали" . Думаю, сегодня вечером или завтра вылажить свое творение
 
Привет всем!
Stratum сервер вернул
INFO: 2. read from server: {"id":null,"method":"mining.set_difficulty","params":[0.03125]}

Дробный mining.set_difficulty .... что с этим делать?
 
Зачем секретничать/скромничать, выкладывай ссылки тут. Коллективный разум завсегда больше подскажет :wink:
Исходник можно на github, а если он небольшой, то и в pastebin сойдет.
Почтой народ делиться не особо любит, кмк.
По многочисленным просьбам трудящихся https://github.com/schernolyas/dashjminer .
Сам алгоритм реализован в классе ru.schernolyas.stratum.client.NewMain . Пока непонятно что делать с дробной mining.set_difficulty .

Сама реализация более-менее описана тут http://bitcoin.stackexchange.com/questions/22929/full-example-data-for-scrypt-stratum-client

Вопросы и замечания welcome!! Спасибо за любую помощь!!!!!
 
Привет всем!
Stratum сервер вернул
INFO: 2. read from server: {"id":null,"method":"mining.set_difficulty","params":[0.03125]}

Дробный mining.set_difficulty .... что с этим делать?

Согласно описанию стратума
https://mining.bitcoin.cz/help/#!/manual/stratum-protocol
Server Can Occasionally Ask Miner to Change Share Difficulty
Default share difficulty is 1 (big-endian target for difficulty 1 is 0x00000000ffff0000000000000000000000000000000000000000000000000000), but server can ask you anytime during the session to change it:

{ "id": null, "method": "mining.set_difficulty", "params": [2]}
This Means That Difficulty 2 Will Be Applied to Every Next Job Received From the Server.
Т.е. шары для следующих данных ищем со сложностью больше 0.03125.
Другими словами, ищем шары с хэшем меньше target, который будет в этом случае:

D = 0.03125 (это 2**(-5), так проще посчитать)
target = (0xffff * 2**208) / D = 0xffff * 2**(208 + 5) = 0xffff * 2**213

python -c "print format(0xffff * 2**213 , '02x')"
1fffe00000000000000000000000000000000000000000000000000000

Для красоты можно еще добить нулями :)
0x0000001fffe00000000000000000000000000000000000000000000000000000
 
Поправил расчет.

target: 0x0000001fffe00000000000000000000000000000000000000000000000000000
reverted X11 hash:0x09bdaea4c59e5a365cde07c5ac8174329e83302c5d9343992044d15f2edb487f
reverted X11 hash больше ..... а так красиво все начиналось :)
Правильно ли я делаю что target сравниваю с reverted X11 hash (Little-ending)?

вопрос по коду dash.h

return hash[10].trim256(); (https://github.com/dashpay/dash/blob/master/src/hash.h#L295-L337)
что делает функция trim256()? Просто возвращает первые 256 бит?
 
Поправил расчет.

target: 0x0000001fffe00000000000000000000000000000000000000000000000000000
reverted X11 hash:0x09bdaea4c59e5a365cde07c5ac8174329e83302c5d9343992044d15f2edb487f
reverted X11 hash больше ..... а так красиво все начиналось :)
Правильно ли я делаю что target сравниваю с reverted X11 hash (Little-ending)?

Есть простой способ проверить, что получилось то, что нужно:

Берем блок наугад, например, 100000 и смотрим его hash:
> dash-cli getblockhash 100000
00000000000fd08c2fb661d2fcb0d49abb3a91e5f27082ce64feed3b4dede2e2

Смотрим его header в "человеческом" виде:
> dash-cli getblockheader 00000000000fd08c2fb661d2fcb0d49abb3a91e5f27082ce64feed3b4dede2e2
{
"version" : 2,
"previousblockhash" : "0000000000108d4b9231f4ec99ab5dc970b6ec740745f44eee0754f67d598ac3",
"merkleroot" : "43eb305e7a85ec9d27b3724dab6b2ede5111d54f4568a03d4181231fbd356e81",
"time" : 1405041879,
"bits" : "1b10cf42",
"nonce" : 5628506
}

Собираем "сырой" вид у себя и сравниваем с правильным результатом:
> dash-cli getblockheader 00000000000fd08c2fb661d2fcb0d49abb3a91e5f27082ce64feed3b4dede2e2 false
02000000c38a597df65407ee4ef4450774ecb670c95dab99ecf431924b8d100000000000816e35bd1f2381413da068454fd51151de2e6bab4d72b3279dec857a5e30eb43d73cbf5342cf101b5ae25500

Прогоняем через хэш-функцию, смотрим результат, сравниваем с исходным хэшем блока и допиливаем при необходимости :)

вопрос по коду dash.h

return hash[10].trim256(); (https://github.com/dashpay/dash/blob/master/src/hash.h#L295-L337)
что делает функция trim256()? Просто возвращает первые 256 бит?
да, просто "конвертит" таким образом uint512 в uint256
https://github.com/dashpay/dash/blob/master/src/uint256.h#L350-L357
 
Да, блок эксплореры некоторые выдают подробности, можно через них. Я просто привык к командной строке :)
dash-cli - консоль в командной строке, то же самое можно выполнять в qt-кошельке Инструменты -> Консоль
 
Да, блок эксплореры некоторые выдают подробности, можно через них. Я просто привык к командной строке :)
dash-cli - консоль в командной строке, то же самое можно выполнять в qt-кошельке Инструменты -> Консоль

понятно. просто я себе на домашний комп DASH кошелек еще не ставил.
 
Back
Top