Skip to content

Commit be7ca34

Browse files
authored
Merge pull request #3 from MatiasOS/add-eth-mandate-alignment
Add eth mandate alignment
2 parents 74b9209 + b5435e1 commit be7ca34

6 files changed

Lines changed: 237 additions & 14 deletions

File tree

app/(docs)/alignment/page.tsx

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
import type { Metadata } from "next"
2+
import { PageHeader, InfoCard, LinkCard } from "@/components/docs-components"
3+
import {
4+
Shield,
5+
Code,
6+
Lock,
7+
ShieldCheck,
8+
Footprints,
9+
Users,
10+
Globe,
11+
Scale,
12+
ExternalLink,
13+
} from "lucide-react"
14+
15+
export const metadata: Metadata = {
16+
title: "Ethereum Alignment — OpenScan",
17+
description:
18+
"How OpenScan's architecture and principles align with the Ethereum Foundation Mandate and CROPS.",
19+
}
20+
21+
export default function AlignmentPage() {
22+
return (
23+
<div className="prose">
24+
<PageHeader
25+
title="Ethereum Alignment"
26+
description="How OpenScan embodies the principles of the Ethereum Foundation Mandate — and where we hold ourselves accountable."
27+
/>
28+
29+
<h2 id="closing-the-trust-gap">Closing the Trust Gap</h2>
30+
<p>
31+
The blockchain ecosystem has decentralized consensus, computation, and
32+
money — yet the tools people use to <em>see</em> what happened on-chain
33+
remain centralized. Hosted APIs, proprietary backends, and opaque
34+
indexers sit between users and the truth.
35+
</p>
36+
<p>
37+
OpenScan was built to close that gap: a fully client-side, open-source
38+
explorer that connects directly to blockchain nodes with no
39+
intermediary. This is not a product decision — it is a principled one.
40+
</p>
41+
<p>
42+
The Ethereum Foundation&apos;s{" "}
43+
<a
44+
href="https://openscan.eth.link/#/1/tx/0x5dd574df963a1df1f064791e0f6ff41ec972cdbba12293b7e1ece582052ba855"
45+
target="_blank"
46+
rel="noopener noreferrer"
47+
>
48+
Mandate
49+
</a>{" "}
50+
articulates these same principles at the protocol level, centered on{" "}
51+
<strong>CROPS</strong> — Censorship Resistance, Open Source, Privacy,
52+
Security — as the non-negotiable foundation of Ethereum&apos;s purpose.
53+
OpenScan&apos;s architecture is a concrete implementation of CROPS for
54+
the domain of blockchain data access.
55+
</p>
56+
57+
<h2 id="crops-mapping">CROPS in Practice</h2>
58+
<p>
59+
Each CROPS property maps to a specific architectural decision in
60+
OpenScan — not as aspiration, but as shipped code.
61+
</p>
62+
63+
<div className="not-prose grid gap-4 sm:grid-cols-2 mb-8">
64+
<InfoCard
65+
title="Censorship Resistance"
66+
description="No server to block, no API keys to revoke, no intermediary to pressure. The client-side architecture ensures no actor can selectively exclude valid use. Users can configure their own RPC endpoints for full independence."
67+
icon={<Shield className="h-5 w-5" />}
68+
/>
69+
<InfoCard
70+
title="Open Source"
71+
description="The entire codebase — explorer, network connectors, metadata, docs — lives in public repositories. Anyone can audit, fork, or contribute. No proprietary black boxes."
72+
icon={<Code className="h-5 w-5" />}
73+
/>
74+
<InfoCard
75+
title="Privacy"
76+
description="No backend server observes your queries. Your exploration activity stays on your device. No ads, no trackers, no data harvesting — privacy by architecture, not by policy."
77+
icon={<Lock className="h-5 w-5" />}
78+
/>
79+
<InfoCard
80+
title="Security"
81+
description="Every effect on state is reproducible from public data. Parallel RPC strategies detect provider divergence. Minimal dependencies reduce attack surface. A system that fails must fail publicly and recoverably."
82+
icon={<ShieldCheck className="h-5 w-5" />}
83+
/>
84+
</div>
85+
86+
<h2 id="shared-concepts">Shared Principles</h2>
87+
<p>
88+
Beyond CROPS, several concepts from the Mandate resonate deeply with
89+
OpenScan&apos;s design and governance.
90+
</p>
91+
92+
<div className="not-prose grid gap-4 sm:grid-cols-2 mb-8">
93+
<InfoCard
94+
title="Walkaway Test"
95+
description="The Mandate asks: would the system survive if its stewards disappeared? OpenScan's client-side architecture passes this test — it works with any RPC endpoint, independent of the team or any infrastructure we operate."
96+
icon={<Footprints className="h-5 w-5" />}
97+
/>
98+
<InfoCard
99+
title="No Indispensable Intermediaries"
100+
description="The Mandate warns against entrenched chokepoints. OpenScan has no backend, no proprietary API, no gatekeeping layer. Anyone who forwards or attests must be replaceable by any other participant."
101+
icon={<Users className="h-5 w-5" />}
102+
/>
103+
<InfoCard
104+
title="Infrastructure as a Public Good"
105+
description="The Mandate calls for 'civilizational foundational infrastructure.' OpenScan treats blockchain exploration as public infrastructure — permanently free for all end-users, sustained by ecosystem supporters, not advertisers."
106+
icon={<Globe className="h-5 w-5" />}
107+
/>
108+
<InfoCard
109+
title="Non-Extractive Sustainability"
110+
description="The Mandate rejects 'slippery slopes to arbitrary extraction.' OpenScan's revenue model sources from projects and networks that benefit from open infrastructure — never from users, never from ads, never from data."
111+
icon={<Scale className="h-5 w-5" />}
112+
/>
113+
</div>
114+
115+
<h2 id="honest-tensions">Honest Tensions</h2>
116+
<p>
117+
Alignment is not perfection. We believe in naming tensions openly rather
118+
than pretending they don&apos;t exist.
119+
</p>
120+
<p>
121+
<strong>Subscription voting power.</strong> OpenScan&apos;s Ally
122+
subscription tier includes roadmap voting power. The Mandate warns
123+
against systems where paying more grants more influence — a path toward
124+
private capture. We bound this tension deliberately: voting applies to
125+
feature prioritization only, never to principles or architectural
126+
decisions. The process is transparent, and the community retains override
127+
authority through the DAO. We will continue to scrutinize this mechanism
128+
as the project matures.
129+
</p>
130+
131+
<h2 id="foundational-references">Foundational References</h2>
132+
<p>
133+
OpenScan&apos;s principles draw from two foundational documents. Both
134+
are publicly accessible and independently verifiable.
135+
</p>
136+
137+
<div className="not-prose grid gap-4 sm:grid-cols-1 lg:grid-cols-2 mb-8">
138+
<LinkCard
139+
href="https://openscan.eth.link/#/1/tx/0x5dd574df963a1df1f064791e0f6ff41ec972cdbba12293b7e1ece582052ba855"
140+
title="Ethereum Foundation Mandate"
141+
description="The EF's 1000-year charter for Ethereum — centered on CROPS, self-sovereignty, and the walkaway test. Stored on-chain and viewable via OpenScan."
142+
icon={<ExternalLink className="h-5 w-5 shrink-0 text-accent" />}
143+
external
144+
/>
145+
<LinkCard
146+
href="https://trustlessness.eth.limo/general/2025/11/11/the-trustless-manifesto.html"
147+
title="The Trustless Manifesto"
148+
description="The philosophical foundation for OpenScan's Three Laws of Trustless Design — why trustlessness matters, what it demands, and the pledge we build by."
149+
icon={<ExternalLink className="h-5 w-5 shrink-0 text-accent" />}
150+
external
151+
/>
152+
</div>
153+
</div>
154+
)
155+
}

app/(docs)/explorer/how-it-works/page.tsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ import {
1616
Search,
1717
Shield,
1818
Wrench,
19+
Minimize2,
20+
Package,
21+
CheckCircle,
1922
} from "lucide-react"
2023
import Link from "next/link"
2124

@@ -193,6 +196,31 @@ export default function HowItWorksPage() {
193196
/>
194197
</div>
195198

199+
<h2 id="security-design">Security Design</h2>
200+
<p>
201+
Security is not a feature — it is a property of the architecture.
202+
OpenScan follows these design principles to minimize attack surface and
203+
maximize verifiability.
204+
</p>
205+
206+
<div className="not-prose grid gap-4 sm:grid-cols-3 mb-8">
207+
<InfoCard
208+
title="Simplicity of Architecture"
209+
description="A fully client-side application with no backend reduces the attack surface to the browser itself. Fewer moving parts means fewer things that can fail or be exploited."
210+
icon={<Minimize2 className="h-5 w-5" />}
211+
/>
212+
<InfoCard
213+
title="Minimal Dependencies"
214+
description="The Network Connectors library uses pure Node.js with zero external dependencies. Every dependency is a trust assumption — we minimize them deliberately."
215+
icon={<Package className="h-5 w-5" />}
216+
/>
217+
<InfoCard
218+
title="Verifiable Behavior"
219+
description="Parallel RPC strategies can detect provider divergence. Every query result is reproducible from public data. Systems must do what they claim — no more, no less."
220+
icon={<CheckCircle className="h-5 w-5" />}
221+
/>
222+
</div>
223+
196224
<h2 id="open-source">Surf the blockchain</h2>
197225
<p>
198226
OpenScan is fully open source. Contribute, audit, or fork the explorer:

app/(docs)/introduction/page.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,8 @@ export default function IntroductionPage() {
117117
OpenScan is a fully client-side application. There is no required backend server.
118118
Everything runs in your browser, connecting directly to blockchain nodes
119119
via RPC. <br />
120-
No intermediaries, no centralized APIs, no compromises.
120+
121+
No intermediaries, no centralized APIs, no compromises — and no one who can stop you from using it.
121122
</p>
122123

123124
<div className="not-prose grid gap-4 sm:grid-cols-3 mb-8">

app/(docs)/values/page.tsx

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import {
1414
Unplug,
1515
ShieldCheck,
1616
Sailboat,
17+
Shield,
18+
Footprints,
1719
} from "lucide-react"
1820

1921
export const metadata: Metadata = {
@@ -49,7 +51,7 @@ export default function ValuesPage() {
4951
/>
5052
<InfoCard
5153
title="Privacy & Experience"
52-
description="No invasive advertising, trackers, or hidden user-data harvesting. We serve users, not advertisers."
54+
description="Your exploration activity stays on your device. No invasive advertising, trackers, or hidden user-data harvesting — privacy by architecture, not by policy."
5355
icon={<Lock className="h-5 w-5" />}
5456
/>
5557
<InfoCard
@@ -72,6 +74,11 @@ export default function ValuesPage() {
7274
description="OpenScan will not function as an intermediary that holds or stores information. We only deploy features that are publicly accessible."
7375
icon={<Unplug className="h-5 w-5" />}
7476
/>
77+
<InfoCard
78+
title="Censorship Resistance"
79+
description="No server to block, no API keys to revoke, no intermediary to pressure. The client-side architecture ensures no actor can selectively exclude valid use."
80+
icon={<Shield className="h-5 w-5" />}
81+
/>
7582
</div>
7683

7784
<h2 id="why-trustlessness-matters">Why Trustlessness Matters</h2>
@@ -127,6 +134,19 @@ export default function ValuesPage() {
127134

128135
</div>
129136

137+
<p>
138+
These laws operationalize what the Ethereum Foundation&apos;s{" "}
139+
<a href="https://openscan.eth.link/#/1/tx/0x5dd574df963a1df1f064791e0f6ff41ec972cdbba12293b7e1ece582052ba855" target="_blank" rel="noopener noreferrer">
140+
Mandate
141+
</a>{" "}
142+
calls <strong>CROPS</strong> — Censorship Resistance, Open Source, Privacy, Security — for
143+
the specific domain of blockchain data access. They are rooted in the principles
144+
articulated in the{" "}
145+
<a href="https://trustlessness.eth.limo/general/2025/11/11/the-trustless-manifesto.html" target="_blank" rel="noopener noreferrer">
146+
Trustless Manifesto
147+
</a>.
148+
</p>
149+
130150
<h2 id="sustainability">Sustainability Over Extraction</h2>
131151
<p>
132152
OpenScan&apos;s business model is designed to be ethical, non-extractive,
@@ -156,6 +176,11 @@ export default function ValuesPage() {
156176
description="All development takes place in public, auditable repositories. We use open-source tools wherever possible to maintain independence."
157177
icon={<Blocks className="h-5 w-5" />}
158178
/>
179+
<InfoCard
180+
title="Walkaway Test"
181+
description="If the team vanished tomorrow, the client-side explorer would continue to work with any RPC endpoint. No single entity is required for OpenScan to function."
182+
icon={<Footprints className="h-5 w-5" />}
183+
/>
159184
</div>
160185

161186
<h2 id="the-pledge">The Pledge</h2>

components/docs-components.tsx

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,19 +55,34 @@ interface LinkCardProps {
5555
title: string
5656
description: string
5757
icon: React.ReactNode
58+
external?: boolean
5859
}
5960

60-
export function LinkCard({ href, title, description, icon }: LinkCardProps) {
61+
export function LinkCard({ href, title, description, icon, external }: LinkCardProps) {
62+
const content = (
63+
<div className="rounded-xl border border-border bg-card p-5 transition-colors hover:border-accent/40 h-full">
64+
<h3 className="!mt-0 font-semibold text-foreground mb-1.5 flex items-center gap-2">
65+
{icon}
66+
{title}
67+
{!external && (
68+
<ArrowRight className="h-3.5 w-3.5 opacity-0 -translate-x-1 group-hover:opacity-100 group-hover:translate-x-0 transition-all" />
69+
)}
70+
</h3>
71+
<p className="text-sm leading-relaxed text-muted-foreground">{description}</p>
72+
</div>
73+
)
74+
75+
if (external) {
76+
return (
77+
<a href={href} target="_blank" rel="noopener noreferrer" className="group !no-underline hover:!no-underline">
78+
{content}
79+
</a>
80+
)
81+
}
82+
6183
return (
6284
<Link href={href} className="group !no-underline hover:!no-underline">
63-
<div className="rounded-xl border border-border bg-card p-5 transition-colors hover:border-accent/40 h-full">
64-
<h3 className="!mt-0 font-semibold text-foreground mb-1.5 flex items-center gap-2">
65-
{icon}
66-
{title}
67-
<ArrowRight className="h-3.5 w-3.5 opacity-0 -translate-x-1 group-hover:opacity-100 group-hover:translate-x-0 transition-all" />
68-
</h3>
69-
<p className="text-sm leading-relaxed text-muted-foreground">{description}</p>
70-
</div>
85+
{content}
7186
</Link>
7287
)
7388
}

components/docs-sidebar.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
HelpCircle,
1616
BookOpen,
1717
Heart,
18+
Shield,
1819
} from "lucide-react"
1920
import { useState } from "react"
2021

@@ -36,6 +37,7 @@ const navigation: NavSection[] = [
3637
items: [
3738
{ title: "Introduction", href: "/introduction", icon: BookOpen },
3839
{ title: "Values", href: "/values", icon: Heart },
40+
{ title: "Alignment", href: "/alignment", icon: Shield },
3941
],
4042
},
4143
{
@@ -64,11 +66,8 @@ const navigation: NavSection[] = [
6466
title: "More",
6567
items: [
6668
{ title: "Tutorials", href: "/tutorials", icon: HelpCircle },
67-
// { title: "Comparison", href: "/comparison", icon: GitCompare },
6869
{ title: "Subscriptions", href: "/subscriptions", icon: Heart },
6970
{ title: "Contact", href: "/contact", icon: HelpCircle },
70-
// { title: "Supporters", href: "/supporters", icon: HelpCircle },
71-
// { title: "FAQs", href: "/faqs", icon: HelpCircle },
7271
],
7372
},
7473
]

0 commit comments

Comments
 (0)