Decentralised MMORPG on the SAFE network

Isn’t safecoin transaction speed atomic? And doesn’t safecoin record it’s last known owner? If you have a list of who is playing the game simply use a tiny bit of safecoin like a roll call.

Alice
Bob
Charlie
Dana

0.001 safecoin goes from Alice to Bob and back again. Ok we know Alice and Bob are here. Alice to Charlie and back again, okay Alice knows Charlie is here. Again and again with all the other player combinations. Keep in mind you can also rig it so that safecoin can store data as well though it might be better to use SD instead. My point is we have a method of sending data between participants that travels at near instant speeds. If we can transact financial transactions atomically why can’t we transact player coodinants?

Okay there are a couple questions here. In a distributed MMO even while playing with just two players like that you aren’t just playing with two people. You have the two players and the network. Otherwise it wouldn’t be an MMO it would just be a regular RP of some kind, which are fun as hell but not what we’re discussing. In a standard RP two or more players create their own universe, their own rules, from scratch and roleplay it out. Sometimes you have a set rulebook and premade universe like in the case of Dungeons and Dragons, in that case it’s a roleplaying game, but it’s still up to the players how much they wish to adhere to the book and premade rules. In an MMORPG you have the premade rulebook, then you have the players. The advent of computers didn’t get rid of roleplaying per se, it just automated the role of dungeon master. So perhaps for SAFE here’s a crazy idea: set it back on manual.

Give the SAFE MMORPG dungeon master, or dungeon masters, lots of fancy tools to create a dungeon, or randomize levels (we were talking about planet creation) and generate mobs and quests of various kinds. This would add to the player creation aspect. It would also help solve the trust conflicts we’re having as yes it seems a human being does need to actually make these decisions. How do you know if Alice really can jump over that canyon? You compare Alice’s stats and abilities to the canyon size and see if she can jump it. Then you compare if she actually did jump it with the data she’s sending Bob.

Reintroduce the role of Dungeon Master. The problem you propose is caused by confusing the role of Player with the role of Dungeon Master. You need to review how old school table top RPGs work, upon which computer games are based. :smile: There’s no need for servers. We just need to define specific roles. When a player enters the game they need to pick a role: Player or Dungeon Master. Players can create/have access to their characters but only have access to THEIR stats and abilities for instance. Dungeon Masters cannot create or access their characters but can view all stats and abilies and compare them with the game rules in general and penalize players who try to break the rules.

Well you could institute a reputation system but ultimately, just like in regular tabletop gaming there’s not much you can do. Every group is different. If you get a bad dungeon master who lets everything fly then that’s a bad roll of the dice. Or if you get a bunch of players that have no respect for the rules same deal. Ultimately I think this is where socialization will come in, building networks of friends and associates, clans and guilds. People with good reputation and behaviour will want to associate with one another. Those who act like antisocial pricks will end up being shunned.

1 Like

Let me start with this, because it may explain where I was coming from.

If it’s a turn-based MMORPG, and the turns turn slowly enough, there’s of course time for everything: distributing information, achieving consensus. My arguments were directed at games like WoW. Real-time stuff.

What do you mean by a transaction speed being atomic? I’m not sure I understand, but let me point out a thing: just because something happens and can’t be reversed, it doesn’t mean everybody who’s interested in it will immediately know about it. In an MMORPG (of the WoW kind, where stuff happens in real-time), they should.

Anyway, information on the safe network travels as this (somebody correct me if I’m wrong): you send stuff to an address, which is a public key. The routing layer tries to find that node using the DHT. Your piece of data bounces around a small number of nodes, each step a little closer to the recipient, before it’s finally delivered.

The problem: the “closer” in the above sentence is “closer in XOR space”, not geographically. Each of those steps can take a travel around half the globe (as opposed to just one such trip). It introduces additional latency (idiomatically: “lag”).

That’s synonymous to saying “even if it’s just two people are talking, there’s also the air between them” – that air won’t verify if what’s being said is true, right? The “network” is not some mythical omniscient thing that will solve the problems. It’s just a medium to transmit information, as far as such a game is concerned.

In fact, (blasphemy!) there’s nothing special about the safe network that would make a distributed MMORPG more possible. You can store your assets securely and safely in a distributed fashion: cool. But that’s about where it ends. A simple public key based system could be used for persistent, self-authenticating profiles. You could use any crypto coins (or ripple/stellar or whatever similar) for game money. All those design problems would still need a solution, regardless of the underlying system, because cheaters gonna cheat.

It’s not about what the rules are, but about how you enforce the rules on everybody. How you verify they abode by the rules. What if there was nobody around? Or how can you trust those who were around?

And there goes the “distributed” part; now you have gods (a.k.a. “servers” in internet speech).

You don’t know what she’s sending to Bob, because she’s sending it to Bob, not to you. In a server based MMORPG, Alice sends her stuff to the server, the server verifies it it’s possible, then forwards it to Bob, Charlie, Danny, Elmer. In a P2P distributed system, there’s no server, so the players can only send stuff to each other.

2 Likes

Something that comes to mind with Wow for instance, I just spam the hotkeys nonstop, animation happens… so client side you can be spamming the button seeing the animation and in the background only 1 request actually went through with enough time to get a response, so each move and action has an animation, I think Runescape also added this in as well, if you click to attack something and then try to click to pick something else up it interrupts or if you’re too late it goes through with slashing and then you have to click again to trying to pick something up.

2 Likes

What do we need to achieve consensus on? And why? What information needs to be distributed and why? Be specific.

I mean safecoin transactions are instantaneous because the data doesn’t actually MOVE it just changes ownership. So what if we did something similar with turns, or coordinants, on our mmo. What if we started thinking about player interactions in terms of owning a set of tokens: and therefore a series of permissions and ownerships as opposed to data transfers. Say you had 100 hitpoint tokens that would be destroyed by the app every time your character was “sent” a damage token. You can only send x amount of damage over y amount of time using z action aka a spell or ability. But as far as the app is concerned it’s just dealing with tokens aka another altcoin which is a fork of safecoin.

If you can send money data instantaneously due to the fact all your exchanging is ownership then why can’t you exchange other information the same way by simply setting up other tokens to represent other values?

Forgive the misunderstanding. I should have said specifically “The network of the MMO gaming app which contains the rules that governs the game mechanics,” but I thought that was obvious given the subject matter.

If players are only sending stuff to each other it’s not an mmo and there’s no need for consensus in the first place. If players are only sending stuff to each other you can keep a copy of the rules client side, verify with each other that each are playing by the rules and have at it. If you don’t play by the rules you get disconnected. If there are multiple people then you can have a dungeon master of some kind. That doesn’t make a server because the information isn’t being hosted on a centralized server. The dungeon master is still a regular user. He’s just performing a different role. Just like when you farm safecoin your node might be assigned different types of roles by the network, but it doesn’t mean its not still a node. The network might assign it to churn duty, or to store data, or to act as a relay node, but whatever it does it’s still peforming work for the network. You seem to think that dungeon master = server but hat simply isn’t the case. It’s simply a job, a role one plays. And one can’t play as one’s own character AND act as dungeon master at the same time. (Well technically one can if one has enough self control and discretion but for our purposes here I think it would be best just to say one can’t.)

1 Like

safe network isn’t vulnerable to 50% attacks

1 Like

But then we no longer have an MMORPG, only small independent games running by themselves all over the place. Not a bad thing by any means, just not an MMORPG. I’m talking about an actual massively multiplayer game, where there are enough players that you can no longer decide with certainty who you can or can’t trust. Where, if you wander far enough, the local dungeon masters can be an accomplice (i.e. because she’s a member) of the local clan or whatnot.

I already was:

Information about state doesn’t get distributed magically. Your computed can’t display information it doesn’t know about yet. Example: You strike at your opponent. This happens on your computer. This piece of knowledge need to be transferred to those around you, so that their computers can display it. E.g. your opponent’s computer needs to be able to tell them they are dead. Which it can’t until that piece of information reaches it.

Just because there’s a new transaction somewhere on the network, it doesn’t mean the all the interested parties are immediately notified about it. Yes, you have the money. No, you don’t know about it yet. Considering there are no strict real-time requirements, I don’t believe the design tries to achieve anything quicker than a few seconds (or much longer) for such notifications to reach the recipients (pls somebody correct me if I’m wrong).

You need a consistent world, perceived by everybody the same way. If somebody thinks your character died, but another player thinks it is attacking them, that’s probably an error. A game needs to ensure that everybody sees the same events in the same order, that everybody sees all events around them, etc.

One problem with that is that information takes time to travel. What if you got killed, but you don’t know it yet, and you kill somebody, but that person (computer, really) doesn’t realize it before he kills the one who killed you. And all of you think you killed the other one first! Things like this need to be dealt with.

In the current setup, that is split into two: a server (trusted) and a client (much less trusted). In a P2P game you don’t have a trusted game engine: it will be a fun little competition to come up with the craziest cheats, really:

You simply can’t trust anybody. A well written cheat would tell your buddies the truth, but it would lie to the opponent. “Hey, I’m here!” you say to only your opponent, but you’re standing a foot to the left, actually. Everybody else gets your actual position, and they wonder why that noob would keep striking the air to your right. So, players need to verify everything from multiple sources.

That is, if you get discovered.


All of this adds a lot of overhead.

In a server based MMORPG, your computer sends a packet with what you did, the server checks if it was possible, then quickly forwards it to everybody else around you (and it does have and up-to-date list about who’s around you.)

Without the server:

  • you need to find out who’s around you
  • you need to send everything you do to multiple parties at the same time
  • you need to verify everything others say with multiple other parties
  • you need to make sure not everybody’s lying to you (really hard if you for example are surrounded by enemies who may work together to trick you)

With the safe network:

  • the routing layer introduces a number of additional roundtrips for each packets
  • each roundtrip consists of much more work (e.g. additional lookups) than on the plain internet
1 Like

From the wiki.

“Transfers of safecoins between Users is managed automatically by
Transaction Managers. The Transaction Managers are Vault personas whose
priority is to ensure that safecoins are digitally signed and are never
deleted or corrupted.
As there can be multiple Transaction Managers coordinating
different safecoin transactions at the same time, an unrestricted number
of transactions can take place at network speed.
A safecoin is a piece of digital information. The only historical
data held with a safecoin are the current and previous owners’
cryptographic details. These details are used for the purpose of
verification and transfer of cryptographic control of each safecoin.
This means that safecoins can be thought of as digital cash, leaving no
auditable trail.”

Also from the wiki

“Unlike bitcoin, the SAFE Network does not use a blockchain to manage
ownership of coins. Conversely, the SAFE Network’s Transaction Managers
are unchained, meaning that only the past and current coin owner is
known. It is helpful to think of safecoin as digital cash in this
respect.
One of the major problems any virtual currency or coin must
overcome is the ability to avoid double spending. Within the SAFE
Network, transfer of data, safecoin included, is atomic, using a
cryptographic signature to transfer ownership.
Safecoin, the currency of the SAFE network, is generated in
response to network use. As stored data is retrieved, or as apps are
created and used, the network generates safecoins, each with their own
unique ID. As these coins are divisible, each new denomination is
allocated a new and completely unique ID.
As the coins are allocated to Users by the network, only that
specific User can transfer ownership of that coin by cryptographic
signature. For illustrative purposes, when Alice pays a coin to Bob via
the Client, she submits a payment request. The Transaction Managers
check that Alice is the current owner of the coin by retrieving her
public key and confirming that it has been signed by the correct and
corresponding private key. The Transaction Managers will only accept a
signed message from the existing owner. This proves beyond doubt that
Alice is the owner of the coin and the ownership of that specific coin
is then transferred to Bob and now only Bob is able to transfer that
coin to another user. This process is highlighted in figure 3.”

So if we stop thinking about game data like stats and coordinants as “data” and start thinking about them more like points, and therefore like ownership permissions, then transactions of these permissions can get a lot faster because all we’d be moving is ownership of said points.

I’ve actually be considering this for a coordinants system. Consider we create a DAO for the app or something. So the APP has an A.I. called “World” for lack of a better name.

The World grids off land so that every section of land has it’s own token. In reality that would mean millions and millions of tokens but for our purposes in this explaination lets just say it’s just 100x100 or something. Every time a player enters a square ownership of that square’s token is transfered to him and when he leaves it for the next square it’s returned to World. So it’s like a game of battleship from the perspective of the World. It knows where players are because various coordinates go dark as players assume control of various sections of land. And since players can’t occupy the exact same space at the same time (or shouln’t or else you’re getting a major glitch) this isn’t a problem. So in order for a player to know where everyone is around him he checks the token ownerships of World. Did world transfer any tokens recently? Yes/no. If yes then somebody moved. You could also check the coin itself for who it transferred to.

So you want to know where everyone is you ask the World and it tells you where everyone is standing. You ask again a second later and it tells you again.

You don’t need a server you just need a program to run the coordinants system.

If Alice says she’s swinging her sword at me but in fact does not it counts for nothing because unless she actually performs an action that sends x amount of damage points my way, which can be confirmed by the system, it means nothing. Just like any other roleplay much of this is in your head but it’s the points that make the difference and connect things. It’s not the graphics, it’s not the drama. It’s the player interactions and the numbers. Which at the end of the day can be measured in terms of tokens and permissions. It’s not all that fun to break a game down into pure math but from a logistics point of view that’s what it is. Just a character sheet and point interactions.

Then don’t send it as data send it as ownership permissions which are way smaller.

1 Like

I don’t get this part; everything is data, and the problem isn’t the bandwidth but the latency.

But again, it seems you’re talking about turn based RPGs, and I already wrote my reservations don’t apply to those. I only think “real” real-time stuff is hard (if possible), at least without workarounds that involve escaping the safe network’s routing layer.

As for your idea about using secure tokens for representing game state, I dig it :smiley_cat:

3 Likes

Technically everything is data but there’s a difference between sending a chunk of data and sending a few bits that represent a change in ownership for a private key. The time it takes to send the chunk of data is substantially greater than changing ownership privs on a token that has already been uploaded.

If turns are 1ms each the difference between a turn based and real time game are kind of negligable. For all practical purposes it’s the same thing.

Excellent :smile:

But it isn’t. A roundtrip between Europe and California is about 135ms, which is incidentally about the amount that you wouldn’t notice as too laggy for a real-time game. The safe routing needs to find nodes in XOR space first, which requires a few more roundtrips, each of which can be halfway around the Earth (that’s why I brought the Europe / West Coast comparison), which means you can count on at least 2-3x (but probably more) than that.

1 Like

Wouldn’t caching help with some of this? If it’s the same command over and over shouldn’t some of that data be cached? Could one set up temporary servers for long distance hops. Say if a and b have x number of hops between them (or suffer from x number of ms of lag) a temporary intermediate node is set up as a bridge. It doesn’t know who a and b are. All it knows is it’s inbetween and acts as a relay between them, holding their game data while both are playing. The moment either stop playing the relay is dissolved.

Nope. The problem isn’t the amount of the data, but how quickly (here: slowly) it can reach its recipient.

Excellent idea. This could indeed get rid of much of the delay, especially if relays could be picked in a way that they are somewhere along the natural path between the two nodes. For example, a number of nodes could be tested, then the best few kept. Fun ideas like these are what I meant when I wrote we need to escape the routing layer :smiley_cat:

Things to consider:

  • high churn: people walk around, so new relay connections need to be set up between players all the time, maybe even pro-actively
  • relays need to know the real-world identity (IP address) of the players to be able to function as relays (obviously), and we have no way to make them keep it secret: basically, we just got rid of all the awesome trickery that keeps the SAFE network safe…

I was thinking aloud in another thread about building a TOR-like scrambling layer built “somewhere in-between” the base IP network and the SAFE network: it would use the SAFE network (on top of the routing, in “XOR space”) to organize itself, but it would communicate actual data directly via IP (crust, “IP address space”).

Now, if the nodes of this scrambling layer are aware of the distance and bandwidth between each other, then they could work out a compromise between security (information hiding) and performance: more or less number of hops, random v.s. directed hops. The different applications could request different kind of connections based on their requirements. This, in effect, would amount to something like a “parameterized TOR network”.

This network would use one-time connection ids: two SAFE nodes could agree on their transient ids, then the scrambling layer would connect them.

If we have a scrambling layer like this, it can be used for any real-time sort of applications, not just gaming. I may make this idea into a thread sometime… :smirk_cat:


Fun idea: Something like this could form the base / evolve into an “off-the-grid” transport layer to serve as a replacement for the physical internet. The safe network, in its current form, needs the internet (which is completely okay) but maybe it’s not a bad idea to figure out alternatives. other ways go into a P2P mesh in the physical aspects of the network as well (not as its sole transport, but one of them). A nice circle: this network would be organized using the SAFE network, and it would form the transport (one of the transports) for the SAFE network.

3 Likes

Okay you’ll need to explain the concept of transports and a transport layer to me but I like the idea of building mesh capabilities into SAFE and get a kick out of the notion it would evolve from developing an MMORPG lol.

Though I am concerned with the privacy issues that seem to be developing in all this and if this develops into a mesh then it seems prudent to ask can those privacy holes be sealed again at some point? A mesh is meant to make things more secure not less.

We went around the circle three/four times already on this thread.

For real time gaming, we should use direct IP with servers. Again, I have no issues with this. There are no problems with gaming on servers, so why scrap the idea? But the real issue is when purchasing digital items on safenet, then using it in gaming. The servers and players could identify who you are easily.

So I am with Tim on this idea of scrambling IP address. It would take bunch of local IP address, and scramble them, and give back users a different IP address so it would be almost impossible to trace. Let’s call this, “IP Tumbler node.” It’s like dashpay master node where bunch of transactions goes into tumble pool, so it cannot trace back to original owner. There should be at least one IP tumbler node in every time zone. To operate the node, the operator would have to pay significantly a lot, and it would be graded by the users for the trust. The masternode has it’s own trustcoin (from bitlaw thread for more info). If the masternode is not trusted, and users doesn’t have enough money to set up a new one, they could collaborate by crowdfunding and have that new trusted operator to run it. Users would pay small fee to the master node for the operation. So essentially the exact same as master node.

During the tumble process, the master nodes collects the information on pings, and makes a determination on each player assign to suitable IP address. This may take up to several minutes. No players should be assigned to higher than 50ms. If none of the IP address are suited for specific player, it could ask another master node to get additional IP address that has better ping.

> 100ms - Really bad. "Omfg, this is bullshit!" --- Throw away IP and search again
< 100ms - It's playable. "omfg, you hacker!" --- Hold the IP in case if there isn't any.
< 50ms - Playable. "meh, might be a hacker!"  --- Give user the IP address
< 25 ms- Awesome. "damn, decent player. I can do better." -- Give user the IP address
< 5ms - godlike.  "excellent player!" -- Give user the IP address

Once that is done, it connects to the game server. There will be a slight delay but as long it is less than 50ms, it is good.

Meshnet already solves this particular problem with identifying IP users without the need to know the original IP address. AKA CJDNS. It is more secured, private, and pseudoanonymous. Global Meshnet (Lan) system is the end game, but to get there, we need temporarily solutions.

3 Likes

I think archive nodes would be best suited for this as they have high stability.

Client A establishes a connection with client B.

Both clients reach a consensus about which archive node/s they will be using.

Neither has to reveal IP related information.

Both have a clearly defined XOR address that is likely not to change for a long time.

Multiple stable archive nodes could be chosen to balance load in the same way we do today.

Overhead is reduced, anonymity maintained and network latency is almost comparable to the client server model.

Agreed?

1 Like

I like this better, especially the maintaining of anonymity part.

1 Like

Hopefully it holds up to deep technical scrutiny. If it does we should keep it from getting buried and lost in this thread. If it works as intended, we finally get our dream MMO’s. Life will be so awesome in the virtual world with unlimited freedom! Who knows. Some day we might be able to upload our consciousness into our ideal universe constructed by us for us. Making our final years as pleasurable as we wish. :heart_eyes:

2 Likes

I don’t believe we can reduce the overhead without sacrificing some level of anonymity. I mean, there’s a reason why that overhead exists in the first place. This model, for example, trusts that the archive nodes won’t reveal the IP addresses of the mediated nodes.

They won’t connect to it via IP. Only XOR. No trust necessary. Multiple archive vaults can be chosen to avoid the eggs in basket issue. :wink:

If the game app knows exactly where to look (archive node XOR address) there is no need for a traditional kademlia look up. Overhead is then greatly reduced. Everyone maintains anonymity. Yay? :grinning:

2 Likes

But then you didn’t optimize anything because most of the latency is from having to run those extra rounds…