Hi! Thanks once again for help - here are the questions that I have prepared.
Please advise also if some of these questions seem wrongly formulated / miss some important concepts.
1) When mining on Ethereum how do you establish the communication between the block producer (node) and the mining rigs (GPU / CPU)? (custom protocol / Stratum based custom protocol / other)
2) How do you define strategies for transactions selection for a block? Do you just accept the standard settings or use custom / advanced solutions?
3) Do you have any custom build or publicly available solutions for the best expected value among the available blocks to mine on top of? Similarly how do you make a decision between mining an empty block or waiting for transctions? (This question is all about trade-offs in choosing various branches and delaying block production for better tx fees)
4) Do you constantly update your mining rigs with the best possible block mix hash and nonce? (i.e. you start mining a block 'N' and in the meantime a better block at height 'N' can be constructed with better tx fee rewards (but the same parent) - do your block producers send an updated mix hash + nonce immediately or do you commit to a previously produced block.
5) What types of nodes are you running? (Parity / Geth / other; fast sync, full sync) Are there any important configurations that you adjust?
6) What is causing the most trouble with the current client implementations from a miner perspective?
7) How do you control your nodes? Through JSON RPC over HTTP / over WebSockets / different?)
8) Do you run only one node and many mining rigs or many nodes?
9) How do you deploy your nodes (Docker style containers / manual installation)
10) How do you upgrade and monitor client versions.
11) What signalling methods do you use / would like to use.
12) How do you ensure that your mempool is populated - do you keep a big list of static nodes?
13) Do you have geographically distributed light nodes or custom solutions to broadcast blocks quickly around the world?
14) What mining libraries do you install. What APIs do they expose.
I think I see that you consider work consumers as oblivious of the type of work they receive
It's not a consideration ... it's a fact.
Hashing workers (miners of any kind CPU, GPU FPGA ASICs etc) do not have any knowledge about the meaning/composition of the job they've been provided.
Their task is simple : given the input (header hash) do a linear search on nonces (choose any range you prefer in 0~2**64) which, applied to the algorithm provides a result below target. Seed hash is provided to determine the epoch which has an impact on DAG size and is part of the algorithm.
Nothing else. Miners do not have any knowledge of how the header hash is obtained (one TX ? multiple TXs ? gas limits ? whatever ...) ... they simply INPUT -> HASH ALGO -> OUTPUT.
Prove is you can provide them with any kind of randomized header hash (which might have no corresponding data in any block or candidate block) and they will carry out the task.