Expand description
Pure margin computation for the Hypercall options + perps platform.
This crate contains all margin math with zero IO dependencies – no database, no network, no async runtime. It is the correctness kernel for margin calculations.
§Margin Modes
Hypercall supports two margin modes:
-
Standard (Deribit-style): linear per-position margin. Long options are fully paid (zero margin), short options use
max(15% * spot - OTM, 10% * spot)for IM. Seestandard::StandardMarginService. -
Portfolio (SPAN-style): scenario-based margin. The portfolio is stressed across 17 scenarios (13 core + 4 tail) combining spot and vol shocks. Scanning risk is the worst-case weighted loss, plus contingency add-ons for short gamma near expiry. See
portfolio::span::compute_span_margin_at.
§Architecture
hypercall-types (WalletAddress, shared primitives)
^
hypercall-margin (this crate: types + pure math)
^
hypercall (engine: IO, vol oracle, async wiring)The engine populates market state (spot prices, implied vols) and calls into this crate for the actual margin computation. This crate never fetches data itself.
§Example
use hypercall_margin::standard::{StandardMarginService, StandardAccount};
use rust_decimal_macros::dec;
let service = StandardMarginService::new();
let account = StandardAccount::new("wallet".to_string(), dec!(10000));
let result = service.compute_margin(&account);
assert!(result.can_increase_risk());Re-exports§
pub use constants::MM_TO_IM_RATIO;pub use error::MarginError;pub use types::Account;pub use types::MarginDetails;pub use types::OptionType;pub use types::Scenario;pub use types::ScenarioType;pub use portfolio::account_cash_decimal;pub use portfolio::classify_liquidity_gap;pub use portfolio::compute_extended_risk_grid_from_snapshot;pub use portfolio::compute_risk_grid_from_snapshot;pub use portfolio::compute_span_margin_at;pub use portfolio::empty_portfolio_margin_details;pub use portfolio::generate_scenarios;pub use portfolio::has_portfolio_positions;pub use portfolio::market_state_from_snapshot;pub use portfolio::pool_capacity_usdc;pub use portfolio::pool_target_usdc;pub use portfolio::pool_utilization;pub use portfolio::short_option_oi_usdc;pub use portfolio::snapshot_from_account;pub use portfolio::utilization_apr;pub use portfolio::validate_pool_config;pub use portfolio::ContingencyMargin;pub use portfolio::ExtendedRiskGrid;pub use portfolio::InstrumentRiskRow;pub use portfolio::PmAccountSettlementFacts;pub use portfolio::PmFixtureOptionKey;pub use portfolio::PmFixturePosition;pub use portfolio::PmLiquidityClassification;pub use portfolio::PmMarketMarks;pub use portfolio::PmSettlementFixture;pub use portfolio::PmSettlementModelError;pub use portfolio::PmSettlementObligation;pub use portfolio::PmSettlementPoolConfig;pub use portfolio::PmSettlementPoolSnapshot;pub use portfolio::PortfolioMarginConfig;pub use portfolio::PortfolioMarginContingencyConfig;pub use portfolio::PortfolioMarginGridConfig;pub use portfolio::PortfolioMarginMarketState;pub use portfolio::PortfolioMarginOptionExposure;pub use portfolio::PortfolioMarginOptionKey;pub use portfolio::PortfolioMarginOptionMarketState;pub use portfolio::PortfolioMarginPerpExposure;pub use portfolio::PortfolioMarginScenario;pub use portfolio::PortfolioMarginSnapshot;pub use portfolio::PortfolioMarginSymbolOverride;pub use portfolio::PortfolioMarginUnderlyingMarketState;pub use portfolio::PortfolioMarginUnderlyingSnapshot;pub use portfolio::ScenarioPnl;pub use portfolio::SnapshotComponentKind;pub use standard::OptionPosition;pub use standard::PerpPosition;pub use standard::PositionMarginContribution;pub use standard::StandardAccount;pub use standard::StandardMarginParams;pub use standard::StandardMarginResult;pub use standard::StandardMarginService;
Modules§
- black_
76 - Black-76 pricing for European options on futures contracts.
- black_
scholes - Black-Scholes option pricing with Edgeworth expansion for skew and kurtosis.
- constants
- error
- margin_
mode - portfolio
- Portfolio Margin (SPAN-style) computation.
- standard
- Standard Margin (Deribit-style) linear margin computation.
- types
Enums§
- Margin
Mode - Per-wallet margin regime. Determines which margin engine path is used.