Apart from the good ongoing development on PoW algorithm and methodologies, we have seen many proposals of potential additional solutions for spam-control, yet at least to me none has been sufficiently elegant or fitting the simplicity and the asynchronous nature of the Nano protocol.
What bothers me is that currently we have no way in the protocol to sanction nodes that are not using the Network properly (=spamming). We need a solution where an individual node can decide to accept or reject a particular block based the behaviour of the originator node.
At the abstract level it is an account (or many accounts) that are spamming but in reality, it is always one or more nodes. Wallet level spamming must handled at that level.
So here's my proposal.
First element - block-level node broadcast speed control:
- Add a
'origin' : node_idfield to the block
- The originator node broadcasts the block to all connected peers, a peer would discard the block if the origin is forged, only accept a 'bad' origin block if it comes in the process of re-broadcasting from a representative node
- The node would individually set a time-based dynamic threshold for blocks per same origin based on the saturation status of the Network (how many blocks are accepted from same origin by second)
- Nodes would use their relative timestamp of block arrival to decide whether to vote for or against
- All blocks that do not fulfil the threshold criteria would be voted out democratically by the Network
Second element - PoW for peering and bootstrapping
It is a bit weird that I need to do a PoW for a transaction but I can freely set up any number of nodes that will first increase network traffic due to bootstrapping.
My proposal is to require a PoW both for bootstrapping and peering. I am not sure how it could be done, somehow it should be part of the handshake. We need this to slow down the process how a new node can join the network.
Let me know your opinions.