Skip to main content
Schema D is the reconciler / cross-attestation — peer trust expressed on chain. Unlike Schemas A (operator-issued brand identity), B (lender-issued credit verdict), and C (lender-issued repayment history), Schema D is open to any registered entity attesting any other registered entity with a 0-100 trust score and a short free-text basis. This is the dispute-loop surface. When a merchant disputes a credit-risk verdict, when a service provider cross-attests inventory custody, when a business buyer attests a merchant’s reliability — those are all Schema D rows. The reconciler closes the loop by mirroring current registry status onto every ACTIVE Schema D attestation every 6 hours, so verifiers can decide whether to honor an attestation issued by a party whose standing has since changed.

Network & UIDs

EAS registry version: v1.4.0.

Field reference

ABI schema string:
EAS envelope fields:

Registry-status mirror (attestorCurrentStatus)

The reconciler sweeps every 6 hours and mirrors the current issuer registry status onto every ACTIVE Schema D row. This is how Schema D closes the dispute loop:
For service-provider issuers, this mirrors ServiceProviderRegistry. For other issuer types (merchant, lender, business-buyer), this remains null until those registry lookups are wired into the reconciler. The reconciler never auto-revokes. A Schema D attestation issued by a service provider that has since been SUSPENDED (e.g., contract terminated, custody dispute) is still on-chain ACTIVE — the chain has no opinion. Verifier policy decides whether to honor it. The MCP get_trust_dossier tool exposes the mirror in its envelope.

How Schema D closes the loop on disputes

The 4-axis trust fabric is open on the inputs (lenders write B + C, operators write A) but the resolution loop is also open: a disputing party writes a Schema D attestation referencing the disputed record. Two patterns are observed in production:
  1. Counter-attestation — a merchant disputes a Schema B verdict by minting a Schema D row with subjectRootUid = "lender:<lenderId>", trustScore low, and basis citing the disputed UID. Subsequent verifiers see both records and apply their own policy.
  2. Service-provider attestation — a WMS partner (e.g., Stor’d) cross-attests inventory custody. This is independent evidence feeding back into the lender’s Schema B re-underwrite at next term. The service-provider issuer class is registered in ServiceProviderRegistry; the partner’s signing wallet must be ACTIVE for the attestation to be honored.
The reconciler doesn’t take sides. It only ensures that at read time, a verifier sees the current registry standing of every party in the dispute graph.

Read via Droplinked API

By subject — “what has anyone said about this entity”:
By issuer — “what has this entity said about anyone”:

Read via viem (TypeScript)

Read via ethers (TypeScript)

Read via Cast (Foundry)

Indexer access (EAS GraphQL)

“All Schema D attestations issued BY this wallet” — issuer-side enumeration:
“All Schema D attestations targeting this subject” — for fast subject-side enumeration with already-decoded fields, use the Droplinked API (GET /v2/attestations/cross/subject/:rootUid). EAS GraphQL has no native index on the encoded subjectRootUid string.

Trust assumptions

A Schema D attestation is authoritative if and only if:
  1. The on-chain schema matches the mainnet UID above.
  2. The on-chain attester wallet maps to a currently ACTIVE registered entity. For service-provider issuers, check ServiceProviderRegistry (Droplinked-side admin lookup) — the verifier API exposes the mirror via attestorCurrentStatus.
  3. revocationTime == 0.
  4. The semantic interpretation of trustScore is the consumer’s responsibility — Droplinked does not canonicalize a comparable scale across issuerEntityType classes. Always read basis and issuerEntityType together with the score.
For non-service-provider issuer classes (merchant, lender, business-buyer), the reconciler does not yet wire registry status into attestorCurrentStatus; it will return null. Cross-check the issuer directly against /v2/lenders/:lenderId (for lender issuers) or the merchant verifier path until those mirrors land.