Developers

Reading order

Seven canonical objects carry the protocol: the receipt, the registry entry, the trust registry and four summaries. Every object is closed: a field its schema does not define is rejected, so an implementation has no extension fields to handle. The evidence bundle the issuer keeps is specified apart from them.

{
  "object_type": "verification_receipt",
  "schema_version": "…",
  "bundle_id": "…",
  "asset_type": "fund_nav | property",
  "verification_mode": "…",
  "verified_at": "…",
  "policy_id": "…",
  "policy_version": "…",
  "status": "pass | warning | review | fail",
  "reason_codes": "…",
  "manifest_sha256": "…",
  "reason_code_vocabulary_version": "…"
}
  • 7 canonical objects, all closed to fields their schema does not define.
  • The receipt requires 12 of its 20 fields, and the registry entry 19 of its 23.
  • Names only: types, descriptions and worked examples are in the schemas and the specification.

In order

Read these four in order

  1. 01

    Scope and its limits

    Loquitur records how the evidence behind a NAV or valuation was checked, not whether the NAV or valuation is right. What else falls outside its scope is on the security and limits page.

  2. 02

    Objects and what stays private

    Of the 7 canonical objects, only the registry entry is written for publication. The bundle, defined in the specification, stays with the issuer. The protocol overview shows what an entry may carry.

  3. 03

    Current state of each component

    Each component carries one release label, Preview (Alpha) or Planned. The implementation status page lists the label and the limits of each.

  4. 04

    Verification checks

    The protocol defines what each check establishes. Structure, integrity, link and authorization need no network. Transparency and anchoring, reserved and not implemented, could not be checked offline, because each asks about something recorded elsewhere.

The receipt

Receipt fields

The receipt records one check: the policy applied and its version, the outcome, the coded reasons behind it, and the digest of the file manifest the check ran over. An object missing any of these is rejected.

Identity

  • object_type
  • schema_version
  • bundle_id

what this object is, and which version of its schema it was written against

Subject

  • asset_type

the kind of asset the checked figure belongs to

The check

  • verification_mode
  • verified_at

how far the verification went, and when it ran

Policy

  • policy_id
  • policy_version

which rules were applied, and at which version, so the same check can be run again

Outcome

  • status
  • reason_codes
  • reason_code_vocabulary_version

the result, the coded reasons behind it, and the version of the code catalog they belong to

Commitment

  • manifest_sha256

the digest of the manifest listing every file the check ran over

12 of verification_receipt’s 20 fields are required. The schema is closed: any field it does not define is rejected.

The public entry

Registry entry fields

The entry is the object written for publication. It carries identifiers, two digests of the evidence, a salted subject reference, the policy and its version, the verdict with its reasons, and the key that signed. It carries no document, no figure and no evidence. A reviewer holding the bundle can put the two side by side. Anyone holding only the entry learns that a check happened, under which policy and with what outcome, and nothing about what was checked or which of two entries for one subject replaced the other.

Identity

  • object_type
  • schema_version
  • registry_entry_id
  • receipt_id

what this object is, and the receipt it was written for

Signer

  • issuer_id
  • issuer_key_id

who signed, and with which of their keys: the pair an authorization check is made against

Subject

  • asset_type
  • workflow
  • subject_ref_hash

the asset type and workflow this entry is for, and a reference to the subject that does not name it

Commitments

  • manifest_hash
  • receipt_hash

two digests of the evidence, not the manifest or the receipt behind them, and a salted subject reference: all the entry says about the evidence

Policy

  • policy_id
  • policy_version
  • reason_code_catalog_version

the rules applied and the catalog its reason codes are drawn from, both versioned

Outcome

  • verdict
  • reason_codes

the verdict and the coded reasons for it, so a dispute can name the one reason it contests

Disclosure

  • issued_at
  • privacy_classification
  • disclosure_profile

when it was issued, and how much of the evidence its holder may pass on

19 of registry_entry’s 23 fields are required. The schema is closed: any field it does not define is rejected.

Vocabulary

Value lists

Some fields take no free text. A closed list is fixed by the schema, and a value outside it fails validation. A registered list is a versioned file in loquitur-protocol, for the asset type, the workflow and the anchoring method. An asset type or workflow the verifier does not know makes the run REVIEW rather than PASS, and a value that is not a well-formed identifier makes it FAIL. No check reads the anchoring method in this version. Registering a value changes no schema and no protocol version.

The value lists, the object each belongs to, whether the schema closes the list or a registered vocabulary holds it, and its values.
FieldOnListValues
asset_typeregistry_entryregistered
  • fund_nav
  • property
workflowregistry_entryregistered
  • fund_nav_initial
  • fund_nav_update
  • property_pre_listing
  • property_review
anchor.methodregistry_entryregistered
  • blockchain_transaction
  • rfc3161_timestamp
  • transparency_log_checkpoint
statusverification_receiptclosed
  • pass
  • warning
  • review
  • fail
verdictregistry_entryclosed
  • PASS
  • WARN
  • REVIEW
  • FAIL
disclosure_profileregistry_entryclosed
  • minimal_public
  • issuer_controlled_bundle
  • partner_authorized_bundle
privacy_classificationregistry_entryclosed
  • public_commitment

Authorization

Key scope

A key in the trust registry is not authorized for everything an issuer does. The registry names the asset types and workflows each key may sign for, and the authorization check tests the signing key against them. A property entry signed with a key authorized for fund NAVs can come with an intact bundle, matching hashes and a genuine signature, and still fail, on authority. Authorization is a separate check because a reviewer responds to a missing authority differently from a hash that does not match.

Implementing

Field contracts

This page gives the names: which objects exist, what each must carry, which values a field accepts. Types, descriptions and worked examples are in the schemas and the specification, published in the loquitur-dev organization on GitHub.