// Patent Tokens — IP tokens you own, royalty streams, and a marketplace. // 3 screens: portfolio, token detail, marketplace + IPO calendar + pools. function PatentRail({ active }) { return ( <>
PORTFOLIO · NAV
$184,420
▲ +$3,182 · +1.76% 24h
14 PATENTS 3 LP
); } function PatentCrumb({ items }) { return (
{items.map((it, i) => ( {it} {i < items.length - 1 && } ))}
); } const PORTFOLIO = [ { sym: 'GAT3-LTP', name: 'Astrocytic GAT-3 modulator', stage: 'GRANTED', pct: 18.4, units: 18400, basis: 0.42, mark: 1.84, yld24m: '$11,420', tone: 'accent' }, { sym: 'GLIA-2P', name: 'Open 2-photon rig BoM', stage: 'PROVISIONAL', pct: 4.1, units: 4100, basis: 0.18, mark: 0.62, yld24m: '$1,840', tone: 'ok' }, { sym: 'RWIF', name: 'Reproducibility-weighted index', stage: 'GRANTED', pct: 6.2, units: 6200, basis: 0.31, mark: 0.94, yld24m: '$3,200', tone: 'accent' }, { sym: 'NB-GLIA', name: 'Glia heterogeneity atlas', stage: 'GRANTED', pct: 2.0, units: 2000, basis: 0.55, mark: 0.78, yld24m: '$1,420', tone: 'accent' }, { sym: 'COR-MOTIF', name: 'Cortical microcircuit motifs', stage: 'EXAM', pct: 1.4, units: 1400, basis: 0.20, mark: 0.34, yld24m: '$220', tone: 'warn' }, { sym: 'AST-ABL', name: 'μ-Glia ablation method', stage: 'PROVISIONAL', pct: 0.8, units: 800, basis: 0.10, mark: 0.16, yld24m: '$84', tone: 'ok' }, { sym: 'DPID-CITE', name: 'On-chain citation primitive', stage: 'GRANTED', pct: 0.6, units: 600, basis: 0.62, mark: 1.42, yld24m: '$112', tone: 'accent' }, { sym: 'OBJ-IMG', name: 'Open imaging benchmark', stage: 'OPP', pct: 0.3, units: 300, basis: 0.40, mark: 0.28, yld24m: '$0', tone: 'bad' }, { sym: 'AGE-04 (LP)', name: 'Aging assay platform', stage: 'POOL', pct: 12, units: 12000, basis: 1.10, mark: 1.32, yld24m: '$2,100', tone: 'info' }, { sym: 'VAX-09 (LP)', name: 'mRNA delivery scaffold', stage: 'POOL', pct: 6, units: 6000, basis: 0.92, mark: 1.18, yld24m: '$840', tone: 'info' }, { sym: 'CRSP-12 (LP)', name: 'Off-target Crispr filter', stage: 'POOL', pct: 4, units: 4000, basis: 0.84, mark: 0.92, yld24m: '$320', tone: 'info' }, ]; // ───────────────────────────────────────────────── PORTFOLIO ───────────────── function PatentTokensDapp() { return ( }> } title="Patent token portfolio" sub="Each token is a fractional claim on a patent or patent application — and a programmable share of any royalty or license revenue it generates." actions={<> Statement · Q2'25 Marketplace Mint a token from your patent } />
{/* Top KPIs */}
{/* Composition + history */}
{[40, 80, 120].map(y => )} {(() => { let d = 'M 0 130'; let f = 'M 0 130'; const pts = [130, 124, 132, 118, 110, 104, 98, 92, 86, 78, 82, 70, 64, 56, 60, 48, 44, 36]; pts.forEach((y, i) => { const x = (i + 1) * (600 / pts.length); d += ` L ${x} ${y}`; f += ` L ${x} ${y}`; }); f += ' L 600 180 L 0 180 Z'; return <>; })()} {[ [80, 'GAT3 · provisional grant', 70], [220, 'AGE-04 LP entry', 95], [380, 'RWIF · royalty paid', 50], [540, 'CRSP-12 LP add', 38], ].map(([x, l, y], i) => ( {l} ))}
{['1D','7D','30D','90D','YTD','ALL'].map((p, i) => ( {p} ))}
{[ ['Granted', 0.62, '8 tokens · $114,260', UB.accent], ['LP positions', 0.22, '3 pools · $40,544', 'oklch(0.66 0.13 240)'], ['Provisional / examination', 0.12, '2 tokens · $22,180', UB.ok], ['At risk / opp.', 0.04, '1 token · $7,436', UB.warn], ].map((r, i) => (
{r[0]} {r[2]}
))}
BY DOMAIN
{[ ['Neuroscience', 0.48], ['Methods · tooling', 0.22], ['Aging · longevity', 0.14], ['Crispr · gene', 0.10], ['Materials', 0.06], ].map((r, i) => (
{r[0]} {(r[1] * 100).toFixed(0)}%
))}
{/* Holdings table */}
SymbolNameStage%UnitsBasisMarkP/LRoyalty
{PORTFOLIO.map((p, i) => { const value = p.units * p.mark; const cost = p.units * p.basis; const pl = value - cost; const plpct = (pl / cost) * 100; return (
{p.sym} {p.name} {p.stage} {p.pct}% {p.units.toLocaleString()} ${p.basis.toFixed(2)} ${p.mark.toFixed(2)} = 0 ? UB.ok : UB.bad }}> {pl >= 0 ? '+' : ''}${Math.round(pl).toLocaleString()} · {plpct >= 0 ? '+' : ''}{plpct.toFixed(0)}% {p.yld24m}
); })}
{/* Royalty stream + pools */}
{Array.from({ length: 12 }).map((_, i) => { const x = i * (600 / 12); const w = (600 / 12) - 8; // Stacked bars across patents const layers = [ { c: UB.accent, h: 18 + Math.sin(i * 0.7) * 12 + i * 1.2 }, { c: 'oklch(0.66 0.13 240)', h: 6 + Math.sin(i * 0.4 + 1) * 4 }, { c: UB.ok, h: 10 + Math.cos(i * 0.6) * 6 + i * 0.4 }, { c: UB.warn, h: 4 + Math.sin(i * 0.3) * 3 }, ]; let y = 110; return ( {layers.map((L, li) => { const h = Math.max(0, L.h); y -= h; return ; })} {['M','J','J','A','S','O','N','D','J','F','M','A'][i]} ); })}
GAT3 · $11.4K RWIF · $3.2K LP pools · $3.3K Other · $3.6K
{[ { p: 'AGE-04 / UBR', share: 0.018, tvl: '$22.4M', apy: '14.2%', y24h: '$8.40' }, { p: 'VAX-09 / UBR', share: 0.012, tvl: '$8.1M', apy: '11.7%', y24h: '$3.10' }, { p: 'CRSP-12 / USDC', share: 0.008, tvl: '$3.4M', apy: '9.1%', y24h: '$0.80' }, ].map((pl, i) => (
{pl.p} APY {pl.apy}
share {(pl.share * 100).toFixed(2)}%
tvl {pl.tvl}
24h {pl.y24h}
))}
); } // ──────────────────────────────────────────────── PATENT TOKEN DETAIL ──────── function PatentTokenDetailDapp() { return ( }> } title="GAT3-LTP · Astrocytic GAT-3 modulator" sub="Granted patent · USPTO 12/845,209. 100,000 tokens minted · 18,400 owned by you. Royalty events post automatically when licensees pay through the contract." actions={<> Read patent List for sale Buy more · $1.84 } />
{/* Left column */}
{[40, 80, 120].map(y => )} {(() => { const pts = []; for (let i = 0; i <= 90; i++) { pts.push(140 - i * 0.85 - Math.sin(i * 0.4) * 8 + (i > 60 ? -12 : 0)); } let d = `M 0 ${pts[0]}`; pts.forEach((y, i) => { d += ` L ${(i / 90) * 600} ${y}`; }); return ; })()} {/* Royalty event markers */} {[ [120, 'royalty $1,840'], [330, 'license · BMS'], [510, 'royalty $4,210'], ].map(([x, l], i) => ( ● {l} ))}
Open
$1.81
High
$1.92
Low
$1.78
Vol 24h
14,820 UBR
Mkt cap
$184K
{Array.from({ length: 24 }).map((_, i) => { const x = i * (600 / 24) + 4; const w = (600 / 24) - 6; const h = i < 8 ? 6 + Math.random() * 6 : 14 + Math.sin(i * 0.5) * 8 + i * 1.2; return ; })}
2 active licensees · 1 prospect · 0 disputes Next payout · 14 May · est. $1,840
{/* Bids */}
BIDS
{[ [1.84, 1240, '$2,281'], [1.83, 2100, '$3,843'], [1.82, 540, '$983'], [1.81, 1820, '$3,294'], [1.80, 4400, '$7,920'], [1.78, 1100, '$1,958'], [1.75, 8200, '$14,350'], ].map((r, i, arr) => (
${r[0].toFixed(2)} {r[1].toLocaleString()} {r[2]}
))}
{/* Asks */}
ASKS
{[ [1.85, 800, '$1,480'], [1.86, 1400, '$2,604'], [1.88, 2200, '$4,136'], [1.90, 1800, '$3,420'], [1.94, 3600, '$6,984'], [1.98, 1100, '$2,178'], [2.10, 14200,'$29,820'], ].map((r, i, arr) => (
${r[0].toFixed(2)} {r[1].toLocaleString()} {r[2]}
))}
Spread · $0.01 · 0.5% Mid · $1.845
{/* Right column */}
USPTO #12/845,209
Filed14 Mar 2023
Granted22 Aug 2024
Expires14 Mar 2043
ClassA61K · A61P 25/00
Inventors3
Claims14 (3 indep.)
Citations22 forward · 84 back
dPIDa92f.04
Contract0xa9…f04e
A method of selectively reducing astrocytic GABA reuptake via small-molecule modulators of the GAT-3 transporter, such that tonic inhibition is increased while LTP induction is preserved…
{[ ['Token holders (you · 18.4%)', 0.65, 'incl. you · 18.4%'], ['Inventors · founder pool', 0.20, '3 named'], ['Lab DAO · GliaInit', 0.10, '14 contributors'], ['Reviewer pool · TRID', 0.03, 'replication bounty'], ['Protocol fee · UB-Chain', 0.02, 'recycled to UBR'], ].map((r, i) => (
{r[0]} {(r[1] * 100).toFixed(0)}%
))} {[ ['malcolm.harriot.eth (you)', '18.4%', 'PI'], ['glia-init.dao', '14.0%', 'lab DAO'], ['c.lin.eth', '8.2%', 'co-inventor'], ['bms-treasury.eth', '6.0%', 'licensee'], ['vita-dao.eth', '4.8%', 'fund'], ['molecule-fund.eth', '4.2%', 'fund'], ['anon-714…', '3.6%', 'retail'], ['…', '40.8%', '+ 211 holders'], ].map((h, i) => (
{h[0]} {h[1]} {h[2]}
))}
{[ ['BMS · field-of-use · oncology', '$120K + 6% royalty', '2024-11-04', 'ok'], ['RIKEN · academic non-commercial', '$0 · open', '2024-09-12', 'info'], ['Verily · brain field', '$80K + 4% royalty', '2025-02-22', 'ok'], ['Charles River · CRO use', '$0 · operational', '2025-03-08', 'info'], ['Anonymous bidder · §3 pending', '$280K (offer)', '2025-04-30', 'warn'], ].map((e, i) => (
{e[0]} {e[3] === 'ok' ? 'PAID' : e[3] === 'warn' ? 'PENDING' : 'OPEN'}
{e[1]} · {e[2]}
))}
); } // ───────────────────────────────────────────────── MARKETPLACE ─────────────── function PatentMarketplaceDapp() { const market = [ { sym: 'AGE-04', name: 'Aging assay platform', stage: 'GRANTED', dom: 'Aging', mark: 1.32, d24: '+8.4%', vol: '$184K', mc: '$13.2M', yld: '6.2%', tone: 'accent', flame: true }, { sym: 'CRSP-12', name: 'Off-target Crispr filter', stage: 'GRANTED', dom: 'Gene', mark: 0.92, d24: '+2.1%', vol: '$98K', mc: '$9.2M', yld: '4.4%', tone: 'accent' }, { sym: 'VAX-09', name: 'mRNA delivery scaffold', stage: 'GRANTED', dom: 'Vax', mark: 1.18, d24: '+11.3%', vol: '$240K', mc: '$11.8M', yld: '5.8%', tone: 'accent', flame: true }, { sym: 'NEUR-01', name: 'BCI electrode array', stage: 'EXAM', dom: 'Neuro', mark: 0.42, d24: '+0.4%', vol: '$22K', mc: '$2.1M', yld: '0%', tone: 'warn' }, { sym: 'BAT-04', name: 'Solid-state Li-S cell', stage: 'PROVISIONAL', dom: 'Mat.', mark: 0.18, d24: '−6.2%', vol: '$8K', mc: '$0.9M', yld: '0%', tone: 'ok' }, { sym: 'MTL-02', name: 'Self-healing alloy', stage: 'GRANTED', dom: 'Mat.', mark: 0.78, d24: '−0.6%', vol: '$42K', mc: '$3.9M', yld: '3.1%', tone: 'accent' }, { sym: 'OPT-11', name: 'Quantum entangler', stage: 'EXAM', dom: 'Phys.', mark: 1.84, d24: '+22%', vol: '$1.4M', mc: '$28.4M', yld: '0%', tone: 'warn', flame: true }, { sym: 'FUS-03', name: 'Tokamak shielding', stage: 'EXAM', dom: 'Energy', mark: 0.34, d24: '+1.4%', vol: '$18K', mc: '$3.4M', yld: '0%', tone: 'warn' }, { sym: 'AGRO-22', name: 'Drought-tolerant root', stage: 'GRANTED', dom: 'Agro', mark: 0.62, d24: '+3.2%', vol: '$36K', mc: '$6.2M', yld: '2.1%', tone: 'accent' }, { sym: 'ANTI-7', name: 'Bacteriophage cocktail', stage: 'GRANTED', dom: 'Bio', mark: 1.04, d24: '+5.6%', vol: '$140K','mc': '$10.4M', yld: '4.0%', tone: 'accent' }, ]; const ipo = [ { sym: 'ALZ-22', name: 'Tau aggregation inhibitor', team: 'Park Lab · KAIST', d: '14 May', size: '$2.4M @ $0.40', commit: 124, tone: 'accent' }, { sym: 'PNX-04', name: 'Pan-coronavirus nanobody', team: 'OxBio Consortium', d: '21 May', size: '$4.0M @ $0.80', commit: 320, tone: 'accent' }, { sym: 'COMP-09', name: 'Photonic adder', team: 'ETH Zurich', d: '30 May', size: '$1.2M @ $0.32', commit: 84, tone: 'ok' }, { sym: 'GUT-14', name: 'Microbiome diagnostic', team: 'CzBiohub', d: '04 Jun', size: '$1.8M @ $0.55', commit: 92, tone: 'ok' }, { sym: 'SOL-11', name: 'Perovskite stabilizer', team: 'NREL · Univ. Delaware', d: '12 Jun', size: '$3.0M @ $0.48', commit: 184, tone: 'accent' }, { sym: 'AAV-02', name: 'Targeted AAV capsid', team: 'Verily', d: '25 Jun', size: '$2.0M @ $0.62', commit: 48, tone: 'default' }, ]; return ( }> } title="Patent token marketplace" sub="Buy fractional positions in any patent token issued through UB-Chain. Filter by domain, stage, royalty yield. New launches calendared on the right." actions={<>
{Icon.search} Search symbol · USPTO · domain
Alerts · 8 Mint your patent } />
{/* Market overview */}
{/* Filters */}
FILTER {['All · 412', 'Granted · 218', 'Examination · 144', 'Provisional · 50', 'Paying yield · 184', 'Top movers', 'Watchlist · 4'].map((c, i) => ( {c} ))} Domain: {['Neuro', 'Bio', 'Mat.', 'Energy', 'Agro', 'Phys.'].map((d, i) => ( {d} ))}
{/* Markets table */}
SymbolPatent · domainStageMark24hVol 24hMkt capYield
{market.map((m, i) => (
{m.sym}
{m.name}
{m.dom}
{m.stage} {m.flame && 🔥} ${m.mark.toFixed(2)} {m.d24} {m.vol} {m.mc} {m.yld} Buy
))}
+ 402 more · scroll to load
{ipo.map((p, i) => (
{p.sym} {p.d}
{p.name}
{p.team}
{p.size} Commit · {p.commit}
))}
{[ ['OPT-11', 'Quantum entangler', '+22%'], ['VAX-09', 'mRNA delivery', '+11.3%'], ['AGE-04', 'Aging assay', '+8.4%'], ['ANTI-7', 'Phage cocktail', '+5.6%'], ].map((r, i) => (
{r[0]}{r[1]} {r[2]}
))}
{[ ['AGE-04 / UBR', '14.2%', '$22.4M'], ['VAX-09 / UBR', '11.7%', '$8.1M'], ['OPT-11 / USDC', '24.4%', '$4.2M'], ['CRSP-12 / USDC', '9.1%', '$3.4M'], ].map((r, i) => (
{r[0]} {r[1]} {r[2]}
))} Provide liquidity
); } window.PatentTokensDapp = PatentTokensDapp; window.PatentTokenDetailDapp = PatentTokenDetailDapp; window.PatentMarketplaceDapp = PatentMarketplaceDapp;