Skip to main content
Schema C is the reader / repayment-history attestation — a registered lender’s append-only record of a merchant’s settlement performance against credit lines that lender has issued. Every settlement event mints a new row; the latest row per (merchantId, lenderId) is the active view, and the chain preserves the full history. This is the per-order evidence schema. It powers the attestationCoveragePctBps field on /v2/merchant/orders — the fraction of credit-leg-bearing orders that have a corresponding Schema C attestation, in basis points.

Why append-only

Schema C is registered as revocable: false on chain. Corrections are issued as a new attestation with updated counts; the chain preserves the full history; latest-by-attestedAt per (merchantId, lenderId) wins for read-time queries. The counters are monotonically non-decreasing — settledOnTimeCount, lateCount, defaultCount, totalLinesUsdCents all only ever go up.

Network & UIDs

EAS registry version: v1.4.0.

Field reference

ABI schema string:
EAS envelope fields:

Order-level evidence — attestationCoveragePctBps

The merchant orders endpoint exposes a top-line coverage metric derived from Schema C:
9650 bps = 96.50% of credit-leg-bearing orders have a matching Schema C attestation (via orderId cross-reference). A drop in coverage means the lender’s settlement-event emitter is lagging or has stopped — it’s a freshness probe for the merchant’s underwriting signal stream.

Reading running totals: snapshot vs delta

A single Schema C row is a cumulative snapshot as of lastSettlementAt. To compute the delta added by the most recent settlement, fetch the previous attestation for the same (merchantId, lenderId) and subtract counters. The Droplinked API’s verify_repayment_history already does this aggregation:
The aggregate sums latest-row counters across lenders for credit-tier upgrade decisions: T1→T2 requires 3+ settled-on-time; T2→T3 requires 10+ settled with 0 defaults in 24mo.

Read via Droplinked API

Read via viem (TypeScript)

Read via ethers (TypeScript)

Read via Cast (Foundry)

Indexer access (EAS GraphQL)

All Schema C attestations a lender has emitted, newest first:
All Schema C attestations referencing a specific order — the on-chain orderId is part of the off-chain mirror, not the EAS payload. Use GET /v2/attestations/repayment-history/:merchantId and filter client-side on orderId, or use the Droplinked-side admin lineage endpoint.

Trust assumptions

A Schema C attestation is authoritative if and only if:
  1. The on-chain schema matches the mainnet UID above.
  2. The on-chain attester is ACTIVE in LenderRegistry.
  3. revocable == false (sanity check — a Schema C row that claims revocable == true is malformed).
  4. Counters are monotonically non-decreasing relative to the prior attestation in the same (merchantId, lenderId) chain. A row that decreases any counter is either malformed or a write-bug; do not honor it. The Droplinked-side issuer enforces this off-chain monotonic guard before mint.
Schema C does not have a lenderCurrentStatus mirror (Schema C is append-only history, so a status flip on a lender doesn’t change a historical fact). To assess whether to consume a lender’s Schema C stream right now, consult GET /v2/lenders/:lenderId directly.