Get list of whitelisted policies
First import interfaces
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;
pragma experimental ABIEncoderV2;
interface IContractsRegistry {
function getPolicyBookRegistryContract() external view returns (address);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;
interface IPolicyBookFabric {
enum ContractType {
CONTRACT,
STABLECOIN,
SERVICE,
EXCHANGE,
VARIOUS
}
}
pragma solidity ^0.7.4;
pragma experimental ABIEncoderV2;
import "./IPolicyBookFabric.sol";
interface IPolicyBookRegistry {
struct PolicyBookStats {
string symbol;
address insuredContract;
IPolicyBookFabric.ContractType contractType;
uint256 maxCapacity;
uint256 totalSTBLLiquidity;
uint256 stakedSTBL;
uint256 APY;
uint256 annualInsuranceCost;
uint256 bmiXRatio;
bool whitelisted;
}
function countWhitelisted() external view returns (uint256);
function listWithStatsWhitelisted(uint256 offset, uint256 limit)
external
view
returns (address[] memory _policyBooksArr, PolicyBookStats[] memory _stats);
}
Then insert this code
function getWhiteListedPolicies()
public
view
returns (address[] memory _policyBooksArr, IPolicyBookRegistry.PolicyBookStats[] memory _stats)
{
// SET UP
address contractRegistryAddress = "0x8050c5a46FC224E3BCfa5D7B7cBacB1e4010118d";
IContractRegistry contractRegistry = IContractsRegistry(contractRegistryAddress);
IPolicyBookRegistry policyBookRegistry = IPolicyBookRegistry(contractRegistry.getPolicyBookRegistryContract());
​
// FUNCTION CALL
uint256 countWhiteListed = policyBookRegistry.countWhitelisted();
return policyBookRegistry.listWithStatsWhitelisted(0, countWhiteListed);
}
Returns
List of whitelisted policies
IPolicyBookRegistry.PolicyBookStats[]
The array of policies stats (struct PolicyBookStats)
Arguments
None
Purchase policy
Before calling this function the msg.sender
should approve the address(this)
to spend the totalPrice
get by the following method in PolicyBook.sol:
(uint256 totalSeconds, uint256 totalPrice) = getPolicyPrice(_epochsNumber, _coverTokens, msg.sender)
converted in stblPrice:
uint256 stblPrice = totalPrice / 10**12;
First import interfaces
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;
pragma experimental ABIEncoderV2;
interface IPolicyBookFacade {
function buyPolicyFromDistributorFor(
address _buyer,
uint256 _epochsNumber,
uint256 _coverTokens
) external;
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;
pragma experimental ABIEncoderV2;
import "./IPolicyBookFacade.sol";
interface IPolicyBook {
function policyBookFacade() external view returns (IPolicyBookFacade);
function getPolicyPrice(
uint256 _epochsNumber,
uint256 _coverTokens,
address _buyer
) external view returns (uint256 totalSeconds, uint256 totalPrice);
}
Then insert this code
function purchasePolicy(
address policyBookAddress,
uint256 _epochsNumber,
uint256 _coverTokens,
address _distributor
) public {
// SET UP
IPolicyBook policyBook = IPolicyBook(policyBookAddress);
IPolicyBookFacade policyBookFacade = policyBook.policyBookFacade();
stablecoin = ERC20(contractRegistry.getUSDTContract());
// FUNCTION CALL
(, uint256 totalPrice) = policyBook.getPolicyPrice(_epochsNumber, _coverTokens, msg.sender);
uint256 stblPrice = totalPrice / 10**12;
stablecoin.safeTransferFrom(msg.sender, address(this), stblPrice);
stablecoin.approve(address(policyBook), stblPrice)
policyBookFacade.buyPolicyFromDistributorFor(
msg.sender,
_epochsNumber,
_coverTokens,
_distributor
);
}
Returns
None
Arguments
The address of the chosen policy
The period policy will cover
The amount paid for the coverage
The address of the distributor if it was sold by a distributor, he will get a fee
Get list of purchased policies
First import interfaces
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;
pragma experimental ABIEncoderV2;
interface IContractsRegistry {
function getPolicyRegistryContract() external view returns (address);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;
pragma experimental ABIEncoderV2;
interface IClaimingRegistry {
enum ClaimStatus {
CAN_CLAIM,
UNCLAIMABLE,
PENDING,
AWAITING_CALCULATION,
REJECTED_CAN_APPEAL,
REJECTED,
ACCEPTED
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;
pragma experimental ABIEncoderV2;
import "./IClaimingRegistry.sol";
interface IPolicyRegistry {
struct PolicyInfo {
uint256 coverAmount;
uint256 premium;
uint256 startTime;
uint256 endTime;
}
function getPoliciesLength(address _userAddr) external view returns (uint256);
function getPoliciesInfo(address _userAddr, bool _isActive, uint256 _offset, uint256 _limit)
external
view
returns (
uint256 _policiesCount,
address[] memory _policyBooksArr,
PolicyInfo[] memory _policies,
IClaimingRegistry.ClaimStatus[] memory _policyStatuses
);
}
Then insert this code
function getPurchasedPolicies(bool _isActive)
public
view
returns (
uint256 _policiesCount,
address[] memory _policyBooksArr,
IPolicyRegistry.PolicyInfo[] memory _policies,
IClaimingRegistry.ClaimStatus[] memory _policyStatuses
)
{
// SET UP
address contractRegistryAddress = "0x8050c5a46FC224E3BCfa5D7B7cBacB1e4010118d";
IContractRegistry contractRegistry = IContractsRegistry(contractRegistryAddress);
IPolicyRegistry policyRegistry = IPolicyRegistry(
contractRegistry.getPolicyRegistryContract()
);
// FUNCTION CALL
uint256 count = policyRegistry.getPoliciesLength(msg.sender);
return policyRegistry.getPoliciesInfo(msg.sender, _isActive, 0, count);
}
Returns
The number of police in the array
The array of policy books addresses
IPolicyRegistry.PolicyInfo[]
The array of policies info (struct PolicyInfo)
IClaimingRegistry.ClaimStatus[]
The array of status of claim (enum ClaimStatus)
Arguments
If true, returns an array with information about active policies, if false, about inactive
Earn interest
Before calling this function the msg.sender
should approve the address(this)
to spend the _liquidityAmount
converted in stblAmount
uint256 stblAmount = _liquidityAmount / 10**12;
First import interfaces
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;
pragma experimental ABIEncoderV2;
interface IPolicyBookFacade {
function addLiquidityFromDistributorFor(
address _user,
uint256 _liquidityAmount
) external;
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;
pragma experimental ABIEncoderV2;
import "./IPolicyBookFacade.sol";
interface IPolicyBook {
function policyBookFacade() external view returns (IPolicyBookFacade);
}
Then insert this code
function earnInterest(address policyBookAddress, uint256 _liquidityAmount) public {
// SET UP
IPolicyBook policyBook = IPolicyBook(policyBookAddress);
IPolicyBookFacade policyBookFacade = policyBook.policyBookFacade();
stablecoin = ERC20(contractRegistry.getUSDTContract());
// FUNCTION CALL
uint256 stblAmount = _liquidityAmount / 10**12;
stablecoin.safeTransferFrom(msg.sender, address(this), stblAmount);
stablecoin.approve(address(policyBook), stblAmount)
policyBookFacade.addLiquidityFromDistributorFor(msg.sender, _liquidityAmount);
}
Returns
None
Arguments
The address of the chosen policy
The amount of coverage provision