Files
PythagorasGoal/docs/diary/2026-08-26-usde-analisi.md
T
Adriano Dal Pastro e5052a690f usde: da patch d'emergenza a struttura — config, modulo unico, sorveglianza
- config/live.json sezione `usde` (unica autorita', P1): indice, haircut 10%,
  tetto allerta quota 50%, soglie depeg 0.99/0.95 coi criteri dichiarati (P6)
- src/live/usde.py: config + catena di prezzo (indice pubblico -> ticker ->
  1.0 dichiarato) + valutazione PURA; shadow._collaterale_usde ora deriva da qui
- scripts/live/usde_watch.py + cron_usde.sh (12:35 UTC, dopo la finestra reward):
  reward per delta netto trade (P12: senza inventare attribuzioni), depeg
  (crit ripetuto, resto a transizione, P9), quota anche per deriva passiva (N4);
  applica il verdetto di eligibilita' pre-registrato (>=1 reward entro 29/08)
- serie data/live/usde_watch.jsonl sotto monitor_health (max 30h, P5: un watch
  fermo non deve leggersi come "va tutto bene"); baseline 14:17Z registrata
- GATE USDE-01 in CLAUDE.md §4; test 775 (+17 in tests/test_usde_watch.py)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B9UyJLHzR7EJzxR3iQ3RN1
2026-08-26 15:11:44 +00:00

106 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-08-26 — USDE come collaterale a rendimento: analisi da candidato
**Domanda dell'operatore:** *"analizziamo usde"* — dopo la chiusura della pista USDC rewards
(Italia esclusa da MiCA). **Script:** `scripts/research/r0826_usde_scenari.py` (N11).
## Verificato SUL VENUE (API pubblica, oggi — N10)
- `apr: 4.0` per USDE (era "fino a 9%" al lancio 03/2025: tasso = APR settimanale Ethena 5%
di fee Deribit; comprime coi funding) · reward **giornalieri** ~12:00 UTC sul minimo di
equity USDE, voce nel Transaction Log → **falsificazione in 24-72h**
- spot `USDE_USDC` attivo: spread osservato **~3 bps**, fee spot **zero**
- **haircut cross-collateral 10%** (USDC 0%): il 90% fa margine — al nostro profilo di leva
(max realizzata 0,52x su tetto 1,0x) **non morde**
- **indice `usde_usd` multi-exchange con mediana e clamp ±0,5%** — NON il book interno:
è la differenza strutturale dal caso Binance del 10/10/2025 ($0,65 dall'oracle sul proprio
book da $8M mentre USDe quotava ~$0,99 altrove, riscatti regolari, peg tornato in 8h)
- eligibilità **per residenza, lista non pubblica** → si verifica sul CONTO, non sui documenti
(la lezione USDC di stamattina)
## Rischi dichiarati (p non stimabile → si controlla con la QUOTA, N4)
R1 **emittente**: basis trade (staking + short perp); fallimento = fino a 100% della quota —
si SOMMA al rischio venue accettato il 26/07, non lo sostituisce. R2 **marcatura in crash**
(P10: l'accoppiamento — il mark scende proprio quando il libro è lungo). R3 **tasso**: 9→4%
in 17 mesi; funding negativi prolungati → ~0. R4 **regolatorio EU** (Ethena GmbH liquidata
dopo BaFin; USDe non è EMT MiCA — per questo PUÒ pagare dove USDC non può).
📌 Nota a favore da misurare se si procede: il rendimento USDe sale coi **funding positivi**,
cioè quando il nostro libro long li PAGA (2,16%/anno): sconto parziale correlato sulla tassa
di funding.
## L'aritmetica (dallo script)
| equity | quota 50% rende | 100% costa | note |
|---|---|---|---|
| $2.065 | $41/anno | $1.032 | conversione ripagata in ~3 giorni |
| $5.065 | $101/anno | $2.532 | scenario post-versamento |
| $20.000 | $400/anno | $10.000 | dove la posta diventa seria |
Mark 1% = 3 mesi di resa · 3,5% = 11 mesi · **100% = 25 anni: non si recupera mai**
→ la leva di controllo è la **quota**, non il tasso.
## PROPOSTA (pre-registrata qui, esito da scrivere sotto)
**Test di eligibilità sul conto**: convertire **~$500 USDC→USDE** (costo <$0,20 totale),
tenere **3 giorni**, guardare il Transaction Log alle ~12:00 UTC (reward atteso ~$0,05/g).
Regola dichiarata PRIMA di vedere l'esito: **≥1 voce reward in 3 giorni → idoneo**, e si apre
la decisione di quota (con un gate: quota massima, chi la decide, cosa la riapre);
**0 voci → non idoneo**, si riconverte e la pista si chiude come l'USDC.
L'esecuzione è dell'operatore (app: Spot → USDE/USDC) o autorizzata esplicitamente via gateway.
Il libro non c'entra: nessun codice del percorso soldi viene toccato dal test.
## ESECUZIONE DEL TEST (stesso giorno, 13:04 UTC — autorizzata dall'operatore: "fai test")
Ordine via gateway, limit marcabile con banda di sicurezza sul prezzo (0,995-1,005):
**500 USDE @ 1,0003, filled, fee 0** (`USDE_USDC-8977542793`). Costo totale ~$0,15.
Prima finestra utile di reward: ~**28/08 12:00 UTC** (il calcolo usa il minimo di equity
USDE della finestra); verifica finale il **29/08**: ≥1 voce reward nel Transaction Log →
idoneo; 0 voci → si riconverte e la pista si chiude.
🚨 **DIFETTO TROVATO E RIPARATO DURANTE IL TEST — il test valeva gia' per questo.**
`shadow._equity` leggeva SOLO il conto USDC: dopo la conversione il book avrebbe visto
$1.556 (24,3%) al giro delle 13:47 → falso 💰 "USCITA DI FONDI" **e vendita indesiderata
di ~$140 di posizioni** (i target scalano con l'equity). Riparato in 35 minuti, prima del
giro: `_collaterale_usde()` valuta l'USDE all'**indice pubblico** `usde_usdc` (mediana
multi-exchange — la lezione Binance 10/10), con tre proprieta' blindate da 6 test nuovi
(`tests/test_shadow_usde.py`): un **depeg PASSA nel sizing** (mai nascosto), sopra la pari
si **clampa a 1,0**, indice illeggibile → **1,0 dichiarato, mai 0** (contare 0 ricreerebbe
il falso 24%: il fallback si sceglie sul danno, P5). Verificato live: equity vista dal
book $2.055,88 ("mainnet USDC + USDE 500 @ 0.9999").
*Un test da $500 progettato per misurare l'eligibilita' ha scoperto che il book era cieco
al cross-collateral: se la prima conversione fosse stata fatta a quota vera, l'errore
sarebbe costato caro. I test piccoli esistono per questo.*
*Esito eligibilita': (da scrivere entro il 29/08)*
## STRUTTURA (stesso giorno, ~14:20 UTC — "struttura il progetto per gestire subito usde")
La patch d'emergenza delle 13:07 e' diventata struttura di prima classe:
- **`config/live.json` sezione `usde`** — l'unica autorita' sui parametri (P1): `index_name`,
`haircut` 0.10, `quota_max_frac` 0.50 (tetto di ALLERTA — la quota effettiva la decide
l'operatore), `depeg_warn` 0.99 / `depeg_crit` 0.95 coi **criteri dichiarati** in `_nota_usde`
(P6: warn = fuori dalla banda spot ~3 bps e oltre il clamp ±0,5% per fonte dell'indice;
crit = meta' del buffer di haircut consumata).
- **`src/live/usde.py`** — modulo unico per config, catena di prezzo (indice pubblico → ticker
spot → 1,0 dichiarato) e valutazione `valuta()` PURA. `shadow._collaterale_usde` ora DERIVA
da qui (niente ridichiarazioni); i 6 test di shadow passano invariati.
- **`scripts/live/usde_watch.py`** + `cron_usde.sh` alle **12:35 UTC** (dopo la finestra reward
~12:00, fuori da :00/:25/:47) — sola lettura: (1) **reward per DELTA di equity al netto dei
trade spot** (il gateway non espone il Transaction Log; un delta con trade nel mezzo si
dichiara, trade illeggibili → delta NON attribuito, P12); (2) **depeg**: 🚨 solo sotto crit
e ripetuto, ⚠️ warn/quota/BLIND solo alla transizione (P9); (3) **quota sul totale**, che
allerta anche per deriva PASSIVA (il libro perde → la quota sale da sola, N4). Applica il
**verdetto pre-registrato** (≥1 reward entro il 29/08 → IDONEO; zero → riconvertire) invece
di lasciarlo a un promemoria. Limite dichiarato: cadenza giornaliera, un depeg intraday puo'
sfuggire all'ALLERTA — ma non al SIZING, che legge l'indice a ogni giro orario del book.
- **Serie `data/live/usde_watch.jsonl`** — dentro il perimetro di backup, `ts` in ms epoch →
sorvegliata da **`monitor_health`** (max_age 30h, `open_labeled=False`): un watch fermo
spegnerebbe gli allarmi depeg e il silenzio si leggerebbe come "va tutto bene" (P5).
- **Baseline registrata alle 14:17:52Z**: 500 USDE @ 1,0000 (indice) = $500,00 · quota 24,3%
(tetto 50%) · margine utilizzabile ~$2.008 · verdetto IN_ATTESA. E' la lettura che rende
misurabile il delta del 28/08.
- **Test: 775 passati** (+17 nuovi in `tests/test_usde_watch.py`: valutazione condivisa,
rilevatore reward, verdetto — incluso che NON anticipa la scadenza del 29/08 —, condizioni
di allerta, `px=None` che non finge un depeg).