I just want to write this down, maybe get a discussion going. I’m not making an attempt to write a very formal proposal here. Just getting my thoughts written down.
I think we can all agree that having to hardfork everytime the price makes a bigger move sucks. Hence I am proposing to adjust the fees by introducing a voting process into the protocol, that’s let’s harvesters vote on adjusting network fees.
I realize this is not a fully decentralized approach. Think about how the fees are being adjusted right now and then think again whether this prposal would be an imporvement or not. Not fully decetrnalized does not equal bad or vulnerable for that matter.
A rough draft of a potential protocol:
Assumptions:
- fees are only being adjusted so often e.g. once a week or month defined in blocks
- clear price threshholds for network fees are established e.g. your “average” tx should not cost more or less than x cents (probably wanna use USD) in fees.
Step 1: Price discovery
In order to adjust the fees when the price spikes we have to know the price in the first place. Obviously the crazy volatility needs to be taken into account. I suggest to pick as many trusted sources as possible i.e. exchanges and maybe other sites like cmc if they provide APIs. Once we have all the prices we take them mean price. I know this sounds shitty but just hear me out and keep reading.
Step 2: Decision making
We don’t actually need to have an exact price in order to decide whether or not do adjust fees. Fees should only be adjusted in fixed increments anyways so all we need to decide is whether or not to do that and in which direction. I’m sure there is some variable in the fee formuar that the devs are currently adjusting up or down to raise or lower fees. The value of that variable would from this point on not be fixed in the code but proposed during this process and hence recorded on the blockchain.
So basically once we got the price (Step 1) we just compare it with our target and if our defined thresholds are crossed we decide to adjust the fees up or down and propose a new value for the aforementioned variable. Like I said earlier, there should be clear increments that this variable can be alterted in. Honest NIS’ must reject attempts to adjust the fees outside of those increments.
Step 3: Consensus
This is the ickiest part and I’m sure there’s a lot of room for improvement.
At this point every NIS can discover prices, knows whether or not fees should be adjusted and clear rules for such adjustments have been set.
If the decision has been made that fees shall be adjustet (and sufficient time has passed since the last adjustment) a harvester will issue a new kind of tx that basicaly just says that he votes to adjust the fees and includes his proposal for the new value (of that variable I was talking about ealier). The tx is signed by the harvesters key (most likely a delegate key, no sure if that’s an issue). Now yes, I get it. I’m proposing that some NIS issues a tx on behalf of an account. That does sound sketchy but it’s not that bad if you think about it. The NIS knows the key because it was given that key in order to harvest and if there is any monkey busines, the proposal tx will be rejected anyways and NIS also issues blocks on behalf of a harvesting account, so in the end it’s not that big a deal I think.
Every new NIS that sees that tx can either choose to throw it away because it aint valid or sign the transaction as well and broadcast it on further. Once that proposal tx has been signed by a suffcient number of harvesters (number tbd) it can be considered valid and included in a block. We can think of this as like a special kind of multi-sig between harvesters (it isn’t actually that tho).
Since proposal tx can only be issued (and signed) together with a new block (maybe it doesn’t have to be the latest block, maybe all recent harvesters could propose) we’re making sure that only harvesters issue such tx and that the number of harvesters required is going to have a high POI score behind them.
Some further thoughts…
If the price is right on the edge adjustmens might seem valid when the proposal issued but not to a validating NIS. I don’t think this has to be an issue. Ultimately the harvester decides whether or not to confirm the proposal. Adjustments can be attempted any number of times (if sufficient time has passed since the last successfull one). If someone signs a proposal tx they broadcast it again which will give all NIS’ multiple opportuities to validate and potentially sign it.
There is a lot of gossip being introduced here. The porposal tx is going to be broadcasted a lot and there’s not always just going to be one. It’s a race between proporals to get x amount of harvesters on board. Probably every NIS should only retain and broadcast valid proposals with the most signatures.
Maybe there would also be a way to do this similar to how the network syncronizes time. Ask your neighbouring NIS’ what they thing the fee should be and all that good stuff (I know it’s more complicated than that).
Harversters obviously have an incentive to keep fees high as that means higher payouts for them. Harvesters however also have an incentive to keep the network healthy otherwise they’re not gonna be earning anything.
If the “oracles” get compromised all at conce then oviously we’re fucked. What are the odds of that tho ? The impact of hacks are also mitigated by having fixed and sensible increments for adjustements. That way nobody can just bottom out the fees.
I don’t see why exchanges/services would collude to alter fees but sure, that would suck.
All I really wanted to do is get a discussion going. Hit me with the obvious flaws in my proposal