There will only ever be exactly 21 million gotts
Introducing the “gott” unit
In light of the infamous saying by all who know Bitcoin’s inevitable supply cap (not yet reached until after most of us are dead), I would like to introduce to the Grin community, the gott.
The gott is a unit of account for grin that is relative to the current supply, or total, grin ever created. The formula for calculating the relative unit of a single gott measured in units of grin is:
1 gott = 1 / (blockHeight * 60) * 21 * 10^6
This formula means there will only ever be exactly 21 million gotts in circulation (now and forever). By owning 1 gott you own 1/21 millionth of the entire supply of grin.
However, because the gott unit is relative to the current block height, this means that the unit is decreasing in size over time relative to grin (linearly). To convert grin to gott we can multiply an amount of grin by the unit size.
gotts = (1 / (blockHeight * 60) * 21 * 10^6) * grins
The Script
I’ve included a script written in JavaScript which can be run using Deno:
$ deno run --allow-net convert.js <grin-amount>
Here’s the script convert.js
script:
import { cheerio } from 'https://deno.land/x/cheerio@1.0.4/mod.ts';
const grin = parseInt(Deno.args[0]) || 0
const html = await fetch("https://grinexplorer.net/").then(res => res.text())
const $ = cheerio.load(html);
const $blockHeight = $(".card-header")
.filter((i, el) => /Chain Height/.test($(el).text()))
.siblings()
.find(".card-title")
const blockHeightString = $blockHeight.eq(0).text();
const blockHeight = parseInt(blockHeightString.replace(/\D/g, ''))
const unitGott = (blockHeight) => 1/(blockHeight * 60) * totalGotts
const totalGotts = 21 * 10**6
const gotts = grin * unitGott(blockHeight)
const minutesInADay = 60*24
const minutesInAWeek = minutesInADay*7
const minutesInAMonth = minutesInAWeek*4
const minutesInAYear = minutesInAWeek*52
const unitGottsTomorrow = unitGott(blockHeight + minutesInADay)
const unitGottsNextWeek = unitGott(blockHeight + minutesInAWeek)
const unitGottsNextMonth = unitGott(blockHeight + minutesInAMonth)
const unitGottsNextYear = unitGott(blockHeight + minutesInAYear)
console.log(`
Only ever ${totalGotts} gotts.
Today:
\t1 gott = ${unitGott(blockHeight)} grin
\tYou have (=${gotts} (gotts)
Tomorrow
\t1 gott = ${unitGottsTomorrow} grin
\tYou have (=${grin * unitGottsTomorrow}
Next week
\t1 gott = ${unitGottsNextWeek} grin
\tYou have (=${gotts * unitGottsNextWeek}
Next month
\t1 gott = ${unitGottsNextMonth} grin
\tYou have (=${gotts * unitGottsNextMonth}
Next year
\t1 gott = ${unitGottsNextYear} grin
\tYou have (=${gotts * unitGottsNextYear}
In 5 years
\t1 gott = ${unitGottsNextYear / 5} grin
\tYou have (=${gotts * unitGottsNextYear / 5}
In 10 years
\t1 gott = ${unitGottsNextYear / 10} grin
\tYou have (=${gotts * unitGottsNextYear / 10}
`)
This script will show you the current amount of gotts you own, as well as the projected amount of gotts you will own at various moments in the future (tomorrow, next week, next 5 years, etc).
Conclusion
The motivation behind a new unit is to illustrate the following:
- The total supply of grin is bounded by time, and therefore it’s relatively fixed. The total supply of gotts is absolutely fixed, but the gott unit is relative. The hope is to show how the concept of supply cap is allusive.
- We can transparently show the relationship between miner reward and stake holders. The unit gott is decrementing at a fixed rate in order to pay the miners. Everyone holding gotts or grin is equally paying the miners to secure the network now and forever.
- We now have a way of expressing value in terms of a whole (the entirety of grin).
I hope the community finds this interesting and is willing to expand on this idea. If not, at least I hope it amuses some.
Cheers!
Happy grinning