09.06.2022|Dave WhiteFrankietransmissions11

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

$\sqrt{\texttt{mult}\cdot\texttt{goo in tank}}$

, where a Gobbler’s $\texttt{mult}$

, or multiplier, is its base speed of squirting out Goo. We auto-compound Goo issuance over time using a differential equation, and also automatically balance Goo between gobblers if you have more than one.In this system, due to some extremely lucky math, it turns out that having many Gobblers with multipliers that add to

$\texttt{total mult}$

is the same as having a single Gobbler with a multiplier of $\texttt{total mult}$

, which means the game stays fair as some players obtain more Gobblers.where a Gobbler’s *mult*, or multiplier, is its base speed of squirting out Goo. We auto-compound Goo issuance over time using a differential equation, and also automatically balance Goo between gobblers if you have more than one.

In this system, due to some extremely lucky math, it turns out that having many Gobblers with multipliers that add to *total mult *is the same as having a single Gobbler with a multiplier of *total mult*, which means the game stays fair as some players obtain more Gobblers.

While designed for Art Gobblers, this mechanism is applicable to any NFT ecosystem with a fungible token. It keeps NFT and token holders aligned while ensuring the primary importance of the NFT itself. It’s also fun, especially when combined with other mechanisms like VRGDA.

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

$\texttt{mult}$

, which describes its base rate of goo squirting.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.

$m_i$

- Gobbler $i$

’s Goo emission multiple$g_i(t)$

- the amount of Goo in Gobbler $i$

’s tank at time $t$

$\texttt{initial Goo}_i$

- how much Goo Gobbler $i$

has at time 0For convenience, we will use

$g(t)$

, $m$

, and $\texttt{initial Goo}$

without the subscripted $i$

when referring to only a single Gobbler.Art Gobblers emit Goo at an instantaneous rate of

$\sqrt{mg(t)}$

.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

$m$

is 2, and $g(1)$

is 2, then instantaneous Goo issuance would be $\sqrt{2\cdot2}=\sqrt{4}=2$

Goo per day.Expressed mathematically, we have the following differential equation:

$g'(t) = \sqrt{mg(t)}$

Solving it yields

$g(t)=\frac{1}{4}(\sqrt{m} t + 2\sqrt{\texttt{initial Goo}})^2$

and expanding, we get

$g(t) =\frac{1}{4}mt^2+\texttt{initial Goo}+t\sqrt{m\cdot\texttt{initial Goo}}$

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

$\texttt{mult}$

of 1 and one with a $\texttt{mult}$

of 3.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 of 3, for an instantaneous production rate of

$\sqrt{3*4}=2\sqrt{3}\approx3.5$

.However, splitting your Goo evenly between the Gobblers is even better, for a production rate of

$\sqrt{1\cdot2}+\sqrt{3\cdot2}=\sqrt{2}+\sqrt{6}\approx3.9$

.But it turns out we can do even better. For any group of Gobblers with multipliers

$m_i$

, it turns out that the optimal way to distribute Goo between them is by allocating $\frac{m_i}{\sum_{j=0}^n m_j}$

of the total Goo to each.In this case, we would allocate

$\frac{1}{4}\cdot4=1$

Goo to the first Gobbler and $\frac{3}{4}\cdot4=3$

Goo to the second Gobbler, for a total instantaneous Goo production of $\sqrt{1*1}+\sqrt{3*3}=1+3=4$

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,

$\texttt{initial Goo}_i=\frac{m_i}{\sum_j{m_j}}\texttt{total initial Goo}$

If we introduce a new constant

$c=\frac{\texttt{total initial Goo}}{\sum_jm_j}$

for convenience, we get$\texttt{initial Goo}_i=m_ic$

And plugging that into the definition of

$g_i(t)$

above, we get$g_i(t)=\frac{1}{4}(\sqrt{m_i} t + 2\sqrt{\texttt{initial Goo}})^2=\frac{1}{4}(\sqrt{m_i} t + 2\sqrt{m_ic})^2$

and, simplifying,

$g_i(t)=\frac{m_i}{4}(t + 2\sqrt{c})^2$

Since this is true for all

$i$

we see that regardless of the value of $t$

, the Goo is distributed between gobblers proportionally to their multipliers, which is precisely the condition we need to maintain optimal Goo production.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

$m_i$

the total rate of Goo production is the same as the rate of Goo production from a single Gobbler with a mult of $\sum_{j=0}^nm_j$

-- in other words, having multiple Gobblers with a $\texttt{mult}$

sum of 100 is the same as having a single Gobbler with a $\texttt{mult}$

of 100.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

$\texttt{mult}$

of 1+3=4 to achieve an output of $\sqrt{4\cdot4}=4$

. We can see the same would still be true if we had four Gobblers, each with a mult of 1, for a total output of $\sqrt{1\cdot1}+\sqrt{1\cdot1}+\sqrt{1\cdot1}+\sqrt{1\cdot1}=4$

.This end result — that having several Gobblers whose

$\texttt{mult}$

s sum to 10 is the same as having one Gobbler with a mult of 10 — is both very intuitive and very fortunate, since otherwise users could manipulate the rate of Goo production by changing their allocations of Gobblers between wallets.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

$\texttt{mult}$

. So if you have many Gobblers but very little Goo, your production of Goo will lag behind the field’s, and you will be outcompeted. As a result, users are incentivized to keep their Goo and Gobbler holdings roughly in line.More formally, let’s say you own a collection of gobblers with a total multiplier of

$M$

. If you never remove any of your Goo from its collector, from the definition of $g(t)$

we can see that eventually your Goo supply will be approximately equal to $\frac{M}{4}t^2$

, the only quadratic term.Let’s say that all Gobblers combined have a total multiple of

$Q$

. If Goo is perfectly balanced between all the other Gobblers, eventually their Goo supply will be approximately equal to $\frac{Q-M}{4}t^2$

, so that the total Goo supply will be proportional to $\frac{Q}{4}t^2$

, and your proportion of it will be $\frac{M}{Q}$

, the proportion of total $\texttt{mult}$

you own.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

$\texttt{mult}$

.Of course, this is only the case if the total

$\texttt{mult}$

is remaining constant over time, which it may not depending on how the rest of the system works. Otherwise, you may have to take action to ensure your share of the total $\texttt{mult}$

remains constant.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.

Copyright © 2024 Paradigm Operations LP All rights reserved. “Paradigm” is a trademark, and the triangular mobius symbol is a registered trademark of Paradigm Operations LP