Module 02 · Live in production

Underwrite a wallet on what it has actually done

CreditGraph reads a wallet's borrowing history across lending protocols — repayments, collateral ratios maintained under stress, liquidations survived and suffered — and returns underwriting signals with the positions behind them.

EthereumSolanaAave · Compound · MorphoReason-coded
Typical response
POST /v1/credit/profile
{ "chain": "ethereum", "address": "0x91cd…8ee0",
  "lookback_days": 540 }

→ 200 OK
{
  "tier": "B+",
  "signals": {
    "repayment_events": 47,
    "repayment_ratio": 0.98,
    "liquidations_suffered": 1,
    "min_health_factor_90d": 1.34,
    "collateral_stability": "disciplined",
    "protocol_concentration": 0.62
  },
  "thin_file": false,
  "as_of_block": 20914773
}

No composite number is invented where the history does not support one. A wallet with too little activity comes back as thin_file: true rather than a confident bad grade.

47

protocol adapters, EVM and Solana lending markets

540d

default lookback, configurable to full history

0

off-chain data required to produce a profile

B+

tiers are derived from your own portfolio outcomes, not ours

Figures describe the current production deployment and are restated each quarter. Ask for the latest measurement report before you cite them.

The problem

Crypto lending mostly underwrites collateral, not borrowers

Over-collateralised lending works because the collateral does the underwriting. The moment you want thinner collateral, longer duration or an undercollateralised line, you need a view of the borrower — and the borrower is an address with no credit bureau behind it.

The history is public and almost nobody reads it properly. A wallet that has maintained a health factor above 1.3 through two drawdowns and repaid forty-seven times is a materially different risk from one that has never been stressed, and both look identical on a balance snapshot.

What teams do today
  • Collateral ratios set by committee and rarely revisited
  • Manual wallet forensics on the handful of largest borrowers only
  • Off-chain KYB used as a proxy for on-chain behaviour
  • No way to price a repeat borrower differently from a new one
How CreditGraph works

Positions, stress, behaviour

01

Position reconstruction

Every borrow, repay, deposit, withdrawal and liquidation is reconstructed per protocol from raw events — not from a protocol's own subgraph, so a subgraph outage or a schema change does not silently truncate a borrower's history.

02

Stress alignment

Behaviour is read against market conditions. Maintaining collateral through a 30% two-day drawdown counts; maintaining it in a flat month tells you very little, and the signals weight the two differently.

03

Signal output

You get the components — repayment ratio, minimum health factor, concentration, liquidation record — and optionally a tier fitted to your own realised losses. We would rather hand you the inputs to your credit policy than a grade you have to trust blindly.

Capabilities

What you get

Included in every plan

  • Full position history across supported lending protocols
  • Repayment, collateral-discipline and liquidation signals
  • Stress-window alignment against market drawdowns
  • Thin-file detection instead of a fabricated grade
  • Protocol and asset concentration measures
  • Point-in-time replay: what the profile said on any past date

Available on request

  • Tiers fitted to your own realised loss data
  • Sybil and wallet-linkage signals for airdrop-farmed histories
  • Portfolio monitoring with deterioration webhooks
  • Custom protocol adapters, typically two weeks
FieldTypeMeaning
tierstringOptional letter grade. Only returned once fitted to a portfolio; absent by default.
repayment_ratiofloat 0–1Value repaid over value borrowed across the lookback window.
min_health_factor_90dfloatTightest collateral position held in the last 90 days. Below 1.1 means repeatedly near liquidation.
liquidations_sufferedintegerCount of liquidation events against this address, with links to each.
protocol_concentrationfloat 0–1Herfindahl measure across protocols. High means one protocol failure takes the borrower with it.
thin_filebooleanTrue when history is too sparse to support a signal. Treat as unknown, not as bad.
Limits and honesty

Where an on-chain file runs out

On-chain history is evidence of past behaviour by a key, not proof of identity or of future capacity to repay.

An address is not a person. Key custody can change hands, and a clean history can be bought. Pair CreditGraph with identity controls for anything undercollateralised.
Sybil-farmed histories exist. Linkage signals are available and imperfect; a fresh, well-behaved wallet may be a fresh, well-behaved wallet, or one of fifty.
A thin file is not a bad file. Declining on thin_file alone will reject the newest half of the market — that is a policy choice, and it should be a deliberate one.

Test it against a book you already know the outcome of

The most useful first evaluation is a backfill of loans you have already resolved. Point-in-time replay makes that a fair test rather than hindsight.