Some background:
I had several previous original suggestions about improving several aspects of proof-of-work (something I'm generally very interested in!). In particular about encryption based hashes, and timestamp-free proof-of-recency (a trustless approach for dealing with precomputed attacks). I spent a large amount of time on that.
At some point I felt I've reached some sort of a dead end and decided to take a turn, go "out of the box" and explore what can be done using currency instead. This thread actually started as a half-joke. The title was written in a way that was intentionally silly so people wouldn't take it too seriously. I was not initially sure it would turn out to be something valuable or interesting but I had some sort of a hunch.
After about 50 cumulative hours of thinking about this, I came to an interesting direction that I'm not sure has been explored by other projects. I understand that Nano has the "Feeless" mantra which they effectively committed themselves to after dozens of interviews and public appearances. That's okay with me, although I repeat that this is not technically a system of fees! (Anyway this could be useful for other projects. I could maybe suggest it to the xDai project).
The idea is actually inspired by proof of work! In its core it is very similar to how variable proof of work difficulty works. You could take the same mechanism and apply it back to PoW and instead of "tokens" or "credits" use "proofs". It is just that units of currency are much easier to scale (and greener) than computations, so I chose to use them.
Also remember PoW costs money to operate (electricity and equipment). Those same funds could be used directly for the same purpose (xDai developers believe users could afford 100s of transactions for 1 cent - which is not very far from PoW operational costs - though they haven't really proved that it works in practice since the network hasn't really become popular yet).
I'll start with describing it using proofs of work (though probably a strange approach otherwise), since it seems like the "LOOKS LIKE FEES with SUGAR on ToP!" FUD seems to cause users of this forum to get a brain-freeze and stop being open and imaginative about things.
The way proof-of-work currently works is that there's some difficulty level that's required. This difficulty level can change based on network congestion and other aspects (could also be individual for the particular account).
Now imagine you'd enhance the standard PoW with a system like this:
-
Allow anyone to compute PoW to as many digits as they want.
-
Require at least 5 proofs to be precomputed ahead of time (they have to be computed in bulk) and have special transaction where they are submitted to their ledger such that a separate credit "balance" is incremented, one for each proof (the credits includes the difficulty of the proofs as well, difficulty has to be equal for all proofs - this all takes no more than 5-6 bytes in each block).
-
Design an algorithm that determines the instantaneous required difficulty based on network conditions (each node computes it independently with potentially a sub-millisecond resolution).
-
Instead of using difficulty for prioritization, entirely reject proofs with difficulty lower than the current threshold and accept ones equal to or above (no special advantage for higher difficulty).
-
And what if the difficulty of the proof that is sent is somewhere at the boundary? (where some nodes may accept it and some don't?) It will propagate through the nodes that accept it. If the propagation stops at some point, it is thrown away. Otherwise it will get to be voted on (and the ordinary voting rules apply). (To make the voting work - nodes would also propagate blocks with proofs whose difficulty is slightly below their own threshold - some negative variance would be accepted)
Now what is happening is that during an attack, difficulty rises exponentially. This system causes attackers to have predict the future difficulty before they start the attack. Otherwise most of their requests will be rejected and they've wasted a lot of resources for nothing.
"Normal" users have the advantage that they don't plan on sending tens of thousands of blocks, only a few, so they can choose a difficulty level that would give them a level of service that's sufficient when there is no ongoing attack (if there is an attack they'll have to wait).
The idea is that this system will reach an equilibrium such that there's going to be some measure of difficulty that'd would give good service overall to honest users as well as serve as a good deterrent for attackers. This difficulty level would also be estimated by the distributed proof of work service so that it can ensure good service for its users.
Users who have special "emergency" transactions and want to get immediate service (without waiting for the difficulty to go down) can "cut in line" and compute PoW with higher difficulty than what is provided by the free service.
You may say that the attackers would simply take advantage of this and intentionally cause the overall difficulty to become higher by sending spam blocks only when the network is not congested. This "slow" attack will not cause the network to freeze but just make everything unnecessarily more "expensive". This problem actually exists on all popular networks, including ones using fees. (For example it has been claimed that Binance is partially responsible for making the Ethereum fees go sky high by "abusing" Ethereum with large amounts of transactions - possibly to promote their own centralized smart chain as an alternative). There are various approaches to mitigate this (for example giving "discounts" based on stake, etc.)
Now so far I've talked only about proofs of work. You may ask if it is even reasonable that proofs of work would become so difficult at times, or that users' PCs (mobiles are mostly out of the picture here) would be required to many minutes or even hours just for sending one transaction?
Of course it is not realistic. That's probably why nobody ever suggested it. However if you replace "PoW" with "Burned currency" and "Distributed PoW" with "Faucet" it starts to make more sense.
Other interesting analogies?
- With PoW we keep talking about the threat "specialized hardware" like ASICs and GPUs. In currency? the "ASICs" are those people from countries with high-purchasing power the "Mobiles" are people from poorer countries. This discrepancy is actually much better! If several cents are not a lot of money for you? donate them to have less fortunate users be able to use the service. No need to invest in specialized hardware, or even for a PC or an internet connection. Zero emissions as well.
I could go on to give more details about the exact way this could be implemented: I mean exactly how the credit transactions would work and specific fields in the block would be set. How the algorithm would determine the difficulty / burn cost on an instantaneous basis. How propagation and consensus would work. How faucets could randomize the burn value to create a "queue". How to deal with surges of requests etc. There is a lot of detail but I don't feel motivated to continue. I don't think anyone here would actually read it or care about it. I've spent an enormous time already on this (this comment itself took several hours of work).