Нужен пошаговый алгоритм взаимодействия и майнинга эфира на пуле(для примера Dwarfpool
).
Нигде нет этого всего в одном месте.
То, что известно мне:
1)Закидываем на сервер запрос
http://exp-us.dwarfpool.com:81/0x8D4CC8e0b26BfFFe5418d820F9F6581Ebc3CB8C1/rig1123341061151111101141129934583450464834443410910111610411110034583410111610495103101116871111141073444341129711497109115345891934434105100345850125
2)Получаем с сервера ответ
{"result":["0x20e452a80e8d07b613b2176bd87edbe50fc5ce6402de22ec0444fc3c59a52ab0","0x1842cb89c0dfad7efb5ce2bf93f418e369214e9e1773a1bfe7c9c72ceee682bb","0x0000000225c17d04dad2965cc5a02a23e254c0c3f75d9178046aeb27ce1ca574"],"jsonrpc":"2.0","id":0}
3) Как то обрабатываем этот ответ.
ulong[] array = this.Search(work.headerHash, upper64OfBoundary, this._workId, start_nonce);
if (array == null) // А вот и проблема - этот массив всегда null
{
break;
}
this._client.SubmitWork(this.light, array, work.headerHash); //Это никогда не выполняется
start_nonce = array.Max() + 1;
4) Отсылаем его на сервер? 5) Запрашиваем новую работу?
Хотелось бы знать, как должно быть. Обработчик ответа всегда возвращает null
и тут же запрашивает следующую работу. Судя по статистике сайта - программа не работает, ничего не вычисляет и не возвращает. Хотелось бы починить, но непонятно, как должно быть? Блок-схему или просто пошаговое объяснение логики взаимодействия. Весь приведённый код, ответы с сервера - настоящие.
По просьбе @Birdy прилагаю метод Search
:
private ulong[] Search(byte[] headerHash, ulong upper64OfBoundary, int workPackage, ulong start_nonce)
{
this._kernel.SetMemoryArgument(0, this._searchBuffer);
this._kernel.SetMemoryArgument(1, this._header);
this._queue.WriteToBuffer(headerHash, this._header, true, null);
this._kernel.SetValueArgument(3, start_nonce);
this._kernel.SetValueArgument(4, upper64OfBoundary);
Stopwatch stopwatch = new Stopwatch();
uint num = 0u;
uint[] array = new uint[this._maxSearchResults + 1];
string text = "00.00";
stopwatch.Start();
while (true)
{
this._kernel.SetValueArgument(3, start_nonce);
this._queue.WriteToBuffer(this._emptyBuffer, this._searchBuffer, true, null);
this._queue.Execute(this._kernel, null, new long[1]
{
this._globalWorkSize
}, new long[1]
{
this._workgroupSize
}, null);
this._queue.ReadFromBuffer(this._searchBuffer, ref array, true, null);
this._queue.Finish();
num += this._globalWorkSize;
if (stopwatch.Elapsed >= this._second)
{
stopwatch.Stop();
string text2 = Miner.Speed = ((double)num / stopwatch.Elapsed.TotalMilliseconds / 1000.0).ToString("00.00", CultureInfo.InvariantCulture);
num = 0u;
stopwatch.Reset();
stopwatch.Start();
if (text.Substring(0, 2) != text2.Substring(0, 2))
{
text = text2;
UnityEngine.Debug.Log(string.Format("[{0}] {1}MH/s [A{2} R{3}]", DateTime.Now.ToString("HH:mm", CultureInfo.InvariantCulture), text2, Miner.AcceptedShares, Miner.RejectedShares));
}
}
if (array[0] != 0)
{
UnityEngine.Debug.LogWarning("array[0] != null");
ulong[] array2 = new ulong[this._maxSearchResults];
for (int i = 0; i != Math.Min(array[0], this._maxSearchResults); i++)
{
array2[i] = start_nonce + array[i + 1];
}
return array2;
}
if (this._workId == workPackage && this.Running)
{
start_nonce += this._globalWorkSize;
continue;
}
break;
}
Miner.Speed = "00.00";
return null;
}
MinerSpeed
показывается. Значения вполне реалистичные, около того, что показывает стандартный ethminer
. Но после этого всё равно возвращает null
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте, необходимо сделать ползунок с индивидуальным дизайномПоэтому input type=range не подойдет, пробовал использовать jQueryUI, но он тоже...
Поясните, пожалуйста, почему не работает граница слова \b для русских слов, в то время, когда для английских работает