Cliff Horizon logo

Risk Module Integration

Technical detail on Ensuro's Risk Module architecture — contracts, roles, and the SignedQuoteRiskModule workflow.

This page covers the technical integration between Cliff Horizon and Ensuro's protocol. It's aimed at developers and technical partners.

Core Contracts

ContractRole
PolicyPoolMain protocol contract. Tracks active policies, manages LP deposits/withdrawals, mints ERC721 NFT per policy.
ETokenERC20 LP share token. Represents deposited USDC capital. Tracks locked SCR. Accrues continuous interest for LPs.
RiskModulePartner-facing contract. Delegates pricing to pluggable Underwriter contracts. Submits policies to PolicyPool.
PremiumsAccountGroups Risk Modules for a partner. Accumulates premiums. Manages payouts; borrows from eTokens if premiums exhausted.
SignedQuoteRiskModuleVariant for API-based pricing. PRICER signs quotes off-chain; signed quote submitted on-chain to create policy.

Policy Structure

Each policy is represented as a PolicyData struct:

PolicyData {
  id                uint256   // Unique policy identifier
  payout            uint256   // Maximum payout (USDC, 6 decimals)
  jrScr             uint256   // Junior SCR (locked from junior eToken)
  srScr             uint256   // Senior SCR (locked from senior eToken)
  lossProb          uint256   // Loss probability (WAD, 18 decimals) ← ENGINE OUTPUT
  purePremium       uint256   // Expected loss = payout × lossProb × MoC
  ensuroCommission  uint256   // Protocol fee
  partnerCommission uint256   // Cliff Horizon revenue
  jrCoc             uint256   // Junior cost of capital
  srCoc             uint256   // Senior cost of capital
  start             uint40    // Policy effective timestamp
  expiration        uint40    // Policy end timestamp
}

The lossProb field is Cliff Horizon's primary output — the engine's calibrated probability converted to WAD units (18 decimal places).

SignedQuoteRiskModule Workflow

This is the integration path for Cliff Horizon:

Step 1: Client requests derivative quote via dashboard
    ↓
Step 2: Engine calculates lossProb for the trigger event
    ↓
Step 3: Cliff Horizon API calls Ensuro /quote endpoint
        Payload: { payout, lossProb, expiration, jsonData }
    ↓
Step 4: API returns premium breakdown + cryptographic signature
    ↓
Step 5: Signed quote submitted on-chain
        → RiskModule.newPolicy(inputData, onBehalfOf)
        → PolicyPool mints policy NFT
        → SCR locked from eTokens
    ↓
Step 6: At expiry or trigger event:
        → RiskModule.resolvePolicy(policy, payout)
        → Called by RESOLVER role
        → Oracle data feeds resolution

Required Roles

Cliff Horizon needs three roles in the Ensuro protocol:

RolePurposeWho Holds It
PRICERSign quotes with engine's lossProbCliff Horizon pricing API
RESOLVERResolve policies with oracle outcome dataCliff Horizon oracle service
RM OperatorConfigure MoC, collateralisation ratios, fee splitsCliff Horizon admin

Python SDK

Ensuro provides a Python prototype of the full protocol:

pip install ensuro

The Python SDK runs the same test cases as the Solidity contracts and is usable for simulation and testing. Cliff Horizon uses it for:

  • Premium decomposition modelling during product design
  • Integration testing before mainnet deployment
  • Scenario analysis for new product structures

Deployment

  • Network: Polygon mainnet (USDC)
  • Testnet: Available for development
  • Contract deployment: Ensuro deploys the Risk Module contract; Cliff Horizon configures parameters

Audit Status

AuditorYearScope
Quantstamp2022, 2025Full protocol
SlowMist2021Smart contracts
DefiSafety2024Process quality (93/100)