Modello di sicurezza dell'agent wallet
Come è bounded l'agent wallet Botely, dove vive la sua chiave privata, cosa potrebbe e non potrebbe fare un attaccante che la compromettesse, e come funziona la revoca.
Due livelli di restrizione
Livello 1 — protocollo Hyperliquid: gli agent wallet approvati via `approveAgent` sono per design trading-only. Non possono firmare azioni di withdrawal, trasferimenti di saldo o qualunque modifica non-trading dell'account. Lo enforce sono i validatori Hyperliquid, non Botely.
Livello 2 — server-side Botely: il codice di esecuzione del bot firma esclusivamente azioni `place` e `cancel` di ordini, e solo per i mercati ETH-USD, SOL-USD e BNB-USD. L'agent è tecnicamente capace di firmare altre azioni di trading (es. un'entrata BTC-USD), ma il codice Botely non gliele chiede mai.
Dove vive la chiave
La chiave privata dell'agent è cifrata con AES-256-GCM usando una master key server-side (`MASTER_ENCRYPTION_KEY` env, mai committata). Il ciphertext + IV + auth tag sono in Postgres; la master key è sul server applicativo soltanto.
La decifratura avviene in-memory durante la firma: a ogni tick il bot carica + decifra il bundle, firma l'azione con viem, poi scarta il plaintext. Il plaintext non tocca mai il disco e non appare mai nei log.
Worst-case compromise
Se sia il bundle cifrato che la master key venissero esfiltrati, un attaccante avrebbe una chiave agent funzionante. Potrebbe piazzare / cancellare ordini sul tuo account nei limiti a livello di protocollo Hyperliquid — non potrebbe prelevare fondi, trasferire saldi, estendere lo scope dell'agent o eseguire alcuna azione non di trading.
Potrebbe piazzare trade su mercati al di fuori della whitelist ETH/SOL/BNB (perché quella è una regola server-side Botely, non una regola di chain). Per la maggior parte degli abbonati il worst case pratico è un'entrata malevola su un mercato senza posizione live — chiudibile in minuti dal dashboard o revocando l'agent.
Revoca
Tre path di kill indipendenti: (1) toggle per-strategia in /app/settings (≤30s); (2) master switch in /app/settings (≤30s); (3) revoca dell'agent wallet dalla web UI di Hyperliquid (effetto dal momento in cui l'azione di revoca viene accettata).
Dopo una revoca lato wallet, il bundle Botely cifrato è ancora nel DB di Botely ma inutile: non ha più autorità di firma sul tuo account. Botely flusha inoltre il bundle al prossimo refresh della config dell'account; i backup seguono la retention di 90 giorni della Privacy Policy.
Confronto col precedente modello dYdX-Cosmos
Storicamente Botely girava su dYdX v4 con un authenticator Cosmos `MsgAddAuthenticator` il cui scope (lista mercati, message type, subaccount) era hard-limited a livello di chain. Il nuovo modello HL ha la stessa protezione contro i prelievi (gli agent Hyperliquid non possono prelevare) ma la whitelist per-mercato è ora una regola server-side anziché una regola di chain.
Questo è comunicato onestamente nella Risk Disclosure (§7A.4): il rischio residuo è una compromissione del server Botely o un'azione insider che firmi al di fuori della whitelist ETH/SOL/BNB. Mitigazioni: code review, change management, audit logging — ma il rischio è non-nullo.