Yes they are. A full node is a node which fully validates every single block and transaction that it receives.
In your opinion, node is still full node even if it doesn't relay anything.
Blocksonly nodes are still full nodes
Don't want to argue but I wouldn't call them full nodes. Because the system is not designed to operate on such nodes.
In fact, as an outside observer, you would absolutely not be able to tell whether someone is in blocksonly mode or not.
I'm not sure that we need it. How does it related to the topic? My proposal does not imply that all existing nodes relay transactions. Similarly, miners does not imply that all existing nodes relay blocks.
You would completely make it impossible for people to run full nodes in a low bandwidth mode such as blocksonly.
They can do. I just don't call them full nodes. They give a little advantage for the network.
How do you prevent someone from making a ton of super low fee transactions just to spam up mempools and take up more memory, at some point causing nodes to crash? If you require every single transaction to be kept, then you open up an entirely new attack vector.
Good point. This problem can be solved in different ways.
First of all, nodes aren't required to keep full transactions (TxID will be enough). Also we don't need to keep them forever. I propose that nodes can forget about transactions received over an hour ago. Miners should be careful to include these transactions in block.
What the hell does that mean? As you described it earlier, the "delay parameter" is a consensus rule.
This parameter is a consensus rule:
full nodes should temporarily reject* blocks that consists more than 5% of transactions considered as undesirable (being in the mempool less than 15 seconds | with a fee below 20 satoshies/byte)This parameter is adjustable by miners and not a consensus rule:
miners should follow the same rules, but in addition they need to hold transactions at least for 15-20 seconds before including them into the blockHow do you enforce that the minTxRelayFee is no higher than 20 sat/byte
What for? My proposal does not imply that all existing nodes will follow the rules. Do we need to enforce that the MAX_BLOCK_BASE_SIZE is no lower or higher than 1MB?
They made a block which instead of awarding them 12.5 BTC as the subsidy, awarded them 125000000000 BTC as the subsidy. Now what?
All honest nodes will reject it because the best chain is selected only when it meets the consensus rules.
have mined on top of invalid blocks and in fact made that chain longer than the valid chain
How will it happen?
only that there are non-standard transactions, which can still be valid and will be accepted by all full nodes if included in a block
Yes. But they couldn't be redeemed until soft-fork is performed and they become considered as standard.
However, I think you're right, we may not limit non-standard transactions. I've removed this part from my proposal to keep things simple.
SPV mining will still happen and is still a problem.
What's wrong with SPV mining?
Except under your proposal, such an invalid block can and will be accepted.
How will it happen?