Sep 06, 2022 | Dave White, Frankie, Transmissions11
Contents
When NFT projects have a fungible token, the communities holding the NFT and the token tend to diverge over time. We created a mechanism to disincentivize this divergence, and to repair it when it happens anyway. We call it Gradual Ownership Optimization, or GOO.
Art Gobblers, from our upcoming NFT project, are NFTs that produce an Ethereum token called Goo. The more Goo a Gobbler has, the faster it generates more Goo. This means the total Goo supply will increase faster and faster every day, going from thousands to millions and beyond. Hoarding Goo tokens without owning any Gobbler NFTs is a very bad strategy, as everyone else will be generating goo and your share of the total Goo supply will rapidly dwindle to nothing. On the other hand, if you own many Gobblers but little Goo, your Goo production will lag compared to other players.
But, let's say you maintain ownership of Gobbler NFTs with a combined Goo production capacity of 1% of the total and never remove your Goo. No matter how much Goo you start with, you will eventually end up with at least 1% of the total Goo supply! This ensures Goo stays in NFT holder control over the long term.
Mathematically speaking, instantaneous Goo issuance is equal to
In this system, due to some extremely lucky math, it turns out that having many Gobblers with multipliers that add to
In this paper, we break down the details of the mechanism and provide production-ready code so you can use it in your own project.
There are currently two primary ways that NFT projects issue fungible tokens:
Airdrop. At some particular point in time, all holders of the NFT receive an amount of fungible tokens proportional to the number of NFTs they hold.
Constant emission. Each NFT emits a roughly constant number of tokens over time.
One constant emission method is staking, where NFT holders lock their NFT in a contract and receive some constant number of tokens each day.
Another approximately constant emission method is Play to Earn, where users who own or have access to a given NFT can play a game with the possibility of earning a number of tokens every day, depending on how they play.
In both of these cases, the population of people holding the NFT can become quite different from the population of people holding the fungible token over time.
In the case of an airdrop, as some users sell their NFTs without selling their tokens, and others sell their tokens without selling their NFTs, token and NFT ownership falls out of alignment, and no force exists to bring it back in line.
Even with constant emission, because fungible tokens are issued at a constant rate, it can be practically impossible for NFT and fungible token ownership to come back into alignment over time: every day, new tokens issued represent a smaller and smaller percentage of the overall supply. Furthermore, no matter how much of the fungible token you have, there is no incentive to match it with a comparable amount of NFTs, and visa versa. Once the populations of NFT and token holders diverge, nothing realigns them.
We wanted to make sure that Goo was purely a utility token, and that the Art Gobblers NFTs themselves would remain the anchor of the economy. We also wanted our solution to be extremely gas efficient, easy for NFT community members to understand, and, most importantly, fun to use.
All the Art Gobbler NFTs belonging to a given Ethereum account squirt Goo into a Goo tank associated with that account. The owner of that address can add or remove Goo from that tank at any time.
Art Gobblers squirt out Goo at a rate proportional to the square root of the Goo already in their tanks. Each gobbler has its own
We automatically compound this instantaneous issuance using a differential equation, lazily evaluated so that compounding can occur over arbitrarily long time periods without any need to spend gas.
Goo inflates quadratically over time, significantly slower than the exponential inflation common to most token staking schemes.
Because Goo issuance is at its optimum when Goo is held in proportion to a user’s Gobblers, users are incentivized to hold Goo and Gobblers in proportion. Because the overall rate of Goo emission is always increasing, these incentives remain strong regardless of how much Goo has already been issued.
Due to some very fortunate math, having many Gobblers whose multiplier sums to a given total is the same as having a single Gobbler whose multiplier is equal to that total, ensuring the system stays fair even if some users accumulate large numbers of Gobblers.
For convenience, we will use
Art Gobblers emit Goo at an instantaneous rate of
We picked square root issuance to ensure that Gobblers are more fundamental than Goo — the more Goo you add to a given Gobbler’s tank, the less each new unit of Goo increases that gobbler’s instantaneous Goo issuance. That means users cannot game the system by placing a massive amount of Goo in a single Gobbler’s tank.
For example, at time 1, if
Expressed mathematically, we have the following differential equation:
Solving it yields
and expanding, we get
Note we assume for convenience that time always starts at 0, while in production one must track the time elapsed since the last interaction with the contract.
Imagine you have 4 Goo and 2 Gobblers, one with a
You want to decide how to distribute your Goo between them so as to maximize your rate of Goo production.
If you had to put all of your Goo in only one Gobbler’s tank, it would obviously be better to put it in the tank of the Gobbler with the
However, splitting your Goo evenly between the Gobblers is even better, for a production rate of
But it turns out we can do even better. For any group of Gobblers with multipliers
In this case, we would allocate
This would be an interesting but not particularly helpful result if users had to constantly rebalance their Goo between multiple Gobblers to keep them producing optimally.
Fortunately, once balanced, Gobblers stay balanced! To see why, notice that, by definition, at the time of balancing,
If we introduce a new constant
And plugging that into the definition of
and, simplifying,
Since this is true for all
This means we can automatically balance Goo between Gobblers for users only once, and they will stay balanced.
Even so, if the resulting rate of Goo production was complicated or hard to understand, the overall system wouldn’t be especially satisfying or fun, and users might not know how to interact with it.
Fortunately, that is not the case. It turns out that, when Goo is optimally balanced between Gobblers with multiples
Returning to our original example, we can verify manually that this is the case. When we optimally balance our 4 Goo between our two gobblers with mults 1 and 3 and achieve an instantaneous output of 4, it is the same as putting the 4 Goo in the tank of a single gobbler with a
This end result — that having several Gobblers whose
Because Goo inflates quadratically, holding it without holding Gobblers is a grave mistake, as you will not generate any more Goo, and your proportion of the overall supply will rapidly dwindle.
Furthermore, we can see from the auto-balancing section above that the optimal rate of Goo production across the ecosystem is achieved when Goo is distributed proportionally to
More formally, let’s say you own a collection of gobblers with a total multiplier of
Let’s say that all Gobblers combined have a total multiple of
If Goo is not perfectly balanced between the other Gobblers, your proportion of the total Goo will actually be greater than your proportion of the total
Of course, this is only the case if the total
A highly optimized, production ready, and permissively licensed (MIT) implementation of GOO can be found at transmissions11/goo-issuance. Pull requests with improvements are welcome.
GOO was designed for Art Gobblers, but we believe it is applicable to a wide variety of NFT projects and on-chain games. If you want to issue a fungible token from an NFT while ensuring users hold the NFT and the token roughly in proportion, GOO may be for you.
If you are interested in integrating GOO into your project, we’d love to hear from you.
You can reach us on Twitter at @_Dave__White_, @FrankieIsLost and @transmissions11.
Acknowledgments: samczsun, Riley Holterhus, Aaru, Otto Suwen, 0xmisaka, NN Blossoms, DCFPascal, kootsZhin, snoopy, Ben Leimberger, shant, 0xQTpie
Graphics By: Achal Srinivasan
Disclaimer: This post is for general information purposes only. It does not constitute investment advice or a recommendation or solicitation to buy or sell any investment and should not be used in the evaluation of the merits of making any investment decision. It should not be relied upon for accounting, legal or tax advice or investment recommendations. This post reflects the current opinions of the authors and is not made on behalf of Paradigm or its affiliates and does not necessarily reflect the opinions of Paradigm, its affiliates or individuals associated with Paradigm. The opinions reflected herein are subject to change without being updated.