Бассейн принять "инвалид" акции по тысячи за каждый майнинг
круглый. Можно сделать чистые деньги из этого сценария
##### Что прослойка добыча #####
Большинство известных горных бассейнов позволяют использовать так называемый горно роговой
Протокол пула. Bitcoin и altcoin шахтер настроен на использование хоста
адрес и порт сервера протокола прослойка шахтер.
Например, Eligius (http://eligius.st) Майнинг предлагает прослойку
соединение для добычи полезных ископаемых. Это майнинг * не * пострадавших от этого
уязвимость.
После подключения к серверу рогового шахтер будет "Выполнять работу" и решить
математическая, крипта задача. После того, как он решил один из этих задач он будет
* Представить * так называемый * * доля на сервер рогового. Чем больше разделяет
шахтеры порождают тем больше они будут вознаграждены после успешного горного тура
завершено. Фактическая награда дается шахтера многое зависит от
стиль системы вознаграждения используется майнинг.
Шахтеры представить акции с использованием метода "mining.submit" при работе с
прослойка. Клиентские материалы содержат:
1. Имя работника
2. Работа ID
3. ExtraNonce 2
4. NTime
5. Нонс
Сервер будет реагировать с успешным принятым ответом акций или будет
отказаться от доли отправить запрос.
Доля подчиняется могут быть отправлены в любой момент к серверу рогового. слой
сервер будет принимать только действительные акции и в случае этще
уязвимость прослойка будет принимать * один * действительные первоначальные акции и * тысячи *
акций, которые следуют за первоначальную действительную долей, но являются "инвалид" потому как
они не решают математические задачи в любом случае. Уязвима добыча
бассейн будет принимать акции в качестве чистой выплаты монет, если осталось незамеченным.
===== Количество Листинг 1. ======
Код:
this.processShare = функция (JobId, previousDifficulty, трудности,
extraNonce1, extraNonce2, Ntime, Nonce, IPaddress, порт, workerName) {
вар shareError = функция (ошибка) {
_this.emit ( 'доля', {
Работа: JobId,
ф: Ipaddress,
работник: workerName,
Уровень сложности: трудность,
Ошибка: Ошибка [1]
});
Возвращение {ошибка: ошибка, результат: нулевая};
};
вар submitTime = Date.now () / 1000 | 0;
если (extraNonce2.length / 2! == _this.extraNonce2Size)
вернуть shareError ([20, 'неправильным размером extranonce2']);
вар работа = this.validJobs [JobId];
если (TypeOf работа === 'не определено' || job.jobId! = JobId) {
вернуться shareError ([21, 'работа не найдена']);
}
если (nTime.length! == 8) {
вернуть shareError ([20, 'неправильным размером Ntime']);
}
вар nTimeInt = ParseInt (Ntime, 16);
если (nTimeInt < job.rpcData.curtime || nTimeInt > submitTime + 7200)
{
вернуть shareError ([20, 'Ntime вне диапазона']);
}
если (nonce.length! == 8) {
вернуть shareError ([20, 'неправильным размером нонса']);
}
если (! job.registerSubmit (extraNonce1, extraNonce2, NTime, Нонс)) {
вернуться shareError ([22, 'дубликат акции']);
}
extraNonce1, extraNonce2, Ntime, Nonce, IPaddress, порт, workerName) {
вар shareError = функция (ошибка) {
_this.emit ( 'доля', {
Работа: JobId,
ф: Ipaddress,
работник: workerName,
Уровень сложности: трудность,
Ошибка: Ошибка [1]
});
Возвращение {ошибка: ошибка, результат: нулевая};
};
вар submitTime = Date.now () / 1000 | 0;
если (extraNonce2.length / 2! == _this.extraNonce2Size)
вернуть shareError ([20, 'неправильным размером extranonce2']);
вар работа = this.validJobs [JobId];
если (TypeOf работа === 'не определено' || job.jobId! = JobId) {
вернуться shareError ([21, 'работа не найдена']);
}
если (nTime.length! == 8) {
вернуть shareError ([20, 'неправильным размером Ntime']);
}
вар nTimeInt = ParseInt (Ntime, 16);
если (nTimeInt < job.rpcData.curtime || nTimeInt > submitTime + 7200)
{
вернуть shareError ([20, 'Ntime вне диапазона']);
}
если (nonce.length! == 8) {
вернуть shareError ([20, 'неправильным размером нонса']);
}
если (! job.registerSubmit (extraNonce1, extraNonce2, NTime, Нонс)) {
вернуться shareError ([22, 'дубликат акции']);
}
===== Количество Листинг 1. ======
Код:
this.registerSubmit = функция (extraNonce1, extraNonce2, Ntime, Nonce) {
представление вар = extraNonce1 + extraNonce2 + NTime + одноразовое значение;
если (submits.indexOf (представление) === -1) {
submits.push (представление);
возвращает истину;
}
вернуться ложным;
};
представление вар = extraNonce1 + extraNonce2 + NTime + одноразовое значение;
если (submits.indexOf (представление) === -1) {
submits.push (представление);
возвращает истину;
}
вернуться ложным;
};
В листинге номер 1. Вы можете увидеть функцию, которая обрабатывает передаваемое
доля. Он будет проверять на правильность формы параметров mining.submit. А также
наконец называют job.registerSubmit (...) в строке 211 с этими параметрами в
проверить, если он обрабатывает долю дубликата. Он * должен * выбросить дубликат
доля с shareError и возвращение из этой функции яваскрипта. Когда мы
смотреть в функции registerSubmit мы видим следующие строки:
Код:
* 115. * представление вар = extraNonce1 + extraNonce2 + NTime + одноразовое значение;
* 116. * если (submits.indexOf (представление) === -1) {
* 117. * submits.push (представление);
* 118. * возвращение правда; <----- Доля принимается
* 119. *}
* 120. * вернуться ложным; <----- доля не обрабатывается, дублируют
доля.
* 116. * если (submits.indexOf (представление) === -1) {
* 117. * submits.push (представление);
* 118. * возвращение правда; <----- Доля принимается
* 119. *}
* 120. * вернуться ложным; <----- доля не обрабатывается, дублируют
доля.
Итак, как вы можете представить дубликат акцию? Это довольно легко. extraNonce1,
extraNonce2, Nonce, NTime являются значения HEX. И все знают, что HEX
значения могут содержать ASCII-символов.
Давайте возьмем пример extraNonce1 будучи 0xDEADBEEF. Что будет
Функция registerSubmit делать с долей, если представить 0xDEADBEEF, а затем
0xDEADBEEF, а затем 0xDEADBEEF и так далее и так далее. Ну: программа будет
слепо принять акции! Это происходит потому, что функция registerSubmit является
нечувствительны к регистру, а доля остается в силе по арифметике.
Для Auto Buy - Follow - -.->>>>>> https://satoshibox.com/dyovjevqqkb26zvrsu6ynkpg <<<<<<<<<