diff --git a/docs/components/Tokenomics/Tokenomics.module.css b/docs/components/Tokenomics/Tokenomics.module.css new file mode 100644 index 0000000000..e922c2e757 --- /dev/null +++ b/docs/components/Tokenomics/Tokenomics.module.css @@ -0,0 +1,254 @@ +/* SPDX-License-Identifier: LGPL-3.0-only */ + +.stats { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); + gap: 1rem; + margin: 1.5rem 0 2.5rem; +} + +.statCard { + background: #ffffff; + border: 1px solid rgba(15, 23, 42, 0.08); + border-radius: 12px; + padding: 1.1rem 1.25rem; + box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04); +} + +.statLabel { + font-size: 0.72rem; + text-transform: uppercase; + letter-spacing: 0.08em; + color: #6b7280; + margin: 0 0 0.4rem; +} + +.statValue { + font-size: 1.5rem; + font-weight: 600; + color: #0f2233; + line-height: 1.1; +} + +.statSub { + font-size: 0.78rem; + color: #9aa3b0; + margin-top: 0.25rem; +} + +/* Allocation */ +.allocation { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 2rem; + background: #ffffff; + border: 1px solid rgba(15, 23, 42, 0.08); + border-radius: 16px; + padding: 1.75rem; + margin: 1.5rem 0 2.5rem; + box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04); +} + +.legend tr { + transition: background 0.15s ease; +} + +.tooltip { + position: absolute; + pointer-events: none; + transform: translate(-50%, -135%); + background: #0f2233; + color: #ffffff; + font-size: 0.8rem; + font-weight: 500; + padding: 0.35rem 0.6rem; + border-radius: 8px; + white-space: nowrap; + box-shadow: 0 6px 16px rgba(15, 23, 42, 0.22); + z-index: 5; +} + +.tooltipSub { + margin-left: 0.45rem; + opacity: 0.65; + font-weight: 400; +} + +.pieWrap { + flex: 0 0 auto; + margin: 0 auto; + max-width: 100%; +} + +.pieWrap svg { + display: block; + max-width: 100%; + height: auto; +} + +.legend { + flex: 1 1 320px; + min-width: 0; + border-collapse: collapse; + width: 100%; + font-size: 0.92rem; +} + +.legend th { + text-align: left; + font-size: 0.7rem; + text-transform: uppercase; + letter-spacing: 0.06em; + color: #9aa3b0; + font-weight: 600; + padding: 0 0.5rem 0.6rem; + border-bottom: 1px solid rgba(15, 23, 42, 0.08); +} + +.legend td { + padding: 0.55rem 0.5rem; + border-bottom: 1px solid rgba(15, 23, 42, 0.05); + color: #243240; +} + +.legend tr:last-child td { + border-bottom: none; +} + +.legend .num { + text-align: right; + font-variant-numeric: tabular-nums; + white-space: nowrap; +} + +.legend .center { + text-align: center; + font-variant-numeric: tabular-nums; + white-space: nowrap; +} + +.swatch { + display: inline-block; + width: 12px; + height: 12px; + border-radius: 3px; + margin-right: 0.6rem; + vertical-align: -1px; +} + +.catCell { + font-weight: 500; +} + +/* Vesting */ +.vesting { + position: relative; + background: #ffffff; + border: 1px solid rgba(15, 23, 42, 0.08); + border-radius: 16px; + padding: 1.5rem 1.25rem; + margin: 1.5rem 0 1rem; + box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04); +} + +.svgScroll { + overflow-x: auto; +} + +.vtableWrap { + margin-top: 1.25rem; + padding-top: 1rem; + border-top: 1px solid rgba(15, 23, 42, 0.07); +} + +.vlegendItem { + transition: opacity 0.15s ease; +} + +.vestingNote { + font-size: 0.82rem; + color: #9aa3b0; + margin: 0 0 1.5rem; +} + +.tableCard { + background: #ffffff; + border: 1px solid rgba(15, 23, 42, 0.08); + border-radius: 16px; + padding: 1.25rem 1.5rem; + margin: 1.5rem 0 1rem; + box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04); + overflow-x: auto; +} + +.vlegend { + display: flex; + flex-wrap: wrap; + gap: 0.55rem 1.5rem; + margin-top: 1.25rem; + padding-top: 1.25rem; + border-top: 1px solid rgba(15, 23, 42, 0.07); +} + +.vlegendItem { + display: flex; + align-items: center; + font-size: 0.88rem; +} + +.vname { + font-weight: 500; + color: #243240; +} + +/* Mobile */ +@media (max-width: 640px) { + .stats { + grid-template-columns: repeat(2, 1fr); + gap: 0.6rem; + margin: 1.25rem 0 2rem; + } + + .statCard { + padding: 0.85rem 0.9rem; + } + + .statValue { + font-size: 1.25rem; + } + + .allocation { + flex-direction: column; + align-items: stretch; + gap: 1.25rem; + padding: 1.1rem; + border-radius: 14px; + } + + .legend { + flex: 1 1 auto; + font-size: 0.82rem; + } + + .legend th, + .legend td { + padding-left: 0.3rem; + padding-right: 0.3rem; + } + + .swatch { + margin-right: 0.4rem; + } + + .vesting { + padding: 1.1rem 0.85rem; + border-radius: 14px; + } + + /* Hover tooltip is not useful on touch; the table below conveys the same info */ + .tooltip { + display: none; + } +} diff --git a/docs/components/Tokenomics/index.tsx b/docs/components/Tokenomics/index.tsx new file mode 100644 index 0000000000..4c5b5346f9 --- /dev/null +++ b/docs/components/Tokenomics/index.tsx @@ -0,0 +1,380 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. + +import React, { useRef, useState } from 'react' +import classes from './Tokenomics.module.css' + +// --------------------------------------------------------------------------- +// Source data — Token Distribution Scheme (tab 1 of the allocation sheet) +// --------------------------------------------------------------------------- + +export const TOTAL_SUPPLY = 1_200_000_000 + +type Slice = { + key: string + pct: number + tokens: number + color: string +} + +// Ordered largest → smallest. Colours are a cohesive cool/azure palette +// anchored on the docs' primary hue (203) so the charts match the theme. +const ALLOCATION: Slice[] = [ + { key: 'Community Grants & Treasury', pct: 47, tokens: 564_000_000, color: '#075E9D' }, + { key: 'Gnosis Guild', pct: 20, tokens: 240_000_000, color: '#009DFF' }, + { key: 'Investors', pct: 15, tokens: 180_000_000, color: '#38BDF8' }, + { key: 'Uniswap CCA', pct: 10, tokens: 120_000_000, color: '#0D9488' }, + { key: 'Airdrop', pct: 4, tokens: 48_000_000, color: '#6366F1' }, + { key: 'Liquidity Reserves', pct: 3, tokens: 36_000_000, color: '#818CF8' }, + { key: 'Advisors', pct: 1, tokens: 12_000_000, color: '#94A3B8' }, +] + +const COLOR_BY_KEY: Record = Object.fromEntries( + ALLOCATION.map(s => [s.key, s.color]), +) + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +const fmtInt = (n: number) => n.toLocaleString('en-US') + +const fmtPct = (n: number) => `${Math.round(n)}%` + +const fmtCompact = (n: number) => { + if (n >= 1e9) return `${(n / 1e9).toFixed(n % 1e9 === 0 ? 0 : 2)}B` + if (n >= 1e6) return `${Math.round(n / 1e6)}M` + return fmtInt(n) +} + +function polar(cx: number, cy: number, r: number, angleDeg: number): [number, number] { + const a = ((angleDeg - 90) * Math.PI) / 180 + return [cx + r * Math.cos(a), cy + r * Math.sin(a)] +} + +function donutSlice( + cx: number, + cy: number, + rOuter: number, + rInner: number, + start: number, + end: number, +): string { + const [x1, y1] = polar(cx, cy, rOuter, end) + const [x2, y2] = polar(cx, cy, rOuter, start) + const [x3, y3] = polar(cx, cy, rInner, start) + const [x4, y4] = polar(cx, cy, rInner, end) + const large = end - start > 180 ? 1 : 0 + return [ + `M ${x1} ${y1}`, + `A ${rOuter} ${rOuter} 0 ${large} 0 ${x2} ${y2}`, + `L ${x3} ${y3}`, + `A ${rInner} ${rInner} 0 ${large} 1 ${x4} ${y4}`, + 'Z', + ].join(' ') +} + +// --------------------------------------------------------------------------- +// Key parameters +// --------------------------------------------------------------------------- + +export function KeyParameters() { + const cards = [ + { label: 'Total Supply', value: '1.2B' }, + { label: 'Circulating Supply at TGE', value: '17%' }, + ] + return ( +
+ {cards.map(c => ( +
+

{c.label}

+
{c.value}
+
+ ))} +
+ ) +} + +// --------------------------------------------------------------------------- +// Allocation donut + legend +// --------------------------------------------------------------------------- + +export function AllocationPie() { + const size = 260 + const cx = size / 2 + const cy = size / 2 + const rOuter = 122 + const rInner = 74 + const POP = 7 + + const [hover, setHover] = useState(null) + const [pos, setPos] = useState({ x: 0, y: 0 }) + const wrapRef = useRef(null) + + let cursor = 0 + const total = ALLOCATION.reduce((s, d) => s + d.pct, 0) + const arcs = ALLOCATION.map(d => { + const start = (cursor / total) * 360 + cursor += d.pct + const end = (cursor / total) * 360 + const mid = (((start + end) / 2 - 90) * Math.PI) / 180 + return { ...d, start, end, dx: Math.cos(mid) * POP, dy: Math.sin(mid) * POP } + }) + + const hovered = ALLOCATION.find(d => d.key === hover) + + const onMove = (e: React.MouseEvent) => { + const r = wrapRef.current?.getBoundingClientRect() + if (r) setPos({ x: e.clientX - r.left, y: e.clientY - r.top }) + } + + return ( +
+
+ + {arcs.map(a => { + const isHover = hover === a.key + return ( + setHover(a.key)} + onMouseLeave={() => setHover(null)} + /> + ) + })} + + 1.2B + + + TOTAL SUPPLY + + +
+ + + + + + + + + + + {ALLOCATION.map(d => ( + setHover(d.key)} + onMouseLeave={() => setHover(null)} + style={{ background: hover === d.key ? 'rgba(15,23,42,0.05)' : undefined }} + > + + + + + ))} + +
CategorySupplyTokens
+ + {d.key} + {fmtPct(d.pct)}{fmtInt(d.tokens)}
+ + {hovered && ( +
+ {hovered.key} +
+ )} +
+ ) +} + +// --------------------------------------------------------------------------- +// Vesting schedule — cumulative stacked-area chart (circulating supply) +// --------------------------------------------------------------------------- + +type Vest = { + key: string + total: number // tokens + vestMonths: number // linear duration; 1 = fully unlocked at TGE + term: string +} + +// Bottom → top stacking order (flat/immediate at the base, long linear vests on +// top). +const VESTING: Vest[] = [ + { key: 'Liquidity Reserves', total: 36_000_000, vestMonths: 1, term: '100% at TGE' }, + { key: 'Uniswap CCA', total: 120_000_000, vestMonths: 1, term: '100% at TGE' }, + { key: 'Airdrop', total: 48_000_000, vestMonths: 24, term: '24-month linear unlock' }, + { key: 'Advisors', total: 12_000_000, vestMonths: 24, term: '24-month linear unlock' }, + { key: 'Investors', total: 180_000_000, vestMonths: 24, term: '24-month linear unlock' }, + { key: 'Gnosis Guild', total: 240_000_000, vestMonths: 48, term: '48-month linear unlock' }, + { key: 'Community Grants & Treasury', total: 564_000_000, vestMonths: 48, term: '48-month linear unlock' }, +] + +// Vesting terms table — same order as the allocation table (largest → smallest +// share). Cliffs are all zero in the source schedule. +const VESTING_TERMS = [ + { key: 'Community Grants & Treasury', cliff: 'None', schedule: '48 months' }, + { key: 'Gnosis Guild', cliff: 'None', schedule: '48 months' }, + { key: 'Investors', cliff: 'None', schedule: '24 months' }, + { key: 'Uniswap CCA', cliff: 'None', schedule: '100% at TGE' }, + { key: 'Airdrop', cliff: 'None', schedule: '24 months' }, + { key: 'Liquidity Reserves', cliff: 'None', schedule: '100% at TGE' }, + { key: 'Advisors', cliff: 'None', schedule: '24 months' }, +] + +const MONTHS_AXIS = 48 +const X_TICKS = [0, 12, 24, 36, 48] +const X_LABELS = ['TGE', '12 mo', '24 mo', '36 mo', '48 mo'] +const Y_MAX = 1_200_000_000 +const Y_TICKS = [0, 300_000_000, 600_000_000, 900_000_000, 1_200_000_000] +const Y_LABELS = ['0', '300M', '600M', '900M', '1.2B'] + +// Cumulative tokens unlocked for a category at month t (first tranche at TGE). +function cumulative(v: Vest, t: number): number { + return (v.total * Math.min(t + 1, v.vestMonths)) / v.vestMonths +} + +export function VestingSchedule() { + const W = 860 + const H = 380 + const padL = 56 + const padR = 24 + const padT = 24 + const padB = 48 + const plotW = W - padL - padR + const plotH = H - padT - padB + + const x = (t: number) => padL + (t / MONTHS_AXIS) * plotW + const y = (v: number) => padT + plotH - (v / Y_MAX) * plotH + + // Build cumulative stacked boundaries for each band. + const months = Array.from({ length: MONTHS_AXIS + 1 }, (_, t) => t) + let running = months.map(() => 0) + const bands = VESTING.map(v => { + const lower = running.slice() + const upper = months.map((t, i) => lower[i] + cumulative(v, t)) + running = upper + // polygon: upper boundary L→R, then lower boundary R→L + const top = months.map((t, i) => `${x(t).toFixed(1)},${y(upper[i]).toFixed(1)}`) + const bot = months.map((t, i) => `${x(t).toFixed(1)},${y(lower[i]).toFixed(1)}`).reverse() + return { key: v.key, color: COLOR_BY_KEY[v.key], d: `M ${top.join(' L ')} L ${bot.join(' L ')} Z` } + }) + + const [hover, setHover] = useState(null) + const [tip, setTip] = useState(false) + const [pos, setPos] = useState({ x: 0, y: 0 }) + const wrapRef = useRef(null) + + const onMove = (e: React.MouseEvent) => { + const r = wrapRef.current?.getBoundingClientRect() + if (r) setPos({ x: e.clientX - r.left, y: e.clientY - r.top }) + } + + return ( +
+
+ + {/* horizontal gridlines + y labels */} + {Y_TICKS.map((t, i) => ( + + + + {Y_LABELS[i]} + + + ))} + + {/* stacked area bands */} + {bands.map(b => { + const isHover = hover === b.key + return ( + { + setHover(b.key) + setTip(true) + }} + onMouseLeave={() => { + setHover(null) + setTip(false) + }} + /> + ) + })} + + {/* x ticks + labels */} + {X_TICKS.map((m, i) => ( + + + + {X_LABELS[i]} + + + ))} + + +
+ +
+ + + + + + + + + {VESTING_TERMS.map(v => ( + { + setHover(v.key) + setTip(false) + }} + onMouseLeave={() => setHover(null)} + style={{ background: hover === v.key ? 'rgba(15,23,42,0.05)' : undefined }} + > + + + + ))} + +
CategoryLinear Unlock
+ + {v.key} + {v.schedule}
+
+ + {tip && hover && ( +
+ {hover} +
+ )} +
+ ) +} diff --git a/docs/pages/_app.tsx b/docs/pages/_app.tsx index 6873a1c71e..22f89ad10a 100644 --- a/docs/pages/_app.tsx +++ b/docs/pages/_app.tsx @@ -4,12 +4,39 @@ // without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. -import React from 'react' +import React, { useEffect } from 'react' import type { AppProps } from 'next/app' import 'katex/dist/katex.min.css' import '../styles/globals.css' +// When a sidebar folder is expanded, scroll its submenu into view so the +// newly revealed sub-pages are visible (Nextra doesn't do this by default, +// which hides children of folders sitting at the bottom of the sidebar). +function useSidebarAutoScroll() { + useEffect(() => { + const onClick = (e: MouseEvent) => { + const target = e.target as HTMLElement | null + const btn = target?.closest('.nextra-sidebar-container button') + if (!btn) return + const li = btn.closest('li') + if (!li) return + // Wait for the expand/collapse animation to settle, then, if the folder + // is now open, bring its last child into view. + window.setTimeout(() => { + const submenu = li.querySelector('ul') + if (submenu && submenu.getBoundingClientRect().height > 0) { + const last = (submenu.lastElementChild as HTMLElement | null) ?? submenu + last.scrollIntoView({ behavior: 'smooth', block: 'nearest' }) + } + }, 220) + } + document.addEventListener('click', onClick) + return () => document.removeEventListener('click', onClick) + }, []) +} + function App({ Component, pageProps }: AppProps) { + useSidebarAutoScroll() return ( <> diff --git a/docs/pages/_meta.json b/docs/pages/_meta.json index 90839cffea..856164356f 100644 --- a/docs/pages/_meta.json +++ b/docs/pages/_meta.json @@ -3,6 +3,9 @@ "type": "separator", "title": "Overview" }, + "index": { + "title": "Interfold" + }, "introduction": { "title": "Introduction" }, @@ -109,6 +112,16 @@ "internals": { "title": "Technical Deep Dives" }, + "-- FOLD Token": { + "type": "separator", + "title": "FOLD Token" + }, + "tokenomics": { + "title": "Tokenomics" + }, + "faq": { + "title": "Frequently Asked Questions" + }, "-- Reference": { "type": "separator", "title": "Reference" diff --git a/docs/pages/faq/_meta.json b/docs/pages/faq/_meta.json new file mode 100644 index 0000000000..b44b88bd64 --- /dev/null +++ b/docs/pages/faq/_meta.json @@ -0,0 +1,8 @@ +{ + "fold-token": { + "title": "FOLD Token" + }, + "auction": { + "title": "The Interfold Auction" + } +} diff --git a/docs/pages/faq/auction.mdx b/docs/pages/faq/auction.mdx new file mode 100644 index 0000000000..72011a8337 --- /dev/null +++ b/docs/pages/faq/auction.mdx @@ -0,0 +1,73 @@ +--- +title: 'The Interfold Auction' +description: + 'Frequently asked questions about the FOLD token auction — the Uniswap Continuous Clearing Auction, eligibility, holding period, and KYC' +--- + +import { Callout } from 'nextra/components' + +# The Interfold Auction + +The initial public distribution of FOLD will take place through a Uniswap Continuous Clearing Auction +(CCA). The auction is designed to distribute tokens progressively and establish a clearing price +through participant demand. + +## What is a Uniswap Continuous Clearing Auction? + +A Continuous Clearing Auction (CCA) is a price-discovery mechanism for token sales built on Uniswap +infrastructure. + +- The auction runs across multiple discrete periods. +- Participants submit either a market order or a capped order that sets the maximum price they are + willing to pay. +- At the end of each period, all successful participants pay the same clearing price. +- The minimum price for each subsequent period is the greater of the original floor or the previous + period's clearing price, so the price may rise but does not fall. +- Any tokens not distributed earlier remain available in the final period. + +By distributing tokens progressively and applying a uniform price within each period, the CCA is +designed to reduce gas competition, prevent sniping, and allow clearing prices to develop through +participant demand. The result is a fair auction for all participants. + +[Read more about Uniswap CCAs](https://cca.uniswap.org). + +## Where can I participate in the FOLD token auction? + +The FOLD token auction will be accessible through the Uniswap web app. The official auction page, +participation instructions, and relevant contract details will be published through Interfold's +verified channels before the auction opens. + + +The auction is **not yet live**. Treat any currently active link claiming to offer access to the +FOLD auction or FOLD tokens as **fraudulent**. + + +Official updates will only be published through: + +- [Interfold website](https://theinterfold.com/) +- [Interfold X account](https://x.com/theinterfold) + +## Who can participate in the FOLD token auction? + +The auction is available to eligible non-US, non-UK participants who are not subject to applicable +sanctions or other legal restrictions. Additional restrictions may apply based on jurisdiction, +residence, citizenship, entity status, sanctions screening, or other legal requirements. A list of +sanctioned parties is available at +[ofac.treasury.gov](https://ofac.treasury.gov/sanctions-programs-and-country-information). + +## Is there any holding period associated with FOLD purchased during the FOLD token auction? + +Yes. Tokens purchased in the FOLD token auction are subject to a holding period of 45 days. During +this period, FOLD cannot be used for any other activity other than ciphernode bonding. + +After this period concludes, all restrictions are lifted. + +## Do I need to complete KYC to participate? + +Yes. All participants must complete KYC through our third-party provider, Predicate, to verify non-US +status and confirm they are not subject to sanctions. + +## How long will the FOLD token auction last? + +The FOLD token auction will open with a 48-hour pre-sale window for participants to register and +complete verification, followed by a 48-hour bidding window. diff --git a/docs/pages/faq/fold-token.mdx b/docs/pages/faq/fold-token.mdx new file mode 100644 index 0000000000..39c03c4587 --- /dev/null +++ b/docs/pages/faq/fold-token.mdx @@ -0,0 +1,47 @@ +--- +title: 'FOLD Token' +description: + 'Frequently asked questions about the FOLD token — its purpose, utility, and role in The Interfold protocol' +--- + +# FOLD Token + + +## What role does FOLD play in the Interfold network? + +The Interfold is a distributed network for confidential coordination. Applications request Encrypted +Execution Environments (E3s), while ciphernodes coordinate and secure each computation. + +FOLD supports the economic operation of the network. + +## What is the utility of the FOLD token? + +FOLD has three main, interlocking functions: + +- **Ciphernode bonding** — Ciphernode operators bond FOLD to become eligible for network duties. + Bonded FOLD remains locked while the operator is registered and may be subject to protocol-defined + withdrawal periods and penalties for provable misbehavior or failure to fulfill assigned + responsibilities. These mechanisms align operational responsibility with economic accountability. +- **Protocol incentives** — Alongside a share of protocol fees, ciphernode operators may receive + FOLD incentives for successfully completing protocol-defined duties as members of an E3 committee. +- **Governance** — FOLD holders will be able to participate in governance decisions via the Interfold + DAO. Governance may include decisions related to network parameters, protocol upgrades, and + treasury administration. The governance system is expected to use a secret-ballot application + powered by the Interfold network. + +## How can I use FOLD to operate a ciphernode? + +Operating a ciphernode is permissionless and open to anyone. The setup involves provisioning +cloud-based or personal hardware, running the ciphernode software, bonding the ciphernode, and +completing on-chain registration. This will allow operators to begin participating in E3 committees. +For full instructions, please refer to the [Ciphernode Operators](/ciphernode-operators) +documentation. + +## Can I delegate my FOLD to a ciphernode operator? + +No. The Interfold's bonding model is deliberately operator-only. Every FOLD bonded to a ciphernode +represents capital at risk to the operator running it. Delegated capital would allow operators to run +partially-owned ciphernodes, diluting accountability and weakening the network's economic security +guarantees. We encourage all FOLD token holders to participate in ciphernode operations. + +If you need support, join the designated [Telegram group](https://t.me/enclave_e3). diff --git a/docs/pages/introduction.mdx b/docs/pages/introduction.mdx index 085e367f10..c3cddd3037 100644 --- a/docs/pages/introduction.mdx +++ b/docs/pages/introduction.mdx @@ -2,11 +2,7 @@ > **Note on naming** > -> The Interfold was previously known as **Enclave**. -> Some repositories, package names, and CLI commands may still use `interfold` while the transition -> is in progress. -> -> These references will be updated over time and do not affect functionality. +> The Interfold was previously known as **Enclave**. **Here you'll find guides, references, and implementation resources for building on the Interfold protocol.** diff --git a/docs/pages/tokenomics.mdx b/docs/pages/tokenomics.mdx new file mode 100644 index 0000000000..37aa5e65cb --- /dev/null +++ b/docs/pages/tokenomics.mdx @@ -0,0 +1,53 @@ +--- +title: 'Interfold Tokenomics' +description: + 'An overview of the Interfold token: total supply, allocation across categories, and the vesting schedule' +--- + +import { KeyParameters, AllocationPie, VestingSchedule } from '../components/Tokenomics' + +# FOLD Tokenomics + + + +## Token Distribution + +The total supply of FOLD is 1.2 billion. + +The chart below illustrates how total supply is allocated: + + + +### Community Grants & Treasury + +The Interfold has been built in the open and is freely available as open-source software under the LGPLv3 license. To support the long-term sustainability of the network, The Interfold Foundation will allocate a significant portion of supply to community grants, ecosystem development, and future open-source contributors. Grants may be awarded proactively to support priority work or retroactively to recognize meaningful contributions. + +### Gnosis Guild + +The Interfold has been developed by Gnosis Guild. To ensure its success, Gnosis Guild will act as a core contributor for the protocol's ongoing maintenance, research and development, business development, and marketing. This allocation ensures the team can continue to adequately cover the expenses associated with these activities, primarily payroll. + +### Investors + +The Interfold (previously developed under the name Enclave) has completed two previous funding rounds: pre-seed and seed. Investors in these rounds share a common vision of sustainable, distributed privacy infrastructure systems. As such, these investors are subject to a 24-month linear unlock period, designed to support long-term alignment and not short-term liquidity exits. + +### Uniswap CCA + +The Uniswap CCA is designed to provide open access through uniform clearing mechanics. The starting fully diluted valuation will be set below that of previous funding rounds, allowing participants to access the launch through a transparent market-based process. + +### Airdrop + +This allocation is reserved for eligible community participants and ecosystem contributors. Distribution criteria, eligibility requirements, and timing will be announced separately. + +### Liquidity Reserves + +Reserved to support market liquidity, primarily through decentralised exchange liquidity pools, and to help maintain orderly trading conditions following launch. + +### Advisors + +Allocated to strategic, technical, and operational advisors, subject to vesting and lockup terms. + +## Unlock Schedule + +Token unlock schedules commence at TGE unless otherwise specified. + + diff --git a/docs/styles/globals.css b/docs/styles/globals.css index 15c266c6f2..20de6f2a67 100644 --- a/docs/styles/globals.css +++ b/docs/styles/globals.css @@ -11,6 +11,28 @@ body { background-color: #fffaf0; } +.nextra-content p, +.nextra-content li { + text-align: justify; +} + +.subheading-anchor { + display: none; +} + img { border-radius: 10px; } + +/* On mobile, Nextra merges the active page's in-page heading anchors (#...) into + the sidebar drawer (there is no right-hand "On this page" rail on small + screens). That clutters the menu, so hide those heading anchors on mobile — + page and section navigation still works. */ +@media (max-width: 767px) { + .nextra-sidebar-container a[href^='#'] { + display: none; + } + .nextra-sidebar-container ul:has(> li > a[href^='#']) { + display: none; + } +} diff --git a/docs/theme.config.jsx b/docs/theme.config.jsx index 245940186f..d63322731f 100644 --- a/docs/theme.config.jsx +++ b/docs/theme.config.jsx @@ -17,10 +17,10 @@ export default { logoLink: false, banner: { - key: 'interfold-rename', + key: 'enclave-rename', text: ( - Enclave is now The Interfold. Documentation is being updated. + Enclave is now The Interfold. ), },