nano-node icon indicating copy to clipboard operation
nano-node copied to clipboard

Research / implement time-bounded proofs of work

Open clemahieu opened this issue 1 year ago • 0 comments

The general idea is to mix a timestamp along with the attempt nonce when generating proofs of work for blocks. The node would then be able to consider the timestamp when ordering unconfirmed blocks in buckets. This would mean proofs are associated with a particular time rather than being timeless as they currently are.

The motivation for looking at using time-bounded proofs of work is twofold:

Gives a natural timeout to unconfirmed blocks: The node orders unconfirmed blocks in a bucket for eventual confirmation. During high load these buckets can fill and the node needs to select blocks to drop. The node picks the lowest priority blocks to drop if buckets get full. This change would give an objective way for different nodes to drop some blocks, without coordination other than time, when confirmation rate can't keep up with transaction generation rate.

Allows the possibility of lowering PoW difficulty: Since the proofs are only valid for a shorter period of time, the difficulty might be able to be lowered and in exchange, wallets would have to re-generate work proofs in order maintain being considered for confirmation.

This change does not address block work pre computation as it's still possible to generate proofs for a time point in the future.

What remains to be designed is a strategy for bootstrapping which would allow non-recent proofs for blocks the network has already confirmed.

clemahieu avatar Mar 22 '23 11:03 clemahieu