Blockchain gaming, transparency, how you do not own your Stemmonsters cards - and the easy solution

in #steemmonsters5 years ago (edited)

Good news first - the recently discovered issue that contents of unopened booster pack contents were visible has been fixed for future packs. You can't be sure that the owners of already existing packs didn't peek, but for those they buy now they're in the dark (assuming no one reverse engineered the algorithm, and there's no other holes).

Now if you clicked the link for the fix, and read the conversation below, there's another issue popping up on my radar. Let me explain my thoughts over the last 24 hours here.

To me, the main promise behind having my cards on the blockchain is the immutable verification who owns which cards. If there's any kind of dispute, I want to be able to trace the movement of each single BCX (level 1 card) from when it came into existence until now. And I want to be able to do this in the future, no matter what happens to the entity which initially issued the cards.

sm1.PNG

The original idea for Steemmonsters to achieve this was to use an algorithm which issues booster packs in a reproducible way and publish this algorithm. It was discovered that this leads to a couple of problems though.
Firstly, the now fixed peeking into packs of course. The algorithm was depublished and changed, contents of a pack should now be hidden in the database of Steemmonsters.
And there's another initial design decision which, while understandable due to RC limitations, now leads to problems.
You don't need to tell the blockchain when you open a pack. And it also doesn't trigger any transaction from steemmonsters. While they add a history entry to their own database, the blockchain is blind to it.

Now that we do not know the algorithm, and the information about the contents of the boosters gone too, I honestly have to admit I feel a bit robbed. The proof of ownership doesn't happen on the blockchain, but I have to access the third party steemmonsters api. If that disappears and they don't publish something post mortem, my property is gone.

@yabapmatt said they're hiring to work on this topic, and I really hope they get a solution worked out in a timely manner. They're the authority, and we all trust them to not get in the way of the distribution algorithm, so it's okay to me that they keep the booster contents a dark hole - the algorithm can be published a while after the cards sold out, maybe with a large grace period for resellers and a subsequent force opening or so, whatever.
I want them to tell the world which cards I drew though!

We don't need smart contracts, where everyone has to interact on the blockchain and every steem node has to calculate the results. That's too expensive anyway. (For the fees the user needs to pay to miners to "activate" a single Gods Unchained (ref link) card so it's available as a token you can buy a common card on steemmonsters from another player.)
What we need is a protocol everyone agrees on how to get cards known to the blockchain and make it possible to track them on it.

My suggestion (and I foolishly just assumed it would be implemented that way) would be that, for the start, steemmonsters as the issuers of the (first sets of) cards keep track about that. We have to trust them to not screw us with their cards anyway, and as long as they find a way to prove in hindsight that everything was correct that's fine with me.
But as this will probably take some more time, I hacked a small service today. Transfer 0.01+ STEEM or SBD to @monsterverify without a memo to make it publish custom_json transactions, listing all your current cards (see https://steemd.com/@monsterverify). The data comes from the steemmonsters API, I only remove a few redundand fields and write everything important on the chain. The process takes a minute or two to complete, depending on the size of your collection.

If you use it once all your cards have been mentioned on the blockchain. Unless you open new boosters or someone transfers an unregistered card to you there is no need to use it again.
Maybe over time the already trusted accounts will pick up and offer more fine tuned services (putting data on the chain automatically), but for now it will work to have a mention, and this way something like a rudimentary token on chain.

Sort:  

This is all factually correct and I really appreciate you sharing this feedback and not only pointing out these issues but also taking time to build tools to help alleviate them. This is my first attempt at creating a decentralized, blockchain-based app and, in hindsight, I definitely would have done certain things differently. But there's nothing that's unfixable, and we are absolutely committed to doing things correctly, though we do have a number of different priorities to juggle.

I've thought about this issue considerably since it first came up many months ago, and I believe I have a good solution which we will hopefully have the time and resources to implement in the very near future.

The ability to gift packs is very important to the ecosystem and is not something we want to disable. Additionally, generating the cards at the time each pack is opened (causing typically a 5 - 10 second delay for each pack) is not an acceptable user experience.

Lastly, your suggestion of simply publishing the cards to the blockchain when the packs are opened would certainly be an improvement, but it isn't sufficient for someone to be able to independently recreate the full state of the cards based on the blockchain data. So it's more of a band-aid solution than a full, proper solution to the problem, and also adds a bunch of unnecessary data to the chain.

For a proper solution which satisfies the constraints above, I plan to create "pack tokens" which can be purchased, transferred, and then redeemed for an actual pack. Then the pack contents would be generated at the time the pack tokens are redeemed, and then the actual packs will no longer be able to be transferred.

When purchasing packs, players will have the option to purchase either packs (which will no longer be transferrable so can only be opened by the purchasing account) or pack tokens which they can transfer freely or redeem for actual packs which they can then open.

Players who have unopened packs from before this change is implemented will have the option to trade them in for pack tokens of the appropriate edition. This will allow players who purchased alpha edition packs before they sold out with the intention of reselling them later to do so, and since the contents of the pack will be generated at the time the tokens are redeemed there will be no issue of "peeking".

Finally, at the time this change is implemented we will also publish the full state of all of the cards in the game as of a specified block number to the chain using custom_json transactions. This will take quite a large number of transactions over a large number of blocks but it's doable and necessary to recreate the entire game state from the data on the blockchain. At that time we will also be able to publish the pack generation algorithm and then I believe all issues discussed here should be resolved.

Please let me know if you see any issues with this approach.

Sounds good! The opening of a pack from a token will then be logged by you, or require RC from the user?
How about reward cards?

Good question about the actual opening of the packs...ideally that would be purely a cosmetic thing and not require any type of logging or RC, but I need to think about that more.

I thought you might ask about reward cards...those don't come in packs so there's no issue there. The generation algorithm for those is published here: https://steemmonsters.com/?verify_rewards=1 you should be able to see the JS code in the page source.

Additionally, generating the cards at the time each pack is opened (causing typically a 5 - 10 second delay for each pack) is not an acceptable user experience.

I don't see this as a huge issue Matt, particularly if you could bulk open a specified number of packs in the same way as gifting.

I understand your best customers buy in bulk and don't wish to sit around waiting, but there are also a lot of us who have never bought more than 10/20 packs at once. If the opening process was 'jazzed' up a little, a wait of 5/10 seconds per pack, perhaps with an SM tip/latest news/tournament list presented during the process, would not seem so bad. We are used to waiting for games - those on 100% manual anyway.

Saying that, pack tokens as above seems like a suitable approach. Thanks!

I disagree, allot that buy packs like opening them 1 at a time. A 10 second delay between packs would be a major pain. I still think the best solution is to revert back the temp. fix and take the stance of, SM isn't responsible for 2nd hand pack sales. Buyers purchases them at own risk.

Fair enough.

Yes I think the point is fair about buying 2nd hand packs at your own risk, and see the opening --> blockchain more in relation to the 2nd point about everyone knowing your cards as they come to life.

I enjoy opening packs too! You could still do this one at at time, just if beforehand you were to select say 10 of the 20 you had in storage, these would be processed in the background while you were going through the process of unveiling each card. I'm not sure, but it sounds possible that following the delay of 3/5/10 seconds, the processing could be done while you open the first of your chosen number of packs to open, whilst the other 9 (in this example) are processed, and so no further 10 second waits as you move to the next pack.

You may be right. If it could be done as you said then the wait time will be a non issue imo. But if we have to wait up to 10 seconds between each pack opening I don't think many would like that. An initial 10 second wait to open up a set amount of packs isn't unreasonable.

Hey, I hope you see this. I have problems to connect to discord atm, but I will take part at the novice cuddles #4 anyway. Refreshing challonge and standing ready. Just in case I'm missed in the chat ;-)
@tashidelek

Yours,
Sco (doctor-cog-diss)

Edit: Nvm, I gave up, without communicating, I couldn't report the inactivity of my opponent. entered -1 for both my games.

Hi @doctor-cog-diss. I'm so sorry, I just saw it. You were not the only one with connection issues, the next time you have problems with Discord you can make your reports in challonge, in the discussion section.

Firstly, I appreciate the posts of the last couple of days, and the respectful tone towards SM. I'm sure the guys in charge do also.

But yes, it seems things are not quite right yet. I read Matt's response to the post yesterday, he seems very keen on getting the house in order.

Personally, I would be happy waiting the 3 seconds for each pack to open, if it meant them being added to a block there and then.

Just logged my cards with an sm_api_dump, thanks!

Things could of just been left as is and steemmonsters could of had the stance of .... Buy second hand packs at own risk, Steemmonsters isn't responsible for sales a non verified vender or sales person may sell.

Idk how important it is for the ecosystem that boosters are tradeable, but personally I could do without that, yes. Wouldn't even mind automatically opening them at creation.

I think its too late to take the feature away due to some buying thousands for the sole purpose of reselling. Taking the Stance of we at Steemmonsters are not liable for any second party pack purchases seems like the easiest and likely the best solution to take.

Agreed ! Now all the Blockchain Steemmonsters ownership is at risk !

Posted using Partiko iOS

This story was recommended by Steeve to its users and upvoted by one or more of them.

Check @steeveapp to learn more about Steeve, an AI-powered Steem interface.

told you so :P

True - took me a few months to look it up, but I said I would :D

steemmonsters is still a pretty awesome app... despite my initial scrutiny back then I found myself pulled in, too...

I had my doubts about the "d" in "dApp" and it shows to be a legitimate concern. But really, this "ownership" conundrum is the same problem with the majority of smart-contracts containing owner-backdoors, too...

... so yeah, we'll just have to trust the SM team to keep things "fair"...

Unlike myself you did actually look into it and I really appreciate you putting out these PSAs

Thanks for bringing this up! I am sure the development will act accordingly but it is a great idea to have this recorded.

Posted using Partiko iOS

If it ant broke dont fix it who cared if you could see what was in the booster pack when you owned it? Thats what blockchain is to be totally transparent its your own fault if you buy from someone instead of the system that was designed to sell.

Well, what we're really missing is the data when a booster was opened and what it contained, it would be perfect to have that on the blockchain right away.
The completely transparent algorithm minus a blockchain record when it was opened would render the concept of boosters strictly optical, they should then just be opened right away.
From a technical perspective it makes the combine_all procedure a lot more complicated when you don't know which packs were opened when a combine_all happened.

Nice posts, healthy research. I do understand the whole reasoning although i think we will always have to trust the creators for a healthy card distribution. What good would it be to have my legendary gfl nicely registered on the chain when they decide to dump an extra 1000?

Posted using Partiko Android

To listen to the audio version of this article click on the play image.

Brought to you by @tts. If you find it useful please consider upvoting this reply.

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.032
BTC 64615.49
ETH 3112.63
USDT 1.00
SBD 3.84