> how to select an analyze the choice of window
Currently, we need 100 blocks to spend the coinbase transaction and I think
that should be our "window".
> and payout functions
Something like "miner-based difficulty" should do the trick. So, each miner is
trying to produce its own block, with its own transactions, and its own
coinbase reward (based on those transactions, if we want to think ahead and do
it right from the start, we should be ready for situation where the basic block
reward is zero and the whole coinbase is based only on transaction fees). So,
each miner can mine a block with its own coinbase amount (based on transaction
fees). Then, that miner should multiply the target by the number of satoshis
collected in the coinbase transaction to get "target per satoshi". Then, by
dividing this target by its block hash, it would produce the number of satoshis
that miner should receive.
Some example:
difficulty: 170ba21f
target: 0000000000000000000ba21f0000000000000000000000000000000000000000
coinbase: 6.27930034 BTC (627930034 satoshis = 0x256d73b2 satoshis)
targetPerSatoshi:
0000000000000000000ba21f0000000000000000000000000000000000000000*0x256d73b2
targetPerSatoshi:
000000000001b367c41da68e0000000000000000000000000000000000000000
sampleShare: 0000000000000000b613738816247a7f4d357cae555996519cf5b543e9b3554b
minerReward: targetPerSatoshi/sampleShare=0x2642e (156718 satoshis = 0.00156718
BTC for this share)
Because we assume that the basic reward will be zero, we assume that all miners
will include their own set of transactions. That means, to check if the miner
really should receive that reward, checking all transactions is required.
Assuming that most of the miners will have similar transactions in their
mempools, for each share there is a need to only check transactions that were
unknown by that miner. For all other previously validated transactions, miners
can store a table like: "<txid> <fee>" and then quickly validate if the amount
specified in the coinbase transaction is correct.
To avoid "share spam", we can use something like "miner-based difficulty"
mentioned above. Everyone knows the network difficulty, but not all miners are
directly connected. So, for each connection with each miner in our
decentralized pool, we can define a difficulty for each connection. In this
way, each node can specify the absolute minimum difficulty, where paying any
reward is above the dust limit, and where including that miner makes sense.
Then, each miner can produce shares and adjust miner-based difficulty, just to
produce for example one share per 10 minutes (or per 30 seconds if we have
enough resources to fully validate each share from each miner we are connected
with in that time).
If we want to include really small miners (like CPU miners), then we need a way
to allow sub-satoshi payments. That means, each small miner should mine to a
single N-of-N taproot-based multisig, where the whole pot is then splitted
between N miners in LN. That means, for example one output of 1000 satoshis can
be shared between one million small CPU miners. Then, our target from example
above is denominated in millisatoshis.
targetPerSatoshi:
000000000001b367c41da68e0000000000000000000000000000000000000000*0x3e8 (1000 in
decimal)
targetPerMillisatoshi:
0000000006a4cd5613d29ab00000000000000000000000000000000000000000
On 2021-12-12 17:43:39 user Jeremy via bitcoin-dev
<bitcoin-dev@lists.linuxfoundation.org> wrote:
Howdy, welcome to day 15!
Today's post covers a form of a mining pool that can be operated as sort of a
map-reduce over blocks without any "infrastructure".
https://rubin.io/bitcoin/2021/12/12/advent-15/
There's still some really open-ended questions (perhaps for y'all to consider)
around how to select an analyze the choice of window and payout functions, but
something like this could alleviate a lot of the centralization pressures
typically faced by pools.
Notably, compared to previous attempts, combining the payment pool payout with
this concept means that there is practically very little on-chain overhead from
this approach as the chain-load
for including payouts in every block is deferred for future cooperation among
miners. Although that can be considered cooperation itself, if you think of it
like a pipeline, the cooperation happens out of band from mining and block
production so it really is coordination free to mine.
Cheers,
Jeremy
--
@JeremyRubin
_______________________________________________
bitcoin-dev mailing list
bitcoin-dev@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev