← Back to team overview

mimblewimble team mailing list archive

block weight decay for old inputs


So I see that grin also uses the concept of "block weight" similar to
bitcoin. I'm curious though, has there been any thought into (further)
reducing input weight according to how old the input is? Right now,
regardless of the age of an input it has the same weight. *However, isn't
it more reasonable, for example, that an input that is 1 day old would
weigh much more than an input that is 1 year old?*

The underlying motivation is: crypto networks, including grin, are new and
they are going to take time to develop/adopt. We want patient and
resourceful participants. Furthermore, on-chain transactions are akin to a
global state changes and should be viewed as extremely precious/scarce. If
a local state change is possible instead, people should prefer that method
over a globally impactful one. We want to be attracting people that are in
it for the "long haul" rather than just a "quick fix." If you're impatient
and don't plan ahead it is/should be the most-expensive way to interact
with the network. If, on the other hand, you're patient and/or plan a head
(ie: use other layers whenever possible so as to not burden the main chain)
you're rewarded with a lesser impact on blockweight (and thereby,
essentially, cheaper fees) when you do need to utilize that input. To be
clear, of course we would never prevent on-chain txs, this is merely about
encouraging one type of behavior over another and keeping grin's mainchain
clean and respected.

There are a number of advantages I can think of if we did this:

1) This would encourage on-chain txs as a last resort (rather than a first
resort) and rewards patience and forward thinking (ie: if you do an onchain
transaction to someone and that someone turns right around and does another
on-chain tx ... there is a chance that was the ONLY option, in which case
fine, but there may also have been a way for the parties to cooperate to
achieve the same end off-chain and perhaps it should always be cheaper for
all parties to at least first investigate if it's possible to accomplish
the goal off-chain and/or in another layer, such as lightning).

2) If inputs get cheaper to spend over time, this might provide a natural
mechanism for at least some dust cleanup. Similarly, it gives some piece of
mind to the hodlrs and rewards them for their patience and/or conversely
punishes them (with more expensive fees) for being finicky. While it is a
somewhat silly meme, I believe a growing cohort of hodlers are crucial to
the success of any crypto network (in addition to all the other great
features that grin brings to the table!).

3) One of the unknown issues with lightning, as far as I can tell, is that
if channels are expensive to both open (and presumably also expensive to
close), it's tough to justify the initial opening expense. However, this
mechanism would encourage long-lived channels (nothing prevents short lived
channels) since the longer a channel is open, the cheaper it would be to
close. This is also a nice peace-of-mind aspect for channel participants.
It allows them to feel more comfortable investing in the upfront cost of a)
opening the channel and b) the due-diligence cost in determining whether
the channel partner is someone/thing you'll likely transact with for a

As far as implementation (ie: at what rate should inputs decay?), it seems
reasonable to me that an input that is over a year old should "cost" (in
block weight) a small fraction of an input which is only a couple minutes
old. A smooth decay function may not even be necessary. If there is a
particular threshold that we think is healthy, a simple stepwise function
could do:

input_weight = if( age > 1 year) then "1 unit" else "3 units"
output_weight = "10 units"

Though, of course, I prefer the cleanness of a more smooth decay :-)


P.S. There are probably some downsides to this that I have not yet thought
of, but wanted to at least get a discussion going and some feedback before
investigating further.

Follow ups