mirror of
https://github.com/profullstack/logicsrc.git
synced 2026-08-14 23:07:29 +00:00
feat(openontology): implement OpenOntology Phase 0 + local engine and CLI (#99)
Implements OpenPRD 0001 through Phase 0 (specification, schemas, example, docs surface) and Phase 1 (local engine, CLI, conformance tests). Schemas (17 contracts, JSON Schema Draft 2020-12, additionalProperties:false) manifest, namespace, entity-type, property, relationship-type, constraint, query, action, entity, claim, source, evidence, changeset, review, approval, event, package — registered in @logicsrc/validators and exported from @logicsrc/schemas under https://logicsrc.com/schemas/openontology/. @logicsrc/openontology - canonical JSON + sha256 package digests; YAML, JSON, NDJSON, and inline authoring all compile to the same bytes, so digests are authoring-agnostic - id profile: compact / IRI / urn with one canonicalization rule, prefix bound by a Namespace object so IRIs reverse unambiguously - validation: schema, graph (domain/range, datatypes, dangling refs), provenance (source-or-firstParty, agent runId, derivation inputs), policy (excerpt limits, licensing, visibility, staleness) and declared constraints; four severities, stable codes, text/json/yaml/markdown - portable triple-pattern query AST: multi-hop, 14 operators, asOf and recordedAsOf, per-status filtering, distinct/order/limit, explanation mode, and enforced depth/binding/row limits - append-only store: claims are immutable; dispute/retract/supersede append status transitions and the effective status is the latest one - change sets: 9 operations, atomic pre-flight, conflict detection on stale base revisions, semantic diff with duplicate-identity warnings and affected-query deltas, per-operation reviewer decisions - policy: agents propose but can never apply — the denial keys on actor type, so every scope plus high confidence plus --yolo still cannot apply; merges need approval, bulk retractions need two, undeclared action side effects are denied - JSON-LD 1.1 export/import with PROV-O aliases and lossy-field reporting - pluggable signature envelope with a jws-ed25519 reference profile and a fail-closed trust policy CLI: logicsrc ontology init|validate|lint|build|inspect, entity, claim, query, changeset, import, export, audit. Reads take --format, writes default to a proposal, exit codes are stable for CI. Example: examples/openontology/ethereum-ecosystem — 12 entity types, 17 relationship types, 63 entities, 169 claims, 25 sources, 31 evidence records, 5 saved queries, every claim lifecycle state, and a pending merge proposal. All data is fictional; the directory is removable without affecting any core test. Docs: docs/openontology{,-governance,-interoperability}.md, a real /openontology route, homepage + nav + sitemap entries, and a root README section. Verification: 112 new tests; full monorepo build and every workspace test pass; conformance bundle (18 valid + 13 invalid fixtures) runs against the published schemas alone; Node.js 25 and Bun 1.3 produce byte-identical digests, revisions, event trails, and query results. Not included (later PRD phases): MCP resources, REST/SSE, Turso adapter, TUI and PWA surfaces, RDF/SHACL mappings, source adapters, governed actions. Refs: prd/0001-add-logicsrc-openontology-spec.md Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
0d9dab0447
commit
58c942c67f
101 changed files with 11934 additions and 10 deletions
64
examples/openontology/ethereum-ecosystem/README.md
Normal file
64
examples/openontology/ethereum-ecosystem/README.md
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
# Ethereum Ecosystem Ontology (example)
|
||||
|
||||
A demonstration package for [LogicSRC OpenOntology](../../../docs/openontology.md): an open map of
|
||||
people, organizations, projects, codebases, research topics, protocols, networks, layer 2s,
|
||||
applications, funding programs, publications, and events.
|
||||
|
||||
> **Every person, organization, project, and source in this package is fictional.** It exists to
|
||||
> demonstrate the contract, not to describe anyone real. Automated tests never depend on live
|
||||
> public profiles, and nothing here implies endorsement by any real project or person.
|
||||
|
||||
The Ethereum framing is an *example*, not part of the core vocabulary. Delete this directory and
|
||||
every core OpenOntology test still passes.
|
||||
|
||||
## What it covers
|
||||
|
||||
| | |
|
||||
| --- | --- |
|
||||
| Entity types | 12 |
|
||||
| Relationship types | 17 |
|
||||
| Entities | 63 |
|
||||
| Claims | 169 |
|
||||
| Sources | 25 |
|
||||
| Evidence records | 31 |
|
||||
| Saved queries | 5 |
|
||||
|
||||
Every claim lifecycle state appears at least once: `asserted`, `proposed` (an agent extraction
|
||||
awaiting review), `disputed` (with the counter-claim that disputes it), `retracted` (kept on the
|
||||
record, out of the current view), `superseded` (an affiliation that ended and what replaced it),
|
||||
and `derived` (with its rule and input claims).
|
||||
|
||||
`changesets/merge-haddad.yaml` is a pending merge proposal for a deliberate near-duplicate identity
|
||||
— the kind of thing entity resolution surfaces and a curator decides.
|
||||
|
||||
## Try it
|
||||
|
||||
```bash
|
||||
logicsrc ontology validate . --strict
|
||||
logicsrc ontology inspect .
|
||||
logicsrc ontology query list --dir .
|
||||
|
||||
# three hops: network → layer 2 → application → maintaining organization
|
||||
logicsrc ontology query run orgs-behind-a-network --dir .
|
||||
|
||||
# what still needs a human decision
|
||||
logicsrc ontology query run claims-needing-review --dir . --status proposed,disputed
|
||||
|
||||
# why does the ontology say this?
|
||||
logicsrc ontology query explain orgs-behind-a-network --dir . --row 0
|
||||
|
||||
# what a reviewer sees for the pending merge
|
||||
logicsrc ontology changeset diff changesets/merge-haddad.yaml --dir .
|
||||
```
|
||||
|
||||
## Regenerating
|
||||
|
||||
The package files are generated so the data stays internally consistent and the digest stays
|
||||
deterministic:
|
||||
|
||||
```bash
|
||||
node tools/generate.mjs
|
||||
logicsrc ontology validate . --strict
|
||||
```
|
||||
|
||||
Edit `tools/generate.mjs`, not the generated `schema/` and `data/` files.
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
openontology: "0.1"
|
||||
kind: ChangeSet
|
||||
id: changeset:merge-haddad
|
||||
ontology: ethereum-ecosystem@0.1.0
|
||||
title: Merge S. Haddad into Samir Haddad
|
||||
rationale: "Both records point at the same contributor: identical alias handle, same organization, overlapping
|
||||
commits on light-client-rs."
|
||||
createdAt: 2026-07-26T00:00:00Z
|
||||
createdBy: agent:research-mapper
|
||||
actorType: agent
|
||||
runId: run_01J3EXAMPLE
|
||||
operations:
|
||||
- op: merge-entity
|
||||
source: eth:person:s-haddad
|
||||
target: eth:person:samir-haddad
|
||||
reason: Same person; the shorter record was created from a commit signature.
|
||||
requiredApprovals: 1
|
||||
status: proposed
|
||||
169
examples/openontology/ethereum-ecosystem/data/claims.ndjson
Normal file
169
examples/openontology/ethereum-ecosystem/data/claims.ndjson
Normal file
|
|
@ -0,0 +1,169 @@
|
|||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0001","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:avery-lindqvist","predicate":"worksAt","object":{"entity":"eth:org:northwind-labs"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:northwind-team"],"validTime":{"from":"2023-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0002","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:marisol-tan","predicate":"worksAt","object":{"entity":"eth:org:northwind-labs"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:northwind-team"],"validTime":{"from":"2024-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0003","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:dev-okafor","predicate":"worksAt","object":{"entity":"eth:org:northwind-labs"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:northwind-team"],"validTime":{"from":"2022-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0004","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:ingrid-halvorsen","predicate":"worksAt","object":{"entity":"eth:org:bluebird-foundation"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:bluebird-team"],"validTime":{"from":"2021-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0005","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:rafael-benitez","predicate":"worksAt","object":{"entity":"eth:org:bluebird-foundation"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:bluebird-team"],"validTime":{"from":"2024-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0006","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:yuki-shimada","predicate":"worksAt","object":{"entity":"eth:org:cinder-collective"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:cinder-team"],"validTime":{"from":"2023-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0007","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:nadia-farouk","predicate":"worksAt","object":{"entity":"eth:org:cinder-collective"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:cinder-team"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0008","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:tomas-vrba","predicate":"worksAt","object":{"entity":"eth:org:harbor-research"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:harbor-team"],"validTime":{"from":"2022-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0009","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:priya-raghavan","predicate":"worksAt","object":{"entity":"eth:org:harbor-research"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:harbor-team"],"validTime":{"from":"2023-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0010","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:kwame-mensah","predicate":"worksAt","object":{"entity":"eth:org:tessellate-dao"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:northwind-team"],"validTime":{"from":"2024-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0011","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:lena-brandt","predicate":"worksAt","object":{"entity":"eth:org:tessellate-dao"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:northwind-team"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0012","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:oscar-delgado","predicate":"worksAt","object":{"entity":"eth:org:quill-systems"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:northwind-team"],"validTime":{"from":"2023-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0013","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:hana-kovacs","predicate":"worksAt","object":{"entity":"eth:org:quill-systems"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:northwind-team"],"validTime":{"from":"2024-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0014","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:samir-haddad","predicate":"worksAt","object":{"entity":"eth:org:quill-systems"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:northwind-team"],"validTime":{"from":"2022-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0015","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:cinder-collective","predicate":"memberOf","object":{"entity":"eth:org:tessellate-dao"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:tessellate-members"],"validTime":{"from":"2024-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0016","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:quill-systems","predicate":"memberOf","object":{"entity":"eth:org:tessellate-dao"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:tessellate-members"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0017","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:avery-lindqvist","predicate":"worksOn","object":{"entity":"eth:project:zk-prover"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2024-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:001"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0018","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:marisol-tan","predicate":"worksOn","object":{"entity":"eth:project:zk-prover"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:002"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0019","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:dev-okafor","predicate":"worksOn","object":{"entity":"eth:project:ledger-indexer"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2023-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:003"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0020","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:ingrid-halvorsen","predicate":"worksOn","object":{"entity":"eth:project:state-sync"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2022-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:004"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0021","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:rafael-benitez","predicate":"worksOn","object":{"entity":"eth:project:rollup-bridge"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:005"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0022","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:yuki-shimada","predicate":"worksOn","object":{"entity":"eth:project:account-toolkit"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2024-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:006"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0023","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:nadia-farouk","predicate":"worksOn","object":{"entity":"eth:project:mempool-observatory"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:007"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0024","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:tomas-vrba","predicate":"worksOn","object":{"entity":"eth:project:light-client"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2023-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:008"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0025","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:priya-raghavan","predicate":"worksOn","object":{"entity":"eth:project:zk-prover"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:009"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0026","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:kwame-mensah","predicate":"worksOn","object":{"entity":"eth:project:rollup-bridge"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2024-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:010"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0027","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:lena-brandt","predicate":"worksOn","object":{"entity":"eth:project:docs-portal"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:011"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0028","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:oscar-delgado","predicate":"worksOn","object":{"entity":"eth:project:state-sync"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2024-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:012"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0029","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:hana-kovacs","predicate":"worksOn","object":{"entity":"eth:project:account-toolkit"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:013"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0030","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:samir-haddad","predicate":"worksOn","object":{"entity":"eth:project:light-client"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2023-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:014"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0031","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:avery-lindqvist","predicate":"worksOn","object":{"entity":"eth:project:light-client"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2026-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:015"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0032","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:dev-okafor","predicate":"worksOn","object":{"entity":"eth:project:mempool-observatory"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2026-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:016"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0033","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:priya-raghavan","predicate":"worksOn","object":{"entity":"eth:project:docs-portal"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2026-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:017"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0034","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:yuki-shimada","predicate":"worksOn","object":{"entity":"eth:project:rollup-bridge"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2026-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:018"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0035","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:avery-lindqvist","predicate":"contributesTo","object":{"entity":"eth:code:zk-prover-core"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:commit-a41f"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:019"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0036","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:marisol-tan","predicate":"contributesTo","object":{"entity":"eth:code:zk-prover-core"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:commit-a41f"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:020"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0037","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:priya-raghavan","predicate":"contributesTo","object":{"entity":"eth:code:zk-prover-cli"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:commit-a41f"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:021"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0038","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:dev-okafor","predicate":"contributesTo","object":{"entity":"eth:code:indexer-node"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:commit-b72c"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:022"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0039","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:dev-okafor","predicate":"contributesTo","object":{"entity":"eth:code:indexer-schema"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:commit-b72c"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:023"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0040","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:ingrid-halvorsen","predicate":"contributesTo","object":{"entity":"eth:code:sync-engine"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:commit-c93d"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:024"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0041","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:oscar-delgado","predicate":"contributesTo","object":{"entity":"eth:code:sync-engine"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:commit-c93d"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:025"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0042","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:rafael-benitez","predicate":"contributesTo","object":{"entity":"eth:code:bridge-contracts"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:commit-d10e"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:026"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0043","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:kwame-mensah","predicate":"contributesTo","object":{"entity":"eth:code:bridge-contracts"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:commit-d10e"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:027"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0044","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:yuki-shimada","predicate":"contributesTo","object":{"entity":"eth:code:account-sdk"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:commit-a41f"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:028"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0045","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:hana-kovacs","predicate":"contributesTo","object":{"entity":"eth:code:account-sdk"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:commit-a41f"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:029"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0046","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:tomas-vrba","predicate":"contributesTo","object":{"entity":"eth:code:light-client-rs"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:commit-c93d"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:030"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0047","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:samir-haddad","predicate":"contributesTo","object":{"entity":"eth:code:light-client-rs"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:commit-c93d"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"evidence":["eth:evidence:031"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0048","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:northwind-labs","predicate":"maintains","object":{"entity":"eth:code:zk-prover-core"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:zk-prover-readme"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0049","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:northwind-labs","predicate":"maintains","object":{"entity":"eth:code:zk-prover-cli"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:zk-prover-readme"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0050","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:northwind-labs","predicate":"maintains","object":{"entity":"eth:code:indexer-node"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:indexer-readme"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0051","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:bluebird-foundation","predicate":"maintains","object":{"entity":"eth:code:indexer-schema"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:indexer-readme"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0052","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:bluebird-foundation","predicate":"maintains","object":{"entity":"eth:code:sync-engine"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:sync-readme"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0053","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:cinder-collective","predicate":"maintains","object":{"entity":"eth:code:bridge-contracts"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:bridge-readme"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0054","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:quill-systems","predicate":"maintains","object":{"entity":"eth:code:account-sdk"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:account-readme"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0055","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:harbor-research","predicate":"maintains","object":{"entity":"eth:code:light-client-rs"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:light-readme"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0056","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:northwind-labs","predicate":"builds","object":{"entity":"eth:project:zk-prover"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2024-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0057","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:northwind-labs","predicate":"builds","object":{"entity":"eth:project:ledger-indexer"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2023-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0058","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:bluebird-foundation","predicate":"builds","object":{"entity":"eth:project:state-sync"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2022-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0059","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:cinder-collective","predicate":"builds","object":{"entity":"eth:project:rollup-bridge"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2024-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0060","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:quill-systems","predicate":"builds","object":{"entity":"eth:project:account-toolkit"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2024-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0061","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:harbor-research","predicate":"builds","object":{"entity":"eth:project:light-client"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2023-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0062","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:tessellate-dao","predicate":"builds","object":{"entity":"eth:project:docs-portal"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0063","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:cinder-collective","predicate":"builds","object":{"entity":"eth:project:mempool-observatory"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0064","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:zk-prover","predicate":"investigates","object":{"entity":"eth:topic:zero-knowledge"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0065","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:rollup-bridge","predicate":"investigates","object":{"entity":"eth:topic:data-availability"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0066","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:account-toolkit","predicate":"investigates","object":{"entity":"eth:topic:account-abstraction"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0067","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:mempool-observatory","predicate":"investigates","object":{"entity":"eth:topic:mev-mitigation"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0068","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:light-client","predicate":"investigates","object":{"entity":"eth:topic:consensus-safety"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0069","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:state-sync","predicate":"investigates","object":{"entity":"eth:topic:consensus-safety"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0070","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:avery-lindqvist","predicate":"investigates","object":{"entity":"eth:topic:zero-knowledge"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0071","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:priya-raghavan","predicate":"investigates","object":{"entity":"eth:topic:zero-knowledge"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0072","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:yuki-shimada","predicate":"investigates","object":{"entity":"eth:topic:account-abstraction"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0073","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:nadia-farouk","predicate":"investigates","object":{"entity":"eth:topic:mev-mitigation"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0074","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:tomas-vrba","predicate":"investigates","object":{"entity":"eth:topic:consensus-safety"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0075","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:harbor-research","predicate":"investigates","object":{"entity":"eth:topic:data-availability"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0076","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:zk-prover-core","predicate":"implements","object":{"entity":"eth:protocol:proof-envelope"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:spec-index"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0077","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:zk-prover-cli","predicate":"implements","object":{"entity":"eth:protocol:proof-envelope"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:spec-index"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0078","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:account-sdk","predicate":"implements","object":{"entity":"eth:protocol:account-ops"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:spec-index"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0079","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:bridge-contracts","predicate":"implements","object":{"entity":"eth:protocol:blob-commit"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:spec-index"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0080","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:light-client-rs","predicate":"implements","object":{"entity":"eth:protocol:light-sync"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:spec-index"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0081","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:sync-engine","predicate":"implements","object":{"entity":"eth:protocol:light-sync"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:spec-index"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0082","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:indexer-node","predicate":"implements","object":{"entity":"eth:protocol:blob-commit"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:spec-index"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0083","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:indexer-schema","predicate":"implements","object":{"entity":"eth:protocol:blob-commit"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:spec-index"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0084","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:zk-prover","predicate":"uses","object":{"entity":"eth:protocol:proof-envelope"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0085","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:rollup-bridge","predicate":"uses","object":{"entity":"eth:protocol:blob-commit"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0086","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:account-toolkit","predicate":"uses","object":{"entity":"eth:protocol:account-ops"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0087","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:light-client","predicate":"uses","object":{"entity":"eth:protocol:light-sync"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0088","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:app:swap-desk","predicate":"uses","object":{"entity":"eth:code:account-sdk"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0089","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:app:lend-pool","predicate":"uses","object":{"entity":"eth:code:account-sdk"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0090","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:app:name-registry","predicate":"uses","object":{"entity":"eth:protocol:account-ops"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0091","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:app:vault-manager","predicate":"uses","object":{"entity":"eth:code:bridge-contracts"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0092","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:ledger-indexer","predicate":"uses","object":{"entity":"eth:code:indexer-schema"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0093","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:state-sync","predicate":"uses","object":{"entity":"eth:protocol:light-sync"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0094","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:l2:tessera","predicate":"deployedOn","object":{"entity":"eth:network:mainnet-sim"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:l2-registry"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0095","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:l2:cascade","predicate":"deployedOn","object":{"entity":"eth:network:mainnet-sim"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:l2-registry"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0096","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:l2:lattice","predicate":"deployedOn","object":{"entity":"eth:network:testnet-sim"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:l2-registry"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0097","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:app:swap-desk","predicate":"runsOn","object":{"entity":"eth:l2:tessera"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:app-registry"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0098","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:app:lend-pool","predicate":"runsOn","object":{"entity":"eth:l2:tessera"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:app-registry"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0099","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:app:name-registry","predicate":"runsOn","object":{"entity":"eth:l2:cascade"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:app-registry"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0100","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:app:vault-manager","predicate":"runsOn","object":{"entity":"eth:network:mainnet-sim"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:app-registry"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0101","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:app:swap-desk","predicate":"runsOn","object":{"entity":"eth:l2:lattice"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:app-registry"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0102","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:zk-prover-cli","predicate":"dependsOn","object":{"entity":"eth:code:zk-prover-core"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0103","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:indexer-schema","predicate":"dependsOn","object":{"entity":"eth:code:indexer-node"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0104","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:bridge-contracts","predicate":"dependsOn","object":{"entity":"eth:code:zk-prover-core"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0105","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:account-sdk","predicate":"dependsOn","object":{"entity":"eth:code:indexer-schema"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0106","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:light-client-rs","predicate":"dependsOn","object":{"entity":"eth:code:sync-engine"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0107","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:sync-engine","predicate":"dependsOn","object":{"entity":"eth:code:zk-prover-core"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0108","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:indexer-node","predicate":"dependsOn","object":{"entity":"eth:code:sync-engine"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0109","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:account-sdk","predicate":"dependsOn","object":{"entity":"eth:code:bridge-contracts"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0110","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:zk-prover-cli","predicate":"forkedFrom","object":{"entity":"eth:code:zk-prover-core"},"status":"asserted","confidence":0.75,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0111","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:light-client-rs","predicate":"forkedFrom","object":{"entity":"eth:code:sync-engine"},"status":"asserted","confidence":0.75,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0112","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:indexer-schema","predicate":"forkedFrom","object":{"entity":"eth:code:indexer-node"},"status":"asserted","confidence":0.75,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:dependency-manifest"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0113","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:avery-lindqvist","predicate":"authored","object":{"entity":"eth:pub:recursive-proofs-paper"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0114","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:priya-raghavan","predicate":"authored","object":{"entity":"eth:pub:recursive-proofs-paper"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0115","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:yuki-shimada","predicate":"authored","object":{"entity":"eth:pub:aa-survey"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0116","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:hana-kovacs","predicate":"authored","object":{"entity":"eth:pub:aa-survey"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0117","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:tomas-vrba","predicate":"authored","object":{"entity":"eth:pub:da-sampling-note"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0118","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:ingrid-halvorsen","predicate":"authored","object":{"entity":"eth:pub:da-sampling-note"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:paper-index"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0119","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:avery-lindqvist","predicate":"collaboratesWith","object":{"entity":"eth:person:priya-raghavan"},"status":"asserted","confidence":0.8,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:proof-summit-program"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0120","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:yuki-shimada","predicate":"collaboratesWith","object":{"entity":"eth:person:hana-kovacs"},"status":"asserted","confidence":0.8,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:proof-summit-program"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0121","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:tomas-vrba","predicate":"collaboratesWith","object":{"entity":"eth:person:ingrid-halvorsen"},"status":"asserted","confidence":0.8,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:proof-summit-program"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0122","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:dev-okafor","predicate":"collaboratesWith","object":{"entity":"eth:person:nadia-farouk"},"status":"asserted","confidence":0.8,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:proof-summit-program"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0123","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:rafael-benitez","predicate":"collaboratesWith","object":{"entity":"eth:person:kwame-mensah"},"status":"asserted","confidence":0.8,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:proof-summit-program"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0124","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:marisol-tan","predicate":"collaboratesWith","object":{"entity":"eth:person:avery-lindqvist"},"status":"asserted","confidence":0.8,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:proof-summit-program"]}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0125","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:fund:open-proofs-fund","predicate":"funds","object":{"entity":"eth:project:zk-prover"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:grants-ledger"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0126","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:fund:open-proofs-fund","predicate":"funds","object":{"entity":"eth:topic:zero-knowledge"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:grants-ledger"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0127","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:fund:public-goods-round","predicate":"funds","object":{"entity":"eth:project:docs-portal"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:grants-ledger"],"validTime":{"from":"2026-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0128","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:fund:public-goods-round","predicate":"funds","object":{"entity":"eth:project:light-client"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:grants-ledger"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0129","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:fund:research-stipends","predicate":"funds","object":{"entity":"eth:topic:data-availability"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:grants-ledger"],"validTime":{"from":"2026-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0130","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:fund:research-stipends","predicate":"funds","object":{"entity":"eth:topic:consensus-safety"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:grants-ledger"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0131","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:avery-lindqvist","predicate":"focus","object":{"value":"Recursive proof systems"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0132","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:avery-lindqvist","predicate":"startedIn","object":{"value":2019},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0133","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:yuki-shimada","predicate":"focus","object":{"value":"Wallet and account UX"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0134","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:tomas-vrba","predicate":"focus","object":{"value":"Light client security"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0135","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:northwind-labs","predicate":"homepage","object":{"value":"https://example.org/northwind"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0136","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:bluebird-foundation","predicate":"homepage","object":{"value":"https://example.org/bluebird"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0137","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:northwind-labs","predicate":"kind","object":{"value":"company"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0138","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:bluebird-foundation","predicate":"kind","object":{"value":"foundation"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0139","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:tessellate-dao","predicate":"kind","object":{"value":"dao"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0140","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:zk-prover","predicate":"homepage","object":{"value":"https://example.org/zk-prover"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0141","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:zk-prover","predicate":"startedOn","object":{"value":"2024-03-01"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0142","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:ledger-indexer","predicate":"homepage","object":{"value":"https://example.org/ledger-indexer"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0143","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:project:light-client","predicate":"homepage","object":{"value":"https://example.org/light-client"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0144","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:zk-prover-core","predicate":"language","object":{"value":"Rust"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0145","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:indexer-node","predicate":"language","object":{"value":"Go"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0146","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:account-sdk","predicate":"language","object":{"value":"TypeScript"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0147","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:bridge-contracts","predicate":"language","object":{"value":"Solidity"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0148","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:zk-prover-core","predicate":"license","object":{"value":"Apache-2.0"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0149","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:account-sdk","predicate":"license","object":{"value":"MIT"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0150","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:code:zk-prover-core","predicate":"repository","object":{"value":"https://example.org/repo/zk-prover"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0151","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:protocol:proof-envelope","predicate":"specification","object":{"value":"https://example.org/specs/proof-envelope"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0152","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:network:mainnet-sim","predicate":"chainId","object":{"value":9001},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0153","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:network:testnet-sim","predicate":"chainId","object":{"value":9002},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0154","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:l2:tessera","predicate":"proofSystem","object":{"value":"validity"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0155","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:l2:cascade","predicate":"proofSystem","object":{"value":"fraud"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0156","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:l2:lattice","predicate":"proofSystem","object":{"value":"hybrid"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0157","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:fund:open-proofs-fund","predicate":"budgetUsd","object":{"value":250000},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0158","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:fund:public-goods-round","predicate":"budgetUsd","object":{"value":90000},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0159","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:pub:recursive-proofs-paper","predicate":"published","object":{"value":"2025-11-04"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0160","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:pub:aa-survey","predicate":"published","object":{"value":"2026-02-17"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0161","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:event:proof-summit","predicate":"held","object":{"value":"2026-05-12"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0162","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:event:rollup-workshop","predicate":"held","object":{"value":"2026-06-23"},"status":"asserted","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","firstParty":true}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0163","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:lena-brandt","predicate":"worksOn","object":{"entity":"eth:project:mempool-observatory"},"status":"proposed","confidence":0.61,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"agent:research-mapper","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2026-07-01T00:00:00Z","to":null},"runId":"run_01J3EXAMPLE","model":{"provider":"example-provider","model":"example-extractor-1","promptVersion":"map-sources-to-claims@3","extractedAt":"2026-07-26T00:00:00Z","rationale":"Roadmap lists Lena under the observatory workstream; no commit activity yet."}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0164","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:kwame-mensah","predicate":"worksOn","object":{"entity":"eth:project:state-sync"},"status":"disputed","confidence":0.55,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0165","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:kwame-mensah","predicate":"worksOn","object":{"entity":"eth:project:rollup-bridge"},"status":"asserted","confidence":0.93,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:commit-d10e"],"validTime":{"from":"2025-01-01T00:00:00Z","to":null},"disputes":"eth:claim:0164"}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0166","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:oscar-delgado","predicate":"worksOn","object":{"entity":"eth:project:docs-portal"},"status":"retracted","confidence":0.4,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:roadmap-2026"],"validTime":{"from":"2024-01-01T00:00:00Z","to":null},"retractionReason":"Confused with a same-named contributor on another project."}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0167","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:marisol-tan","predicate":"worksAt","object":{"entity":"eth:org:bluebird-foundation"},"status":"superseded","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:bluebird-team"],"validTime":{"from":"2022-01-01T00:00:00Z","to":"2024-01-01T00:00:00Z"}}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0168","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:person:marisol-tan","predicate":"worksAt","object":{"entity":"eth:org:northwind-labs"},"status":"asserted","confidence":0.9,"assertedAt":"2026-07-26T00:00:00Z","assertedBy":"mailto:curator@example.org","sources":["eth:source:northwind-team"],"validTime":{"from":"2024-01-01T00:00:00Z","to":null},"supersedes":"eth:claim:0167"}
|
||||
{"openontology":"0.1","kind":"Claim","id":"eth:claim:0169","ontology":"ethereum-ecosystem@0.1.0","subject":"eth:org:northwind-labs","predicate":"investigates","object":{"entity":"eth:topic:zero-knowledge"},"status":"derived","confidence":0.7,"observedAt":"2026-07-26T00:00:00Z","assertedAt":"2026-07-26T00:00:00Z","assertedBy":"service:rule-engine","derivedFrom":{"rule":"org-investigates-topic-of-its-contributors","inputs":["eth:claim:0035"]}}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
{"openontology":"0.1","kind":"Entity","id":"eth:person:avery-lindqvist","type":"Person","canonicalName":"Avery Lindqvist","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","aliases":["avery.eth"],"externalIds":{"github":"averyl"}}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:person:marisol-tan","type":"Person","canonicalName":"Marisol Tan","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","externalIds":{"github":"mtan"}}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:person:dev-okafor","type":"Person","canonicalName":"Dev Okafor","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","aliases":["devo"]}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:person:ingrid-halvorsen","type":"Person","canonicalName":"Ingrid Halvorsen","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:person:rafael-benitez","type":"Person","canonicalName":"Rafael Benitez","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","externalIds":{"github":"rbenitez"}}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:person:yuki-shimada","type":"Person","canonicalName":"Yuki Shimada","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","aliases":["yuki.eth"]}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:person:nadia-farouk","type":"Person","canonicalName":"Nadia Farouk","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:person:tomas-vrba","type":"Person","canonicalName":"Tomas Vrba","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:person:priya-raghavan","type":"Person","canonicalName":"Priya Raghavan","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","externalIds":{"github":"praghavan"}}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:person:kwame-mensah","type":"Person","canonicalName":"Kwame Mensah","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:person:lena-brandt","type":"Person","canonicalName":"Lena Brandt","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:person:oscar-delgado","type":"Person","canonicalName":"Oscar Delgado","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:person:hana-kovacs","type":"Person","canonicalName":"Hana Kovacs","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:person:samir-haddad","type":"Person","canonicalName":"Samir Haddad","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","aliases":["samir.eth"]}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:person:s-haddad","type":"Person","canonicalName":"S. Haddad","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","aliases":["shaddad"]}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:org:northwind-labs","type":"Organization","canonicalName":"Northwind Labs","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:org:bluebird-foundation","type":"Organization","canonicalName":"Bluebird Foundation","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:org:cinder-collective","type":"Organization","canonicalName":"Cinder Collective","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:org:harbor-research","type":"Organization","canonicalName":"Harbor Research","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:org:tessellate-dao","type":"Organization","canonicalName":"Tessellate DAO","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:org:quill-systems","type":"Organization","canonicalName":"Quill Systems","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:project:zk-prover","type":"Project","canonicalName":"ZK Prover","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:project:ledger-indexer","type":"Project","canonicalName":"Ledger Indexer","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:project:state-sync","type":"Project","canonicalName":"State Sync","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:project:rollup-bridge","type":"Project","canonicalName":"Rollup Bridge","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:project:account-toolkit","type":"Project","canonicalName":"Account Toolkit","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:project:mempool-observatory","type":"Project","canonicalName":"Mempool Observatory","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:project:docs-portal","type":"Project","canonicalName":"Docs Portal","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:project:light-client","type":"Project","canonicalName":"Light Client","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:code:zk-prover-core","type":"Codebase","canonicalName":"zk-prover-core","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","extensions":{"eth:language":"Rust"}}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:code:zk-prover-cli","type":"Codebase","canonicalName":"zk-prover-cli","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","extensions":{"eth:language":"Rust"}}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:code:indexer-node","type":"Codebase","canonicalName":"indexer-node","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","extensions":{"eth:language":"Go"}}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:code:indexer-schema","type":"Codebase","canonicalName":"indexer-schema","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","extensions":{"eth:language":"TypeScript"}}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:code:sync-engine","type":"Codebase","canonicalName":"sync-engine","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","extensions":{"eth:language":"Rust"}}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:code:bridge-contracts","type":"Codebase","canonicalName":"bridge-contracts","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","extensions":{"eth:language":"Solidity"}}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:code:account-sdk","type":"Codebase","canonicalName":"account-sdk","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","extensions":{"eth:language":"TypeScript"}}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:code:light-client-rs","type":"Codebase","canonicalName":"light-client-rs","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","extensions":{"eth:language":"Rust"}}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:topic:zero-knowledge","type":"ResearchTopic","canonicalName":"Zero Knowledge Proofs","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:topic:account-abstraction","type":"ResearchTopic","canonicalName":"Account Abstraction","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:topic:data-availability","type":"ResearchTopic","canonicalName":"Data Availability","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:topic:consensus-safety","type":"ResearchTopic","canonicalName":"Consensus Safety","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:topic:mev-mitigation","type":"ResearchTopic","canonicalName":"MEV Mitigation","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:protocol:proof-envelope","type":"Protocol","canonicalName":"Proof Envelope Protocol","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:protocol:account-ops","type":"Protocol","canonicalName":"Account Operations Protocol","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:protocol:blob-commit","type":"Protocol","canonicalName":"Blob Commitment Protocol","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:protocol:light-sync","type":"Protocol","canonicalName":"Light Sync Protocol","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:network:mainnet-sim","type":"Network","canonicalName":"Mainnet Simulation","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","extensions":{"eth:chainId":9001}}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:network:testnet-sim","type":"Network","canonicalName":"Testnet Simulation","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org","extensions":{"eth:chainId":9002}}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:l2:tessera","type":"Layer2","canonicalName":"Tessera","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:l2:cascade","type":"Layer2","canonicalName":"Cascade","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:l2:lattice","type":"Layer2","canonicalName":"Lattice","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:app:swap-desk","type":"Application","canonicalName":"Swap Desk","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:app:lend-pool","type":"Application","canonicalName":"Lend Pool","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:app:name-registry","type":"Application","canonicalName":"Name Registry","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:app:vault-manager","type":"Application","canonicalName":"Vault Manager","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:fund:open-proofs-fund","type":"FundingProgram","canonicalName":"Open Proofs Fund","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:fund:public-goods-round","type":"FundingProgram","canonicalName":"Public Goods Round","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:fund:research-stipends","type":"FundingProgram","canonicalName":"Research Stipends","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:pub:recursive-proofs-paper","type":"Publication","canonicalName":"Recursive Proofs at Scale","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:pub:aa-survey","type":"Publication","canonicalName":"A Survey of Account Abstraction Designs","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:pub:da-sampling-note","type":"Publication","canonicalName":"Notes on Data Availability Sampling","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:event:proof-summit","type":"Event","canonicalName":"Proof Summit","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
{"openontology":"0.1","kind":"Entity","id":"eth:event:rollup-workshop","type":"Event","canonicalName":"Rollup Workshop","createdAt":"2026-07-26T00:00:00Z","createdBy":"mailto:curator@example.org"}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:001","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":26,"end":28}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:002","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":27,"end":29}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:003","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":28,"end":30}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:004","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":29,"end":31}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:005","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":30,"end":32}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:006","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":31,"end":33}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:007","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":32,"end":34}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:008","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":33,"end":35}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:009","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":34,"end":36}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:010","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":35,"end":37}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:011","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":36,"end":38}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:012","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":37,"end":39}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:013","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":38,"end":40}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:014","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":39,"end":41}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:015","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":40,"end":42}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:016","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":41,"end":43}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:017","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":42,"end":44}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:018","source":"eth:source:roadmap-2026","selector":{"type":"line-range","start":43,"end":45}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:019","source":"eth:source:commit-a41f","selector":{"type":"commit-path","path":"src/zk-prover-core.rs","commit":"a41f"}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:020","source":"eth:source:commit-a41f","selector":{"type":"commit-path","path":"src/zk-prover-core.rs","commit":"a41f"}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:021","source":"eth:source:commit-a41f","selector":{"type":"commit-path","path":"src/zk-prover-cli.rs","commit":"a41f"}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:022","source":"eth:source:commit-b72c","selector":{"type":"commit-path","path":"src/indexer-node.rs","commit":"b72c"}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:023","source":"eth:source:commit-b72c","selector":{"type":"commit-path","path":"src/indexer-schema.rs","commit":"b72c"}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:024","source":"eth:source:commit-c93d","selector":{"type":"commit-path","path":"src/sync-engine.rs","commit":"c93d"}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:025","source":"eth:source:commit-c93d","selector":{"type":"commit-path","path":"src/sync-engine.rs","commit":"c93d"}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:026","source":"eth:source:commit-d10e","selector":{"type":"commit-path","path":"src/bridge-contracts.rs","commit":"d10e"}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:027","source":"eth:source:commit-d10e","selector":{"type":"commit-path","path":"src/bridge-contracts.rs","commit":"d10e"}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:028","source":"eth:source:commit-a41f","selector":{"type":"commit-path","path":"src/account-sdk.rs","commit":"a41f"}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:029","source":"eth:source:commit-a41f","selector":{"type":"commit-path","path":"src/account-sdk.rs","commit":"a41f"}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:030","source":"eth:source:commit-c93d","selector":{"type":"commit-path","path":"src/light-client-rs.rs","commit":"c93d"}}
|
||||
{"openontology":"0.1","kind":"Evidence","id":"eth:evidence:031","source":"eth:source:commit-c93d","selector":{"type":"commit-path","path":"src/light-client-rs.rs","commit":"c93d"}}
|
||||
25
examples/openontology/ethereum-ecosystem/data/sources.ndjson
Normal file
25
examples/openontology/ethereum-ecosystem/data/sources.ndjson
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
{"openontology":"0.1","kind":"Source","id":"eth:source:northwind-team","sourceType":"web-page","uri":"https://example.org/team","title":"Northwind Labs team page","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:bluebird-team","sourceType":"web-page","uri":"https://example.org/bluebird/team","title":"Bluebird Foundation team page","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:cinder-team","sourceType":"web-page","uri":"https://example.org/cinder/team","title":"Cinder Collective contributors","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:harbor-team","sourceType":"web-page","uri":"https://example.org/harbor/people","title":"Harbor Research people","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:tessellate-members","sourceType":"web-page","uri":"https://example.org/tessellate/members","title":"Tessellate DAO members","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:quill-about","sourceType":"web-page","uri":"https://example.org/quill/about","title":"Quill Systems about page","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:zk-prover-readme","sourceType":"markdown","uri":"https://example.org/repo/zk-prover/README.md","title":"zk-prover README","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:indexer-readme","sourceType":"markdown","uri":"https://example.org/repo/indexer/README.md","title":"indexer README","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:sync-readme","sourceType":"markdown","uri":"https://example.org/repo/sync/README.md","title":"sync-engine README","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:bridge-readme","sourceType":"markdown","uri":"https://example.org/repo/bridge/README.md","title":"bridge-contracts README","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:account-readme","sourceType":"markdown","uri":"https://example.org/repo/account/README.md","title":"account-sdk README","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:light-readme","sourceType":"markdown","uri":"https://example.org/repo/light/README.md","title":"light-client README","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:commit-a41f","sourceType":"git-commit","uri":"https://example.org/repo/zk-prover/commit/a41f","title":"zk-prover commit a41f","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/plain","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:commit-b72c","sourceType":"git-commit","uri":"https://example.org/repo/indexer/commit/b72c","title":"indexer commit b72c","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/plain","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:commit-c93d","sourceType":"git-commit","uri":"https://example.org/repo/sync/commit/c93d","title":"sync-engine commit c93d","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/plain","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:commit-d10e","sourceType":"git-commit","uri":"https://example.org/repo/bridge/commit/d10e","title":"bridge commit d10e","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/plain","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:grants-ledger","sourceType":"api-response","uri":"https://example.org/api/grants","title":"Grants ledger API","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:roadmap-2026","sourceType":"web-page","uri":"https://example.org/roadmap/2026","title":"2026 ecosystem roadmap","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0","stale":true,"lastCheckedAt":"2026-07-26T00:00:00Z"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:proof-summit-program","sourceType":"web-page","uri":"https://example.org/events/proof-summit","title":"Proof Summit program","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:rollup-workshop-notes","sourceType":"web-page","uri":"https://example.org/events/rollup-workshop","title":"Rollup Workshop notes","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:l2-registry","sourceType":"api-response","uri":"https://example.org/api/l2s","title":"Layer-2 registry","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:app-registry","sourceType":"api-response","uri":"https://example.org/api/apps","title":"Application registry","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:spec-index","sourceType":"web-page","uri":"https://example.org/specs","title":"Protocol specification index","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:paper-index","sourceType":"web-page","uri":"https://example.org/papers","title":"Publication index","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
{"openontology":"0.1","kind":"Source","id":"eth:source:dependency-manifest","sourceType":"csv","uri":"https://example.org/data/dependencies.csv","title":"Dependency manifest export","publisher":"example.org","retrievedAt":"2026-07-26T00:00:00Z","mediaType":"text/html","license":"CC-BY-4.0"}
|
||||
25
examples/openontology/ethereum-ecosystem/openontology.yaml
Normal file
25
examples/openontology/ethereum-ecosystem/openontology.yaml
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
openontology: "0.1"
|
||||
kind: OntologyPackage
|
||||
id: ethereum-ecosystem
|
||||
name: Ethereum Ecosystem Ontology
|
||||
version: 0.1.0
|
||||
namespace: https://logicsrc.com/ontology/ethereum/
|
||||
description: An open map of people, organizations, projects, codebases, research topics, protocols, networks,
|
||||
and applications. All data in this package is fictional and exists to demonstrate the OpenOntology contract.
|
||||
license: CC-BY-4.0
|
||||
maintainers:
|
||||
- id: mailto:curator@example.org
|
||||
name: Example Curator
|
||||
imports: []
|
||||
schema:
|
||||
namespaces: schema/namespaces.yaml
|
||||
entityTypes: schema/entity-types.yaml
|
||||
properties: schema/properties.yaml
|
||||
relationships: schema/relationships.yaml
|
||||
constraints: schema/constraints.yaml
|
||||
queries: schema/queries.yaml
|
||||
data:
|
||||
entities: data/entities.ndjson
|
||||
claims: data/claims.ndjson
|
||||
sources: data/sources.ndjson
|
||||
evidence: data/evidence.ndjson
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
- openontology: "0.1"
|
||||
kind: Constraint
|
||||
id: codebase-has-language
|
||||
description: Every codebase should record its primary implementation language.
|
||||
severity: info
|
||||
remediation: Add a language claim for the codebase.
|
||||
rule:
|
||||
type: required-predicate
|
||||
entityType: Codebase
|
||||
predicate: language
|
||||
- openontology: "0.1"
|
||||
kind: Constraint
|
||||
id: layer2-settles-somewhere
|
||||
description: Every layer 2 must declare the network it settles to.
|
||||
severity: error
|
||||
remediation: Add a deployedOn claim from the layer 2 to its base network.
|
||||
rule:
|
||||
type: cardinality
|
||||
predicate: deployedOn
|
||||
entityType: Layer2
|
||||
min: 1
|
||||
max: 1
|
||||
- openontology: "0.1"
|
||||
kind: Constraint
|
||||
id: chain-ids-unique
|
||||
description: Two networks must not share a chain id.
|
||||
severity: error
|
||||
remediation: Correct the duplicated chainId claim.
|
||||
rule:
|
||||
type: unique
|
||||
predicate: chainId
|
||||
- openontology: "0.1"
|
||||
kind: Constraint
|
||||
id: proof-system-known
|
||||
description: A layer 2's proof system must be one of the three recognised kinds.
|
||||
severity: error
|
||||
rule:
|
||||
type: allowed-values
|
||||
predicate: proofSystem
|
||||
values:
|
||||
- validity
|
||||
- fraud
|
||||
- hybrid
|
||||
|
|
@ -0,0 +1,113 @@
|
|||
- openontology: "0.1"
|
||||
kind: EntityType
|
||||
id: Person
|
||||
label: Person
|
||||
description: A human participant in the ecosystem.
|
||||
keyProperties:
|
||||
- canonicalName
|
||||
properties:
|
||||
focus:
|
||||
type: string
|
||||
description: Primary area of work.
|
||||
startedIn:
|
||||
type: integer
|
||||
description: Year they began working in the ecosystem.
|
||||
- openontology: "0.1"
|
||||
kind: EntityType
|
||||
id: Organization
|
||||
label: Organization
|
||||
description: A company, foundation, DAO, collective, or working group.
|
||||
properties:
|
||||
homepage:
|
||||
type: url
|
||||
kind:
|
||||
type: enum
|
||||
enum:
|
||||
- company
|
||||
- foundation
|
||||
- dao
|
||||
- collective
|
||||
- openontology: "0.1"
|
||||
kind: EntityType
|
||||
id: Project
|
||||
label: Project
|
||||
description: A named body of work people and organizations contribute to.
|
||||
properties:
|
||||
homepage:
|
||||
type: url
|
||||
startedOn:
|
||||
type: date
|
||||
- openontology: "0.1"
|
||||
kind: EntityType
|
||||
id: Codebase
|
||||
label: Codebase
|
||||
description: A specific repository or source tree.
|
||||
properties:
|
||||
language:
|
||||
type: string
|
||||
license:
|
||||
type: string
|
||||
repository:
|
||||
type: url
|
||||
- openontology: "0.1"
|
||||
kind: EntityType
|
||||
id: ResearchTopic
|
||||
label: Research Topic
|
||||
description: A research direction the ecosystem is actively working on.
|
||||
- openontology: "0.1"
|
||||
kind: EntityType
|
||||
id: Protocol
|
||||
label: Protocol
|
||||
description: A specified protocol or standard.
|
||||
properties:
|
||||
specification:
|
||||
type: url
|
||||
- openontology: "0.1"
|
||||
kind: EntityType
|
||||
id: Network
|
||||
label: Network
|
||||
description: A live chain or network.
|
||||
properties:
|
||||
chainId:
|
||||
type: integer
|
||||
- openontology: "0.1"
|
||||
kind: EntityType
|
||||
id: Layer2
|
||||
label: Layer 2
|
||||
description: A layer-2 network settling to a base layer.
|
||||
properties:
|
||||
proofSystem:
|
||||
type: enum
|
||||
enum:
|
||||
- validity
|
||||
- fraud
|
||||
- hybrid
|
||||
- openontology: "0.1"
|
||||
kind: EntityType
|
||||
id: Application
|
||||
label: Application
|
||||
description: A user-facing application deployed on a network.
|
||||
- openontology: "0.1"
|
||||
kind: EntityType
|
||||
id: FundingProgram
|
||||
label: Funding Program
|
||||
description: A grants program, fund, or funding round.
|
||||
properties:
|
||||
budgetUsd:
|
||||
type: number
|
||||
- openontology: "0.1"
|
||||
kind: EntityType
|
||||
id: Publication
|
||||
label: Publication
|
||||
description: A paper, spec, or long-form writeup.
|
||||
properties:
|
||||
published:
|
||||
type: date
|
||||
- openontology: "0.1"
|
||||
kind: EntityType
|
||||
id: Event
|
||||
label: Event
|
||||
description: A conference, workshop, or summit.
|
||||
properties:
|
||||
held:
|
||||
type: date
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
- openontology: "0.1"
|
||||
kind: Namespace
|
||||
prefix: eth
|
||||
uri: https://logicsrc.com/ontology/ethereum/
|
||||
description: Compact id prefix for the Ethereum ecosystem example.
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
- openontology: "0.1"
|
||||
kind: Property
|
||||
id: focus
|
||||
label: focus
|
||||
description: A person's primary area of work.
|
||||
type: string
|
||||
- openontology: "0.1"
|
||||
kind: Property
|
||||
id: startedIn
|
||||
label: startedIn
|
||||
description: Year a person began working in the ecosystem.
|
||||
type: integer
|
||||
- openontology: "0.1"
|
||||
kind: Property
|
||||
id: homepage
|
||||
label: homepage
|
||||
description: Canonical URL.
|
||||
type: url
|
||||
- openontology: "0.1"
|
||||
kind: Property
|
||||
id: kind
|
||||
label: kind
|
||||
description: Organization kind.
|
||||
type: string
|
||||
- openontology: "0.1"
|
||||
kind: Property
|
||||
id: startedOn
|
||||
label: startedOn
|
||||
description: Date a project began.
|
||||
type: date
|
||||
- openontology: "0.1"
|
||||
kind: Property
|
||||
id: language
|
||||
label: language
|
||||
description: Primary implementation language of a codebase.
|
||||
type: string
|
||||
- openontology: "0.1"
|
||||
kind: Property
|
||||
id: license
|
||||
label: license
|
||||
description: SPDX license of a codebase.
|
||||
type: string
|
||||
- openontology: "0.1"
|
||||
kind: Property
|
||||
id: repository
|
||||
label: repository
|
||||
description: Repository URL.
|
||||
type: url
|
||||
- openontology: "0.1"
|
||||
kind: Property
|
||||
id: specification
|
||||
label: specification
|
||||
description: Specification URL.
|
||||
type: url
|
||||
- openontology: "0.1"
|
||||
kind: Property
|
||||
id: chainId
|
||||
label: chainId
|
||||
description: Network chain id.
|
||||
type: integer
|
||||
- openontology: "0.1"
|
||||
kind: Property
|
||||
id: proofSystem
|
||||
label: proofSystem
|
||||
description: Layer-2 proof system.
|
||||
type: string
|
||||
- openontology: "0.1"
|
||||
kind: Property
|
||||
id: budgetUsd
|
||||
label: budgetUsd
|
||||
description: Program budget in USD.
|
||||
type: number
|
||||
- openontology: "0.1"
|
||||
kind: Property
|
||||
id: published
|
||||
label: published
|
||||
description: Publication date.
|
||||
type: date
|
||||
- openontology: "0.1"
|
||||
kind: Property
|
||||
id: held
|
||||
label: held
|
||||
description: Event date.
|
||||
type: date
|
||||
122
examples/openontology/ethereum-ecosystem/schema/queries.yaml
Normal file
122
examples/openontology/ethereum-ecosystem/schema/queries.yaml
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
- openontology: "0.1"
|
||||
kind: SavedQuery
|
||||
id: people-working-on-topic
|
||||
label: People and organizations working on a research topic
|
||||
description: Every person working on a project that investigates the given research topic.
|
||||
parameters:
|
||||
topic:
|
||||
type: string
|
||||
required: true
|
||||
default: eth:topic:zero-knowledge
|
||||
query:
|
||||
match:
|
||||
- subject: ?person
|
||||
predicate: worksOn
|
||||
object: ?project
|
||||
- subject: ?project
|
||||
predicate: investigates
|
||||
object: $topic
|
||||
select:
|
||||
- ?person
|
||||
- ?project
|
||||
include:
|
||||
claimStatus:
|
||||
- asserted
|
||||
labels: true
|
||||
orderBy:
|
||||
- variable: ?person
|
||||
direction: asc
|
||||
- openontology: "0.1"
|
||||
kind: SavedQuery
|
||||
id: codebases-implementing-protocol
|
||||
label: Codebases implementing a protocol
|
||||
description: Which codebases implement the given protocol, and who maintains them.
|
||||
parameters:
|
||||
protocol:
|
||||
type: string
|
||||
required: true
|
||||
default: eth:protocol:proof-envelope
|
||||
query:
|
||||
match:
|
||||
- subject: ?codebase
|
||||
predicate: implements
|
||||
object: $protocol
|
||||
- subject: ?org
|
||||
predicate: maintains
|
||||
object: ?codebase
|
||||
select:
|
||||
- ?codebase
|
||||
- ?org
|
||||
include:
|
||||
claimStatus:
|
||||
- asserted
|
||||
labels: true
|
||||
- openontology: "0.1"
|
||||
kind: SavedQuery
|
||||
id: orgs-behind-a-network
|
||||
label: Organizations behind the codebases a network depends on
|
||||
description: "Three hops: layer 2 → application → codebase → maintaining organization."
|
||||
query:
|
||||
match:
|
||||
- subject: ?l2
|
||||
predicate: deployedOn
|
||||
object: ?network
|
||||
- subject: ?app
|
||||
predicate: runsOn
|
||||
object: ?l2
|
||||
- subject: ?app
|
||||
predicate: uses
|
||||
object: ?codebase
|
||||
- subject: ?org
|
||||
predicate: maintains
|
||||
object: ?codebase
|
||||
select:
|
||||
- ?network
|
||||
- ?l2
|
||||
- ?app
|
||||
- ?org
|
||||
include:
|
||||
claimStatus:
|
||||
- asserted
|
||||
labels: true
|
||||
distinct: true
|
||||
- openontology: "0.1"
|
||||
kind: SavedQuery
|
||||
id: funded-work
|
||||
label: Funded projects and research directions
|
||||
description: Which funding programs support which projects or research topics.
|
||||
query:
|
||||
match:
|
||||
- subject: ?fund
|
||||
predicate: funds
|
||||
object: ?target
|
||||
select:
|
||||
- ?fund
|
||||
- ?target
|
||||
include:
|
||||
claimStatus:
|
||||
- asserted
|
||||
labels: true
|
||||
orderBy:
|
||||
- variable: ?fund
|
||||
direction: asc
|
||||
- openontology: "0.1"
|
||||
kind: SavedQuery
|
||||
id: claims-needing-review
|
||||
label: Claims that still need a human decision
|
||||
description: Proposed and disputed claims, which a curator should accept, reject, or resolve.
|
||||
query:
|
||||
match:
|
||||
- subject: ?subject
|
||||
predicate: ?predicate
|
||||
object: ?object
|
||||
bindClaim: ?claim
|
||||
select:
|
||||
- ?claim
|
||||
- ?subject
|
||||
- ?predicate
|
||||
- ?object
|
||||
include:
|
||||
claimStatus:
|
||||
- proposed
|
||||
- disputed
|
||||
|
|
@ -0,0 +1,185 @@
|
|||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: worksAt
|
||||
label: works at
|
||||
description: A person is affiliated with an organization.
|
||||
from:
|
||||
- Person
|
||||
to:
|
||||
- Organization
|
||||
cardinality: many-to-many
|
||||
temporal: true
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: memberOf
|
||||
label: member of
|
||||
description: An organization belongs to a larger body.
|
||||
from:
|
||||
- Organization
|
||||
to:
|
||||
- Organization
|
||||
cardinality: many-to-many
|
||||
temporal: true
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: worksOn
|
||||
label: works on
|
||||
description: A person actively contributes work to a project.
|
||||
from:
|
||||
- Person
|
||||
to:
|
||||
- Project
|
||||
cardinality: many-to-many
|
||||
temporal: true
|
||||
inverse: hasContributor
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: hasContributor
|
||||
label: has contributor
|
||||
description: Inverse of worksOn.
|
||||
from:
|
||||
- Project
|
||||
to:
|
||||
- Person
|
||||
cardinality: many-to-many
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: contributesTo
|
||||
label: contributes to
|
||||
description: A person contributes to a codebase.
|
||||
from:
|
||||
- Person
|
||||
to:
|
||||
- Codebase
|
||||
cardinality: many-to-many
|
||||
temporal: true
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: maintains
|
||||
label: maintains
|
||||
description: An organization is responsible for a codebase.
|
||||
from:
|
||||
- Organization
|
||||
to:
|
||||
- Codebase
|
||||
cardinality: many-to-many
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: builds
|
||||
label: builds
|
||||
description: An organization builds a project.
|
||||
from:
|
||||
- Organization
|
||||
to:
|
||||
- Project
|
||||
cardinality: many-to-many
|
||||
temporal: true
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: funds
|
||||
label: funds
|
||||
description: A funding program supports a project or research topic.
|
||||
from:
|
||||
- FundingProgram
|
||||
to:
|
||||
- Project
|
||||
- ResearchTopic
|
||||
cardinality: many-to-many
|
||||
temporal: true
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: investigates
|
||||
label: investigates
|
||||
description: A project or person investigates a research topic.
|
||||
from:
|
||||
- Project
|
||||
- Person
|
||||
- Organization
|
||||
to:
|
||||
- ResearchTopic
|
||||
cardinality: many-to-many
|
||||
temporal: true
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: implements
|
||||
label: implements
|
||||
description: A codebase implements a protocol.
|
||||
from:
|
||||
- Codebase
|
||||
to:
|
||||
- Protocol
|
||||
cardinality: many-to-many
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: uses
|
||||
label: uses
|
||||
description: A project or application uses a protocol or codebase.
|
||||
from:
|
||||
- Project
|
||||
- Application
|
||||
to:
|
||||
- Protocol
|
||||
- Codebase
|
||||
cardinality: many-to-many
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: runsOn
|
||||
label: runs on
|
||||
description: An application runs on a network or layer 2.
|
||||
from:
|
||||
- Application
|
||||
to:
|
||||
- Network
|
||||
- Layer2
|
||||
cardinality: many-to-many
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: deployedOn
|
||||
label: deployed on
|
||||
description: A layer 2 settles to a base network.
|
||||
from:
|
||||
- Layer2
|
||||
to:
|
||||
- Network
|
||||
cardinality: many-to-many
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: dependsOn
|
||||
label: depends on
|
||||
description: A codebase depends on another codebase.
|
||||
from:
|
||||
- Codebase
|
||||
to:
|
||||
- Codebase
|
||||
cardinality: many-to-many
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: authored
|
||||
label: authored
|
||||
description: A person authored a publication.
|
||||
from:
|
||||
- Person
|
||||
to:
|
||||
- Publication
|
||||
cardinality: many-to-many
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: collaboratesWith
|
||||
label: collaborates with
|
||||
description: Two people work together.
|
||||
from:
|
||||
- Person
|
||||
to:
|
||||
- Person
|
||||
cardinality: many-to-many
|
||||
symmetric: true
|
||||
- openontology: "0.1"
|
||||
kind: RelationshipType
|
||||
id: forkedFrom
|
||||
label: forked from
|
||||
description: A codebase was forked from another.
|
||||
from:
|
||||
- Codebase
|
||||
to:
|
||||
- Codebase
|
||||
cardinality: many-to-many
|
||||
931
examples/openontology/ethereum-ecosystem/tools/generate.mjs
Normal file
931
examples/openontology/ethereum-ecosystem/tools/generate.mjs
Normal file
|
|
@ -0,0 +1,931 @@
|
|||
#!/usr/bin/env node
|
||||
/**
|
||||
* Generate the Ethereum ecosystem example package.
|
||||
*
|
||||
* Every person, organization, project, and source in here is FICTIONAL (R192).
|
||||
* The example demonstrates the shape of an ecosystem map — people, orgs,
|
||||
* codebases, protocols, L2s, research topics, funding — without depending on
|
||||
* live public profiles or implying anything about real projects.
|
||||
*
|
||||
* Run: node tools/generate.mjs
|
||||
*/
|
||||
import { mkdirSync, writeFileSync } from "node:fs";
|
||||
import { dirname, join } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { stringify as toYaml } from "yaml";
|
||||
|
||||
const ROOT = join(dirname(fileURLToPath(import.meta.url)), "..");
|
||||
const V = "0.1";
|
||||
const NOW = "2026-07-26T00:00:00Z";
|
||||
const PREFIX = "eth";
|
||||
const CURATOR = "mailto:curator@example.org";
|
||||
const MAPPER = "agent:research-mapper";
|
||||
const RUN = "run_01J3EXAMPLE";
|
||||
|
||||
const yaml = (relPath, value) => {
|
||||
mkdirSync(dirname(join(ROOT, relPath)), { recursive: true });
|
||||
writeFileSync(join(ROOT, relPath), toYaml(value, { lineWidth: 110 }), "utf8");
|
||||
};
|
||||
const ndjson = (relPath, rows) => {
|
||||
mkdirSync(dirname(join(ROOT, relPath)), { recursive: true });
|
||||
writeFileSync(join(ROOT, relPath), `${rows.map((r) => JSON.stringify(r)).join("\n")}\n`, "utf8");
|
||||
};
|
||||
|
||||
/* ── schema ─────────────────────────────────────────────────────────────── */
|
||||
|
||||
const entityType = (id, description, extra = {}) => ({
|
||||
openontology: V,
|
||||
kind: "EntityType",
|
||||
id,
|
||||
label: id.replace(/([a-z])([A-Z0-9])/g, "$1 $2"),
|
||||
description,
|
||||
...extra
|
||||
});
|
||||
|
||||
const entityTypes = [
|
||||
entityType("Person", "A human participant in the ecosystem.", {
|
||||
keyProperties: ["canonicalName"],
|
||||
properties: {
|
||||
focus: { type: "string", description: "Primary area of work." },
|
||||
startedIn: { type: "integer", description: "Year they began working in the ecosystem." }
|
||||
}
|
||||
}),
|
||||
entityType("Organization", "A company, foundation, DAO, collective, or working group.", {
|
||||
properties: { homepage: { type: "url" }, kind: { type: "enum", enum: ["company", "foundation", "dao", "collective"] } }
|
||||
}),
|
||||
entityType("Project", "A named body of work people and organizations contribute to.", {
|
||||
properties: { homepage: { type: "url" }, startedOn: { type: "date" } }
|
||||
}),
|
||||
entityType("Codebase", "A specific repository or source tree.", {
|
||||
properties: { language: { type: "string" }, license: { type: "string" }, repository: { type: "url" } }
|
||||
}),
|
||||
entityType("ResearchTopic", "A research direction the ecosystem is actively working on."),
|
||||
entityType("Protocol", "A specified protocol or standard.", { properties: { specification: { type: "url" } } }),
|
||||
entityType("Network", "A live chain or network.", { properties: { chainId: { type: "integer" } } }),
|
||||
entityType("Layer2", "A layer-2 network settling to a base layer.", {
|
||||
properties: { proofSystem: { type: "enum", enum: ["validity", "fraud", "hybrid"] } }
|
||||
}),
|
||||
entityType("Application", "A user-facing application deployed on a network."),
|
||||
entityType("FundingProgram", "A grants program, fund, or funding round.", {
|
||||
properties: { budgetUsd: { type: "number" } }
|
||||
}),
|
||||
entityType("Publication", "A paper, spec, or long-form writeup.", { properties: { published: { type: "date" } } }),
|
||||
entityType("Event", "A conference, workshop, or summit.", { properties: { held: { type: "date" } } })
|
||||
];
|
||||
|
||||
const rel = (id, label, description, from, to, extra = {}) => ({
|
||||
openontology: V,
|
||||
kind: "RelationshipType",
|
||||
id,
|
||||
label,
|
||||
description,
|
||||
from,
|
||||
to,
|
||||
cardinality: "many-to-many",
|
||||
...extra
|
||||
});
|
||||
|
||||
const relationships = [
|
||||
rel("worksAt", "works at", "A person is affiliated with an organization.", ["Person"], ["Organization"], { temporal: true }),
|
||||
rel("memberOf", "member of", "An organization belongs to a larger body.", ["Organization"], ["Organization"], { temporal: true }),
|
||||
rel("worksOn", "works on", "A person actively contributes work to a project.", ["Person"], ["Project"], {
|
||||
temporal: true,
|
||||
inverse: "hasContributor"
|
||||
}),
|
||||
rel("hasContributor", "has contributor", "Inverse of worksOn.", ["Project"], ["Person"]),
|
||||
rel("contributesTo", "contributes to", "A person contributes to a codebase.", ["Person"], ["Codebase"], { temporal: true }),
|
||||
rel("maintains", "maintains", "An organization is responsible for a codebase.", ["Organization"], ["Codebase"]),
|
||||
rel("builds", "builds", "An organization builds a project.", ["Organization"], ["Project"], { temporal: true }),
|
||||
rel("funds", "funds", "A funding program supports a project or research topic.", ["FundingProgram"], ["Project", "ResearchTopic"], { temporal: true }),
|
||||
rel("investigates", "investigates", "A project or person investigates a research topic.", ["Project", "Person", "Organization"], ["ResearchTopic"], { temporal: true }),
|
||||
rel("implements", "implements", "A codebase implements a protocol.", ["Codebase"], ["Protocol"]),
|
||||
rel("uses", "uses", "A project or application uses a protocol or codebase.", ["Project", "Application"], ["Protocol", "Codebase"]),
|
||||
rel("runsOn", "runs on", "An application runs on a network or layer 2.", ["Application"], ["Network", "Layer2"]),
|
||||
rel("deployedOn", "deployed on", "A layer 2 settles to a base network.", ["Layer2"], ["Network"]),
|
||||
rel("dependsOn", "depends on", "A codebase depends on another codebase.", ["Codebase"], ["Codebase"]),
|
||||
rel("authored", "authored", "A person authored a publication.", ["Person"], ["Publication"]),
|
||||
rel("collaboratesWith", "collaborates with", "Two people work together.", ["Person"], ["Person"], { symmetric: true }),
|
||||
rel("forkedFrom", "forked from", "A codebase was forked from another.", ["Codebase"], ["Codebase"])
|
||||
];
|
||||
|
||||
const properties = [
|
||||
["focus", "string", "A person's primary area of work."],
|
||||
["startedIn", "integer", "Year a person began working in the ecosystem."],
|
||||
["homepage", "url", "Canonical URL."],
|
||||
["kind", "string", "Organization kind."],
|
||||
["startedOn", "date", "Date a project began."],
|
||||
["language", "string", "Primary implementation language of a codebase."],
|
||||
["license", "string", "SPDX license of a codebase."],
|
||||
["repository", "url", "Repository URL."],
|
||||
["specification", "url", "Specification URL."],
|
||||
["chainId", "integer", "Network chain id."],
|
||||
["proofSystem", "string", "Layer-2 proof system."],
|
||||
["budgetUsd", "number", "Program budget in USD."],
|
||||
["published", "date", "Publication date."],
|
||||
["held", "date", "Event date."]
|
||||
].map(([id, type, description]) => ({
|
||||
openontology: V,
|
||||
kind: "Property",
|
||||
id,
|
||||
label: id,
|
||||
description,
|
||||
type
|
||||
}));
|
||||
|
||||
/* ── entities ───────────────────────────────────────────────────────────── */
|
||||
|
||||
const entities = [];
|
||||
const entity = (type, slug, canonicalName, extra = {}) => {
|
||||
const record = {
|
||||
openontology: V,
|
||||
kind: "Entity",
|
||||
id: `${PREFIX}:${slugType(type)}:${slug}`,
|
||||
type,
|
||||
canonicalName,
|
||||
createdAt: NOW,
|
||||
createdBy: CURATOR,
|
||||
...extra
|
||||
};
|
||||
entities.push(record);
|
||||
return record.id;
|
||||
};
|
||||
|
||||
function slugType(type) {
|
||||
return {
|
||||
Person: "person",
|
||||
Organization: "org",
|
||||
Project: "project",
|
||||
Codebase: "code",
|
||||
ResearchTopic: "topic",
|
||||
Protocol: "protocol",
|
||||
Network: "network",
|
||||
Layer2: "l2",
|
||||
Application: "app",
|
||||
FundingProgram: "fund",
|
||||
Publication: "pub",
|
||||
Event: "event"
|
||||
}[type];
|
||||
}
|
||||
|
||||
const P = {};
|
||||
const people = [
|
||||
["avery-lindqvist", "Avery Lindqvist", { aliases: ["avery.eth"], externalIds: { github: "averyl" } }],
|
||||
["marisol-tan", "Marisol Tan", { externalIds: { github: "mtan" } }],
|
||||
["dev-okafor", "Dev Okafor", { aliases: ["devo"] }],
|
||||
["ingrid-halvorsen", "Ingrid Halvorsen", {}],
|
||||
["rafael-benitez", "Rafael Benitez", { externalIds: { github: "rbenitez" } }],
|
||||
["yuki-shimada", "Yuki Shimada", { aliases: ["yuki.eth"] }],
|
||||
["nadia-farouk", "Nadia Farouk", {}],
|
||||
["tomas-vrba", "Tomas Vrba", {}],
|
||||
["priya-raghavan", "Priya Raghavan", { externalIds: { github: "praghavan" } }],
|
||||
["kwame-mensah", "Kwame Mensah", {}],
|
||||
["lena-brandt", "Lena Brandt", {}],
|
||||
["oscar-delgado", "Oscar Delgado", {}],
|
||||
["hana-kovacs", "Hana Kovacs", {}],
|
||||
["samir-haddad", "Samir Haddad", { aliases: ["samir.eth"] }],
|
||||
// Deliberate near-duplicate: the merge proposal in changesets/ resolves it.
|
||||
["s-haddad", "S. Haddad", { aliases: ["shaddad"] }]
|
||||
];
|
||||
for (const [slug, name, extra] of people) P[slug] = entity("Person", slug, name, extra);
|
||||
|
||||
const O = {};
|
||||
for (const [slug, name] of [
|
||||
["northwind-labs", "Northwind Labs"],
|
||||
["bluebird-foundation", "Bluebird Foundation"],
|
||||
["cinder-collective", "Cinder Collective"],
|
||||
["harbor-research", "Harbor Research"],
|
||||
["tessellate-dao", "Tessellate DAO"],
|
||||
["quill-systems", "Quill Systems"]
|
||||
]) O[slug] = entity("Organization", slug, name);
|
||||
|
||||
const PR = {};
|
||||
for (const [slug, name] of [
|
||||
["zk-prover", "ZK Prover"],
|
||||
["ledger-indexer", "Ledger Indexer"],
|
||||
["state-sync", "State Sync"],
|
||||
["rollup-bridge", "Rollup Bridge"],
|
||||
["account-toolkit", "Account Toolkit"],
|
||||
["mempool-observatory", "Mempool Observatory"],
|
||||
["docs-portal", "Docs Portal"],
|
||||
["light-client", "Light Client"]
|
||||
]) PR[slug] = entity("Project", slug, name);
|
||||
|
||||
const C = {};
|
||||
for (const [slug, name, language] of [
|
||||
["zk-prover-core", "zk-prover-core", "Rust"],
|
||||
["zk-prover-cli", "zk-prover-cli", "Rust"],
|
||||
["indexer-node", "indexer-node", "Go"],
|
||||
["indexer-schema", "indexer-schema", "TypeScript"],
|
||||
["sync-engine", "sync-engine", "Rust"],
|
||||
["bridge-contracts", "bridge-contracts", "Solidity"],
|
||||
["account-sdk", "account-sdk", "TypeScript"],
|
||||
["light-client-rs", "light-client-rs", "Rust"]
|
||||
]) C[slug] = entity("Codebase", slug, name, { extensions: { "eth:language": language } });
|
||||
|
||||
const T = {};
|
||||
for (const [slug, name] of [
|
||||
["zero-knowledge", "Zero Knowledge Proofs"],
|
||||
["account-abstraction", "Account Abstraction"],
|
||||
["data-availability", "Data Availability"],
|
||||
["consensus-safety", "Consensus Safety"],
|
||||
["mev-mitigation", "MEV Mitigation"]
|
||||
]) T[slug] = entity("ResearchTopic", slug, name);
|
||||
|
||||
const PROTO = {};
|
||||
for (const [slug, name] of [
|
||||
["proof-envelope", "Proof Envelope Protocol"],
|
||||
["account-ops", "Account Operations Protocol"],
|
||||
["blob-commit", "Blob Commitment Protocol"],
|
||||
["light-sync", "Light Sync Protocol"]
|
||||
]) PROTO[slug] = entity("Protocol", slug, name);
|
||||
|
||||
const N = {};
|
||||
for (const [slug, name, chainId] of [
|
||||
["mainnet-sim", "Mainnet Simulation", 9001],
|
||||
["testnet-sim", "Testnet Simulation", 9002]
|
||||
]) N[slug] = entity("Network", slug, name, { extensions: { "eth:chainId": chainId } });
|
||||
|
||||
const L2 = {};
|
||||
for (const [slug, name] of [
|
||||
["tessera", "Tessera"],
|
||||
["cascade", "Cascade"],
|
||||
["lattice", "Lattice"]
|
||||
]) L2[slug] = entity("Layer2", slug, name);
|
||||
|
||||
const A = {};
|
||||
for (const [slug, name] of [
|
||||
["swap-desk", "Swap Desk"],
|
||||
["lend-pool", "Lend Pool"],
|
||||
["name-registry", "Name Registry"],
|
||||
["vault-manager", "Vault Manager"]
|
||||
]) A[slug] = entity("Application", slug, name);
|
||||
|
||||
const F = {};
|
||||
for (const [slug, name] of [
|
||||
["open-proofs-fund", "Open Proofs Fund"],
|
||||
["public-goods-round", "Public Goods Round"],
|
||||
["research-stipends", "Research Stipends"]
|
||||
]) F[slug] = entity("FundingProgram", slug, name);
|
||||
|
||||
const PUB = {};
|
||||
for (const [slug, name] of [
|
||||
["recursive-proofs-paper", "Recursive Proofs at Scale"],
|
||||
["aa-survey", "A Survey of Account Abstraction Designs"],
|
||||
["da-sampling-note", "Notes on Data Availability Sampling"]
|
||||
]) PUB[slug] = entity("Publication", slug, name);
|
||||
|
||||
const E = {};
|
||||
for (const [slug, name] of [
|
||||
["proof-summit", "Proof Summit"],
|
||||
["rollup-workshop", "Rollup Workshop"]
|
||||
]) E[slug] = entity("Event", slug, name);
|
||||
|
||||
/* ── sources and evidence ───────────────────────────────────────────────── */
|
||||
|
||||
const sources = [];
|
||||
const evidence = [];
|
||||
const source = (slug, sourceType, uri, title, license = "CC-BY-4.0") => {
|
||||
const id = `${PREFIX}:source:${slug}`;
|
||||
sources.push({
|
||||
openontology: V,
|
||||
kind: "Source",
|
||||
id,
|
||||
sourceType,
|
||||
uri,
|
||||
title,
|
||||
publisher: "example.org",
|
||||
retrievedAt: NOW,
|
||||
mediaType: sourceType === "git-commit" ? "text/plain" : "text/html",
|
||||
license
|
||||
});
|
||||
return id;
|
||||
};
|
||||
|
||||
const S = {};
|
||||
for (const [slug, kind, path, title] of [
|
||||
["northwind-team", "web-page", "team", "Northwind Labs team page"],
|
||||
["bluebird-team", "web-page", "bluebird/team", "Bluebird Foundation team page"],
|
||||
["cinder-team", "web-page", "cinder/team", "Cinder Collective contributors"],
|
||||
["harbor-team", "web-page", "harbor/people", "Harbor Research people"],
|
||||
["tessellate-members", "web-page", "tessellate/members", "Tessellate DAO members"],
|
||||
["quill-about", "web-page", "quill/about", "Quill Systems about page"],
|
||||
["zk-prover-readme", "markdown", "repo/zk-prover/README.md", "zk-prover README"],
|
||||
["indexer-readme", "markdown", "repo/indexer/README.md", "indexer README"],
|
||||
["sync-readme", "markdown", "repo/sync/README.md", "sync-engine README"],
|
||||
["bridge-readme", "markdown", "repo/bridge/README.md", "bridge-contracts README"],
|
||||
["account-readme", "markdown", "repo/account/README.md", "account-sdk README"],
|
||||
["light-readme", "markdown", "repo/light/README.md", "light-client README"],
|
||||
["commit-a41f", "git-commit", "repo/zk-prover/commit/a41f", "zk-prover commit a41f"],
|
||||
["commit-b72c", "git-commit", "repo/indexer/commit/b72c", "indexer commit b72c"],
|
||||
["commit-c93d", "git-commit", "repo/sync/commit/c93d", "sync-engine commit c93d"],
|
||||
["commit-d10e", "git-commit", "repo/bridge/commit/d10e", "bridge commit d10e"],
|
||||
["grants-ledger", "api-response", "api/grants", "Grants ledger API"],
|
||||
["roadmap-2026", "web-page", "roadmap/2026", "2026 ecosystem roadmap"],
|
||||
["proof-summit-program", "web-page", "events/proof-summit", "Proof Summit program"],
|
||||
["rollup-workshop-notes", "web-page", "events/rollup-workshop", "Rollup Workshop notes"],
|
||||
["l2-registry", "api-response", "api/l2s", "Layer-2 registry"],
|
||||
["app-registry", "api-response", "api/apps", "Application registry"],
|
||||
["spec-index", "web-page", "specs", "Protocol specification index"],
|
||||
["paper-index", "web-page", "papers", "Publication index"],
|
||||
["dependency-manifest", "csv", "data/dependencies.csv", "Dependency manifest export"]
|
||||
]) S[slug] = source(slug, kind, `https://example.org/${path}`, title);
|
||||
|
||||
// One source is deliberately stale, to exercise the staleness warning path.
|
||||
sources.find((s) => s.id === S["roadmap-2026"]).stale = true;
|
||||
sources.find((s) => s.id === S["roadmap-2026"]).lastCheckedAt = NOW;
|
||||
|
||||
let evSeq = 0;
|
||||
const withEvidence = (sourceId, selector, excerpt) => {
|
||||
const id = `${PREFIX}:evidence:${String(++evSeq).padStart(3, "0")}`;
|
||||
evidence.push({
|
||||
openontology: V,
|
||||
kind: "Evidence",
|
||||
id,
|
||||
source: sourceId,
|
||||
selector,
|
||||
...(excerpt ? { excerpt } : {})
|
||||
});
|
||||
return id;
|
||||
};
|
||||
|
||||
/* ── claims ─────────────────────────────────────────────────────────────── */
|
||||
|
||||
const claims = [];
|
||||
let claimSeq = 0;
|
||||
const nextClaim = () => `${PREFIX}:claim:${String(++claimSeq).padStart(4, "0")}`;
|
||||
|
||||
const link = (subject, predicate, object, options = {}) => {
|
||||
const record = {
|
||||
openontology: V,
|
||||
kind: "Claim",
|
||||
id: nextClaim(),
|
||||
ontology: "ethereum-ecosystem@0.1.0",
|
||||
subject,
|
||||
predicate,
|
||||
object: { entity: object },
|
||||
status: options.status ?? "asserted",
|
||||
confidence: options.confidence ?? 0.9,
|
||||
assertedAt: NOW,
|
||||
assertedBy: options.assertedBy ?? CURATOR,
|
||||
sources: options.sources ?? [S["roadmap-2026"]],
|
||||
...(options.validFrom ? { validTime: { from: options.validFrom, to: options.validTo ?? null } } : {}),
|
||||
...(options.evidence ? { evidence: options.evidence } : {}),
|
||||
...(options.runId ? { runId: options.runId } : {}),
|
||||
...(options.extra ?? {})
|
||||
};
|
||||
claims.push(record);
|
||||
return record.id;
|
||||
};
|
||||
|
||||
const attr = (subject, predicate, value) => {
|
||||
const record = {
|
||||
openontology: V,
|
||||
kind: "Claim",
|
||||
id: nextClaim(),
|
||||
ontology: "ethereum-ecosystem@0.1.0",
|
||||
subject,
|
||||
predicate,
|
||||
object: { value },
|
||||
status: "asserted",
|
||||
assertedAt: NOW,
|
||||
assertedBy: CURATOR,
|
||||
firstParty: true
|
||||
};
|
||||
claims.push(record);
|
||||
return record.id;
|
||||
};
|
||||
|
||||
const Y = (year, month = 1) => `${year}-${String(month).padStart(2, "0")}-01T00:00:00Z`;
|
||||
|
||||
// employment
|
||||
const employment = [
|
||||
["avery-lindqvist", "northwind-labs", 2023],
|
||||
["marisol-tan", "northwind-labs", 2024],
|
||||
["dev-okafor", "northwind-labs", 2022],
|
||||
["ingrid-halvorsen", "bluebird-foundation", 2021],
|
||||
["rafael-benitez", "bluebird-foundation", 2024],
|
||||
["yuki-shimada", "cinder-collective", 2023],
|
||||
["nadia-farouk", "cinder-collective", 2025],
|
||||
["tomas-vrba", "harbor-research", 2022],
|
||||
["priya-raghavan", "harbor-research", 2023],
|
||||
["kwame-mensah", "tessellate-dao", 2024],
|
||||
["lena-brandt", "tessellate-dao", 2025],
|
||||
["oscar-delgado", "quill-systems", 2023],
|
||||
["hana-kovacs", "quill-systems", 2024],
|
||||
["samir-haddad", "quill-systems", 2022]
|
||||
];
|
||||
for (const [person, org, year] of employment) {
|
||||
link(P[person], "worksAt", O[org], {
|
||||
validFrom: Y(year),
|
||||
sources: [S[`${org.split("-")[0]}-team`] ?? S["northwind-team"]]
|
||||
});
|
||||
}
|
||||
|
||||
link(O["cinder-collective"], "memberOf", O["tessellate-dao"], { validFrom: Y(2024), sources: [S["tessellate-members"]] });
|
||||
link(O["quill-systems"], "memberOf", O["tessellate-dao"], { validFrom: Y(2025), sources: [S["tessellate-members"]] });
|
||||
|
||||
// project work
|
||||
const projectWork = [
|
||||
["avery-lindqvist", "zk-prover", 2024],
|
||||
["marisol-tan", "zk-prover", 2025],
|
||||
["dev-okafor", "ledger-indexer", 2023],
|
||||
["ingrid-halvorsen", "state-sync", 2022],
|
||||
["rafael-benitez", "rollup-bridge", 2025],
|
||||
["yuki-shimada", "account-toolkit", 2024],
|
||||
["nadia-farouk", "mempool-observatory", 2025],
|
||||
["tomas-vrba", "light-client", 2023],
|
||||
["priya-raghavan", "zk-prover", 2025],
|
||||
["kwame-mensah", "rollup-bridge", 2024],
|
||||
["lena-brandt", "docs-portal", 2025],
|
||||
["oscar-delgado", "state-sync", 2024],
|
||||
["hana-kovacs", "account-toolkit", 2025],
|
||||
["samir-haddad", "light-client", 2023],
|
||||
["avery-lindqvist", "light-client", 2026],
|
||||
["dev-okafor", "mempool-observatory", 2026],
|
||||
["priya-raghavan", "docs-portal", 2026],
|
||||
["yuki-shimada", "rollup-bridge", 2026]
|
||||
];
|
||||
for (const [person, project, year] of projectWork) {
|
||||
link(P[person], "worksOn", PR[project], {
|
||||
validFrom: Y(year),
|
||||
sources: [S["roadmap-2026"]],
|
||||
evidence: [withEvidence(S["roadmap-2026"], { type: "line-range", start: 10 + claimSeq, end: 12 + claimSeq })]
|
||||
});
|
||||
}
|
||||
|
||||
// codebase contributions
|
||||
const contributions = [
|
||||
["avery-lindqvist", "zk-prover-core", "commit-a41f"],
|
||||
["marisol-tan", "zk-prover-core", "commit-a41f"],
|
||||
["priya-raghavan", "zk-prover-cli", "commit-a41f"],
|
||||
["dev-okafor", "indexer-node", "commit-b72c"],
|
||||
["dev-okafor", "indexer-schema", "commit-b72c"],
|
||||
["ingrid-halvorsen", "sync-engine", "commit-c93d"],
|
||||
["oscar-delgado", "sync-engine", "commit-c93d"],
|
||||
["rafael-benitez", "bridge-contracts", "commit-d10e"],
|
||||
["kwame-mensah", "bridge-contracts", "commit-d10e"],
|
||||
["yuki-shimada", "account-sdk", "commit-a41f"],
|
||||
["hana-kovacs", "account-sdk", "commit-a41f"],
|
||||
["tomas-vrba", "light-client-rs", "commit-c93d"],
|
||||
["samir-haddad", "light-client-rs", "commit-c93d"]
|
||||
];
|
||||
for (const [person, code, commit] of contributions) {
|
||||
link(P[person], "contributesTo", C[code], {
|
||||
validFrom: Y(2025),
|
||||
sources: [S[commit]],
|
||||
evidence: [withEvidence(S[commit], { type: "commit-path", path: `src/${code}.rs`, commit: commit.slice(-4) })]
|
||||
});
|
||||
}
|
||||
|
||||
// maintenance and builds
|
||||
const maintenance = [
|
||||
["northwind-labs", "zk-prover-core"],
|
||||
["northwind-labs", "zk-prover-cli"],
|
||||
["northwind-labs", "indexer-node"],
|
||||
["bluebird-foundation", "indexer-schema"],
|
||||
["bluebird-foundation", "sync-engine"],
|
||||
["cinder-collective", "bridge-contracts"],
|
||||
["quill-systems", "account-sdk"],
|
||||
["harbor-research", "light-client-rs"]
|
||||
];
|
||||
for (const [org, code] of maintenance) link(O[org], "maintains", C[code], { sources: [S[`${code.split("-")[0]}-readme`] ?? S["zk-prover-readme"]] });
|
||||
|
||||
const builds = [
|
||||
["northwind-labs", "zk-prover", 2024],
|
||||
["northwind-labs", "ledger-indexer", 2023],
|
||||
["bluebird-foundation", "state-sync", 2022],
|
||||
["cinder-collective", "rollup-bridge", 2024],
|
||||
["quill-systems", "account-toolkit", 2024],
|
||||
["harbor-research", "light-client", 2023],
|
||||
["tessellate-dao", "docs-portal", 2025],
|
||||
["cinder-collective", "mempool-observatory", 2025]
|
||||
];
|
||||
for (const [org, project, year] of builds) link(O[org], "builds", PR[project], { validFrom: Y(year), sources: [S["roadmap-2026"]] });
|
||||
|
||||
// research
|
||||
const research = [
|
||||
[PR["zk-prover"], "zero-knowledge"],
|
||||
[PR["rollup-bridge"], "data-availability"],
|
||||
[PR["account-toolkit"], "account-abstraction"],
|
||||
[PR["mempool-observatory"], "mev-mitigation"],
|
||||
[PR["light-client"], "consensus-safety"],
|
||||
[PR["state-sync"], "consensus-safety"],
|
||||
[P["avery-lindqvist"], "zero-knowledge"],
|
||||
[P["priya-raghavan"], "zero-knowledge"],
|
||||
[P["yuki-shimada"], "account-abstraction"],
|
||||
[P["nadia-farouk"], "mev-mitigation"],
|
||||
[P["tomas-vrba"], "consensus-safety"],
|
||||
[O["harbor-research"], "data-availability"]
|
||||
];
|
||||
for (const [subject, topic] of research) link(subject, "investigates", T[topic], { validFrom: Y(2025), sources: [S["paper-index"]] });
|
||||
|
||||
// protocols and implementations
|
||||
for (const [code, protocol] of [
|
||||
["zk-prover-core", "proof-envelope"],
|
||||
["zk-prover-cli", "proof-envelope"],
|
||||
["account-sdk", "account-ops"],
|
||||
["bridge-contracts", "blob-commit"],
|
||||
["light-client-rs", "light-sync"],
|
||||
["sync-engine", "light-sync"],
|
||||
["indexer-node", "blob-commit"],
|
||||
["indexer-schema", "blob-commit"]
|
||||
]) link(C[code], "implements", PROTO[protocol], { sources: [S["spec-index"]] });
|
||||
|
||||
for (const [subject, object] of [
|
||||
[PR["zk-prover"], PROTO["proof-envelope"]],
|
||||
[PR["rollup-bridge"], PROTO["blob-commit"]],
|
||||
[PR["account-toolkit"], PROTO["account-ops"]],
|
||||
[PR["light-client"], PROTO["light-sync"]],
|
||||
[A["swap-desk"], C["account-sdk"]],
|
||||
[A["lend-pool"], C["account-sdk"]],
|
||||
[A["name-registry"], PROTO["account-ops"]],
|
||||
[A["vault-manager"], C["bridge-contracts"]],
|
||||
[PR["ledger-indexer"], C["indexer-schema"]],
|
||||
[PR["state-sync"], PROTO["light-sync"]]
|
||||
]) link(subject, "uses", object, { sources: [S["dependency-manifest"]] });
|
||||
|
||||
// networks and deployments
|
||||
for (const [l2, network] of [
|
||||
["tessera", "mainnet-sim"],
|
||||
["cascade", "mainnet-sim"],
|
||||
["lattice", "testnet-sim"]
|
||||
]) link(L2[l2], "deployedOn", N[network], { sources: [S["l2-registry"]] });
|
||||
|
||||
for (const [app, target] of [
|
||||
["swap-desk", L2["tessera"]],
|
||||
["lend-pool", L2["tessera"]],
|
||||
["name-registry", L2["cascade"]],
|
||||
["vault-manager", N["mainnet-sim"]],
|
||||
["swap-desk", L2["lattice"]]
|
||||
]) link(A[app], "runsOn", target, { sources: [S["app-registry"]] });
|
||||
|
||||
// dependencies and forks
|
||||
for (const [from, to] of [
|
||||
["zk-prover-cli", "zk-prover-core"],
|
||||
["indexer-schema", "indexer-node"],
|
||||
["bridge-contracts", "zk-prover-core"],
|
||||
["account-sdk", "indexer-schema"],
|
||||
["light-client-rs", "sync-engine"],
|
||||
["sync-engine", "zk-prover-core"],
|
||||
["indexer-node", "sync-engine"],
|
||||
["account-sdk", "bridge-contracts"]
|
||||
]) link(C[from], "dependsOn", C[to], { sources: [S["dependency-manifest"]] });
|
||||
|
||||
for (const [from, to] of [
|
||||
["zk-prover-cli", "zk-prover-core"],
|
||||
["light-client-rs", "sync-engine"],
|
||||
["indexer-schema", "indexer-node"]
|
||||
]) link(C[from], "forkedFrom", C[to], { sources: [S["dependency-manifest"]], confidence: 0.75 });
|
||||
|
||||
// publications, events, collaboration
|
||||
for (const [person, pub] of [
|
||||
["avery-lindqvist", "recursive-proofs-paper"],
|
||||
["priya-raghavan", "recursive-proofs-paper"],
|
||||
["yuki-shimada", "aa-survey"],
|
||||
["hana-kovacs", "aa-survey"],
|
||||
["tomas-vrba", "da-sampling-note"],
|
||||
["ingrid-halvorsen", "da-sampling-note"]
|
||||
]) link(P[person], "authored", PUB[pub], { sources: [S["paper-index"]] });
|
||||
|
||||
for (const [a, b] of [
|
||||
["avery-lindqvist", "priya-raghavan"],
|
||||
["yuki-shimada", "hana-kovacs"],
|
||||
["tomas-vrba", "ingrid-halvorsen"],
|
||||
["dev-okafor", "nadia-farouk"],
|
||||
["rafael-benitez", "kwame-mensah"],
|
||||
["marisol-tan", "avery-lindqvist"]
|
||||
]) link(P[a], "collaboratesWith", P[b], { sources: [S["proof-summit-program"]], confidence: 0.8 });
|
||||
|
||||
// funding
|
||||
for (const [fund, target, year] of [
|
||||
["open-proofs-fund", PR["zk-prover"], 2025],
|
||||
["open-proofs-fund", T["zero-knowledge"], 2025],
|
||||
["public-goods-round", PR["docs-portal"], 2026],
|
||||
["public-goods-round", PR["light-client"], 2025],
|
||||
["research-stipends", T["data-availability"], 2026],
|
||||
["research-stipends", T["consensus-safety"], 2025]
|
||||
]) link(F[fund], "funds", target, { validFrom: Y(year), sources: [S["grants-ledger"]] });
|
||||
|
||||
// scalar attributes
|
||||
attr(P["avery-lindqvist"], "focus", "Recursive proof systems");
|
||||
attr(P["avery-lindqvist"], "startedIn", 2019);
|
||||
attr(P["yuki-shimada"], "focus", "Wallet and account UX");
|
||||
attr(P["tomas-vrba"], "focus", "Light client security");
|
||||
attr(O["northwind-labs"], "homepage", "https://example.org/northwind");
|
||||
attr(O["bluebird-foundation"], "homepage", "https://example.org/bluebird");
|
||||
attr(O["northwind-labs"], "kind", "company");
|
||||
attr(O["bluebird-foundation"], "kind", "foundation");
|
||||
attr(O["tessellate-dao"], "kind", "dao");
|
||||
attr(PR["zk-prover"], "homepage", "https://example.org/zk-prover");
|
||||
attr(PR["zk-prover"], "startedOn", "2024-03-01");
|
||||
attr(PR["ledger-indexer"], "homepage", "https://example.org/ledger-indexer");
|
||||
attr(PR["light-client"], "homepage", "https://example.org/light-client");
|
||||
attr(C["zk-prover-core"], "language", "Rust");
|
||||
attr(C["indexer-node"], "language", "Go");
|
||||
attr(C["account-sdk"], "language", "TypeScript");
|
||||
attr(C["bridge-contracts"], "language", "Solidity");
|
||||
attr(C["zk-prover-core"], "license", "Apache-2.0");
|
||||
attr(C["account-sdk"], "license", "MIT");
|
||||
attr(C["zk-prover-core"], "repository", "https://example.org/repo/zk-prover");
|
||||
attr(PROTO["proof-envelope"], "specification", "https://example.org/specs/proof-envelope");
|
||||
attr(N["mainnet-sim"], "chainId", 9001);
|
||||
attr(N["testnet-sim"], "chainId", 9002);
|
||||
attr(L2["tessera"], "proofSystem", "validity");
|
||||
attr(L2["cascade"], "proofSystem", "fraud");
|
||||
attr(L2["lattice"], "proofSystem", "hybrid");
|
||||
attr(F["open-proofs-fund"], "budgetUsd", 250000);
|
||||
attr(F["public-goods-round"], "budgetUsd", 90000);
|
||||
attr(PUB["recursive-proofs-paper"], "published", "2025-11-04");
|
||||
attr(PUB["aa-survey"], "published", "2026-02-17");
|
||||
attr(E["proof-summit"], "held", "2026-05-12");
|
||||
attr(E["rollup-workshop"], "held", "2026-06-23");
|
||||
|
||||
/* ── the four lifecycle demonstrations ──────────────────────────────────── */
|
||||
|
||||
// 1. An agent proposal that has not been accepted yet.
|
||||
const proposed = link(P["lena-brandt"], "worksOn", PR["mempool-observatory"], {
|
||||
status: "proposed",
|
||||
assertedBy: MAPPER,
|
||||
runId: RUN,
|
||||
confidence: 0.61,
|
||||
validFrom: Y(2026, 7),
|
||||
sources: [S["roadmap-2026"]],
|
||||
extra: {
|
||||
model: {
|
||||
provider: "example-provider",
|
||||
model: "example-extractor-1",
|
||||
promptVersion: "map-sources-to-claims@3",
|
||||
extractedAt: NOW,
|
||||
rationale: "Roadmap lists Lena under the observatory workstream; no commit activity yet."
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 2. A disputed claim, plus the counter-claim that disputes it.
|
||||
const disputedClaim = link(P["kwame-mensah"], "worksOn", PR["state-sync"], {
|
||||
status: "disputed",
|
||||
confidence: 0.55,
|
||||
validFrom: Y(2025),
|
||||
sources: [S["roadmap-2026"]]
|
||||
});
|
||||
link(P["kwame-mensah"], "worksOn", PR["rollup-bridge"], {
|
||||
confidence: 0.93,
|
||||
validFrom: Y(2025),
|
||||
sources: [S["commit-d10e"]],
|
||||
extra: { disputes: disputedClaim }
|
||||
});
|
||||
|
||||
// 3. A retracted claim: it stays on the record, out of the current view.
|
||||
link(P["oscar-delgado"], "worksOn", PR["docs-portal"], {
|
||||
status: "retracted",
|
||||
confidence: 0.4,
|
||||
validFrom: Y(2024),
|
||||
sources: [S["roadmap-2026"]],
|
||||
extra: { retractionReason: "Confused with a same-named contributor on another project." }
|
||||
});
|
||||
|
||||
// 4. A supersession: the old affiliation ended, the new one replaced it.
|
||||
const supersededClaim = link(P["marisol-tan"], "worksAt", O["bluebird-foundation"], {
|
||||
status: "superseded",
|
||||
validFrom: Y(2022),
|
||||
validTo: Y(2024),
|
||||
sources: [S["bluebird-team"]]
|
||||
});
|
||||
link(P["marisol-tan"], "worksAt", O["northwind-labs"], {
|
||||
validFrom: Y(2024),
|
||||
sources: [S["northwind-team"]],
|
||||
extra: { supersedes: supersededClaim }
|
||||
});
|
||||
|
||||
// 5. A derived claim, showing its inputs.
|
||||
const derivedInputs = claims
|
||||
.filter((c) => c.predicate === "contributesTo" && c.subject === P["avery-lindqvist"])
|
||||
.map((c) => c.id);
|
||||
claims.push({
|
||||
openontology: V,
|
||||
kind: "Claim",
|
||||
id: nextClaim(),
|
||||
ontology: "ethereum-ecosystem@0.1.0",
|
||||
subject: O["northwind-labs"],
|
||||
predicate: "investigates",
|
||||
object: { entity: T["zero-knowledge"] },
|
||||
status: "derived",
|
||||
confidence: 0.7,
|
||||
observedAt: NOW,
|
||||
assertedAt: NOW,
|
||||
assertedBy: "service:rule-engine",
|
||||
derivedFrom: {
|
||||
rule: "org-investigates-topic-of-its-contributors",
|
||||
inputs: derivedInputs
|
||||
}
|
||||
});
|
||||
|
||||
/* ── saved queries and constraints ──────────────────────────────────────── */
|
||||
|
||||
const savedQuery = (id, label, description, query, parameters) => ({
|
||||
openontology: V,
|
||||
kind: "SavedQuery",
|
||||
id,
|
||||
label,
|
||||
description,
|
||||
...(parameters ? { parameters } : {}),
|
||||
query
|
||||
});
|
||||
|
||||
const queries = [
|
||||
savedQuery(
|
||||
"people-working-on-topic",
|
||||
"People and organizations working on a research topic",
|
||||
"Every person working on a project that investigates the given research topic.",
|
||||
{
|
||||
match: [
|
||||
{ subject: "?person", predicate: "worksOn", object: "?project" },
|
||||
{ subject: "?project", predicate: "investigates", object: "$topic" }
|
||||
],
|
||||
select: ["?person", "?project"],
|
||||
include: { claimStatus: ["asserted"], labels: true },
|
||||
orderBy: [{ variable: "?person", direction: "asc" }]
|
||||
},
|
||||
{ topic: { type: "string", required: true, default: `${PREFIX}:topic:zero-knowledge` } }
|
||||
),
|
||||
savedQuery(
|
||||
"codebases-implementing-protocol",
|
||||
"Codebases implementing a protocol",
|
||||
"Which codebases implement the given protocol, and who maintains them.",
|
||||
{
|
||||
match: [
|
||||
{ subject: "?codebase", predicate: "implements", object: "$protocol" },
|
||||
{ subject: "?org", predicate: "maintains", object: "?codebase" }
|
||||
],
|
||||
select: ["?codebase", "?org"],
|
||||
include: { claimStatus: ["asserted"], labels: true }
|
||||
},
|
||||
{ protocol: { type: "string", required: true, default: `${PREFIX}:protocol:proof-envelope` } }
|
||||
),
|
||||
savedQuery(
|
||||
"orgs-behind-a-network",
|
||||
"Organizations behind the codebases a network depends on",
|
||||
"Three hops: layer 2 → application → codebase → maintaining organization.",
|
||||
{
|
||||
match: [
|
||||
{ subject: "?l2", predicate: "deployedOn", object: "?network" },
|
||||
{ subject: "?app", predicate: "runsOn", object: "?l2" },
|
||||
{ subject: "?app", predicate: "uses", object: "?codebase" },
|
||||
{ subject: "?org", predicate: "maintains", object: "?codebase" }
|
||||
],
|
||||
select: ["?network", "?l2", "?app", "?org"],
|
||||
include: { claimStatus: ["asserted"], labels: true },
|
||||
distinct: true
|
||||
}
|
||||
),
|
||||
savedQuery(
|
||||
"funded-work",
|
||||
"Funded projects and research directions",
|
||||
"Which funding programs support which projects or research topics.",
|
||||
{
|
||||
match: [{ subject: "?fund", predicate: "funds", object: "?target" }],
|
||||
select: ["?fund", "?target"],
|
||||
include: { claimStatus: ["asserted"], labels: true },
|
||||
orderBy: [{ variable: "?fund", direction: "asc" }]
|
||||
}
|
||||
),
|
||||
savedQuery(
|
||||
"claims-needing-review",
|
||||
"Claims that still need a human decision",
|
||||
"Proposed and disputed claims, which a curator should accept, reject, or resolve.",
|
||||
{
|
||||
match: [{ subject: "?subject", predicate: "?predicate", object: "?object", bindClaim: "?claim" }],
|
||||
select: ["?claim", "?subject", "?predicate", "?object"],
|
||||
include: { claimStatus: ["proposed", "disputed"] }
|
||||
}
|
||||
)
|
||||
];
|
||||
|
||||
const constraints = [
|
||||
{
|
||||
openontology: V,
|
||||
kind: "Constraint",
|
||||
id: "codebase-has-language",
|
||||
description: "Every codebase should record its primary implementation language.",
|
||||
severity: "info",
|
||||
remediation: "Add a language claim for the codebase.",
|
||||
rule: { type: "required-predicate", entityType: "Codebase", predicate: "language" }
|
||||
},
|
||||
{
|
||||
openontology: V,
|
||||
kind: "Constraint",
|
||||
id: "layer2-settles-somewhere",
|
||||
description: "Every layer 2 must declare the network it settles to.",
|
||||
severity: "error",
|
||||
remediation: "Add a deployedOn claim from the layer 2 to its base network.",
|
||||
rule: { type: "cardinality", predicate: "deployedOn", entityType: "Layer2", min: 1, max: 1 }
|
||||
},
|
||||
{
|
||||
openontology: V,
|
||||
kind: "Constraint",
|
||||
id: "chain-ids-unique",
|
||||
description: "Two networks must not share a chain id.",
|
||||
severity: "error",
|
||||
remediation: "Correct the duplicated chainId claim.",
|
||||
rule: { type: "unique", predicate: "chainId" }
|
||||
},
|
||||
{
|
||||
openontology: V,
|
||||
kind: "Constraint",
|
||||
id: "proof-system-known",
|
||||
description: "A layer 2's proof system must be one of the three recognised kinds.",
|
||||
severity: "error",
|
||||
rule: { type: "allowed-values", predicate: "proofSystem", values: ["validity", "fraud", "hybrid"] }
|
||||
}
|
||||
];
|
||||
|
||||
const namespaces = [
|
||||
{
|
||||
openontology: V,
|
||||
kind: "Namespace",
|
||||
prefix: PREFIX,
|
||||
uri: "https://logicsrc.com/ontology/ethereum/",
|
||||
description: "Compact id prefix for the Ethereum ecosystem example."
|
||||
}
|
||||
];
|
||||
|
||||
const manifest = {
|
||||
openontology: V,
|
||||
kind: "OntologyPackage",
|
||||
id: "ethereum-ecosystem",
|
||||
name: "Ethereum Ecosystem Ontology",
|
||||
version: "0.1.0",
|
||||
namespace: "https://logicsrc.com/ontology/ethereum/",
|
||||
description:
|
||||
"An open map of people, organizations, projects, codebases, research topics, protocols, networks, and applications. All data in this package is fictional and exists to demonstrate the OpenOntology contract.",
|
||||
license: "CC-BY-4.0",
|
||||
maintainers: [{ id: CURATOR, name: "Example Curator" }],
|
||||
imports: [],
|
||||
schema: {
|
||||
namespaces: "schema/namespaces.yaml",
|
||||
entityTypes: "schema/entity-types.yaml",
|
||||
properties: "schema/properties.yaml",
|
||||
relationships: "schema/relationships.yaml",
|
||||
constraints: "schema/constraints.yaml",
|
||||
queries: "schema/queries.yaml"
|
||||
},
|
||||
data: {
|
||||
entities: "data/entities.ndjson",
|
||||
claims: "data/claims.ndjson",
|
||||
sources: "data/sources.ndjson",
|
||||
evidence: "data/evidence.ndjson"
|
||||
}
|
||||
};
|
||||
|
||||
/* ── a pending merge proposal, kept next to the package ─────────────────── */
|
||||
|
||||
const mergeChangeSet = {
|
||||
openontology: V,
|
||||
kind: "ChangeSet",
|
||||
id: "changeset:merge-haddad",
|
||||
ontology: "ethereum-ecosystem@0.1.0",
|
||||
title: "Merge S. Haddad into Samir Haddad",
|
||||
rationale:
|
||||
"Both records point at the same contributor: identical alias handle, same organization, overlapping commits on light-client-rs.",
|
||||
createdAt: NOW,
|
||||
createdBy: MAPPER,
|
||||
actorType: "agent",
|
||||
runId: RUN,
|
||||
operations: [
|
||||
{
|
||||
op: "merge-entity",
|
||||
source: `${PREFIX}:person:s-haddad`,
|
||||
target: `${PREFIX}:person:samir-haddad`,
|
||||
reason: "Same person; the shorter record was created from a commit signature."
|
||||
}
|
||||
],
|
||||
requiredApprovals: 1,
|
||||
status: "proposed"
|
||||
};
|
||||
|
||||
/* ── write ──────────────────────────────────────────────────────────────── */
|
||||
|
||||
yaml("openontology.yaml", manifest);
|
||||
yaml("schema/namespaces.yaml", namespaces);
|
||||
yaml("schema/entity-types.yaml", entityTypes);
|
||||
yaml("schema/properties.yaml", properties);
|
||||
yaml("schema/relationships.yaml", relationships);
|
||||
yaml("schema/constraints.yaml", constraints);
|
||||
yaml("schema/queries.yaml", queries);
|
||||
ndjson("data/entities.ndjson", entities);
|
||||
ndjson("data/claims.ndjson", claims);
|
||||
ndjson("data/sources.ndjson", sources);
|
||||
ndjson("data/evidence.ndjson", evidence);
|
||||
yaml("changesets/merge-haddad.yaml", mergeChangeSet);
|
||||
|
||||
console.log(
|
||||
`entityTypes=${entityTypes.length} relationshipTypes=${relationships.length} entities=${entities.length} ` +
|
||||
`claims=${claims.length} sources=${sources.length} evidence=${evidence.length} queries=${queries.length}`
|
||||
);
|
||||
console.log(
|
||||
`proposed=${claims.filter((c) => c.status === "proposed").length} ` +
|
||||
`disputed=${claims.filter((c) => c.status === "disputed").length} ` +
|
||||
`retracted=${claims.filter((c) => c.status === "retracted").length} ` +
|
||||
`superseded=${claims.filter((c) => c.status === "superseded").length} ` +
|
||||
`derived=${claims.filter((c) => c.status === "derived").length}`
|
||||
);
|
||||
Loading…
Add table
Add a link
Reference in a new issue