In a fully peer to peer network it is easy to detect nodes that do not relay transactions when you send them. These non-relaying nodes can be independently detected and disconnected in a decentralized manner.
How so? Could they not just spoof that they are passing on transactions? From the above, am I to understand that the standard behavior is to mirror all transactions back to the sender, as well as relaying them on to other nodes? What if they just send it back to you so you think they're relaying, but they do not forward it on to other nodes? And again, what if they selectively relay? How could that be detected? Especially if they do so in a somewhat balanced but stochastic manner, e.g. they relay 100% of downward bids but only 25% of upward bids, in an effort to drive the price down? While at the same time a whale starts blowing holes through the floor, and ALL of those bids are passed on?
Furthermore, you say "easy to detect", "independently detected and disconnected"... so is this code already implemented?
I am not terribly concerned about such an attack because the solution is very simple... add just one or two trusted peers to the majority of nodes and you can be sure you are not isolated and missing transactions.
And what happens when those "one or two trusted peers" are knocked off the network due to DOS attacks on all of the publicized/biggest nodes? All of a sudden, all of your information is coming from who knows what source.
Furthermore, if you are fully isolated and missing transactions then that means your blockchain would fall behind unless the attacker owned enough stake to mine an alternative chain with fewer transactions. Note that including transactions is critical to growing the blockchain.
Could they not pass on all blocks that are mined, but drop transactions?
I know I keep bringing up DOS attacks. This is because I really think that they will be at the heart of any attack on the network. They can't do anything bad on their own, but they can create the conditions where bad things can be done more easily.
Plain bandwidth DOS (even if the connections are all blocked by your router/firewall, if you have a consumer-level connection then your upstream line can be saturated VERY easily) as well as targeted DOS, selectively connecting to the open ports for the BTS network, spoofing new peer requests (from unknown IP's), spoofing transactions (from already connected peers), spoofing blocks (same)...
If your node is passed 100 false blocks all of a sudden from a peer, as if they were all mined in quick succession, how long will it take the client to process and discard them as false? What about 1000 blocks? Is there a rate limiter, a sanity check on this?
Same with transactions.... what if you're used to getting 5-10 orders propagated per second, then all of a sudden you're getting 1000 per second? Will the daemon be able to keep up? How are the orders checked? Presumably each one is verified against the known public key for the address that generated it, right? Is the account balance also checked versus the blockchain? How many milliseconds does it take to check each one? Are they propagated immediately, or only after being checked? (I.e., are you also now DOS'ing your peers?) How many will it take to bog down the CPU or fill up the RAM of a standard PC?
If you're connected to 12 peers, and all of a sudden 6 of them start slamming you with false orders, how long does it take before you stop taking more in?
Hell, they don't even have to be false. They just have to be spammy. Valid orders for tiny amounts. Even if there is a minimum transaction size or a fee implemented and those orders are rejected, they still look valid on their face, and will have to be inspected before they are discarded. This will take some time.