Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 4 additions & 9 deletions contracts/interfaces/ICover.sol
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ struct PoolAllocationRequest {
struct PoolAllocation {
uint40 poolId;
uint96 coverAmountInNXM;
uint96 premiumInNXM;
}

struct CoverData {
Expand All @@ -51,20 +50,18 @@ struct CoverSegment {
uint32 start;
uint32 period; // seconds
uint16 gracePeriodInDays;
uint16 priceRatio;
bool expired;
uint24 globalRewardsRatio;
}

struct BuyCoverParams {
uint coverId;
address owner;
uint24 productId;
uint8 coverAsset;
uint96 amount;
uint32 period;
uint maxPremiumInAsset;
uint8 paymentAsset;
bool payWithNXM;
uint16 commissionRatio;
address commissionDestination;
string ipfsData;
Expand Down Expand Up @@ -106,7 +103,7 @@ interface ICover {

/* ========== VIEWS ========== */

function coverData(uint id) external view returns (CoverData memory);
function coverData(uint coverId) external view returns (CoverData memory);

function coverSegmentsCount(uint coverId) external view returns (uint);

Expand Down Expand Up @@ -154,7 +151,7 @@ interface ICover {

function setProducts(ProductParam[] calldata params) external;

function performStakeBurn(
function burnStake(
uint coverId,
uint segmentId,
uint amount
Expand All @@ -179,8 +176,6 @@ interface ICover {
event StakingPoolCreated(address stakingPoolAddress, uint poolId, address manager, address stakingPoolImplementation);
event ProductSet(uint id, string ipfsMetadata);
event ProductTypeSet(uint id, string ipfsMetadata);
event CoverBought(uint coverId, uint productId, uint segmentId, address buyer, string ipfsMetadata);
event CoverEdited(uint coverId, uint productId, uint segmentId, address buyer);
event CoverExpired(uint coverId, uint segmentId);
event CoverEdited(uint indexed coverId, uint indexed productId, uint indexed segmentId, address buyer, string ipfsMetadata);
event CoverMigrated(uint oldCoverId, address fromOwner, address newOwner, uint newCoverId);
}
32 changes: 22 additions & 10 deletions contracts/interfaces/IStakingPool.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,30 @@ import "@openzeppelin/contracts-v4/token/ERC721/IERC721.sol";

/* structs for io */

struct CoverRequest {
uint coverId;
struct AllocationRequest {
uint productId;
uint coverId;
uint amount;
uint period;
}

struct AllocationRequestConfig {
uint gracePeriod;
uint globalCapacityRatio;
uint capacityReductionRatio;
uint rewardRatio;
uint globalMinPrice;
}

struct DeallocationRequest {
uint productId;
uint coverId;
uint amount;
uint coverStartTime;
uint period;
uint gracePeriod;
uint premium;
uint rewardRatio;
}

struct WithdrawRequest {
Expand Down Expand Up @@ -98,15 +113,12 @@ interface IStakingPool {

function updateTranches(bool updateUntilCurrentTimestamp) external;

function allocateStake(
CoverRequest calldata request
) external returns (uint allocatedAmount, uint premium, uint rewardsInNXM);
function allocateCapacity(
AllocationRequest calldata request,
AllocationRequestConfig calldata config
) external returns (uint premium);

function deallocateStake(
CoverRequest memory request,
uint coverStartTime,
uint premium
) external;
function deallocateCapacity(DeallocationRequest calldata request) external;

function burnStake(uint productId, uint start, uint period, uint amount) external;

Expand Down
6 changes: 3 additions & 3 deletions contracts/mocks/Claims/CLMockCover.sol
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ contract CLMockCover {
address newOwner;
}

PerformStakeBurnCalledWith public performStakeBurnCalledWith;
PerformStakeBurnCalledWith public burnStakeCalledWith;
MigrateCoverFromOwnerCalledWith public migrateCoverFromOwnerCalledWith;
CoverData[] public coverData;
mapping(uint => CoverSegment[]) _coverSegments;
Expand Down Expand Up @@ -133,8 +133,8 @@ contract CLMockCover {
}
}

function performStakeBurn(uint coverId, uint segmentId, uint amount) external returns (address) {
performStakeBurnCalledWith = PerformStakeBurnCalledWith(coverId, segmentId, amount);
function burnStake(uint coverId, uint segmentId, uint amount) external returns (address) {
burnStakeCalledWith = PerformStakeBurnCalledWith(coverId, segmentId, amount);
return coverNFT.ownerOf(coverId);
}

Expand Down
26 changes: 6 additions & 20 deletions contracts/mocks/Cover/CoverMockStakingPool.sol
Original file line number Diff line number Diff line change
Expand Up @@ -65,34 +65,20 @@ contract CoverMockStakingPool is IStakingPool, ERC721Mock {
poolId = _poolId;
}


function operatorTransferFrom(address from, address to, uint256 amount) external /*override*/ {
require(msg.sender == memberRoles, "StakingPool: Caller is not MemberRoles");
_operatorTransferFrom(from, to, amount);
}


function allocateStake(
CoverRequest calldata request
) external override returns (uint allocatedAmount, uint premium, uint rewardsInNXM) {

function allocateCapacity(
AllocationRequest calldata request,
AllocationRequestConfig calldata /*config*/
) external override returns (uint premium) {
usedCapacity[request.productId] += request.amount;

premium = calculatePremium(mockPrices[request.productId], request.amount, request.period);

return (
request.amount,
premium,
premium * request.rewardRatio / REWARDS_DENOMINATOR
);
return calculatePremium(mockPrices[request.productId], request.amount, request.period);
}

function deallocateStake(
CoverRequest memory /*request*/,
uint /*coverStartTime*/,
uint /*premium*/
) external {
}
function deallocateCapacity(DeallocationRequest memory /*request*/) external {}

function setProducts(StakedProductParam[] memory params) external {
totalSupply = totalSupply;
Expand Down
6 changes: 3 additions & 3 deletions contracts/mocks/Incidents/ICMockCover.sol
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ contract ICMockCover {
IERC721Mock public immutable coverNFT;

CoverData[] public coverData;
PerformStakeBurnCalledWith public performStakeBurnCalledWith;
PerformStakeBurnCalledWith public burnStakeCalledWith;
mapping(uint => CoverSegment[]) _coverSegments;

mapping(uint => PoolAllocation[]) poolAllocations;
Expand Down Expand Up @@ -132,8 +132,8 @@ contract ICMockCover {
}


function performStakeBurn(uint coverId, uint segmentId, uint amount) external returns (address) {
performStakeBurnCalledWith = PerformStakeBurnCalledWith(coverId, segmentId, amount);
function burnStake(uint coverId, uint segmentId, uint amount) external returns (address) {
burnStakeCalledWith = PerformStakeBurnCalledWith(coverId, segmentId, amount);
return coverNFT.ownerOf(coverId);
}
}
2 changes: 1 addition & 1 deletion contracts/mocks/Pool/P1MockSwapOperator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import "@openzeppelin/contracts/token/ERC20/ERC20Mintable.sol";

contract P1MockSwapOperator {

function orderInProgress() public returns (bool) {
function orderInProgress() public pure returns (bool) {
return false;
}
}
34 changes: 19 additions & 15 deletions contracts/mocks/StakingPool/SPMockCover.sol
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,18 @@ contract SPMockCover {
uint public constant GLOBAL_MIN_PRICE_RATIO = 100; // 1%

mapping(uint => address) public stakingPool;
mapping(uint256 => Product) public products;
mapping(uint256 => ProductType) public productTypes;
mapping(uint => Product) public products;
mapping(uint => ProductType) public productTypes;

function setStakingPool(address addr, uint id) public {
stakingPool[id] = addr;
}

function setProduct(Product memory product, uint256 id) public {
function setProduct(Product memory product, uint id) public {
products[id] = product;
}

function setProductType(ProductType calldata product, uint256 id) public {
function setProductType(ProductType calldata product, uint id) public {
productTypes[id] = product;
}

Expand All @@ -51,22 +51,26 @@ contract SPMockCover {

function allocateCapacity(
BuyCoverParams memory params,
uint256 coverId,
uint coverId,
IStakingPool _stakingPool
) public returns (uint256 coveredAmountInNXM, uint256 premiumInNXM, uint256 rewardsInNXM) {
) public returns (uint premium) {

Product memory product = products[params.productId];
uint256 gracePeriod = uint256(productTypes[product.productType].gracePeriodInDays) * 1 days;
uint gracePeriod = uint(productTypes[product.productType].gracePeriodInDays) * 1 days;

return _stakingPool.allocateStake(
CoverRequest(
coverId,
return _stakingPool.allocateCapacity(
AllocationRequest(
params.productId,
coverId,
params.amount,
params.period,
params.period
),
AllocationRequestConfig(
gracePeriod,
globalCapacityRatio,
product.capacityReductionRatio,
globalRewardsRatio
globalRewardsRatio,
GLOBAL_MIN_PRICE_RATIO
)
);
}
Expand All @@ -75,10 +79,10 @@ contract SPMockCover {
address staking_,
address _manager,
bool _isPrivatePool,
uint256 _initialPoolFee,
uint256 _maxPoolFee,
uint _initialPoolFee,
uint _maxPoolFee,
ProductInitializationParams[] memory params,
uint256 _poolId
uint _poolId
) external {

for (uint i = 0; i < params.length; i++) {
Expand Down
2 changes: 1 addition & 1 deletion contracts/modules/assessment/IndividualClaims.sol
Original file line number Diff line number Diff line change
Expand Up @@ -359,7 +359,7 @@ contract IndividualClaims is IIndividualClaims, MasterAwareV2 {
require(!claim.payoutRedeemed, "Payout has already been redeemed");
claims[claimId].payoutRedeemed = true;

address payable coverOwner = payable(cover().performStakeBurn(
address payable coverOwner = payable(cover().burnStake(
claim.coverId,
claim.segmentId,
claim.amount
Expand Down
2 changes: 1 addition & 1 deletion contracts/modules/assessment/YieldTokenIncidents.sol
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ contract YieldTokenIncidents is IYieldTokenIncidents, MasterAwareV2 {
require(payoutAmount <= coverSegment.amount, "Payout exceeds covered amount");
}

coverContract.performStakeBurn(coverId, segmentId, payoutAmount);
coverContract.burnStake(coverId, segmentId, payoutAmount);

if (optionalParams.length > 0) { // Skip the permit call when it is not provided
(
Expand Down
Loading