e5052a690f
- 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
106 lines
7.0 KiB
Markdown
106 lines
7.0 KiB
Markdown
# 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).
|