3

Consider a MMORPG where users own virtual assets like magical swords or rings that can be used by the player. This system needs a safe method for transferring assets from Alice to Bob.

One requirement that increases the complexity is the fact that it should allow Alice to transfer an item to Bob before Bob registers himself. This is part of a marketing campaign to attract users into the game.

In one solution, Alice initiates the transfer by typing Bob's email or phone number. This is subject to human error. In order to prevent Alice from accidentally transferring the item to a stranger, we want Alice to validate the transfer by forcing Bob to send some information that only Alice knows.

The current protocol is as follows:

  1. Alice initiates the transfer by specifying Bob's contact (email or phone) and a question that Bob needs to answer. Alice does not tell the answer (i.e. the game cannot possibly leak this).
  2. The system uses Bob's contact to send a link. When Bob clicks on it, he is asked to login or register himself. This action is associated with the transfer.
  3. After Bob is properly logged in, he is presented with Alice's question.
  4. Bob types the answer and submits.
  5. When Alice logs in, she receives the answer, validates and the transfer is finished. Now Bob can use the item.
  6. In case Bob fails to finish this process in 7 days, Alice gets the item back.

The managers think this entire process is too complex for the average user.

One change is to allow Alice to specify the answer along with the question. At least Bob is be able to immediately use the item (i.e. without waiting for Alice first). However this also allows Alice to complain that we leaked the answer and someone else got the item.

What are the existing methods for transferring assets that can be considered? Again, the main requirement is to allow Alice to initiate the transfer before Bob is registered...

1

There are three ways you could go about this:

  1. You could transfer the responsibilty to Alice. Give Alice a share link/code and have her share that link with Bob. If Alice sent the link to the wrong email, that's her fault entirely. Chances are though, that Alice has Bob on her mail client's address book or she had an email with Bob previously where the mail client collected Bob's address or where she can hit Reply on, so the chance of typo is significantly reduced.

  2. You could use time. Simply require that Bob has to play the game until he reached certain level or be active for a certain amount of time before Bob receives said item. Send Alice a notification that Bob has signed up using her referral and automatically add Bob to Alice's friend list. If Alice cares about delivering the item to the right Bob, chances are that she'd meet up with Bob in-game sometime soon, and realise if that's not the Bob she expected. She can lodge a ticket to support and recover the item before the timer expires and Bob obtains the item. If you want Bob to be able to use the item immediately after the sign up, just make the item unsellable/unretransferrable for a period of time, so that if Alice file a ticket within that period, you'd only need to deal with two accounts.

  3. This is a game, where you're dealing digital goods, on a server you control. Players don't really "own" these good, as the game master you can do pretty much anything you want and deliver judgement as you see fit. The cost of you creating the item is next to none, so in cases of what you think is honest mistake, you can just return the item to Alice and let Bob keep a copy. Yes this is abusable, but as long as this doesn't happen too often, it shouldn't really affect the in-game economy much. So what if some players abused it, shrugs you can just ban those players if it ever becomes a problem. Also, to limit abuse, you can restrict so only fairly common items can be transferred this way, this further limits the possible damage that duplicating very rare items to the game economy. In any case, it's unlikely that you want new players to have that +1000 Mega Hyper God Excalibur Mk. 100 anyway, as that'll break gameplay in most games.

  • Item #1 removes the burden from the game, plus Alice can send the code using other ways: IM (Slack, FB, smoke signals, etc). – fernacolo Dec 3 '18 at 22:10
1

I would agree with the managers that the process is way to complex. I think you could make this fairly straight forward by mimicking the process used to send e-gift cards.

  1. Alice hands over the item to (your MMO's recruiting NPC) and gives Bob's email address.
  2. Bob receives an email with a 12 digit alpha numeric code that can be typed in to the web form used to register.
  3. When Bob logs in for the first time the item will appear in his inventory or bank.

You can even go 1 step further and have a direct link in the email when clicked that will automatically associate Bob's registration with the item.

  • How does this prevent a stranger from getting the item, if Alice adds a typo in Bob's email address? – fernacolo Nov 29 '18 at 5:47
  • There's always the "type the email in twice" route. But its probably pretty rare that a typo in bob's email will lead to another, not only valid email, but to another avid player of the MMO who would know what to do with it. In the very unlikely event that this happens, just have your support team go in and fix the problem. The added cost of supporting this is probably less that the revenue gained by having a lower barrier of entry for new players. – noslenkwah Nov 29 '18 at 14:02
1

There are some pitfalls in your design but I see what you mean. Human error is indeed something to worry about and you don't want some domain squatter with @gnail.com to catch-all your players' items.

Problem

Apparently Alice has a way of securely sending the answer of the question to Bob. If this is the case, Alice might as well send some registration key to which her item is linked. Note the similarity with implementing a One Time Pad.

Solution

You could yield public key cryptography to have Alice generate a key pair, and:

  • Send a random value to the server together with her public key.
  • Send a signature of the random value to Bob and have Bob use it as a registration key. The server can then check if the signature is correct. This method also prevents the server from leaking the correct value for registering.

Other solutions

  • A very common way to prevent typo's is to have people simply enter an email address or phone number twice.
  • You can give Alice the power to revoke the item for x amount of days. However, this might get nasty if Alice gets in a real life fight with Bob and takes her stuff back.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.