We're Delinquency Banning Wrong
Currently, when a Node is delinquency-banned, it remains a fully-connected part of the network, but the Nodes that have delinquency-banned it simply drop its data and Gossip CORES packages and refuse to process them, until it has paid its bills.
This is the wrong thing to do, because it means the delinquent Node will continue to calculate routes through and send traffic to the Nodes that have banned it (since it has no idea it's been banned), and the disappearance of those packages will mean that the delinquent Node will have no idea how many other Nodes it owes for handling them. Therefore it won't pay, and it'll fall deeper into debt and be delinquency-banned by more Nodes.
We considered disconnecting the offending Node from the banning Node in the Neighborhood, so everyone else would know not to use that edge for a route; but that's the wrong thing too, because A) the offending Node may be several hops away from the banning Node (and therefore un-disconnectable), and B) other Nodes which have not yet detected a delinquency should still be able to route data through the offending Node in all directions.
We think the right answer is to bring in Reversal Mode, so that when a Node receives a package from a delinquent Node, it can turn the package around and send it back to the originating Node with a reversal reason of Delinquency. Whether that reason should contain an outstanding balance should be discussed at more length.
It's our opinion at the moment that delinquency reversals should not be handled automatically--or if they are, a fair amount of intelligence should be devoted to handling them to eliminate or at least reduce abuse. Perhaps better would be to notify the user upon receipt of a delinquency reversal and let him decide among three options:
- Pay more money to escape the delinquency ban
- Raise the undesirability of the banning Node so it won't be used in future routes
- Malefactor-ban the banning Node because it's exhibiting signs of abuse
Come up with a series of cards to implement this feature after Reversal Mode is in place.