CoolerFactory
Title: Cooler Loans Factory.
The Cooler Factory creates new Cooler escrow contracts.
This contract uses Clones (https://github.com/wighawag/clones-with-immutable-args) to save gas on deployment.
Constants
coolerImplementation
Cooler reference implementation (deployed on creation to clone from).
Cooler public immutable coolerImplementation;
State Variables
created
Mapping to validate deployed coolers.
mapping(address => bool) public created;
coolerFor
Mapping to prevent duplicate coolers.
mapping(address => mapping(ERC20 => mapping(ERC20 => address))) private coolerFor;
coolersFor
Mapping to query Coolers for Collateral-Debt pair.
mapping(ERC20 => mapping(ERC20 => address[])) public coolersFor;
Functions
constructor
constructor();
generateCooler
creates a new Escrow contract for collateral and debt tokens.
function generateCooler(ERC20 collateral_, ERC20 debt_) external returns (address cooler);
Parameters
| Name | Type | Description |
|---|---|---|
| collateral_ | ERC20 | the token given as collateral. |
| debt_ | ERC20 | the token to be lent. Interest is denominated in debt tokens. |
Returns
| Name | Type | Description |
|---|---|---|
| cooler | address | address of the contract. |
onlyFromFactory
Ensure that the called is a Cooler.
modifier onlyFromFactory();
logRequestLoan
Emit a global event when a new loan request is created.
function logRequestLoan(uint256 reqID_) external onlyFromFactory;
Parameters
| Name | Type | Description |
|---|---|---|
| reqID_ | uint256 |
logRescindRequest
Emit a global event when a loan request is rescinded.
function logRescindRequest(uint256 reqID_) external onlyFromFactory;
Parameters
| Name | Type | Description |
|---|---|---|
| reqID_ | uint256 |
logClearRequest
Emit a global event when a loan request is fulfilled.
function logClearRequest(uint256 reqID_, uint256 loanID_) external onlyFromFactory;
Parameters
| Name | Type | Description |
|---|---|---|
| reqID_ | uint256 | |
| loanID_ | uint256 |
logRepayLoan
Emit a global event when a loan is repaid.
function logRepayLoan(uint256 loanID_, uint256 repayment_) external onlyFromFactory;
Parameters
| Name | Type | Description |
|---|---|---|
| loanID_ | uint256 | |
| repayment_ | uint256 |
logExtendLoan
Emit a global event when a loan is extended.
function logExtendLoan(uint256 loanID_, uint8 times_) external onlyFromFactory;
Parameters
| Name | Type | Description |
|---|---|---|
| loanID_ | uint256 | |
| times_ | uint8 |
logDefaultLoan
Emit a global event when the collateral of defaulted loan is claimed.
function logDefaultLoan(uint256 loanID_, uint256 collateral_) external onlyFromFactory;
Parameters
| Name | Type | Description |
|---|---|---|
| loanID_ | uint256 | |
| collateral_ | uint256 |
getCoolerFor
Getter function to get an existing cooler for a given user <> collateral <> debt combination.
function getCoolerFor(
address user_,
address collateral_,
address debt_
) public view returns (address);
Parameters
| Name | Type | Description |
|---|---|---|
| user_ | address | |
| collateral_ | address | |
| debt_ | address |
Returns
| Name | Type | Description |
|---|---|---|
| <none> | address |
Events
RequestLoan
A global event when a new loan request is created.
event RequestLoan(address indexed cooler, address collateral, address debt, uint256 reqID);
Parameters
| Name | Type | Description |
|---|---|---|
| cooler | address | |
| collateral | address | |
| debt | address | |
| reqID | uint256 |
RescindRequest
A global event when a loan request is rescinded.
event RescindRequest(address indexed cooler, uint256 reqID);
Parameters
| Name | Type | Description |
|---|---|---|
| cooler | address | |
| reqID | uint256 |
ClearRequest
A global event when a loan request is fulfilled.
event ClearRequest(address indexed cooler, uint256 reqID, uint256 loanID);
Parameters
| Name | Type | Description |
|---|---|---|
| cooler | address | |
| reqID | uint256 | |
| loanID | uint256 |
RepayLoan
A global event when a loan is repaid.
event RepayLoan(address indexed cooler, uint256 loanID, uint256 amount);
Parameters
| Name | Type | Description |
|---|---|---|
| cooler | address | |
| loanID | uint256 | |
| amount | uint256 |
ExtendLoan
A global event when a loan is extended.
event ExtendLoan(address indexed cooler, uint256 loanID, uint8 times);
Parameters
| Name | Type | Description |
|---|---|---|
| cooler | address | |
| loanID | uint256 | |
| times | uint8 |
DefaultLoan
A global event when the collateral of defaulted loan is claimed.
event DefaultLoan(address indexed cooler, uint256 loanID, uint256 amount);
Parameters
| Name | Type | Description |
|---|---|---|
| cooler | address | |
| loanID | uint256 | |
| amount | uint256 |
Errors
NotFromFactory
error NotFromFactory();
DecimalsNot18
error DecimalsNot18();