Merged mining specification
Aux proof-of-work
This is used to prove work on the aux chain. In vinced's original implementation it's generated by calling the getworkaux RPC method on the parent bitcoind and then the work is then submitted by passing it to the aux-chain namecoind as the second parameter to getauxblock.
Field Size | Description | Data type | Comments |
---|---|---|---|
? | txns | txn | Coinbase transaction linking the aux to its parent block |
? | merkle_link | mrkllink | The merkle path linking the coinbase (above) to its block |
? | aux_branch_count | var_int | Number of merkle branches linking this aux chains to the aux root |
32* | aux_branch[] | char[32] | Linking aux merkle branches |
4 | index | int32_t | Index of "this" block chain in the aux chain list |
80 | parent_block | block header | Parent block header |
Merkle link
Field Size | Description | Data type | Comments |
---|---|---|---|
32 | block_hash | char[32] | Hash of the block header |
? | branch_count | var_int | The number of links to bring the transaction to the block's merkle root |
32* | branch[] | char[32] | Linking merkle branches |
4 | index | int32_t | Index of this transaction in the merkle tree |
Merged mining coinbase
Insert exactly one of these headers into the scriptSig of the coinbase on the parent chain. vinced's code always inserts an OP_2 in front of it, but you don't have to.
Field Size | Description | Data type | Comments |
---|---|---|---|
4 | mm_header | char[4] | Magic bytes: 0xfa, 0xbe, 'm', 'm' |
32 | block_hash | char[32] | Hash of the aux work merkle tree |
4 | merkle_size | int32_t | Number of entries in aux work merkle tree |
4 | merkle_nonce | int32_t | Nonce used to calculate indexes into aux work merkle tree |
Aux work merkle tree
If you're just mining a single auxiliary chain, you don't have to worry about this - just set the merkle tree hash in the coinbase to the aux chain block's hash, the merkle size to 1, and the merkle nonce to 0. TODO: full documentation.