Crossbreed wrote:Winterflaw wrote:The RNG is controlled by anyone except the peer performing the operation.
How do you protect the system from some client providing skewed random numbers, for whatever intention?
Maintain a mean of the PRNG output from any given node. Do this on other nodes. If it deviates, stop trusting the node.
Of course, if the node(s) performing the mean calculation are compromised, then you're in trouble. In general, this is like ECC; you have a certain tolerance for error - you can detect it, given the system working properly to a sufficient extent.
We could imagine the entire system is compromised, every node is lying, but that's unrealistic - we do assume that by and large the system is truthful.
However, one interesting point is that nodes which are lying will have to lie in exactly the same way to present the same result, where-as nodes which are telling the truth will all naturally reach the same answer.
Forms of cross-check which validate the actions of other nodes by re-computing their actions and checking the result will require the majority of the nodes to be compromised, *and compromised in the same way*, i.e. probably by the same agent. This may be a significant challange.
And how do you pick the clients performing the checks and e.g. RNG?
Randomly. Or GeoIP and make sure they're a long way from the peer they check.
Obviously the client requiring this input shouldn't chose the providers, otherwise you can just have two clients collaborate on the whole cheating thing. So you need some neutral authority to assign these - which probably comes back to a central master server though?
One way is that the peer issues a request (just like someone issuing a chat message in game) and it propogrates through the network. Each peer receiving the message has a fractional chance of responding.
That one key better don't leak/get hacked then, otherwise the entire game would be ruined forever
(ps, maybe that issue could be solved by assigning privileges on a "democratic basis", e.g. sending messages to all clients and only accept if 50%+ agree or so)
This is true of any system with an admin user. It's true of your PC

it's also true of the current system, where the admins have a system with an account which allows them special powers.
Winterflaw wrote:Game startup is slowed, because you need to catch up to current state. Once you've caught up, you're in, and off you go. The entire DB does not need to be on every client - if you have 10k clients, and you have 3x duplication, then each client has 3/10000th of the database.
In that case, you'd have 10,000 database fragments, and if any of these are not available - i.e. if just for a single one out of these 10,000 groups if happens that none of the 3 players holding a particular fragment are online - you'd have a broken database, which would statistically probably happen.. pretty much all the time.
So you have 5 copies, or 10, or 20. It's like key length. If i have a key length of 24 bits, I can solve it in a day on my laptop. If I have a key length of 32, it's a week. If I have a key length of 512, well, in theory I could find the answer at any second but in practise I'll die first. Increasing the number of copies gets up rapidly into "players will die first of old age before this happens".
Moreover, a missing object does not break the database, because the database is written to tolerate this. By tolerate I mean that the database does not break, or fail; the game of course with regard to whatever happens with that object cannot continue - so the object will for example, temporarily disappear from a users inventory, or a mob will vanish. But if we have 10,000 players, and a sufficient number of copies, then we might be looking at this happening say one per century. I suspect more mobs vanish due to OTHER bugs than this...
But generally, yes agree, you could maybe cut it down a little further that way (though I'd expect realistic numbers to be closer to 50% than to 0.03% or so).
If 50% of 10,000 players have the whole database, then it's the same as 5,000 having 100% - i.e. you're arguing half of all players need a full copy of the database for the system to consistently be able to reach all objects. This is crazy. If you have say 1,000 players, and each has 100th of the database, you already have 10x over-duplication. If they each held 50% of the database, you'd have 500x over duplication. Amazon S3 runs on *3x*.
But even if the pure size of the DB wasn't an issue anymore, the number of transactions might well be. Again for Eve online, I've read there are ca.
1500 DB transactions per second.
That issue is solved by the large number of nodes in the system. High transaction counts are only a problem for a centralized database. If a typical peer has say a tiny fraction of the database, he also only has a tiny fraction of the transactions.