The general steps are as follows:
Call your Monero daemon's RPC method get_block_template.
Take the blockhashing_blob from the response and convert the hex to binary.
Set a 4 byte nonce in bytes 39..42
Hash the data with cn_slow_hash, you'll get 32 bytes back, that's your hash. Note, this result hash is binary - it's a 32 byte number. If you want to ...
Quoting SChernykh (one of the CryptonightR authors):
CryptonightR is a modification to Cryptonight whereas RandomX is done completely from scratch. The main purpose of CryptonightR is to be the next PoW for Monero until RandomX is ready.
Which leads to why RandomX needs more auditing/testing. RandomX is a completely new PoW algorithm, not just a modified ...
I'm assuming this is a follow-up question to your previous question.
Here is an example that shows how to hash a block hashing blob with a supplied nonce:
bhb = binascii.unhexlify("...
It is certainly possible to make a miner using Python. There are several ways this can be accomplished and depends on what you want to achieve.
At it's bare minimum you would need to have the hashing algorithm, cn_slow_hash, implemented in Python. An example library that exposes this is here. The rest will boil down to what kind of miner you want to create....
Step #1 in this answer details how to get a blockhashing_blob.
If you plan on creating it yourself instead, this is much more involved. You would have to deserialize the blocktemplate_blob, calculate the merkle tree root hash for the blocks transactions (including a newly constructed coinbase transaction), then concatenate the block header, merkle tree ...
The pool adds unique data into a block template (in the reserved space) and creates a hashing blob so that it sends each miner unique data (a unique hashing blob) for each miner to hash. Note here that the pool stores the block template it used to create the miners hashing blob.
The miner adds unique data (the nonce) to the supplied hashing blob and then ...
I'm going to do my best to answer your questions but I'm afraid I'm no ArticMine, who I'm sure could answer far more eloquently.
I'm hoping to find a current reference that explains how the dynamic block size/fee calculation works? ... how does Monero set the fee during normal operation?
Beyond the code (e.g. source for getting a fee estimate), A note on ...
I can only provide a partial answer. I had a similar question How are fees computed? and was linked to the same note on fees that you mentioned. I ultimately found the note to be out of date as well.
It looks like the only description available is to read the code. I believe the fee is being computed in Blockchain::get_dynamic_base_fee and the method seems ...
Your pool first calls get_block_template and reserving some space by making use of the reserve_size parameter.
You then take the returned blocktemplate_blob, convert the hex data into binary, and modify the data at the offset provided by the returned reserved_offset parameter. This is where you will write your per miner, miner ID for example. So assume you ...
See this answer for the messages used.
The same above linked answer should be self explanatory apart from maybe the job blob, which is a block hashing blob, e.g. the data to hash. This and this should help on that front.
The same above linked answer also has a link to an example bare-bones Python miner using the stratum protocol.
As of right now, it's using the latest version of CryptoNight (CNv2, as used in Monero hard-fork v9). CryptoNight lite is not used by Monero, neither is heavy. CN lite first appeared in Aeon IIRC and is (as is heavy) a different algorithm altogether.
Answering your actual questions:
How many hashes are needed to solve a Monero block of difficulty 1? ... Or, more simply, the average number of hashes (total, across the whole network) required to solve a Monero block of difficulty 1?
The answer is 1. Any valid ("valid" being the correct hashing algorithm), hash will solve for a difficulty of 1.