-
Notifications
You must be signed in to change notification settings - Fork 0
03 core integration
Actions edited this page Feb 26, 2026
·
51 revisions
Coverage uses Core as the execution and accounting substrate for restaked security. The boundary is strict:
- Coverage defines underwriting, policy semantics, premium routing, and claim intent.
- Core executes committee-level stake, reward distribution, and slashing on SSP adapters.
This separation keeps restaking platform complexity out of Coverage contracts.
| Coverage Contract | Core Contract | Function | Purpose |
|---|---|---|---|
CoverPoolFactory |
StakeManager |
registerOperatorToNetwork(operator, deadline, signature) |
Register curator/operator to network during pool creation |
PolicyManager |
StakeManager |
createCommittee(policyId, coverageAmount, duration) |
Create policy-scoped committee capacity |
PolicyManager |
StakeManager |
addOperatorToCommittee(curator, policyId) |
Assign pool operator to committee |
CoverPool |
StakeManager |
addCommitteeVaults(policyId, vaults[]) |
Bind selected vaults/strategies backing policy |
PolicyManager |
StakeManager |
getCommitteeVaults(policyId) |
Verify vault backing exists before bind finalization |
PolicyManager |
StakeManager |
getOperatorCommitteeStake(curator, policyId) |
Enforce stake sufficiency before policy activation |
PremiumManager |
RewardsManager |
distributeRewards(policyId, operator, amount, token) |
Route restaker premium share to Core reward fan-out |
ClaimManager |
ChainlinkPriceFeed |
getUSDValue(token, amount) |
Normalize requested payout to USD slash target |
ClaimManager |
SlashingManager |
executeSlashing(policyId, operator, slashAmountUSD) |
Execute policy-scoped slashing and retrieve collateral |
Coverage enforces policyId == committeeId across all cross-layer calls.
Implications:
- Capacity is set once at policy request (
coverageAmount). - Vault assignment is attached to the same id at bind time.
- Rewards and slashing are naturally scoped to the policy's committee.
Typical covered-vault actor mapping:
-
buyer: covered vault or cover adapter. -
claimer: cover adapter (withdrawal-triggered claim path). -
beneficiary: cover adapter for atomic shortfall make-whole, then forwarded to covered vault/user path.
Sequence:
- Curator invokes
CoverPoolFactory.createCoverPool(...). - Factory deploys and initializes a pool clone.
- Factory calls
StakeManager.registerOperatorToNetwork(...).
Outcome:
- Curator is pool owner at Coverage level.
- Curator/operator is registered at Core/restaking boundary.
Sequence:
- Covered vault (or its adapter acting as buyer) calls
PolicyManager.requestCoverage(...). - Manager creates draft and increments
policyId. - Manager calls
StakeManager.createCommittee(policyId, coverageAmount, duration). - Manager calls
StakeManager.addOperatorToCommittee(curator, policyId).
Outcome:
- Draft exists in Coverage.
- Committee scaffold exists in Core with policy-aligned id.
Sequence:
- Curator calls
CoverPool.bindPolicyForRequest(...)with quote and vaults. - Pool calls
StakeManager.addCommitteeVaults(policyId, vaults). -
PolicyManager.bindPolicy(...)checks:- committee has vaults (
getCommitteeVaults), - operator stake covers requested amount (
getOperatorCommitteeStake).
- committee has vaults (
Outcome:
- Policy transitions to bound/active state only when Core backing is present.
Sequence:
-
PremiumCollectorredeems covered-vault shares to underlying. -
PremiumManager.distributePremium(...)computes fee splits. - Restaker share is sent to Core
RewardsManager. - Coverage calls
RewardsManager.distributeRewards(policyId, operator, amount, token).
Outcome:
- Coverage specifies policy/operator reward intent.
- Core executes final per-SSP reward distribution.
Sequence:
- During covered-vault withdrawal, adapter detects shortfall and files claim.
-
ClaimManagerconverts requested payout amount to USD via Core price feed. -
ClaimManagercallsSlashingManager.executeSlashing(policyId, operator, slashAmountUSD). - Core returns collateral token arrays.
- Coverage swaps or directly transfers to beneficiary (adapter in this integration model).
Outcome:
- Core performs SSP slashing mechanics.
- Coverage performs beneficiary-facing settlement, then adapter completes make-whole transfer flow.
No-shortfall withdrawal path:
- If adapter deallocation returns sufficient assets, no claim is filed and no Core slashing call is made.
- Committee slash target input to Core is USD-valued (8 decimals) from
ChainlinkPriceFeed. - Coverage payouts are token-denominated by
payoutToken. -
coverageAmountinPolicyDraftis treated as the committee stake requirement.
Coverage assumptions about Core:
- committee state and stake reads are correct and timely,
- reward/slash execution either succeeds or reverts atomically,
- token arrays returned from slashing are valid and aligned.
Failure patterns:
- If Core stake is insufficient at bind check, policy bind reverts.
- If slashing returns empty arrays, claim payout reverts.
- If price feed conversion fails or is stale, slash calculation path fails.
- Keep
policyIdand committee references consistent in all off-chain orchestration. - Pre-check operator committee stake before attempting bind.
- Register and verify vault module mappings in Core before bind.
- Configure swap routes for expected collateral -> payout token pairs before claims.