lectern
$KEYNOTE·curation token · base · live on base mainnet

boost the casts that deserve the floor.

$KEYNOTE is the curation token for Lectern Pro. Pros spend a weekly allocation to amplify casts in Lectern's Pro-exclusive feed. Engagement on boosted casts pays the caster (70%) and engagers (30%) via on-chain Merkle settlement. Cast metadata is never touched — escrow events on Base are the source of truth.

Liquid Protocol on Base|10 ETH starting MC|90B vault · 36mo vest|100B total supply

six steps. zero metadata pollution.

Pro members spend KEYNOTE to boost casts. Engagement on those casts gets recorded by Hub. A weekly settler computes a Merkle distribution. Caster and engagers withdraw. The cast itself is never modified — foreign Farcaster clients see nothing.

100 billion · 90% vaulted · 36 months.

Maximum scarcity at launch — only 10B circulating. The 90B vault drips ~83M per day, 100% to the Pro allocation pool (distributed weekly via Sablier MerkleInstant campaigns). Predictable curation runway for 36 months. Per-Pro allocation scales with Pro count: at 100 Pros, ~6M KEYNOTE per Pro per week; at 1000 Pros, ~580K per Pro per week.

total supply
100B
factory hardcoded
vaulted
90B
max allowed
initial circulating
10B
post-LP
cliff
7d
Liquid platform min
vest
36mo
linear after T+7
daily unlock
~83M
to Pro allocation pool
weekly unlock
~580M
curation budget pool
initial MC
10 ETH
~$25k at launch

the macOS app and CLI this token plugs into.

Lectern is a sovereign Farcaster client for macOS — custody, recovery, and signers stay on your machine. KEYNOTE doesn't make sense in isolation; the token enables Pro features inside Lectern. This section shows what's built today (operator beta) and what v0.2.0 — the KEYNOTE-launching release — adds when it ships publicly ~60 days after token launch.

Lectern $KEYNOTE console showing wallet balance, pool allocation, lifetime boosts, pro claims, recent boost history, and pool stats

$KEYNOTE Console · wallet balance · pool allocation · pro claims · boost history

lectern macOS — pre-shipping

ships at v0.2.0 launch (T+60d)

Both v0.1.x (Lectern foundation) and v0.2.0 (the KEYNOTE-integrated release) ship publicly for the first time ~60 days after token launch. The gap window is the audience-acquisition period — see §9 launch sequencing. The screenshots below are from the operator beta running today.

built today (operator beta)

macOS app + cli · 20+ subcommands
  • ·Sovereign Farcaster client — custody, recovery, signers stay on the device
  • ·Feed, threads, long casts, profile management
  • ·Farcaster + XMTP DCs, mini app SDK host, snap protocol
  • ·Snap Maker — templates for profile cards, polls, AMAs, tip jars
  • ·Declarative config (plan / apply / import / export)
  • ·Two-factor auth (TouchID + TOTP), encrypted backup + restore
Lectern macOS feed view — three-column layout with sidebar, feed, and account inspector

Feed + Account Inspector — three-column layout, native macOS chrome

v0.1.x foundation · operator beta

Lectern Snap Maker modal — template gallery with profile card editor and live preview

Snap Maker — Pro feature; template gallery + live preview

v0.1.x foundation · operator beta

Lectern Settings panel — Profile editor with sidebar for DCs, Muted, Notifications, Snap Maker, Subscription, Developer

Settings depth — Profile / DCs / Notifications / Snap Maker / Subscription / Developer

v0.1.x foundation · operator beta

v0.2.0 KEYNOTE additions — in active development

ships T+60d at v0.2.0 public launch
  • ·Curated feed — Pro-exclusive, ranked by boosted KEYNOTE per cast
  • ·Boost UI — per-cast amplification with KEYNOTE
  • ·Staking panel — tier 25M/50M/100M for 15/25/40% Pro discount
  • ·Weekly Pro allocation claim — Sablier MerkleInstant proof flow
  • ·3-path Pro payment — USDC (default) / stake-to-discount / KEYNOTE-paid (5% off)
  • ·Staker yield claim — pro-rata by stake × time, weekly Sablier MerkleInstant

usdc primary. staking is the keynote utility.

Lectern Pro is USDC-priced by default. The KEYNOTE utility for Pros is staking: lock 25M / 50M / 100M for 15 / 25 / 40% off, no lockup, unstake anytime.

default

USDC sub

6.9 USDC/mo · 79 USDC/yr · no token activity required

revenue impactZero leakage
token impactZero token activity
primary KEYNOTE utilityup to 40%off

Stake to discount

No lockup · small LP-fee-derived yield · unstake anytime

revenue impactDiscount-only (15 – 40%)
token impactKEYNOTE locked in StakingVault
stake 25M KEYNOTE
15%
stake 50M KEYNOTE
25%
stake 100M KEYNOTE
40%

a third path — paying Pro directly in KEYNOTE for a 5% discount — exists in the contracts for users who'd rather liquidate KEYNOTE against their sub than hold it. it is materially worse than staking for nearly everyone and is intentionally not promoted. mechanics live in /keynote.md for completeness.

day-1 pro bonus — first 4 weeks of v0.2.0

~2B KEYNOTE pool

The KEYNOTE accumulating during the 60-day pre-v0.2.0 gap (~6B) splits 70/30 at v0.2.0 ship — 70% to founder on a 12-month OZ VestingWallet cliff, 30% (~2B) to first-4-week Pros across 4 weekly Sablier MerkleInstant campaigns. Each week, that week's new Pros share that week's slice equally — subscribe day-1 of v0.2.0 (when Pro purchase opens) = biggest slice + paid soonest.

week 140%

~720MKEYNOTE shared by that week's new Pros

week 230%

~540MKEYNOTE shared by that week's new Pros

week 320%

~360MKEYNOTE shared by that week's new Pros

week 410%

~180MKEYNOTE shared by that week's new Pros

per-epoch Sablier MerkleInstant · 12-week claim window per campaign · pool size is estimated, actual depends on accumulated vault drip + LP-fee buyback over the 60-day gap

every flow has its own wallet. empty is empty.

Single-purpose wallets, no co-mingled accounting. LP fees split 80% USDC (Treasury distributions) / 20% KEYNOTE buyback. USDC fans into 4 wallets (40/30/15/15) via a 0xSplits PushSplit. KEYNOTE buyback fans 85% to the Pro allocation pool / 15% to the staker yield pool via a second PushSplit. All balances on-chain, all multisigs 2-of-3.

worked exampleat $10,000 daily pool volume
LP fee collected
$100
1% of $10K swap volume
→ Clanker protocol
$20
0.20% (fixed)
→ USDC route
$64
0.64% of swap
→ KEYNOTE buyback
$16
0.16% of swap
Operations (40%)
$25.60
$/day to ops
Engagement (30%)
$19.20
$/day to campaigns
Reserve (15%)
$9.60
$/day to stables
FounderPay (15%)
$9.60
$/day · gated by cliff
Pro allocation (85%)
$13.60
$/day buyback → Pros
Staker yield (15%)
$2.40
$/day to stakers
weekly to Ops
$179
real cash, real runway
weekly buyback
$112
permanent pool demand

$10K/day is a modest assumption — most Clanker tokens cycle 10–100× that in their first month. Numbers scale linearly: 10× the volume, 10× every box above. The whole architecture is volume-honest; fragile pools mean fragile ops, healthy pools mean self-funding.

USDC wallets · LP fees + Pro subs

OperationsTreasury40%

Hosting, RPC, gas reserves, audit, app store, legal

EngagementBudget30%

Farcaster sponsored casts via @lectern, dogfooding boosts through the app, contests, partner integrations.

Reserve15%

Opportunistic / emergency / unplanned audit findings

FounderPay15%

Operator compensation

60-day cliff, contract-enforced by OZ VestingWallet (start = tokenLaunchTimestamp + 60d, duration = 1s, beneficiary = founder cold). USDC accrues from day 1; release blocked until cliff end. Post-cliff: founder calls release(USDC) to pull accumulated + ongoing balance. Battle-tested OZ contract, no human signer required for cliff.

KEYNOTE wallets · vault + buyback + renewals

LecternBoostEscrowBoost deposits from any KEYNOTE holder

Hold boosted KEYNOTE per cast; admin posts weekly Merkle root for engagement settlement (70% caster / 30% engagers); recipients claim with 12-week claim window

LecternStakingVaultUser stakes

Hold 25M/50M/100M KEYNOTE stakes for Pro USDC discount tiers; expose `tierOf`, `discountBpsOf`, `isProEligible` view ABI consumed by LicenseGate

Pro allocation poolVault unlock (100%) + 85% of LP-fee KEYNOTE buyback

Weekly Pro curation allocation to active Pros

Staker yield pool15% of LP-fee KEYNOTE buyback

Weekly pro-rata yield to stakers by stake × min(stake_days, 730)

LP-fee KEYNOTE buyback routerLiquid `FeePreference.Liquid` slice (20% of creator share, auto-swapped USDC → KEYNOTE)

Split buyback 85/15 between Pro allocation pool and Staker yield pool

KEYNOTE-from-renewals routerKEYNOTE-paid Pro renewals (the 5%-discount fallback path)

Split incoming KEYNOTE per runway-tied burn schedule into BurnAddress / EngagementTokens / FounderTokens

EngagementTokensVariable % from KEYNOTE-paid Pro renewals (runway-tied)

Token-denominated contests, bounties, partnerships

FounderTokensVariable % from KEYNOTE-paid Pro renewals + 70% of gap-accumulation pool

Operator long-term alignment

BurnAddressVariable % from KEYNOTE-paid Pro renewals (runway-tied)

Deflationary supply pressure

merkle root per epoch. like-bots downweighted by design.

Epoch = 7 days (Mon 00:00 UTC). At close + 24h grace, the settler reads Hub engagement on boosted casts, applies signal weights × tenure multipliers, excludes self-boost + multi-account farming via custody overlap, and posts a single Merkle root. Per-FID cap of 5% prevents any single FID from sweeping a cast.

boostBoostEscrow.boost(castHash)
engageHub messages accumulate · 7d window
closeMon 00:00 UTC + 24h grace
settleSettler computes Merkle root
claimRecipients withdraw with proof

engagement signal weights

weighted to make replies dominate; likes deliberately downweighted

Substantive reply×4.0

>40 chars or with embeds — hardest to bot

Quote cast×3.0

Effort + amplification

Recast×1.5

Social cost

Like×0.5

Cheapest to bot, deliberately downweighted

tenure multipliers

High Lectern-attributed cast count×1.5
0 Lectern-attributed casts×0.25
per-FID cap5%
claim rollover12 epochs
grace period24h
epoch startsMonday 00:00

one cast. eight steps. real numbers.

Abstract architecture only matters if you can trace one full cycle and the math comes out clean. This is that trace: from Alice's weekly allocation landing to Bob's claim hitting his wallet, with the per-FID cap kicking in mid-stream. If you can't follow this, you can't believe the design works.

01
monday — week 7 of v0.2.0

Alice gets her weekly KEYNOTE allocation

Lectern has 100 Pros. This week's Pro allocation campaign received ~580M KEYNOTE from the vault drip + LP-fee buyback top-up. Alice claims her share via Merkle proof from the Sablier MerkleInstant campaign:

580,000,000 ÷ 100 = 5,800,000 KEYNOTE
Alice's wallet now holds
5.8M KEYNOTE
her weekly curation budget
02
tuesday morning

Bob posts a cast Alice wants to amplify

Bob (@bob) writes a thoughtful technical breakdown of XMTP sealed-sender. Alice thinks more people should see it. She opens the cast in Lectern, hits boost, allocates 1,000,000 KEYNOTE (~17% of her weekly budget).

LecternBoostEscrow.boost(castHash, 1_000_000e18)
Escrow holds for this cast
1.0M KEYNOTE
emits CastBoosted event → Lectern indexer caches → cast surfaces in curated feed
03
tuesday → sunday

32 people engage with the cast on Hub

Boosted casts surface in Lectern's curated feed all week. Engagement happens via normal Hub messages — replies, quotes, recasts, likes — no special clients required. The settler will read these directly from Hub on Monday.

3 replies · 4 quotes · 8 recasts · 17 likes  =  32 engager FIDs
04
monday 00:00 UTC + 24h grace

Settler weights every engagement

Each engagement gets a weight: signal × tenure-multiplier. Self-engagement and multi-account FIDs (custody/verified-addr overlap with Alice) are zeroed out. Sum across all engagers gives the denominator for pro-rata distribution.

total weight = 50.25
substantive reply×4.0 base × tenureCarol: 6.0 · Dave: 4.0 · Eve: 4.0
quote×3.0 base × tenureFrank: 4.5 · 3 others: 3.0 each
recast×1.5 base × tenureJack/Kate: 2.25 · 6 others: 1.5 each
like×0.5 base × tenure3 tenured: 0.75 · 14 normal: 0.5 each
05
settlement, step 1

Split the boost: 70% caster, 30% engagers

Bob (the caster) gets his fixed share off the top. The remaining 300K KEYNOTE is the engager pool, distributed pro-rata by weight before the per-FID cap applies.

700K → Bob   ·   300K → engager pool
Bob (caster)
700,000
70% · fixed
engager pool
300,000
30% · weighted distribution
06
settlement, step 2

Per-FID cap: max 5% of the cast pool per FID

Top engagers' pro-rata shares exceed 5% (= 15,000 KEYNOTE) of the engager pool — they get capped at 15K. Cap surplus returns to escrow (rolls into the next epoch's settlement pool). This is the anti-whale / anti-engagement-farm primitive doing its job.

7 engagers capped → ~59K KEYNOTE returns to escrow
FIDsignalweightpro-rataearned
@carolsubstantive reply×635,82015,000[capped]
@davesubstantive reply×423,88015,000[capped]
@evesubstantive reply×423,88015,000[capped]
@frankquote×4.526,86615,000[capped]
@gracequote×317,91015,000[capped]
@hankquote×317,91015,000[capped]
@ivyquote×317,91015,000[capped]
@jackrecast×2.2513,43313,433
@katerecast×2.2513,43313,433
+ 6 recastersrecast×1.58,95553,730
+ 3 tenured likerslike×0.754,47813,434
+ 14 likerslike×0.52,98541,790
caster700,000
returned to escrow (cap surplus)~59,180
07
tuesday — claim opens

Merkle root posted; everyone claims

Settler submits one Merkle root to LecternBoostEscrow.settleEpoch(epochId, root). Lectern publishes proofs at lctrn.app/api/claims/{epochId}. Recipients call claim(epochId, addr, amount, proof) to withdraw. Claims roll over 12 epochs before expiring back to the escrow pool.

Bob withdraws 700K · Carol withdraws 15K · 14 likers each withdraw 2,985 · ...
cost to Lectern of running this entire cycle
~$0.40
one Merkle-root tx + one indexer poll · vs. continuous on-chain attribution which would be 100× more expensive
08
alice reviews

What Alice's 1M KEYNOTE actually accomplished

Bob earned 700K KEYNOTE for one cast — a real on-chain tip-like signal that a person used their curation budget on his contribution. 32 engagers split 240K KEYNOTE (after caps) — concrete reward for discovering and amplifying the cast. 59K KEYNOTEreturned to escrow, available for next week's settlement pool. Token value-in-USDC is whatever the pool quotes; the design works the same at any price.

net effect of one boost
1 caster paid · 32 engagers rewarded · 0 metadata pollution · 0 off-Lectern visibility
this is a single cycle. as Pro count grows, weekly settlement aggregates many casts into one Merkle root — settlement cost stays ~constant per epoch, not per boost.

burn aggressively when healthy. preserve every cent when fragile.

KEYNOTE received via Pro renewals splits dynamically based on Lectern's runway. Less than 6 months → 0% burn. Greater than 24 months → 50%. The intuition: when ops are funded, deflationary signal helps holders. When fragile, every cent stays in the economy.

drag to set runway

15 months
0%
15%
35%
50%
0mo6mo12mo18mo24mo30mo36mo
burn
35%

permanent supply reduction

engagement tokens
40%

contests · bounties · partnerships

founder tokens
25%

24mo vest · operator alignment

at 12 – 24 months runway, every 1 KEYNOTE received via Pro renewal splits 35/40/25. Lower runway preserves value for ops; higher runway burns aggressively.

full schedule

runwayburnengagementfounder
< 60%60%40%
6 – 1215%55%30%
12 – 2435%40%25%
> 2450%30%20%

every contract that holds value or governs flow.

The full mainnet footprint, grouped by role. Two custom contracts (Boost Escrow + Staking Vault); four vetted primitives (Uniswap V4 pool, two 0xSplits PushSplits, two OZ VestingWallets, three Safes). Every address is verified on Basescan; the macOS app wires into specific surfaces noted on each row. Pre-launch Safe provisioning + the Sepolia dogfood ledger have moved to /keynote/sepolia.

Token + venue

The asset itself + the pool that gives it a price. Both deployed via Liquid Protocol on 2026-05-24.

100B fixed supply on Base mainnet via Liquid Protocol. 90B vaulted (36-month linear vest, 7-day cliff), 10B paired against USDC for the initial pool.

macOS wiring: Read in Lectern macOS via `KeynoteBalanceClient.swift` (balance display in the KEYNOTE settings panel). Written by users when they Boost a cast (`approve` + `boost(castHash, amount)` against the escrow below) or stake for the Pro discount.

KEYNOTE / USDC pool (Uniswap V4)

0x63d2DfEa64b3433F4071A98665bcd7Ca14d93496

Single concentrated-liquidity position locked at deploy. LP fees flow as 80% USDC to Treasury PushSplit + 20% KEYNOTE to the buyback PushSplit below.

macOS wiring: Lectern does not interact with the pool directly. Reads through GeckoTerminal for the price/FDV display (live above); writes happen via standard router calls when users swap externally.

Pro economy (the macOS wiring)

The two custom contracts Lectern Pro members touch directly — boost a cast, stake for the discount. Both audited internally; sepolia-dogfooded end-to-end before mainnet.

Holds KEYNOTE staked to amplify a cast in the Pro Curated Feed. Weekly Merkle settlement returns engagement rewards to casters (70%) + engagers (30%). 12-week claim window; admin can reclaim unclaimed amounts after.

macOS wiring: `BoostModal.swift` calls `boost(castHash, amount)` after a `approve()`. `BoostIndexerClient.swift` reads cumulative totals from `lctrn.app/api/keynote/boosts/<hash>` for the boost-overlay on every cast row in the Curated Feed.

Tiered KEYNOTE stake for the Pro USDC discount. 25M / 50M / 100M → 15% / 25% / 40% off. No lockup — unstake anytime, lose the discount immediately.

macOS wiring: `StakingClient.swift` calls `stake()` + `unstake()` from the KEYNOTE settings panel. `LicenseGate.swift` reads `isProEligible(addr)` for the Pro dual-source path (paid OR staked ≥ 25M = Pro access).

Treasury & revenue routing

Vetted 0xSplits PushSplits route every cent of LP fees + Pro USDC payments. Owner of both is the OperationsTreasury Safe — the multisig can rotate recipients for runway-tier transitions, but cannot extract funds in flight.

2-of-3 multisig that owns the PushSplits + holds operational USDC. 40% of every USDC payment flows here.

macOS wiring: Read by `KEYNOTERunwayClient.swift` for the runway-tier display (balance feeds the formula at `lctrn.app/api/keynote/runway`). No write surface from Lectern.

Receives all USDC inflow (LP fees + Pro USDC payments). Routes 40% Ops / 30% Engagement / 15% Reserve / 15% FounderPay VestingWallet. Owner = OperationsTreasury Safe (2-of-3), which can rotate recipients but cannot extract funds in flight.

macOS wiring: Receiver address for `wallet.sendToken` from the Lectern Pro upgrade flow when USDC is the payment method. No custom contract — vetted 0xSplits PushSplitFactoryV2.2.

KEYNOTE Buyback PushSplit (85/15)

0x53Ee4a31456B0132B033d538C94b6c2933E14AeF

Receives the 20% KEYNOTE side of LP fees. Routes 85% to ProAllocation pool (weekly Merkle airdrops to Pros) + 15% to StakerYield pool (LP-fee-derived yield for stakers).

macOS wiring: No direct macOS write. The off-chain `lctrn-pro-allocator` bot reads accumulated KEYNOTE here weekly + publishes Merkle roots via Sablier MerkleInstant for Pro claims.

85% of the KEYNOTE buyback lands here, plus the Liquid vault drip. The weekly Pro curation airdrop is funded from this pool.

macOS wiring: Read-only on the macOS side via `lctrn.app/api/keynote/pool-stats`. The `lctrn-pro-allocator` bot signs weekly Merkle campaigns from here.

15% of the KEYNOTE buyback lands here — LP-fee-derived yield distributed pro-rata to stakers by stake × min(stake_days, 730).

macOS wiring: Read-only via `lctrn.app/api/keynote/pool-stats`. Weekly staker-yield Merkle campaigns are signed from here.

Founder vesting (contract-enforced cliffs)

OZ VestingWallets with `duration = 0` for pure-cliff semantics. The founder cold wallet is the beneficiary; release() reverts before the cliff regardless of caller. Belt-and-suspenders on top of the multisig-held founder Safes that route to these.

60-day cliff for USDC payroll. Receives the 15% Founder Payroll slice from the USDC PushSplit. release(USDC) reverts until 2026-07-23 00:00 UTC; full balance vested instantly thereafter.

macOS wiring: No app surface — fully autonomous. After cliff, anyone can call release() to push vested USDC to founder.cold.

365-day cliff for the founder KEYNOTE allocation (gap-pool 70% + ongoing runway-tied %). release(KEYNOTE) reverts until 2027-05-24 00:00 UTC.

macOS wiring: No app surface. Token allocations land here whenever they vest; founder.cold collects after cliff.

price, FDV, pool, volume — fetched fresh.

Pulled server-side from GeckoTerminal at request time, revalidated every 60s. KEYNOTE / USDC is the only pool. Volume sits at $0 over 24h as the pre-launch grind window plays out — Pro renewals + Boost flows don't reach the pair until v0.2.0 ships and KEYNOTE buyback starts pulling from LP fees.

Price

$2.516e-7

USD · spot from primary pool

FDV

$25.16K

100B supply × price

24h Volume

No trades yet

pre-launch window

Pool Liquidity

$2.43K

KEYNOTE / USDC

primary poolKEYNOTE / USDC
total supply100,000,000,000 KEYNOTE
networkBase mainnet · chain 8453
deployed2026-05-24

Live tier source: GeckoTerminal · as of · fetched server-side at render.

the v1 → v2 redeploy, on the record.

There are two KEYNOTE contracts on Base. The first lived for 24 hours on Clanker; the canonical one lives on Liquid. We're calling out the redeploy publicly now because indexers still see both — and because the reasoning is part of Lectern's brand position.

v1superseded

Clanker · 2026-05-23

0x8022A77d0C652E63772e478146d49a5b00651462
v2live

Liquid Protocol · 2026-05-24

0xC085C7232aA4eC067238082eb74C83c1952e8826

The first KEYNOTE went live via Clanker on 2026-05-23 and was superseded by the v2 on Liquid 24 hours later. We never publicly announced the v1; the redeploy happened quietly while liquidity was small + dispersion across holders was a handful of wallets we coordinated with directly. Calling it out now because discovery surfaces (block explorers, indexers) still index the v1 address and we want the reasoning on the record.

Clanker is a healthy contribution to Farcaster legacy — a launchpad tuned for that ecosystem, with LP-fee mechanics that fund Farcaster legacy operations and creator rewards through Neynar's infrastructure. We're sympathetic to teams iterating in public on hard problems, and Clanker has shipped a lot.

But Lectern's entire pitch is sovereignty + protocol-agnosticism — your keys in your Keychain, no app-layer intermediary deciding what you see. In practice today the macOS client reads + writes via Quilibrium's Hypersnap (the one Snapchain-spec hub we've found reliable for post-2024 FIDs); other hubs are wired in the multi-hub submitter but are no-ops in production until they catch up to the live FID space. That's honest about the current state — and the point is that Lectern can switch the default the moment another hub becomes viable, with no token-level lock-in.

That stance gets harder to make credibly when the token underwriting it routes a slice of its economics to one specific app-layer roadmap. Liquid Protocol's launchpad lets us keep the LP-fee routing entirely within our ownTreasury splits (40 / 30 / 15 / 15 USDC; 85 / 15 KEYNOTE buyback) so the upside of the token funds Lectern + its users directly, with no tether to a third party's direction.

Same supply (100B), same vault terms (90B / 36mo / 7d cliff), same on-chain mechanics. The only thing that changed is who collects the LP fees + where they flow.

if a tracker still shows the v1 address: ask them to update to 0xC085C7232aA4eC067238082eb74C83c1952e8826. v1 has no liquidity + no Lectern integration and will not be supported in the macOS app.

token launches before the product ships.

$KEYNOTE went live on Base mainnet 2026-05-24 (block 46416178). The 60-day gap between token launch and v0.2.0 release is the audience-acquisition window — EngagementBudget funds boosted Farcaster casts via @lectern and paid placements through Farcaster-native services; weekly public Treasury reports build trust; the Pro allocation pool accumulates from T+7d (Liquid platform-min vault cliff) through T+60d. At v0.2.0 ship, the accumulated KEYNOTE pool disburses 70% to founder (OZ VestingWallet, 12-month cliff) and 30% to first-4-week Pros via 4 weekly Sablier MerkleInstant campaigns at 40 / 30 / 20 / 10 %. Operator is on a 60-day no-USDC-pay cliff enforced by OZ VestingWallet.

T - 14wSpec lock
T = 0Token launch
T + 0 → T + 60d60-day gap window
T + 60d (minimum)v0.2.0 ships
T + 60d → T + 90dStabilization
prep

Spec lock

Design finalized; 2 custom contracts written + internally reviewed; 4 vetted primitives identified + verified on-chain

launch

Token launch

Liquid Protocol deploys $KEYNOTE. All contracts live. Vault unlock + LP-fee buyback begin accumulating. v0.2.0 NOT yet shipped.

gap window

60-day gap window

Audience-bootstrap period. EngagementBudget funds Farcaster sponsored casts via @lectern + dogfood boosts. Weekly public Treasury reports. Founder no-USDC-pay cliff (contract-enforced).

product

v0.2.0 ships

macOS app launches with curated feed + boost + staking + KEYNOTE Settings. Gap pool disburses (70% founder vest / 30% first-30d Pros). First boost epoch begins.

post

Stabilization

Settlement signal tuning, runway-tied burn first adjustment, community comms cadence

gap pool at v0.2.0 ship
~7B KEYNOTE

60d vault drip + 60d LP-fee buyback at modest volume

split
70 / 30

founder vest (12mo) / first-30d v0.2.0 Pros (decay-weighted)

founder cliff
60 days

contract-enforced · 15% USDC auto-reroutes to EngagementBudget

the rules we hold ourselves to.

Specification commitments. Engineering rigor before mainnet. Risks that could derail launch — flagged with mitigations, not hidden in a footnote.

implementation guarantees

engineering rigor before mainnet. these are gates, not aspirations.

95% minimum unit-test coverage

Every contract ships with Foundry tests reaching 95% line coverage minimum. Measured by forge coverage. Numbers surfaced on this page, per contract.

Adversarial testing on every contract

Foundry fuzz tests on every external function (millions of inputs per run). Foundry invariant tests on state machines. Echidna property-based testing for state-machine adversarial sequences. Slither static analysis on every commit.

Verified bytecode on Basescan

Every deployed contract verified on Basescan + Basescan-Sepolia at the moment of deployment. Solidity source publicly readable at the contract page. No GitHub repo or fork-friendly packaging — contracts are app infrastructure, not a library.

Public Sepolia exposure before mainnet

Full contract suite deployed to Base Sepolia weeks before mainnet. Anyone can inspect bytecode, fuzz, or report findings. Sample boost → settle → claim transactions seeded for traceability. Test KEYNOTE faucet available.

48-hour timelock on critical operations

Treasury withdrawals, burn-tier changes, and any contract upgrades pass through an OpenZeppelin TimelockController with a 48-hour delay. Detection window for fat-finger or compromise scenarios is non-zero.

External audit when economic value warrants

Audit (Macro / Spearbit / Cantina / Sherlock) commissioned when TVL crosses ~$500k or six months post-launch — whichever first. Audit is roadmap, not launch gate. Internal rigor above is the launch gate.

Token + product designed in lockstep

The 36-month vesting cycle, weekly settlement cadence, and v0.2.0 product surfaces were specified together. No "token first, product later" mismatch — the curated feed is the reason the token exists.

protocol commitments

rules baked into the contracts and the operating cadence

Founder USDC pay

60-day cliff, contract-enforced by OZ VestingWallet. USDC accrues from day 1 (the 15% USDC PushSplit slot routes in continuously); release blocked until cliff end. Post-cliff: founder.cold calls release(USDC) at will.

Founder KEYNOTE

Runway-tied % (20–40%) of KEYNOTE-from-renewals + 70% of the gap-accumulation pool. 12-month cliff contract-enforced by OZ VestingWallet. Same accrual-then-cliff mechanism as Founder USDC pay.

No pre-mint, no insider airdrop

All operator KEYNOTE flows through public, on-chain mechanisms tied to launch milestones or runway.

Multisig everything mutable

All discretionary wallets are Safe 2-of-3 (team + ops + arms-length advisor). Founder cliffs use immutable OZ VestingWallet; per-epoch distribution uses immutable Sablier MerkleInstant — no per-recipient discretion on either.

No promised yield

Staking yield is LP-fee-derived (volume-tied), never inflationary.

No protocol redemption rights

KEYNOTE ↔ USDC only via the Uniswap pool at market.

Public ledger of every multisig outflow

Every multisig spend includes a memo and posts a one-liner. Transparency, not honor system.

Vetted infrastructure for financial paths

OZ VestingWallet (founder cliffs), Sablier MerkleInstant (per-epoch distribution), 0xSplits (revenue routing), and Safe (multisigs) carry billions in TVL collectively. Lectern's custom Solidity is restricted to the two contracts that genuinely require custom logic.

operational security · solo team

lectern is a one-person team. “multisig” with one signer is theater. here's how we get to real security anyway, phased by tvl.

phase 1launch → ~$100k TVL

self-multisig + timelock

2-of-3 Gnosis Safe with all 3 keys held by the operator on different hardware wallets in different physical locations. OZ TimelockController fronts every critical operation with a 48h delay. OpenZeppelin Defender Sentinels monitor for queued tx and alert in real time.

  • ·Protects against single-device theft, phishing capturing one key, lost device, fat-finger transactions
  • ·Doesn't protect against full operator compromise — that requires phase 2
phase 2TVL > $100k or >100 Pros

add trusted advisor signer

Replace the third key in the 2-of-3 Safe with a key held by a trusted advisor, co-founder, or long-term collaborator. Day-to-day operations stay solo; the advisor only signs critical operations after reviewing the queued tx. Massive jump in compromise resistance.

  • ·Step up in security signaling for users with real funds at stake
phase 3TVL > $500k or 6mo post-launch

audit + optional custody

External audit becomes economically rational. Optionally, replace one Safe key with a custody service (Sygnum, Coinbase Custody, Anchorage) as a catastrophic-loss backstop. Adds custodial element but provides off-site recovery posture.

  • ·This is when "multisig" stops being theater and starts being institutional-grade
current state: phase 1 setup planned for token launch. two hardware wallets configured + ozdefender sentinels armed before mainnet deploy. transparent phase upgrades published on launch.

what could go wrong

flagged with mitigations · not hidden in a footnote

High

Pre-v0.2.0 launch = "where's the product" optics

Weekly Treasury reports; public balance dashboard; visible EngagementBudget spend on boosted Farcaster casts via @lectern + paid placements through Farcaster-native services; clear v0.2.0 roadmap.

Medium

KEYNOTE price collapse from thin float

Reduced buyback pressure (0.16% vs 0.64% of swap) means less natural floor. Vault drip + Pro USDC + LP-fee USDC fund ops independently of token price.

Medium

Treasury USDC inflow depends on pool volume

Pro USDC sub remains as revenue floor. Monitor 30d volume; intervene if <$1k/day for 60d.

Medium

Sybil farms exceed per-FID cap

Aggressive tenure multiplier; FID registration cost (~$1.50) raises bar; per-FID cap of 5% per cast.

Medium

Settlement bot is centralization point

Accept centralization in v1; document v2 open-market path with bonded operators.

High

First-epoch settlement-bot bug pays wrong addresses

Testnet dogfood + manual review of first 3 mainnet epoch roots before automation. Same manual review applies to the 4 weekly gap-pool campaigns.

Low

Vetted primitive vulnerability (OZ / Sablier / 0xSplits / Safe)

Trade-off accepted explicitly. All four primitives carry years of production use across many integrations and hold significant TVL collectively. Risk surface is shared infra, not Lectern-authored.

Low

PushSplit distribute() requires call (not auto)

Distributor-reward incentive draws bots/MEV to call distribute() within minutes. Cron fallback documented for splits sitting undistributed >24h.

$keynote launches summer 2026.

Specification is locked. Contract suite implementation is underway with a 95% test-coverage gate before mainnet. Lectern v0.2.0 ships 60 days after token launch. The 36-month vesting cycle and the curated-feed product are designed in lockstep — not bolted together.

keynote.md
specification v1 · locked 2026-05-22 · revisions tracked publicly

Read more

/keynote.md — full LLM-readable design spec·/llms.txt — site index for AI agents