Hello world! This will be a little confusing for people looking at my profile, as this is my first post here, but it’s about version 2 of our game 😁. Most of our previous announcements happened on our discord, so make sure to check it out! Here’s our executive summary from the first round spec:

Möbius 2D is a take on the famous FOMO3D, but built from the ground up to be more efficient and user friendly. We have developed our smart contract with some key advantages, most important of which are instant returns and more efficiency! You can withdraw your earnings any time during the round. The first round is also a Token Distribution, in which investors get our M2D Dividend Tokens. When the first round ends, token minting is finalized, and token holders start receiving dividends from this and other games we develop — FOREVER.

It is now nearly a month after the start of round 1, and as described in the rules, the share price will start doubling roughly every hour soon! We expect the round to finish shortly after this. We’ve discovered that between the initial ramp-up phase and the hard deadline, there’s a very quiet and boring period where everyone’s just waiting to see what happens. Our airdrop mechanic was meant to incentivise daily investments, but it is ineffective and unclear (also not very secure). Due to these reasons, we’ve developed an update for round 2!

Update process

The exact details of what is changed will be shared in more details in another post, but the most notable changes are:

The removal of the airdrops in favour of daily jackpots

Daily jackpot draws are done in a more secure manner, so there’s no way for anyone to cheat or influence the draws (even us)

There are several steps that need to be taken to “upgrade” the smart contract. In actuality, the contract can’t be changed, so we simply deploy a new contract and tell the old one that it’s no longer needed. The different steps we will take to complete the process are the following:

Deploy V2 contract (already done) “Upgrade” V1 contract: it’s a matter of calling the upgrade function (line 472) in the old contract which prevents new rounds from being started, but doesn’t affect the currently running round. It also allows the new contract to withdraw the jackpot seed (5% of the revenue for the round). Finalize round 1 in the V1 contract — this can be done by anyone by invoking finalizeLastRound (line 454). This transfers the jackpot to the winner’s vault, dividends to token holders, and the jackpot seed to the next version’s “vault” Initialize V2 contract — this will fetch the stats from V1 and withdraw the jackpot seed. Start V2 — start the second round.

There’s a low-severity bug with this process for which we have a remedy, but we’d like to know your opinion!

In step 3, the V1 contract sends the jackpot seed to a normal vault (just like the players’ vaults) with the address of the new contract. The problem (what we didn’t foresee) is that the withdraw function uses the .transfer function, which only works for non-contract addresses (line 415)! So if we would follow the original process, we wouldn’t be able to initialize the new contract, because the init function would fail. Our solution is:

Manually (using our own ETH) send the jackpot seed (currently around 45 ETH) to the new contract. Set the upgraded version in the V1 contract to our main wallet address, so that we can withdraw the actual seed at the end of round 1. Send any additional ETH (if there happen to be more investments after we manually seed the V2 contract) to V2 prior to initializing. Initialize V2 and finish the process as normal.

One problem here is that we have not yet revealed the code for our V2 contract. We would like to delay revealing the code to as close as possible before the start of round 2, to minimize the chance of it being cloned before it even starts.

When do you think is an acceptable time to verify the contract code?

Ideally we would like to do it a few hours before the start of round 2, but that means that you need to trust us with the jackpot seed. Let us know what you think — if the community wants us to reveal the code earlier, we will do it!