Questa pagina è una traduzione della community e ha solo scopo informativo; fa fede la versione originale in inglese.
Versione originale ↗

Modalità di account abstraction

La modalità di account abstraction di un utente determina il modo in cui i saldi spot e perp interagiscono e se i vari asset sono utilizzati come collaterale per il trading di perp.

Le modalità supportate sono:

  1. Account unificato (consigliato per la maggior parte degli utenti): saldo unico per ciascun asset. Tale saldo funge da collaterale per tutte le posizioni a margine incrociato in quell'asset ed è unificato con il saldo spot dello stesso asset. Ad esempio, il saldo USDC è la fonte unica per i perp gestiti dai validatori, i perp XYZ e il trading spot con USDC come asset di quotazione. Il saldo spot USDT è la fonte unica per i perp CASH e il trading spot con USDT come asset di quotazione.
  2. Margine di portafoglio (il più efficiente in termini di capitale): portafoglio unico che unifica tutti gli asset idonei, attualmente HYPE, BTC, USDC, USDT. Per ulteriori dettagli, vedere Margine di portafoglio.
  3. Manuale / Standard (consigliato per market maker, utenti automatizzati ad alto volume e deployer/builder): saldi perp e spot separati, saldi DEX separati. Il margine incrociato si applica separatamente a ciascun DEX.

Esiste un'ulteriore modalità, dismessa e inclusa qui per completezza:

  1. Astrazione DEX (dismessa): i saldi USDC confluiscono per impostazione predefinita nel saldo perp, tutti gli altri collaterali confluiscono per impostazione predefinita nel saldo spot. IMPORTANTE: il margine incrociato sui DEX HIP-3 non si comporta in modo intuitivo per gli utenti con astrazione DEX.

Dettagli importanti:

  1. Gli indirizzi dei Builder Code devono essere in modalità Standard per maturare le commissioni builder
  2. Il margine di portafoglio e l'account unificato sono limitati a 50k azioni utente al giorno. La modalità Standard non prevede tali restrizioni.
  3. Per gli utenti API, l'account unificato e il margine di portafoglio mostrano tutti i saldi e gli hold nello stato del clearinghouse spot. I singoli stati utente dei perp dex non sono significativi.

Per esempi sulle azioni firmate dall'agente e dall'utente per modificare le modalità di account abstraction, vedere Python SDK e la documentazione API.

Rapporto dell'account unificato

Per calcolare il rapporto esatto dell'account unificato ai fini del monitoraggio del rischio di liquidazione:

function computeUnifiedAccountRatio(
    multiverse: Record<string, { index: number; collateralToken: number }>,
    perpDexStates: Array<{
      clearinghouseState: {
        crossMaintenanceMarginUsed: number;
        assetPositions: Array<{
          position: { leverage: { type: string }; marginUsed: number };
        }>;
      };
    }>,
    spotBalances: Array<{ token: number; total: number }>,
  ): number {
    const indexToCollateralToken: Record<number, number> = {};
    for (const meta of Object.values(multiverse)) {
      indexToCollateralToken[meta.index] = meta.collateralToken;
    }

    const crossMarginByToken: Record<number, number> = {};
    const isolatedMarginByToken: Record<number, number> = {};

    for (let index = 0; index < perpDexStates.length; index++) {
      const dex = perpDexStates[index];
      const token = indexToCollateralToken[index];
      if (dex === undefined || token === undefined) continue;

      crossMarginByToken[token] =
        (crossMarginByToken[token] ?? 0) +
        dex.clearinghouseState.crossMaintenanceMarginUsed;

      for (const ap of dex.clearinghouseState.assetPositions) {
        if (ap.position.leverage.type === "isolated") {
          isolatedMarginByToken[token] =
            (isolatedMarginByToken[token] ?? 0) + ap.position.marginUsed;
        }
      }
    }

    let maxRatio = 0;
    for (const [tokenStr, crossMargin] of Object.entries(crossMarginByToken)) {
      const token = Number(tokenStr);
      const spotTotal = spotBalances.find((b) => b.token === token)?.total ?? 0;
      const isolatedMargin = isolatedMarginByToken[token] ?? 0;
      const available = spotTotal - isolatedMargin;
      if (available > 0) {
        maxRatio = Math.max(maxRatio, crossMargin / available);
      }
    }

    return maxRatio;
  }
Traduzione non ufficiale della community della documentazione Hyperliquid. Contenuti © Hyperliquid; fa fede la versione inglese. Fonte: https://hyperliquid.gitbook.io/hyperliquid-docs/trading/account-abstraction-modes