Dynamic token economies for onchain games
In this piece, we seek to understand the mechanics of token emissions in crypto games and the pressure the economy faces from farmers. We will look at the simple system designed for Sky Strife that modulates token emission to counter excessive activity and how it performed on mainnet during Season 1.
NOTE: Sky Strife was made by Lattice and released on May 1st together with Redstone, and I was product lead for the project.
Takeaways:
- Trading resources in-game creates a dangerous opportunity to attract players
- Speculation is inevitable
- Testnet can only test so much. Mainnet unleashes very different users
- Token price fluctuations didn’t immediately affect gameplay volume
Framing the issue
When blockchain projects kick off, they are accompanied by an initial burst of activity and minting. Once that excitement is gone, they drop in price and usage. The drop can be so significant that even holders who are not entirely incentivized by price end up feeling the FUD and leave the project. The specific method used for farming is not that important for this analysis since blockchain is especially vulnerable to sybil attacks through multiple wallets running scripts and, for a low cost, click farms are available to play and massively mint the token rewards. From our perspective, the main issue stems from the focus on financial incentives from low-risk, low-cost activity (a.k.a. “free money”).
In games, incentives are never pure. There is a desire for competition and mastery, a desire for role-playing and participation in a universe, a thrill from chance events and unpredictability. Money adds another path of interest — a valid one as long as it is not the only reason to interact with the game. If revenue becomes the sole interest for players, they will min-max the systems through botting to capitalize on whatever value can be extracted from the game. In that sense, any liquid token emission is a potential financial attack path that has the complexity of actions triggering the token emission as a barrier and the price of the token as a honeypot.
Fighting this at the level of the player incentive, where one has to weed out the “unfaithful” and only keep the ones who are “pure of heart”, seems like the wrong approach. It pretends to solve the player’s psychology in order to define who can actually play the game and disregards the obvious fact that if people find value in playing a game and pieces or parts of that game can be transferred to another player, they will be priced.
A player who finds an Emerald Sword extremely valuable would be willing to pay for it. Another person finds the price sufficient to solely focus on retrieving the Sword while playing. These are incentives that happen in most MMOs (more or less explicitly) and will always happen onchain. They exist because the game is good and players value the items. The issue stems from excessive liquidity: some players value these things a lot and are willing to pay, while others are willing to spend the time clicking to get some money. The mismatch between the amount of tokens created and the actual value is what becomes the problem. The financial incentive attracts too many clickers and the value is not entirely absorbed into the retained user base, leading to an abundance of resources and a price drop. This is where the players who perceive underlying value start to get uncomfortable and shift perspectives, seeing the devaluation of items they actually care for.
Acting on the game itself
The decision was made to not try a player-specific solution, that is, trying to identify predatory or unwanted behavior and banning wallets. This kind of “band-aid” solution is unsustainable in the long run as new abusive behavior starts to appear and new rules have to be established. Instead of trying to fix the players, we made the game more sturdy so that even if there was unwanted or excessive farming activity the system would not collapse. This does not mean that everything would be fair game, we knew there would always be unwanted, sub-optimal, or abusive behavior. The perspective was that any effort to stop it would be imperfect as “farmers” are highly adaptable (as we have seen), so we focused on having a system that can handle that without collapsing and thus giving more time to optimize the game while it’s running.
When framed like that, the emission of the token itself became the focus, not the game rules. The faucet would have to modulate the emission when it seemed excessive and release it when it could provide value. This was a simple enough principle that we used as the grounds for our token emission system.
How it works
Sky Strife is an RTS played in matches, usually with 4 players. They enter the match and fight each other, creating units and trying to destroy the enemy’s bases. The last castle standing is the winner. Matches, in that sense, are completely independent from each other. But we wanted to add some persistence, something that would be carried from match to match. This is not a novel mechanism, as many games have experience points or other forms of evolution between the independent matches. One important point for accessibility and user growth is that we wanted the matches to always be on equal footing (or as much as possible), so items that granted gameplay advantages were off the table.
We moved to a token reward and in order to give it utility, we decided to require 100 ‘orbs’ (the token) to start a match. This was a simple closed loop: spend 100 orbs to start a match, play the match, and get reward orbs distributed between the 1st, 2nd, and 3rd place. The spin is that rewards are not static (match creation is always the same though) and they change depending on past volume. There’s a rolling window that counts how many matches were created in the past 7 days and that number defines how many orbs will be distributed to the match winners. The higher the volume, the lower the reward, up to a point where rewards are, in sum, below 100 orbs, making the match creation deflationary if there is too much volume.
This artificial scarcity from volume keeps the interest in “pure farming” limited and the exceptional peak of token emission no longer exists. It does not solve the problem of player motivation (we are not trying to change people’s minds or motivations at this point) but we protect the economy from abuse. Or so we thought.
Considering orbs can only be gained from playing matches and matches can only be created by spending orbs, there’s a chicken and egg problem. We had allowed the “Sky Pool” (which holds all the orbs for distribution and receives the orbs from match creation) to create matches without spending orbs, seeding the economy. Only a few of those are generated every 8 hours and eventually they might even stop, they are there because the only way to get orbs out of the Sky Pool is by playing matches.
Monetization
This entire system — token emission, match creation, and reward distribution — is defined on the contract level and can only be tweaked by the devs (except for the creation of matches without the need of spending orbs). This means that there is no path to monetization through the token, all orbs are locked into the Sky Pool. In order to monetize, the game sells Season Passes.
Season Passes are untransferable NFTs that last for a Season (month) and give more configuration options for the holder when creating a match. SP holders can set a match to private (only specified wallets can enter the match), define an entry fee for match (which they may pocket) and restrict access to certain players, through the wallet IDs.
What happened?
Season 1
We released the game on May 1st with the following settings:
By the 3rd day, we had over 1,000 matches cumulative matches created and match creation became deflationary. As soon as matches were giving few rewards we saw activity go down drastically and on May 5th there were only 41 matches played, from a peak of 737 on May 2nd. We scrambled and tweaked the system since activity rose faster than expected. Our window was too large and the community was running in a faster beat than the 7-day compass of the economy.
We decided this was a tweak issue and not a system issue so we reduced the window from 7 to 2 days. In order to keep overall inflation down we also reduced the Max Reward and increased the Min Reward, while keeping it below the cost of a match. We see matches that cost more than how much they give away as a great indicator for player interest beyond financial gains, players who are willing to pay a bit to play the game. The values were changed on May 9th to the following:
Once these changes were made we saw activity rise again, to 654 matches once the curve was back on the profit level. Matches would be created as soon as the curve was back to EV positive to an average of about 500 per day matching the 1,000 matches equilibrium point for the 2 day rolling window.
Season 2
One week into Season 2 the reward curve was tweaked again. The idea was to provide less returns for EV+ matches. From these changes there was no impact on gameplay volume, even if the max reward went down from 300 to 150 orbs. The equilibrium point remained the same, 2,000 matches over 48 hours.
Season 2 also saw the crash of the usual speculative behavior. The number of Season Passes sold dropped drastically. This is not surprising when we realize that most of the Season Pass Holders from Season 1 did not play or create a single match. Even with this revenue hit, the game kept being played at the “limit”, daily matches created hovering on the equilibrium point where match reward equals match cost.
As mentioned before, there was no liquidity provision or market making of any kind from the dev team, a swap was created and filled by players. In the middle of Season 2, almost all liquidity was pulled out of the swap, creating a huge price drop to the token.
The consequence was an immediate devaluation of the Orb token from around $0.40 to $0.04. The daily volume traded also went down drastically. This happened at a point where there were concerns in the community about the game being farmed too heavily.
Nevertheless, this drop did not reflect on other key indicators. The DAUs kept the same rate and were actually higher than Season 1. There was a more perceptible drop after the client went down for some time on July 2. Until then, players on actual matches were trending roughly 30% higher than Season 1.
Match creation volume also kept at it, reaching consistently the equilibrium point of 1,000 matches per day (2,000 over 48 hours).
This one was interesting since the matches were not even close to the same level of profitability as before: from $20 to $40 in a full profit match, now it was $0.10. There was a little less impetus from the players, because it would take a few hours for matches to reach 0 profitability and before the price drop it would take minutes.
Key Observations
Pool Depletion
Orbs are held by the Sky Pool. There were 100,000,000 orbs minted originally and that’s all the orbs that will ever exist. The economy is circular, orbs go into the Sky Pool to create matches and the Sky Pool releases orbs as rewards at the end of matches. With this dynamic, the release of tokens from the Sky Pool is what we consider “inflation”. In this sense, there is a limit to how many rewards the Sky Pool can ultimately distribute. We have done some calculations on that and the original setup (7-day window, 500 max reward) would last, worst case scenario, for about 9 years. The new setup increased activity drastically and only reduced the runway by 2 years. That said, this is a worst-case scenario and doesn’t prevent us from tweaking further. Again, this doesn’t mean the game would end in 7 years, it just establishes the point where the Sky Pool will not have funds to distribute rewards higher than the cost of the match itself. Matches that give rewards equal to the cost of creating the match can be created forever.
Token Price
The token is traded through a 3rd party swap that we do not control nor do we contribute to its Liquidity Pool. That pool has been trading constantly since the game started, it was already deployed on the testnet and came to mainnet at the same time the game was released. The value locked has been growing continuously since the game started, together with the swap volume. The token price has oscillated somewhat, but by the second week, it reached a stable price and has been holding ever since. We are not involved in prediction markets or going deeper into speculative behavior around the token as we keep focus on providing value for it through the game itself by means of its utility and fun and to manage scarcity through modulating distribution through the system described above. The stability of the price is a positive side effect for the game itself but is only a reflection or side effect of the community’s interest in the game, not a goal.
Orb Economy
When we look at the overall numbers, we can see a larger economy at work here. Since May 1st, 1,300,000 orbs have been distributed. 36,900 matches were created at a cost of about 3,690,000 orbs. This means 4,000,000 orbs are running through the economy as inflows and outflows. Even if the price has drastically changed, the economy is still turning at the same pace, and for now, the pricing is not affecting user time investment.
Private Matches & Entry Fee Matches
Owning a Season Pass allows players to create private matches and farm freely. The idea for these was not to be a farm tool but to simplify creation of tournaments so some players could become organizers, helping us with the issue of coordinating players so they are all online at the same time. That was clearly exploited as we have seen private matches being by far the most created ones and we assume that most of them were being used to farm orbs.
Season 2 limited the amount of private matches that can be created per Season Pass, again trying to cap the incentive so it’s not abusing the system beyond a certain point. What happened was a shift from private matches to entry fee matches.
In practice, the fees would make these matches interesting only for the creator, who recoups the entry fee. Anyone else would pay too much to play. The irony is that this behavior persisted even with the price drop and way less money at stake.
Ecosystem
Season 2 saw the creation of a betting market for Sky Strife matches: night market. This is a player project which uses the plugin setup and the open-source client. Together with Redswap, a swap for orbs and yeomen.ai, this is the third significant project that adds to the game itself developed entirely by the community.
Wrapping Up
Season 3 is just starting as this article is going live. The most important change is limiting the number of entry fee matches to ensure there will be more open matches. This will leave created matches more open for anyone to join. It will also make the Season Pass less valuable because the protection it gives is now limited. Orb accrual will become a more dangerous activity, with most matches open for anyone to join and take the orbs.
Another category of matches will be available: those are matches that don’t participate in the reward curve. They have a cost (5 orbs) but do not give any reward, so they will be a pure sink, albeit small, to the economy.