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 |