Skip to content

Jr-kenny/tokenpost

Repository files navigation

tokenpost

A verified-claim launchpad on Base — a token can only be launched when its real-world reason is proven true under GenLayer validator consensus.

The verification is the product. Anyone launches a real ERC-20 for a reason — a viral post, a real-world event, a shipped release, an onchain metric — and a GenLayer intelligent contract proves that reason true under validator consensus before the token is allowed to mint. No consensus, no token. Consensus-gated emission is the anti-spam layer and the whole point.

Live: tokenpost.vercel.app (Base Sepolia)

How it works — the consensus-verified emission loop

user (Base) → ClaimLauncher.submitClaim(reason, claim, sources, …)
   → LayerZero → [ZKsync Era hub] → relayer → ClaimVerifier (GenLayer)
       → validators independently verify and reach CONSENSUS on the verdict
   → verdict → relayer → VerdictReceiver.deliverDirect → ClaimLauncher
       → VERIFIED: TokenFactory mints ; REJECTED: terminal ; transient: Retryable

GenLayer's EVM is zkSync-OS based, so cross-chain interop routes through a ZKsync Era Sepolia hub with a stateless self-run relayer (dedup is on-chain in both directions). Verdict delivery uses GenLayer's canonical dispatch-on-receive + authorized-relayer model (VerdictReceiver.deliverDirect), so it is transport-agnostic and unaffected by LayerZero's testnet reverse-leg stalls. The relayer becomes native at GenLayer mainnet with contract logic unchanged.

The loop is genuinely async — minutes, not blocks. The product treats a pending verdict as a first-class UX state (live claim pages, in-flight status on profiles).

The six launch reasons — all live

Reason Proven under consensus Technique
Viral post the post is real + its author web fetch across mirrors, consensus on reproducible fields
Real-world event the event actually happened sources + independent web search + LLM judge under prompt_comparative
GitHub release a tagged release actually shipped same subjective pipeline, release-specific guidance
Sports result the final official outcome same pipeline, finality-aware (in-progress ⇒ NOT_YET)
Price target the asset actually hit the price same pipeline, strict price semantics
Onchain metric a contract crossed a threshold real eth_call per validator (JSON-RPC over nondet web), deterministic comparator — the LLM never does the arithmetic

Subjective reasons share one claim-truth pipeline: each validator independently fetches the user's sources (gl.nondet.web.get), runs its own web search through a self-run search proxy, and judges TRUE / FALSE / UNVERIFIABLE / NOT_YET under gl.eq_principle.prompt_comparative. Disagreement ⇒ no emission.

Why GenLayer

GenLayer is used for exactly the parts that need validator consensus on external, real-world state — not as a generic backend:

  • Proving a claim is true — validators independently gather evidence and must agree on the verdict before anything mints.
  • Reading chain state trustlessly — OnchainMetric verdicts are settled by each validator's own eth_call, compared under consensus.
  • Deriving token identity from the verified claim — deterministic where it must be (name/ticker from the claim subject), LLM-generated under a comparative equivalence principle where it helps (description).

The token itself is a normal ERC-20 — trading needs ordinary wallet behavior. GenLayer owns the trust layer; Base owns issuance and trading.

Architecture

  • GenLayer (Python intelligent contract)contracts-genlayer/ClaimVerifier.py: decodes the reason-tagged claim, runs the matching verification, reaches consensus, replies with a verdict. All verification IP lives here.
  • Base (Solidity, Foundry)packages/contracts-evm/: ClaimLauncher.sol (submits claims, receives verdicts, mints on success), TokenFactory.sol (gated minter — only mints for a verified verdict), TokenpostToken.sol (cloned per launch), BondingCurveMath.sol + adapters/ (constant-product curve + graduation to Uniswap v4).
  • Bridge / relayer — GenLayer × LayerZero loop + the stateless relayer, hosted always-on as supabase/functions/relay (pg_cron, every minute).
  • Web appapps/web (Next.js App Router, Vercel): one launch interface for all six reasons, async claim status, explore / token / trending / activity / profile.
  • SDKpackages/sdk.

Design history (specs and plans, dated) in docs/design/; GenVM/runner findings in docs/GENLAYER-FEEDBACK.md.

Live deployment — Base Sepolia (chainId 84532)

Full record (bridge contracts, LZ options, per-reason proof pairs) in packages/contracts-evm/deployments/base-sepolia.json.

Status (honest)

  • All six reasons proven live end-to-end, each with real consensus-verified mints — and false claims proven to terminally reject (proof pairs recorded in the deployments file).
  • OnchainMetric settles by real chain reads: validators each eth_call the target contract and consensus compares verdicts; the minted token's description records the literal read (e.g. totalSupply() read 1e27 >= threshold 1e24).
  • Graduation proven live: bonding curve → real Uniswap v4 pool with permanently locked full-range liquidity.
  • ✅ Relayer hosted always-on (Supabase Edge Function + pg_cron); submit→mint typically 5–15 minutes on testnet.
  • ⏳ Indexer + public API/SDK surfaces (docs pages mark these honestly as in development).
  • ⏳ The loop is spoke-shaped by design (claimIds, EIDs, and the verifier are chain-parameterized) — additional chains are future work, deliberately out of current scope.

Repo layout

apps/web                      Next.js app (Vercel)
packages/contracts-evm        ClaimLauncher, TokenFactory, TokenpostToken, curve + adapters
packages/sdk                  launch + query helpers
contracts-genlayer            ClaimVerifier.py + per-reason verification (GenLayer)
supabase/functions            relay (bridge relayer) + search (validator web-search proxy)
docs/                         architecture, design history, GenLayer builder feedback

About

A verified-claim launchpad

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors