CoolerFactory
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.
State Variables
coolerImplementation
Cooler reference implementation (deployed on creation to clone from).
Cooler public immutable coolerImplementation;
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;
logRescindRequest
Emit a global event when a loan request is rescinded.
function logRescindRequest(uint256 reqID_) external onlyFromFactory;
logClearRequest
Emit a global event when a loan request is fulfilled.
function logClearRequest(uint256 reqID_, uint256 loanID_) external onlyFromFactory;
logRepayLoan
Emit a global event when a loan is repaid.
function logRepayLoan(uint256 loanID_, uint256 repayment_) external onlyFromFactory;
logExtendLoan
Emit a global event when a loan is extended.
function logExtendLoan(uint256 loanID_, uint8 times_) external onlyFromFactory;
logDefaultLoan
Emit a global event when the collateral of defaulted loan is claimed.
function logDefaultLoan(uint256 loanID_, uint256 collateral_) external onlyFromFactory;
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);
Events
RequestLoan
A global event when a new loan request is created.
event RequestLoan(address indexed cooler, address collateral, address debt, uint256 reqID);
RescindRequest
A global event when a loan request is rescinded.
event RescindRequest(address indexed cooler, uint256 reqID);
ClearRequest
A global event when a loan request is fulfilled.
event ClearRequest(address indexed cooler, uint256 reqID, uint256 loanID);
RepayLoan
A global event when a loan is repaid.
event RepayLoan(address indexed cooler, uint256 loanID, uint256 amount);
ExtendLoan
A global event when a loan is extended.
event ExtendLoan(address indexed cooler, uint256 loanID, uint8 times);
DefaultLoan
A global event when the collateral of defaulted loan is claimed.
event DefaultLoan(address indexed cooler, uint256 loanID, uint256 amount);
Errors
NotFromFactory
error NotFromFactory();
DecimalsNot18
error DecimalsNot18();