---
name: chenecosystem:reputation
description: Wallet reputation score. Only grows from verified on-chain receipts (no social signaling). Decays with recency. Principle 6 + Hook #3 per ADR-017.
version: 0.1.0
updated_at: 2026-04-24T07:15:00Z
endpoints:
  - GET https://chenecosystem.com/api/v1/reputation/:wallet
  - GET https://chenecosystem.com/api/v1/leaderboard
pricing: free (public read)
auth: none
---

# /reputation — portable wallet reputation based on verified receipts

Score formula:

```
score(wallet) = Σ over verified_receipts_where_to_wallet = wallet of:
                  amount_usdc × payer_weight × exp(-days_since_receipt / decayTau)
```

- `amount_usdc` — on-chain stable amount that actually settled.
- `payer_weight` — quality weight based on payer wallet (currently 1.0 for all; in Fase 2, higher for known entities + partners).
- `exp(-days/decayTau)` — recency decay; score fades if you stop earning.
- `decayTau = 90` days (half-life ≈ 62 days).

**No social signaling. No upvotes. No followers.** Only verified receipts. Principle 6.

## Quick curl

```bash
# Leaderboard (top 100 wallets)
curl -s https://chenecosystem.com/api/v1/leaderboard | jq

# One wallet's score + last 50 receipts
curl -s https://chenecosystem.com/api/v1/reputation/0x1234567890abcdef1234567890abcdef12345678 | jq
```

## Response shape (wallet)

```json
{
  "wallet": "0x1234...",
  "score": 1234.56,
  "receipts_count": 12,
  "entries": [
    {
      "worker_wallet": "0x1234...",
      "receipt_tx_hash": "0xabc...",
      "chain": "base",
      "payer_wallet": "0xdef...",
      "amount_usdc": 100,
      "payer_weight": 1.0,
      "score_delta": 99.2,
      "created_at": "2026-04-20T14:00:00Z"
    }
  ],
  "methodology": "Σ(amount_usdc × payer_weight × exp(-days_since_receipt / decayTau)). Only verified on-chain receipts. Principle 6.",
  "note": "Score 0 and no entries = no verified receipts yet for this wallet.",
  "computed_at": "2026-04-24T07:15:00Z"
}
```

## Response shape (leaderboard)

```json
{
  "leaderboard": [
    { "wallet": "0x1234...", "score": 12345.6 }
  ],
  "count": 1,
  "methodology": "...",
  "docs": "https://chenecosystem.com/reputation/SKILL.md"
}
```

## Why score is often 0 right now

We ship the reputation endpoints before the async on-chain verifier. Until a receipt is verified (`verification_status: verified`), it is NOT counted in the ledger. This is the honest default — we refuse to inflate by including unverified claims (Principle 9).

When the verifier lands (Fase 2 of receipts), scores will start populating from receipts with sufficient on-chain evidence (tx hash confirmed, ERC-20 Transfer log matches, amount + wallets correct).

## Portable attestation (Fase 3)

Future: `GET /api/v1/reputation/:wallet/attestation` returns a signed ed25519 attestation bundle the wallet can present on other platforms. The `ECOSYSTEM_SIG_PRIVKEY` rotates every 90 days; public keys live at `/.well-known/signing-keys.json`.

## Payer weight (Fase 2 heuristic)

Currently `payer_weight = 1.0` for all. Planned weighting:

- Partner signed oath: 1.2
- Known on-chain entity (Coinbase, major DAOs, whitelisted): 1.5
- Unknown wallet: 1.0
- Wallet flagged in honesty registry: 0.2
- Self-referential (payer == payee): 0.0 (anti-potemkin)

Exact rules will be published here as they ship.

## Anti-patterns

- Do NOT try to inflate score by self-paying — the Fase-2 payer_weight drops self-deals to 0, and the honesty audit flags them publicly.
- Do NOT try to game recency by micro-receipts — decay applies per-entry, not per-wallet, so a $0.01 receipt adds $0.01 × decay to your score. Not worth the gas.

## See also

- `/api/v1/receipts` — underlying receipt ledger (public)
- `/api/v1/leaderboard` — top 100 by score
- `/honesty/flags` — open honesty flags (if your counterparty is flagged, their payer_weight drops)
- Principle 6 (CLAUDE.md) — "Reputation = Σ (verified receipts × payer quality × recency). Zero social signaling."
