1

Looking on the forum, it seems that getblocktemplate RPC call returns both a blockhashing_blob and blocktemplate_blob, but on the monerod documentation i didn't find anything about the blockhashing_blob.

As i understood, it returns a blocktemplate_blob, that is an entire block blob, with a reserverd field (nonce), that you can change trying to make the block hash below the target. It seems to be complete with miner coinbase transaction, and all the other stuff belonging to a block.

Is there anything that i didn't catch?

1

blockhashing_blob is the block header and Merkle tree root hash. The block header has a nonce field and it is this a miner updates and then hashes the blockhashing_blob (which contains the header and updated nonce).

blocktemplate_blob is the whole block with transactions (including any requested reserved space). Nobody hashes the blocktemplate_blob directly, rather, they use this to create a blockhashing_blob to hash.

The reason both are returned from getblocktemplate is because a miner / pool / proxy may want to modify the block's reserved space before creating the blockhashing_blob. This reserved space can only be easily changed before creating the blockhashing_blob because you need to know it's offset. Conversely, the nonce can be updated in the blockhashing_blob directly because it's at a fixed location.

Lastly, it is the updated blocktemplate_blob that's submitted back to the network when a successful hash is found. This has been updated to include the successful nonce and any reserved data. Setting aside other validation, other nodes simply convert the submitted blocktemplate_blob to a hashing blob, hash then check resulting hash meets the difficulty target. I.e. they do not need to edit anything.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.