Implementations
One specification, three layers.
The protocol defines the objects and the rules. A runtime enforces them and guarantees atomicity and visibility. The libraries make both usable without re-implementing either.
Structure
What each layer is responsible for
Runtimes
Runtime status and disclosure profiles
OCP is chain-agnostic by construction. The data model, the authorization semantics and the derivation rules are identical across runtimes; what differs is how a given network realizes visibility, signing and atomicity. The runtime follows the disclosure profile of the register it would hold — not the issuer’s listing status.
| Runtime | Status | Ledger model | Visibility mechanism | Suitable for |
|---|---|---|---|---|
| Canton (DAML) | Reference, in production | Contract-based | Sub-transaction privacy; Observer parties for regulators and auditors | US securityholder records, listed or not — the default wherever per-holder positions must not be publicly enumerable |
| Ethereum · Optimism · Base | Earlier versions ran here | Account-based | Public by default | Historical. Retained as evidence that the semantics port across ledger models |
| EVM / Solana (account-based) | Open — item 1 | Account-based | Depends on added machinery | An independent conformant implementation here is the single most valuable contribution available |
| FHE-enabled EVM (fhEVM, Fhenix) | Specified profile | Account-based, encrypted fields | Fully homomorphic encryption over quantities, prices and identities | Records whose existence is public but whose detail is not |
| Fully public chains | Specified profile | Either | None — the log is fully visible | Certain fund structures, and instruments whose per-holder detail carries no confidentiality expectation |
| Rust implementation | Started | Account-based | — | Account-based chains generally |
A new runtime becomes OCP-conformant by answering yes to every applicable question in the Appendix A coverage map. There is no certifier and nothing to apply for; conformance today is self-attested, and no executable suite is published yet. The conformance questions →
Reference implementation
DAML on the Canton Network
The reference runtime defines four primitives. OcpFactory is one shared contract per network deployment, signed by the system operator, which registers issuer parties. IssuerAuthorization is the proof of that registration, exchangeable by the issuer for the right to create a cap table and withdrawable by the operator. Issuer and CapTable are created together, the latter holding typed index maps, not balances. UpdateCapTable is the single choice through which all subsequent state changes flow.
Every contract in that structure — the cap table and each of the fifty-odd OCF entity templates — carries both the issuer and the system operator as signatories. The transfer agent’s authority is not an assertion made in an accompanying document; it is present cryptographically on every record in the register.
Reference runtime
DAML contracts on Canton. Open source and published.
Reference SDK
@open-captable-protocol/canton returns OCF-shaped data in TypeScript and submits OCF-shaped writes back, validating against the OCF schema before anything reaches the network. Batches are built through a chained create/edit/delete builder; higher-level utilities compose them into named flows — a Series A close, a grant package, a secondary transfer.
Implementation status
The balance-integrity guarantees of chapter 8 are live. Positions of record — the published, reservation-aware position view committed atomically with the write — are specified in chapter 3.4 and are part of the open work.
Operators
Who runs OCP today
OCP is most valuable when many transfer agents run it, each as system operator for the issuers it administers. A transfer agent adopting it runs its own registers under its own accountability and gains interoperability with every other operator implementing the same specification — without a membership, a central operator, or a dependency on any other participant’s continued operation.
Transfer agent · in production
Fairmint
SEC-registered transfer agent. Operates OCP on Canton for the issuers it administers. Employer of both specification authors.
That deployment is evidence that the protocol runs. It is not a definition of the protocol, and nothing in the specification requires an implementer to run Fairmint’s stack.
Evaluating adoption?
Two things a transfer agent usually wants to establish first. Adopting OCP is reversible: succession between operators is specified in four steps — extraction as an OCF manifest, verification by recomputation, re-establishment of grants, continuity of the log across the seam. And the statutory functions you already perform — proxy, dividends, splits, escheatment, 17Ad-17 search, statements, 1099 and K-1 — map onto OCF objects and OCP transactions; writing that mapping is open item 9.