Network · Consensus · Storage
Arkiv OP L3 entity trie, ICP subnet consensus, any EVM chain, Filecoin FEVM and IPFS
Nothing. These layers see bytes, an eth_call and an ecrecover — no Haven semantics whatsoever.
Encrypted at the sourceUnlocked by ownershipStored on public infrastructure
Haven keeps media encrypted on public infrastructure and derives the key to it from what a reader already holds. There is no account to open, no server to trust, and no platform standing between a community and its own archive.
Scroll
It held your work on its hardware, under its terms, for as long as its business model agreed with your existence. When the terms changed, the archive changed with them. Nothing about that arrangement was malicious. It was structural.
Haven removes the structure rather than improving the landlord. Content is sealed before it is published, its index is a public state trie, its key is derived by a network rather than issued by a company, and the bill for keeping it is settled on-chain. What remains is a rule set — and a rule set has no offices to close.
Five services, zero private datastores. Every byte of shared state is on a public network.
Media is encrypted on the publisher’s machine. Ciphertext is the only thing any network ever sees.
A public balance is the whole authorisation model. No accounts, no passwords, no sessions.
A community’s image is read from its own contract — so identity needs no directory to administer it.
The index is a trie, access checks run in a canister, the archive lives on Filecoin. There is no server to seize.
Consensus, storage, settlement and threshold cryptography already exist, operated by networks that predate Haven and will outlast it. Haven specifies only how those four capabilities compose into one guarantee. The layers beneath see bytes, an eth_call and anecrecover — they have no idea Haven exists, which is precisely why they cannot be leaned on to end it.
Arkiv OP L3 entity trie, ICP subnet consensus, any EVM chain, Filecoin FEVM and IPFS
Nothing. These layers see bytes, an eth_call and an ecrecover — no Haven semantics whatsoever.
haven-aol EIP-712 GateRequest / GateRequestV3, VetKD contexts, Ed25519 attestations, contractURI resolution
How a reader proves holding and derives a key, and how a community’s identity image is resolved. The session key is scoped to (chain, token, threshold, epoch).
Entity shape, access rule, attestation over cidHash, holder identity
The protocol itself: content is a CID on Filecoin, open only to holders of a public token, discovered through Arkiv, and identity is the collection’s own image.
| Network | Role | Authoritative for | Identifier | Verify |
|---|---|---|---|---|
| Arkiv OP L3 | Index | Entity records, attributes, ordering | Precompile0x4400000000000000000000000000000000000044 | Node (503) |
| DFINITY ICP | Access checks | VetKD derivation, EIP-712 recovery, approvals | Canisterdciac-uaaaa-aaaad-qlzuq-cai | Explorer |
| Any EVM | Holdings | Ownership truth — balances and holders | eth_callbalanceOf · ownerOf | Explorer |
| Filecoin FEVM · IPFS | Archive | Ciphertext bytes, pin proofs, payment | filecoin-pay0x09a0fDc2723fAd1A7b8e3e00eE5DF73841df55a0 | Explorer |
Media is encrypted locally under a symmetric key. Only ciphertext is ever handed to a network, so no operator anywhere in the path — including Haven — is in a position to read it.
haven publish ./film.mp4 \
--gate-chain BaseMainnet \
--gate-token 0xBC4C…f13D \
--gate-threshold 1
→ ciphertext ipfs://bafy…
→ cid_hash 0x9f2c…a41ehaven-cli. Nothing in this step requires a service Haven operates.One atomic batch of operations writes the entity: its key, its attributes, its content type and its time-to-live. The state trie is the index — there is no separate database to fall out of sync with it.
execute([{
operationType: 1, // CREATE
entityKey: 0x…,
contentType: Mime128("video/mp4"),
attributes: [
{ name: "project", value: "haven" },
{ name: "gate_chain", value: "BaseMainnet" },
{ name: "gate_token", value: "0xBC4C…f13D" },
{ name: "gate_threshold", value: 1 },
{ name: "cid_hash", value: 0x9f2c…a41e }
],
btl: 2_592_000
}])arkiv-chain. Nothing in this step requires a service Haven operates.A reader signs a typed request. The canister recovers the address, asks a public chain whether that address meets the threshold, and only then derives a key from the network’s own threshold material. There is no account, no password and no session to steal.
requestDecryptionKeyV3({
evmAddress: 0xa11c…9e3f,
transportPublicKey: 0x…,
epoch: floor(now / 2_592_000),
nonce: 7
})
ecrecover → 0xa11c…9e3f
eth_call → balanceOf ≥ threshold
derive → SHA-256("accessol_v3:"
+ chain + ":" + token
+ ":" + threshold
+ ":" + effectiveEpoch)haven-aol. Nothing in this step requires a service Haven operates.The ciphertext arrives from IPFS, the key material arrives from the canister, and they meet for the first time inside your client. Revoke the holding and the next epoch simply never derives.
const entities = await arkiv.query({
attributes: { project: "haven",
gate_token: token },
includePayload: true
})
const key = await unwrap(ciphertext,
transportSecret)
await play(decrypt(bytes, key))haven-dapp. Nothing in this step requires a service Haven operates.A page that animates invented activity is easy to build and worth nothing. Every figure below is a real round-trip to a public endpoint with no key and no proxy — including the one that fails. Storage is aggregated from the Filecoin pin contracts on FEVM; across both deployments that is 93.4 TB under proof in 17,834 live data sets.
| Network | Reports | Figure | Round trip | State |
|---|---|---|---|---|
| Arkiv | Entities indexed | — | — | MeasuringOpening a connection… |
| Internet Computer | Gate epoch | — | — | MeasuringOpening a connection… |
| Ethereum | Block height | — | — | MeasuringOpening a connection… |
| Base | Block height | — | — | MeasuringOpening a connection… |
| OP Mainnet | Block height | — | — | MeasuringOpening a connection… |
| Filecoin | Block height | — | — | MeasuringOpening a connection… |
Each surface is written in a different language, ships on its own schedule, and shares no database, queue or library with the others. They agree because they obey the same rule set — not because they import the same code. That is the difference between a protocol and a monolith with several front ends.
Entity contract
Keys and access
Web reader
Publisher
Offline-first viewer
The index draws the archive as a system of bodies in motion: real communities, real balances, real storage under proof. Two measures, kept deliberately apart — how much a world keeps, and what a world is worth.
The question is not whether a community can publish. It is whether, in thirty years, anyone still can — and whether the answer depends on a company being in a good mood.
The entity contract is live behind the precompile, access checks run on a mainnet canister, and five independent clients read and write the same rule set with no shared backend between them.
Encrypted libraries accumulate against real holding requirements. Pin proofs and payment settle on Filecoin, and the index begins to show storage that exists rather than storage that is promised.
Epoch-scoped derivation makes access portable across every surface a person owns — desktop, phone, terminal — without a single credential moving between them.
Communities operate their own archives at institutional scale: their own access rules, their own storage economics, their own canon — and no operator, including us, able to take any of it away.
An archive network for communities · v3