EOS-based Idle RPG game development #1
I'm making a game based on EOS. I have been making about 2 months, and I like to share what I have been going through during the development period.
Start of EOS game development (April 2018)
0.5 second transaction confirmation! Performance over 1000 TPS! It was too limited to be done with Etherium which takes 10 minutes of transaction completion time, and it seemed to be enough to make good enough dApp. The goal is the idle RPG game. The kind of game where materials are dropped on the smart contract code, and the equipment is also synthesized. A game in which the drop of all materials and the creation of equipment are not simply recorded on the chain, but the creation itself is carried out on the contract, so that the trust in the rare is obtained. And the game that can exchange items between users.
Prototype development (April 2018)
EOS smart contract development has many things to understand compared to solidity. EOS itself is changing rapidly, I thought it would take too much time to develop directly into the eos contract. So first, I developed the game without a contract in order to verify the game. Instead, I wrote the code by simulating smart contract call to make it easy to port to the EOS Smart Contract. In 3 to 4 weeks of work, we created a prototype with 50 materials and craftable 200 equipment.
Submit proposal to EOS VC (May 2018)
EOS operates direct venture capital. As a test, I sent the proposal to EOS VC. It was about the development progress so far, the future milestones, and why the game will work. I did not expect much but two weeks later the answer came.
Many thanks for reaching out. The goal of our EOS VC program is to provide resources to help new projects get off the ground, and to help existing projects move to the EOS blockchain.
I have gone ahead and forwarded your submitted information to our EOS VC partners and fund managers for them to independently evaluate your project. Should an investment manager have an interest in your project, they will reach out to you directly.
Not all projects building on the EOS blockchain will receive EOS VC funding – rather, funding is only available to projects that are building or have firm intentions to build on the EOS ecosystem. Decision-making on investments is at the sole discretion of the EOS VC partners and investment managers.
They sent my proposal to the partner VC (probably Hong Kong) and they would judge it. There is no contact yet. It is a hastily written proposal, so it will probably be dropped. Since it is a big challenge to be independent with VC, when I am really ready for independence, this submission will help.
Smart Contract client library development (May 2018)
Unfortunately, there are no EOS clients. The only officially provided js client has not been able to follow the speed of EOS development. Sending a transaction to a chain is simple. It is done by just sending a REST call to the chain daemon(nodeos). The problem is that if you do not sign a transaction with a private key, it will fail with a permission error. There are two ways to do this: one is to use the Wallet server. MetaMask is a kind of local Wallet server. However, this method can not be made into a mobile game. Another way is to sign directly. This is the only way for mobile games. The problem is that the implementation of public and private keys using elliptical cryptography is not an easy task. Fortunately, the company called PLACTAL developed code that directly sine with the java version, and decided to port it to C# with this. (https://github.com/plactal/EosCommander)
The process was a continuation of suffering. I tried to port 4-5 kinds of hashing functions and elliptical code. I tried to port it at first, understanding it one by one, but it seemed to take a long time and I switched to simple machine porting. The biggest problem is that BigInteger class. This class allows you to handle very large integers. Mono version is low in Unity3D, so there is no this class. The functionality provided by Mono's higher version of BigInteger is simple. I was wondering if it would be possible to implement elliptical cryptography with it. I have no choice but to implement BigInteger directly. After several failures, I decided to port the open jdk BigInteger class to C#. This was not easy either. It took a long time to find the bug because the behavior is different from C#, java does not have a signed data type, and when the implicit type conversion is different from C#. It took me a week to port.
Smart Contract Porting (May 2018)
I started moving all of my existing business logic to the contracts one by one. I had no development experience here, so one of the mistakes I thought would be to give a response to the transaction as what I want it, like the normal Rest API. Eventually I changed all of the logic in such a way as to fire the transaction and then fetch the changed contents. Except for this issue, the porting process was relatively smooth.
EOS Smart Contract is written in C ++. While it is a bit more difficult than solidity, it offers a lot of great features instead. In particular, the data store supports multi-index supported tables, making it much easier to process the data than the solidity.
During development, I noticed several bugs in the EOS contract itself, one of which was critical. In the Smart Contract, an infinite loop occurs in the persistance api with an iterator bug, which causes the chain to stop. (https://github.com/EOSIO/eos/issues/2787) As soon as I reported the issue, Dan replied that he had modified it.