Kontoabstraktions-Modi
Der Kontoabstraktionsmodus eines Nutzers bestimmt, wie Spot- und Perp-Guthaben zusammenwirken und ob verschiedene Assets als Sicherheit für den Perp-Handel verwendet werden.
Die unterstützten Modi sind:
- Unified Account (für die meisten Nutzer empfohlen): ein einziges Guthaben pro Asset. Dieses Guthaben dient als Sicherheit für alle Cross-Margin-Positionen in diesem Asset und ist mit dem Spot-Guthaben in diesem Asset zusammengeführt. Beispielsweise ist das USDC-Guthaben die einzige Quelle für von Validatoren betriebene Perps, XYZ-Perps und den Spot-Handel gegen USDC als Quote-Asset. Das USDT-Spot-Guthaben ist die einzige Quelle für CASH-Perps und den Spot-Handel gegen USDT als Quote-Asset.
- Portfolio Margin (höchste Kapitaleffizienz): ein einziges Portfolio, das alle zugelassenen Assets zusammenführt, derzeit HYPE, BTC, USDC, USDT. Weitere Einzelheiten finden Sie unter Portfolio Margin.
- Manual / Standard (empfohlen für Market Maker, automatisierte Nutzer mit hohem Volumen sowie Deployer/Builder): getrennte Perp- und Spot-Guthaben, getrennte DEX-Guthaben. Cross-Margin gilt für jede DEX separat.
Es gibt einen weiteren, eingestellten Modus, der hier der Vollständigkeit halber aufgeführt wird:
- DEX-Abstraktion (eingestellt): USDC-Guthaben werden standardmäßig dem Perp-Guthaben zugeordnet, alle übrigen Sicherheiten dem Spot-Guthaben. WICHTIG: Cross-Margin verhält sich bei HIP-3-DEXs für Nutzer der DEX-Abstraktion nicht intuitiv.
Wichtige Hinweise:
- Adressen für Builder Codes müssen sich im Standard-Modus befinden, damit Builder-Gebühren anfallen
- Portfolio Margin und Unified Account sind auf 50k Nutzeraktionen pro Tag begrenzt. Der Standard-Modus unterliegt keinen solchen Einschränkungen.
- Für API-Nutzer zeigen Unified Account und Portfolio Margin alle Guthaben und Holds im Spot-Clearinghouse-State an. Individuelle Perp-DEX-Nutzerzustände sind nicht aussagekräftig.
Beispiele für die vom Agenten und vom Nutzer signierten Aktionen zum Ändern der Kontoabstraktionsmodi finden Sie im Python SDK und in der API-Dokumentation.
Unified-Account-Ratio
Zur Berechnung der präzisen Unified-Account-Ratio für die Überwachung des Liquidationsrisikos:
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;
}