c8be83ef6e
Richiesta: leggere la pagina margini del conto per chiudere il 5% (KB) vs 10% (nostra config). NON E' RAGGIUNGIBILE da qui: account_summary per la valuta USD da' "Invalid currency", il parametro `extended` viene ignorato, e il gateway filtra a 8 campi senza initial_margin/maintenance_margin (debito #11). E non e' che si sia guardato nel secchio sbagliato: la contabilita' TORNA ESATTA senza alcun termine di 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 -> IM al 2% = $11.5530 -> RESIDUO -$0.0000 Un haircut al 5% chiederebbe $32,16 accantonati, al 10% $64,32: non ci sono. => L'haircut non e' osservabile in ALCUN campo esposto. O e' applicato solo nella vista cross/USD che il gateway filtra, o non e' 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 con la ragione MISURATA invece che supposta. La chiudono 30 secondi sulla web UI o delle chiavi API Deribit (la decisione gia' dichiarata nel debito #11, non un refactor). Nel frattempo non morde nulla di osservabile: l'IM e' il 2% del nozionale e l'USDE resta interamente disponibile, quindi 5% o 10% non cambia una cifra operativa. L'operatore ha dichiarato che il conto e' STANDARD MARGIN. Aggancia due cose: - la colonna da leggere e' Haircut (X:SM), che per USDe dice 5% come la PM: ora si sa con certezza quale numero ufficiale contraddice il nostro; - spiega perche' l'IM misurata e' esattamente 1/50: il nuovo modello di margine del 05/08 si applica ai "standard margin accounts", tier 1 C1=50. Un fatto dichiarato dall'operatore e una misura fatta senza conoscerlo si confermano a vicenda — ed e' la PRIMA affermazione del venue che il conto conferma questa settimana, dopo l'APR USDC e "all users can buy BUIDL". Lo screenshot non e' arrivato: il percorso sta sul desktop dell'operatore, non sulla VPS. Suite: 800 passati. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
215 lines
13 KiB
Markdown
215 lines
13 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**.
|