fd7595e819
Lo screenshot della pagina margini era su Wasabi (rclone remote wasabi:, bucket
adp-work, cartella _scambio), non sulla VPS: per questo il percorso non esisteva.
Riconciliazione riproducibile in scripts/research/r0831_margini_conto.py (N11).
(a) HAIRCUT = 5%. La pagina non lo espone come numero: si ricava per differenza,
perche' il CROSS conta l'USDE scontato e il SEGREGATO non lo conta affatto.
S:SM (attivo) USDC Available 1.400,86 vs equity 1.412,28 - IM 11,55 = 1.400,73
X:SM CROSS Available 2.011,73
contributo USDE al cross = $610,81 su $643,05 -> 5,0137%
5% (KB) atteso $610,89 scarto $ 0,09 TORNA
10% (nostra) atteso $578,74 scarto $32,06 NON torna
config/live.json: haircut 0.10 -> 0.05. Il 26/08 il 10% fu registrato come
"verificato sul venue" senza traccia di COME, e non lo era.
(b) 🚨 IL CONTO NON E' CROSS-COLLATERAL: modello attivo "Segregated: Standard
Margin" (S:SM). Nella tabella del modello attivo l'USDE NON COMPARE: non fa
margine per i perp USDC-settled del book, e l'haircut oggi non si applica. Il che
spiega a posteriori perche' la misura di stamattina trovava $0,0000 accantonati:
non stavo guardando nel secchio sbagliato, cercavo un parametro che sul nostro
conto non e' in vigore.
NON MORDE: al massimo lordo del libro (1,0x = ~$2.056 di nozionale) l'IM sarebbe
~$41 contro $1.400 di USDC disponibile, 34x di copertura. Nessuna decisione
operativa cambia oggi.
Ma la premessa in CLAUDE.md era falsa, e il modo in cui lo era e' istruttivo:
"l'equity del book e' il TOTALE cross-collateral" metteva due cose sotto un nome
solo. Come RICCHEZZA sommare USDC+USDE e' giusto ed era il punto della riparazione
del 26/08 (evito' il falso "USCITA DI FONDI -24%"); come CAPACITA' DI MARGINE e'
sbagliato, perche' nel modello attivo l'USDE vale zero. Finche' il margine non
morde le due coincidono nell'uso, e infatti non era mai emerso.
Corretta anche la riga di usde_watch che stampava "margine utilizzabile ~$2.013
(haircut 10%)": era falsa due volte insieme. Ora stampa il solo silo USDC e,
accanto, cosa darebbe il cross.
La quota USDE non e' "collaterale diversificato": e' cassa a rendimento FUORI dal
sistema di margine. Passare a X:SM aggiungerebbe $610,87 di margine utilizzabile
ma porta la meccanica cross (collateral fee 0,05%/giorno sul saldo negativo,
ribilanciamento automatico): decisione dell'operatore, oggi non serve.
Ipotesi nuova e non verificata: il tetto del ~31,2% potrebbe dipendere proprio dal
modello segregato. Si saprebbe passando a X:SM e ri-sondando.
Suite: 800 passati.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
282 lines
17 KiB
Markdown
282 lines
17 KiB
Markdown
# 2026-08-31 — Fine della Proof of Reserves, e il guardiano che mancava
|
||
|
||
L'operatore ha passato l'annuncio *Deribit to Discontinue Daily Proof of Reserves Publication*.
|
||
La notizia in sé vale poco per noi. Quello che è emerso cercandola vale molto di più.
|
||
|
||
## 1. La notizia: frequenza giù, sostanza su, per noi nulla cambia
|
||
|
||
Dal **1 settembre 2026** la pagina Proof of Reserves sparisce e gli aggiornamenti quotidiani
|
||
cessano. Al loro posto, sotto il regime **VARA** di Dubai: audit **annuale** indipendente delle
|
||
riserve, audit annuale del bilancio, obbligo di **copertura 100%** e **segregazione** degli attivi
|
||
dei clienti. E: «*approximately 90% of client assets have been migrated to Coinbase, which acts as
|
||
a custodian for Deribit*».
|
||
|
||
**Non è un peggioramento netto, ed è importante non raccontarlo come tale.** Si perde un segnale
|
||
**ad alta frequenza e debole** (una PoR auto-pubblicata prova che gli attivi esistono in un istante,
|
||
non che coprano le passività, ed è aggirabile attorno allo snapshot) e si guadagna un segnale **a
|
||
bassa frequenza e più forte** (audit indipendente obbligatorio invece di pubblicazione volontaria),
|
||
più un miglioramento **sostanziale** di custodia: 90% degli attivi presso un custode terzo regolato
|
||
invece che nei wallet dell'exchange.
|
||
|
||
**Per noi non cambia nulla di operativo**, e per una ragione che va detta: *la PoR non l'abbiamo
|
||
mai sorvegliata*. Zero occorrenze in tutto il codice. `venue_probe` legge se il venue **risponde**,
|
||
non cosa **dichiara**. Si perde un segnale che non stavamo usando.
|
||
|
||
Ho provato a catturare l'ultimo dato prima che la pagina sparisse — è la mossa giusta per un dato
|
||
non ricostruibile con una scadenza. **Rinunciato di proposito**: la pagina è una SPA e
|
||
`get_proof_of_reserves` non esiste come metodo API («Method not found»), ma soprattutto uno
|
||
snapshot singolo e auto-riportato non regge lo standard di prova di questo progetto e **non
|
||
permetterebbe comunque di stimare `p`**. Un dato che non cambierebbe una decisione non vale il
|
||
lavoro per prenderlo.
|
||
|
||
## 2. 📌 La conseguenza vera: il riapritore della decisione più grande si è ristretto
|
||
|
||
La decisione vincolante **«100% Deribit fino a $20k»** (26/07) ha come riapritori dichiarati:
|
||
*«**$20k**, o un cambio di piano, o `p` che diventa **stimabile** invece che assunto»*.
|
||
|
||
Dal 1 settembre il segnale pubblico di solvibilità passa da **quotidiano ad annuale**. Il terzo
|
||
riapritore non è formalmente chiuso — un audit indipendente è semmai evidenza più forte — ma
|
||
diventa **praticamente irraggiungibile**: da una serie giornaliera si può costruire una stima, da
|
||
un punto all'anno no. ⇒ **In pratica quella decisione è ora gated SOLO dal capitale**: si riapre a
|
||
$20k, o non si riapre. Non cambia la decisione di oggi (fu presa con `p` esplicitamente **assunto**,
|
||
non osservato), ma chiude l'unica uscita non-capitale che aveva.
|
||
|
||
## 3. 🚨 Quello che ho trovato cercando: quattro annunci materiali che nessuno leggeva
|
||
|
||
Il debito #8 dice, testuale: *«Resta scoperto il Rulebook vero e proprio: la sonda legge se il
|
||
venue RISPONDE, non cosa il venue ANNUNCIA»*. Esiste un feed RSS pubblico
|
||
(`insights.deribit.com/exchange-updates/feed/`) con 10 voci. Alla prima lettura:
|
||
|
||
| data | annuncio | perché ci tocca |
|
||
|---|---|---|
|
||
| 27/08 | Discontinue Daily Proof of Reserves | §1 e §2 di questo diario |
|
||
| **14/08** | **Contract Specifications change for Linear USDC Perpetuals** | **i nostri due strumenti** |
|
||
| 05/08 | New SM Margin Model On Deribit | leva per taglia, tiered |
|
||
| **31/07** | **USDC Rewards Available In More Countries** | tocca una conclusione viva |
|
||
| 29/06 | New Fee Schedule On Deribit | `fee_watch` esiste per questo |
|
||
|
||
**Il caso che decide la questione è il 14/08.** Le specifiche dei perpetual USDC sono cambiate il
|
||
**18/08**; l'annuncio è del **14/08**. Il codice lo racconta già con onestà: la tabella «*non se
|
||
n'era accorta […] è andata bene per la direzione del cambiamento, non perché ce ne fossimo
|
||
accorti*» — i cambi erano **riduzioni** (tick BTC 0,5→0,1, ETH 0,05→0,01, min/step ETH
|
||
0,001→0,0001) e un valore più grosso resta conforme. `check_specs()` è **nato da quella svista** e
|
||
oggi gira ogni ora. Ma rileva la deriva **dopo**; il feed l'avrebbe detta **quattro giorni prima**.
|
||
*Il giorno che Deribit ALZA un minimo, «dopo» significa ordini rifiutati.*
|
||
|
||
Il 31/07 chiude un cerchio aperto ieri: l'espansione delle giurisdizioni idonee ai reward USDC
|
||
**non contiene l'Italia**, né alcun paese UE — mentre **San Marino e Città del Vaticano** (i due
|
||
microstati europei fuori dall'UE) **sono idonei**. La lista che avevo letto (aggiornata 20/08) è
|
||
posteriore all'espansione: **la conclusione dello zero USDC è confermata due volte**. Il pattern
|
||
UE-fuori/microstati-dentro suggerisce un driver regolatorio, ma la lista contiene anche Canada e
|
||
Giappone: **non asserisco una causa**, il fatto è l'esclusione.
|
||
|
||
## 4. Costruito: `venue_news.py`
|
||
|
||
Sorveglianza giornaliera del feed, dentro `cron_daily.sh` accanto a `fee_watch` (suo parente
|
||
stretto). Scelte che contano:
|
||
|
||
- **NON interpreta.** Dice *«è uscito questo, guardalo»*. Nessun automatismo su un testo di
|
||
marketing: P13 — una guardia sui NUMERI non copre il RAGIONAMENTO, e la prosa si legge come
|
||
opinione di un lettore fallibile. L'unica cosa che classifica è l'**urgenza**.
|
||
- **Le parole-chiave sono DERIVATE, non ridichiarate** (P1, il difetto più ricorrente del
|
||
progetto): gli strumenti vengono da `deribit._CONTRACT`, la valuta di collaterale da
|
||
`config/live.json`. *Chi aggiunge un asset al book allarga la sorveglianza senza toccare questo
|
||
file* — ed è esattamente il test che lo blinda.
|
||
- **Primo giro semina senza allertare** (P9: l'allarme massimo non si spende per un arretrato di
|
||
10 voci, o non verrà letto il giorno che è vero).
|
||
- **Feed illeggibile → codice 2 e nessun silenzio implicito** (P5: «non vedo» non è «niente di
|
||
nuovo»).
|
||
|
||
5 test sulle funzioni pure. La rete no: `scarica()` ritorna `None` su qualunque errore, ed è quello
|
||
il contratto.
|
||
|
||
**Cosa NON copre**, e va detto: il **Rulebook** vero e proprio (ADL, perdita socializzata,
|
||
*emergency powers*, conti dormienti) non ha un feed. Il debito #8 si restringe, non si chiude.
|
||
|
||
---
|
||
|
||
## 5. La Knowledge Base risponde a due domande aperte — e corregge due cose mie
|
||
|
||
L'operatore ha passato anche *yield-generating-collateral-usde-buidl-and-more*, che **non** documenta
|
||
tetti né haircut ma rimanda alla Knowledge Base. Interrogata via API Zendesk
|
||
(`support.deribit.com/api/v2/help_center/articles/search.json`), l'articolo giusto è
|
||
**«Cross collateral specifications»** (aggiornato 2026-02-20).
|
||
|
||
### (a) 🚨 Il costo del saldo negativo: **0,05% al GIORNO**
|
||
|
||
> «*While the equity of a currency in an account remains negative, a **collateral fee** will be
|
||
> charged to that account. This fee is charged daily in the same currency as the negative balance
|
||
> (**default = 0.05% per day**). The fee is charged based on the amount of time the negative equity
|
||
> is held, down to a granularity of seconds.*»
|
||
|
||
**18,25% annuo**, cioè **4,3× la resa USDE** che si starebbe comprando tenendo meno USDC. Il 30/08
|
||
avevo scritto «Deribit lo finanzia a interesse» **senza il numero** — l'affermazione era giusta e
|
||
vuota. Con il numero il criterio del **cuscino di regolamento** smette di essere prudenza e diventa
|
||
aritmetica: scendere sotto il cuscino per tenere più USDE è **−14 punti**.
|
||
|
||
E il ribilanciamento automatico **non salva**: scatta solo oltre **$1.000.000** assoluti o il
|
||
**100% della cross equity** (default tabulati), soglie che a $2k non si toccano mai. Non veniamo
|
||
ribilanciati: **sanguiniamo la fee**. *La cosa che sembrava un paracadute è, alla nostra taglia,
|
||
esattamente l'assenza di un paracadute.*
|
||
|
||
### (b) 🚨 Haircut USDe: la fonte dice **5%**, noi abbiamo registrato **10%**
|
||
|
||
| valuta | haircut X:PM | X:SM |
|
||
|---|---|---|
|
||
| BTC · ETH · **USDC** | — | — |
|
||
| USDT · USYC · **BUIDL** | 2% | 2% |
|
||
| PAXG | 2,5% | 5% |
|
||
| **USDe** | **5%** | **5%** |
|
||
| stETH | 7,5% | 7,5% |
|
||
| SOL | — | 15% |
|
||
|
||
`config/live.json` dice `haircut: 0.10`, e il diario del 26/08 lo dà per «verificato sul venue»
|
||
senza lasciare traccia di **come**. L'articolo è **anteriore** a quella data, quindi non si sa
|
||
quale delle due sia stale.
|
||
|
||
**Non l'ho riparato** (P12: fra due fonti che non concordano, una riparazione silenziosa è
|
||
un'invenzione; M28: la contraddizione è informazione). Si tiene **0,10** per tre ragioni dichiarate:
|
||
è il lato **conservativo** (sottostima il margine utilizzabile), **non è sul percorso soldi** (non
|
||
entra nel sizing — lo usa solo il report di `usde_watch`), ed è già misurato che **non morde a
|
||
nessuna quota fino al 90%**. Si chiude leggendo la pagina margini del conto, che è dove Deribit
|
||
stesso dice di guardare.
|
||
|
||
### (c) Un dato di lato che vale per il futuro
|
||
|
||
**BUIDL ha haircut 2%** — sarebbe stato il *miglior* collaterale a rendimento del listino (contro
|
||
il 5% dell'USDe), se solo lo si potesse comprare. E **stETH 7,5%**, il peggiore: terza ragione
|
||
indipendente per lasciarlo stare, dopo il tasso dimezzato e l'esposizione ETH.
|
||
|
||
📌 **Nessuna delle due fonti documenta un tetto sulle quantità detenibili.** Il ~31,2% sull'USDE
|
||
resta **misurato e non spiegato** — e ora si sa che non è una svista di lettura: non è scritto da
|
||
nessuna parte.
|
||
|
||
### (d) Tentata la chiusura della divergenza sull'haircut: **non è raggiungibile da qui**
|
||
|
||
Deribit dice: «*Haircut rates can be seen on the margin page in your account*». Quella pagina è web
|
||
UI, e le credenziali vivono solo dentro il gateway (debito #11). Provato comunque:
|
||
|
||
- `account_summary` per la valuta **USD** (la "riga USD" che il doc menziona) → `Invalid currency`;
|
||
- parametro **`extended`** (che su Deribit apre i dettagli di margine) → **ignorato**;
|
||
- il gateway filtra a **8 campi**: niente `initial_margin`, niente `maintenance_margin`.
|
||
|
||
E non è che si sia guardato nel secchio sbagliato — **la contabilità torna esatta senza haircut**:
|
||
|
||
```
|
||
USDC equity 1412.281074 available 1400.728093 riservato 11.5530
|
||
USDE equity 643.175691 available 643.175691 riservato 0.0000
|
||
posizioni lorde $577.65
|
||
|
||
riservato in USDC ........... $11.5530
|
||
IM di posizione al 2% ....... $11.5530
|
||
RESIDUO ..................... $-0.0000
|
||
```
|
||
|
||
Un haircut al **5%** chiederebbe **$32,16** accantonati, al **10%** ne chiederebbe **$64,32**: non
|
||
ci sono, e il secchio USDE riserva `0.000000`. ⇒ **L'haircut non è osservabile in alcun campo
|
||
esposto.** O è applicato solo nella vista cross/USD che il gateway filtra via, o non è applicato al
|
||
nostro conto: da qui **le due cose non si distinguono**, e non le si sceglie tirando a indovinare.
|
||
|
||
**La divergenza resta APERTA**, ma ora con la ragione misurata invece che supposta. La chiudono due
|
||
cose, entrambe dell'operatore: **30 secondi sulla pagina margini** della web UI, oppure delle
|
||
**chiavi API Deribit** — che è la decisione già dichiarata nel debito #11, non un refactor.
|
||
Nel frattempo **non morde nulla di osservabile**: l'IM è il 2% del nozionale e il valore pieno
|
||
dell'USDE resta disponibile, quindi 5% o 10% non cambia una singola cifra operativa.
|
||
|
||
📌 **Sottoprodotto non cercato**: $11,5530 / $577,65 = **2,0000% = esattamente 1/50**. È il
|
||
`C1 = 50` (start leverage, tier 1) del **nuovo modello di margine SM** annunciato il 05/08 — quello
|
||
che `venue_news` ha appena tirato fuori dal feed. **Confermato sul nostro conto senza averlo
|
||
cercato**, ed è la prima volta che un annuncio del venue viene verificato contro il conto invece
|
||
che creduto.
|
||
|
||
### (e) L'operatore dichiara: il conto è **Standard Margin** — due conferme incrociate
|
||
|
||
Lo screenshot della pagina margini non è arrivato fin qui (sta sul desktop dell'operatore, non
|
||
sulla VPS: il percorso non esiste su questa macchina). Ma il fatto dichiarato — **«è attivo
|
||
Standard margin»** — aggancia due cose che erano sospese:
|
||
|
||
1. **Quale colonna leggere.** La tabella KB ha `Haircut (X:PM)` e `Haircut (X:SM)`. Il conto è
|
||
**X:SM**, quindi vale la seconda — che per USDe dice **5%**, come la PM. La divergenza col
|
||
nostro `0.10` resta quindi intatta, ma ora si sa con certezza *quale* numero ufficiale la
|
||
contraddice, invece di doverne scegliere uno fra due colonne.
|
||
2. **Perché l'IM misurata era esattamente 1/50.** Il nuovo modello di margine del 05/08 si applica,
|
||
testuale, ai *«standard margin accounts»*. Il conto è standard margin, e noi abbiamo misurato
|
||
IM = **2,0000%** del nozionale = **1/50** = il `C1 = 50` di tier 1. **Le due cose si confermano
|
||
a vicenda**: un fatto dichiarato dall'operatore e una misura fatta sul conto senza conoscerlo.
|
||
|
||
*Vale la pena notarlo perché è raro: in tutta questa settimana ogni affermazione pubblicata dal
|
||
venue si è rivelata falsa per il nostro conto (APR USDC, «all users can buy BUIDL»). Questa è la
|
||
prima che il conto conferma.*
|
||
|
||
**Cosa manca ancora**, e resta l'unica cosa che chiude la divergenza: il numero di haircut per USDe
|
||
**mostrato sulla pagina Standard Margin del conto**. Se dice 5%, la nostra config è stale e il 26/08
|
||
registrò male; se dice 10%, la KB è stale e la config ha ragione. Finché non c'è, si tiene 0.10 —
|
||
lato conservativo, fuori dal percorso soldi, e **senza un solo effetto operativo misurabile**.
|
||
|
||
---
|
||
|
||
## 6. La pagina margini arriva davvero — e la seconda cosa che dice vale più della prima
|
||
|
||
Lo screenshot era su **Wasabi** (`rclone` remote `wasabi:`, bucket `adp-work`, cartella `_scambio`),
|
||
non sulla VPS: per questo il percorso non esisteva. Scaricato e letto.
|
||
Riconciliazione riproducibile in **`scripts/research/r0831_margini_conto.py`** (N11).
|
||
|
||
### (a) ✅ Haircut = **5%**. La nostra config aveva torto.
|
||
|
||
La pagina **non espone l'haircut come numero**: si ricava per differenza, perché il modello CROSS
|
||
conta l'USDE scontato e il SEGREGATO non lo conta affatto.
|
||
|
||
```
|
||
S:SM (attivo) USDC Available 1,400.86 · USDC equity 1,412.28 − IM 11.55 = 1,400.73 (scarto $0.13)
|
||
X:SM CROSS Available 2,011.73
|
||
contributo USDE al cross = 2,011.73 − (1,412.28 + 0.20 − 11.55) = $610.81 su $643.05 di valore
|
||
→ haircut implicito 5,0137%
|
||
ipotesi 5% (KB) → atteso $610.89 scarto $ 0.09 ✅
|
||
ipotesi 10% (nostra) → atteso $578.74 scarto $32.06 ❌
|
||
```
|
||
|
||
`config/live.json` passa da `0.10` a **`0.05`**. Il 26/08 il 10% fu registrato come «verificato sul
|
||
venue» **senza lasciare traccia di come**, e non lo era. *Una nota di provenienza che dice «verificato»
|
||
senza dire con quale lettura non è provenienza: è la stessa parola usata come garanzia.*
|
||
|
||
### (b) 🚨 Il conto **non è cross-collateral**. È `Segregated: Standard Margin`.
|
||
|
||
Lo dice la schermata in cima — *Current status: **Segregated: Standard Margin*** — e la tabella del
|
||
modello attivo elenca **BTC, ETH, USDC. L'USDE non c'è.**
|
||
|
||
⇒ **L'USDE non fa margine per i perp USDC-settled del book**, e l'haircut **oggi non si applica
|
||
affatto**. Il che spiega, a posteriori e in modo pulito, perché la misura di stamattina trovava
|
||
**$0,0000** accantonati: non stavo guardando nel secchio sbagliato, *stavo cercando un parametro
|
||
che sul nostro conto non è in vigore*.
|
||
|
||
**NON MORDE**, e va detto subito per non allarmare: al massimo lordo del libro (1,0x ≈ $2.056 di
|
||
nozionale) l'IM sarebbe ~$41 contro **$1.400 di USDC disponibile** — 34× di copertura. Nessuna
|
||
decisione operativa cambia oggi.
|
||
|
||
**Ma la premessa scritta in CLAUDE.md era falsa**, e il modo in cui era falsa è istruttivo. Diceva:
|
||
*«l'equity del book è il TOTALE cross-collateral»*. Sono due cose diverse messe sotto un nome solo:
|
||
|
||
- come **ricchezza**, sommare USDC+USDE è **giusto** — ed era il punto della riparazione del 26/08,
|
||
che evitò il falso «USCITA DI FONDI −24%» e una vendita indesiderata;
|
||
- come **capacità di margine**, è **sbagliato**: nel modello attivo l'USDE vale zero.
|
||
|
||
Finché il margine non morde le due coincidono nell'uso, e infatti non è mai emerso. *Un errore che
|
||
non ha conseguenze finché una terza cosa resta vera è un debito, non un'assoluzione.* Corretto in
|
||
CLAUDE.md, e corretta anche la riga di `usde_watch` che stampava «margine utilizzabile ~$2.013
|
||
(haircut 10%)»: era falsa due volte insieme.
|
||
|
||
### (c) Come cambia il modo di pensare alla quota USDE
|
||
|
||
Non è «collaterale diversificato»: è **cassa messa da parte a rendimento, fuori dal sistema di
|
||
margine**. Il che rende il tetto del venue al ~31,2% meno una limitazione e più un caso fortunato —
|
||
tiene automaticamente dentro al 31% la parte di conto che non lavora come margine.
|
||
|
||
E apre una **decisione dell'operatore**, non mia: passare a **X:SM** aggiungerebbe **$610,87** di
|
||
margine utilizzabile, ma porta con sé la meccanica cross — *collateral fee 0,05%/giorno* sul saldo
|
||
negativo e ribilanciamento automatico. Oggi non serve (34× di copertura); servirebbe solo a leve
|
||
che non sono autorizzate.
|
||
|
||
📌 **Ipotesi nuova sul tetto del ~31,2%**, non verificata: potrebbe dipendere proprio dal modello
|
||
segregato. Si saprebbe passando a X:SM e ri-sondando — un esperimento che ora ha un senso, dove
|
||
prima non si sapeva nemmeno cosa variare.
|