Steem Monsters Tech Talk - Part 3 - Now With More Decentralization!
Scanning the Whole Blockchain
Combining or transfering Steem Monsters cards requires the owner to publish a custom_json transaction to the blockchain using their private posting key in order to authorize the transaction. Prior to today, that had to be done through the Steem Monsters website or else it would not know that the transaction had been published and the cards would not show as being combined or transfered.
This dependency on the Steem Monsters website added an unnecessary additional level of centralization to the app. I'm happy to say that, as of earlier today, the Steem Monsters code was updated to scan every block that is created going forward for these custom_json transactions so it will pick them up and process them whether or not they were submitted through the website.
A confirmation that the transaction was picked up and processed will be posted as an additional custom_json operation on the @steemmonsters account. If there was a problem with the transaction (for example if you try to combine or transfer a card you don't own), then no confirmation will be posted.
This will allow third party sites and services to easily offer card trading / selling or combining without any dependency on the official Steem Monsters website.
Verifiable Code Execution
In the last tech talk post I talked about verifiable code execution and said the following:
If we seed our random number generator with a non-predictable value generated by the blockchain, such as the block id of the block containing a Steem Monsters pack purchase transaction, and publish the code for choosing the cards in each pack, then anyone would be able to verify that the pack contents were generated via a pre-published algorithm.
Again, I am happy to say that this has also been implemented as of earlier today. The random number generator used for choosing the cards in each pack is now seeded using the MD5 hash of the transaction id, block id, and previous block id of the payment transaction.
(note that this will only work for transactions made after the change at around 5 PM ET today, earlier transactions are not verifiable in this manner)
Here is a purchase transaction I made after the change was implemented:
You can see that the "trx_id", "block_id", and "prev_block_id" are published as part of the "generate_packs" transactions for easy retrieval and verification, but you can also pull them from steemd or any other Steem block explorer.
You can put those values into the verify packs page to verify that you get the same results:
You Don't Need Us Anymore...
With the addition of these changes, everything that is needed to run Steem Monsters as it currently exists is openly published and available. This means that, as I mentioned above, third party sites and services can implement all of the available features themselves with absolutely no dependency on the official Steem Monsters site.
There is already http://steemmonstersdb.com/ created by @blervin (you should check it out if you haven't already) and I think I can speak for @aggroed as well when I say that we cannot wait to see what else the Steem community will come up with!
Thanks For Your Support
Although making a game like this is something I have wanted to do since I was a kid, I doubt I would have the motivation to put as much time and effort into it as I have so far without the overwhelming support we have received from the Steem community!
I look at every pack that is purchased as someone putting their trust in us to build something great, and I will do everything I can to ensure that we achieve that goal. So I want to give a big THANK YOU to everyone who has supported and put their trust in us, and I promise that the best is yet to come!
Banner art by @nateaguila ...except I just added the Steem Monsters logo in the middle :-)