Функция WorkMaker представляет собой фундаментальный сдвиг путь poolserverj работает. ПКР узкое место навсегда, так что ваши Bitcoin демоны могут немного отдохнуть.
Я пойду через главные особенности один за другим, и полный список изменений находится в конце этого поста. Но сначала...
Пожалуйста, сделайте это!
Параметры конфигурации существенно изменились. Я настоятельно рекомендую вам начать заново с файлом свойств образца и перенести настройки более. Попытка сделать это по-другому будет очень склонный процессом ошибки. Я также рекомендую вам взять время, чтобы прочитать комментарии в файле свойств в деталях. Они документация де-факто poolserverj.
Пожалуйста, убедитесь, что вы прочитали раздел «Настройки по умолчанию донорства» этот пост. Это может быть отключено, но следует помнить, что он там по умолчанию.
Рекомендуемый незначительный патч
Я настоятельно рекомендую сделать это очень небольшой патч к вам демонам. Это просто мешает вашей debug.log быть заспамят.
В файле rpc.cpp или поиск bitcoinrpc.cpp для этой линии (там могут быть дополнительные strMethod там внутри так ищут "ThreadRPCServer метод ="):
Код:
если (strMethod! = "getwork")
Е ("ThreadRPCServer метод =% s \ п", StrMethod.c_str ());
и изменить его на:
Код:
если (strMethod! = "getwork" && strMethod! = "getworkaux" && strMethod! = "getauxblock"
&& strMethod! = "buildmerkletree" && strMethod! = "getblocknumber" && strMethod! = "getmemorypool")
Е ("ThreadRPCServer метод =% s \ п", StrMethod.c_str ());
Теперь на новые возможности ...
Merged Mining Поддержка
Poolserverj теперь имеет полные нативные слитые реализации интеллектуального анализа данных. Он обрабатывает все функции объединенного-горно-проксите внутренне и выполняет все дополнительные функции, которые ранее требовали объединенного-горнодобывающую версии bitcoind. Это означает, что требования к присоединяемым выемкам намного проще:
* Нет объединенного-горно-прокси требуется
* Исходный вариант bitcoind, который включает в getmemorypool патч (Bitcoin 0.5.0 включает в себя это)
* Namecoind слиты горнодобывающая версия.
* По желанию, если вы хотите, чтобы воспользоваться coinbasing на namecoin цепи, то вы можете применить getmemorypool патч к namecoind (что очень SimPE делать)
Есть несколько моментов, с объединенномом добычей мы все обнаруженных в течение последних нескольких недель, которые poolserverj ручки:
Частичные Stales
Когда один цепь (например, namecoin) находит новый блок, но с другой цепью, не вполне возможно, на долю быть несвежей для одного, но не других. Poolserverj обнаруживает это и устанавливает our_result = 1 и причина = partial_stale. При желании вы можете также настроить булевой столбец базы данных для каждой цепи, которая будет отмечаться с 1,0, так что вы можете рассчитывать на акцию кредиты на каждую цепь основе. Это особенно проблема с cgminer клиентами (исправлено в последнем исходном коде, хотя), которые не уважают longpoll если prev_block_hash не изменился. Это изменится только тогда, когда Bitcoin блок найден так cgminer клиент может получить частичную stales для namecoin цепи довольно часто.
Longpoll Passthrough
Для решения проблемы двойного longpoll. Существует принципиальная конструкция столкновение между longpolling и объединенной добычей. В основном это работает следующим образом: Когда происходит изменение двойного блока (т.е. БТДА и NMC решается одним решением) демоны не увидят новый блок в одно и то же время. Из того, что я видел, задержка около 1-2 секунд не является необычной. Что происходит потом, что одна цепочка переходит к следующему блоку. PSJ проверяет другие цепи, чтобы увидеть, если они обновляются, видит их не так начинает посылать пластинки. Перед тем как шахтер получает LP и устанавливает новое соединение ТЛО вторую цепь достижение так PSJ начинает посылать очередную порцию пластинки. Те шахтеры, которые не получили их новое соединение LP, зарегистрированными до второго LP пропустить так продолжать работать на старом блоке, пока они будут нормально (вероятно, около минуты). Этот патч-адрес, установив период longpoll PassThru. Там, где два изменения блоков происходит в течение определенного периода времени (10 секунд). После изменения 2-го блока и до 10 секунд после изменения 1-го блока не прошло, любые longpolls полученных будут иметь короткое истечение 1 секунду, после чего они будут возвращать новую работу работника. Это даст любым медленным шахтерам несколько секунд, чтобы получить их longpoll и узнать, что есть второй новый блок для работы. Причина второй задержки 1 является предотвращение longpoll спама. Большинство шахтеров немедленно отправить еще один запрос LP, как только они получают ответ. С 0 задержки это создает петлю LP спам. Они будут по-прежнему спам 1 / сек до 10 секунд, поэтому это называется обходной путь, а не исправить. Там действительно нет никакого способа, чтобы решить эту проблему должным образом, за исключением канавы либо longpolling или слитые добычи ALLtogether.
Сеть поддержки Experimental Scrypt
В настоящее время только litecoin поддерживается, но дополнительные цепи могут быть добавлены относительно легко. Все, что требуется, чтобы добавить новую поддержку цепи является определение цепи в источнике и добавить несколько констант. Это не было проверено в области пока нет.
Отказоустойчивость базы данных
PoolServerj теперь весьма терпимы к сбоям базы данных. Соединения повторены, если они терпят неудачу.
Рабочие будут продолжать обслуживаться из кэша в этом случае и с учетом кэша по умолчанию истечение 60 минут (если вы явно не смывать работник), это означает, что только влияние работника является то, что изменения в рабочем от переднего конца не будут распространяться и новые рабочие не смогут подключиться до подключения к БД не восстанавливается.
Акции будут сериализовать на диск в пакетном режиме, когда DB не доступен. Когда он возвращается в Интернете любые акции на диске будет израсходована отправляется в базу данных. Акции хранятся в пакетах в виде отдельных файлов, так что вполне возможно взять эти файлы и передать их на другой сервер poolserverj для загрузки.
Конечный результат является база данных могут перейти в автономном режиме для значительного периода и poolserverj должна счастливо продолжать работать без потери данных. Единственное влияние будет, что работники, которые не связаны более чем на 1 час, не смогут пройти проверку подлинности.
Я испытал это, беря MySQL в течение часа с стресс-тест клиента, представившего около 400 акций / сек. Когда база данных была возвращена онлайн потребовалось всего несколько минут, чтобы очистить все акции в базу данных.
WorkMaker
Обратите внимание, что все изменения WorkMaker и Coinbasing были проверены и работают на testnet как для Bitcoin и namecoin testnet.
Моя самая большая пугало с объединенном добычи был дополнительные накладные расходы он положил на сервер, чтобы следить за всем. Но ... что сливались добыча отсекает WorkMaker дает обратно в 10 раз
WorkMaker внутреннее поколение работы. Больше не getwork RPC не призывает Bitcoin демонов, означает, что вы можете использовать акции стандартной версии bitcoind (до тех пор, это версия, которая поддерживает RPC вызов getmemorypool).
Помимо включения coinbasing функциональности (о которой я расскажу ниже) предлагает огромные преимущества в производительности.
Вы можете спросить: "не просто перемещая нагрузку на центральный процессор от bitcoind до poolserverj?", Частично ... Есть два основных способа это победа, хотя:
1. Вы устранить RPC / сетевые накладные расходы латентности знаковой для того, что должно быть операцией микросекунды.
2. Реализация Bitcoin использует очень неэффективный алгоритм для генерации работы. Большая часть нагрузки процессора происходит от хеширования. Реализация по умолчанию требует ~ 2 * nTransactions хэши для создания работы. Реализация poolserverj требует log2 (nTransactions). Для среднего блока с 50 сделок это означает, 100 хешей VS 6. Для большого блока с 200 транзакций сказать, это означает, что 400 хешей против 8.
Представление
Конечно, я сделал некоторые бенчмаркинг, чтобы доказать точку, так вот число ...
Сырое поколение испытания путем изменения poolserverj потреблять работу внутри, так что, как только он генерируется он будет пытаться произвести еще один ...
* 0.3.0 с JK заплата bitcoind демона: ~ 2000 работает / сек
* WorkMaker: 24000 работы / сек
Frontside емкость getwork - с помощью клиента тестирования напряжения с 50 одновременных потоков непрерывно выдающих запросов getwork. Это измеряет пропускную способность, включая накладные расходы RPC:
* 0.3.0 с JK заплата bitcoind демона: ~ 1000 работ / сек
* WorkMaker: ~ 4000 работ / сек
Самый высокий уровень фронтсайда getwork я видел в производственной среде с 0.3.0 был на одном из серверов BTC Гильдии: 4500 работ / сек, так что это, вероятно, разумно предположить, что этот сервер будет способен ~ 15000 / сек.
Это только первая итерация и существует множество способов, это может быть оптимизировано, которые будут происходить в будущем.
Coinbasing
Так, помимо производительности, что еще делает workmaker сделать для вас? Потому что он генерирует транзакцию coinbase внутренне (по аналогии с Люком-Jr coinbaser патча) у нас есть несколько вариантов, чтобы играть.
Во-первых, установить адрес выплат в файле свойств. Это не было связано с bitcoind вы подключены. Это может быть отсутствует безопасный кошелек адрес, если вы хотите. Или, если вы запускаете несколько экземпляров poolserverj на разных серверах, вы можете гарантировать, что все coinbase награды идти к одному кошельку независимо от того, какой сервер генерируется их.
Coinbase строка сообщения: Существует возможность установить короткую coinbase строку сообщения. Я жёстко, чтобы это было ограничено до 20 байт, как я не хочу поощрять спам в blockchain. Вы можете использовать какой-то идентификатор пула или даже частный UID.
Coinbasing может также работать на namecoin или других Окс цепей, но это требует getmemorypool патч, который будет применен. Это очень простой патч применять, даже я был в состоянии сделать это первым идти, и я самый большой Numpty вокруг, когда речь идет о C ++.
Coinbase Пожертвования
Теперь можно установить автоматическое пожертвование на любой адрес в coinbase сделки. Это может быть рассчитано с использованием 4-х различных методов:
1. абсолютное значение в Bitcoins (или фракции)
2. процент от общего вознаграждения блока
3. процент от общей суммы вознаграждения блока, за исключением платы за сделками
4. процент только транзакционных сборов
Обратите внимание, что я сказал, ANY адрес. Если вы жертвуете и использовать программное обеспечение с открытым исходным кодом от других разработчиков в вашем бассейне, пожалуйста, рассмотреть вопрос о направлении им чаевых, а также. Вы можете установить, как многие цели пожертвования, как вам нравится.
Пожертвования будут работать на Окс цепи, а также, если вы установите цепь на localCoinbasing = верно но вы должны иметь getmemorypool патч, приложенный к цепи Окса демону.
Почему я поставил эту функцию в?
Как многие из вас знают, я не запускать пул, и я даже не являюсь владельцем горной вышки. Пожертвования для работы в области развития являются моим единственным источником монет. Это хорошо для пользователей poolserverj, потому что я не отвлекаться на повседневные вещи бегов бассейна, и я могу сосредоточиться на разработку программного обеспечения. В полных часов времени, я мог бы измерить время я потратил на poolserverj месяцев. Я никогда не ожидал пожертвования, но когда несколько начал приходить в ней было довольно приятно. И я заметил, что это дало мне гораздо больше мотивации, чтобы сохранить улучшения кода. Это просто не хлопот, как вы можете помочь держать меня и других разработчиков с открытым исходным кодом заинтересованы и мотивированы.
Если вы не хотите использовать эту функцию, у меня нет проблем с этим. Там нет много причин, почему люди не могут (0 плата бассейна, например), и я не собираюсь давать какие-либо льготную поддержку в зависимости от того люди или не жертвовать, на самом деле никакого реального способа я могу сказать, где пожертвования поступают от Я вижу. Я думаю, что запись показала, что я всегда был счастлив в прошлом, чтобы оказать поддержку и консультацию без ожидания пожертвований.
По умолчанию Пожертвование
Файл свойств образца является установка с пожертвованием по умолчанию. Вы можете удалить это просто закомментировать эти строки. Я понимаю, что это может быть спорным, поэтому я выбрал, чтобы сделать это таким образом, просто так, что люди должны сделать сознательный выбор, чтобы НЕ пожертвовать. Эта функция, очевидно, интересует меня больше, чем другие люди, и я уверен, что если это не вариант по умолчанию многие люди, которые, возможно, были счастливы пожертвовать бы не просто потому, что он никогда не пересекает их ум, чтобы посмотреть на эту функцию. Таким образом, каждый, кто использует его, должен остановиться и подумать об этом на мгновение.
Первый раз, когда вы начинаете эту версию poolserverj вам будет предложено с предупреждением, что это по умолчанию пожертвование существует. Если файл «donation.ack» существует в каталоге TMP вы не увидите строку и poolserverj начнет нормально.
Если кто-то действительно чувствует, что они пропустили сообщение и подарены невольно связаться со мной с блоками, участвующих и до тех пор, как я могу проверить, что блоки относятся к вашему бассейну, я буду счастлив послать монеты обратно в тот же адрес, что главная награда coinbase была уделяется.
Будущее развитие
Я буду поддерживать на 0.3.x ветвь в течение короткого промежутка времени, пока ветка 0.4.x не считаются стабильной при котором она будет объединена.
Non-объединенная добыча вполне возможна с 0.4.0, но он не был тщательно протестирован.
Несколько следующих основных событий, которые я планирую работать на включают:
* Включить poolserverj прослушивать несколько портов
* Двоичный протокол работы по замене FRONTSIDE RPC. Это может уменьшить использование полосы пропускания на 85% и устранит необходимость в longpolling и все это связано проблемы.
Полный Changelog
Из 0.3.0.FINAL сих:
[0.4.0rc1 WorkMaker]
Основные характеристики:
Полная объединенная добыча поддержка, включая longpoll для всех Окса цепей.
Поддержка Scrypt цепей (litecoin, TBX, FBX)
WorkMaker внутреннего поколение работы (более чем в 10 раз быстрее, чем с JK RPC заплаты демонов)
Coinbasing любого адрес выплаты как для материнской цепи, вспомогательных цепей (всп цепи демон должен иметь getmemorypool патча применяется, чтобы использовать эту функцию)
Пожертвования через coinbase сделки. ПРОЧТИТЕ SAMPLE CONFIG КАК ЕСТЬ DEFAULT СДАЧИ которую вы можете удалить.
DB отказоустойчивость, акции сериализовать на диск, если DB соединение потеряно и отправляется на сервер, когда соединение будет восстановлено. Это означает, что наряду с кэшированием Worker
Вы можете переключить дб от без потери каких-либо акций. Единственное влияние будет, что новые работники не смогут проверить подлинность и выше
нормальная нагрузка DB, когда вы включите его снова.
Подробное описание изменений:
- добавлено UserAgent в качестве дополнительного столбца для протоколирования акций.
- добавлена поддержка Scrypt как доказательство алгоритма работы хеширования.
- Обновление для создания объединенного добычи auxPoW внутри. Это полностью устраняет зависимость от bitcoind-мм версии и позволяет использовать фондовый bitcoind, который изящный, поскольку она содержит getmemorypool и нам нужно это. Точка отметить: хешей в 2 Merkle ветвей, содержащихся в auxpow перепутаны по сравнению с хэш транзакции в главном блоке Merkle дерева.
- добавлено свойство db.connectionOptions, чтобы позволить пользователям добавлять произвольные подключить Paramenters к разъему URL.
- Обновление разделить регистрацию на Повторные попытки соединения. Если соединение все еще не удалось, то акции упорядочиваются на диск. Нить ShareLogger периодически проверяет наличие акций на диске и повторно отправляет их в базу данных. Это означает, что акции могут выжить через рестарт poolserverj, если БД не удался так долго. ЭТО API ЛОМАЯ CHANGE. Любые db.engine.shareLogging плагины, которые наследуют от DefaultPreparedStatementSharesDBFlushEngine должны иметь свои подписи метода обновления.
- Интеграция поколения локального блока для аих цепей, позволяющих coinbasing в аих блоках
- уборщик нить теперь проверяет мертвые соединения longpoll, можно обнаружить только соединение, которые не были молча сброшенный шахтером.
- добавлены временные метки для лесозаготовок
- Фиксируем: отсутствует проверка блока интервал недвижимости
- исправить: с одной WorkSource Fetcher блокировала, пока новый блок проверка была выдана и вынуждена все блоки должны быть отмечены в синхронизации.
- блок проверки сна изменение (), чтобы ждать (), так что если может быть разбужен с извещать
- Refactored все JsonRpc конкретный код из WorkSource, ShareSubmitter и BlockChainTracker. bitcoind сторона сервера завершена абстрагироваться от протокола и транспорта.
- добавить чувствительно к регистру работника опции имени (caseSensitiveWorkerNames = ложь)
- добавить AnyWorkerFetchEngine в обход DB поиск и возвращает работника с запрашиваемым именем. Это для бассейнов, которые не имеют Проходчик счета и использовать адрес выплат в качестве имени пользователя. Пароль устанавливается в пустой строке.
- добавить BLACKHOLE дб доля флеш двигатель, который ничего не делает. Быстрая работа вокруг отключения письма акций дб.
- взломать, чтобы свойства, чтобы возвращать пустую строку вместо NULL - используйте значение '~ # EMPTY_STRING # ~
- восстановить блок трекер для обработки несколько цепей с различными номерами блоков.
- настроить longpolling для учета дополнительных цепей. LP Теперь срабатывает, когда любая цепь находит новый блок, но ждет, пока getblocknumber не вернулся из каждой цепи первым, чтобы попытаться предотвратить двойные пластинки. Если демон вниз будет тайм-аут и в любом случае огнь longpoll через 1 секунду.
- позволяют субтрактивные traceTargets. то есть «traceTargets = все, -merged» покажет все traceTargets кроме «слиты»
- Исправления для блока синхронизации случаев, когда отслеживание синхронизации теряет сюжет и не срабатывает изменение блока.
- поддержка частично несвежих акций. Там, где одна цепь продвинулась к следующему блоку старые работы все еще может быть справедливо и для других блоков. Этот патч проверяет, что работа является действительным в течение по крайней мере одного блока дает три возможных результата. приняты, принимаются частичной затхлый, затхлый
- longpoll PassThru. Для решения проблемы двойного longpoll. Существует принципиальная конструкция столкновение между longpolling и объединенной добычей. В основном это работает следующим образом: Когда происходит изменение двойного блока (т.е. БТДА и NMC решается одним решением) демоны не увидят новый блок в одно и то же время. Из того, что я видел, задержка около 1-2 секунд не является необычной. Что происходит потом, что одна цепочка переходит к следующему блоку. PSJ проверяет другие цепи, чтобы увидеть, если они обновляются, видит их не так начинает посылать пластинки. Перед тем как шахтер получает LP и устанавливает новое соединение ТЛО вторую цепь достижение так PSJ начинает посылать очередную порцию пластинки. Те шахтеры, которые не получили их новое соединение LP зарегистрировано вовремя пропустить так продолжать работать на старом блоке, пока они будут нормально (вероятно, около минуты). Этот патч-адрес, установив период longpoll PassThru. Там, где два изменения блоков происходит в течение определенного периода времени (10 секунд). После изменения 2-го блока и до 10 секунд после изменения 1-го блока не прошло, любые longpolls полученных будут иметь короткое истечение 1 секунду, после чего они будут возвращать новую работу работника. Это даст любым медленным шахтерам несколько секунд, чтобы получить их longpoll и узнать, что есть второй новый блок для работы. Причина второй задержки 1 является предотвращение longpoll спама. Большинство шахтеров немедленно отправить еще один запрос LP, как только они получают ответ. С 0 задержки это создает петлю LP спам. Они будут по-прежнему спам 1 / сек, поэтому это называется обходной путь, а не исправить. Там это действительно способ решить эту проблему, кроме канавы либо longpolling или слитых добыч ALLtogether.
- добавил след сообщение, чтобы указать longpoll PassThru начала / остановлен
- добавить агент пользователя, чтобы запросить мета-данные для будущих лесозаготовок в базу данных
- Зафиксируем для restoreWorkMap. Теперь, когда workmaps не циклические на блок blocknumber больше не Релевент при загрузке карты с диска. Только вопросы, работа возраста и старые работы будут очищены от следующего чистого цикла, поэтому мы просто принимаем все из файла в workmap.
- при получении работы из кэша добавить проверку Validate для обеспечения работы не истекло, и продолжить опрос, пока не будет обнаружено, действительная или кэш пуст.
- добавить повторов для работника дб выборки. Если не удается установить соединение закрыть и снова открыть соединение затем повторите запрос, прежде чем выбросить исключение.
- добавить litecoin поддержки
- расширить fireBlockChange работать в облегченном режиме, когда блок не изменился, но вы хотите, чтобы вызвать флеш кэша и longpoll (например, если сделка высокого значения прийти в.)
- восстановление доли регистратора по умолчанию использовать сопоставление столбцов, так что все столбцы теперь могут быть необязательными.
- Добавленные компоненты необходимы, чтобы вызвать longpoll при новой транзакции, включенные в блок увеличение ожидаемых сборов более чем определенный пользователем порог.
- включить workmaker для не объединенной горнорудной конфигурации
- добавил вынуждены признание coinbase по умолчанию пожертвования при первом запуске
[0.3.1]
- исправления безопасности для двух ошибок, которые позволили дублирующим акции, которые будут представлены в конкретных обстоятельствах.