| pragma solidity ^0.8.0;
|
| import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
| import "./CreditOracle.sol";
|
|
|
| contract AutomatedLendingPool {
|
| IERC20 public immutable token;
|
| CreditOracle public immutable creditOracle;
|
|
|
| struct Loan {
|
| uint256 amount;
|
| uint256 interest;
|
| uint256 dueDate;
|
| }
|
|
|
| mapping(address => Loan) public loans;
|
|
|
| constructor(address _token, address _creditOracle) {
|
| token = IERC20(_token);
|
| creditOracle = CreditOracle(_creditOracle);
|
| }
|
|
|
| function requestLoan(uint256 amount) external {
|
| require(loans[msg.sender].amount == 0, "Existing loan must be repaid");
|
| bytes32 requestId = creditOracle.requestCreditScore(msg.sender);
|
|
|
| }
|
|
|
| function repayLoan() external {
|
| Loan storage loan = loans[msg.sender];
|
| require(loan.amount > 0, "No active loan");
|
| uint256 totalDue = loan.amount + loan.interest;
|
| require(token.transferFrom(msg.sender, address(this), totalDue), "Transfer failed");
|
| delete loans[msg.sender];
|
| }
|
| } |