Я упростил процедуру путем удаления части алгоритма, которые не имеют значение.
Вот процедура я использовал:
1. Получить последний блок из litecoin testnet и хранить свои данные в памяти.
2. Вызов getauxblock против dogecoin testnet. Так как в этом примере только собирается объединить шахтные dogecoins, мы игнорируем "chainid" и хранить только "гашиш" в памяти. "цель" получается вызовом getblocktemplate, потому что нам нужно трудности и другие вещи из полного шаблона для расчета выплат. "цель" в getauxblock и в getblocktemplate перепутаны, поэтому соответствующее преобразование производится.
3. Когда блок находится в litecoin testnet, проверьте, является ли целевой меньше целевого показателя dogecoin testnet в. Если это так, мы снова называем getauxblock, прохождения "гашиш" точно так, как предусмотрено в пункте 2, без каких-либо изменений, и данные, имеющие серийные номера блоков в качестве второго параметра. Помощь для команды утверждает, что параметры "getauxblock [хэш] [auxpow]."
Результатом является то, что litecoin блоки всегда принимаются, и dogecoin блоки всегда отклоняются со следующими ошибками:
Код:
2014-10-09 2:37:45 ОШИБКА: Aux POW Merkle корень неправильно
2014-10-09 2:37:45 ОШИБКА: AUX POW не действует
2014-10-09 2:37:45 ОШИБКА: AUX POW не действует
Вот пример "auxpow" сериализованная блок, который подается в dogecoin Дэймон. Я аннотированный это, как я думаю, что это правильно, но имейте в виду, что аннотации могут быть неправильно, и вы не должны считать, что я определил правильные вещи, чтобы вставить или в правильном порядке. В реальном представлении, нет никаких пробелов или символов между разделенными секциями.
Litecoin coinbase сделки:
Код:
02000000010000000000000000000000000000000000000000000000000000000000000000ffffffff52034e5106062f503253482f04c93c3754fabe6d6d50868b4be2c645d5b763f8b2f137e87e48ed7154db9e7a5083a4d4582fdfbeec010000000000000008f8000006190000000c2f50726f68617368696e672f000000000100f2052a010000001976a914c7045a47e3aff57c28a728c7339150efc879555488ac000000000a50726f68617368696e67
Дважды SHA-256 хэш заголовка litecoin блока:
Код:
0309e093c93a7560ecde4128c13371ee4778bd195a03681e57aeacd694094600
Длина Merkle ветви от litecoin блока, который является таким же, как ветвь послала в протоколе рогового. Поскольку этот litecoin блок не имеет сделок, длина Merkle ветви равна нулю:
Код:
00
Merkle филиал litecoin, если бы один, будет здесь в серии хэшей. Поскольку нет никаких операций в блоке, кроме coinbase сделки, мы не добавлять ничего здесь.
Код:
[Там нет ничего здесь]
"филиал сторона маски" от coinbase сделки, которая всегда нули:
Код:
00000000
Вспомогательный счетчик ветви, которая равна нулю, потому что мы только добыча dogecoins в этом примере:
Код:
00
Вспомогательный индекс отрасли, который также равен нулю, потому что мы только добыча dogecoins:
Код:
00000000
Блок заголовка блока litecoin, в полном объеме:
Код:
0000000254a8f234ca1f2448ca9a85dcade4697e1496fa46a22abe8ffb0cfc604a4d11371b31c4accb59203d465c70588f1fd68eddd93e25da83101bbaa68aa02244800454373c611d02324089d3403e
Я также сломать мое понимание того, что предполагается разместить в сделке litecoin coinbase, чтобы показать, что мы объединить добывающие dogecoins. Вот мое понимание горной части слияния в litecoin coinbase транзакции, которые вы можете найти внедренную в транзакции coinbase напечатанной выше:
Эта строка означает, что мы добыча слияния.
Код:
fabe6d6d
"гашиш" параметр, полученный из команды getauxblock в dogecoin демона, дословной:
Код:
50868b4be2c645d5b763f8b2f137e87e48ed7154db9e7a5083a4d4582fdfbeec
Следующие используются для слияния, когда несколько монет-добыты изыскиваются в то же самое время, но так как мы только объединить по добыче dogecoins, это 4-байтовое 1, а затем 4-байта 0.
Код:
0100000000000000
Вот некоторые из вещей, которые я пробовал, и ссылки, которые я использовал.
1. https://en.bitcoin.it/wiki/Merged_mining_specification, как представляется, является основным источником по добыче полезных ископаемых слиянием. Тем не менее, я заметил, что некоторые из примеров в документе не работают с dogecoins. Так, например, "блок хэш" в дополнительном доказательстве работы, которая представляется namecoin в этом документе (второе поле) выглядит как доказательство работы хэш для блока, так как она заканчивается в строке нулей. Глядя на это, я попытался поместить Scrypt доказательство работы хэш в этой области, но это не сработало.
Мое понимание "блок хэш" является то, что при вызове getblock от демона, вы предоставляете двойную SHA-256 хэш заголовка блока, а не Scrypt доказательства работы хэша. "блок хэш" не Scrypt доказательство работы хэш.
2. Я попытался реверсирования различные хэши в полях блоков на теории, что порядок байт была проблема, но 16 различных перестановок не работает. Я попытался реверсирования dogecoin вспомогательного хэша, блок хэша, в Merkle ветвь хешей (когда есть операции в блоке litecoin, которые есть не в этом примере), и даже блок заголовка блока litecoin. Ни одна из этих вещей не работал. Я не мог найти перестановку отмененных и необращенных хэш, которые сделали разницу. Конечно, вполне возможно, что, так как есть очень много вариантов, что я пропустил правильную и хэш не в правильных байтах в примере.
3. В http://forum.namecoin.info/viewtopic.php?f=7&т = 368, есть плакат, который дает советы о том, как представить слияния добывали блоки getauxblock, хотя эта информация относится к namecoin. Я рассмотрел, что я делаю, и это, кажется, идентичен тому, что он указывает.
4. После рассмотрения документации по какому Merkle дерева, это заняло у меня весь день, чтобы выяснить, что происходит, когда есть нечетное число сделок в дереве. Оказывается, что алгоритм хэш узлов с собой. Увидев это, я взял пример выше и я попытался указать длину из "Merkle филиал" для coinbase сделки как "01," а затем при условии, что хэш coinbase транзакции в качестве единственного в хэш "Merkle филиал." Идея давно выстрел в том, что, возможно, dogecoin демон искал хэш транзакции coinbase с самими собой, и использовать его в качестве корня дерева. Он по-прежнему возвращается ту же ошибку.
5. В транзакции litecoin coinbase, 44-байтовый горно слияния часть (Fabe + "мм") Предшествует длины (44, или 2в) в некоторых примерах, но не в других. По-видимому, эта длина не нужна, если строка добычи слияния осуществляется в течение первых 20 символов сценария, так что я оставил его в этом примере. Тем не менее, в предыдущих итерациях, я добавил дополнительные байты "2с" до горнорудной слиянии части, и это не приводит к какой-либо разнице в этой ошибке.
6. В этих примерах я всегда предполагал, что Меркл ветвь дважды sha256 хеши, даже для Scrypt монет. Вся документация, я прочитал, кажется, указывает, что в Scrypt, единственным отличием является алгоритм, используемый для проверки работы. Из того, что я могу сказать, остальная часть блока до сих пор хранятся с использованием SHA-256 хэша, как хэш заголовков блоков и даже хэш сделок. Если есть какая-то разница между Scrypt и SHA-256 в том, как заголовки горнодобывающих объединений сохраняются, что может быть ключом.
Благодаря тому, кто хочет, чтобы попытаться указать на то, что здесь не так. У нас есть около 15 функций, готовых к выпуску и слейте добычей является единственной, что сдерживает высвобождение. Ваша помощь очень ценится и будет вознаграждена.