Skip to content

Evidence

Evidence is the flagship Yano X product. It takes a document — a product inspection certificate, a compliance attestation, a case file — and turns publishing it into a provable, multi-party, externally-executed workflow.

flowchart LR
    DOC[Inspection certificate] --> STAGE[Stage exact bytes]
    STAGE --> CMD[Submit evidence command]
    CMD --> OBJ[Immutable object.put]
    CMD --> PIN[Reconciled ipfs.pin]
    OBJ --> READY[Both results incorporated]
    PIN --> READY
    READY --> EVENT[Acknowledged kafka.publish]
    EVENT --> PROVE[Verify state, effects, finality, and the L1 anchor]

The chain records what was authorized. Object storage, IPFS, and Kafka are executed by the effect runtime after the finality gate, and each result comes back on-chain and is incorporated exactly once.

The reference scenario verifies all of the following together:

  • the exact archived object bytes, checksum, version, retention identity, and destination fingerprint;
  • the exact IPFS CID, the retrieved bytes, and the configured pin state;
  • the Kafka destination fingerprint, event bytes, partition, and offset;
  • identical committed state across three app-chain members;
  • state and effect inclusion proofs bound to the same root;
  • threshold-signed finality evidence; and
  • the Cardano script-anchor transaction, its state-thread token, and the canonical inline datum.

It also exercises executor failure after an external acknowledgement, fenced failover, reconciliation without duplicate mutation, and restart with retained state. The same scenario runs through Docker Compose and through ordinary host processes.

ProfileApproversUse when
evidence-v1-gated (default)Validator membersThe organizations running nodes are the ones who approve.
role-evidenceBusiness actors, by roleThe approvers are people — a QA manager, an auditor, a regulator — whose keys are not node keys.

evidence-v1-gated combines registry, approvals, document trail, and approval-coordinated evidence publication under one state root. A compatibility evidence-v1 preset keeps direct evidence commands for existing deployments.

role-evidence adds governed organizations, actor and key revisions, role policies, organization-distinct quorums, and portable actor signatures. This is the distinction between “a node transported this” and “a named person at a named organization authorized this” — see Tutorial 5.

The wire contract is deliberately narrow and strictly canonical CBOR on topic evidence.command.v1:

  • canonical SUBMIT, NOTIFY, and REPUBLISH commands;
  • immutable head, version-record, effect-reference, and terminal-result codecs;
  • canonical evidence.available Kafka event bytes;
  • evidence/get request and response contracts that return the exact proven state keys and values;
  • domain-separated state keys, effect scopes, and Kafka keys; and
  • deterministic status derivation with fail-closed connector receipt checks.

The wire schema version is separate from the monotonically increasing business version. Immutable version records sit behind a small head record, and business status is derived from authenticated connector results rather than asserted.

ArtifactRepo pathRole
yano-x-evidence-contractsproducts/evidence/contractsNo-SPI canonical codecs, usable off-chain.
yano-x-evidence-registryproducts/evidence/registryThe deterministic state machine, its provider, and a bundle-owned read-only domain API.
yano-x-evidence-profileproducts/evidence/profileThe evidence-v1-gated and role-evidence composite profiles.
yano-x-evidence-clientproducts/evidence/clientTyped client for commands and proof-carrying reads.

The evidence-ledger recipe is the configuration-only path:

Terminal window
./yano.sh appchain init --non-interactive \
--recipe evidence-ledger --network devnet --members 3 --runtime jvm \
--output evidence-chain

For the complete connector demo — real object storage, a Kubo IPFS node, and Kafka — follow Tutorial 4. It needs Docker Desktop.

Deployments additionally need the release-matched optional connector bundles installed in plugins/ on every executor node, plus the external services themselves.