diff --git a/docs/diagrams/contracts/capital.md b/docs/diagrams/contracts/capital.md index 73a4ef87b3..9672605e7c 100644 --- a/docs/diagrams/contracts/capital.md +++ b/docs/diagrams/contracts/capital.md @@ -13,11 +13,11 @@ graph TD MCR["MCR"] %% Swap Flow - Member -->|"(1a) swap"| Ramm - Ramm -->|"(1b) validate swap"| Pool - Ramm -->|"(1c) execute swap"| Pool - Pool -->|"(1d) update MCR"| MCR - Pool -.->|"(1e) transfer swapped assets"| Member + Member -->|"**(1a)** swap"| Ramm + Ramm -->|"**(1b)** validate swap"| Pool + Ramm -->|"**(1c)** execute swap"| Pool + Pool -->|"**(1d)** update MCR"| MCR + Pool -.->|"**(1e)** transfer swapped assets"| Member ``` ## Operator Flow @@ -33,15 +33,15 @@ graph TD CoW["CoW Settlement"] %% Swap Flow - Operator -->|"(1a) placeOrder"| SwapOp - SwapOp -->|"(1b) validatePreSwap"| Pool - SwapOp -->|"(1c) transferAsset"| Pool - SwapOp -->|"(1d) sign & submit CoW Swap order"| CoW - CoW -.->|"(1e) execute swap & return assets"| SwapOp + Operator -->|"**(1a)** placeOrder"| SwapOp + SwapOp -->|"**(1b)** validatePreSwap"| Pool + SwapOp -->|"**(1c)** transferAsset"| Pool + SwapOp -->|"**(1d)** sign & submit CoW Swap order"| CoW + CoW -.->|"**(1e)** execute swap & return assets"| SwapOp %% Close Order Flow - Operator -->|"(2a) closeOrder"| SwapOp - SwapOp -->|"(2b) return assets"| Pool + Operator -->|"**(2a)** closeOrder"| SwapOp + SwapOp -->|"**(2b)** return assets"| Pool ``` ## Actions @@ -55,32 +55,32 @@ graph TD ### 1. Member Actions 1. **Swap NXM/ETH** - - (1a) **Member** calls `swap` on RAMM - - (1b) **RAMM** validates swap conditions: + - **(1a)** `Member` calls `swap` on RAMM + - **(1b)** `RAMM` validates swap conditions: - System not paused - Swap not paused - Valid deadline - - (1c) **RAMM** executes swap with Pool - - (1d) **Pool** triggers MCR update - - (1e) **Pool** transfers swapped assets to member + - **(1c)** `RAMM` executes swap with Pool + - **(1d)** `Pool` triggers MCR update + - **(1e)** `Pool` transfers swapped assets to member ### 2. Operator Actions 1. **Place Order** - - (1a) **Operator** calls `placeOrder` on SwapOperator - - (1b) **SwapOperator** validates pre-swap conditions: + - **(1a)** `Operator` calls `placeOrder` on SwapOperator + - **(1b)** `SwapOperator` validates pre-swap conditions: - Token enabled status - Balance limits - Swap frequency - Max fee and slippage - - (1c) **SwapOperator** transfers assets from Pool - - (1d) **SwapOperator** signs and submits CoW swap order - - (1e) **CoW Settlement** executes swap and returns assets to SwapOperator + - **(1c)** `SwapOperator` transfers assets from Pool + - **(1d)** `SwapOperator` signs and submits CoW swap order + - **(1e)** `CoW Settlement` executes swap and returns assets to SwapOperator 2. **Close Order** - - (2a) **Operator** calls `closeOrder` on SwapOperator - - (2b) **SwapOperator** returns assets to Pool + - **(2a)** `Operator` calls `closeOrder` on SwapOperator + - **(2b)** `SwapOperator` returns assets to Pool ## Notes diff --git a/docs/diagrams/contracts/claims-assessment.md b/docs/diagrams/contracts/claims-assessment.md index 57865ff653..19ff0588d4 100644 --- a/docs/diagrams/contracts/claims-assessment.md +++ b/docs/diagrams/contracts/claims-assessment.md @@ -14,10 +14,10 @@ graph TD CoverNFT["CoverNFT Contract"] %% Submit Claim - Member -->|"(1a) submitClaim"| IndividualClaims - IndividualClaims -->|"(1b) validate cover"| CoverNFT - IndividualClaims -->|"(1c) validate amount"| Cover - IndividualClaims -->|"(1d) startAssessment"| Assessment + Member -->|"**(1a)** submitClaim"| IndividualClaims + IndividualClaims -->|"**(1b)** validate cover"| CoverNFT + IndividualClaims -->|"**(1c)** validate amount"| Cover + IndividualClaims -->|"**(1d)** startAssessment"| Assessment ``` ## 2. Assessment & Redemption Flow @@ -36,15 +36,15 @@ graph TD Pool["Pool"] %% Assessment Process - Assessor -->|"(2a) castVotes"| Assessment - Assessment -->|"(2b) lock staked NXM"| TokenController + Assessor -->|"**(2a)** castVotes"| Assessment + Assessment -->|"**(2b)** lock staked NXM"| TokenController %% Claim Payout - Member -->|"(3a) redeemClaimPayout"| IndividualClaims - IndividualClaims -->|"(3b) validate claim status"| Assessment - IndividualClaims -->|"(3c) burnStake"| Cover - IndividualClaims -->|"(3d) sendPayout"| Pool - Pool -.->|"(3e) transfer claim amount + deposit"| Member + Member -->|"**(3a)** redeemClaimPayout"| IndividualClaims + IndividualClaims -->|"**(3b)** validate claim status"| Assessment + IndividualClaims -->|"**(3c)** burnStake"| Cover + IndividualClaims -->|"**(3d)** sendPayout"| Pool + Pool -.->|"**(3e)** transfer claim amount + deposit"| Member ``` ## Actions @@ -89,26 +89,26 @@ graph TD ## Claim Submission & Processing 1. **Submit Claim** - (1a) **Cover Buyer** calls `submitClaim` on IndividualClaims - (1b) **IndividualClaims** validates cover ownership via CoverNFT - (1c) **IndividualClaims** validates claim amount via Cover - (1d) **IndividualClaims** starts assessment process + **(1a)** `Cover Buyer` calls `submitClaim` on IndividualClaims + **(1b)** `IndividualClaims` validates cover ownership via CoverNFT + **(1c)** `IndividualClaims` validates claim amount via Cover + **(1d)** `IndividualClaims` starts assessment process 2. **Assessment Process** - (2a) **Assessors** call `castVotes` on Assessment - (2b) **Assessment** locks staked NXM via TokenController for voting period + **(2a)** `Assessors` call `castVotes` on Assessment + **(2b)** `Assessment` locks staked NXM via TokenController for voting period 3. **Claim Payout** - (3a) **Cover Buyer** calls `redeemClaimPayout` on IndividualClaims - (3b) **IndividualClaims** validates with Assessment: + **(3a)** `Cover Buyer` calls `redeemClaimPayout` on IndividualClaims + **(3b)** `IndividualClaims` validates with Assessment: - Assessment period has ended - More accept votes than deny votes - Cooldown period has passed - (3c) **IndividualClaims** calls Cover to burn stake from affected pools - (3d) **IndividualClaims** sends payout via Pool - (3e) **Pool** transfers: + **(3c)** `IndividualClaims` calls Cover to burn stake from affected pools + **(3d)** `IndividualClaims` sends payout via Pool + **(3e)** `Pool` transfers: - Claim amount in cover asset - Returns assessment deposit in ETH diff --git a/docs/diagrams/contracts/cover.md b/docs/diagrams/contracts/cover.md index d3aedc0e64..2e42c0eb73 100644 --- a/docs/diagrams/contracts/cover.md +++ b/docs/diagrams/contracts/cover.md @@ -15,11 +15,11 @@ graph TD NXMaster["NXMaster Registry"] %% Member interactions - Member -->|"(1a) buyCover"| Cover - Cover -->|"(1b) validate product"| CoverProducts - Cover -->|"(1c) mint"| CoverNFT - CoverNFT -.->|"(1c) issues Cover NFT"| Member - Cover -->|"(1d) payment"| Pool + Member -->|"**(1a)** buyCover"| Cover + Cover -->|"**(1b)** validate product"| CoverProducts + Cover -->|"**(1c)** mint"| CoverNFT + CoverNFT -.->|"**(1c)** issues Cover NFT"| Member + Cover -->|"**(1d)** payment"| Pool %% Contract Registry interactions CoverProducts -.->|"getLatestAddress"| NXMaster @@ -40,9 +40,9 @@ graph TD Pool["Pool Contract"] %% AB Member interactions - ABMember -->|"(1) setProducts"| CoverProducts - ABMember -->|"(2) setProductTypes"| CoverProducts - ABMember -->|"(3) setProductsMetadata"| CoverProducts + ABMember -->|"**(1)** setProducts"| CoverProducts + ABMember -->|"**(2)** setProductTypes"| CoverProducts + ABMember -->|"**(3)** setProductsMetadata"| CoverProducts %% Internal validations CoverProducts -->|"validate assets"| Pool @@ -59,21 +59,21 @@ graph TD ### 1. Member Actions 1. **Buy Cover** - (1a) **Member** calls `buyCover` on Cover with: + **(1a)** `Member` calls `buyCover` on Cover with: - Product ID - Cover amount - Cover period - Payment asset - Cover asset - (1b) **Cover** validates product with CoverProducts - (1c) **Cover** mints NFT representing cover + **(1b)** `Cover` validates product with CoverProducts + **(1c)** `Cover` mints NFT representing cover - issues Cover NFT to buyer - (1d) **Cover** processes payment via Pool + **(1d)** `Cover` processes payment via Pool ### 2. Advisory Board Actions 1. **Product Configuration** - (1) **AB Member** calls `setProducts` on CoverProducts to: + **(1)** `AB Member` calls `setProducts` on CoverProducts to: - Add new products (`productId = uint256.max`) - Update existing products @@ -81,14 +81,14 @@ graph TD - Set capacity reduction ratios - Configure allowed staking pools - (2) **AB Member** calls `setProductTypes` on CoverProducts to: + **(2)** `AB Member` calls `setProductTypes` on CoverProducts to: - Define product types (`productTypeId = uint256.max`) - Set grace periods - Set product type names - Update product type metadata - (3) **AB Member** calls `setProductsMetadata` to: + **(3)** `AB Member` calls `setProductsMetadata` to: - Update product IPFS metadata - Update product type IPFS metadata diff --git a/docs/diagrams/contracts/governance-membership.md b/docs/diagrams/contracts/governance-membership.md index db14403e6e..41cbffb77b 100644 --- a/docs/diagrams/contracts/governance-membership.md +++ b/docs/diagrams/contracts/governance-membership.md @@ -14,11 +14,11 @@ graph TD NXMaster["NXMaster Registry"] %% Member interactions - Member -->|"(1) submitProposal"| Governance - Member -->|"(2) vote"| Governance - Member -->|"(3) queryVotingPower"| VotePower - Member -->|"(4) withdrawMembership"| MemberRoles - Member -->|"(5) switchMembership"| MemberRoles + Member -->|"**(1)** submitProposal"| Governance + Member -->|"**(2)** vote"| Governance + Member -->|"**(3)** queryVotingPower"| VotePower + Member -->|"**(4)** withdrawMembership"| MemberRoles + Member -->|"**(5)** switchMembership"| MemberRoles %% Contract Registry interactions Governance -.->|"getLatestAddress"| NXMaster @@ -39,9 +39,9 @@ graph TD NXMaster["NXMaster Registry"] %% AB Member interactions - ABMember -->|"(1) approveProposal"| Governance - ABMember -->|"(2) rejectAction"| Governance - ABMember -->|"(3) swapABMember"| MemberRoles + ABMember -->|"**(1)** approveProposal"| Governance + ABMember -->|"**(2)** rejectAction"| Governance + ABMember -->|"**(3)** swapABMember"| MemberRoles %% Contract Registry interactions Governance -.->|"getLatestAddress"| NXMaster diff --git a/docs/diagrams/contracts/staking.md b/docs/diagrams/contracts/staking.md index e39b36cb35..69103da07f 100644 --- a/docs/diagrams/contracts/staking.md +++ b/docs/diagrams/contracts/staking.md @@ -18,17 +18,17 @@ graph TD end %% Staker interactions - Staker -->|"(1a) depositTo()"| StakingPool - StakingPool -->|"(1b) mint()"| StakingNFT - StakingNFT -.->|"(1c) issues NFT"| Staker + Staker -->|"**(1a)** depositTo()"| StakingPool + StakingPool -->|"**(1b)** mint()"| StakingNFT + StakingNFT -.->|"**(1c)** issues NFT"| Staker - Staker -->|"(2a) withdraw()"| StakingPool - StakingPool -->|"(2b) burn()"| StakingNFT - StakingPool -->|"(2c) withdrawNXMStakeAndRewards()"| TCO - TCO -->|"(2d) transfer()"| NXM - NXM -.->|"(2e) returns NXM + rewards"| Staker + Staker -->|"**(2a)** withdraw()"| StakingPool + StakingPool -->|"**(2b)** burn()"| StakingNFT + StakingPool -->|"**(2c)** withdrawNXMStakeAndRewards()"| TCO + TCO -->|"**(2d)** transfer()"| NXM + NXM -.->|"**(2e)** returns NXM + rewards"| Staker - Staker -->|"(3) extendDeposit()"| StakingPool + Staker -->|"**(3)** extendDeposit()"| StakingPool %% Contract Registry interactions StakingPool -.->|"getLatestAddress"| NXMaster @@ -48,12 +48,12 @@ graph TD NXMaster["NXMaster Registry"] %% Manager interactions - Manager -->|"(1a) createStakingPool()"| StakingProducts - Manager -->|"(2) setProducts()"| StakingProducts - Manager -->|"(3) setPoolMetadata()"| StakingProducts + Manager -->|"**(1a)** createStakingPool()"| StakingProducts + Manager -->|"**(2)** setProducts()"| StakingProducts + Manager -->|"**(3)** setPoolMetadata()"| StakingProducts %% Internal interactions - StakingProducts -->|"(1b) create"| StakingPoolFactory + StakingProducts -->|"**(1b)** create"| StakingPoolFactory %% Contract Registry interactions StakingProducts -.->|"getLatestAddress"| NXMaster @@ -71,27 +71,27 @@ graph TD ### 1. Staker Actions 1. **Deposit Stake** - (1a) **Staker** calls `depositTo()` on StakingPool with: + **(1a)** `Staker` calls `depositTo()` on StakingPool with: - Amount of NXM to stake - Target tranche ID - Optional existing NFT ID - (1b) **StakingPool** calls `mint()` on StakingNFT - (1c) **StakingNFT** issues NFT to staker + **(1b)** `StakingPool` calls `mint()` on StakingNFT + **(1c)** `StakingNFT` issues NFT to staker 2. **Withdraw Stake** - (2a) **Staker** calls `withdraw()` on StakingPool with: + **(2a)** `Staker` calls `withdraw()` on StakingPool with: - NFT ID - Tranche IDs - Amount to withdraw - (2b) **StakingPool** calls `burn()` on StakingNFT - (2c) **StakingPool** calls `withdrawNXMStakeAndRewards()` on TokenController - (2d) **TokenController** calls `transfer()` on NXMToken - (2e) **NXMToken** returns NXM + rewards to staker + **(2b)** `StakingPool` calls `burn()` on StakingNFT + **(2c)** `StakingPool` calls `withdrawNXMStakeAndRewards()` on TokenController + **(2d)** `TokenController` calls `transfer()` on NXMToken + **(2e)** `NXMToken` returns NXM + rewards to staker 3. **Extend Deposit** - (3) **Staker** calls `extendDeposit()` on StakingPool with: + **(3)** `Staker` calls `extendDeposit()` on StakingPool with: - NFT ID - Source tranche ID - Target tranche ID @@ -100,23 +100,23 @@ graph TD ### 2. Staking Pool Manager Actions 1. **Create Pool** - (1a) **Manager** calls `createStakingPool()` on StakingProducts with: + **(1a)** `Manager` calls `createStakingPool()` on StakingProducts with: - Pool privacy setting - Initial and max pool fees - Product initialization parameters - IPFS metadata hash - (1b) **StakingProducts** calls `create()` on StakingPoolFactory + **(1b)** `StakingProducts` calls `create()` on StakingPoolFactory 2. **Configure Products** - (2) **Manager** calls `setProducts()` on StakingProducts with: + **(2)** `Manager` calls `setProducts()` on StakingProducts with: - Product IDs - Target weights - Target price 3. **Update Metadata** - (3) **Manager** calls `setPoolMetadata()` on StakingProducts with: + **(3)** `Manager` calls `setPoolMetadata()` on StakingProducts with: - Pool ID - New IPFS metadata hash diff --git a/docs/diagrams/contracts/token.md b/docs/diagrams/contracts/token.md index 5a4214b677..728463335c 100644 --- a/docs/diagrams/contracts/token.md +++ b/docs/diagrams/contracts/token.md @@ -13,13 +13,13 @@ graph TD NXMaster["NXMaster Registry"] %% Member interactions - Member -->|"(1) transfer()"| NXMToken - Member -->|"(2a) approve()"| NXMToken - Member -->|"(2b) increaseAllowance()"| NXMToken - Member -->|"(2c) decreaseAllowance()"| NXMToken - Member -->|"(3a) withdrawNXM()"| TokenController - TokenController -->|"(3b) transfer()"| NXMToken - NXMToken -.->|"(3c) sends NXM"| Member + Member -->|"**(1)** transfer()"| NXMToken + Member -->|"**(2a)** approve()"| NXMToken + Member -->|"**(2b)** increaseAllowance()"| NXMToken + Member -->|"**(2c)** decreaseAllowance()"| NXMToken + Member -->|"**(3a)** withdrawNXM()"| TokenController + TokenController -->|"**(3b)** transfer()"| NXMToken + NXMToken -.->|"**(3c)** sends NXM"| Member %% Contract Registry interactions NXMToken -.->|"getLatestAddress"| NXMaster @@ -39,11 +39,11 @@ graph TD NXMaster["NXMaster Registry"] %% Operator interactions - Operator -->|"(1a) mint()"| TokenController - TokenController -->|"(1b) mint()"| NXMToken - Operator -->|"(2a) operatorTransfer()"| TokenController - TokenController -->|"(2b) operatorTransfer()"| NXMToken - NXMToken -.->|"(2c) sends NXM"| TokenController + Operator -->|"**(1a)** mint()"| TokenController + TokenController -->|"**(1b)** mint()"| NXMToken + Operator -->|"**(2a)** operatorTransfer()"| TokenController + TokenController -->|"**(2b)** operatorTransfer()"| NXMToken + NXMToken -.->|"**(2c)** sends NXM"| TokenController %% Contract Registry interactions TokenController -.->|"getLatestAddress"| NXMaster diff --git a/docs/diagrams/nexus-mutual.md b/docs/diagrams/nexus-mutual.md index 0575876a48..212e0ab601 100644 --- a/docs/diagrams/nexus-mutual.md +++ b/docs/diagrams/nexus-mutual.md @@ -1,4 +1,4 @@ -# Nexus Mutual Platform Flow Diagram +## 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: @@ -46,65 +46,65 @@ flowchart LR end %% 1. Buy Cover (single tx) - Buyer -->|"(1a) buyCover()"| CoverC - CoverC -->|"(1b) onlyMember check"| MR - CoverC -->|"(1c) get product info"| CoverP - CoverC -->|"(1d) mint Cover NFT"| CoverN - CoverN -->|"(1e) issue NFT"| Buyer - CoverC -->|"(1f) request allocations"| SP - CoverC -->|"(1g) handle payment"| TC - TC -->|"(1g) burn NXM or transfer ETH/ERC20"| PoolC + Buyer -->|"**(1a)** buyCover()"| CoverC + CoverC -->|"**(1b)** onlyMember check"| MR + CoverC -->|"**(1c)** get product info"| CoverP + CoverC -->|"**(1d)** mint Cover NFT"| CoverN + CoverN -->|"**(1e)** issue NFT"| Buyer + CoverC -->|"**(1f)** request allocations"| SP + CoverC -->|"**(1g)** handle payment"| TC + TC -->|"**(1g)** burn NXM or transfer ETH/ERC20"| PoolC %% 2. Submit Claim (single tx) - Buyer -->|"(2a) submitClaim()"| IndClaims - IndClaims -->|"(2b) validate isApprovedOrOwner()"| CoverN - IndClaims -->|"(2b) validate amount"| CoverC - IndClaims -->|"(2c) startAssessment()"| Assess + Buyer -->|"**(2a)** submitClaim()"| IndClaims + IndClaims -->|"**(2b)** validate isApprovedOrOwner()"| CoverN + IndClaims -->|"**(2b)** validate amount"| CoverC + IndClaims -->|"**(2c)** startAssessment()"| Assess %% 3. Assessment Process (multiple tx) - Assessor -->|"(3a) castVotes()"| Assess - Assess -->|"(3b) lock staked NXM"| TC - TC -->|"(3b) lock"| NXM + Assessor -->|"**(3a)** castVotes()"| Assess + Assess -->|"**(3b)** lock staked NXM"| TC + TC -->|"**(3b)** lock"| NXM %% 4. Claim Payout (single tx) - Buyer -->|"(4a) redeemClaimPayout()"| IndClaims - IndClaims -->|"(4b) burnStake()"| CoverC - IndClaims -->|"(4c) sendPayout()"| PoolC - PoolC -->|"(4c) transfer claim amount + deposit"| Buyer + Buyer -->|"**(4a)** redeemClaimPayout()"| IndClaims + IndClaims -->|"**(4b)** burnStake()"| CoverC + IndClaims -->|"**(4c)** sendPayout()"| PoolC + PoolC -->|"**(4c)** transfer claim amount + deposit"| Buyer ``` ### Step-by-Step 1. **Buyer Purchases Cover** - (1a) **Buyer** calls `buyCover(params, poolAllocationRequests)` on **Cover**. - (1b) **Cover** checks if buyer is a member via `onlyMember` 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** + **(1a)** `Buyer` calls `buyCover(params, poolAllocationRequests)` on **Cover**. + **(1b)** `Cover` checks if buyer is a member via `onlyMember` 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** 2. **Buyer Submits Claim** - (2a) **Buyer** calls `submitClaim()` on **IndividualClaims**. - (2b) **IndividualClaims** validates: + **(2a)** `Buyer` calls `submitClaim()` on **IndividualClaims**. + **(2b)** `IndividualClaims` validates: - Cover ownership via `CoverNFT.isApprovedOrOwner()` - Cover validity via `Cover.coverSegmentWithRemainingAmount()` - (2c) **IndividualClaims** starts assessment via `Assessment.startAssessment()`. + **(2c)** `IndividualClaims` starts assessment via `Assessment.startAssessment()`. 3. **Claim Assessment** - (3a) **Assessors** call `castVotes()" on **Assessment**. - (3b) **Assessment** locks staked NXM via **TokenController**. - (3c) When voting ends: + **(3a)** `Assessors` call `castVotes()` 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 4. **Claim Payout** - (4a) **Buyer** calls `redeemClaimPayout()` on **IndividualClaims**. - (4b) **IndividualClaims** calls `Cover.burnStake()` to burn staker's NXM. - (4c) **IndividualClaims** calls `Pool.sendPayout()` which: - Transfers claim amount in cover asset - Returns assessment deposit in ETH + **(4a)** `Buyer` calls `redeemClaimPayout()` on **IndividualClaims**. + **(4b)** `IndividualClaims` calls `Cover.burnStake()` to burn staker's NXM. + **(4c)** `IndividualClaims` calls `Pool.sendPayout()` which: - Transfers claim amount in cover asset - Returns assessment deposit in ETH --- @@ -143,71 +143,67 @@ flowchart LR end %% 1. Create Pool (single tx) - Manager -->|"(1a) createStakingPool()"| SPd - SPd -->|"(1b) create()"| SPF - SPF -->|"(1c) deploys"| SP - SPd -->|"(1d) assignManager"| TCO - SPd -->|"(1e) setInitialProducts"| SP + Manager -->|"**(1a)** createStakingPool()"| SPd + SPd -->|"**(1b)** create()"| SPF + SPF -->|"**(1c)** deploys"| SP + SPd -->|"**(1d)** assignManager"| TCO + SPd -->|"**(1e)** setInitialProducts"| SP %% 2. Update Products (single tx) - Manager -->|"(2a) setProducts()"| SPd - SPd -->|"(2b) updates weights & prices"| SP + Manager -->|"**(2a)** setProducts()"| SPd + SPd -->|"**(2b)** updates weights & prices"| SP %% 3. Deposit NXM (single tx) - Staker -->|"(3a) depositTo()"| SP - SP -->|"(3b) depositStakedNXM()"| TCO - TCO -->|"(3c) operatorTransfer()"| NXM + Staker -->|"**(3a)** depositTo()"| SP + SP -->|"**(3b)** depositStakedNXM()"| TCO + TCO -->|"**(3c)** operatorTransfer()"| NXM %% 4. Withdraw (single tx) - Staker -->|"(4a) withdraw()"| SP - SP -->|"(4b) withdrawNXMStakeAndRewards()"| TCO - TCO -->|"(4c) transfer"| NXM - TCO -->|"(4d) transfer stake + rewards"| Staker + Staker -->|"**(4a)** withdraw()"| SP + SP -->|"**(4b)** withdrawNXMStakeAndRewards()"| TCO + TCO -->|"**(4c)** transfer"| NXM + TCO -->|"**(4d)** transfer stake + rewards"| Staker %% 5. Burn and Payout on Claim (single tx) - Claimant -->|"(5a) redeemClaimPayout()"| IC - IC -->|"(5b) burnStake()"| CoverC - CoverC -->|"(5c) burnStake()"| SP - SP -->|"(5d) burnStakedNXM()"| TCO - TCO -->|"(5e) burn()"| NXM - IC -->|"(5f) sendPayout()"| PoolC - PoolC -->|"(5f) transfer claim amount + deposit"| Claimant + Claimant -->|"**(5a)** redeemClaimPayout()"| IC + IC -->|"**(5b)** burnStake()"| CoverC + CoverC -->|"**(5c)** burnStake()"| SP + SP -->|"**(5d)** burnStakedNXM()"| TCO + TCO -->|"**(5e)** burn()"| NXM + IC -->|"**(5f)** sendPayout()"| PoolC + PoolC -->|"**(5f)** transfer claim amount + deposit"| Claimant ``` ### Step-by-Step 1. **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. -
+ **(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. 2. **Manager Updates Pool Products** - (2a) **Manager** calls `"setProducts()"` on **StakingProducts**. - (2b) **StakingProducts** updates weights and prices in **StakingPool**. -
+ **(2a)** `Manager` calls `"setProducts()"` on **StakingProducts**. + **(2b)** `StakingProducts` updates weights and prices in **StakingPool**. 3. **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**. -
+ **(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**. 4. **Staker Withdraws Stake/Rewards** - (4a) **Staker** calls `"withdraw()"` on **StakingPool**. + **(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** -
+ **(4b)** `StakingPool` calculates amounts, calls `"withdrawNXMStakeAndRewards()"` on **TokenController**. + **(4c)** `TokenController` calls transfers on **NXMToken**. + **(4d)** `NXMToken` transfer stake + rewards to **Staker** 5. **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: + **(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 diff --git a/docs/diagrams/user-flows/cover-buyer.md b/docs/diagrams/user-flows/cover-buyer.md index cc9f5f4a58..03b1fe1e2d 100644 --- a/docs/diagrams/user-flows/cover-buyer.md +++ b/docs/diagrams/user-flows/cover-buyer.md @@ -16,20 +16,19 @@ graph TD Pool["Pool"] %% Getting a Cover Quote - Member -->|"(1a) Calls Cover Router API /quote"| CoverRouter - CoverRouter -.->|"(1b) Responds with pool allocation"| Member + Member -->|"**(1a)** Calls Cover Router API /quote"| CoverRouter + CoverRouter -.->|"**(1b)** Responds with pool allocation"| Member %% Buying Cover - Member -->|"(2a) Calls buyCover"| Cover - Cover -->|"(2b) onlyMember check"| MemberRoles - Cover -->|"(2c) get product info"| CoverProducts - Cover -->|"(2d) mint Cover NFT"| CoverNFT - CoverNFT -->|"(2e) issue NFT"| Member - Cover -->|"(2f) request allocations"| StakingPool - Cover -->|"(2g) handle payment"| TokenController - TokenController -->|"(2g) burn NXM or transfer ETH/ERC20"| Pool + Member -->|"**(2a)** Calls buyCover"| Cover + Cover -->|"**(2b)** onlyMember check"| MemberRoles + Cover -->|"**(2c)** get product info"| CoverProducts + Cover -->|"**(2d)** mint Cover NFT"| CoverNFT + CoverNFT -->|"**(2e)** issue NFT"| Member + Cover -->|"**(2f)** request allocations"| StakingPool + Cover -->|"**(2g)** handle payment"| TokenController + TokenController -->|"**(2g)** burn NXM or transfer ETH/ERC20"| Pool ``` - ## Claims Flow ```mermaid @@ -46,20 +45,20 @@ graph TD Pool["Pool"] %% Submit Claim - Member -->|"(1a) submitClaim"| IndividualClaims - IndividualClaims -->|"(1b) validate cover"| CoverNFT - IndividualClaims -->|"(1b) validate amount"| Cover - IndividualClaims -->|"(1c) startAssessment"| Assessment + Member -->|"**(1a)** submitClaim"| IndividualClaims + IndividualClaims -->|"**(1b)** validate cover"| CoverNFT + IndividualClaims -->|"**(1b)** validate amount"| Cover + IndividualClaims -->|"**(1c)** startAssessment"| Assessment %% Assessment Process - Assessors -->|"(2a) castVotes"| Assessment - Assessment -->|"(2b) lock staked NXM"| TokenController + Assessors -->|"**(2a)** castVotes"| Assessment + Assessment -->|"**(2b)** lock staked NXM"| TokenController %% Claim Payout - Member -->|"(3a) redeemClaimPayout"| IndividualClaims - IndividualClaims -->|"(3b) burnStake"| Cover - IndividualClaims -->|"(3c) sendPayout"| Pool - Pool -.->|"(3c) transfer claim amount + deposit"| Member + Member -->|"**(3a)** redeemClaimPayout"| IndividualClaims + IndividualClaims -->|"**(3b)** burnStake"| Cover + IndividualClaims -->|"**(3c)** sendPayout"| Pool + Pool -.->|"**(3c)** transfer claim amount + deposit"| Member ``` ## Cover Buyer Actions @@ -79,17 +78,17 @@ graph TD ## Getting a Cover Quote and Purchase 1. **Quote Process** - (1a) **Cover Buyer** calls Cover Router API `/quote` to fetch price and pool allocation - (1b) **Cover Router API** responds with recommended pool allocation + **(1a)** `Cover Buyer` calls Cover Router API `/quote` to fetch price and pool allocation + **(1b)** `Cover`outer API** responds with recommended pool allocation 2. **Cover Purchase** - (2a) **Cover Buyer** calls `buyCover` on Cover with pool allocation - (2b) **Cover** checks if buyer is a member - (2c) **Cover** gets product info from CoverProducts - (2d) **Cover** mints NFT via CoverNFT if new cover - (2e) **CoverNFT** issues NFT to buyer - (2f) **Cover** requests allocations from StakingPool(s) - (2g) **Cover** handles payment: + **(2a)** `Cover Buyer` calls `buyCover` on Cover with pool allocation + **(2b)** `Cover` checks if buyer is a member + **(2c)** `Cover` gets product info from CoverProducts + **(2d)** `Cover` mints NFT via CoverNFT if new cover + **(2e)** `CoverNFT` issues NFT to buyer + **(2f)** `Cover` requests allocations from StakingPool(s) + **(2g)** `Cover` handles payment: - For NXM: Burns premium via TokenController - For ETH/ERC20: Transfers premium to Pool @@ -98,20 +97,20 @@ graph TD ## Claim Submission & Processing 1. **Submit Claim** - (1a) **Cover Buyer** calls `submitClaim` on IndividualClaims - (1b) **IndividualClaims** validates: + **(1a)** `Cover Buyer` calls `submitClaim` on IndividualClaims + **(1b)** `IndividualClaims` validates: - Cover ownership via CoverNFT - Cover validity via Cover - (1c) **IndividualClaims** starts assessment process + **(1c)** `IndividualClaims` starts assessment process 2. **Assessment Process** - (2a) **Assessors** call `castVotes` on Assessment - (2b) **Assessment** locks staked NXM for voting period + **(2a)** `Assessors` call `castVotes` on Assessment + **(2b)** `Assessment` locks staked NXM for voting period 3. **Claim Payout** - (3a) **Cover Buyer** calls `redeemClaimPayout` on IndividualClaims - (3b) **IndividualClaims** calls Cover to burn stake from affected pools - (3c) **IndividualClaims** sends payout via Pool which: + **(3a)** `Cover Buyer` calls `redeemClaimPayout` on IndividualClaims + **(3b)** `IndividualClaims` calls Cover to burn stake from affected pools + **(3c)** `IndividualClaims` sends payout via Pool which: - Transfers claim amount in cover asset - Returns claim deposit in ETH diff --git a/docs/diagrams/user-flows/staker.md b/docs/diagrams/user-flows/staker.md index 5aaf3b338d..51e27940f5 100644 --- a/docs/diagrams/user-flows/staker.md +++ b/docs/diagrams/user-flows/staker.md @@ -14,11 +14,11 @@ graph TD SNFT["StakingNFT Contract"] %% Deposit Flow - Staker -->|"(1a) depositTo()"| SP - SP -->|"(1b) depositStakedNXM()"| TCO - TCO -->|"(1c) operatorTransfer()"| NXM - SP -->|"(1d) mintStakeNFT()"| SNFT - SNFT -.->|"(1e) issue Staking NFT"| Staker + Staker -->|"**(1a)** depositTo()"| SP + SP -->|"**(1b)** depositStakedNXM()"| TCO + TCO -->|"**(1c)** operatorTransfer()"| NXM + SP -->|"**(1d)** mintStakeNFT()"| SNFT + SNFT -.->|"**(1e)** issue Staking NFT"| Staker ``` ## Withdraw Flow @@ -34,10 +34,10 @@ graph TD NXM["NXMToken Contract"] %% Withdraw Flow - Staker -->|"(1a) withdraw()"| SP - SP -->|"(1b) withdrawNXMStakeAndRewards()"| TCO - TCO -->|"(1c) transfer"| NXM - NXM -.->|"(1c) transfer stake + rewards"| Staker + Staker -->|"**(1a)** withdraw()"| SP + SP -->|"**(1b)** withdrawNXMStakeAndRewards()"| TCO + TCO -->|"**(1c)** transfer"| NXM + NXM -.->|"**(1c)** transfer stake + rewards"| Staker ``` ## Staker Actions @@ -62,16 +62,16 @@ graph TD ## Deposit Stake Flow -(1a) **Staker** calls `depositTo()` on **StakingPool**. -(1b) **StakingPool** validates and calculates shares, calls `depositStakedNXM()` on **TokenController**. -(1c) **TokenController** updates pool balance and transfers NXM via **NXMToken**. -(1d) **StakingPool** calls `mintStakeNFT()` on **StakingNFT**. -(1e) **StakingNFT** issues NFT to staker as proof of stake. +**(1a)** `Staker` calls `depositTo()` on **StakingPool**. +**(1b)** `StakingPool` validates and calculates shares, calls `depositStakedNXM()` on **TokenController**. +**(1c)** `TokenController` updates pool balance and transfers NXM via **NXMToken**. +**(1d)** `StakingPool` calls `mintStakeNFT()` on **StakingNFT**. +**(1e)** `StakingNFT` issues NFT to staker as proof of stake. --- ## Withdraw Stake Flow -(1a) **Staker** calls `withdraw()` on **StakingPool**. -(1b) **StakingPool** calculates amounts, calls `withdrawNXMStakeAndRewards()` on **TokenController**. -(1c) **TokenController** transfers stake and rewards to staker via **NXMToken**. +**(1a)** `Staker` calls `withdraw()` on **StakingPool**. +**(1b)** `StakingPool` calculates amounts, calls `withdrawNXMStakeAndRewards()` on **TokenController**. +**(1c)** `TokenController` transfers stake and rewards to staker via **NXMToken**. diff --git a/docs/diagrams/user-flows/staking-manager.md b/docs/diagrams/user-flows/staking-manager.md index 498ea449b2..8d3075c628 100644 --- a/docs/diagrams/user-flows/staking-manager.md +++ b/docs/diagrams/user-flows/staking-manager.md @@ -15,21 +15,21 @@ graph TD Cover["Cover"] %% 1. Create Pool - Manager -->|"(1a) createStakingPool()"| SPd - SPd -->|"(1b) create()"| SPF - SPF -->|"(1c) deploys"| SP - SPd -->|"(1d) assignManager"| TCO - SPd -->|"(1e) setInitialProducts"| SP + Manager -->|"**(1a)** createStakingPool()"| SPd + SPd -->|"**(1b)** create()"| SPF + SPF -->|"**(1c)** deploys"| SP + SPd -->|"**(1d)** assignManager"| TCO + SPd -->|"**(1e)** setInitialProducts"| SP %% 2. Update Products - Manager -->|"(2a) setProducts()"| SPd - SPd -->|"(2b) updates weights & prices"| SP + Manager -->|"**(2a)** setProducts()"| SPd + SPd -->|"**(2b)** updates weights & prices"| SP %% 3. Recalculate Weights - Manager -->|"(3a) recalculateEffectiveWeights()"| SPd - SPd -->|"(3b) get capacity ratios"| CP - SPd -->|"(3c) get global capacity"| Cover - SPd -->|"(3d) update effective weights"| SP + Manager -->|"**(3a)** recalculateEffectiveWeights()"| SPd + SPd -->|"**(3b)** get capacity ratios"| CP + SPd -->|"**(3c)** get global capacity"| Cover + SPd -->|"**(3d)** update effective weights"| SP ``` ## Staking Pool Manager Actions @@ -60,27 +60,27 @@ graph TD ## Staking Pool Creation Flow -(1a) **Pool 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. +**(1a)** `Pool 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. --- ## Update Staking Pool Products -(2a) **Pool Manager** calls `setProducts()` on **StakingProducts**. -(2b) **StakingProducts** updates weights and prices in **StakingPool**. +**(2a)** `Pool Manager` calls `setProducts()` on **StakingProducts**. +**(2b)** `StakingProducts` updates weights and prices in **StakingPool**. --- ## Recalculate Effective Weights -(3a) **Pool Manager** calls `recalculateEffectiveWeights()` on **StakingProducts**. -(3b) **StakingProducts** gets capacity reduction ratios from **CoverProducts**. -(3c) **StakingProducts** gets global capacity ratio from **Cover**. -(3d) **StakingProducts** updates effective weights based on: +**(3a)** `Pool Manager` calls `recalculateEffectiveWeights()` on **StakingProducts**. +**(3b)** `StakingProducts` gets capacity reduction ratios from **CoverProducts**. +**(3c)** `StakingProducts` gets global capacity ratio from **Cover**. +**(3d)** `StakingProducts` updates effective weights based on: - Active stake in pool - Global capacity constraints