From 8725b6427f7dbe6c752534408b7d166ac8c616ee Mon Sep 17 00:00:00 2001 From: Bryant Soorkia <0xbryants@gmail.com> Date: Mon, 15 Jun 2026 22:26:44 +0800 Subject: [PATCH 1/2] Add FOLD tokenomics page and Frequently Asked Questions section - Tokenomics page (/tokenomics): allocation donut + legend, cumulative vesting stacked-area chart, vesting terms table, key-parameter cards, with interactive hover. Token amounts rounded to whole-percent shares. - Frequently Asked Questions section (/faq): "FOLD Token" and "The Interfold Public Sale" pages, grouped under a new "FOLD Token" sidebar section alongside Tokenomics. - Banner updated to "Enclave is now The Interfold". - Introduction naming note updated to reference Enclave. - Mobile responsiveness for the tokenomics components; hide in-page heading anchors from the mobile sidebar drawer. - Auto-scroll the sidebar when a folder is expanded. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../Tokenomics/Tokenomics.module.css | 254 ++++++++++++ docs/components/Tokenomics/index.tsx | 383 ++++++++++++++++++ docs/pages/_app.tsx | 29 +- docs/pages/_meta.json | 10 + docs/pages/faq/_meta.json | 8 + docs/pages/faq/fold-token.mdx | 45 ++ docs/pages/faq/public-sale.mdx | 75 ++++ docs/pages/introduction.mdx | 4 +- docs/pages/tokenomics.mdx | 32 ++ docs/styles/globals.css | 13 + docs/theme.config.jsx | 4 +- 11 files changed, 852 insertions(+), 5 deletions(-) create mode 100644 docs/components/Tokenomics/Tokenomics.module.css create mode 100644 docs/components/Tokenomics/index.tsx create mode 100644 docs/pages/faq/_meta.json create mode 100644 docs/pages/faq/fold-token.mdx create mode 100644 docs/pages/faq/public-sale.mdx create mode 100644 docs/pages/tokenomics.mdx 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..7f2b24472e --- /dev/null +++ b/docs/components/Tokenomics/index.tsx @@ -0,0 +1,383 @@ +// 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: 43, tokens: 516_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: 'Early Contributors', pct: 4, tokens: 48_000_000, color: '#2DD4BF' }, + { 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: '15%' }, + { label: 'Fully Vested', value: '48 mo' }, + ] + 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). Early Contributors is omitted — the source sheet defines no schedule. +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: 516_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. Early Contributors omitted. +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' }, + { key: 'Early Contributors', cliff: 'None', schedule: '100% at TGE' }, +] + +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 42af36b50c..05983c2f66 100644 --- a/docs/pages/_meta.json +++ b/docs/pages/_meta.json @@ -119,5 +119,15 @@ }, "whitepaper": { "title": "Whitepaper" + }, + "-- FOLD Token": { + "type": "separator", + "title": "FOLD Token" + }, + "tokenomics": { + "title": "Tokenomics" + }, + "faq": { + "title": "Frequently Asked Questions" } } diff --git a/docs/pages/faq/_meta.json b/docs/pages/faq/_meta.json new file mode 100644 index 0000000000..3131dfce2a --- /dev/null +++ b/docs/pages/faq/_meta.json @@ -0,0 +1,8 @@ +{ + "fold-token": { + "title": "FOLD Token" + }, + "public-sale": { + "title": "The Interfold Public Sale" + } +} diff --git a/docs/pages/faq/fold-token.mdx b/docs/pages/faq/fold-token.mdx new file mode 100644 index 0000000000..1c547b4380 --- /dev/null +++ b/docs/pages/faq/fold-token.mdx @@ -0,0 +1,45 @@ +--- +title: 'FOLD Token' +description: + 'Frequently asked questions about the FOLD token — its purpose, utility, and role in The Interfold protocol' +--- + +# FOLD Token + +## Why does The Interfold need a token? + +The Interfold protocol produces Encrypted Execution Environments (E3s) for applications that require +distributed, private computation. As a network with no centralised authority, an economic mechanism +is required to programmatically enable the transfer of E3s from supply parties to demand parties. +This is made possible through the FOLD utility token. + +## What is the utility of the FOLD token? + +FOLD has four main, interlocking functions: + +- **License bond** — Ciphernode operators stake FOLD to meet the eligibility requirements to run a + ciphernode. This bond is locked for the duration of its operations and is subject to a debonding + period upon deregistration. It is slashable for misbehaviour, providing economic uptime guarantees + to the network. +- **Payments** — Applications must first acquire FOLD in order to pay for E3 requests. +- **Operator rewards** — Operators earn FOLD for each E3 program they successfully participate in + creating. This FOLD is distributed proportionally across each ciphernode set (also referred to as a + committee) that was assigned to produce it. +- **Governance** — FOLD holders will be able to participate in governance decisions via the Interfold + DAO. Governance is performed through a secret-ballot voting application that utilises The + Interfold's E3s, further compounding the utility of FOLD. + +## How can I use my FOLD tokens to operate a ciphernode? + +Operating a ciphernode is permissionless and open to anyone holding sufficient FOLD. The setup +involves provisioning cloud-based or personal hardware, running the ciphernode software, and +completing on-chain registration to begin participating in E3 committees. For full instructions, +please refer to the [Ciphernode Operators](/ciphernode-operators) documentation. + +## I don't want to run a Ciphernode. Can I delegate my FOLD? + +No. The Interfold's staking 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 +help, please reach out to the team on Discord. diff --git a/docs/pages/faq/public-sale.mdx b/docs/pages/faq/public-sale.mdx new file mode 100644 index 0000000000..786c6afad6 --- /dev/null +++ b/docs/pages/faq/public-sale.mdx @@ -0,0 +1,75 @@ +--- +title: 'The Interfold Public Sale FAQs' +description: + 'Frequently asked questions about The Interfold public token sale — the Uniswap Continuous Clearing Auction, eligibility, holding periods, and KYC' +--- + +import { Callout } from 'nextra/components' + +# The Interfold Public Sale + +In order to ensure fair participation, The Interfold public sale will be held as a Uniswap Continuous +Clearing Auction. + +## What is a Uniswap Continuous Clearing Auction? + +A Continuous Clearing Auction (CCA) is a price-discovery mechanism for public token sales built on +Uniswap infrastructure. The sale runs across multiple discrete periods. In each period, bidders +submit either market orders (accepting any clearing price above the floor) or capped orders +(specifying a maximum FDV). At the end of each period, a single uniform clearing price is set, and +every successful bidder in that period pays the same price. The floor for each subsequent period is +the greater of the original floor or the previous period's clearing price, so the price can move up +but never down. Unsold tokens roll into the final period. CCAs eliminate gas wars, prevent sniping, +and allow clearing prices to emerge from collective demand. The result is a fair auction for all +participants. + +## Where can I participate in the Interfold Public Token Sale? + +You will be able to participate in the Interfold public token sale directly from within Uniswap's +Continuous Clearing Auction section of the Uniswap website. + + +The Interfold public sale is **not yet available**. Any currently active link to a public sale is a +**scam** — do **not** click it. The official Interfold X account is +[@theinterfold](https://x.com/theinterfold); please follow it for official updates. + + +## Who can participate in the Interfold Public Token Sale? + +The Interfold public token sale is open to non-US, non-UK individuals from non-sanctioned countries +and non-sanctioned programs only. + +## Is there any holding period associated with FOLD purchased during the Interfold public sale? + +Yes. Tokens purchased in the Interfold public sale are subject to a holding period. + +A 'holding period' is the period during which tokens purchased in the Interfold public sale cannot be +used to trade on the open market. + +Non-US, non-UK participants from non-sanctioned countries and non-sanctioned programs are subject to +a holding period of 45 days. + +Non-sanctioned countries and non-sanctioned programs are determined by reference to the OFAC +sanctions programs and country information, available at +[ofac.treasury.gov](https://ofac.treasury.gov/sanctions-programs-and-country-information). + +## Do I need to complete KYC to participate? + +KYC requirements depend on the participant category you fall into: + +- Non-US, non-UK participants from non-sanctioned countries and non-sanctioned programs are not + required to complete KYC. +- If you do not fall within this category, you may be required to complete KYC. + +## How long will the Interfold public token sale last? + +The Interfold public token sale will run for a maximum of 5 days, or until all available tokens are +sold out, whichever occurs first. Participants can freely place bids at any point during this window. + +## Why should I participate in the Interfold public token sale when I can just wait to buy it on the open market? + +The Interfold public sale is expected to launch at a significantly lower fully diluted valuation than +the one at which FOLD is expected to begin trading. The Uniswap Continuous Clearing Auction mechanism +allows the clearing price to increase incrementally as demand develops, but never to decrease. Early +participants can therefore secure tokens at a lower fair-market price than would be expected on the +open market. diff --git a/docs/pages/introduction.mdx b/docs/pages/introduction.mdx index 0f73b26015..ef7d1c4e02 100644 --- a/docs/pages/introduction.mdx +++ b/docs/pages/introduction.mdx @@ -2,8 +2,8 @@ > **Note on naming** > -> The Interfold was previously known as **Interfold**. -> Some repositories, package names, and CLI commands may still use `interfold` while the transition +> The Interfold was previously known as **Enclave**. +> Some repositories, package names, and CLI commands may still use `enclave` while the transition > is in progress. > > These references will be updated over time and do not affect functionality. diff --git a/docs/pages/tokenomics.mdx b/docs/pages/tokenomics.mdx new file mode 100644 index 0000000000..2994c34477 --- /dev/null +++ b/docs/pages/tokenomics.mdx @@ -0,0 +1,32 @@ +--- +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 + +The FOLD token is designed to sustain long-term security and growth of the protocol. This page +summarises the token's total supply, how it is allocated, and the schedule by which tokens are +released into circulation. + + + +## Token Distribution + +The total supply of FOLD is 1.2 billion. + +The chart below illustrates how total supply is allocated across each category. + + + +## Vesting Schedule + +Vesting commences at TGE. + +TGE can be defined as the earliest point at which tokens become transferable. All vested tokens vest +linearly, as illustrated in the chart below. + + diff --git a/docs/styles/globals.css b/docs/styles/globals.css index 15c266c6f2..ab02fa349c 100644 --- a/docs/styles/globals.css +++ b/docs/styles/globals.css @@ -14,3 +14,16 @@ body { 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 040d457a3e..3b26af5490 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: ( - Interfold is now The Interfold. Documentation is being updated. + Enclave is now The Interfold. Documentation is being updated. ), }, From 69623e0c3c3d6a70843340bbf396488f661b8f80 Mon Sep 17 00:00:00 2001 From: Bryant Soorkia <0xbryants@gmail.com> Date: Wed, 17 Jun 2026 16:38:28 +0700 Subject: [PATCH 2/2] docs: revise tokenomics and auction/FAQ content per source doc --- docs/components/Tokenomics/index.tsx | 13 ++--- docs/pages/faq/_meta.json | 4 +- docs/pages/faq/auction.mdx | 73 +++++++++++++++++++++++++++ docs/pages/faq/fold-token.mdx | 65 ++++++++++++++---------- docs/pages/faq/public-sale.mdx | 75 ---------------------------- docs/pages/tokenomics.mdx | 15 +++--- 6 files changed, 125 insertions(+), 120 deletions(-) create mode 100644 docs/pages/faq/auction.mdx delete mode 100644 docs/pages/faq/public-sale.mdx diff --git a/docs/components/Tokenomics/index.tsx b/docs/components/Tokenomics/index.tsx index 7f2b24472e..4c5b5346f9 100644 --- a/docs/components/Tokenomics/index.tsx +++ b/docs/components/Tokenomics/index.tsx @@ -23,11 +23,10 @@ type Slice = { // 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: 43, tokens: 516_000_000, color: '#075E9D' }, + { 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: 'Early Contributors', pct: 4, tokens: 48_000_000, color: '#2DD4BF' }, { 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' }, @@ -85,8 +84,7 @@ function donutSlice( export function KeyParameters() { const cards = [ { label: 'Total Supply', value: '1.2B' }, - { label: 'Circulating Supply at TGE', value: '15%' }, - { label: 'Fully Vested', value: '48 mo' }, + { label: 'Circulating Supply at TGE', value: '17%' }, ] return (
@@ -215,7 +213,7 @@ type Vest = { } // Bottom → top stacking order (flat/immediate at the base, long linear vests on -// top). Early Contributors is omitted — the source sheet defines no schedule. +// 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' }, @@ -223,11 +221,11 @@ const VESTING: Vest[] = [ { 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: 516_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. Early Contributors omitted. +// 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' }, @@ -236,7 +234,6 @@ const VESTING_TERMS = [ { key: 'Airdrop', cliff: 'None', schedule: '24 months' }, { key: 'Liquidity Reserves', cliff: 'None', schedule: '100% at TGE' }, { key: 'Advisors', cliff: 'None', schedule: '24 months' }, - { key: 'Early Contributors', cliff: 'None', schedule: '100% at TGE' }, ] const MONTHS_AXIS = 48 diff --git a/docs/pages/faq/_meta.json b/docs/pages/faq/_meta.json index 3131dfce2a..b44b88bd64 100644 --- a/docs/pages/faq/_meta.json +++ b/docs/pages/faq/_meta.json @@ -2,7 +2,7 @@ "fold-token": { "title": "FOLD Token" }, - "public-sale": { - "title": "The Interfold Public Sale" + "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 index 1c547b4380..6055e08cea 100644 --- a/docs/pages/faq/fold-token.mdx +++ b/docs/pages/faq/fold-token.mdx @@ -4,42 +4,55 @@ description: 'Frequently asked questions about the FOLD token — its purpose, utility, and role in The Interfold protocol' --- +import { Callout } from 'nextra/components' + # FOLD Token -## Why does The Interfold need a token? +FOLD supports the economic operation of the Interfold network through ciphernode bonding, protocol +incentives, and protocol governance. This page summarises the token's total supply, initial +allocation, and scheduled release over time. + +## 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. -The Interfold protocol produces Encrypted Execution Environments (E3s) for applications that require -distributed, private computation. As a network with no centralised authority, an economic mechanism -is required to programmatically enable the transfer of E3s from supply parties to demand parties. -This is made possible through the FOLD utility token. +FOLD supports the economic operation of the network through ciphernode bonding, protocol incentives, +and protocol governance. + + +Some functions of FOLD will be introduced progressively as the network develops. The availability +and implementation of each function will be documented alongside the relevant network phase. + ## What is the utility of the FOLD token? -FOLD has four main, interlocking functions: +FOLD has three main, interlocking functions: -- **License bond** — Ciphernode operators stake FOLD to meet the eligibility requirements to run a - ciphernode. This bond is locked for the duration of its operations and is subject to a debonding - period upon deregistration. It is slashable for misbehaviour, providing economic uptime guarantees - to the network. -- **Payments** — Applications must first acquire FOLD in order to pay for E3 requests. -- **Operator rewards** — Operators earn FOLD for each E3 program they successfully participate in - creating. This FOLD is distributed proportionally across each ciphernode set (also referred to as a - committee) that was assigned to produce it. +- **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 is performed through a secret-ballot voting application that utilises The - Interfold's E3s, further compounding the utility of FOLD. + 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 my FOLD tokens to operate a ciphernode? +## How can I use FOLD to operate a ciphernode? -Operating a ciphernode is permissionless and open to anyone holding sufficient FOLD. The setup -involves provisioning cloud-based or personal hardware, running the ciphernode software, and -completing on-chain registration to begin participating in E3 committees. For full instructions, -please refer to the [Ciphernode Operators](/ciphernode-operators) documentation. +Operating a ciphernode is permissionless and open to anyone able to put up the required FOLD and +stablecoin bond. The setup involves provisioning cloud-based or personal hardware, running the +ciphernode software, and completing on-chain registration to begin participating in E3 committees. +For full instructions, please refer to the [Ciphernode Operators](/ciphernode-operators) +documentation. -## I don't want to run a Ciphernode. Can I delegate my FOLD? +## Can I delegate my FOLD to a ciphernode operator? -No. The Interfold's staking model is deliberately operator-only. Every FOLD bonded to a ciphernode +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 -help, please reach out to the team on Discord. +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/faq/public-sale.mdx b/docs/pages/faq/public-sale.mdx deleted file mode 100644 index 786c6afad6..0000000000 --- a/docs/pages/faq/public-sale.mdx +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: 'The Interfold Public Sale FAQs' -description: - 'Frequently asked questions about The Interfold public token sale — the Uniswap Continuous Clearing Auction, eligibility, holding periods, and KYC' ---- - -import { Callout } from 'nextra/components' - -# The Interfold Public Sale - -In order to ensure fair participation, The Interfold public sale will be held as a Uniswap Continuous -Clearing Auction. - -## What is a Uniswap Continuous Clearing Auction? - -A Continuous Clearing Auction (CCA) is a price-discovery mechanism for public token sales built on -Uniswap infrastructure. The sale runs across multiple discrete periods. In each period, bidders -submit either market orders (accepting any clearing price above the floor) or capped orders -(specifying a maximum FDV). At the end of each period, a single uniform clearing price is set, and -every successful bidder in that period pays the same price. The floor for each subsequent period is -the greater of the original floor or the previous period's clearing price, so the price can move up -but never down. Unsold tokens roll into the final period. CCAs eliminate gas wars, prevent sniping, -and allow clearing prices to emerge from collective demand. The result is a fair auction for all -participants. - -## Where can I participate in the Interfold Public Token Sale? - -You will be able to participate in the Interfold public token sale directly from within Uniswap's -Continuous Clearing Auction section of the Uniswap website. - - -The Interfold public sale is **not yet available**. Any currently active link to a public sale is a -**scam** — do **not** click it. The official Interfold X account is -[@theinterfold](https://x.com/theinterfold); please follow it for official updates. - - -## Who can participate in the Interfold Public Token Sale? - -The Interfold public token sale is open to non-US, non-UK individuals from non-sanctioned countries -and non-sanctioned programs only. - -## Is there any holding period associated with FOLD purchased during the Interfold public sale? - -Yes. Tokens purchased in the Interfold public sale are subject to a holding period. - -A 'holding period' is the period during which tokens purchased in the Interfold public sale cannot be -used to trade on the open market. - -Non-US, non-UK participants from non-sanctioned countries and non-sanctioned programs are subject to -a holding period of 45 days. - -Non-sanctioned countries and non-sanctioned programs are determined by reference to the OFAC -sanctions programs and country information, available at -[ofac.treasury.gov](https://ofac.treasury.gov/sanctions-programs-and-country-information). - -## Do I need to complete KYC to participate? - -KYC requirements depend on the participant category you fall into: - -- Non-US, non-UK participants from non-sanctioned countries and non-sanctioned programs are not - required to complete KYC. -- If you do not fall within this category, you may be required to complete KYC. - -## How long will the Interfold public token sale last? - -The Interfold public token sale will run for a maximum of 5 days, or until all available tokens are -sold out, whichever occurs first. Participants can freely place bids at any point during this window. - -## Why should I participate in the Interfold public token sale when I can just wait to buy it on the open market? - -The Interfold public sale is expected to launch at a significantly lower fully diluted valuation than -the one at which FOLD is expected to begin trading. The Uniswap Continuous Clearing Auction mechanism -allows the clearing price to increase incrementally as demand develops, but never to decrease. Early -participants can therefore secure tokens at a lower fair-market price than would be expected on the -open market. diff --git a/docs/pages/tokenomics.mdx b/docs/pages/tokenomics.mdx index 2994c34477..8d1b41b22f 100644 --- a/docs/pages/tokenomics.mdx +++ b/docs/pages/tokenomics.mdx @@ -8,9 +8,9 @@ import { KeyParameters, AllocationPie, VestingSchedule } from '../components/Tok # FOLD Tokenomics -The FOLD token is designed to sustain long-term security and growth of the protocol. This page -summarises the token's total supply, how it is allocated, and the schedule by which tokens are -released into circulation. +FOLD supports the economic operation of the Interfold network through ciphernode bonding, protocol +incentives, and protocol governance. This page summarises the token's total supply, initial +allocation, and scheduled unlocks over time. @@ -18,15 +18,12 @@ released into circulation. The total supply of FOLD is 1.2 billion. -The chart below illustrates how total supply is allocated across each category. +The chart below illustrates how total supply is allocated: -## Vesting Schedule +## Unlock Schedule -Vesting commences at TGE. - -TGE can be defined as the earliest point at which tokens become transferable. All vested tokens vest -linearly, as illustrated in the chart below. +Token unlock schedules commence at TGE unless otherwise specified.