Diagrams
Nexus Mutual Platform Flow Diagram
This document merges multiple Cover and Staking flows with their underlying interactions across Token, Capital, Claims/Assessment, and Governance groupings. We use two comprehensive flows:
- Buying Cover and Processing Claims
- Includes:
- Buying Cover (Cover ↔ Token ↔ Capital)
- Submitting and Assessing Claims (Claims/Assessment ↔ Cover ↔ Capital ↔ Governance)
- Includes:
- Staking Pool Management and Staking Lifecycle
- Includes:
- Pool creation and product listing (Staking ↔ Token)
- Stakers redeeming rewards (Staking ↔ Token)
- Burning NXM on approved claims (Claims/Assessment ↔ Staking ↔ Token)
- Includes:
We provide detailed steps and a Mermaid diagram for each flow, ensuring step numbering in both the text description and diagrams for clarity. Code blocks are escaped so they remain valid raw markdown.
Buying Cover & Processing Claims
Step-by-Step
-
Buyer Purchases Cover
(1a)Buyer
callsbuyCover(params, poolAllocationRequests)
on Cover.
(1b)Cover
checks if buyer is a member viaonlyMember
modifier.
(1c)Cover
gets product info from CoverProducts.
(1d)Cover
mints NFT via CoverNFT if new cover.
(1e)CoverNFT
issues NFT to buyer.
(1f)Cover
requests allocations from StakingPool(s).
(1g)Cover
handles payment: - For NXM: Burns premium via TokenController - For ETH/ERC20: Transfers premium to Pool -
Buyer Submits Claim
(2a)Buyer
callssubmitClaim()
on IndividualClaims.
(2b)IndividualClaims
validates:- Cover ownership via
CoverNFT.isApprovedOrOwner()
- Cover validity via
Cover.coverSegmentWithRemainingAmount()
(2c)
IndividualClaims
starts assessment viaAssessment.startAssessment()
. - Cover ownership via
-
Claim Assessment
(3a)Assessors
callcastVotes()
on Assessment.
(3b)Assessment
locks staked NXM via TokenController.
(3c) When voting ends:- If accepted: Claim can be redeemed
- If denied: Claim deposit funds rewards
-
Claim Payout
(4a)Buyer
callsredeemClaimPayout()
on IndividualClaims.
(4b)IndividualClaims
callsCover.burnStake()
to burn staker's NXM.
(4c)IndividualClaims
callsPool.sendPayout()
which: - Transfers claim amount in cover asset - Returns assessment deposit in ETH
Staking Pool Management & Staking Lifecycle
Step-by-Step
-
Pool Manager Creates a New Staking Pool (1a)
Manager
calls"createStakingPool()"
on StakingProducts.
(1b)StakingProducts
calls"create()"
on StakingPoolFactory.
(1c)StakingPoolFactory
deploys new StakingPool.
(1d)StakingProducts
assigns manager via TokenController.
(1e)StakingProducts
sets initial products and metadata. -
Manager Updates Pool Products (2a)
Manager
calls"setProducts()"
on StakingProducts.
(2b)StakingProducts
updates weights and prices in StakingPool. -
Staker Deposits NXM (3a)
Staker
calls"depositTo(amount, trancheId, tokenId, dest)"
on StakingPool.
(3b)StakingPool
validates and calculates shares, calls"depositStakedNXM()"
on TokenController.
(3c)TokenController
updates pool balance and calls"operatorTransfer()"
on NXMToken. -
Staker Withdraws Stake/Rewards (4a)
Staker
calls"withdraw()"
on StakingPool.- Optional: Check withdrawable amounts first via NexusViewer (
"getClaimableNXM()"
,"getStakedNXM()"
)
(4b)
StakingPool
calculates amounts, calls"withdrawNXMStakeAndRewards()"
on TokenController.
(4c)TokenController
calls transfers on NXMToken. (4d)NXMToken
transfer stake + rewards to Staker - Optional: Check withdrawable amounts first via NexusViewer (
-
Claim Redemption Burns Stake and Pays Claimant If a claim is approved the claimant is paid from the staked NXM. (5a)
Claimant
calls"redeemClaimPayout()"
on IndividualClaims.
(5b)IndividualClaims
calls"burnStake()"
on Cover.
(5c)Cover
calls"burnStake()"
on affected StakingPool(s).
(5d)StakingPool
calls"burnStakedNXM()"
on TokenController.
(5e)TokenController
burns tokens via NXMToken.
(5f)IndividualClaims
calls"Pool.sendPayout()"
which:- Transfers claim amount in cover asset
- Returns assessment deposit in ETH