Another issue is how to deal with the accruing / accumulating nature of worker / witness payments.
I mean witness pay is paid in BTS per block. I don't see how you could pay witnesses incrementally without increasing the interval of payouts. Payments With 21 witnesses, 3 second block times and price per BTS at $0.005 that comes out to roughly $20USD per day or ~4k BTS. Each witness account would have to be tracked as to how many blocks it generated during the payment period, be it daily / weekly / monthly.
I like the idea in general, but believe the devil is in the details of implementation. Should conversions of BTS be done per witness per pay period or should a witness pay pool of BitUSD be created for all witness daily / weekly / monthly and from that pool each witness' pay is calculated based on the blocks they produced?
It might also be prudent to build in a fallback strategy to revert to payouts in BTS to cover situations where the BTS price drops very low and remain there which might drain the reserve pool into oblivion. That may be such a rare situation it isn't worth coding to cover, but frankly this is an idea we may not be able to anticipate all of the ramifications of.
As @tbone pointed out, changes will be required in a number of different areas of the UI as well as the backend. So this may not be a quick or cheap proposal to implement.
The reserve pool is large enough now however that I believe it's a good time to give something like this a try. Let's get more discussion on the finer points of this with an eye towards implementation issues. In particular I'd like to hear from @kenCode, @xeroc or others who are familiar with the C++ codebase.
No offense intended, but @fav's comment to basically just have one person go off and just "do it" (i.e. create a proposal) for such a change is not very realistic. This will take more than one mind working together to accomplish to make sure we cover all bases.
Let me show you yet another way of dealing with this:
Basically each witness has a
signing key and corresponds to a
regular account which in turn has an active an owner key.
The active key is required to obtain the payment.
Now, how about this setup:
0. I want to become a witness
1. A business/entity/foundation/whatever sets up a regular account for me
2. I provide them with a pubkey for signing (i control the private key)
3. The business registeres the witness with that key
4. I start producing blocks for an account that I do not control
5. I request payment with the business/foundation/entity
6. They obtain the BTS from the vesting balance, buy USD/GOLD whatnot and burn the rest (minus a fee)
This would "work", although it comes with a few drawbacks:
* No such business exists yet
* The business may have control over multiple witnesses and can change keys any time
* It may be difficult for people to identify who 'actually' runs the witness
* Figuring out how many blocks have been missed would need to happen offchain
* The entity/business could run with the BTS or simply not burn it
It comes with a couple advantages too:
* We can do this today
* The witness can actually get paid in any currency
* Any kind of contract can be made beween company and witness
* company can perform the backup functionality (at a fee) and switch
over to other witnesses if you miss your blocks
Ideally, such a company would only control maybe 3-5 witnesses but it
could be ofc possible to have many of those businesses to co-exist.
Throughts?